В первой команде лучше всё же начать табуляцию прямо от начала (левого края, а не делать отступ), дабы удобнее было вставлять код в скрипт.
Потом, во второй, как и в первой, команде есть вот такой код (только в первой перевод нормальный)
PHP код:
if(params[0] == INVALID_PLAYER_ID) return SendClientMessage(playerid, -1, "????? ?? ??????!");
В котором и перевод косячный (ну это и ежу понятно), и условие не сработает, пока ты сам не введёшь "65535". IsPlayerConnect для кого придуман? Да и поздновато ты значение переменной с ID проверяешь. Если игрок введёт значение, которое больше твоего MAX_PLAYERS (или меньше 0), у тебя будет выход за пределы массива в проверке, типа:
PHP код:
if(PlayerInfo[giveplayerid][pLeader] != 0) return SendClientMessage(playerid, -1, "Вы указали ID лидера!");
Да и что за "params[0]", если в sscanf уже указаны переменные (
которые ты, кстати, не объявил. Они из воздуха появляются, видимо)? Так же и с макросами для цветов - не везде изменил их (да и менять их на "-1", а не настоящие цвета - довольно халтурно...)
Ну и возвраты я бы расставил чуть иначе, ибо это тяжко читать глазам...
Да и вот такие сокращения оставь, пожалуйста, на p-i
PHP код:
GetPlayerName(playerid, sendername, sizeof(sendername)), GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
Вообще вот тебе готовая тема. Не благодари
Открыть/закрыть Здравствуйте пользователи и гости форума pro-pawn.ru.
Без всяких подробностей перейдём к команде.
Команда /arank - позволяет администратору сервера изменить ранг игрока в любой организации.
Видел данную команду на некоторых серверах и решил написай под свой.
Предупреждение:
Команда сделана под мой мод где в каждой организации по 10 рангов(10 - лидер). Если у вас не так то подстройте команду под себя.
Каждую строку я опишу.
- Вариант для обычного командного процессора + ReturnUser:
PHP код:
else if(strcmp(cmd, "/arank", true) == 0)
{
if(PlayerInfo[playerid][pAdmin] < 5)
return SendClientMessage(playerid, -1, "Вы не уполномочены использовать данную команду!");
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
return SendClientMessage(playerid, -1, "Введите: /arank [id] [rang]");
new giveplayerid = ReturnUser(tmp),
string[136],
giveplayer[MAX_PLAYER_NAME],
sendername[MAX_PLAYER_NAME],
rang;
GetPlayerName(playerid, sendername, sizeof(sendername));
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
if(!IsPlayerConnected(giveplayerid))
return SendClientMessage(playerid, -1, "Игрок не найдён!");
if(PlayerInfo[giveplayerid][pLeader] != 0)
return SendClientMessage(playerid, -1, "Вы указали ID лидера!");
if(PlayerInfo[giveplayerid][pMember] == 0)
return SendClientMessage(playerid, -1, "Игрок с данным ID не состоит в фракции");
tmp = strtok(cmdtext, idx);
rang = strval(tmp);
if(!strlen(tmp))
return SendClientMessage(playerid, -1, "Введите: /arank [id] [rang]");
if(rang < 1 || rang > 9)
return SendClientMessage(playerid, -1, "Нельзя установить ранг менее 1 или более 9!");
PlayerInfo[giveplayerid][pRang] = rang;
format(string, sizeof(string), "Администратор %s[%d] изменил ваш ранг на %d", sendername, playerid, rang);
SendClientMessage(giveplayerid, -1, string);
format(string, sizeof(string), "Вы изменили ранг %s[%d] на %d", giveplayer, giveplayerid, rang);
SendClientMessage(playerid, -1, string);
return 1;
}
Объяснение кода:
PHP код:
else if(strcmp(cmd, "/arank", true) == 0) // Команда
{
if(PlayerInfo[playerid][pAdmin] < 5) // Проверка на админку(меняйте под свое тут 5+ адм лвл).
return SendClientMessage(playerid, -1, "Вы не уполномочены использовать данную команду!");
tmp = strtok(cmdtext, idx);
if(!strlen(tmp))
return SendClientMessage(playerid, -1, "Введите: /arank [id] [rang]"); // Если ввёл команду полностью то показывает подсказку
new giveplayerid = ReturnUser(tmp),
string[136],
giveplayer[MAX_PLAYER_NAME],
sendername[MAX_PLAYER_NAME],
rang; // Создаём переменные + зразу даём одной определение
GetPlayerName(playerid, sendername, sizeof(sendername));
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer)); // Записываем в массивы ник-неймы игроков.
if(!IsPlayerConnected(giveplayerid))
return SendClientMessage(playerid, -1, "Игрок не найдён!"); // Проверка: если игрока с указанным id нет на сервер тогда ошибка.
if(PlayerInfo[giveplayerid][pLeader] != 0)
return SendClientMessage(playerid, -1, "Вы указали ID лидера!"); // Проверка: если игрок(которому выдают ранг) лидер тогда ошибка.
if(PlayerInfo[giveplayerid][pMember] == 0)
return SendClientMessage(playerid, -1, "Игрок с данным ID не состоит в фракции"); // Проверка: если игрок не состоит в организации тогда ошибка.
tmp = strtok(cmdtext, idx);
rang = strval(tmp); // присваиваем переменной rang значение указанного ранга
if(!strlen(tmp))
return SendClientMessage(playerid, -1, "Введите: /arank [id] [rang]"); // Если ввёл команду полностью то показывает подсказку
if(rang < 1 || rang > 9) // Проверка: Если указан ранг меньше 1 и больше 9 то ошибка [Меняем на свои минимальные и максимальные ранги].
return SendClientMessage(playerid, -1, "Нельзя установить ранг менее 1 или более 9!"); // Ошибка к проверке на ранг
PlayerInfo[giveplayerid][pRang] = rang; // Изменяем ранг
format(string, sizeof(string), "Администратор %s[%d] изменил ваш ранг на %d", sendername, playerid, rang); // Форматируем текст для игрока которому изменили ранг
SendClientMessage(giveplayerid, -1, string); // Отправляем текст для игрока которому изменили ранг
format(string, sizeof(string), "Вы изменили ранг %s[%d] на %d", giveplayer, giveplayerid, rang); // Форматируем текст для администратора
SendClientMessage(playerid, -1, string); // Отправляем текст для администратора
return 1;
}
- Вариант на DC_CMD/ZCMD + sscanf2:
PHP код:
CMD:arank(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] < 5)
return SendClientMessage(playerid, -1, "Вы не уполномочены использовать данную команду!");
new giveplayerid,
rang;
if(sscanf(params, "dd", giveplayerid, rang))
return SendClientMessage(playerid, -1, "Введите: /arank [id] [rang]");
if(!IsPlayerConnected(giveplayerid))
return SendClientMessage(playerid, -1, "Игрока с данным ID нет на сервере!");
new string[136],
giveplayer[MAX_PLAYER_NAME],
sendername[MAX_PLAYER_NAME];
GetPlayerName(playerid, sendername, sizeof(sendername));
GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
if(PlayerInfo[giveplayerid][pLeader] != 0)
return SendClientMessage(playerid, -1, "Вы указали ID лидера!");
if(PlayerInfo[giveplayerid][pMember] == 0)
return SendClientMessage(playerid, -1, "Игрок с данным ID не состоит в фракции!"
if(rang < 1 || rang > 9)
return SendClientMessage(playerid, -1, "Нельзя установить ранг менее 1 или более 9!");
PlayerInfo[giveplayerid][pRang] = rang;
format(string, sizeof(string), "Администратор %s[%d] изменил ваш ранг на %d", sendername, playerid, rang);
SendClientMessage(giveplayerid, -1, string);
format(string, sizeof(string), "Вы изменили ранг %s[%d] на %d", giveplayer, giveplayerid, rang);
SendClientMessage(playerid, -1, string);
return 1;
}
CTRL + C
Код:
Здравствуйте пользователи и гости форума pro-pawn.ru.
Без всяких подробностей перейдём к команде.
Команда /arank - позволяет администратору сервера изменить ранг игрока в любой организации.
Видел данную команду на некоторых серверах и решил написай под свой.
Предупреждение:
Команда сделана под мой мод где в каждой организации по 10 рангов(10 - лидер). Если у вас не так то подстройте команду под себя.
Каждую строку я опишу.
- Вариант для обычного командного процессора + ReturnUser:
PHP код:
else if(strcmp(cmd, "/arank", true) == 0) { if(PlayerInfo[playerid][pAdmin] < 5) return SendClientMessage(playerid, -1, "Вы не уполномочены использовать данную команду!"); tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, -1, "Введите: /arank [id] [rang]"); new giveplayerid = ReturnUser(tmp), string[136], giveplayer[MAX_PLAYER_NAME], sendername[MAX_PLAYER_NAME], rang; GetPlayerName(playerid, sendername, sizeof(sendername)); GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer)); if(!IsPlayerConnected(giveplayerid)) return SendClientMessage(playerid, -1, "Игрок не найдён!"); if(PlayerInfo[giveplayerid][pLeader] != 0) return SendClientMessage(playerid, -1, "Вы указали ID лидера!"); if(PlayerInfo[giveplayerid][pMember] == 0) return SendClientMessage(playerid, -1, "Игрок с данным ID не состоит в фракции"); tmp = strtok(cmdtext, idx); rang = strval(tmp); if(!strlen(tmp)) return SendClientMessage(playerid, -1, "Введите: /arank [id] [rang]"); if(rang < 1 || rang > 9) return SendClientMessage(playerid, -1, "Нельзя установить ранг менее 1 или более 9!"); PlayerInfo[giveplayerid][pRang] = rang; format(string, sizeof(string), "Администратор %s[%d] изменил ваш ранг на %d", sendername, playerid, rang); SendClientMessage(giveplayerid, -1, string); format(string, sizeof(string), "Вы изменили ранг %s[%d] на %d", giveplayer, giveplayerid, rang); SendClientMessage(playerid, -1, string); return 1;}
Объяснение кода:
PHP код:
else if(strcmp(cmd, "/arank", true) == 0) // Команда{ if(PlayerInfo[playerid][pAdmin] < 5) // Проверка на админку(меняйте под свое тут 5+ адм лвл). return SendClientMessage(playerid, -1, "Вы не уполномочены использовать данную команду!"); tmp = strtok(cmdtext, idx); if(!strlen(tmp)) return SendClientMessage(playerid, -1, "Введите: /arank [id] [rang]"); // Если ввёл команду полностью то показывает подсказку new giveplayerid = ReturnUser(tmp), string[136], giveplayer[MAX_PLAYER_NAME], sendername[MAX_PLAYER_NAME], rang; // Создаём переменные + зразу даём одной определение GetPlayerName(playerid, sendername, sizeof(sendername)); GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer)); // Записываем в массивы ник-неймы игроков. if(!IsPlayerConnected(giveplayerid)) return SendClientMessage(playerid, -1, "Игрок не найдён!"); // Проверка: если игрока с указанным id нет на сервер тогда ошибка. if(PlayerInfo[giveplayerid][pLeader] != 0) return SendClientMessage(playerid, -1, "Вы указали ID лидера!"); // Проверка: если игрок(которому выдают ранг) лидер тогда ошибка. if(PlayerInfo[giveplayerid][pMember] == 0) return SendClientMessage(playerid, -1, "Игрок с данным ID не состоит в фракции"); // Проверка: если игрок не состоит в организации тогда ошибка. tmp = strtok(cmdtext, idx); rang = strval(tmp); // присваиваем переменной rang значение указанного ранга if(!strlen(tmp)) return SendClientMessage(playerid, -1, "Введите: /arank [id] [rang]"); // Если ввёл команду полностью то показывает подсказку if(rang < 1 || rang > 9) // Проверка: Если указан ранг меньше 1 и больше 9 то ошибка [Меняем на свои минимальные и максимальные ранги]. return SendClientMessage(playerid, -1, "Нельзя установить ранг менее 1 или более 9!"); // Ошибка к проверке на ранг PlayerInfo[giveplayerid][pRang] = rang; // Изменяем ранг format(string, sizeof(string), "Администратор %s[%d] изменил ваш ранг на %d", sendername, playerid, rang); // Форматируем текст для игрока которому изменили ранг SendClientMessage(giveplayerid, -1, string); // Отправляем текст для игрока которому изменили ранг format(string, sizeof(string), "Вы изменили ранг %s[%d] на %d", giveplayer, giveplayerid, rang); // Форматируем текст для администратора SendClientMessage(playerid, -1, string); // Отправляем текст для администратора return 1;}
- Вариант на DC_CMD/ZCMD + sscanf2:
PHP код:
CMD:arank(playerid, params[]){ if(PlayerInfo[playerid][pAdmin] < 5) return SendClientMessage(playerid, -1, "Вы не уполномочены использовать данную команду!"); new giveplayerid, rang; if(sscanf(params, "dd", giveplayerid, rang)) return SendClientMessage(playerid, -1, "Введите: /arank [id] [rang]"); if(!IsPlayerConnected(giveplayerid)) return SendClientMessage(playerid, -1, "Игрока с данным ID нет на сервере!"); new string[136], giveplayer[MAX_PLAYER_NAME], sendername[MAX_PLAYER_NAME]; GetPlayerName(playerid, sendername, sizeof(sendername)); GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer)); if(PlayerInfo[giveplayerid][pLeader] != 0) return SendClientMessage(playerid, -1, "Вы указали ID лидера!"); if(PlayerInfo[giveplayerid][pMember] == 0) return SendClientMessage(playerid, -1, "Игрок с данным ID не состоит в фракции!" if(rang < 1 || rang > 9) return SendClientMessage(playerid, -1, "Нельзя установить ранг менее 1 или более 9!"); PlayerInfo[giveplayerid][pRang] = rang; format(string, sizeof(string), "Администратор %s[%d] изменил ваш ранг на %d", sendername, playerid, rang); SendClientMessage(giveplayerid, -1, string); format(string, sizeof(string), "Вы изменили ранг %s[%d] на %d", giveplayer, giveplayerid, rang); SendClientMessage(playerid, -1, string); return 1;}
Собстно, не идеально и можно ещё пошаманить с оформлением, но лучше, чем у тебя, как мне кажется. И код оформлен более-менее похоже на то, как принято кодить на pro-pawn.
И совет на будущее. Если хочешь остаться на этом форуме и научиться кодить (если не умеешь), при этом обзаведясь авторитетом, уделяй коду, который выкладываешь на форум, больше внимания. Тут не p-i и никто тебя хвалить не будет с целью набить себе очередной пост. Большая часть людей тебе всегда поможет, если ты сам будешь проявлять инициативу. Если же ты будешь и дальше так халтурно относится к своим темам, стараясь лишь набить репутацию, тебя быстро с этого форума изживут, увы :)