(SetTimerEx) Ban & Kick Not Working Correctly
#1

Well, basically /kick and /ban are not working the way I'd like them too. If I kicked or banned a player, they won't know why. Basically SetTimerEx isn't working and I have no idea why.

Код:
//------------------------------------[Kick]------------------------------------


    if(strcmp(cmd, "/kick", true) == 0)
	{
	    if(IsPlayerConnected(playerid))
	    {
	    	tmp = strtok(cmdtext, idx);
			if(!strlen(tmp))
			{
				SendClientMessage(playerid, COLOR_GREY, "USAGE: /kick (player name/id) [reason]");
				return 1;
			}
			giveplayerid = ReturnUser(tmp);
			if (PlayerInfo[playerid][pAdmin] >= 2)
			{
				if(IsPlayerConnected(giveplayerid))
				{
				    if(giveplayerid != INVALID_PLAYER_ID)
				    {
					    GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
						GetPlayerName(playerid, sendername, sizeof(sendername));
						new length = strlen(cmdtext);
						while ((idx < length) && (cmdtext[idx] <= ' '))
						{
							idx++;
						}
						new offset = idx;
						new result[64];
						while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
						{
							result[idx - offset] = cmdtext[idx];
							idx++;
						}
						result[idx - offset] = EOS;
						if(!strlen(result))
						{
							SendClientMessage(playerid, COLOR_GREY, "USAGE: /kick (player name/id) [reason]");
							return 1;
						}
						format(string, sizeof(string), "[KICK] {E5E5E5}%s was kicked by %s. {31AA31}Reason{E5E5E5}: %s", giveplayer, sendername, (result));
						SendClientMessageToAll(COLOR_ADMIN, string);
						SendClientMessage(playerid, COLOR_GREY, "  ");
						SendClientMessage(playerid, COLOR_GREY, "  ");
						SendClientMessage(playerid, COLOR_GREY, "  ");
						SendClientMessage(playerid, COLOR_GREY, "  ");
						SendClientMessage(playerid, COLOR_GREY, "  ");
						SendClientMessage(playerid, COLOR_GREY, "  ");
						SendClientMessage(playerid, COLOR_GREY, "  ");
						SendClientMessage(playerid, COLOR_GREY, "  ");
						SendClientMessage(playerid, COLOR_GREY, "  ");
						SendClientMessage(playerid, COLOR_GREY, "  ");
						SendClientMessage(playerid, COLOR_GREY, "  ");
						SendClientMessage(playerid, COLOR_GREY, "  ");
						SendClientMessage(playerid, COLOR_GREY, "  ");
						SendClientMessage(playerid, COLOR_GREY, "  ");
						SendClientMessage(playerid, COLOR_GREY, "  ");
						format(string, sizeof(string), "[KICK] {E5E5E5}You have been kicked by %s. {31AA31}Reason{E5E5E5}: %s", sendername, (result));
				        SendClientMessage(playerid, COLOR_ADMIN, string);
				        SetTimerEx("KickTimer", 1000, false, "i", giveplayerid);
						return 1;
					}
				}
			}
			else
			{
				format(string, sizeof(string), "{DB2E2E}Error: {F7BEBF}Player not found!", giveplayerid);
				SendClientMessage(playerid, COLOR_GREY, string);
			}
		}
		return 1;
Код:
 //------------------------------------[Ban]------------------------------------
	}
    if(strcmp(cmd, "/ban", true) == 0)
	{
	    if(IsPlayerConnected(playerid))
	    {
	    	tmp = strtok(cmdtext, idx);
			if(!strlen(tmp))
			{
				SendClientMessage(playerid, COLOR_GREY, "USAGE: /ban (player name/id) [reason]");
				return 1;
			}
			giveplayerid = ReturnUser(tmp);
			if (PlayerInfo[playerid][pAdmin] >= 2)
			{
			    if(IsPlayerConnected(giveplayerid))
			    {
			        if(giveplayerid != INVALID_PLAYER_ID)
			        {
					    GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
						GetPlayerName(playerid, sendername, sizeof(sendername));
						new length = strlen(cmdtext);
						while ((idx < length) && (cmdtext[idx] <= ' '))
						{
							idx++;
						}
						new offset = idx;
						new result[64];
						while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
						{
							result[idx - offset] = cmdtext[idx];
							idx++;
						}
						result[idx - offset] = EOS;
						if(!strlen(result))
						{
							SendClientMessage(playerid, COLOR_GREY, "USAGE: /ban (player id) (reason)");
							return 1;
						}
						format(string, sizeof(string), "[BANNED] {E5E5E5}%s was banned by %s. {31AA31}Reason{E5E5E5}: %s", giveplayer, sendername, (result));
						SendClientMessageToAll(COLOR_ADMIN, string);
						
						SendClientMessage(playerid, COLOR_GREY, "  ");
						SendClientMessage(playerid, COLOR_WHITE, "> BANNED FROM {A10000}BLOODS {FFFFFF} VS {000096}CRIPS");
						SendClientMessage(playerid, COLOR_GREY, "``````````````````````````````````````````````````````````````````");
						format(string, sizeof(string), " > {31AA31}Name{E5E5E5}: %s", giveplayer);
						SendClientMessage(playerid, COLOR_GREEN, string);
						format(string, sizeof(string), " > {31AA31}Banned By{E5E5E5}: %s", sendername);
						SendClientMessage(playerid, COLOR_GREEN, string);
						format(string, sizeof(string), " > {31AA31}Reason{E5E5E5}: %s", (result));
				        SendClientMessage(playerid, COLOR_GREEN, string);
				         SendClientMessage(playerid, COLOR_GREY, "  ");
				        SendClientMessage(playerid, COLOR_WHITE, "You {F7CE00}must {FFFFFF}take a screen-shot {F7CE00}(F8) {FFFFFF}for your ban appeal");
				        SendClientMessage(playerid, COLOR_GREY, "``````````````````````````````````````````````````````````````````");
				        SendClientMessage(playerid, COLOR_GREY, "  ");
				        GameTextForPlayer(giveplayerid,"~r~Banned",9000,0);
            			SetTimerEx("DelayedBan", 1500, 0, "i", giveplayerid);
						return 1;
					}
				}//not connected
			}
			else
			{
				format(string, sizeof(string), "{DB2E2E}Error: {F7BEBF}Player not found!", giveplayerid);
				SendClientMessage(playerid, COLOR_GREY, string);
			}
		}
		return 1;
	}
