public OnPlayerCommandText(playerid, cmdtext[])
{
new ID[256], idx, tmp[256];
ID = strtok(cmdtext, idx);
new targetid = strval(tmp);
tmp = strtok(cmdtext, idx);
new reason[256];
reason = bigstrtok(cmdtext, idx);
new pName [MAX_PLAYER_NAME], tName [MAX_PLAYER_NAME], string [128];
GetPlayerName(playerid, pName, MAX_PLAYER_NAME);
GetPlayerName(targetid, tName, MAX_PLAYER_NAME);
if (strcmp("/test", ID, true, 10) == 0)
{
if(!IsPlayerConnected(targetid)) return SendClientMessage(playerid,COLOR_ERROR,"Player is not connected");
if(!IsNumeric(tmp)) return SendClientMessage(playerid,COLOR_ERROR,"The ID must be a number");
if(!strlen(reason)) return SendClientMessage(playerid,COLOR_ERROR,"You must enter the message");
{
format (string, sizeof(string), "%s(%d) (You) have tested the code at %s(%d) because %s", pName, playerid, tName, targetid, reason);
SendClientMessage(playerid, 0xFF000000,string);
return 1;
}
}
return 0;
}
strtok(const string[], &index)
{
new length = strlen(string);
while ((index < length) && (string[index] <= ' '))
{
index++;
}
new offset = index;
new result[20];
while ((index < length) && (string[index] > ' ') && ((index - offset) < (sizeof(result) - 1)))
{
result[index - offset] = string[index];
index++;
}
result[index - offset] = EOS;
return result;
}
stock bigstrtok(const string[], &idx)
{
new length = strlen(string);
while ((idx < length) && (string[idx] <= ' '))
{
idx++;
}
new offset = idx;
new result[128];
while ((idx < length) && ((idx - offset) < (sizeof(result) - 1)))
{
result[idx - offset] = string[idx];
idx++;
}
result[idx - offset] = EOS;
return result;
}
Just a little tip:
Use sccanf & dcmd for FAST command processing. That is much easier to use (your 6 lines with strtok = 1 line with sscanf) and you won't get problems like that. |
public OnPlayerCommandText(playerid, cmdtext[])
{
dcmd(kick,4,cmdtext);
//dcmd([command name],[length of the name],cmdtext);
return 0;
}
dcmd_kick(playerid, params[])
{
new id, reason[128];
if (GetPVarInt(playerid,"AdminLvl") >= 1)
{
if (sscanf(params, "us", id, reason))
{
UsageMsg(playerid, "USAGE: /Kick <PlayerID/PartOfName> <Reason>");
}
else if (id == INVALID_PLAYER_ID) ErrorMsg(playerid, "That player is not found");
else if(id == playerid) ErrorMsg(playerid,"Use /q");
else if(GetPVarInt(id,"AdminLvl") > GetPVarInt(playerid,"AdminLvl")) ErrorMsg(playerid,"You cannot use this command on player with higher admin level!");
else
{
ServerMsg(id," ");
ServerMsg(id," ");
ServerMsg(id," ");
SendFMessage(id,cInfo,"You have been kicked by Admin %s. Reason: %s",pName[playerid],reason);
SendFMessageToAll(cInfo,"%s was kicked by Admin. Reason: %s",pName[id],reason);
Kick(id);
}
}
else return ErrorMsg(playerid,"You are not authorized to use this command.");
return 1;
}