PDA

Просмотр полной версии : [CMD] /arank - смена фракционного ранга администратором



MrJu[N]ior
24.02.2016, 21:49
Здравствуйте пользователи и гости форума pro-pawn.ru .
Без всяких подробностей перейдём к команде.
Команда /arank - позволяет администратору сервера изменить ранг игрока в любой организации.
Использование:


/arank [rang];

Видел данную команду на некоторых серверах и решил написай под свой.
[I]Предупреждение: команда сделана под мой мод где в каждой организации по 10 рангов(10 - лидер). Если у вас не так то подстройте команду под себя.
Вот и сам код:



else if(strcmp(cmd, "/arank", true) == 0)
{
if(PlayerInfo[playerid][pAdmin] < 5) return SendClientMessage(playerid, 0xFF0000FF, "Вы не уполномочены использовать данную команду!");
tmp = strtok(cmdtext, idx);
if(!strlen(tmp)) return SendClientMessage(playerid, 0xFF0000FF, "Введите: /arank [id] [rang]");
new giveplayerid = ReturnUser(tmp), string[136], giveplayer[MAX_PLAYER_NAME], rang, sendername[MAX_PLAYER_NAME];
GetPlayerName(playerid, sendername, sizeof(sendername)), GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
if(PlayerInfo[giveplayerid][pLeader] != 0) return SendClientMessage(playerid, 0xFF0000FF, "Вы указали ID лидера!");
if(PlayerInfo[giveplayerid][pMember] == 0) return SendClientMessage(playerid, 0xFF0000FF, "Игрок с данным ID не состоит в фракции");
if(!IsPlayerConnected(giveplayerid)) return SendClientMessage(playerid, 0xFF0000FF, "Игрок не найдён!");
tmp = strtok(cmdtext, idx), rang = strval(tmp);
if(!strlen(tmp)) return SendClientMessage(playerid, 0xFF0000FF, "Введите: /arank [id] [rang]");
if(rang > 9 && rang < 1) return SendClientMessage(playerid, 0xFF0000FF, "Нельзя установить ранг менее 1 или более 9!");
PlayerInfo[giveplayerid][pRang] = rang;
format(string, sizeof(string), "Администратор %s[%d] изменил ваш ранг на %d", sendername, playerid, rang);
SendClientMessage(giveplayerid, 0x33FF00FF, string);
format(string, sizeof(string), "Вы изменили ранг %s[%d] на %d", giveplayer, giveplayerid, rang);
SendClientMessage(playerid, 0x33FF00FF, string);
return 1;
}



Кстати, DC_CMD:



CMD:arank(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin] < 5) return SendClientMessage(playerid, 0xFF0000FF, "Вы не уполномочены использовать данную команду!");
new giveplayerid, string[136], giveplayer[MAX_PLAYER_NAME], rang, sendername[MAX_PLAYER_NAME];
if(sscanf(params, "dd", giveplayerid, rang)) return SendClientMessage(playerid, 0xFF0000FF, "Введите: /arank [id] [rang]");
GetPlayerName(playerid, sendername, sizeof(sendername)), GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));
if(PlayerInfo[giveplayerid][pLeader] != 0) return SendClientMessage(playerid, 0xFF0000FF, "Вы указали ID лидера!");
if(PlayerInfo[giveplayerid][pMember] == 0) return SendClientMessage(playerid, 0xFF0000FF, "Игрок с данным ID не состоит в фракции");
if(!IsPlayerConnected(giveplayerid)) return SendClientMessage(playerid, 0xFF0000FF, "Игрок не найдён!");
if(rang > 9 && rang < 1) return SendClientMessage(playerid, 0xFF0000FF, "Нельзя установить ранг менее 1 или более 9!");
PlayerInfo[giveplayerid][pRang] = rang;
format(string, sizeof(string), "Администратор %s[%d] изменил ваш ранг на %d", sendername, playerid, rang);
SendClientMessage(giveplayerid, 0x33FF00FF, string);
format(string, sizeof(string), "Вы изменили ранг %s[%d] на %d", giveplayer, giveplayerid, rang);
SendClientMessage(playerid, 0x33FF00FF, string);
return 1;
}

