Здравствуйте, гость ( Вход | Регистрация )

 
Тема закрытаОткрыть новую тему
> Диалоги, краткий мануал
NFx
сообщение 21.2.2006, 19:34
Сообщение #1


********

SpS 60+(умер), NE Priest 40+ жифф
Сообщений: 1.505
Регистрация: 3.9.2003
Группа: Пользователи
Наличность: 0
Из: Подмосковье
Пользователь №: 950



Что такое диалоги?

Диалог - это графическое меню в сфере. Он состоит из 3ех частеи - одна где вы описываете как он выглядит, вторая где вы пишете текст, третья где говорите что делать при нажатии кнопок.

Как отделяются части диалога?

Каждая часть диалога - отдельный блок скрипта, это:

->[DIALOG d_123]
здесь описание диалога, его своиства и внешний вид

->[DIALOG d_123 TEXT]
текст диалога

->[DIALOG d_123 BUTTON]
здесь описываются кнопки диалога

Какие команды есть в диалоге?

Во-первых есть команды изображений, потом идут текстовые команды, затем следуют разновидности кнопок, сейчас я вам их перечислю. Сразу замечу, что буквами n - я буду обозначать номер чего-либо, x и y это координаты расположения в диалоге.

Сразу под названием диалога вы должны указать координаты точки на экране, от которой будут отсчитываться все координаты, указанные для диалога, То есть если вы укажете 10,10 а потом в диалоге у вас будет текст с указанными коордианатами 20,25 то сфера автоматом сдвинет координаты текста на 30,35.

text x y цвет n - это текст, то есть вы указываете, что в диалоге будет текст, начинается который в координатах x и y, цвет будет с номером "цвет", а сам текст будет взят из блока с текстом со строки с номером n.
НО: номера должны идти с 0ля! т.е. первая строка в блоке с текстом носит номер 0. Также прошу заметить, что если есть текст с номером, например, 3, а в блоке текста нужная строка пустая - клиент покрашит.

Еще заметим, что в R и 56-57 сферах можно будет избежать использования блока текста, т.к. есть такая штука как:

dtext x y цвет текст - то есть вместо номера вы прям сразу же пишите нужный вам текст.

gumppic x y n - вставка картинки-гампа из вердаты, х и у коордианты(это везде так, больше уточнять не буду), а n - номер из вердаты(просто через ИнсаидУО находите нужню картинку и вставляете ее номер).

tilepic x y n - тоже самое ,что гамппик, но для таилов

Замечание: tile - это клетка, то есть таилы - это предметы, которые рассчитанны на одну клетку земли, т.е. это картинка, изображающая предмет на земле, в контеинере, например картинка того, как меч лежит на земле. А вот когда меч у вас в руках, и он отображается у вас на папердолле - это уже гамп, т.к. он не ограничен по размеру. Ну и если говорить проще - гампы в инсаидУО в разделе "Gumps", а таилы в разделе "Artwork".

textentry x y ширина длинна цвет номер_ввода n - это строка для ввода. Тут немного хитрее, естественно, чтобы игрок не мог вводить слово длиннее ширины диалога, тут стоят ограничения по длинне и ширине надписи. n - так же как и в тексте это номер текста из блока текста, который сначала будет написан в строке ввода(т.е. который моно стереть и напистаь свой), а "номер_ввода" это порядковый номер именно строки ввода, ниже объясню зачем он нужен. "цвет" как и в тексте - это цвет текста, который вы вводите в эту строку.

Замечание: чтобы использовать в скрипте текст, введенный в строке ввода, нада писать в блоке кнопок <ARGTXT[номер_ввода]>. В частности как такая штука используется можете посмотреть в скрипте на переименовку сумок, например.

resizepic x y n x1 y1 - это команда для создания фона, где х и у координаты левого верхнего угла фона, а х1 и у1 правого нижнего. n - номер фона, восновном используются 3500, 3600, 2600. Кстати под номером фона - имеется ввиду, что берется гамп с указанным номером + 7 следующих и из них состоявляется фон.

radio x y ненажатая нажатая состояние n - это переключатель типа один_из_всех. То есть у вас будет несколько кнопок, которые можно менять из состояния вкл/выкл, притом включенной может быть только одна из всех. "ненажатая" - картинка кнопки когда она выключенная, "нажатая" - когда она включенная, "состояние" если 1 то кнопка сразу включенна, если 0 то выключенна, n - номер переключателя.

