[Duda] KillStreak
#1

Bueno, querнa hacer un killstreak en textdraw, pero tengo algunas dudas, veamos:

En OnPlayerDeath actualmente lo hice asн:

Код:
new kil[200],n[24];
    GetPlayerName(killerid, n, 24);
    if(kills[killerid] == 2)
    {
    format(kil,200,"~b~%s ~w~double kill",n,kills[killerid]);
    GameTextForAll(kil, 3000, 5);
    GivePlayerMoney(killerid, 1000);

    }
    if(kills[killerid] == 3)
    {
    format(kil,200,"~b~%s ~w~tres kills",n,kills[killerid]);
    GameTextForAll(kil, 3000, 5);
    GivePlayerMoney(killerid, 1500);
    }
    if(kills[killerid] >= 4)
    {
    format(kil,200,"~b~%s ~w~cuatro kills",n,kills[killerid]);
    GameTextForAll(kil, 3000, 5);
    GivePlayerMoney(killerid, 2000);
    }
	return 1;
    }
Y tengo este textdraw:

Код:
Textdraw0 = TextDrawCreate(252.000000, 339.000000, "NombrePlayer triple kill");
	TextDrawBackgroundColor(Textdraw0, 255);
	TextDrawFont(Textdraw0, 2);
	TextDrawLetterSize(Textdraw0, 0.250000, 1.000000);
	TextDrawColor(Textdraw0, -1);
	TextDrawSetOutline(Textdraw0, 0);
	TextDrawSetProportional(Textdraw0, 1);
	TextDrawSetShadow(Textdraw0, 1);
Lo que quiero hacer es que aparezca un textdraw cuando un jugador hago doble kill, triple kill, etc, pero necesito saber cуmo hacer para que si dos jugadores hacen doble kill a la vez aparezcan los dos textdraws y luego se quiten.

Tipo asн:

Player1 double kill.
Player2 double kill.
Player3 triple kill.
Reply
#2

Por lo que entendн si 2 jugadores hacen doble kill a la vez tendrнas que agregar una variable, un timer y un public para ejecutar la funciуn del TextDraw.
Reply
#3

Desde mi opiniуn no serнa correcto hacer eso ya que te podrнa llenar la pantalla de texto...texto....texto.....texto Sн, pepito hizo doble kill todo sabrбn con el textdraw, pero hubo otros que hicieron triple kill, una muerte, cuatro muerte ((Ejemplo)).

Como dice arriba, serнa poner que por cada reconocimiento de muerte ponga en cola el textdraw y los cumpla por el timer.
Reply
#4

їMe puedes dar algъn ejemplo?
Reply
#5

No sй los demбs pero mi tйcnica serнa esta:
pawn Код:
new
    Text:ks_A,
    Text:ks_B,
    Text:ks_C,
    ks_gTimer[3],
    ks_gUltimoActualizado
;

public OnGameModeInit() {
    //---Aquн tus TextDraws globales.
    ks_A = TextDrawCreate(.................);
    ks_B = TextDrawCreate(.................);
    ks_C = TextDrawCreate(.................);
    return 1;
}

/* Luego siguiendo tu modelo en OnPlayerDeath */
    new
        cadena[128],
        nombre[MAX_PLAYER_NAME]
    ;
    GetPlayerName(killerid, n, 24);
    if(kills[killerid] >= 2) {
        ks_gUltimoActualizado++;

        format(cadena, 128,
            "~b~%s ~w~%s",
            nombre,
            TextoBaja(kills[killerid])
        );
        switch(ks_gUltimoActualizado) {
            case 1: {
                KillTimer(ks_gTimer[0]);
                TextDrawSetString(A, cadena); //Lo ponemos en el primer TextDraw el mensaje.
                TextDrawShowForAll(A); //Lo mostramos a todo el mundo.
                ks_gTimer[0] = SetTimerEx("EsconderNotificacion", 2000, false, "i", 0);
            }
            case 2: {
                KillTimer(ks_gTimer[1]);
                TextDrawSetString(B, cadena); //Lo ponemos en el segundo TextDraw el mensaje.
                TextDrawShowForAll(B); //Lo mostramos a todo el mundo.
                ks_gTimer[1] = SetTimerEx("EsconderNotificacion", 2000, false, "i", 1);
            }
            case 3: {
                KillTimer(ks_gTimer[2]);
                TextDrawSetString(C, cadena); //Lo ponemos en el tercer TextDraw el mensaje.
                TextDrawShowForAll(C); //Lo mostramos a todo el mundo.
                ks_gTimer[2] = SetTimerEx("EsconderNotificacion", 2000, false, "i", 2);
                ks_gUltimoActualizado = 0;
                /* Ponemos la variable en 0, ya que cuando lleguemos al TextDraw C no habrб mбs sitio y vuelve a empezar desde el TextDraw A */
            }
        }
    }


