Сейчас я вам расскажу, как сделать логин и регистрацию через диалоги (ShowPlayerDialog)
Для начала изменим OnPlayerConnect Находим такие строки:
Code
if(fexist(string)) { gPlayerAccount[playerid] = 1; SendClientMessage(playerid, COLOR_YELLOW, "SERVER: That nick is registered, please login"); SendClientMessage(playerid, COLOR_WHITE, "HINT: You can now login by typing /login <password>"); return 1; } else { gPlayerAccount[playerid] = 0; SendClientMessage(playerid,COLOR_YELLOW,"You dont have an account. Please register by using /register [password]"); return 1; }
И заменяем на
Code
if(fexist(string)) { gPlayerAccount[playerid] = 1; new loginmsg[256+1]; format(loginmsg,256,"Сообщение, которое будет отображено внутри диалогового окна"); ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Название окна",loginmsg,"Левая кнопка(логин)","Правка кнопка(отмена)"); } else { gPlayerAccount[playerid] = 0; new loginmsg[256+1]; format(loginmsg,256,"Сообщение, которое будет отображено внутри диалогового окна"); ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Название окна",loginmsg,"Левая кнопка(регистрация)","Правка кнопка(отмена)"); }
Итак, диалоговые окна созданы, теперь надо определить их действия Добавляем public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
Code
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { new tpass[256];//преобразованный пароль if(dialogid == 1)//итак, наше первое окно { if(response) // при нажатие на левую кнопку (логин) { if(!strlen(inputtext))// если оставляет пустую строку, выводим ему опять окно { new loginmsg[256+1]; format(loginmsg,256,"Сообщение, которое будет отображено внутри диалогового окна"); ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Название окна",loginmsg,"Левая кнопка(логин)","Правка кнопка(отмена)"); return 1; } strmid(tpass, inputtext, 0, strlen(inputtext), 255); Encrypt(tpass); OnPlayerLogin(playerid,tpass); } else // если нажимает правую кнопку (отмена) { Kick(playerid); // здесь вы уже сами выбирайте, но я кикну его, ибо я хочу, чтобы он авторизовывался } } else if(dialogid == 2)//переходим ко второму диалоговому окну (регистрация) { if(response)// всё так-же, это нажатие левой кнопки (регистрация) { if(!strlen(inputtext)) // если поле осталось пустым, выводим ему опять диалоговое окно { new loginmsg[256+1]; format(loginmsg,256,"Сообщение, которое будет отображено внутри диалогового окна"); ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Название окна",loginmsg,"Левая кнопка(регистрация)","Правка кнопка(отмена)"); return 1; } strmid(tpass, inputtext, 0, strlen(inputtext), 255); Encrypt(tpass); OnPlayerRegister(playerid,tpass); // теперь давайте отправим его на логин new loginmsg[256+1]; format(loginmsg,256,"Сообщение, которое будет отображено внутри диалогового окна"); ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Название окна",loginmsg,"Левая кнопка(логин)","Правка кнопка(отмена)"); } else // нажатие правой кнопки (отмена) { Kick(playerid); // мне опять это не нравится и я его кикаю. } } return 1; }
Теперь надо сделать так, чтобы диалоговое окно не закрывалось при неправильном пароле Находим в OnPlayerLogin
gPlayerLogTries[playerid] += 1; new loginmsg[256+1]; format(loginmsg,256,"Сообщение, которое будет отображено внутри диалогового окна"); ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Название окна",loginmsg,"Левая кнопка(логин)","Правка кнопка(отмена)"); if(gPlayerLogTries[playerid] == 4) { Ban(playerid); }
В данной системе диалоговое окно будет показываться игроку сразу при подключении и не факт, что у него всё прогрузится. Так что если вы останетесь недовольными, можете перенести 1-ый показ диалогового окна в OnPlayerRequestClass
(Если хотите, чтобы сообщение внутри диалогового окна переходило на следующую строку, добавляем \n Пример: Первая строка\nВторая строка\nТретья строка)
Если у вас возникли проблемы или вопросы, спрашивайте ниже
у меня проблема помогите пж когда регаюсь а затем вожу лог всё нармально заходит, а вот когда выхожу и опять захожу вожу лог и у меня тупа проста синий экран...
Такс... помогите с такой херью........ када в окошке пишу парольку, выводит на окно с логином. Там (где логин) надо ввести пароль БЕЗ ЧЕТВЕРТОЙ ЦИФРЫ. Например: Йа ввел пароль 123456, в логине надо ввести 12356... как это исправить дам +
xSLiMx, Сматри когда регистрируеш у тебя выскакивает окно проста водиш свой пароль любой затем жмеш регистр зате ещё раз такоеже окно выскакивает ты водешь пароль такой же и жмёш логин вот и всё ты в игре...... там не нужны не какие чёртачки палочки теперь проста тупа пароль будеш вадить..... =)