OnPlayerDeath..
#1

Tengo una duda de como acomodar este cуdigo, hago test pero si muere por alguna otra razуn quй no sea el killerid no setea la variable(DueloActivo.) ї devo usar invalid_player_id ?.

pawn Код:
public OnPlayerDeath(playerid, killerid, reason)
{
    if(PlayerInfo[playerid][EnDuelo] == 1)
    {
        new Float:vida[2];
        GetPlayerHealth(playerid,vida[0]);
        GetPlayerArmour(playerid, vida[1]);
       
        if(vida[1] >= 1.0)
        {
            format(iMessage, sizeof(iMessage), "%s ha ganado el duelo a %s con %02d de vida y %02d de chaleco.", Nombre(killerid), Nombre(playerid), vida[0], vida[1]);
            SendClientMessageToAll(Amarillo, iMessage);
        }
        else if(vida[0] <= 100.0)
        {
            format(iMessage, sizeof(iMessage), "%s ha ganado el duelo a %s con %02d de vida.", Nombre(killerid), Nombre(playerid), vida[0]);
            SendClientMessageToAll(Amarillo, iMessage);
        }
        PlayerInfo[killerid][DueloScore]++;
        PlayerInfo[killerid][Dueloid] = 999;
        PlayerInfo[playerid][DueloPerdido]++;
        PlayerInfo[playerid][EnDuelo] = 0;
        PlayerInfo[killerid][EnDuelo] = 1;
        DueloActivo = false;
        SpawnPlayer(killerid);
    }
    return 1;
}
Reply
#2

Lo que quiere es que cuando el jugador muera ya se por que lo mataron o murio por otra razon esto ponga tu variable en DueloActivo = false; si es asi prueba aser esto

