**Best-Host = Forum SA:MP**

Информация о пользователе

Привет, Гость! Войдите или зарегистрируйтесь.


Вы здесь » **Best-Host = Forum SA:MP** » Уроки скриптинга » Диалоговые окна в sa-mp0.3


Диалоговые окна в sa-mp0.3

Сообщений 1 страница 3 из 3

1

Диалоговые окна, это окна которые появляются при определенном действии.
Самым простым для объяснения действием, я считаю подключение игрока к серверу!
========================================================================

public OnPlayerConnect(playerid) - это наш первый паблик, который отвечает за действия при коннекте игрока к серверу
{
if(IsPlayerNPC(playerid)) return 1; - эта строка отвечает за действия которые будут происходить с ботом который возможно будет тоже к нам присоединятся (это исключительно по вашему желанию)
ретурн 1; - отвечает за то чтоб окно выводилось, либо действия продолжали происходить, но так как это бот то он естествено не будет знать что делать в таких случаях и поэтому надо сделать так чтобы ничего не происходило именно ботом! По-этом меняем значение с 1 на 0 и у нас получается if(IsPlayerNPC(playerid)) return 0;
Дальше указываем что будет если все-же это не бот! А то-есть делаем полноценное окно логина!
ShowPlayerDialog(playerid, dialogid, style, caption[], info[], button1[], button2[]);

Объяснение к значениям внутри кода:
Кликните, чтобы показать/скрыть скрытый текст
playerid - это обозначает что окно будет видеть только тот игрок который только подключился
dialogid - это ид номер окна, который надо указывать самостоятельно!
style - стиль окна, как описывалось в первом уроке есть их 3 вида! Но все-же повторю!
Вот примеры:
DIALOG_STYLE_MSGBOX - сообщение с двумя клавишами
DIALOG_STYLE_INPUT - сообщение с возможностью ввода данных, часто используются в запросе пароля при входе на сервер
DIALOG_STYLE_LIST - сообщение с возможностью выбора варианта ответа

Чуть дальше мы их всех рассмотрим по очереди!

caption[] - заголовок окна! (Во всех стилях его значение не меняется)
info[] - вот это окно имеет свое значение в каждом окне, например:
В DIALOG_STYLE_MSGBOX - это текст выводимого сообщения
В DIALOG_STYLE_INPUT - это название поля для ввода. Пример: Введите логин: [___________]
В DIALOG_STYLE_LIST - это сам список вариантов, как описывать каждый вариант напишу ниже!

button1[] - это название первой кнопки, например "ввести" или "Войти", "Выбрать","Далее" и т.д.
button2[] - это название второй кнопки, например "Отменить", "Назад", "Выйти" и т.д.

Итак подставляем нужные значения во внутрь кода и смотрим, что получилось (Стили будут ити по порядку!):
1. Стиль:
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX, "Привила сервера", "Не флудить\nНе читерить\nНе матерится", "Согласен", "Отказаться"); - вот считайте одно окно готово!

Вот примерный вид его:

Код:
         Правила сервера         
 Не флудить                         
 Не Читерить                         
 Не матерится                       
                                               
[Согласен][Отказатся]

2.Стиль
ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Вход на сервер", "Пароль", "Ввойди", "Отказаться"); - вот считайте второе окно готово!

Вот примерный вид его:

Код:
Вход на сервер

Пароль:  [___________]
                                               
[Ввойти][Отказатся]

3.Стиль
ShowPlayerDialog(playerid, 3, DIALOG_STYLE_LIST, "Выбор Оружия", "АК-47\nМ-16\nДесерт Игл", "Выбрать", "Отказаться"); - вот считайте второе окно готово!
Вот примерный вид его:

Код:
       Выбор Оружия
АК-47
М-16
Десерт Игл




                                               
[Выбрать][Отказатся]

Так вроде с окнами все ясно, но вот так задача, а как сервер поймет что от него хотят?
Для таких случаев существует public OnPlayerDialogResponse
Но сначала все-таки выведем окончательный вид пред ведущего паблика! Итак смотрим:

