• Страница 1 из 1
  • 1
Создание регистрации/логина диалоговыми окнами (sa:mp 0.3)
Дмитрий Дата: Воскресенье, 03.06.2012, 10:06 | Сообщение # 1 | Сообщить о нерабочей теме


Аватар для Дмитрий

Для начала изменим OnPlayerConnect 
Находим такие строки: 
Code
if(fexist(string))  
[color=orange]{  
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;  
}

[moder]И заменяем на [/moder]
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,"Левая кнопка(регистрация)","Правка кнопка(отмена)");  
}

Итак, диалоговые окна созданы, теперь надо определить их действия 
[moder]Добавляем public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) [/moder]
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;  
}

Теперь надо сделать так, чтобы диалоговое окно не закрывалось при неправильном пароле 
[moder]Находим в OnPlayerLogin [/moder]
Code
gPlayerLogTries[playerid] += 1;  
if(gPlayerLogTries[playerid] == 4) { Ban(playerid); }

[moder]и заменяем на [/moder]
Code
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Третья строка)


From Russia With Love!
  • Страница 1 из 1
  • 1
Поиск: