Стили: 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 - вертикальная табуляция \' - одиночная кавычка \" - двойные кавычки \? - вопросительный знак
playerid - playerid dialogid - 0 style - DIALOG_STYLE_MSGBOX caption[] - Правила [RP]_FaNTaSy_WoRLD_[RUS] info[] - то, что будет отображатся в окне и у тебя этого параметра просто нету button1[] - Принять button2[] - Отмена
playerid - playerid dialogid - 0 style - DIALOG_STYLE_MSGBOX caption[] - Правила [RP]_FaNTaSy_WoRLD_[RUS] info[] - то, что будет отображатся в окне и у тебя этого параметра просто нету button1[] - Принять button2[] - Отмена
Я не понимаю как сделать если не сложно можешь написать тока без
прописки команд if(strcmp(cmdtext,"/okno",true)==0) просто чтоб зайти на сервер и сразу выдало Правила сервера принять и дальше либо регистрация либо логин ну ты понял наверно
Хмм... в твоём случае игроку придется каждый раз соглашаться с правилами при подключении, лучше сделай так:
в OnPlayerLogin в конец проверки
if(PlayerInfo[playerid][pReg] == 0)
new pravila[256+1]; format(pravila, sizeof(pravila), "Не читери\nНе оскарбляй\nУважай остальных"); ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,"Правила [RP]_FaNTaSy_WoRLD_[RUS]","pravila","Принять","Отмена");
и в OnPlayerDialog
if(dialogid == 0) { if(response) { SendClientMessage(playerid, COLOR_YELLOW, " Удачной игры на сервере"); } else { SendClientMessage(playerid, COLOR_YELLOW, " Для игры на нашем сервере, вы должны принять правила"); Kick(playerid); } }
Хмм... в твоём случае игроку придется каждый раз соглашаться с правилами при подключении, лучше сделай так:
в OnPlayerLogin в конец проверки
if(PlayerInfo[playerid][pReg] == 0)
new pravila[256+1]; format(pravila, sizeof(pravila), "Не читери\nНе оскарбляй\nУважай остальных"); ShowPlayerDialog(playerid,0,DIALOG_STYLE_MSGBOX,"Правила [RP]_FaNTaSy_WoRLD_[RUS]","pravila","Принять","Отмена");
и в OnPlayerDialog
if(dialogid == 0) { if(response) { SendClientMessage(playerid, COLOR_YELLOW, " Удачной игры на сервере"); } else { SendClientMessage(playerid, COLOR_YELLOW, " Для игры на нашем сервере, вы должны принять правила"); Kick(playerid); } }
так что тяжело соглашатся каждый раз но чтоб они знали про правила
спасибо вот +
у меня система другая написана
нету этого OnPlayerDialog
Сообщение отредактировал Fifa4ka - Четверг, 12.11.2009, 17:30
Во, спасибо, щас сделаю регу менюшкой) Давно хотел да чет неполучилось. Кто подскажет функции чтобы еще можно было выбрать там Европа, Америка, Азия, Австралия, Африка. Кто поможет плюсом не обижу) Http://vk.com/minusdot.team
Опишите плз DIALOG_STYLE_LIST. Как там создавать пункты, и как выполнять функцию при нажатии на пункт.
Добавлено (14.11.2009, 12:52) --------------------------------------------- На самп коме немного криво написано, вот взял из своего мода для примера
Code
new s[128];
хоть куда: format(s,sizeof(s),"Скил ближнего оружия\nСкил дальнего оружия оружия\nСкил среднего оружия\nСкил устойчивости к радиации\nСкил телепортации\nСкил повышения очков опыта с каждого уровня\nСкил увиличения возможности крита\nСкил увиличения прыжка в высоту\nСкил временого увиличения скорости передвежения\nСкил увиличения хп"); ShowPlayerDialog(playerid,4,DIALOG_STYLE_LIST,"Выберите начальный скил",s,"Выбрать","Поже");
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(dialogid == 4) { if(response) { if (listitem == 0) { dini_IntSet(loginname,"S1",1); SendClientMessage(playerid, 0xAA3333AA, "Вы выбрали Скил ближнего оружия!"); OnPlayerEnter(playerid); } else if (listitem == 1) { dini_IntSet(loginname,"S2",1); SendClientMessage(playerid, 0xAA3333AA, "Вы выбрали Скил среднего оружия!"); OnPlayerEnter(playerid); } ****************************** мой код
Думаю тут все понятно
Сообщение отредактировал TaLeRoK - Суббота, 14.11.2009, 12:53
[pwn]public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { if(dialogid == 5) if(!response) return 1; if(listitem == 0) //проверка, выбран ли Пункт 1 { Ваш код } if(listitem == 1) //проверка, выбран ли Пункт 2 { Ваш код } if(listitem == 2) //проверка, выбран ли Пункт 3 { Ваш код } } return 1; }[/pwn]
Ололо, чем сложнее подпись - тем интересней*)
Сообщение отредактировал JrC116 - Суббота, 14.11.2009, 14:46
Людии сооссс ,помогите. Сделал регу для пен1 но вот беда, как выяснилось не важно какой пароль вписывать оно будет по любому регить\логинить. вот код
public OnDialogResponse(playerid, dialogid, response, listitem, inputtext[]) { new tmppass[64];//преобразованный пароль if(dialogid == 1)//итак, наше первое окно { if(response) // при нажатие на левую кнопку (логин) { if(!strlen(inputtext))// если оставляет пустую строку, выводим ему опять окно { new loginmsg[256+1]; format(loginmsg,256,"Здравствуйте,Вы вошли на Сервер.\n\nЭтот ник зарегистрирован.\nУ вас есть 60 секунд что б ввести пароль."); ShowPlayerDialog(playerid,1,DIALOG_STYLE_INPUT,"Авторизация",loginmsg,"Логин","Отмена"); return 1; } strmid(tmppass, inputtext, 0, strlen(inputtext), 255); Encript(tmppass); if (gdebug){printf("DEBUG enterd %s", tmppass);} OnPlayerLogin(playerid,tmppass); } else // если нажимает правую кнопку (отмена) { SendClientMessage(playerid, COLOR_WHITE, "*Сервер: Вы не залогинилсь, учтите ваш прогрес не сохраниться. Рекомендуем перезайти и залогиниться"); // здесь вы уже сами выбирайте, но я кикну его, ибо я хочу, чтобы он авторизовывался } } else if(dialogid == 2)//переходим ко второму диалоговому окну (регистрация) { if(response)// всё так-же, это нажатие левой кнопки (регистрация) { if(!strlen(inputtext)) // если поле осталось пустым, выводим ему опять диалоговое окно { new loginmsg[256+1]; format(loginmsg,256,"Здравствуйте,Вы вошли на Сервер.\n\nИзпользуемый вами ник свободен.\nЗарегистрируйтесь чтоб продолжить.\nПароль для нового Аккаунта:"); ShowPlayerDialog(playerid,2,DIALOG_STYLE_INPUT,"Регистрация",loginmsg,"Регистрация","Отмена"); return 1; } new playername[MAX_PLAYER_NAME]; new string[256]; gPlayerAccount[playerid] = 1; strmid(tmppass, inputtext, 0, strlen(inputtext), 255); Encript(PlayerInfo[playerid][pPassword]); GetPlayerName(playerid, playername, sizeof(playername)); format(string, sizeof(string), "Accounts/%s.cer", playername); PlayerInfo[playerid][pCash] = GetPlayerMoney(playerid); new File: file = fopen(string, io_read); if (file) { SendClientMessage(playerid, COLOR_GRAD1, " That nick is registered"); fclose(file); return 1; } // new Float:px, Float:py, Float:pz;// // new Float:health;// //new randphone = 1000 + random(8999);//minimum 1000 max 9999 //giving one at the start //PlayerInfo[playerid][pPnumber] = randphone; printf("%s has created an account.", playername); new File:hFile; hFile = fopen(string, io_append); new var[32];// format(var, 32, "%s\n", PlayerInfo[playerid][pPassword]);fwrite(hFile, var); format(var, 32, "%d pCash\n", PlayerInfo[playerid][pCash]);fwrite(hFile, var); format(var, 32, "%d pAccount\n", PlayerInfo[playerid][pAccount]);fwrite(hFile, var); format(var, 32, "%d pAdmin\n", PlayerInfo[playerid][pAdmin]);fwrite(hFile, var); format(var, 32, "%d pLevel\n", PlayerInfo[playerid][pLevel]);fwrite(hFile, var); format(var, 32, "%d pExp\n", PlayerInfo[playerid][pExp]);fwrite(hFile, var); format(var, 32, "%d gPupgrade\n", PlayerInfo[playerid][gPupgrade]);fwrite(hFile, var); format(var, 32, "%d pKills\n", PlayerInfo[playerid][pKills]);fwrite(hFile, var); format(var, 32, "%d pCB\n", PlayerInfo[playerid][pCB]);fwrite(hFile, var); format(var, 32, "%d pHW\n", PlayerInfo[playerid][pHW]);fwrite(hFile, var); format(var, 32, "%d pSR\n", PlayerInfo[playerid][pSR]);fwrite(hFile, var); format(var, 32, "%d pWA\n", PlayerInfo[playerid][pWA]);fwrite(hFile, var); format(var, 32, "%d pPEN\n", PlayerInfo[playerid][pPEN]);fwrite(hFile, var); format(var, 32, "%d pGun1\n", PlayerInfo[playerid][pGun1]);fwrite(hFile, var); format(var, 32, "%d pGun2\n", PlayerInfo[playerid][pGun2]);fwrite(hFile, var); format(var, 32, "%d pGun3\n", PlayerInfo[playerid][pGun3]);fwrite(hFile, var); format(var, 32, "%d pGun4\n", PlayerInfo[playerid][pGun4]);fwrite(hFile, var); format(var, 32, "%d pGun5\n", PlayerInfo[playerid][pGun5]);fwrite(hFile, var); format(var, 32, "%d pGun6\n", PlayerInfo[playerid][pGun6]);fwrite(hFile, var); format(var, 32, "%d pAmmo1\n", PlayerInfo[playerid][pAmmo1]);fwrite(hFile, var); format(var, 32, "%d pAmmo2\n", PlayerInfo[playerid][pAmmo2]);fwrite(hFile, var); format(var, 32, "%d pAmmo3\n", PlayerInfo[playerid][pAmmo3]);fwrite(hFile, var); format(var, 32, "%d pAmmo4\n", PlayerInfo[playerid][pAmmo4]);fwrite(hFile, var); format(var, 32, "%d pAmmo5\n", PlayerInfo[playerid][pAmmo5]);fwrite(hFile, var); format(var, 32, "%d pAmmo6\n", PlayerInfo[playerid][pAmmo6]);fwrite(hFile, var); format(var, 32, "%f pSHealth\n", PlayerInfo[playerid][pSHealth]);fwrite(hFile, var); format(var, 32, "%f pHealth\n", PlayerInfo[playerid][pHealth]);fwrite(hFile, var); format(var, 32, "%f pPos_x\n", PlayerInfo[playerid][pPos_x]);fwrite(hFile, var); format(var, 32, "%f pPos_y\n", PlayerInfo[playerid][pPos_y]);fwrite(hFile, var); format(var, 32, "%f pPos_z\n", PlayerInfo[playerid][pPos_z]);fwrite(hFile, var); if(accountplay) { PlayerInfo[playerid][pInt] = 0; } format(var, 32, "%d pInt\n", PlayerInfo[playerid][pInt]);fwrite(hFile, var); format(var, 32, "%d pLocal\n", PlayerInfo[playerid][pLocal]);fwrite(hFile, var); format(var, 32, "%d pTeam\n", PlayerInfo[playerid][pTeam]);fwrite(hFile, var); format(var, 32, "%d pModel\n", PlayerInfo[playerid][pModel]);fwrite(hFile, var); format(var, 32, "%d pPnumber\n", PlayerInfo[playerid][pPnumber]);fwrite(hFile, var); format(var, 32, "%d pPhousekey\n", PlayerInfo[playerid][pPhousekey]);fwrite(hFile, var); format(var, 32, "%d pPbiskey\n", PlayerInfo[playerid][pPbiskey]);fwrite(hFile, var); format(var, 32, "%d CDPlayer\n",PlayerInfo[playerid][pCDPlayer]);fwrite(hFile, var); format(var, 32, "%d TLicence\n",PlayerInfo[playerid][TLicence]);fwrite(hFile, var); format(var, 32, "%d PLicence\n",PlayerInfo[playerid][PLicence]);fwrite(hFile, var); format(var, 32, "%d DanceStyle\n",PlayerInfo[playerid][DanceStyle]);fwrite(hFile, var); format(var, 32, "%d PLicDate\n",PlayerInfo[playerid][PLicDate]);fwrite(hFile, var); format(var, 32, "%d TLicDate\n",PlayerInfo[playerid][TLicDate]);fwrite(hFile, var); format(var, 32, "%d BLicence\n",PlayerInfo[playerid][BLicence]);fwrite(hFile, var); format(var, 32, "%d BLicDate\n",PlayerInfo[playerid][BLicDate]);fwrite(hFile, var); format(var, 32, "%d pPgaragekey\n", PlayerInfo[playerid][pPgaragekey]);fwrite(hFile, var); format(var, 32, "%d pJailTime\n", PlayerInfo[playerid][pJailTime]);fwrite(hFile, var); format(var, 32, "%d pMarried\n", PlayerInfo[playerid][pMarried]);fwrite(hFile, var); format(var, 32, "%s pMarriedTo\n",PlayerInfo[playerid][pMarriedTo]);fwrite(hFile, var); format(var, 32, "%d pPfuelkey\n",PlayerInfo[playerid][pPfuelkey]);fwrite(hFile, var); format(var, 32, "%d pAllKills\n",PlayerInfo[playerid][pAllKills]);fwrite(hFile, var); format(var, 32, "%d pAllDeath\n",PlayerInfo[playerid][pAllDeath]);fwrite(hFile, var); format(var, 32, "%d pMuteTime\n",PlayerInfo[playerid][pMuteTime]);fwrite(hFile, var); format(var, 32, "%d gRang\n",PlayerInfo[playerid][gRang]);fwrite(hFile, var); format(var, 32, "%d pMutePmTime\n",PlayerInfo[playerid][pMutePmTime]);fwrite(hFile, var); fclose(hFile); OnPlayerLogin(playerid,PlayerInfo[playerid][pPassword]); return 1; } } return 1; }
Моя понимать что проблема кроеться в strmid(tmppass, inputtext, 0, strlen(inputtext), 255); но не понимать как её исправить)) помогите плиз чем можете.