/* Funciуn para esconder el mensaje despuйs de dos segundos */
forward EsconderNotificacion(numero);
public EsconderNotificacion(numero) {
    switch(numero) {
        case 0: TextDrawHideForAll(A);
        case 1: TextDrawHideForAll(B);
        case 2: TextDrawHideForAll(C);
    }
    return 1;
}

/* Esta funciуn para facilitar un poco las cosas */
stock TextoBaja(numero) {
    new msg[100];
    switch(numero) {
        case 2: msg = "Racha de dos bajas";
        case 3: msg = "Racha de tres bajas";
        case 4: msg = "Racha de cuatro bajas";
        /* Puedes poner todos los 'case' que quieras. */
    }
    return msg;
}
Deberнa funcionar, no lo he probado, si tienes alguna duda, Ўpregunta!

Saludos.
Reply
#6

Quote:
Originally Posted by [DOG]irinel1996
Посмотреть сообщение
No sй los demбs pero mi tйcnica serнa esta:
pawn Код:
new
    Text:ks_A,
    Text:ks_B,
    Text:ks_C,
    ks_gTimer[3],
    ks_gUltimoActualizado
;

public OnGameModeInit() {
    //---Aquн tus TextDraws globales.
    ks_A = TextDrawCreate(.................);
    ks_B = TextDrawCreate(.................);
    ks_C = TextDrawCreate(.................);
    return 1;
}

/* Luego siguiendo tu modelo en OnPlayerDeath */
    new
        cadena[128],
        nombre[MAX_PLAYER_NAME]
    ;
    GetPlayerName(killerid, n, 24);
    if(kills[killerid] >= 2) {
        ks_gUltimoActualizado++;

        format(cadena, 128,
            "~b~%s ~w~%s",
            nombre,
            TextoBaja(kills[killerid])
        );
        switch(ks_gUltimoActualizado) {
            case 1: {
                KillTimer(ks_gTimer[0]);
                TextDrawSetString(A, cadena); //Lo ponemos en el primer TextDraw el mensaje.
                TextDrawShowForAll(A); //Lo mostramos a todo el mundo.
                ks_gTimer[0] = SetTimerEx("EsconderNotificacion", 2000, false, "i", 0);
            }
            case 2: {
                KillTimer(ks_gTimer[1]);
                TextDrawSetString(B, cadena); //Lo ponemos en el segundo TextDraw el mensaje.
                TextDrawShowForAll(B); //Lo mostramos a todo el mundo.
                ks_gTimer[1] = SetTimerEx("EsconderNotificacion", 2000, false, "i", 1);
            }
            case 3: {
                KillTimer(ks_gTimer[2]);
                TextDrawSetString(C, cadena); //Lo ponemos en el tercer TextDraw el mensaje.
                TextDrawShowForAll(C); //Lo mostramos a todo el mundo.
                ks_gTimer[2] = SetTimerEx("EsconderNotificacion", 2000, false, "i", 2);
                ks_gUltimoActualizado = 0;
                /* Ponemos la variable en 0, ya que cuando lleguemos al TextDraw C no habrб mбs sitio y vuelve a empezar desde el TextDraw A */
            }
        }
    }


/* Funciуn para esconder el mensaje despuйs de dos segundos */
forward EsconderNotificacion(numero);
public EsconderNotificacion(numero) {
    switch(numero) {
        case 0: TextDrawHideForAll(A);
        case 1: TextDrawHideForAll(B);
        case 2: TextDrawHideForAll(C);
    }
    return 1;
}

/* Esta funciуn para facilitar un poco las cosas */
stock TextoBaja(numero) {
    new msg[100];
    switch(numero) {
        case 2: msg = "Racha de dos bajas";
        case 3: msg = "Racha de tres bajas";
        case 4: msg = "Racha de cuatro bajas";
        /* Puedes poner todos los 'case' que quieras. */
    }
    return msg;
}
Deberнa funcionar, no lo he probado, si tienes alguna duda, Ўpregunta!

Saludos.
Quedу bien armado.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)