public OnplayerConnect(playerid)
{
If(IsPlayerNPC(playerid)) return 0;
ShowPlayerDialog(playerid, 1, DIALOG_STYLE_MSGBOX, "Привила сервера", "Не флудить\nНе читерить\nНе матерится", "Согласен", "Отказаться");
return ;
}

Вот в общем и всё! Как вы заметили, что я использовал только одно созданное окно из трех!
Просто я решил, пускай с этого все начинается)))
А потом, в зависимости от действий игрока, так и будем с ним поступать)

public OnPlayerDialogResponse
{
if(dialogid == 1) это обозначает что идет проверка первого окна! То-есть если бы там была цыфра 2 то проверялось бы 2 окно...
{
if(response) // при нажатие на кнопку согласится
{
выдаем ему окно ввода логина!
ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Вход на сервер", "Пароль", "Ввойди", "Отказаться");
return 1; выдаем ему окно ввода логина!
}
А вот если игрок отказывается выполнять, я его предлагаю кикнуть! Делается это так!
else // что-то типа если! (в нашем случае "если отказ")
{
Kick(playerid);
}
return 1;
} Все первое окно описано! Преходим ко вторуму!
Итак тоже самое только вводим цифру 2
if(dialogid == 2)
{
if(response) // при нажатие на кнопку "Войти"
{
Но вот так проблема, а что если поле пустое? Делаем проверку поля на наличие символов с помощью if(!strlen(inputtext))
{
если оно пустое выдаем ему окно еще раз! Просто копируем как прошлое!
ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Вход на сервер", "Пароль", "Ввойди", "Отказаться");
return 1;
} А вот если пароль введен и правильный пусть выбьет окно с выбором оружия!
ShowPlayerDialog(playerid, 3, DIALOG_STYLE_LIST, "Выбор Оружия", "АК-47\nМ-16\nДесерт Игл", "Выбрать", "Отказаться");
return 1;
}
else // если же игрок не хочет вводить пароль. Как нем его и за это!
{
Kick(playerid);
}
return 1;
} Все второе окно описано! Преходим ко третьему!
if(dialogid == 3) естественно ставим 3, опять таки проблема! Как я и говорил, у некоторых серверов чуть-чуть другие коды. По-этому выдачу оружия не гарантирую!
{
if(response) // проверка выбрал ли игрок оружие
{
if(listitem == 0) если выбрал АК-47
{
GivePlayerWeapon(playerid,30,1000)
}
if(listitem == 1) если выбрал М-16
{
GivePlayerWeapon(playerid,31,1000)
}
if(listitem == 2) если выбрал Десерт Игл
{
GivePlayerWeapon(playerid,24,1000)
}
}
return 1;
}

А теперь давайте посмотрим что у нас получилось!

public OnPlayerDialogResponse
{
if(dialogid == 1)
{
if(response)
{
ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Вход на сервер", "Пароль", "Ввойди", "Отказаться");
return 1;
}
else
{
Kick(playerid);
}
return 1;
}
if(dialogid == 2)
{
if(response)
{
if(!strlen(inputtext))
{
ShowPlayerDialog(playerid, 2, DIALOG_STYLE_INPUT, "Вход на сервер", "Пароль", "Ввойди", "Отказаться");
return 1;
}
ShowPlayerDialog(playerid, 3, DIALOG_STYLE_LIST, "Выбор Оружия", "АК-47\nМ-16\nДесерт Игл", "Выбрать", "Отказаться");
return 1;
}
else
{
Kick(playerid);
}
return 1;
}
if(dialogid == 3)
{
if(response)
{
if(listitem == 0) если выбрал АК-47
{
GivePlayerWeapon(playerid,30,1000)
}
if(listitem == 1) если выбрал М-16
{
GivePlayerWeapon(playerid,31,1000)
}
if(listitem == 2) если выбрал Десерт Игл
{
GivePlayerWeapon(playerid,24,1000)
}
}
return 1;
}

=================================================[Конец]======================================================

Отредактировано Денис (2010-03-04 11:50:01)

0

2

спасибо , полезно....

0

3

Прикольно :)

0


Вы здесь » **Best-Host = Forum SA:MP** » Уроки скриптинга » Диалоговые окна в sa-mp0.3