SA-MP Forums Archive
Weird death bug. - 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)
+---- Forum: Help Archive (https://sampforum.blast.hk/forumdisplay.php?fid=89)
+---- Thread: Weird death bug. (/showthread.php?tid=186978)



Weird death bug. - [TRP]Eagle - 31.10.2010

Ugh. I recently started scripting a new GM but I have a small bug which is quite frustrating.

As soon as somebody gets killed he is dead for the others but...the player who got killed is still alive(with 1hp) and cannot be seen by any other players, neither can he deal any damage.

Is there a way to fix this?


Re: Weird death bug. - The_Moddler - 31.10.2010

It's a SAMP related bug I think... also check your OnPlayerUpdate callback.


Re: Weird death bug. - [TRP]Eagle - 31.10.2010

This is all I have in it and I don't think it should give me any problem.

pawn Code:
public OnPlayerUpdate(playerid)
{
       
    if(GetPlayerWeapon(playerid) == WEAPON_MINIGUN) {
        Kick(playerid);
        return 0;
    }

   
    if(GetPlayerSpecialAction(playerid) == SPECIAL_ACTION_USEJETPACK) {
        Kick(playerid);
        return 0;
    }
    return 1;
}



Re: Weird death bug. - The_Moddler - 31.10.2010

Ah, so that's all you got?

Show OnPlayerDeath then..


Re: Weird death bug. - [TRP]Eagle - 31.10.2010

pawn Code:
public OnPlayerDeath(playerid, killerid, reason)
{
    SendDeathMessage(killerid,playerid,reason);
    SetPlayerScore(killerid, GetPlayerScore(killerid) + 1);
    GivePlayerMoney(killerid, 500);
    if(gTeam[killerid] == gTeam[playerid])
    {
    SetPlayerScore(killerid, GetPlayerScore(killerid) - 2);
    GivePlayerMoney(killerid, -200);
    }
    ResetPlayerWeapons(playerid);
    ShowPlayerMarkers(0);

//counts the kills
    kills[killerid] += 1;
    new string[11+7];
    format(string, sizeof string, "kills: %d", kills[killerid]);
    TextDrawSetString(killcount[killerid], string);
    TextDrawHideForPlayer(playerid,killcount[playerid]);
   
   
//killing spree
    new kName[128], kstring[128];
    GetPlayerName(killerid, kName, sizeof(kName));
    PlayerKills[killerid] = PlayerKills[killerid] + 1;
    PlayerKills[playerid] = 0;
   
    if (PlayerKills[killerid] == 4 && Dominating[killerid] == 1)
    {
        format(kstring, sizeof(kstring), "~w~%s ~r~ is dominating!", kName);
        GameTextForAll(kstring, 1000, 1);
        SetPlayerScore(killerid, GetPlayerScore(killerid) + 5);
        GivePlayerMoney(killerid, 1000);
        return 1;
    }
    if (PlayerKills[killerid] == 6)
    {
        format(kstring, sizeof(kstring), "~w~%s ~r~is on a rampage!", kName);
        SetPlayerScore(killerid, GetPlayerScore(killerid) + 10);
        GameTextForAll(kstring, 1000, 1);
        GivePlayerMoney(killerid, 1500);
        return 1;
    }
    if (PlayerKills[killerid] == 8)
    {
        format(kstring, sizeof(kstring), "~w~%s ~r~is on a killing spree!", kName);
        GameTextForAll(kstring, 1000, 1);
        SetPlayerScore(killerid, GetPlayerScore(killerid) + 15);
        GivePlayerMoney(killerid, 2000);
        return 1;
    }
    if (PlayerKills[killerid] == 10)
    {
        format(kstring, sizeof(kstring), "~r~monster kill ~r~%s!", kName);
        GameTextForAll(kstring, 1000, 1);
        SetPlayerScore(killerid, GetPlayerScore(killerid) + 20);
        GivePlayerMoney(killerid, 2500);
        ShowPlayerMarkers(1);
        return 1;
    }
    if (PlayerKills[killerid] == 12)
    {
        format(kstring, sizeof(kstring), "~w~%s ~r~is unstoppable!", kName);
        GameTextForAll(kstring, 1000, 1);
        SetPlayerScore(killerid, GetPlayerScore(killerid) + 25);
        GivePlayerMoney(killerid, 3000);
        return 1;
    }
    if (PlayerKills[killerid] == 14)
    {
        format(kstring, sizeof(kstring), "~r~ultra kill ~w~%s!", kName);
        GameTextForAll(kstring, 1000, 1);
        SetPlayerScore(killerid, GetPlayerScore(killerid) + 30);
        GivePlayerMoney(killerid, 3500);
        return 1;
    }
    if (PlayerKills[killerid] == 16)
    {
        format(kstring, sizeof(kstring), "~w~%s ~r~is godlike!", kName);
        GameTextForAll(kstring, 1000, 1);
        SetPlayerScore(killerid, GetPlayerScore(killerid) + 35);
        GivePlayerMoney(killerid, 4000);
        return 1;
    }
    if (PlayerKills[killerid] == 18)
    {
        format(kstring, sizeof(kstring), "~r~wicked sick ~w~%s!", kName);
        GameTextForAll(kstring, 1000, 1);
        SetPlayerScore(killerid, GetPlayerScore(killerid) + 40);
        GivePlayerMoney(killerid, 4500);
        return 1;
    }
    if (PlayerKills[killerid] == 20)
    {
        format(kstring, sizeof(kstring), "~r~ludicrous kill ~w~%s!", kName);
        GameTextForAll(kstring, 1000, 1);
        SetPlayerScore(killerid, GetPlayerScore(killerid) + 45);
        GivePlayerMoney(killerid, 5000);
        return 1;
    }
    if (PlayerKills[killerid] == 24)
    {
        format(kstring, sizeof(kstring), "~r~holy shit ~w~%s!", kName);
        GameTextForAll(kstring, 1000, 1);
        SetPlayerScore(killerid, GetPlayerScore(killerid) + 50);
        GivePlayerMoney(killerid, 5500);
        return 1;
    }
    return 1;
}
There we go. I think the problem is ResetPlayerWeapons


Re: Weird death bug. - The_Moddler - 31.10.2010

pawn Code:
public OnPlayerDeath(playerid, killerid, reason)
{
    SendDeathMessage(killerid, playerid, reason);
    //The killer
    if(IsPlayerConnected(killerid))
    {
        new string[64], name[25];
        //Kill counting
        kills[killerid]++;
        format(string, 64, "kills: %d", kills[killerid]);
        TextDrawSetString(killcount[killerid], string);
        //Spree
        GetPlayerName(killerid, name, 25);
        PlayerKills[killerid] = PlayerKills[killerid]+1;
        if(PlayerKills[killerid] == 4 && Dominating[killerid] == 1)
        {
            format(string, 64, "~w~%s ~r~ is dominating!", name);
            GameTextForAll(string, 1000, 1);
            SetPlayerScore(killerid, GetPlayerScore(killerid) + 5);
            GivePlayerMoney(killerid, 1000);
            return 1;
        }
        if(PlayerKills[killerid] == 6)
        {
            format(string, 64, "~w~%s ~r~is on a rampage!", name);
            SetPlayerScore(killerid, GetPlayerScore(killerid) + 10);
            GameTextForAll(string, 1000, 1);
            GivePlayerMoney(killerid, 1500);
            return 1;
        }
        if(PlayerKills[killerid] == 8)
        {
            format(string, 64, "~w~%s ~r~is on a killing spree!", name);
            GameTextForAll(string, 1000, 1);
            SetPlayerScore(killerid, GetPlayerScore(killerid) + 15);
            GivePlayerMoney(killerid, 2000);
            return 1;
        }
        if(PlayerKills[killerid] == 10)
        {
            format(string, 64, "~r~monster kill ~r~%s!", name);
            GameTextForAll(string, 1000, 1);
            SetPlayerScore(killerid, GetPlayerScore(killerid) + 20);
            GivePlayerMoney(killerid, 2500);
            ShowPlayerMarkers(1);
            return 1;
        }
        if(PlayerKills[killerid] == 12)
        {
            format(string, 64, "~w~%s ~r~is unstoppable!", name);
            GameTextForAll(string, 1000, 1);
            SetPlayerScore(killerid, GetPlayerScore(killerid) + 25);
            GivePlayerMoney(killerid, 3000);
            return 1;
        }
        if(PlayerKills[killerid] == 14)
        {
            format(string, 64, "~r~ultra kill ~w~%s!", name);
            GameTextForAll(string, 1000, 1);
            SetPlayerScore(killerid, GetPlayerScore(killerid) + 30);
            GivePlayerMoney(killerid, 3500);
            return 1;
        }
        if(PlayerKills[killerid] == 16)
        {
            format(string, 64, "~w~%s ~r~is godlike!", name);
            GameTextForAll(string, 1000, 1);
            SetPlayerScore(killerid, GetPlayerScore(killerid) + 35);
            GivePlayerMoney(killerid, 4000);
            return 1;
        }
        if(PlayerKills[killerid] == 18)
        {
            format(string, 64, "~r~wicked sick ~w~%s!", name);
            GameTextForAll(string, 1000, 1);
            SetPlayerScore(killerid, GetPlayerScore(killerid) + 40);
            GivePlayerMoney(killerid, 4500);
            return 1;
        }
        if(PlayerKills[killerid] == 20)
        {
            format(string, 64, "~r~ludicrous kill ~w~%s!", name);
            GameTextForAll(string, 1000, 1);
            SetPlayerScore(killerid, GetPlayerScore(killerid) + 45);
            GivePlayerMoney(killerid, 5000);
            return 1;
        }
        if(PlayerKills[killerid] == 24)
        {
            format(string, 64, "~r~holy shit ~w~%s!", name);
            GameTextForAll(string, 1000, 1);
            SetPlayerScore(killerid, GetPlayerScore(killerid) + 50);
            GivePlayerMoney(killerid, 5500);
            return 1;
        }
        if(gTeam[killerid] == gTeam[playerid])
        {
            SetPlayerScore(killerid, GetPlayerScore(killerid)-2);
            GivePlayerMoney(killerid, -200);
        }
        else
        {
            SetPlayerScore(killerid, GetPlayerScore(killerid)+1);
            GivePlayerMoney(killerid, 500);
            ShowPlayerMarkers(0);
        }
    }
    //Killed person
    TextDrawHideForPlayer(playerid, killcount[playerid]);
    PlayerKills[playerid] = 0;
    return 1;
}
Try that.


Respuesta: Weird death bug. - xenowort - 31.10.2010

One suggestion, I think that instead of using OnPlayerUpdate, better to use a timer and arrays that give Warns kicker and if there is 3 Warns kick it.

OnPlayerUpdate may have problems with the client.

The client does not receive the packet, the server takes it as a weapon that was cheat, but actually just bought the package was lost and then I kick
Escuchar
Leer fonйticamente
Diccionario - Ver diccionario detalladoconjunciуn0.or


Re: Weird death bug. - Mean - 31.10.2010

BTW use return 1; not return 0; in OnPlayerUpdate