Для начала изменим 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]"); // Чёто типо этого тут:D return 1; }
И заменяем на
Code
{ 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Третья строка)