Reply
#2

So remove Kick(..); and Ban(..); from that cmds? xd you got timer for that, and optimize that old stupid commands
if(IsPlayerConnected(playerid)) = <double_facewall>
Reply
#3

It's not working properly because you have a timer and a Kick(giveplayerid) aswell as Ban(giveplayerid).
Reply
#4

pawn Код:
if(strcmp(cmd, "/kick", true) == 0)
{
    if(PlayerInfo[playerid][pAdmin] < 2) return 0;
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
        SendClientMessage(playerid, COLOR_GREY, "USAGE: /kick (player name/id) [reason]");
        return 1;
    }
    giveplayerid = ReturnUser(tmp);
    if(giveplayerid != INVALID_PLAYER_ID)
    {
        if(!cmdtext[idx] || cmdtext[idx] == ' ')
        {
            SendClientMessage(playerid, COLOR_GREY, "USAGE: /kick (player name/id) [reason]");
            return 1;
        }
        GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
        GetPlayerName(playerid, sendername, sizeof(sendername));
        format(string, sizeof(string), "[KICK] {E5E5E5}%s was kicked by %s. {31AA31}Reason{E5E5E5}: %s", giveplayer, sendername, cmdtext[idx]);
        SendClientMessageToAll(COLOR_ADMIN, string);
        format(string, sizeof(string), "[KICK] You have been kicked by %s. {31AA31}Reason{E5E5E5}: %s", sendername, cmdtext[idx]);
        SendClientMessage(giveplayerid, COLOR_ADMIN, string);
        SetTimerEx("DelayedKick", 250, false, "d", giveplayerid);
    }
    else
        SendClientMessage(playerid, COLOR_GREY, "{DB2E2E}Error: {F7BEBF}Player not found!");

    return 1;
}

