SA-MP Forums Archive
[0.3d]OnPlayerDeath glitch? - Printable Version

+- SA-MP Forums Archive (https://sampforum.blast.hk)
+-- Forum: SA-MP Scripting and Plugins (https://sampforum.blast.hk/forumdisplay.php?fid=8)
+--- Forum: Scripting Help (https://sampforum.blast.hk/forumdisplay.php?fid=12)
+--- Thread: [0.3d]OnPlayerDeath glitch? (/showthread.php?tid=301616)



[0.3d]OnPlayerDeath glitch? - sciman001 - 04.12.2011

Hey guys. I have some code in my OnPlayerDeath callback. Now, when a player dies but isn't killed by any other player, ex. falling, it only runs some of the code but not all of it... Any ideas? Heres the code:
pawn Код:
public OnPlayerDeath(playerid, killerid, reason)
{
    SendDeathMessage(killerid, playerid, reason);
    TogglePlayerSpectating(playerid, true);
    PlayerSpectatePlayer(playerid, killerid);
    SetTimerEx("spec", 5000, false, "i", playerid);

    HandleKS(playerid, killerid);

    SetPlayerScore(killerid, GetPlayerScore(killerid)+1);

    if(pInfo[playerid][team] == 0)
    {
        gt--;
    }
    else if(pInfo[playerid][team] == 1)
    {
        bt--;
    }

    TextDrawHideForPlayer(playerid, rTD[playerid]);
    TextDrawHideForPlayer(playerid, kdTD[playerid]);
    TextDrawHideForPlayer(killerid, rTD[killerid]);
    TextDrawHideForPlayer(killerid, kdTD[killerid]);

    pInfo[playerid][deaths]++;
    pInfo[killerid][kills]++;

    if(pInfo[killerid][kills] >= 25)
    {
        pInfo[killerid][rank] = 2;
    }
    else if(pInfo[killerid][kills] >= 50)
    {
        pInfo[killerid][rank] = 3;
    }
    else if(pInfo[killerid][kills] >= 75)
    {
        pInfo[killerid][rank] = 4;
    }
    else if(pInfo[killerid][kills] >= 100)
    {
        pInfo[killerid][rank] = 5;
    }
    else if(pInfo[killerid][kills] >= 125)
    {
        pInfo[killerid][rank] = 6;
    }
    else if(pInfo[killerid][kills] >= 150)
    {
        pInfo[killerid][rank] = 7;
    }
    else
    {
        pInfo[killerid][rank] = 1;
    }

    new tdS2[10];
    format(tdS2, sizeof(tdS2), "RANK: %i", pInfo[killerid][rank]);
    TextDrawSetString(rTD[killerid], tdS2);

    new tdsS2[10];
    format(tdsS2, sizeof(tdS2), "%i:%i", pInfo[killerid][kills], pInfo[killerid][deaths]);
    TextDrawSetString(kdTD[killerid], tdsS2);

    TextDrawShowForPlayer(killerid, kdTD[killerid]);
    TextDrawShowForPlayer(killerid, rTD[killerid]);
    return 1;
}
I cant figure it out. When a player kills another player, it works like a charm. However, when a player just dies, it doesnt get to the part where it edits the text draws. They still show up. AND, they stay the same. Any ideas? PLEASE HELP! URGENT! THX!


Re: [0.3d]OnPlayerDeath glitch? - MP2 - 04.12.2011

Check that the killerid is valid.

pawn Код:
if(killerid != INVALID_PLAYER_ID)
{
    // Do stuff with killerid
}
else
{
    // There is no killerid, don't set a value for killerid here
}



Re: [0.3d]OnPlayerDeath glitch? - sciman001 - 04.12.2011

so... i should put all my code in the if and the else part? or just the top one? ooooh... you mean... alrighty... but then how to i ... im confused... ill figure it out. thanks.


Re: [0.3d]OnPlayerDeath glitch? - sciman001 - 04.12.2011

I got this, but it still doesnt work:
pawn Код:
public OnPlayerDeath(playerid, killerid, reason)
{
    if(killerid != INVALID_PLAYER_ID)
    {
        SendDeathMessage(killerid, playerid, reason);
        TogglePlayerSpectating(playerid, true);
        PlayerSpectatePlayer(playerid, killerid);
        SetTimerEx("spec", 5000, false, "i", playerid);

        HandleKS(playerid, killerid);

        SetPlayerScore(killerid, GetPlayerScore(killerid)+1);

        if(pInfo[playerid][team] == 0)
        {
            gt--;
        }
        else if(pInfo[playerid][team] == 1)
        {
            bt--;
        }

        TextDrawHideForPlayer(playerid, rTD[playerid]);
        TextDrawHideForPlayer(playerid, kdTD[playerid]);
        TextDrawHideForPlayer(killerid, rTD[killerid]);
        TextDrawHideForPlayer(killerid, kdTD[killerid]);

        pInfo[playerid][deaths]++;
        pInfo[killerid][kills]++;

        if(pInfo[killerid][kills] >= 25)
        {
            pInfo[killerid][rank] = 2;
        }
        else if(pInfo[killerid][kills] >= 50)
        {
            pInfo[killerid][rank] = 3;
        }
        else if(pInfo[killerid][kills] >= 75)
        {
            pInfo[killerid][rank] = 4;
        }
        else if(pInfo[killerid][kills] >= 100)
        {
            pInfo[killerid][rank] = 5;
        }
        else if(pInfo[killerid][kills] >= 125)
        {
            pInfo[killerid][rank] = 6;
        }
        else if(pInfo[killerid][kills] >= 150)
        {
            pInfo[killerid][rank] = 7;
        }
        else
        {
            pInfo[killerid][rank] = 1;
        }

        new tdS2[10];
        format(tdS2, sizeof(tdS2), "RANK: %i", pInfo[killerid][rank]);
        TextDrawSetString(rTD[killerid], tdS2);

        new tdsS2[10];
        format(tdsS2, sizeof(tdS2), "%i:%i", pInfo[killerid][kills], pInfo[killerid][deaths]);
        TextDrawSetString(kdTD[killerid], tdsS2);

        TextDrawShowForPlayer(killerid, kdTD[killerid]);
        TextDrawShowForPlayer(killerid, rTD[killerid]);
    }
    else
    {
        SendDeathMessage(killerid, playerid, reason);
        TogglePlayerSpectating(playerid, true);
        PlayerSpectatePlayer(playerid, killerid);
        SetTimerEx("spec", 5000, false, "i", playerid);

        HandleKS(playerid, killerid);

        if(pInfo[playerid][team] == 0)
        {
            gt--;
        }
        else if(pInfo[playerid][team] == 1)
        {
            bt--;
        }

        TextDrawHideForPlayer(playerid, rTD[playerid]);
        TextDrawHideForPlayer(playerid, kdTD[playerid]);

        pInfo[playerid][deaths]++;
    }
    return 1;
}



Re: [0.3d]OnPlayerDeath glitch? - sciman001 - 04.12.2011

sorry for that bump. just so u no, i had to move the handleks function to be AFTER i remove the text draws. idk y. it does return./. o well. it works


Re: [0.3d]OnPlayerDeath glitch? - cessil - 05.12.2011

don't bump threads, it's stopping because the killerid is invalid which is a really high number like 65535 and you're trying to access an array index still which it can't reach and the script stops


Re: [0.3d]OnPlayerDeath glitch? - MP2 - 05.12.2011

Here you go:

pawn Код:
public OnPlayerDeath(playerid, killerid, reason)
{
    SendDeathMessage(killerid, playerid, reason);
    TextDrawHideForPlayer(playerid, rTD[playerid]);
    TextDrawHideForPlayer(playerid, kdTD[playerid]);

    if(killerid != INVALID_PLAYER_ID) // Valid killer
    {
        TogglePlayerSpectating(playerid, true);
        PlayerSpectatePlayer(playerid, killerid);
        SetTimerEx("spec", 5000, false, "i", playerid);
        HandleKS(playerid, killerid);
        SetPlayerScore(killerid, GetPlayerScore(killerid)+1);
        TextDrawHideForPlayer(killerid, rTD[killerid]);
        TextDrawHideForPlayer(killerid, kdTD[killerid]);

        pInfo[killerid][kills]++;
        if(pInfo[killerid][kills] >= 25)
        {
            pInfo[killerid][rank] = 2;
        }
        else if(pInfo[killerid][kills] >= 50)
        {
            pInfo[killerid][rank] = 3;
        }
        else if(pInfo[killerid][kills] >= 75)
        {
            pInfo[killerid][rank] = 4;
        }
        else if(pInfo[killerid][kills] >= 100)
        {
            pInfo[killerid][rank] = 5;
        }
        else if(pInfo[killerid][kills] >= 125)
        {
            pInfo[killerid][rank] = 6;
        }
        else if(pInfo[killerid][kills] >= 150)
        {
            pInfo[killerid][rank] = 7;
        }
        else
        {
            pInfo[killerid][rank] = 1;
        }

        new tdS2[10];
        format(tdS2, sizeof(tdS2), "RANK: %i", pInfo[killerid][rank]);
        TextDrawSetString(rTD[killerid], tdS2);

        new tdsS2[10];
        format(tdsS2, sizeof(tdS2), "%i:%i", pInfo[killerid][kills], pInfo[killerid][deaths]);
        TextDrawSetString(kdTD[killerid], tdsS2);

        TextDrawShowForPlayer(killerid, kdTD[killerid]);
        TextDrawShowForPlayer(killerid, rTD[killerid]);
    }

    if(pInfo[playerid][team] == 0)
    {
        gt--;
    }
    else if(pInfo[playerid][team] == 1)
    {
        bt--;
    }

    pInfo[playerid][deaths]++;
    }
    return 1;
}
Should work fine.