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

 



 
          





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





Последние Файлы 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  
[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 "Уйти"
при нажатии на логин уже отправляет на само окно логина :D

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"

как её исправить? wall

Добавлено (12.08.2010, 22:31)
---------------------------------------------
вот на этой строчке

Code
if(pickupid == tp2)  

Мне кто нибудь поможет?)



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%
Статус:
ааа да точно забыл всё получилось спс new_russian

Добавлено (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
Рекламируй свой сервер, повышай посещаемость, добавляй его в наш рейтинг
Поиск:





 


 


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