2 posts in this topic

Первое что нам нужно, это добавить некоторые defain:
 

Спойлер

#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). Ищем 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]);
}


Далее мы пишем сам public с изменением ника игрока:
 

Спойлер

forward ChangeName(playerid,stringg[]);
public 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;
}

 


Автор: неизвестен

Share this post


Link to post
Share on other sites

Вы бы хоть после копирования, код поправили..
И да, в той же теме где было выложено это решение, я уже писал про дефайны.

Share this post


Link to post
Share on other sites

Your content will need to be approved by a moderator

Guest
You are commenting as a guest. If you have an account, please sign in.
Reply to this topic...

×   You have pasted content with formatting.   Remove formatting

  Only 75 emoticons maximum are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

Loading...
Sign in to follow this  
Followers 0

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • Gender Bender
      By Gender Bender
      Привет, многие писали в ЛС по поводу asi плагина server_connect. Я скидывал ссылку на пост, но оказывается файлы удалили, у меня они сохранились поэтому выкладываю их сюда (ЯД)

      Пытался загрузить на форум, но файлы более 2 мб не могу. 
       
      Ссылка на исходники - click (Yandex.Disk)