Стили: 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
Во, спасибо, щас сделаю регу менюшкой) Давно хотел да чет неполучилось. Кто подскажет функции чтобы еще можно было выбрать там Европа, Америка, Азия, Австралия, Африка. Кто поможет плюсом не обижу)
Опишите плз 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); но не понимать как её исправить)) помогите плиз чем можете.