Стили: 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 - вертикальная табуляция \' - одиночная кавычка \" - двойные кавычки \? - вопросительный знак
Помогите замутить такое окно,заходишь,появляется окно в нем надпись например "троолололо" кнопка1 "Логин" кнопка2 "Уйти" при нажатии на логин уже отправляет на само окно логина
ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,"Заголовок окна","Текст в окне","Логин","Отмена");\\ставишь в моде где тебе надо отобразить окно ................... public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) {
if(dialogid==0&&response) ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,strnam,"Введи пароль\n","Да","Отмена");\\при нажатии на логин выведется окно ввода логина if(dialogid==1&&response) { if(!strlen(inputtext)) return ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,strnam,"Введи пароль\n","Да","Отмена");\\опять показать окно логина если отсутствует введенный текст
\\Тут задай свои дестйвия по обработку логина } .............................. return 1; }
Сообщение отредактировал brontozavr - Вторник, 29.06.2010, 10:44
Хочу сделать телепорты с пикапами и выбором места телепортации. Я написал так: new tp2; в паблик public OnGameModeInit() вписал пикап tp2 = CreatePickup(1318,20,2117.5801,2416.6255,10.8203); и создал паблик public OnPlayerPickUpPickup(playerid, pickupid) а в нём проверку
switch(listitem) { case 0: { GivePlayerMoney(playerid,0); SetPlayerPos(playerid,2079.0376,2415.1914,74.3132); SetPlayerInterior(playerid,0);//Даём игроку интерьер сейчас 0 потомучто его на улицу тп SetPlayerFacingAngle(playerid, 0);//вроде угол поворота не помню)) } } }
не получается сделать обучение в диалоговом окне, сделал только одно окно а при добавление второго окна, первое не показывает. [cut noguest={ PlayerInfo[playerid][pOrigin] = 1; SendClientMessage(playerid, COLOR_YELLOW2, "Хорошо, итак вы из Штатов."); new obuchenie[256+1]; format(obuchenie, sizeof(obuchenie), "Как только закончится обучение введите /licenzers.\nБез прав вы не сможете водить машину."); ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,"Обучение [RP]..::RealLife::..",obuchenie,"Принять","Отмена"); if(response) { SendClientMessage(playerid, COLOR_YELLOW, " Удачной игры на сервере"); PlayerInfo[playerid][pTut] = 1; gOoc[playerid] = 0; gNews[playerid] = 0; gFam[playerid] = 0; TogglePlayerControllable(playerid, 1); MedicBill[playerid] = 0; SetPlayerSpawn(playerid); } else { SendClientMessage(playerid, COLOR_YELLOW, " Для игры на нашем сервере, вы должны принять правила"); Kick(playerid); } return 1; }][/cut]
Marino_Reigan, А что делать если в OnPlayerPickUpPickup у меня будет ещё одно диалоговое окно? Мне просто в OnDialogResponse ставить проверку после той или как-то иначе?
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);
Но вот проблема! Даже если пользователь ничего не ввел его всеравно регает! Как это исправить? Как сделать так чтобы окно выскакивало пока он не введет норм пароль?