12:27
ОбновитьСмайлыУправление мини-чатом
МИНИ-ЧАТ
Главная страница!

 



 
          





Рекомендуем:





Последние Файлы GTA 4 Последние Файлы GTA-MP Реклама
Скрипт GTA 4 элементы Watch... 07.09.2014
Ferrari 360 Spider [EPM con... 13.12.2013
Porsche Cayenne Turbo 2012 ... 13.12.2013
Shelby Terlingua Mustang v1... 13.12.2013
Hamann Lamborghini Gallardo... 27.10.2013
[GM] The Big PEN1:LS v2.00 ... 04.12.2017
Dgun (AvnanceRP,SampRP,Dimo... 19.03.2016
SAMP скрипт SX Events (MySQ... 03.03.2016
Карта ASL мэрия для SAMP се... 03.03.2016
AIM для SA-MP 0.3.7 22.02.2016
Модератор форума: Dima-kun  
Форум SAMP о мультиплеерах для GTA. »   » Wiki-Samp-Rus » [Tutorial]Создание Диалогового окна (Переведено с sa-mp.com)
[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)
---------------------------------------------
а во всё сделал :) чёт я сначала не догонял

Форум SAMP о мультиплеерах для GTA. »   » Wiki-Samp-Rus » [Tutorial]Создание Диалогового окна (Переведено с sa-mp.com)
Поиск:





 


 


 
Хостинг от uCoz samp.at.ua