Hier mal eben geschrieben, vielleicht hilft es dir weiter.
Das ist ein Filterscript (also bitte als solches einfügen) + in den Scriptfiles den Ordner Warnings erstellen.
Es speichert die Warnings und sobald du jemanden mehr als 3x verwarnt hast, bekommst dieser einen kick und die Warnings resetten sich.
PS: Farben kannst du oben gerne noch einstellen 
//(c) by Kaliber
#include <a_samp>
/******************************************************************************/
#undef MAX_PLAYERS
#define MAX_PLAYERS 100
#define MAX_WARNINGS 3
#define SCM SendClientMessage
#define rot 0xFF0000FF
#define MAX_TEXT 144
/******************************************************************************/
static warnings[MAX_PLAYERS char],name[MAX_PLAYERS][MAX_PLAYER_NAME];
/******************************************************************************/
public OnFilterScriptInit() return print("\t *** Warnsystem (c) by Kaliber was loaded. ***");
public OnFilterScriptExit() return print("\t *** Warnsystem (c) by Kaliber was unloaded. ***");
public OnPlayerConnect(playerid) return GetPlayerName(playerid,name[playerid],MAX_PLAYER_NAME),warnings{playerid}=LoadWarnings(playerid);
public OnPlayerDisconnect(playerid) return (warnings{playerid}) ? SaveWarnings(playerid) : 1;
public OnPlayerCommandText(playerid,cmdtext[]) {
new cmd[32];strcat(cmd,cut(cmdtext),32);
if(!strcmp(cmd,"/warn")) {
if(!IsPlayerAdmin(playerid)) return SCM(playerid,rot,"Du bist kein Administrator!");
new pID = Get(cmdtext),string[MAX_TEXT];
warnings{pID}++;
format(string,MAX_TEXT,"* Du hast %s (ID: %d) verwarnt! (%d / %d)",name[pID],pID,warnings{pID},MAX_WARNINGS),SCM(playerid,rot,string);
format(string,MAX_TEXT,"* Admin %s (ID: %d) hat dich verwarnt! (%d / %d)",name[playerid],playerid,warnings{pID},MAX_WARNINGS),SCM(pID,rot,string);
if(warnings{pID} >= MAX_WARNINGS) return warnings{pID}=0,f_Kick(playerid,pID);
return 1;
}
return 0;
}
/******************************************************************************/
stock LoadWarnings(playerid) {
new path[MAX_PLAYER_NAME + 14];
format(path,sizeof path,"Warnings/%s.txt",name[playerid]);
if(!fexist(path)) return 0;
new File:f = fopen(path,io_read),buffer[11];
return fread(f,buffer,sizeof buffer),fclose(f),strval(buffer);
}
stock SaveWarnings(playerid) {
new path[MAX_PLAYER_NAME + 14];
format(path,sizeof path,"Warnings/%s.txt",name[playerid]);
new File:f = fopen(path,io_write),buffer[11];
return valstr(buffer,warnings{playerid}),fwrite(f,buffer),fclose(f);
}
stock cut(cmd[]) {
new pos = strfind(cmd," "),buffer[32];
return strcat(buffer,cmd,32),strdel(buffer,pos,strlen(buffer)),buffer;
}
stock Get(cmd[]) {
new pos = strfind(cmd," ");
return strdel(cmd,0,pos+1),strval(cmd);
}
stock f_Kick(playerid,i) {
new string[MAX_TEXT];
format(string,MAX_TEXT,"* Admin %s kickt Spieler %s (ID: %d) wegen %d Verwarnugen!",name[playerid],name[i],i,MAX_WARNINGS);
return SendClientMessageToAll(rot,string),Kick(i);
}
mfg. 
//Edit: Die prints noch entfernt 