Desulaid
24.02.2016, 22:46
Где-то у Дэймоса читал про условия и у Данилы Кортеза миф про использование подобных параметров, советую найти и почитать. И воспитывайте в себе внутреннего перфекциониста))0)

$continue$
24.02.2016, 22:56
Учитесь, подчинятся вожаку - Daniel'y Cortez'y

повторюсь стадо баранов, не имеющих своего личного мнения, тупо преклоняющиеся перед своим "вожаком" типичное для школьников поведение...

Где-то у Дэймоса читал про условия и у Данилы Кортеза миф про использование подобных параметров, советую найти и почитать. И воспитывайте в себе внутреннего перфекциониста))0)

MrJu[N]ior
24.02.2016, 22:59
Где-то у Дэймоса читал про условия и у Данилы Кортеза миф про использование подобных параметров, советую найти и почитать. И воспитывайте в себе внутреннего перфекциониста))0)

Обязательно

DeimoS
24.02.2016, 23:42
Где-то у Дэймоса читал про условия и у Данилы Кортеза миф про использование подобных параметров, советую найти и почитать. И воспитывайте в себе внутреннего перфекциониста))0)

Про какие условия ты читал?

Автора забанили на p-i, где он так же всех обмазывал своим гениальным кодом и он решил взяться за нас :с Думаю, тут даже критиковать что-то бесполезно, ибо и так всё понятно
P.S. return для слабаков :russian_roulette:

MrJu[N]ior
24.02.2016, 23:44
Про какие условия ты читал?

Автора забанили на p-i, где он так же всех обмазывал своим гениальным кодом и он решил взяться за нас :с Думаю, тут даже критиковать что-то бесполезно, ибо и так всё понятно
P.S. return для слабаков :russian_roulette:

Он прав. Мифы по pawn пересмотри.

P.S: Untonyst: Исправил
P.S.S: Разбанили меня лол. Забанен там щас только мультиакк)0)

DeimoS
24.02.2016, 23:49
ior;70195']Он прав. Мифы по pawn пересмотри.

P.S: Untonyst: Исправил

Я знаю о чём он говорил, упоминая Кортеза. А вот когда он обо мне говорил - не совсем вкурил.
Ты и над табуляцией поработай. А так же возвраты расставь и убери все богохульские макросы, типа COLOR_LIGHTGREEN или SCM. Я тебе и на p-i те же замечания делал.

MrJu[N]ior
24.02.2016, 23:51
Я знаю о чём он говорил, упоминая Кортеза. А вот когда он обо мне говорил - не совсем вкурил.
Ты и над табуляцией поработай. А так же возвраты расставь и убери все богохульские макросы, типа COLOR_LIGHTGREEN или SCM. Я тебе и на p-i те же замечания делал.

