В этом статье я расскажу как сделать админ систему по уровеню/level . И так приступим Создадим массив для хранения админки (впрочем можно использовать много для чего):
Код
new Player[MAX_PLAYERS][pInfo];
MAX_PLAYERS - ид игрока, к которому все это относится pInfo - ну так скажем сама информация Теперь создадим enum, если проще сказать, он показывает что у нас будет вместо pInfo:
Сюда же мы может всунуть, например pJob (имя произвольное), которое может означать профессию или что то другое. По сути сама система готова, теперь приведем ее в действие. Сделаем команду для ркон админов, чтобы они могли давать админки: В
Код
public OnPlayerCommandText (срабатывает, когда игрок вводит команду)
добавляем:
Код
new cmd[128],idx,tmp[128];
// это нам нужно, чтобы мочь писать команды, в которых присутствует пробелы, после которых идут ID, тексты и т.д.
Код
cmd = strtok(cmdtext, idx);
команда на уровень/level администратора
Код
if (strcmp("/makeadmin", cmd, true) == ) // создаем команду { if (!IsPlayerAdmin(playerid)) // узнаем, если игрок не ркон админ, playerid - id игрока, который ввел команду { SendClientMessage(playerid, 0xFF0000FF, "Вы не rcon администратор"); // отправляем игроку сообщение о том, что он не ркон админ, 0xFF0000FF - цвет } tmp = strtok(cmdtext, idx); // делаем пробел после самой команды if(!strlen(tmp)) return SendClientMessage(playerid, 0xFFFFFFFF , "Используйте /makeadmin [ID игрока] [lvl]"); // если человек вводит /makeadmin без id и лвл, то отправляем сообщение new player = strval(tmp); // честно говоря, я не знаю, зачем это делать, но в виде tmp в сообщениях, например, использовать не дает <img rel="usm" src="http://forum-pawno.ru/smiles/Juokas.gif" border="0" align="absmiddle" alt=":D" /> tmp = strtok(cmdtext, idx); // делаем 2 пробел if(!strlen(tmp)) return SendClientMessage(playerid, 0xFFFFFFFF , "Используйте /makeadmin [ID игрока] [lvl]"); new adminl = strval(tmp); if(!IsPlayerConnected(player)) return SendClientMessage(playerid,Red,"Игрок не онлайн!"); // если игрок, которого мы ввели после команды не онлайн ... if(adminl > 5 || adminl < 0) return SendClientMessage(playerid,Red,"Нельзя больше 5 и меньше 0!"); // устанавливаем рамки уровней админки, в данном случае 5 уровней + 0лвл - игрок Player[player] [pAdmin]= adminl; // присваиваем информации об админ статусе игрока значение, которое ркон админ ввел ([lvl]), это наш массив, вместо pInfo мы вставляем одно из того, что прописано в enum new string[256]; // создадим массив для хранения сообщения игроку format(string, sizeof(string), "Вы были назначены администратором %d уровня! Поздравляем!",adminl); // для красоты уже, отправим игроку сообщение о том, что его назначили администратором, т.к. у нас присутствует %d, сначала пропишем format SendClientMessage(player,0x00FF00FF,string); return 1; // завершаем команду }
Ну все, теперь просто везде, где нам нужно сделать что-то доступное только администратору n лвл, мы прописывает проверку if (Player[playerid] [pAdmin]>= n) (вместо n вставляем лвл админа. Ну для наглядности сделаю простую команду восстановить себе здоровье, доступную админам 3-5 лвл.
Код
if (strcmp("/heal", cmd, true) == 0) { if (Player[playerid] [pAdmin]>= 3) { SetPlayerHealth(playerid, 100); } else { SendClientMessage(playerid, 0xFF0000FF, "У вас нет прав"); } return 1; }
И чтобы это работало, нам еще нужно добавить в конец мода:
Код
strtok(const string[], &index) { new length = strlen(string); while ((index < length) && (string [index]<= ' ')) { index++; }
Ребят помогите C:\Users\Àëåêñàíäð\Documents\GTA San Andreas User Files\Íîâàÿ ïàïêà\gamemodes\new.pwn(64) : error 029: invalid expression, assumed zero C:\Users\Àëåêñàíäð\Documents\GTA San Andreas User Files\Íîâàÿ ïàïêà\gamemodes\new.pwn(64) : error 017: undefined symbol "cmd" C:\Users\Àëåêñàíäð\Documents\GTA San Andreas User Files\Íîâàÿ ïàïêà\gamemodes\new.pwn(64) : error 029: invalid expression, assumed zero C:\Users\Àëåêñàíäð\Documents\GTA San Andreas User Files\Íîâàÿ ïàïêà\gamemodes\new.pwn(64) : fatal error 107: too many error messages on one line