Система писалась под мод Diamond Role Play/State99. При копировании в другие моды возможны ошибки.
В enum PDATA добавим:
Код:
pTWarn
Далее в базе данных создадим строку TWarn.
 Как добавить

после чего нажимаем "OK"

После чего нажимаем "Сохранить"


Далее ко всем командам для выдачи предупреждений:
Код:
	if(!strcmp(cmd,"/twarn",true))
	{
  		if(!IsALeader(playerid)) return SendClientMessage(playerid, CBLUE,"Вам не доступна эта функция");
		tmp = strtok(cmdtext, idx);
		if(!strlen(tmp) || !isNumeric(tmp)) return SendClientMessage(playerid,CGRAY,"/twarn [ID игрока] [Причина]");
		new id = strval(tmp);
		if(!IsPlayerConnected(id) || IsKicked(id)) return SendClientMessage(playerid,CGRAY,"Неверный ID");
		if(pData[id][pFraction] != pData[playerid][pFraction] || pData[id][pSubfraction] != pData[playerid][pSubfraction]) return SendClientMessage(playerid,CGRAY,"Игрок не состоит в вашей организации");
		if(id == playerid) return SendClientMessage(playerid,CGRAY,"Нельзя указывать свой ID");
		if(!pData[id][pMysqlID]) return SendClientMessage(playerid,CGRAY,"Этот игрок не зарегистрирован");
		tmp = strrest(cmdtext, idx);
		if(!strlen(tmp)) return SendClientMessage(playerid,CGRAY,"/twarn [ID игрока] [Причина]");
		new mes[128];
		pData[id][pTWarn] = pData[id][pTWarn]+1;
		new koll = pData[id][pTWarn];
		if(koll < 3) format(mes,sizeof(mes),"[F]%s выдал выговор %s [%d/3]. Причина: %s",pData[playerid][pNickname],pData[id][pNickname],koll,tmp);
		SendFMes(pData[playerid][pFraction],COLOR_LIGHTRED, mes);
		pData[id][pTWarn] = koll;
		UpdatePlayerData(id,"TWarn",pData[id][pTWarn]);
		if(koll == 3)
		{
			pData[id][pTWarn] = 0;
			UpdatePlayerData(id,"TWarn",pData[id][pTWarn]);
			new query[128];
			format(query,sizeof(query),"UPDATE `accounts` SET `fraction` = '0', `rank` = '0', `fractionskin` = '0', `subfraction` = '0' WHERE `id` = '%d'",pData[id][pMysqlID]);
			sql_query(zConn, query, QUERY_THREADED);
	        SetPlayerArmourEx(id, 0);
			ResetPlayerWeaponsEx(id);
			pData[id][pFraction] = 0;
			pData[id][pRank] = 0;
			pData[id][pFractionSkin] = 0;
			pData[id][pSubfraction] = 0;
			ResetPlayerWeaponsEx(id);
			SetPlayerColor(id,0xFFFFFF11);
			new houseid = pData[id][pHouse]-1;
			if(!(houseid+1) || ((houseid+1) > 0 && pData[id][pMysqlID] != gHouses[houseid][houseOwnerID])) SetPlayerSkin(id,pData[id][pSkin]);
			else if(!gHouses[houseid][houseImprove][3]) SetPlayerSkin(id,pData[id][pSkin]);
			else
			{
				for(new x; x < 3; x ++) {
					if(!gHouses[houseid][houseSkin]) continue;
					pData[id][pSkin] = gHouses[houseid][houseSkin];
					if(GetPlayerSkin(id) == gHouses[houseid][houseSkin][3]) SetPlayerSkin(id,pData[id][pSkin]);
				}
				gHouses[houseid][houseSkin][3] = 0;

				UpdateHouseDress(houseid);
			}
			SetPlayerSkin(id,pData[id][pSkin]);
			format(mes,sizeof(mes),"[F]%s выдал выговор %s [3/3]. Причина: %s [Сотрудник уволен]",pData[playerid][pNickname],pData[id][pNickname],tmp);
			SendFMes(pData[playerid][pFraction],COLOR_LIGHTRED, mes);
			SendClientMessage(id, COLOR_LIGHTRED,"* Вы были уволены из организации!");
		}
        
	}
Команда для снятия
Код:
	
