Форум Pawn.Wiki - Воплоти мечту в реальность!: Делаем смену ника с подтверждением администратора - Форум Pawn.Wiki - Воплоти мечту в реальность!

Перейти к содержимому

Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

[ Scr ][ All ]
Делаем смену ника с подтверждением администратора На примере MySQL
Оценка: ***** 1 Голосов

#1
Пользователь офлайн   Jail 

  • Новичок
  • Вставить ник
  • Раскрыть информацию
Доброго времени суток дорогие форумчане!

С Вами 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;
}


--------------------------------------------------------------------------------
Пока что все. Спасибо за внимание.

Удачи!

2

#2
Пользователь офлайн   Jail 

  • Новичок
  • Вставить ник
  • Раскрыть информацию
Подниму
0

#3
Пользователь офлайн   Jail 

  • Новичок
  • Вставить ник
  • Раскрыть информацию
Подниму

Сообщение отредактировал Jail: 05 декабря 2015 - 16:00

0

#4
Пользователь офлайн   United123458 

  • Новичок
  • Вставить ник
  • Раскрыть информацию
Команда классная, все работает, я лично переделал ее под смену нон рп ника

Цитата

После этого пишем саму команду на процессоре DC_CMD:
mysql_function_query(ConnectMySQL, QUERY, true, "ChangeName", "ds", params[0],WantNickChange[params[0]]);
}

В этой строке у тебя стоит WantNickChange[params[0]] хотя должно быть NickChange[params[0]] и так же ты return в команду не вставил
0

#5
Пользователь офлайн   Mike_Loren 

  • Эксперт
  • Вставить ник
  • Раскрыть информацию
return SCM(.......);

Нет смысла возвращать сообщение.
Когда же наконец вы, товарищи, научитесь правильно использовать return?
1

#6
Пользователь офлайн   Support ColoradaRP 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
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, "", "");
0

#7
Пользователь офлайн   Mavi 

  • Местный
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияMike_Loren (04 января 2016 - 17:51) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]


Почему? Я бы поспорил...

Изображение
0

#8
Пользователь офлайн   Dimagixcart 

  • Прохожий
  • Вставить ник
  • Раскрыть информацию
Норм.
0

#9
Пользователь офлайн   Deagle 

  • Местный
  • Вставить ник
  • Раскрыть информацию

Просмотр сообщенияJail (04 декабря 2015 - 00:07) писал:

Нажмите сюда, чтобы прочитать это сообщение. [Показать]


команда для отмена запроса есть?)
0

Поделиться темой:


Страница 1 из 1
  • Вы не можете создать новую тему
  • Вы не можете ответить в тему

1 человек читают эту тему
0 пользователей, 1 гостей, 0 скрытых пользователей


Яндекс.Метрика