в этом уроке я расскажу как сделать простой бан игрока по ID
в самое начало:
Code
#define dcmd(%1,%2,%3) if ((strcmp((%3)[1], #%1, true, (%2)) == 0) && ((((%3)[(%2) + 1] == 0) && (dcmd_%1(playerid, "")))||(((%3)[(%2) + 1] == 32) && (dcmd_%1(playerid, (%3)[(%2) + 2]))))) return 1
#define COOL_GREEN 0xBBF900AA
#define AAD_COLOR_GREY 0xAFAFAFAA
потом ищем OnPlayerCommandText и вставляем:
Code
public OnPlayerCommandText(playerid,cmdtext[])
{
dcmd(ban,3,cmdtext);
return 0;
}
обьясню эту функцию
dcmd( - вызов комманды
ban - сама комманда
3 - длина комманды
cmdtext - тип текста (как в заголовке)
и, конечно, самая важная часть - сама комманда.
вставляем в самый конец, после всего
Code
stock ReturnPlayerID(PlayerName[])
{
for(new i = 0; i < MAX_PLAYERS; i++) if(IsPlayerConnected(i))
{
new name[24];
GetPlayerName(i,name,24);
if(strfind(name,PlayerName,true)!=-1) return i;
}
return INVALID_PLAYER_ID;
}
и сразу после этого:
Code
dcmd_ban(playerid,params[])
{
if(IsPlayerAdmin(playerid)) return SendClientMessage(playerid,AAD_COLOR_GREY," *** Ты не Администратор");
if(!strlen(params)) return SendClientMessage(playerid,AAD_COLOR_GREY," *** Ошибка: /ban [ID игрока] [причина]");
new tmp[256],Index;
tmp = strtok(params,Index);
new id;
if(!IsNumeric(tmp)) id = ReturnPlayerID(tmp);
else id = strval(tmp);
if(IsPlayerConnected(id) && id != INVALID_PLAYER_ID && id != playerid)
{
new string[256],name[24],ActionName[24];
GetPlayerName(playerid,name,24);
GetPlayerName(id,ActionName,24);
if(!strlen(params[strlen(tmp)+1])) format(string,256," *** Администратор %s (ID: %d) забанил игрока %s (ID: %d) (причина не указана)",name,playerid,ActionName,id);
else format(string,256," *** Администратор %s (ID: %d) забанил игрока %s (ID: %d) (Причина: %s)",name,playerid,ActionName,id,params[strlen(tmp)+1]);
SendClientMessageToAll(COOL_GREEN,string);
BanEx(id,params[strlen(tmp)+1]);
}
else SendClientMessage(playerid,AAD_COLOR_GREY," *** Вы не можете банить себя и не существующих игроков.");
return 1;
}
урок от BJIADOKC