Код:
 public OnPlayerDeath(playerid, killerid, reason)
{
DueloActivo = false;  
Aqui va lo demas que tienes
Reply
#3

Siempre tienes que chequear que killerid no sea INVALID_PLAYER_ID en OnPlayerDeath, si no, la funcion deja de procesar.
(Source)

pawn Код:
public OnPlayerDeath(playerid, killerid, reason)
{
    if(PlayerInfo[playerid][EnDuelo] == 1)
    {
        new Float:vida[2];
        GetPlayerHealth(playerid,vida[0]);
        GetPlayerArmour(playerid, vida[1]);

        if(vida[1] >= 1.0)
        {
            format(iMessage, sizeof(iMessage), "%s ha ganado el duelo a %s con %02d de vida y %02d de chaleco.", Nombre(killerid), Nombre(playerid), vida[0], vida[1]);
            SendClientMessageToAll(Amarillo, iMessage);
        }
        else if(vida[0] <= 100.0)
        {
            format(iMessage, sizeof(iMessage), "%s ha ganado el duelo a %s con %02d de vida.", Nombre(killerid), Nombre(playerid), vida[0]);
            SendClientMessageToAll(Amarillo, iMessage);
        }
        if(killerid != INVALID_PLAYER_ID)
        {
            PlayerInfo[killerid][DueloScore]++;
            PlayerInfo[killerid][Dueloid] = 999;
            PlayerInfo[killerid][EnDuelo] = 1;
            SpawnPlayer(killerid);
        }
        PlayerInfo[playerid][DueloPerdido]++;
        PlayerInfo[playerid][EnDuelo] = 0;
        DueloActivo = false;
    }
    return 1;
}
Reply
#4

Quote:
Originally Posted by gaara13
Посмотреть сообщение
Lo que quiere..[/code]
No amigo, eso me daria errores y crash a los jugadores, tengo entendido quй tienes quй comprobar si killerid es valido de lo contrario puede haber problemas, antes lo hacia igual ya quй asн biene por defecto en 'pawn.exe' pero es necesario comprobar si es player valido.

Quote:
Originally Posted by Onfroi
Посмотреть сообщение
Siempre tienes que chequear que killerid no sea INVALID_PLAYER_ID..
Gracias, a eso iba yo, pero tengo una duda, es-quй ese sistema de duelos lo estoy haciendo yo pero mm lo hice primero en un filterscript y tengo una duda si al meterlo a mi gamemode puedo comprobar mбs de 1 vez eso ? mira aparte de mis stats, lo iba hacer desde un principio tal y como me lo pusiste pero no-sй si se pueda comprobar mбs de una vez, lo acomode asн:

pawn Код:
public OnPlayerDeath(playerid, killerid, reason)
{
    SendDeathMessage(killerid, playerid, reason);

    if(killerid != INVALID_PLAYER_ID)
    {
        PlayerInfo[killerid][Matados]++;
        PlayerInfo[killerid][ScoreDM]++;
    }
    PlayerInfo[playerid][Muertes]++;

    if(PlayerInfo[playerid][EnDuelo] == 1)
    {
        if(killerid != INVALID_PLAYER_ID)
        {
            PlayerInfo[killerid][DueloScore]++;
            PlayerInfo[killerid][Dueloid] = 999;
            PlayerInfo[killerid][EnDuelo] = 0;
            SpawnPlayer(killerid);

            new Float:vida[2];
            GetPlayerHealth(playerid, vida[0]);
            GetPlayerArmour(playerid, vida[1]);

            if(vida[1] >= 0.1)
            {
                format(iMessage, sizeof(iMessage), "%s ha ganado el duelo a %s con %02d de vida y %02d de chaleco.", Nombre(killerid), Nombre(playerid), vida[0], vida[1]);
                SendClientMessageToAll(Amarillo, iMessage);
            }
            else if(vida[0] <= 100.0)
            {
                format(iMessage, sizeof(iMessage), "%s ha ganado el duelo a %s con %02d de vida.", Nombre(killerid), Nombre(playerid), vida[0]);
                SendClientMessageToAll(Amarillo, iMessage);
            }
        }
        PlayerInfo[playerid][DueloPerdido]++;
        PlayerInfo[playerid][EnDuelo] = 0;
        DueloActivo = false;
    }
    return 1;
}

ї Aparte de eso eso sumara al killerid si es player invalido ?

pawn Код:
if(killerid != INVALID_PLAYER_ID)
        {
            PlayerInfo[killerid][DueloScore]++; // No deberнa agregar esto abajo si es invalid player id el que segun es killerid no seteara las variables ??.
            PlayerInfo[killerid][Dueloid] = 999;
            PlayerInfo[killerid][EnDuelo] = 0;
            SpawnPlayer(killerid);
        }
        PlayerInfo[playerid][DueloPerdido]++;
        PlayerInfo[playerid][EnDuelo] = 0;
        DueloActivo = false;
    }
Reply
#5

Que pasarнa si el jugador se suicidarнa (no lo matу nadie?) el otro jugador se queda, y no chequea nada. asн que deberнas de cuando el jugador muera por alguna otra razуn, hacer un else y decirle al servidor que automaticamente el otro gano porque el otro se suicidio o no sй

pawn Код:
if(killerid != INVALID_PLAYER_ID)
{
    // si es diferente de INVALID_player_ID
}
else
{
    // si murio por causa de un suicidio o algo que no sea un jugador. (aquн puedes poner que el jugador tal tal gano porque el otro se suicidу.
}
Reply
#6

Quote:
Originally Posted by Adoniiz
Посмотреть сообщение
Que pasarнa si el jugador se suicidarнa..
Si, si pero eso es lo que quiero saber como compruebo al quй seria el killerid en suicidio para setear las variables en el, puedo usar un bucle , asн :

PD: Gracias

