С Вами Demin, и я буду вместе с Вами писать систему, для смены Nick Name игроку.
__________________________________________________________________________________________________________
Итак, начнём.
Первое что нам нужно, это добавить некоторые define:
#define f( format(string, sizeof(string), #define SCM SendClientMessage #define SCMTA SendClientMessageToAll #define DSI DIALOG_STYLE_INPUT #define DSM DIALOG_STYLE_MSGBOX #define COLOR_RED 0xFF0000FF #define COLOR_GRAD 0xB4B5B7FF #define COLOR_LIGHTBLUE 0x33CCFFAA #define publics%0(%1) forward%0(%1); public%0(%1)
----------------------------------------
Далее нам нужно создать новую переменную. Ищем у себя в моде new. И прописываем туда нашу переменную ника игрока:
new NickChange[MAX_PLAYERS][MAX_PLAYER_NAME];
----------------------------------------
Далее Вы ищите у себя в моде команду menu(mm). И прописываете туда Смена ника игрока к примеру
----------------------------------------
После чего у себя в моде ищите сам диалог выбора из списка команды menu(mm). Ищем public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]). И пишем сюда сам диалог:
case 5: SPD(playerid, 14, DSI, "{FFCD00}Смена ника", "{FFFFFF}Смена ника происходит только после\n\
подтверждения администрации сервера\n\n\
Смена ника стоит {FF8300}3.000.000${ffffff}\n\
Ваш ник не должен содержать {FF8300}русские{ffffff} символы\n\
так же в нём не должны присутствовать {FF8300}цифры{ffffff}!\n\
Пример правильного ника Имя_Фамилия: {FF8300}'Roberto_Giordano'{ffffff}\n\n\
Введите ваш новый ник в данное окно", "Далее", "Назад");
----------------------------------------
Теперь перейдём к написанию самого диалога:
case 14:
{
if(response)
{
if(GetPlayerMoney(playerid) < 3000000) return SCM(playerid, COLOR_RED, "У вас не хватает денег для смены ника!");
if(!strlen(inputtext) || strlen(inputtext) > 24) return SCM(playerid, COLOR_RED, "Уменьшите количество символов максимум '24'!");
for(new i = strlen(inputtext); i != 0; --i)
switch (inputtext[i])
{
case '0'..'9': return SCM(playerid, COLOR_RED, "Используются запрещённые символы!");
case 'А'..'Я', 'а'..'я': return SCM(playerid, COLOR_RED, "Используются запрещённые буквы. Смените пожалуйста раскладку!");
}
format(NickChange[playerid],MAX_PLAYER_NAME, "%s",inputtext);
f("[NAME] %s[%i] подал заявку на смену ника, ник: %s (/setname)",Player[playerid][pName],playerid,(inputtext));
AdmChat(COLOR_LIGHTBLUE, string);
SCM(playerid, 0xAAFF00AA, "Ваша заявка отправлена на рассмотрение");
}
else cmd::menu(playerid);
}
----------------------------------------
После этого пишем саму команду на процессоре DC_CMD:
CMD:setname(playerid, params[])
{
if(Player[playerid][pAdmin] < 4) return true;
if(sscanf(params, "u", params[0])) return SCM(playerid, COLOR_GRAD,"Использование: /setname [playerid]");
if(!IsPlayerConnected(params[0])) return SCM(playerid,COLOR_GRAD,"Игрок не в игре.");
if(strlen(NickChange[params[0]]) < 3) return SendClientMessage(playerid,COLOR_GREY, "Этот игрок не хочет менять ник");
Player[params[0]][pMoney] -= 3000000;
new QUERY[128];
mysql_format(ConnectMySQL, QUERY, sizeof(QUERY), "SELECT `Name` FROM `accounts` WHERE `Name` = '%e'",NickChange[params[0]]);
mysql_function_query(ConnectMySQL, QUERY, true, "ChangeName", "ds", params[0],WantNickChange[params[0]]);
SPD(params[0], 15, DSM, "{FFCD00}Смена ника", "{FFFFFF}Перезайдите на аккаунт с новым именем аккаунта", "Закрыть", "");
Kickk(params[0]);
}
----------------------------------------
Далее мы пишем сам publics с изменением ника игрока:
publics ChangeName(playerid,stringg[])
{
new r, f;
new QUERY[128];
cache_get_data(r, f);
if(r) return SCM(playerid,COLOR_GRAD,"Данный ник занят");
mysql_format(ConnectMySQL, QUERY, sizeof(QUERY), "UPDATE `accounts` SET `Name` = '%s'",stringg);
mysql_format(ConnectMySQL, QUERY, sizeof(QUERY), "%s WHERE `Name` = '%e'", QUERY, Player[playerid][pName]);
mysql_function_query(ConnectMySQL, QUERY, false, "", "");
new string[104];
f("%s сменил имя на %s",Player[playerid][pName], NickChange[playerid]);
SCMTA(0x9000FFFF,string);
Kickk(playerid);
return true;
}
--------------------------------------------------------------------------------
Пока что все. Спасибо за внимание.
Удачи!
Вход
Регистрация
Помощь