if(strcmp(cmd, "/ban", true) == 0)
{
    if(PlayerInfo[playerid][pAdmin] < 2) return 0;
    tmp = strtok(cmdtext, idx);
    if(!strlen(tmp))
    {
        SendClientMessage(playerid, COLOR_GREY, "USAGE: /ban (player name/id) [reason]");
        return 1;
    }
    giveplayerid = ReturnUser(tmp);
    if(giveplayerid != INVALID_PLAYER_ID)
    {
        if(!cmdtext[idx] || cmdtext[idx] == ' ')
        {
            SendClientMessage(playerid, COLOR_GREY, "USAGE: /ban (player id) (reason)");
            return 1;
        }
        GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
        GetPlayerName(playerid, sendername, sizeof(sendername));
        format(string, sizeof(string), "[BANNED] {E5E5E5}%s was banned by %s. {31AA31}Reason{E5E5E5}: %s", giveplayer, sendername, cmdtext[idx]);
        SendClientMessageToAll(COLOR_ADMIN, string);
        format(string, sizeof(string), "[BANNED] {E5E5E5}You have been banned by %s. {31AA31}Reason{E5E5E5}: %s", sendername, cmdtext[idx]);
        SendClientMessage(giveplayerid, COLOR_ADMIN, string);
        GameTextForPlayer(giveplayerid,"~r~Banned",9000,0);
        SetTimerEx("DelayedBan", 250, false, "d", giveplayerid);
    }
    else
        SendClientMessage(playerid, COLOR_GREY, "{DB2E2E}Error: {F7BEBF}Player not found!");

    return 1;
}
Reply
#5

Removed: Ban(giveplayerid); & Kick(giveplayerid); and now it doesn't even kick them, just displays the text.
Reply
#6

Better using ZCMD for commands and try this:

pawn Код:
CMD:kick(playerid, params[])
{
    new targetid, reason[128], string[128];
    if(PlayerInfo[playerid][pAdmin] < 2) return 0;
    if(sscanf(params, "us[128]", targetid, reason)) return SendClientMessage(playerid, -1, "/kick [playerid] [reason]");
    if(!IsPlayerConnected(targetid)) return SendClientMessage(playerid, -1, "This player is not connected.");
    if(targetid == playerid) return SendClientMessage(playerid,-1,"You cannot use this command on yourself.");
    if(PlayerInfo[targetid][pAdmin] > 0) return SendClientMessage(playerid,-1, "You cannot use this command on an administrator.");
    format(string, sizeof(string), "%s(%d) Has Been Kicked By An Administrator - Reason: %s", GetName(targetid), targetid, reason);
    SendClientMessageToAll(-1, string);
    SetTimerEx("KickTimer", 1000, false, "i", targetid);
    return 1;
}

public KickTimer(playerid)
{
    Kick(playerid);
    return 1;
}
Reply
#7

What Juvanii said, but instead of using a timer in every command, make a public function.

pawn Код:
stock kick(playerid)
{
     SetTimerEx("KickTimer", 1000, false, "i", tragetid);
     return 1;
}

public KickTimer(playerid)
{
     Kick(playerid);
     return 1;
}

// command

CMD:kick(playerid, params[])
{
    new targetid, reason[128], string[128];
    if(PlayerInfo[playerid][pAdmin] < 2) return 0;
    if(sscanf(params, "us[128]", targetid, reason)) return SendClientMessage(playerid, -1, "/kick [playerid] [reason]");
    if(!IsPlayerConnected(targetid)) return SendClientMessage(playerid, -1, "This player is not connected.");
    if(targetid == playerid) return SendClientMessage(playerid,-1,"You cannot use this command on yourself.");
    if(PlayerInfo[targetid][pAdmin] > 0) return SendClientMessage(playerid,-1, "You cannot use this command on an administrator.");
    format(string, sizeof(string), "%s(%d) has beeen kicked by an administrator(''%s'')", GetName(targetid), targetid, reason);
    SendClientMessageToAll(-1, string);
    kick(targetid);
    return 1;
}
I think that shall work.
Reply
#8

where do I put this.. "forward DelayedKick(playerid);" & "public DelayedKick(playerid)"?
Reply
#9

Anywhere on your script put this.

pawn Код:
forward DelayedKick(playerid);
forward DelayedBan(playerid);
public DelayedKick(playerid)
{
Kick(playerid);
}
public DelayedBan(playerid)
{
Ban(playerid);
}
If you've read the wiki it would have been easier for you by the way. (:
Reply
#10

bump
Reply


Forum Jump:


Users browsing this thread: 2 Guest(s)