rendered paste body// Add this global array in your scriptnew gPlayerKick[MAX_PLAYERS];public OnPlayerCommandText(playerid, cmdtext[]){ new strCmd[8][255]; new strText[255]; split(cmdtext, strCmd, ' ', sizeof(strCmd)); if(equal(strCmd[0], "/kick", false)){ if(strCmd[1][0]==0 || strCmd[2][0]==0){ SendClientMessage(playerid, INSERT_COLOR, "USAGE: /kick <playerid> \"<reason>\""); } else { AdminKickPlayer(playerid, strtoval(strCmd[1]), strCmd[2]); } return 1; } return 0;}public OnPlayerDisconnect(playerid){ // Add this to your OnPlayerDisconnect gPlayerKick[playerid] = 0; return 1;}AdminKickPlayer1(playerid, targetid, reason[]){ // This function will send a kick message to // targetid player and activate a 500mS timer // that will execute the actual kick. new strMsg[128]; if(IsPlayerAdmin(playerid)){ if(IsPlayerConnected(targetid)){ if(reason[0]==0){ // Admin gave no reason, so display a // standard reason. format(strMsg, sizeof(strMsg), "%s (%d) were kicked by %s. Reason: None given.", ReadPlayerName(targetid), targetid, ReadPlayerName(playerid)); } else { format(strMsg, sizeof(strMsg), "%s (%d) were kicked by %s. Reason: %s", ReadPlayerName(targetid), targetid, ReadPlayerName(playerid), reason); } // Send the message to all players and set the kick flag SendClientMessageToAll(INSERT_COLOR, strMsg); gPlayerKick[targetid] = 1; SetTimer("OnPlayerKick", 500, 0); } else { SendClientMessage(playerid, INSERT_COLOR, "Invalid playerid"); } } return 1;}public OnPlayerKick(){ for(new i=0;i<MAX_PLAYERS;i++){ // Loop through all player slots if(gPlayerKick[i]){ if(IsPlayerConnected(i)){ gPlayerKick[i] = 0; Kick(i); } } } return 1;}stock ReadPlayerName(playerid){ new strName[MAX_PLAYER_NAME]; GetPlayerName(playerid, strName, MAX_PLAYER_NAME); return strName;}stock strtoval(strText[]){ // This function replaces strval. The difference is that // this function returns -1 if the string cant be converted. new n,i; new bool:numneg; if(strText[0] == 0x2D){ numneg = true; i++; } while(i<strlen(strText)){ if((strText[i] >= 0x30) && (strText[i]<=0x39)){ n = (n*10) + (strText[i] - 48); } else { // Encountered non-numeric ascii return -1; } i++; } if(numneg){ return 0 - n; } return n;}stock split(const strsrc[], strdest[][], delimiter, maxitems){ new i, li; new aNum; new len; new remdel; while((i <= strlen(strsrc)) && (aNum < maxitems)){ if(strsrc[i]==0x22){ // 0x22 = " if(delimiter != 0x22){ remdel = delimiter; delimiter = 0x22; i++; li++; } } if((strsrc[i]==delimiter) || (i==strlen(strsrc))){ len = strmid(strdest[aNum], strsrc, li, i, 128); strdest[aNum][len] = 0; // zero terminate string li = i+1; aNum++; if(delimiter==0x22){ delimiter = remdel; li++; i++; } } i++; } return 1;}stock equal(strsrc[], strcomp[], bool:casesen){ // Returns 1 if strings are equal, 0 if not. // Casesen true = Case Sensitive new bool:caseused; if(!casesen){caseused = true;} if(strcmp(strsrc, strcomp, caseused)==0){ // Strings are equal return 1; } return 0;}