 |
|
 |
|
|
|
Последние Файлы GTA 4 |
Последние Файлы GTA-MP |
Реклама |
|
|
|
|
|
[Tutorial]Создание Диалогового окна
| |
| Dima-kun | Дата: Четверг, 29.10.2009, 22:47 | Сообщение # 1 |
|
Группа:
Разработчики
Сообщений: 6269
Награды: 72
Репутация: 3512
Замечания: 0%
Статус: 
| Урок по созданию диалогового окна в sa-mp 0.3 Автор:BlackWolfA Перевод:DizeL[ZR] Функция: Code ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[]); Параметры: Code playerid, dialogid, style, caption[], info[], button1[], button2[] dialogid: например 1-2-3-4-5... и т.д Стили: 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[]) Параметры: Code playerid, dialogid, response, listitem, inputtext[] Сейчас расскажу здесь что означает: playerid: ну я думаю вы поняли что это ид игрок. dialogid: ид диалогового окна response: проверка нажал ли игрок на первую кнопку или на вторую listitem: если выбрали стиль окна DIALOG_STYLE_LIST ,то это будет выбор опции находящего в списке inputtext[] это то что игрок ввел в поле, например, в системе регистрации. Сейчас сделаю скрипт диалогового окна на примере стиля DIALOG_STYLE_MSGBOX(0). [pwn]public OnPlayerCommandText(playerid,cmdtext[]) { if(strcmp(cmdtext,"/okno",true)==0) {ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,"Заголовок","Текст информации","Кнопка1"," Кнопка2"); return 1;}return 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 - вертикальная табуляция \' - одиночная кавычка \" - двойные кавычки \? - вопросительный знак
Мои работы: [INC] Сборник d_includes [LAST],[FS] New Demage Effect,[FS]Авто-Поворотники, [FS]mp3player,[FS] Fun Chat Game,[FS] Car Buy Syst,[FS] Anti-AirBrk,[INC] d_setpos, [GM] Game Move v0.1,[FS+include]Super-Armour [0.3z],[FS + Include] Multi Checkpoints
Сообщение отредактировал DizeL-ZR- - Пятница, 30.10.2009, 15:20 |
| |
|
|
| kach | Дата: Суббота, 26.06.2010, 14:51 | Сообщение # 91 |
|
Новенький
Группа:
Пользователи
Сообщений: 44
Награды: 2
Город: Барнаул
Репутация: -8
Замечания: 40%
Статус: 
| Как сделать чтобы при входе окно сразу всплывало и для реги и для логина Добавлено (26.06.2010, 14:51) --------------------------------------------- спс Минимальнная длинна 20 символов
|
| |
|
|
| ZiGGi | Дата: Суббота, 26.06.2010, 15:14 | Сообщение # 92 |
|
Мастер джэдай
Группа:
Продвинутые
Сообщений: 2652
Награды: 34
Город: St. Petersburg
Репутация: 2102
Замечания: 20%
Статус: 
| Quote (kach) Как сделать чтобы при входе окно сразу всплывало и для реги и для логина 2 окна сразу - невозможно, можно, например правая кнопка - рега, левая - логин.
Бложе [indent]Мой блог Уроки по Pawn[/indent]
Open-GTO [indent]Блог разработчиков GitHub: https://github.com/Open-GTO/Open-GTO Сборки мода с сервером тут[/indent]
|
| |
|
|
| mc_mr47 | Дата: Суббота, 26.06.2010, 16:16 | Сообщение # 93 |
|
Группа:
Продвинутые
Сообщений: 357
Награды: 4
Город: Омск
Репутация: 0
Замечания: 100%
Статус: 
| Помогите замутить такое окно,заходишь,появляется окно в нем надпись например "троолололо" кнопка1 "Логин" кнопка2 "Уйти" при нажатии на логин уже отправляет на само окно логина
|
| |
|
|
| brontozavr | Дата: Вторник, 29.06.2010, 10:40 | Сообщение # 94 |
|
Уважаемый человек
Группа:
Продвинутые
Сообщений: 880
Награды: 13
Репутация: 191
Замечания: 40%
Статус: 
| Code 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 |
| |
|
|
| Rogue | Дата: Вторник, 29.06.2010, 13:14 | Сообщение # 95 |
|
Освоившийся
Группа:
Пользователи
Сообщений: 128
Награды: 1
Город: Москва
Репутация: 0
Замечания: 0%
Статус: 
| CupuK, используй таймер.
|
| |
|
|
| maximus-vrn | Дата: Вторник, 13.07.2010, 08:59 | Сообщение # 96 |
|
Уверенный в себе
Группа:
Продвинутые
Сообщений: 174
Награды: 2
Город: Воронеж
Репутация: 13
Замечания: 0%
Статус: 
| Хочу сделать телепорты с пикапами и выбором места телепортации. Я написал так: new tp2; в паблик public OnGameModeInit() вписал пикап tp2 = CreatePickup(1318,20,2117.5801,2416.6255,10.8203); и создал паблик public OnPlayerPickUpPickup(playerid, pickupid) а в нём проверку Code if(pickupid == tp2) { ShowPlayerDialog(playerid,1,DIALOG_STYLE_LIST,"Выберите нужный пункт","Пункт1 \n Пункт2 \n Пункт3 \n","Выбрать","Отмена"); } А вот как теперь сделать проверку на выбранный пункт меню и после этого выполнить данное действие? Code GivePlayerMoney(playerid,-1000); SetPlayerPos(playerid,2079.0376,2415.1914,74.3132); SetPlayerInterior(playerid,0); SetPlayerFacingAngle(playerid, 0);
|
| |
|
|
| Dima-kun | Дата: Вторник, 13.07.2010, 10:00 | Сообщение # 97 |
|
Группа:
Разработчики
Сообщений: 6269
Награды: 72
Репутация: 3512
Замечания: 0%
Статус: 
| switch(listitem) { cae 0: case 1:... case n: }
Мои работы: [INC] Сборник d_includes [LAST],[FS] New Demage Effect,[FS]Авто-Поворотники, [FS]mp3player,[FS] Fun Chat Game,[FS] Car Buy Syst,[FS] Anti-AirBrk,[INC] d_setpos, [GM] Game Move v0.1,[FS+include]Super-Armour [0.3z],[FS + Include] Multi Checkpoints
|
| |
|
|
| Dima-kun | Дата: Вторник, 13.07.2010, 10:51 | Сообщение # 98 |
|
Группа:
Разработчики
Сообщений: 6269
Награды: 72
Репутация: 3512
Замечания: 0%
Статус: 
| maximus-vrn, ты это куда засунул??
Мои работы: [INC] Сборник d_includes [LAST],[FS] New Demage Effect,[FS]Авто-Поворотники, [FS]mp3player,[FS] Fun Chat Game,[FS] Car Buy Syst,[FS] Anti-AirBrk,[INC] d_setpos, [GM] Game Move v0.1,[FS+include]Super-Armour [0.3z],[FS + Include] Multi Checkpoints
|
| |
|
|
| maximus-vrn | Дата: Вторник, 13.07.2010, 11:11 | Сообщение # 99 |
|
Уверенный в себе
Группа:
Продвинутые
Сообщений: 174
Награды: 2
Город: Воронеж
Репутация: 13
Замечания: 0%
Статус: 
| [code]public OnPlayerPickUpPickup(playerid, pickupid) { if(pickupid == tp2) { ShowPlayerDialog(playerid,1,DIALOG_STYLE_LIST,"Выберите нужный пункт","Пункт1 \n Пункт2 \n Пункт3 \n","Выбрать","Отмена"); } switch(listitem) { case 0: { GivePlayerMoney(playerid,0); SetPlayerPos(playerid,2079.0376,2415.1914,74.3132); SetPlayerInterior(playerid,0);//Даём игроку интерьер сейчас 0 потомучто его на улицу тп SetPlayerFacingAngle(playerid, 0);//вроде угол поворота не помню)) } } }
|
| |
|
|
| Dima-kun | Дата: Вторник, 13.07.2010, 11:22 | Сообщение # 100 |
|
Группа:
Разработчики
Сообщений: 6269
Награды: 72
Репутация: 3512
Замечания: 0%
Статус: 
| maximus-vrn, урок для чего сделан епт!!! Code public OnPlayerPickUpPickup(playerid, pickupid) { if(pickupid == tp2) { ShowPlayerDialog(playerid,1,DIALOG_STYLE_LIST,"Выберите нужный пункт","Пункт1 \n Пункт2 \n Пункт3 \n","Выбрать","Отмена"); } } public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(dialogid==1) { if(!response)return 1; if(response) { switch(listitem) { case 0: { GivePlayerMoney(playerid,0); SetPlayerPos(playerid,2079.0376,2415.1914,74.3132); SetPlayerInterior(playerid,0);//Даём игроку интерьер сейчас 0 потомучто его на улицу тп SetPlayerFacingAngle(playerid, 0);//вроде угол поворота не помню)) } } } } return 1; }
Мои работы: [INC] Сборник d_includes [LAST],[FS] New Demage Effect,[FS]Авто-Поворотники, [FS]mp3player,[FS] Fun Chat Game,[FS] Car Buy Syst,[FS] Anti-AirBrk,[INC] d_setpos, [GM] Game Move v0.1,[FS+include]Super-Armour [0.3z],[FS + Include] Multi Checkpoints
|
| |
|
|
| Виталек | Дата: Вторник, 13.07.2010, 15:06 | Сообщение # 101 |
|
Освоившийся
Группа:
Пользователи
Сообщений: 94
Награды: 0
Город: Самара
Репутация: 1
Замечания: 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]
|
| |
|
|
| maximus-vrn | Дата: Вторник, 13.07.2010, 22:09 | Сообщение # 102 |
|
Уверенный в себе
Группа:
Продвинутые
Сообщений: 174
Награды: 2
Город: Воронеж
Репутация: 13
Замечания: 0%
Статус: 
| Marino_Reigan, А что делать если в OnPlayerPickUpPickup у меня будет ещё одно диалоговое окно? Мне просто в OnDialogResponse ставить проверку после той или как-то иначе?
|
| |
|
|
| xLock | Дата: Четверг, 12.08.2010, 22:31 | Сообщение # 103 |
|
Освоившийся
Группа:
Продвинутые
Сообщений: 148
Награды: 3
Город: Грозный
Репутация: -8
Замечания: 20%
Статус: 
| Marino_Reigan, у меня в этом коде ошибка вылетает одна error 017: undefined symbol "tp2" как её исправить?  Добавлено (12.08.2010, 22:31) --------------------------------------------- вот на этой строчке Мне кто нибудь поможет?)
www.samp-gto.ru - мир без правил, мир без победителей и проигравших. (с) MSRV Рекламируй свой сервер, повышай посещаемость, добавляй его в наш рейтинг
|
| |
|
|
| xDavidx | Дата: Четверг, 12.08.2010, 22:56 | Сообщение # 104 |
|
Новенький
Группа:
Пользователи
Сообщений: 16
Награды: 0
Город: Москва
Репутация: 2
Замечания: 0%
Статус: 
| xLock, В начало, где все new, вставь new tp2;
|
| |
|
|
| xLock | Дата: Пятница, 13.08.2010, 15:20 | Сообщение # 105 |
|
Освоившийся
Группа:
Продвинутые
Сообщений: 148
Награды: 3
Город: Грозный
Репутация: -8
Замечания: 20%
Статус: 
| ааа да точно забыл всё получилось спс  Добавлено (13.08.2010, 15:20) ---------------------------------------------
Code 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);
SendClientMessage(playerid, COLOUR_MISC, lang_texts[1][8] );
return 1; }
if(!strlen(password)) { SendClientMessage(playerid, COLOUR_MISC, lang_texts[1][9] ); return 1; } if (PlayerRegistered[playerid]) { SendClientMessage(playerid,COLOUR_RED, lang_texts[1][10] ); return 1; }
// udb new udbfilename[MAX_STRING]; udbfilename = oGetPlayerName(playerid); strcat(udbfilename,".Account",sizeof(udbfilename));
// dini new dinifilename[MAX_STRING]; format(dinifilename,sizeof(dinifilename),"%sGTO.Account.%s.txt",AccountDB,EncodeName(oGetPlayerName(playerid)));
if ((udb_Exists(udbfilename)) || (dini_Exists(dinifilename))) { SendClientMessage(playerid,COLOUR_RED, lang_texts[1][11] ); return 1; }
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);
CreatePlayer(playerid); SendClientMessage(playerid,COLOUR_GREEN, lang_texts[1][12] ); AccountLogin(playerid,password);
new logstring[256]; format(logstring, sizeof (logstring), "create_account: success %d %s",playerid,oGetPlayerName(playerid)); WriteLog(logstring); return 1; } if(listitem == 1) { new password[MAX_STRING]; if(!response) SendClientMessage(playerid, 0xFFFFFFFF, "Вы не авторизированы!"); set(password, inputtext); AccountLogin(playerid,password); return 1; } if(listitem == 2) { OnPlayerCommandText(playerid, "/q"); } return 1; } Ошибок нет! Но вот проблема! Даже если пользователь ничего не ввел его всеравно регает! Как это исправить? Как сделать так чтобы окно выскакивало пока он не введет норм пароль?
www.samp-gto.ru - мир без правил, мир без победителей и проигравших. (с) MSRV Рекламируй свой сервер, повышай посещаемость, добавляй его в наш рейтинг
|
| |
|
|
|
 |
|
 | |
| |
|