(SetTimerEx) Ban & Kick Not Working Correctly -
Zmith - 20.06.2014
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;
}
Re: (SetTimerEx) Ban & Kick Not Working Correctly -
Jefff - 20.06.2014
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>
Re: (SetTimerEx) Ban & Kick Not Working Correctly -
Beckett - 20.06.2014
It's not working properly because you have a timer and a Kick(giveplayerid) aswell as Ban(giveplayerid).
Re: (SetTimerEx) Ban & Kick Not Working Correctly -
Jefff - 20.06.2014
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;
}
Re: (SetTimerEx) Ban & Kick Not Working Correctly -
Zmith - 22.06.2014
Removed: Ban(giveplayerid); & Kick(giveplayerid); and now it doesn't even kick them, just displays the text.
Re: (SetTimerEx) Ban & Kick Not Working Correctly -
Juvanii - 22.06.2014
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;
}
Re: (SetTimerEx) Ban & Kick Not Working Correctly -
Private200 - 22.06.2014
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.
Re: (SetTimerEx) Ban & Kick Not Working Correctly -
Zmith - 23.06.2014
where do I put this.. "forward DelayedKick(playerid);" & "public DelayedKick(playerid)"?
Re: (SetTimerEx) Ban & Kick Not Working Correctly -
Beckett - 23.06.2014
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. (:
Re: (SetTimerEx) Ban & Kick Not Working Correctly -
Zmith - 06.07.2014
bump