Здравствуйте с вам как всегда Na'Vi и сегодня я хотел бы выложить системку смены NonRp ника
Цену можете изменить на свою
А сейчас я подробно распишу как вшить команду в любой мод!
Начнём!
1. Подключаем командный процессор DC_CMD
2. Создаём переменные
new WantNickChange[MAX_PLAYERS][MAX_PLAYER_NAME];
new changenam[128];
new ChangeNickr[MAX_PLAYERS];
3. В ваше меню оно у вас либо /mn либо /mm добавляем
if(PlayerInfo[playerid][pMoney]
if(ChangeNickr[playerid] == 1) return SCM(playerid,0xFF4500FF,"[Ошибка]: Вы уже изменяли свое имя. Что-бы сменить еще раз,необходимо перезайти.");
SPD(playerid,34,DIALOG_STYLE_INPUT,"{1E90FF}Изменить имя","{FF4500}Внимание!\n{008000}Использование оскорбительного ника - Warn/Ban\n\n{1E90FF}Введите новый ник:","Сменить", "Отмена");
4. В Public OnDialogResponse: добавляем
if(dialogid == 34) // Свой ИД диалога,в моём случае это 34 ID
{
if(response) // Если игрок нажал ОК
{
new string[256];
if(!strlen(inputtext)) return SPD(playerid,34,DIALOG_STYLE_INPUT,"{1E90FF}Изменить имя","{FF4500}Внимание!\n{008000}Использование оскорбительного ника - Warn/Ban\n\n{1E90FF}Введите новый ник:","Сменить","Отмена");
format(string,sizeof(string),"%s.ini",inputtext); // Ищем аккаунт
if(fexist(string)) // Если аккаунт найден то
{
SCM(playerid,0xFF4500FF,"[Ошибка]: Ник уже зарегестрирован."); // Выводим сообщение
SPD(playerid,34,DIALOG_STYLE_INPUT,"{1E90FF}Изменить имя","{FF4500}Внимание!\n{008000}Использование оскорбительного ника - Warn/Ban\n\n{1E90FF}Введите новый ник:","Сменить","Отмена"); // И заного выводим диалог
return 1;
}
format(WantNickChange[playerid],MAX_PLAYER_NAME,"%s",inputtext);
format(string,sizeof(string),"[A] %s[%d] отправил заявку на смену ника %s | Что-бы одобрить напишите /setname %d", sendername2(playerid),playerid,(inputtext),playerid); // Форматируем
ABroadCast(0xAAAAAAFF,string,1); // Выводим текст админам
ABroadCast(0xAAAAAAFF,"[A] Если-же Вы отказываете ему в смени имени,дайте ему об этом знать через /ans",1); // Выводим текст админам.
format(string,sizeof(string),"[Смена-Ника]: Ваша заявка успешно отправлена,ожидайте ее расмотрения. Желаемый ник: {1E90FF}%s",(inputtext)); // Форматируем
SCM(playerid, 0xFF4500FF, string); // Выводим текст
return 1;
}
}
5. Создаём саму команду
CMD:setname(playerid, params[])
{
if(PlayerInfo[playerid][pAdmin]
if(PlayerInfo[playerid][pDuty] == 0) return SCM(playerid,0xFF4500FF,"[A] Вы не можете использовать команды. Авторизуйтесь в Админ.Панели {1E90FF}/duty [Пароль]"); // Проверка на авторизацию админа
new newname[64],idx,giveplayerid,stringo[128];
tmp = strtok(params[0], idx); // Делаем пробел после /setname. Т.е след.строка это ID
if(!strlen(tmp)) return SCM(playerid, 0xFF4500FF, "[Ошибка]: Укажите ID. | /setname [ID]"); // Если мы не указали ИД игрока.
giveplayerid = ReturnUser(tmp); // Присваиваем ИД игрока к giveplayerid
if(giveplaerid != INVALID_PLAYER_ID) // Если giveplayerid не равен не правильному ид,то продолжаем.
{
new length = strlen(params[0]);
while ((idx
{
idx++;
}
{
format(stringo,sizeof(stringo),"%s.ini",newname); // Открываем папку с аккаунтами
if(fexist(stringo)) return SCM(playerid,0xFF4500FF,"[Ошибка]: Ник уже зарегестрирован."); // Если ник уже зарегестрирован,то не даём пройти дальше.
if(strlen(WantNickChange[giveplayerid])
if(ChangeNickr[giveplayerid] == 1) return SCM(playerid,0xFF4500FF,"[Ошибка]: Игрок уже менял имя. Что-бы сменить еще раз,ему необходимо перезайти."); // Если игрок сменил и не перезашёл.
format(changenam,sizeof(changenam),"%s",WantNickChange[giveplayerid]);
format(stringo,sizeof(stringo),"%s.ini",WantNickChange[giveplayerid]);
SCM(params[1],0x008000FF,"[Смена-Ника]: Администрация дала одобрение на смену Вашего имени."); // Выводим текст
SCM(params[1],0x008000FF,"[Смена-Ника]: Что-бы зайти под новым ником,смените его в окне SA:MP."); // ВЫводим текст
ChangeName(giveplayerid); // Вызываем паблик смены ника
format(stringo,sizeof(stringo),"[A] Администратор %s[%d] дал одобрение на смену имени.",sendername2(playerid),playerid); // Форматируем
ABroadCast(0xAAAAAAFF,stringo,1); // Выводим админам с 1-ого ЛВЛа.
PlayerInfo[giveplayerid][pMoney] -= 50000; // Снимаем игроку 50.000$
}
}
return 1;
}
В конец мода добавляем
forward ChangeName(playerid);
public ChangeName(playerid) // Паблик смены ника
{
new plnamep[MAX_PLAYER_NAME],string[128],password[64];
ChangeNickr[playerid] = 1;
GetPlayerName(playerid,plnamep,sizeof(plnamep));
SetPlayerName(playerid, changenam);
format(string,sizeof(string),"%s.ini",plnamep);
fremove(string);
format(string,sizeof(string),"[Смена-Ника]: Игрок {1E90FF}%s[%d] {008000}сменил имя на {1E90FF}%s",plnamep,playerid,changenam);
SCMALL(0x008000FF,string);
new PlayerName[MAX_PLAYER_NAME], account[128];
GetPlayerName(playerid,PlayerName,sizeof(PlayerName));
format(account,sizeof(account),"%s.ini", PlayerName);
new iniFile = ini_createFile(account);
if(iniFile
{
iniFile = ini_openFile(account);//
}
if(iniFile >= 0)
{
ini_setString(iniFile, "Пароль",password);
ini_setInteger(iniFile, "Money", GetPlayerMoney(playerid));
ini_setInteger(iniFile,"Kills", PlayerInfo[playerid][pKills]);
ini_setInteger(iniFile,"Deaths", PlayerInfo[playerid][pDeaths]);
ini_setInteger(iniFile,"Skin", PlayerInfo[playerid][pSkin]);
ini_setInteger(iniFile,"VIP", PlayerInfo[playerid][pVIP]);
ini_setInteger(iniFile,"Admin", PlayerInfo[playerid][pAdmin]);
ini_closeFile(iniFile);
}
return 1;
}
В конец мода также добавляем
stock sendername2(playerid)
{
new pName[MAX_PLAYER_NAME];
GetPlayerName(playerid, pName, sizeof pName);
return pName;
}
Автор:xDimasx
Я: Немного изменил инструкцию чтобы было понятно новичкам (В прочем как и всегда)