Теперь о командах с функцией strtok. Эта функция используется во многих командах.
cmd = strtok(cmdtext, idx);
if(strcmp(cmd,"/команда",true) == 0) { /* действие */ return 1; }
Пример команды - /kick
Code
if(strcmp(cmd,"/kick",true) == 0) // true/false - игнорировать регистр (true - да, false - нет) { new string[256]; tmp = strtok(cmdtext, idx); // tmp - это то что игрок введет после кик (например /kick 4) if(!strlen(tmp)) // если игрок ввел просто /kick { SendClientMessage(playerid,0x33FF33AA,"Применение: /kick [id]"); return 1; } giveplayerid = strval(tmp); // giveplayerid - это игрок которого будут кикать if(IsPlayerAdmin(playerid)) // проверяет является ли игрок админом, если нет - облом { SendClientMessage(playerid,0x00AAAAAA,"Tы не админ!"); return 1; } if(IsPlayerConnected(giveplayerid)) { SendClientMessage(playerid,0x00AAAAAA," Игрок не подключен!"); return 1; } GetPlayerName(playerid,sendername,sizeof(sendername)); GetPlayerName(giveplayerid,playername,sizeof(playername)); format(string,sizeof(string),"%s кикнул игрока %s.",sendername,playername); SendClientMessageToAll(0x33FF33AA,string); Kick(giveplayerid); return 1; }
Вот сама функция:
Code
strtok(const string[], &index) { new length = strlen(string); while ((index < length) && (string[index] <= ' ')) { index++; }
if(strcmp(cmd,"/kick",true) == 0) { new string[256];tmp = strtok(cmdtext, idx); // tmp - это то что игрок введет после кик (например /kick 4) if(!strlen(tmp)) // если игрок ввел просто /kick { SendClientMessage(playerid,0x33FF33AA,"Применение: /kick [id]"); return 1; } giveplayerid = strval(tmp); // giveplayerid - это игрок которого будут кикать if(IsPlayerAdmin(playerid)) // проверяет является ли игрок админом, если нет - облом { SendClientMessage(playerid,0x00AAAAAA,"Tы не админ!"); return 1; } if (IsPlayerConnected(giveplayerid)) { SendClientMessage(playerid,0x00AAAAAA," Игрок не подключен!"); return 1; } GetPlayerName(playerid,sendername,sizeof(sendername)); GetPlayerName(giveplayerid,playername,sizeof(playername)); format(string,sizeof(string),"%s кикнул игрока %s.",sendername,playername); SendClientMessageToAll(0x33FF33AA,string); Kick(giveplayerid); return 1; }
Надо не if(IsPlayerAdmin(playerid)),а if(!IsPlayerAdmin(playerid))
if(strcmp(cmdtext, "/command", true) == 0) { if(IsPlayerAdmin(playerid)) { /* действие */ } else return SendClientMessage(playerid,COLOR_RED,"Вы не Администратор, чтобы использовать эту команду!"); }
Сообщение отредактировал Mishanzanza - Вторник, 10.06.2008, 08:22
Надо не if(IsPlayerAdmin(playerid)),а if(!IsPlayerAdmin(playerid))
Т.к. IsPlayerAdmin возвращает 1,если игрок админ,и 0,если нет, можно и: if(IsPlayerAdmin(playerid)==0) - проверка.если игрок НЕ админ. if(IsPlayerAdmin(playerid)==1) - проверка.если игрок админ.
А как сделать, чтобы здоровье у игрока замораживалось ? Т.е например вводиш команду, и здоровье замораживаеться, и при любых падениях (даже /skydive здоровье было полным, т.е не отнималось).