checkbox x y ненажатая нажатая состояние n - это тоже переключатель, но типа все_из_всех, то есть таких переключателеи может быть сколько угодно нажато одновременно. Все пункты такие же как для предыдущего переключателя.

Замечание: чтобы проверить, включен или нет переключатель, используем <ARGCHK[n]> если переключатель с номреом n включен то вернет 1, елси выключен, то будет 0.

group n это штука очень полезная, т.к. она отделяет между собой группы радио баттонов, то есть если у вас есть вот такая штукенция:

Код
group 3
radio 26 50 038 037 0 1
radio 26 80 038 037 0 2
radio 26 110 038 037 0 3

group 4
radio 86 50 038 037 0 4
radio 86 80 038 037 0 5
radio 86 110 038 037 0 6


то у вас одновременно может быть нажат только один из переключатели 1, 2, 3 и только один из переключателеи 4, 5, 6.

button x y ненажатая нажатая действие? номер_страницы n - тут "ненажатая" это номер гампа из вердаты, используемого как изображение кнопки, а "нажатая" это на какои он изменится при нажатии. В диалогах кнопки выполняют две функции - или листают страницы или закрывыают диалог, производя действия из блока с действиями для кнопок. Что именно ей делать, листать страницу или закрывать дилог вы и указываете вместо "действие?", т.е. если ставите 1, то диалог закроется и сфера выполнит действие из третьего блока в секции "ONBUTTON=n", об этом чуточку попозже, а если же вы укажете в "действие?" 0, то тогда она перевернет страницу на страницу с номером "номер_страницы". n - номер кнопки.

Примеры:
Код
button 50 50 037 038 0 5 1
кнопка в координатах 50,50 при нажатии перелистнет диалог на страницу с номером 5

button 50 50 037 038 1 0 2
кнопка в координатах 50,50 при нажатии закроет диалог и выполнит действие из блока действий кнопок из секции "ONBUTTON=5"


PAGE n - это отделитель страницы. Запомните, ВСЕ что у вас находится в PAGE 0 будет отражаться на любой странице.

отдельно отметим своиства диалога, которые также прописываются в блоке диалога с описанием:

nomove - окно нельзя двигать

noclose - окно нельзя закрывать

Что делать в блоке текста?

В блоке текста просто вводите текст в нужные строки (IMG:style_emoticons/default/smile.gif) сразу замечУ, что если строка, к которой адресутеся текст диалога пустая - будет краш клиента!(не зря я вам второи раз замечаю - очень пренеприятная вещь)
И еще замечание, в блоке текста нельзя писать условие, потому применяйте вот такую штуку: <qval (условие как для иф) ? если условие верно : если условие не верно>, напрмиер в таких случаях:

Код
[DIALOG d_123 TEXT]
Hello, dear <qval (<src.body> == c_man) ? Gentleman : Lady>!


Что делать в блоке кнопок?

Блок кнопок состоит из всего однои команды - ONBUTTON=n, эта команда отвечает за действие при нажатии кнопки с номером n, если в ней в блоке графики и описания проставленно что она при нажатии закрывает диалог и выполняет действие.
Заметка: если вы в диалоге пишете например в @dclick просто dialog d_123, то в блоке кнопок у вас поинтер, указывающий на предмет, в котором находился триггер, будет [], а поинтер на игрока, смотрящего диалог, будет src.

Еще добавлю, что в R и .56-.57 сферах есть такая очень удобная разновидность команды: ONBUTTON={n1 n2}, оно выполняет действие при нажатии кнопок с номерами в диапазоне от n1 до n2. В теле ONBUTTON в таком случае номер кнопки выводится через <argn>.

Еще заметка - ONBUTTON=0 это всегда, даже если у вас такои кнопки нету, то, что будет происходить при закрытии диалога правой клавишей.

Диалоги для примера:

1. Простая чековая книжка для 55i
Код
[ITEMDEF i_che_book]
DEFNAME=i_che_book
Name=Check Box
ID=4079
type=t_script

ON=@dclick
IF !(0<tag.uid>)
tag.uid=<src.uid>
ENDIF
IF (<tag.uid>==<src.uid>)
dialog d_chebook
ENDIF
name=Check Book[<uid.<tag.uid>.name>]
RETURN 1

ON=@create
tag.sum=0
color=55
attr=attr_newbie

