АлексейИванович 0 Опубликовано 13 ноября, 2018 Помогите пожалуйста написать команду для игроков на выдачу админки 1 уровня самому себе на движке PAWN_CMD Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
olegp 12 Опубликовано 13 ноября, 2018 Вот здесь есть полные экзамплы команд. В чем проблема ? 1 Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
1Agent1 2 Опубликовано 13 ноября, 2018 @АлексейИванович, K define #define SCM SendClientMessage #define flood if(AntiFlood[playerid] > gettime()) return SCM(playerid, COLOR_RED, "[Info]{FFFFFF} Пожалуйста прекратите флудить!"); AntiFlood[playerid] = gettime()+1; #define ESCM SCM(playerid, COLOR_RED, "[Ошибка]{FFFFFF} Вы не уполномочены использовать эту команду!"); #define ISCM SCM(playerid, COLOR_RED, "[Ошибка]{FFFFFF} Игрок не найден!"); #define f( format(string, sizeof(string), ---------------------------------------- CMD:makeadmin(playerid, params[]) { flood new string[100],nama[MAX_PLAYER_NAME]; GetPlayerName(playerid,nama,sizeof(nama)); if(Player[playerid][pAdmin] < 5) return ESCM if(sscanf(params, "ii", params[0], params[1])) return SCM(playerid, COLOR_YELLOW, "[Используйте]{FFFFFF} /makeadmin [id] [lvl (0-4)]"); if(!IsPlayerConnected(params[0])) return ISCM if(params[1] < 0 || params[1] > 4) return SCM(playerid, COLOR_RED, "[Ошибка]{FFFFFF} Уровень админки не может быть 0 или больше 4!"); if(Player[playerid][pAdmin] < Player[params[0]][pAdmin]) return SCM(playerid, COLOR_RED, "[Ошибка]{FFFFFF} У этого игрока уровень админки выше!"); Player[params[0]][pAdmin] = params[1]; f("Администратор{FFA200} %s {AA3333}изменил ваш админ уровень на{FFA200} %d", nama, params[1]); SCM(params[0], COLOR_RED, string); return true; } Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты
noname_idk 150 Опубликовано 14 ноября, 2018 @1Agent1, если это из твоего мода, то советую немного переделать код: Синтаксис макросов не соответствует синтаксису языку pawn в целом. Это сбивает с толку и служит неудачной практикой, не лучшей, если быть корректнее (я говорю о том, что в макросах уже проставлены точки с запятой). Вы сначала получаете имя игрока, а потом проверяете, точно ли этот игрок является вообще администратором и ввел ли он все параметры. По сути, если игрок введет "/makeadmin" (без аргументов), будет объявлена переменная впустую. Ну, и, конечно, вызвана лишняя нативная функция GetPlayerName. В общем эти три строки следует переместить после проверок всех. В sscanf присутствует параметр "u" (заместо "i"), который не только проверяет наличие аргумента целочисленного, но и сразу проверяет, в сети ли игрок/бот под указанным идентификатором, возвращая его или INVALID_PLAYER_ID. Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты