[Ajuda] Ajuda No-Lag
#1

Gente, estou com um pequeno problema, esta funcionando normal, mais quando alguem mata alguem com determinada arma que ainda nгo sei qual (Acho que й eagle) aparece que ele se matou.

pawn Код:
public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid)
{
new Float:Life, Float:Coleete, Float:Dano;
GetPlayerArmour(damagedid, Coleete);
GetPlayerHealth(damagedid, Life);
if(Coleete > 0)
{
if(amount > Coleete)
{
Dano = amount - Coleete;
Life = Life - Dano;
SetPlayerArmour(damagedid, 0.0);
SetPlayerHealth(damagedid, Life);
return 1;
}
Coleete = Coleete - amount;
SetPlayerArmour(damagedid, Coleete);
}
if(Coleete < 1)
{
Life = Life - amount;
SetPlayerHealth(damagedid, Life);
}
return 1;
}
Obrigado e +REP pra quem me ajudar <3
Reply
#2

Tem que usar uma callback secundбria, pois quando o jogador tem a vida setada para 0, ele vai executar a OnPlayerDeath sem nenhum assassino.

Entгo a soluзгo seria

pawn Код:
if(health <= 0)
    return OnPlayerKillPlayer(playerid,damagedid,weaponid); // Cria essa callback
Reply
#3

Quote:
Originally Posted by arakuta
Посмотреть сообщение
Tem que usar uma callback secundбria, pois quando o jogador tem a vida setada para 0, ele vai executar a OnPlayerDeath sem nenhum assassino.

Entгo a soluзгo seria

pawn Код:
if(health <= 0)
    return OnPlayerKillPlayer(playerid,damagedid,weaponid); // Cria essa callback
Ficaria assim ?

pawn Код:
public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid)
{
new Float:Life, Float:Coleete, Float:Dano;
GetPlayerArmour(damagedid, Coleete);
GetPlayerHealth(damagedid, Life);
if(health <= 0) return OnPlayerKillPlayer(playerid,damagedid,weaponid);
if(Coleete > 0)
{
if(amount > Coleete)
{
Dano = amount - Coleete;
Life = Life - Dano;
SetPlayerArmour(damagedid, 0.0);
SetPlayerHealth(damagedid, Life);
return 1;
}
Coleete = Coleete - amount;
SetPlayerArmour(damagedid, Coleete);
}
if(Coleete < 1)
{
Life = Life - amount;
SetPlayerHealth(damagedid, Life);
}
return 1;
}
@edit

Eu nгo poderia usar assim ?:
pawn Код:
if(Life <= 0) return OnPlayerDeath(playerid,damagedid,weaponid);
Reply
#4

Quote:
Originally Posted by Menor
Посмотреть сообщение
Eu nгo poderia usar assim ?:
pawn Код:
if(Life <= 0) return OnPlayerDeath(playerid,damagedid,weaponid);
Isso na verdade nгo vai matar o player, sу irб executar oque tem dentro de OnPlayerDeath. E caso vocк mate-o em seguida ou antes de usar isso, o cуdigo serб executado 02 vezes seguidas.
Reply
#5

Tem que fazer uma correзгo. Nisto

pawn Код:
new killedBY[MAX_PLAYERS] = {-1, ...};

public  OnPlayerConnect(playerid)
{
    killedBY[playerid] = -1;
    // resto do cуdigo da sua OnPlayerConnect
}
public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid)
{
    new Float:Life, Float:Coleete, Float:Dano;
    GetPlayerArmour(damagedid, Coleete);
    GetPlayerHealth(damagedid, Life);
    if(Coleete > 0)
    {
        if(amount > Coleete)
        {
            Dano = amount - Coleete;
            Life = Life - Dano;
            SetPlayerArmour(damagedid, 0.0);
            SetPlayerHealth(damagedid, Life);
            return 1;
        }
        Coleete = Coleete - amount;
        SetPlayerArmour(damagedid, Coleete);
    }
    if(Coleete < 1)
    {
        Life = Life - amount;
        SetPlayerHealth(damagedid, Life);

        if(Life < 0.0) {

            killedBY[damageid] = playerid;

        }
    }
    return 1;
}

public OnPlayerDeath(playerid,killerid, reason) {

    if(!IsPlayerConnected(killerid) && IsPlayerConnected(killedBY[playerid]))
        killerid  = killedBY[playerid], killedBY[playerid] = -1;

    // resto do cуdigo da sua onplayerdeath
}
Reply
#6

Quote:
Originally Posted by Falcon.
Посмотреть сообщение
Isso na verdade nгo vai matar o player, sу irб executar oque tem dentro de OnPlayerDeath. E caso vocк mate-o em seguida ou antes de usar isso, o cуdigo serб executado 02 vezes seguidas.
Nossa eu tentei isso, comeзou a dar falkekill rss
Quote:
Originally Posted by ipsBruno
Посмотреть сообщение
Tem que fazer uma correзгo. Nisto

pawn Код:
new killedBY[MAX_PLAYERS] = {-1, ...};

public  OnPlayerConnect(playerid)
{
    killedBY[playerid] = -1;
    // resto do cуdigo da sua OnPlayerConnect
}
public OnPlayerGiveDamage(playerid, damagedid, Float:amount, weaponid)
{
    new Float:Life, Float:Coleete, Float:Dano;
    GetPlayerArmour(damagedid, Coleete);
    GetPlayerHealth(damagedid, Life);
    if(Coleete > 0)
    {
        if(amount > Coleete)
        {
            Dano = amount - Coleete;
            Life = Life - Dano;
            SetPlayerArmour(damagedid, 0.0);
            SetPlayerHealth(damagedid, Life);
            return 1;
        }
        Coleete = Coleete - amount;
        SetPlayerArmour(damagedid, Coleete);
    }
    if(Coleete < 1)
    {
        Life = Life - amount;
        SetPlayerHealth(damagedid, Life);

        if(Life < 0.0) {

            killedBY[damageid] = playerid;

        }
    }
    return 1;
}

public OnPlayerDeath(playerid,killerid, reason) {

    if(!IsPlayerConnected(killerid) && IsPlayerConnected(killedBY[playerid]))
        killerid  = killedBY[playerid], killedBY[playerid] = -1;

    // resto do cуdigo da sua onplayerdeath
}
error 017: undefined symbol "damageid"
Reply
#7

Quote:
Originally Posted by Menor
Посмотреть сообщение
Nossa eu tentei isso, comeзou a dar falkekill rss

error 017: undefined symbol "damageid"
Fiquei puto agora mano, olha os parвmetros da callback, й damagedid.

Vai pedir ajuda tambйm se vocк escrever seu nome faltando uma letra?
Reply
#8

Quote:
Originally Posted by arakuta
Посмотреть сообщение
Fiquei puto agora mano, olha os parвmetros da callback, й damagedid.

Vai pedir ajuda tambйm se vocк escrever seu nome faltando uma letra?
Vocк foi curto e grosso, mais eu consegui entender rsss... +REP pra tu tbm <3
Reply
#9

Erro meu, troque damageid por damagedid. Desculpe.
Reply
#10

Bruno, eu usei do modo que vocк me disse mais quando mato alguem aparece aquele simbolo da caveirinha no chat-kill e tem vezes que a vida do player fica se recompondo ate ele morrer aos poucos..
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)