Табуляция вкурсе. У меня там то пробел то Таб. Попровлю. Чем тебе LIGHTRED не угодил?(9. А SCM удобно мне. В начале о Дефайне указал

DeimoS
25.02.2016, 00:06
ior;70197']Табуляция вкурсе. У меня там то пробел то Таб.
Пункт #5 (http://pro-pawn.ru/showthread.php?8347-%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5-%D1%80%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%86%D0%B8%D0%B8-%D0%BF%D0%BE-%D0%BD%D0%B0%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8E-%D0%BA%D0%BE%D0%B4%D0%B0). Такого на p-i не напишут, да? Слишком сложно



ior;70197']Чем тебе LIGHTRED не угодил?

Тем, что у меня уже может быть свой макрос с данным цветом или же я вообще не использую макросы для цветов (в моём случае - второе). Так зачем мне создавать ещё один макрос (тем более, создание которого ты не добавил в свою тему), если у меня есть свои/они мне не нужны?
Или без этого макроса твою команду вообще никак нереально реализовать, что оправдывает существование этого макроса? Хмм... Давайте-ка попробуем вместе! Вот код:

SCM(playerid, COLOR_LIGHTRED, "Игрок с данным ID не состоит в фракции");
Лёгким движением пальцев он превращается вот в это:

SendClientMessage(playerid, 0xFF0000FF, "Игрок с данным ID не состоит в фракции");
сохранив свою работоспособность, при этом став адаптированным под любого пользователя. Чудо, не правда ли?


ior;70197']А SCM удобно мне. В начале о Дефайне указал

Ну раз тебе удобнее, то и оставлял бы этот код у себя. Ты же мастурбацией не начнёшь заниматься, стоя в очереди в магазине? Или начнёшь? :crazy:

MrJu[N]ior
25.02.2016, 00:08
Обновил, всё поправил!

- - - Добавлено - - -


Пункт #5 (http://pro-pawn.ru/showthread.php?8347-%D0%9E%D1%81%D0%BD%D0%BE%D0%B2%D0%BD%D1%8B%D0%B5-%D1%80%D0%B5%D0%BA%D0%BE%D0%BC%D0%B5%D0%BD%D0%B4%D0%B0%D1%86%D0%B8%D0%B8-%D0%BF%D0%BE-%D0%BD%D0%B0%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D1%8E-%D0%BA%D0%BE%D0%B4%D0%B0). Такого на p-i не напишут, да? Слишком сложно




Тем, что у меня уже может быть свой макрос с данным цветом или же я вообще не использую макросы для цветов (в моём случае - второе). Так зачем мне создавать ещё один макрос (тем более, создание которого ты не добавил в свою тему), если у меня есть свои/они мне не нужны?
Или без этого макроса твою команду вообще никак нереально реализовать, что оправдывает существование этого макроса? Хмм... Давайте-ка попробуем вместе! Вот код:

SCM(playerid, COLOR_LIGHTRED, "Игрок с данным ID не состоит в фракции");
Лёгким движением пальцев он превращается вот в это:

SendClientMessage(playerid, 0xFF0000FF, "Игрок с данным ID не состоит в фракции");
сохранив свою работоспособность, при этом став адаптированным под любого пользователя. Чудо, не правда ли?



Ну раз тебе удобнее, то и оставлял бы этот код у себя. Ты же мастурбацией не начнёшь заниматься, стоя в очереди в магазине? Или начнёшь? :crazy:
Всё есть? Давай дальше описывай что не так.

DeimoS
25.02.2016, 00:42
В первой команде лучше всё же начать табуляцию прямо от начала (левого края, а не делать отступ), дабы удобнее было вставлять код в скрипт.

Потом, во второй, как и в первой, команде есть вот такой код (только в первой перевод нормальный)

if(params[0] == INVALID_PLAYER_ID) return SendClientMessage(playerid, -1, "????? ?? ??????!");
В котором и перевод косячный (ну это и ежу понятно), и условие не сработает, пока ты сам не введёшь "65535". IsPlayerConnect для кого придуман? Да и поздновато ты значение переменной с ID проверяешь. Если игрок введёт значение, которое больше твоего MAX_PLAYERS (или меньше 0), у тебя будет выход за пределы массива в проверке, типа:

if(PlayerInfo[giveplayerid][pLeader] != 0) return SendClientMessage(playerid, -1, "Вы указали ID лидера!");
Да и что за "params[0]", если в sscanf уже указаны переменные (которые ты, кстати, не объявил. Они из воздуха появляются, видимо)? Так же и с макросами для цветов - не везде изменил их (да и менять их на "-1", а не настоящие цвета - довольно халтурно...)


Ну и возвраты я бы расставил чуть иначе, ибо это тяжко читать глазам...

Да и вот такие сокращения оставь, пожалуйста, на p-i

GetPlayerName(playerid, sendername, sizeof(sendername)), GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));

Вообще вот тебе готовая тема. Не благодари


Здравствуйте пользователи и гости форума pro-pawn.ru.
Без всяких подробностей перейдём к команде.
Команда /arank - позволяет администратору сервера изменить ранг игрока в любой организации.

Использование: /arank [id] [rang]

Видел данную команду на некоторых серверах и решил написай под свой.


Предупреждение:
Команда сделана под мой мод где в каждой организации по 10 рангов(10 - лидер). Если у вас не так то подстройте команду под себя.


Каждую строку я опишу.



Вариант для обычного командного процессора + ReturnUser:


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;
}


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:



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 и никто тебя хвалить не будет с целью набить себе очередной пост. Большая часть людей тебе всегда поможет, если ты сам будешь проявлять инициативу. Если же ты будешь и дальше так халтурно относится к своим темам, стараясь лишь набить репутацию, тебя быстро с этого форума изживут, увы :)

