Стили: 3 стиля диалогового окна. Стиль 0=DIALOG_STYLE_MSGBOX Стиль 1=DIALOG_STYLE_INPUT Стиль 2=DIALOG_STYLE_LIST
Примеры использования стилей: DIALOG_STYLE_MSGBOX(0) можно использовать для вывода сообщений. DIALOG_STYLE_INPUT(1) система регистрации и т.п. DIALOG_STYLE_LIST(2) Лист возможных опций
caption: Название диалога info: Текст в диалоговом окне button1: Первая кнопка например: Ок, Login button2: вторая кнопка .Пример:Cancel
Вот вам пример кода:
Code
if(strcmp(cmdtext, "/login", true) == 0) { new s[128]; new loginname[MAX_PLAYER_NAME]; GetPlayerName(playerid,loginname,MAX_PLAYER_NAME); format(s,sizeof(s),"Welcome again, %s!\n\nContiune to login!",loginname); ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Login Plase!",s,"Login","Cancel"); return 1; }
Добавка от меня а если вот так то текст будет по-русски:
Code
if(strcmp(cmdtext, "/login", true) == 0) { new s[128]; new loginname[MAX_PLAYER_NAME]; GetPlayerName(playerid,loginname,MAX_PLAYER_NAME); format(s,sizeof(s)," Здарова еще раз, %s!\n\n Зайди под своим ником!",loginname); ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT," Форма Логина!",s," Логин"," Отмена"); return 1; }
Проверено, пишет по-русски.. ладно продолжим туториал...Дальше вообще то отсутствует функция работы с диалоговым окном, т.е. что будет срабатывать если нажали на Ок.... в туториале который я переводил но шас попробую вам рассказать сам.
Вот паблик функции работы с ней:
Code
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
Сейчас расскажу здесь что означает: playerid: ну я думаю вы поняли что это ид игрок. dialogid: ид диалогового окна response: проверка нажал ли игрок на первую кнопку или на вторую listitem: если выбрали стиль окна DIALOG_STYLE_LIST ,то это будет выбор опции находящего в списке inputtext[] это то что игрок ввел в поле, например, в системе регистрации.
Сейчас сделаю скрипт диалогового окна на примере стиля DIALOG_STYLE_MSGBOX(0).
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(dialogid == 0) { if(response) { //Здесь то что случится если игрок нажмет на кнопка1 } else { //А здесь если он нажмет кнопка2 } } }[/pwn]
Вот Вам не большой пример скрипта..
Кстати да при использования диалогового окна в случае необходимости нужно пользоваться: \b - backspae - забой \f - Form feed - перевод страницы \n - new line - новая строка \r - возврат каретки \t - табуляция \v - вертикальная табуляция \' - одиночная кавычка \" - двойные кавычки \? - вопросительный знак
Мне нужно совместить public OnPlayerClickPlayer(playerid, clickedplayerid, source) С диологовым окном, то есть: Тыкаю таб, тыкаю нужного плеера,вылазит меню с действиями для НЕГО (выбранного игрока).
Окошко создал, по клику вызывается, а как в OnDialogResponse "перетащить" clickedplayerid из предыдущего паблика для проведения операций над выбранным игроком? _____________________ Походе что я сам догадался... ) CLICK_SOURCE_SCOREBOARD ,не ?) ___________________ а..не (
Люди помогите! плз... Вот сделал скрипт регистрации для ГТО: public OnPlayerConnect(playerid) {
ShowPlayerDialog(playerid, 100, DIALOG_STYLE_LIST, "Добро Пожаловать!\n Как с вами поступим?", " Я новичек буду регатся!\n Я тут постоянно играю, хочу ввойти\n Я сюда случайно зашел и желяю выйти", "OK", " Отмена"); if(IsPlayerNPC(playerid)) return 1;
Потом:
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(dialogid == 100) if(!response) return 1; if(listitem == 0) //проверка, выбран ли Пункт 1 { SendClientMessage(playerid, 0xFFFFFFAA, "И так регистрируемся!"); ShowPlayerDialog(playerid, 101, DIALOG_STYLE_INPUT, "Авторизация", "Введите пароль:", "Войти", "Отмена"); new password[MAX_NAME]; if(!response) Kick(playerid); new email[MAX_NAME]; set(password, inputtext); if (strfind(email,charstr(DBSeperator),false) != -1) { new logstring[256]; format(logstring, sizeof (logstring), "%s: register_account: fail: DB seperator found in email",oGetPlayerName(playerid)); WriteLog(logstring);
Но вот проблема! Даже если пользователь ничего не ввел его всеравно регает! Как это исправить? Как сделать так чтобы окно выскакивало пока он не введет норм пароль?
П.С.: Это мой первый "полноценный" скрипт
Добавлено (24.01.2010, 19:07) --------------------------------------------- Походу это бред((( ПОЛНЫЙ.... Он вобще не работает...
FrankNew, я немного переделал твою систему входа для ГТО ...
[pwn] в public OnPlayerConnect(playerid)
ew udbfilename[MAX_STRING]; udbfilename = oGetPlayerName(playerid); strcat(udbfilename,".Account",sizeof(udbfilename)); new dinifilename[MAX_STRING]; format(dinifilename,sizeof(dinifilename),"%sGTO.Account.%s.txt",AccountDB,EncodeName(oGetPlayerName(playerid)));
if ((!udb_Exists(udbfilename)) && (!dini_Exists(dinifilename))) { ShowPlayerDialog(playerid,100,DIALOG_STYLE_INPUT,"Регистрация","Введите пароль:","ок","отмена"); return 1; } else if ((udb_Exists(udbfilename)) || (dini_Exists(dinifilename))) { ShowPlayerDialog(playerid,200,DIALOG_STYLE_INPUT,"Вход в аккаунт","Введите пароль:","ок","отмена"); return 1; }
в public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
new udbfilename[MAX_STRING]; udbfilename = oGetPlayerName(playerid); strcat(udbfilename,".Account",sizeof(udbfilename)); new password[MAX_NAME]; new email[MAX_NAME]; set(password, inputtext); if(dialogid == 100) { if(response) { if(!strlen(password)) { SendClientMessage(playerid, COLOUR_MISC, lang_texts[1][9] ); SendClientMessage(playerid, COLOUR_MISC, " Пароль должен быть не менее 2 символов!" ); ShowPlayerDialog(playerid,100,DIALOG_STYLE_INPUT,"Регистрация","Введите пароль:","ок","отмена"); } else { // dini new dinifilename[MAX_STRING]; format(dinifilename,sizeof(dinifilename),"%sGTO.Account.%s.txt",AccountDB,EncodeName(oGetPlayerName(playerid)));
dini_Create(dinifilename); dini_Set(dinifilename,"Name",oGetPlayerName(playerid)); new temp[MAX_STRING]; set(temp,encryptbykey(password,ENCRYPTION_KEY)); dini_Set(dinifilename,"Password",temp); dini_Set(dinifilename,"Email",email); valstr(temp,Now()); dini_Set(dinifilename,"Creation_Date",temp); dini_Set(dinifilename,"Last_Login",temp);
if(dialogid == 200) { if(response) { AccountLogin(playerid,password); } else // нажатие правой кнопки (отмена) { ShowPlayerDialog(playerid,200,DIALOG_STYLE_INPUT,"Вход в аккаунт","Введите пароль:","ок","отмена"); //Kick(playerid); // мне опять это не нравится и я его кикаю. } return 1; }
в инклудде account.inc
new logstring[256]; format(logstring, sizeof (logstring), "player_login: failed: incorrect password ID:%d NAME:%s :",playerid,oGetPlayerName(playerid)); WriteLog(logstring); ShowPlayerDialog(playerid,200,DIALOG_STYLE_INPUT,"Вход в аккаунт","Введите пароль:","ок","отмена"); //добавил тут строку для проверки правилности пароля логина // KickPlayer(playerid,"Incorrect Password"); SendClientMessage(playerid,COLOUR_RED, lang_texts[1][6] );
[/pwn]
PS ты спросил как поставить проверку пароля при реге!вот она if(!strlen(password)) { SendClientMessage(playerid, COLOUR_MISC, lang_texts[1][9] ); SendClientMessage(playerid, COLOUR_MISC, " Пароль должен быть не менее 2 символов!" ); ShowPlayerDialog(playerid,100,DIALOG_STYLE_INPUT,"Регистрация","Введите пароль:","ок","отмена"); }
Подскажите, каким образом можно сравнивать текст. Например: Есть переменная денег в аккаунте игрока. Предположим вопрос: Введите ваше кол-во денег. И на руках у мя 100$, а вот када ввожу, пишит не правильная сумма. Каким образом можно сравнивать занчение и текст