 |
|
 |
|
|
|
Последние Файлы 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 |
| |
|
|
| Alan_Wake | Дата: Среда, 20.01.2010, 21:52 | Сообщение # 46 |
|
Уверенный в себе
Группа:
Продвинутые
Сообщений: 296
Награды: 2
Город: Санкт-Петербург
Репутация: 38
Замечания: 0%
Статус: 
| Эт, тут возник вопрос : Мне нужно совместить public OnPlayerClickPlayer(playerid, clickedplayerid, source) С диологовым окном, то есть: Тыкаю таб, тыкаю нужного плеера,вылазит меню с действиями для НЕГО (выбранного игрока). Окошко создал, по клику вызывается, а как в OnDialogResponse "перетащить" clickedplayerid из предыдущего паблика для проведения операций над выбранным игроком? _____________________ Походе что я сам догадался... ) CLICK_SOURCE_SCOREBOARD ,не ?) ___________________ а..не (
F.A.Q "Создание шлагбаумов"
likext.com -все самое интересное из мира спорта
Сообщение отредактировал Alan_Wake - Среда, 20.01.2010, 22:45 |
| |
|
|
| GTO-Rus™ | Дата: Четверг, 21.01.2010, 07:32 | Сообщение # 47 |
|
Освоившийся
Группа:
Пользователи
Сообщений: 145
Награды: 0
Город: Pawno
Репутация: 20
Замечания: 80%
Статус: 
| Alan_Wake, в начало кода new clickedid[MAX_PLAYERS]; в OnPlayerClickePlayer(playerid,clickedplayerid,source) clickedid[playerid] = clickedplayerid; и в OnDialogResponse используй переменную clickedid[playerid]
|
| |
|
|
| FrankNew | Дата: Воскресенье, 24.01.2010, 19:07 | Сообщение # 48 |
|
Новенький
Группа:
Пользователи
Сообщений: 4
Награды: 1
Город: Одесса
Репутация: 0
Замечания: 0%
Статус: 
| Люди помогите! плз... Вот сделал скрипт регистрации для ГТО: 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; } Ошибок нет! Но вот проблема! Даже если пользователь ничего не ввел его всеравно регает! Как это исправить? Как сделать так чтобы окно выскакивало пока он не введет норм пароль? П.С.: Это мой первый "полноценный" скрипт Добавлено (24.01.2010, 19:07) --------------------------------------------- Походу это бред((( ПОЛНЫЙ.... Он вобще не работает...
|
| |
|
|
| H3ad_Sh0t | Дата: Четверг, 28.01.2010, 19:22 | Сообщение # 49 |
|
Новенький
Группа:
Продвинутые
Сообщений: 47
Награды: 0
Город: Волгоград
Репутация: 12
Замечания: 20%
Статус: 
| хм, спасибо, очень помогло)А то сам пробовал не получалось сделать(Респект
|
| |
|
|
| Marcus_Se | Дата: Суббота, 30.01.2010, 17:32 | Сообщение # 50 |
|
Новенький
Группа:
Пользователи
Сообщений: 1
Награды: 0
Город: Almaty
Репутация: 0
Замечания: 0%
Статус: 
| Люди Добрые! Помогите пожалуйста перевесть в DIALOG_STYLE_INPUT [pwn] if(strcmp(cmd, "/put", true) == 0) { if(IsPlayerConnected(playerid)) if(IsAtBankoms(playerid)) { tmp = strtok(cmdtext, idx); if(!strlen(tmp)) { ShowPlayerDialog(playerid, 5055, DIALOG_STYLE_INPUT, "Áàíêîìàò", "Ââåäèòå ñóììó êîòîðóþ íåîáõîäèìî ïîëæèòü íà ñ÷åò:", "Ïîëîæèòü", "Îòìåíà"); SendClientMessage(playerid, COLOR_GRAD2, " Èñïîëüçóéòå: /put [ñóììà] "); format(string, sizeof(string), " ó âàñ $%d íà ñ÷åòó.", PlayerInfo[playerid][pAccount]); SendClientMessage(playerid, COLOR_GRAD3, string); return 1; } new cashdeposit = strval(tmp); if(!strlen(tmp)) { SendClientMessage(playerid, COLOR_GRAD2, " Èñïîëüçóòå: /put [ñóììà] "); format(string, sizeof(string), " ó âàñ $%d íà ñ÷åòó.", PlayerInfo[playerid][pAccount]); SendClientMessage(playerid, COLOR_GRAD3, string); return 1; } if (cashdeposit > GetPlayerMoney(playerid) || cashdeposit < 1) { SendClientMessage(playerid, COLOR_GRAD2, " ó âàñ íåò ñòîëüêî äåíåã"); return 1; } GivePlayerMoney(playerid,-cashdeposit); new curfunds = PlayerInfo[playerid][pAccount]; PlayerInfo[playerid][pAccount]=cashdeposit+PlayerInfo[playerid][pAccount]; SendClientMessage(playerid, COLOR_WHITE, "|____ ÊÂÈÒÀÍÖÈß ____|"); format(string, sizeof(string), " Ñòàðûé áàëàíñ: $%d", curfunds); SendClientMessage(playerid, COLOR_GRAD2, string); format(string, sizeof(string), " Ïîëîæåííî íà ñ÷¸ò: $%d",cashdeposit); SendClientMessage(playerid, COLOR_GRAD4, string); SendClientMessage(playerid, COLOR_GRAD6, "|------------------------------|"); format(string, sizeof(string), " Íîâûé áàëàíñ: $%d", PlayerInfo[playerid][pAccount]); SendClientMessage(playerid, COLOR_WHITE, string); return 1; } return 1; }
|
| |
|
|
| m@rlboro | Дата: Среда, 03.02.2010, 21:22 | Сообщение # 51 |
|
Новенький
Группа:
Продвинутые
Сообщений: 44
Награды: 1
Город: харьков
Репутация: 1
Замечания: 0%
Статус: 
| хочу такю херь реализовать в ПЕН кто поможет? с меня + аська 372041364
|
| |
|
|
| Leo111 | Дата: Воскресенье, 07.02.2010, 18:52 | Сообщение # 52 |
|
Уверенный в себе
Группа:
I'm V.I.P.
Сообщений: 226
Награды: 8
Город: Las Venturas
Замечания: 0%
Статус: 
| 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); 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); } } else { ShowPlayerDialog(playerid,100,DIALOG_STYLE_INPUT,"Регистрация","Введите пароль:","ок","отмена"); } } 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,"Регистрация","Введите пароль:","ок","отмена"); } Добавлено (07.02.2010, 18:52) --------------------------------------------- кстати твоя тема посчет OnPlayerCommandText(playerid, "/q"); непашет... =((
|
| |
|
|
| xSLiMx | Дата: Пятница, 12.02.2010, 17:12 | Сообщение # 53 |
|
Мастер джэдай
Группа:
I'm V.I.P.
Сообщений: 2163
Награды: 34
Город: Ростов - на - Дону
Репутация: 1429
Замечания: 80%
Статус: 
| Подскажите, каким образом можно сравнивать текст. Например: Есть переменная денег в аккаунте игрока. Предположим вопрос: Введите ваше кол-во денег. И на руках у мя 100$, а вот када ввожу, пишит не правильная сумма. Каким образом можно сравнивать занчение и текст
|
| |
|
|
| Leo111 | Дата: Пятница, 12.02.2010, 18:52 | Сообщение # 54 |
|
Уверенный в себе
Группа:
I'm V.I.P.
Сообщений: 226
Награды: 8
Город: Las Venturas
Замечания: 0%
Статус: 
| из мода ГТО команда /givecash проверка на ввод [pwn] new tmp[256]; tmp = strcharsplit(text, idx,strchar(" ")); if(!strlen(tmp)) { SendClientMessage(playerid, COLOUR_MISC, lang_texts[15][77] ); return 1; } giveplayerid = strval(tmp); tmp = strcharsplit(text, idx,strchar(" ")); if(!strlen(tmp)) { SendClientMessage(playerid, COLOUR_MISC, lang_texts[15][78] ); return 1; } [/pwn]
|
| |
|
|
| Dima-kun | Дата: Вторник, 02.03.2010, 11:56 | Сообщение # 55 |
|
Группа:
Разработчики
Сообщений: 6269
Награды: 72
Репутация: 3512
Замечания: 0%
Статус: 
| Xotttab, нужен публик OnDialogResponse(playerid, dialogid, response, listitem, inputtext[])
Мои работы: [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
|
| |
|
|
| Xotttab | Дата: Вторник, 02.03.2010, 14:37 | Сообщение # 56 |
|
Уверенный в себе
Группа:
Пользователи
Сообщений: 293
Награды: 11
Город: Чаны
Репутация: 64
Замечания: 60%
Статус: 
| DizeL-ZR, есть такой и там уже есть 9 диалоговых окон!
Diamond Media RP Server[0.3a] Address: 92.63.196.25:7780 ExtraRP 59356 lines
|
| |
|
|
| GTO-Rus™ | Дата: Вторник, 02.03.2010, 23:33 | Сообщение # 57 |
|
Освоившийся
Группа:
Пользователи
Сообщений: 145
Награды: 0
Город: Pawno
Репутация: 20
Замечания: 80%
Статус: 
| Xotttab, код выложи
|
| |
|
|
| Fany | Дата: Четверг, 11.03.2010, 22:02 | Сообщение # 58 |
|
Новенький
Группа:
Пользователи
Сообщений: 19
Награды: 1
Город: Рязань
Репутация: 0
Замечания: 0%
Статус: 
| помогите плиз как сделать так что бы после выбора опять возращался в меню [pwn] if(dialogid == 9) { if(response) { if(listitem == 0) { new Float:health; { GivePlayerMoney(playerid, - 2); if(GetPlayerHealth(playerid, health) < 100) { if(PlayerInfo[playerid][pAlcoholPerk] > 0) { new hp = 2 * PlayerInfo[playerid][pAlcoholPerk]; hp += 5; SetPlayerHealth(playerid, health + hp); } else { SetPlayerHealth(playerid, health + 5.0); } } } } if(listitem == 1) { new Float:health; { GivePlayerMoney(playerid, - 2); if(GetPlayerHealth(playerid, health) < 100) { if(PlayerInfo[playerid][pAlcoholPerk] > 0) { new hp = 2 * PlayerInfo[playerid][pAlcoholPerk]; hp += 5; SetPlayerHealth(playerid, health + hp); } else { SetPlayerHealth(playerid, health + 5.0); } } } } if(listitem == 2) { new Float:health; { GivePlayerMoney(playerid, - 2); if(GetPlayerHealth(playerid, health) < 100) { if(PlayerInfo[playerid][pAlcoholPerk] > 0) { new hp = 2 * PlayerInfo[playerid][pAlcoholPerk]; hp += 5; SetPlayerHealth(playerid, health + hp); } else { SetPlayerHealth(playerid, health + 5.0); } } } } } } return 1; }[/pwn]
|
| |
|
|
| xSLiMx | Дата: Четверг, 11.03.2010, 22:24 | Сообщение # 59 |
|
Мастер джэдай
Группа:
I'm V.I.P.
Сообщений: 2163
Награды: 34
Город: Ростов - на - Дону
Репутация: 1429
Замечания: 80%
Статус: 
| Fany, после действия выводи диалог.
|
| |
|
|
| Fany | Дата: Четверг, 11.03.2010, 22:59 | Сообщение # 60 |
|
Новенький
Группа:
Пользователи
Сообщений: 19
Награды: 1
Город: Рязань
Репутация: 0
Замечания: 0%
Статус: 
| xSLiMx, ты думаешь я шарю в этом)) Добавлено (11.03.2010, 22:59) --------------------------------------------- а во всё сделал чёт я сначала не догонял
|
| |
|
|
|
 |
|
 | |
| |
|