pawn Код:
public OnPlayerDeath(playerid, killerid, reason)
{
    SendDeathMessage(killerid, playerid, reason);

    if(killerid != INVALID_PLAYER_ID)
    {
        PlayerInfo[killerid][Matados]++;
        PlayerInfo[killerid][ScoreDM]++;
    }
    PlayerInfo[playerid][Muertes]++;

    if(PlayerInfo[playerid][EnDuelo] == 1)
    {
        new Float:vida[2];
        GetPlayerHealth(playerid, vida[0]);
        GetPlayerArmour(playerid, vida[1]);
       
        if(killerid != INVALID_PLAYER_ID)
        {
            PlayerInfo[killerid][DueloScore]++;
            PlayerInfo[killerid][Dueloid] = 999;
            PlayerInfo[killerid][EnDuelo] = 0;
            SpawnPlayer(killerid);

            if(vida[1] >= 0.1)
            {
                format(iMessage, sizeof(iMessage), "%s ha ganado el duelo a %s con %.2f de vida y %.2f de chaleco.", Nombre(killerid), Nombre(playerid), vida[0], vida[1]);
                SendClientMessageToAll(Amarillo, iMessage);
            }
            else if(vida[0] <= 100.0)
            {
                format(iMessage, sizeof(iMessage), "%s ha ganado el duelo a %s con %.2f de vida.", Nombre(killerid), Nombre(playerid), vida[0]);
                SendClientMessageToAll(Amarillo, iMessage);
            }
        }
        else
        {
            format(iMessage, sizeof(iMessage), "%s ha ganado el duelo a %s con %.2f de vida y %.2f de chaleco(suicidio).", Nombre(killerid), Nombre(playerid), vida[0], vida[1]);
            SendClientMessageToAll(Amarillo, iMessage);
            // Aqui como compruebo al que estaba en duelo como killerid si es invalid_player_id, como seteo las variables a el ??

            for(new j = 0; j < MAX_PLAYERS; j++) // puedo usar esto ? :s
            {
                if(IsPlayerConnected(j))
                {
                    if(PlayerInfo[j][EnDuelo] == 1)
                    {
                        PlayerInfo[j][Dueloid] = 999;
                        PlayerInfo[j][EnDuelo] = 0;
                    }
                }
            }
        }
        PlayerInfo[playerid][DueloPerdido]++;
        PlayerInfo[playerid][EnDuelo] = 0;
        PlayerInfo[playerid][Dueloid] = 999;
        DueloActivo = false;
    }
    return 1;
}
Reply
#7

No, creo que eso no te vendrнa para lo que quieres, la callback esa no tiene un parбmetro "reason"?

Код:
switch(reason)
{
    case 49 .. 54:
    {
        // si se suicidу
    }
}
Reply
#8

Quote:
Originally Posted by Zume-Zero
Посмотреть сообщение
No, creo que eso no te vendrнa para lo que quieres, la callback esa no tiene un parбmetro "reason"?

Код:
switch(reason)
{
    case 49 .. 54:
    {
        // si se suicidу
    }
}
Esto como lo podrнa utilizar, la verdad no se me ocurre nada , si, con eso comprobaria quй muriу pero yo lo quй quiero es quй al suicidarse(INVALID_PLAYER_ID) sete'e las variables al quй quedo en el duelo, pero ї como compruebo al "killerid" si el otro se suicido ?, ї si uso el loop puede traer problemas ? ї lag ? creo quй al final de todo es la ъnica forma de comprobarlo o podrias darme un ejemplo usando el swicth y el parametro por favor ?

Gracias.
Reply
#9

Lo que te dн yo y Zume-Zero, son vбlidas...

puedes usar mediante la razуn de la muerte (del 49 y 54, no son de armas.)
pawn Код:
switch(reason)
{
    case 49 .. 54:
    {
        // si se suicidу, aquн seteas las variables.
    }
}
o chequeas si el jugador NO fuй INVALID_PLAYER_ID

pawn Код:
if(killerid != INVALID_PLAYER_ID)
{
    // si es diferente de INVALID_player_ID
}
else
{
    // si murio por causa de un suicidio o algo que no sea un jugador. (aquн puedes poner que el jugador tal tal gano porque el otro se suicidу.
    // aqui seteas las variables las pones.
}
Reply
#10

Quote:
Originally Posted by Adoniiz
Посмотреть сообщение
Lo que te dн yo y Zume-Zero, son vбlidas...
Esquй eso es un sistema de duelos, creу quй no me entienden, si ya se quй puedo usar invalid_player_id y else para comprobar si muriу por un player(killerid) o si murio por invalid_player_id(suicuidio/car-kill/heli-kill) pero si muere por invalid_player_id como seteo las variables al killerid quй en este caso seria invalid_playerid, el otro quedarнa en el duelo, es un sistema de duelos.
Reply


Forum Jump:


Users browsing this thread: 3 Guest(s)