Weird death bug.
#1

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?
Reply
#2

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

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;
}
Reply
#4

Ah, so that's all you got?

Show OnPlayerDeath then..
Reply
#5

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
Reply
#6

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.
Reply
#7

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
Reply
#8

BTW use return 1; not return 0; in OnPlayerUpdate
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)