MrJu[N]ior
25.02.2016, 00:48
В первой команде лучше всё же начать табуляцию прямо от начала (левого края, а не делать отступ), дабы удобнее было вставлять код в скрипт.

Потом, во второй, как и в первой, команде есть вот такой код (только в первой перевод нормальный)

if(params[0] == INVALID_PLAYER_ID) return SendClientMessage(playerid, -1, "????? ?? ??????!");
В котором и перевод косячный (ну это и ежу понятно), и условие не сработает, пока ты сам не введёшь "65535". IsPlayerConnect для кого придуман? Да и поздновато ты значение переменной с ID проверяешь. Если игрок введёт значение, которое больше твоего MAX_PLAYERS (или меньше 0), у тебя будет выход за пределы массива в проверке, типа:

if(PlayerInfo[giveplayerid][pLeader] != 0) return SendClientMessage(playerid, -1, "Вы указали ID лидера!");
Да и что за "params[0]", если в sscanf уже указаны переменные (которые ты, кстати, не объявил. Они из воздуха появляются, видимо)? Так же и с макросами для цветов - не везде изменил их (да и менять их на "-1", а не настоящие цвета - довольно халтурно...)


Ну и возвраты я бы расставил чуть иначе, ибо это тяжко читать глазам...

Да и вот такие сокращения оставь, пожалуйста, на p-i

GetPlayerName(playerid, sendername, sizeof(sendername)), GetPlayerName(giveplayerid, giveplayer, sizeof(giveplayer));

Вообще вот тебе готовая тема. Не благодари


Здравствуйте пользователи и гости форума pro-pawn.ru.
Без всяких подробностей перейдём к команде.
Команда /arank - позволяет администратору сервера изменить ранг игрока в любой организации.

Использование: /arank [id] [rang]

Видел данную команду на некоторых серверах и решил написай под свой.


Предупреждение:
Команда сделана под мой мод где в каждой организации по 10 рангов(10 - лидер). Если у вас не так то подстройте команду под себя.


Каждую строку я опишу.



Вариант для обычного командного процессора + ReturnUser:


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;
}


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:



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.ru.
Без всяких подробностей перейдём к команде.
Команда /arank - позволяет администратору сервера изменить ранг игрока в любой организации.

Использование: /arank [id] [rang]

Видел данную команду на некоторых серверах и решил написай под свой.


Предупреждение:
Команда сделана под мой мод где в каждой организации по 10 рангов(10 - лидер). Если у вас не так то подстройте команду под себя.


Каждую строку я опишу.



Вариант для обычного командного процессора + ReturnUser:


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;
}


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:



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 и никто тебя хвалить не будет с целью набить себе очередной пост. Большая часть людей тебе всегда поможет, если ты сам будешь проявлять инициативу. Если же ты будешь и дальше так халтурно относится к своим темам, стараясь лишь набить репутацию, тебя быстро с этого форума изживут, увы :)

Все обязательно учту. Спасибо. Подправлю позже...

$continue$
25.02.2016, 00:54
Мазахист:


#if !defined COLOR_LIGHTRED
#define COLOR_LIGHTRED 0xFF0000FF
#endif



Или без этого макроса твою команду вообще никак нереально реализовать, что оправдывает существование этого макроса? Хмм... Давайте-ка попробуем вместе! Вот код:

SCM(playerid, COLOR_LIGHTRED, "Игрок с данным ID не состоит в фракции");
Лёгким движением пальцев он превращается вот в это:

SendClientMessage(playerid, 0xFF0000FF, "Игрок с данным ID не состоит в фракции");
сохранив свою работоспособность, при этом став адаптированным под любого пользователя. Чудо, не правда ли?

Оригинально. Теперь то я знаю, чем ты год в Москве занимался.


Ты же мастурбацией не начнёшь заниматься, стоя в очереди в магазине? Или начнёшь? :crazy:

MrJu[N]ior
25.02.2016, 00:57
Мазахист:


#if !defined COLOR_LIGHTRED
#define COLOR_LIGHTRED 0xFF0000FF
#endif


Оригинально. Теперь то я знаю, чем ты год в Москве занимался.

Есть причины почему я тупанул с LIGHTRED. xD

MrJu[N]ior
20.05.2016, 18:14
Более менее оптимизировал код. Подожду пока кто ещё что-нибудь найдёт.