[DIALOG d_chebook]
10, 10

resizepic 0 0 3500 300 180
text 60 20 64 0
text 35 45 55 1

button 215 85 037 037 1 0 1
button 240 85 038 038 1 0 2
text 105 85 0 2

text 60 135 0 3
text 160 135 238 4

[DIALOG d_chebook TEXT]
Pay book
Add/Receive money
1000 gold
Total amount
<eval <tag.sum>>

[DIALOG D_chebook BUTTON]

ONBUTTON=1
IF (<src.restest 1000 i_gold>)
src.consume 1000 i_gold
tag.sum=<tag.sum>+1000
ELSE
src.message You haven't so much money!
ENDIF

ONBUTTON=2
IF (<tag.sum> >= 1000)
tag.sum=<tag.sum>-1000
src.newitem=i_gold
new.bounce
ELSE
src.message Your account is too low!
ENDIF


2. Чековая книжка похитрее для R и .56-.57
Код
[ITEMDEF i_check_box]
DEFNAME=i_check_box
Name=Check Box
ID=4079
type=t_script

ON=@dclick
name=<tag.name>[<uid.0<tag.uid>.name>]
IF !(0<tag.uid>)
tag.uid=<src.uid>
ENDIF
IF (<tag.uid>==<src.uid>)
dialog d_chbook
ENDIF
RETURN 1

ON=@create
tag.sum=0
color=55
tag.name=Check Book
attr=attr_newbie

[DIALOG d_chbook]
10, 10
resizepic 0 0 3500 300 180
dtext 60 20 0 Чековая книжка
dtext 35 45 0  Снять/положить:

button 215 65 037 037 1 0 1
button 240 65 038 038 1 0 10001
dtext 105 65 0 1.000 gold

button 215 85 037 037 1 0 10
button 240 85 038 038 1 0 10010
dtext 105 85 0 10.000 gold

button 215 105 037 037 1 0 50
button 240 105 038 038 1 0 10050
dtext 105 105 0 50.000 gold

dtext 60 135 0 На счету:
dtext 160 135 64 <eval <tag.sum>>.000

[DIALOG d_chbook BUTTON]
ONBUTTON={1 100}
IF <src.restest <eval <argn>*1000> i_gold>
tag.sum=<tag.sum>+<eval <argn>>
src.consume <eval <argn>*1000> I_gold
RETURN 1
ELSE
src.sysmessage Need <eval <argn>*1000> gold
RETURN 1
ENDIF

ONBUTTON={10000 10100}
IF (<eval <argn>-10000> =< <tag.sum>)
tag.sum=<tag.sum>-<eval <argn>-10000>
src.newitem=i_gold
new.amount=<eval (<argn>-10000)*1000>
new.bounce
RETURN 1
ELSE
src.sysmessage You haven't so much money
RETURN 1
ENDIF


3. Переименовщик сумок:
Код
[ITEMDEF i_bag_renamer] 
id=0e73
Name=Bag renamer
type=t_normal
RESOURCES=i_enchant_weapon
value=100

CATEGORY=Other
SUBSECTION=Tools
DESCRIPTION=Bag Renamer

on=@create
color=0804

ON=@DCLICK
TARGET Target your bag to rename
return 1

ON=@TARGON_ITEM
IF (<SRC.TARG.baseid> != i_bag )
SRC.SYSMESSAGE Thats not a bag.
RETURN 1
ELSE
dialog d_bag_rename
ENDIF
return 1

[DIALOG d_bag_rename]
200,200
resizepic 0 0 3600 330 140

page 0
text 20 20 1152 0
gumppic 30 50 1143
textentry  40 52 250 20 32 0 1
button 120 90 249 248 1 0 1 //okay
button 210 90 243 241 1 0 2 //cancel

[DIALOG d_bag_rename text]
What would you like to name the bag?
<src.targ.name>

[DIALOG d_bag_rename button]
ONBUTTON=1
src.targ.name=<argtxt[0]>
src.sysmessage Bag renamed to: <argtxt[0]>
return 1

ONBUTTON=2
return 1



У Д А Ч И!


--------------------
Важна не реклама, а качество.
Качество - девиз хороших серверов.
Продуманность и готовность - девиз очень хороших серверов.
..::Lorien Role-Playing Shard(RunUO)::..
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Тема закрытаОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 28.3.2024, 21:21
Designed by Nickostyle