Very bugged command
#1

Hey,

My warn command is very bugged. For example I warn somebody and he has 1/3 warnings, then I warn myself and I have 2/3 warnings. I warn somebody else and he has 3/3 warnings and he gets kicked even if he was warned one time. Or, everybody has 1/3 warnings at the text but still gets kicked when the count reaches 3. Example:

Код:
x has warned y (1/3)
x has warned y (1/3)
x has warned y (1/3)
y has been kicked
This is the command, I feel like warnid gets saved for everybody but I'm not sure how to fix it:

pawn Код:
CMD:warn(playerid, params[])
{
    if(PlayerInfo[playerid][pAdmin] > 1)
    {
        new warnid, reason[256], wNumber,
            aName[MAX_PLAYER_NAME],
            wName[MAX_PLAYER_NAME],
            string[512];
           
        wNumber = PlayerInfo[playerid][pWarns];
       
        if(sscanf(params, "us[256]", warnid, reason)) return
            SendClientMessage(playerid, COLOR_ORANGE, "[USAGE]{FFFFFF} /warn <playerid/name> <reason>");
           
        if(!IsPlayerConnected(warnid)) return
            SendClientMessage(playerid, COLOR_ERROR, "[ERROR]{FFFFFF} The playerid/name you have typen isn't connected.");
           
        GetPlayerName(playerid, aName, sizeof(aName));
        GetPlayerName(warnid, wName, sizeof(wName));
       
        format(string, sizeof(string), "[WARN]{FFFFFF} Admin {33CFFF}'%s' {FFFFFF}has warned {33CFFF}'%s'{FF66A3}[ %s ( %d/3 ) ]", aName, wName, reason, wNumber);
        SendClientMessageToAll(COLOR_LIGHTBLUE, string);
       
        PlayerInfo[warnid][pWarns] += 1;
       
    }else{
        SendClientMessage(playerid, COLOR_ERROR, "[ERROR]{FFFFFF} Only level 2,3,4,5 admins can use this command.");
    }
    return 1;
}
Reply
#2

pawn Код:
CMD:warn(playerid, params[])
{
    if(PlayerInfo[playerid][pAdmin] > 1)
    {
        new warnid, reason[256], wNumber,
            aName[MAX_PLAYER_NAME],
            wName[MAX_PLAYER_NAME],
            string[512];

        wNumber = PlayerInfo[playerid][pWarns];

        if(sscanf(params, "us[256]", warnid, reason)) return
            SendClientMessage(playerid, COLOR_ORANGE, "[USAGE]{FFFFFF} /warn <playerid/name> <reason>");

        if(!IsPlayerConnected(warnid)) return
            SendClientMessage(playerid, COLOR_ERROR, "[ERROR]{FFFFFF} The playerid/name you have typen isn't connected.");

        GetPlayerName(playerid, aName, sizeof(aName));
        GetPlayerName(warnid, wName, sizeof(wName));

        format(string, sizeof(string), "[WARN]{FFFFFF} Admin {33CFFF}'%s' {FFFFFF}has warned {33CFFF}'%s'{FF66A3}[ %s ( %d/3 ) ]", aName, wName, reason, wNumber);
        SendClientMessageToAll(COLOR_LIGHTBLUE, string);

        PlayerInfo[warnid][pWarns] ++;

    }else{
        SendClientMessage(playerid, COLOR_ERROR, "[ERROR]{FFFFFF} Only level 2,3,4,5 admins can use this command.");
    }
    return 1;
}
Reply
#3

But won't that warn me? Hmm...
EDIT: can you explain a little, too, please? I kinda didn't understand
Reply
#4

Replace
pawn Код:
PlayerInfo[warnid][pWarns] += 1;
With
pawn Код:
PlayerInfo[warnid][pWarns] ++;
Else i see nothing wrong.
Reply
#5

pawn Код:
CMD:warn(playerid, params[])
{
    if(PlayerInfo[playerid][pAdmin] > 1)
    {
        new targetid, reason[124], aName[MAX_PLAYER_NAME], wName[MAX_PLAYER_NAME], string[124], cWarnings; // Warning player
        if(sscanf(params,"us", targetid, reason)) // SSCANF
        {
            SendClientMessage(playerid, COLOR_ORANGE, "[USAGE]{FFFFFF} /warn <playerid/name> <reason>");
        }

        if(!IsPlayerConnected(targetid)) return SendClientMessage(playerid, COLOR_ERROR, "[ERROR]{FFFFFF} The playerid/name you have typen isn't connected."); // Check if player is on

        cWarnings = PlayerInfo[targetid][pWarns]; // Set the cWarnings to the current warnings of the target player

        GetPlayerName(playerid, aName, sizeof(aName));
        GetPlayerName(targetid, wName, sizeof(wName));

        format(string, sizeof(string), "[WARN]{FFFFFF} Admin {33CFFF}'%s' {FFFFFF}has warned {33CFFF}'%s'{FF66A3}[ %s ( %d/3 ) ]", aName, wName, reason, cWarnings);
        SendClientMessageToAll(COLOR_LIGHTBLUE, string); // Tell everyone that this guys been warned

        PlayerInfo[targetid][pWarns]++; // Add 1 to the warnings.
        if(cWarnings == 3) // Kick player if wanring at 3
        {
            format(string, sizeof(string), "[KICKED]{FFFFFF} Player '%s' has been kicked from the server, Reason: Enough warnings", wName);
            SendClientMessageToAll(COLOR_LIGHTBLUE, string);
            Kick(targetid);
        }
    }
    else {
        SendClientMessage(playerid, COLOR_ERROR, "[ERROR]{FFFFFF} Only administrators above level 2 can use this"); // Error if not required level
    }
    return 1;
}
Should work how you want it too.
Reply


Forum Jump:


Users browsing this thread: 1 Guest(s)