if(!strcmp(cmd,"/untwarn",true))
	{
		if(!IsALeader(playerid)) return SendClientMessage(playerid, CBLUE,"Вам не доступна эта функция");
		tmp = strtok(cmdtext, idx);
		if(!strlen(tmp) || !isNumeric(tmp)) return SendClientMessage(playerid,CGRAY,"/untwarn [ID игрока]");
		new id = strval(tmp);
		if(!IsPlayerConnected(id)) return SendClientMessage(playerid,CGRAY,"Неверный ID");
		if(!pData[id][pMysqlID]) return SendClientMessage(playerid,CGRAY,"Этот игрок не зарегистрирован");
		if(pData[id][pFraction] != pData[playerid][pFraction] || pData[id][pSubfraction] != pData[playerid][pSubfraction]) return SendClientMessage(playerid,CGRAY,"Игрок не состоит в вашей организации");
        if(id == playerid) return SendClientMessage(playerid,CGRAY,"Нельзя указывать свой ID");
		if(!pData[id][pTWarn]) return SendClientMessage(playerid,CGRAY,"У этого игрока нет выговоров");
		pData[id][pTWarn] -= 1;
		UpdatePlayerData(id,"TWarn",pData[id][pWarn]);
		new mes[128];
		format(mes,sizeof(mes),"[F]%s снял выговор %s[%d/3]",pData[playerid][pNickname],pData[id][pNickname],pData[id][pTWarn]);
  		SendFMes(pData[playerid][pFraction],COLOR_LIGHTRED, mes);
	}
Так же необходимо поставить обнуление предупреждений при увольнении в различных случаях. В строке обращения к базе данных добавьте:
Код:
, `TWarn` = '0'
И, если увольнение происходит во время того, как игрок находится в игре добавьте:
Код:
pData[actplayerid][pTWarn] = 0;
Лично у меня в коде кол-во предупреждений можно посмотреть в /showall
Скину свою версию /showall, необходимо добавить эту команду с заменой или придумать свою реализацию.
Код:
if(!strcmp(cmd, "/showall", true))
	{
	    if(!pData[playerid][pFraction]) return SendClientMessage(playerid,CGRAY,"Вы не состоите во организации");
		new query[2046];
		if(pData[playerid][pSubfraction]) {
            if(pData[playerid][pRank] < gFractionRankCount[pData[playerid][pFraction]-1]-1) return SendClientMessage(playerid,CGRAY,"Команда доступна только лидеру организации.");
			format(query, sizeof(query), "SELECT `nickname`,`rank`,`level`,`TWarn` FROM `accounts` WHERE `fraction` = %d AND `subfraction` = %d ORDER BY `rank`", pData[playerid][pFraction], pData[playerid][pSubfraction]);
		}
		else {
            if(pData[playerid][pRank] < gFractionRankCount[pData[playerid][pFraction]-1]) return SendClientMessage(playerid,CGRAY,"Команда доступна только лидеру организации.");
			format(query, sizeof(query), "SELECT `nickname`,`rank`,`level`,`TWarn` FROM `accounts` WHERE `fraction` = %d AND `subfraction` = 0 ORDER BY `rank`", pData[playerid][pFraction], pData[playerid][pSubfraction]);
		}
		new Result:r = sql_query(zConn, query, QUERY_CACHED);
		if(sql_num_rows(r)) {
			format(query, sizeof(query), "Уровень\tИмя игрока\tРанг[Кол-во выговоров]\n\n");
			new nn[MAX_PLAYER_NAME], rank, lvl, TWarn;
	        for(new i; i<sql_num_rows(r); i++)
			{
			    sql_get_field_ex(r, i, 0, nn);
			    rank = sql_get_field_int_ex(r, i, 1);
				lvl = sql_get_field_int_ex(r, i, 2);
				TWarn = sql_get_field_int_ex(r, i, 3);
			    format(query, sizeof(query), "%s\t%d\t%s\t\t%d[%d/3]\n",query, lvl,nn, rank, TWarn);
			}
			ShowPlayerDialog(playerid, 0000, 0, "Список сотрудников:",query,"Ок", "");
  		}
		else SendClientMessage(playerid, CGRAY, "Произошла ошибка базы данных");
		sql_free_result(r);
		return 1;
	}
На этом все. Спасибо за внимание