Опции DL:   A B C D E F G H I J K L M N O P Q R S T U V W X Y Z

Ресивер DL(нестандартные диалоги)


!!DL#:XXXX; работа с диалогом # (#>0)
На данный момент (TE) команда "сырая", полный функционал и описание отсутствуют.

Дополнительно(скрыть)
При использовании пользовательских диалогов часто возникают задачи/желания, решение которых штатными возможностями ЕРМ не осуществимо. Для таких целей опытными скриптерами были написаны особые функции влияния на память игры:

См. также: триггер !?DL, Формат шаблона, Элементы шаблона.


A#1/#2/#3/1
Изменить параметр элемента диалога
        #1 – номер элемента
        #2 – параметр:

Подтипы любого элемента управления (показать)
52 – установить положение по X (без перерисовки) (число/числовая переменная)
53 – установить положение по Y (без перерисовки) (число/числовая переменная)
61 – установить ширину (без перерисовки) (число/числовая переменная)

Подтипы def (показать)
9 – установить имя файла (текстовая переменная)
4 – установить кадр (число/числовая переменная)
12 – установить группу (число/числовая переменная)
8 – установить CloseDialog ?
10 – установить палитру (устройства) ?
13 – установить используемый цвет игрока

Подтипы кнопок (показать)
9 – установить имя файла (текстовая переменная)
10 – установить палитру (устройства) ?
13 – установить используемый цвет игрока

Подтипы pcx (показать)
11 – установить имя файла (текстовая переменная)
10 – установить палитру (устройства) ?
13 – установить используемый цвет игрока

Подтипы прокрутки (показать)
49 – установить позицию (число/числовая переменная)
50 – установить кол-во позиций (число/числовая переменная)

Подтипы поля ввода (показать)
51 – установить максимальную длину (число/числовая переменная)
3 – установить текст (текстовая переменная)
7 – получить текст ?

        #3 – значение зависит от #2
Последний элемент команды [1] – обновление (фантомный параметр, который лучше не игнорировать)

Замечание: команда может быть вызвана в триггере !?DL, а также для редактирования диалога "на лету".
Устанавливает флаг 1 на Истину после своего выполнения.


C#/$2/$3
Установить особое callback-действие ИЛИ изменить курсор мыши.

        # - тип действия:
	= 1 - закрыть диалог и возвратить данный код в качестве результата
	= (1000 + #) - установить курсор # (см. таблицу курсоров)
Комментарий (показать)
Для данной команды вам не нужно устанавливать номер диалога в части триггера!?DL. Она сработает для активного диалога и на любой объект.
Пример:

Callback-действие (или функция в программировании) – это действие, которое будет исполнено (вызвано, если речь идёт о функции) по выходу из текущего блока кода (обычно функции).
На примерах Славы видно, что при каждом событии диалога (таким, как движение мышью) вызывается определённая ЕRМ-функция, которая и управляет всей остальной логикой. В функции мы выбираем, на какие действия как реагировать, а что игнорировать. Команда DL:C1 была бы обычной функцией, если бы закрывала диалог и тут же выходила из текущего блока кода. Но выполнения кода идёт вплоть до конца триггера.


E#1/#2
Включить элемент диалога
        #1 – номер элемента
        #2 – включить (1) или выключить (0)
Комментарий: при выключении кнопки на элементе будет отображаться следующий кадр в def-источнике.
Устанавливает флаг 1 на Истину после своего выполнения


H#1/#2
Настроить подсказку для элемента диалога
        #1 – номер предмета диалога
        #2 – подсказка (появится при наведении мышью на элемент)
Комментарии (показать)

Параметр #2 может быть глобальной или статической z-переменной.
Команда устанавливает флаг 1 на Ложь после своего выполнения.
Замечание: если устанавливать подсказку для элемента, которому уже задана подсказка в текстовом шаблоне диалога - последует вылет игры. Но если в шаблоне подсказка для элемента НЕ задана (пустая строка) - она нормально устанавливается через !!DL:H… .


Nz#
N^текст^

Анализ шаблона диалога
        # – имя файла шаблона (может быть текстом или любой z-переменной)
Комментарии (показать)

Текст анализируется перед использованием.
Эта команда загружает файл шаблона (если ещё не загружен), ищет диалог (используя Id) в файле и анализирует его.
Она не показывает диалог.
Главная цель этого дать нам шанс настроить загруженный диалог перед его показом.
Результат:
Флаг 1 = 1, если успешно
Флаг 1 = 0, если случились ошибки (не найден шаблон диалога, к примеру)
Формат шаблона описан ниже.


P$
Передать действие функции $
Параметры функции:

        x1 – действие:
	0 – мышь двигается к другому квадрату
	12 – нажата левая кнопка
	13 – отпущена левая кнопка
	14 – нажата правая кнопка
        x2 – X-координата кликнутого квадрата
        x3 – Y-координата кликнутого квадрата
        x4 – Уровень кликнутого квадрата
Пример (показать)


S$
Показать диалог
        $ – получаемый объект (активный объект при закрытии)
Устанавливает флаг 1 на Ложь после своего выполнения
Комментарий (показать)

Показывает диалог (с определённым номером), и ждёт его закрытия. Т.е. дальнейшие команды будут выполнены не сразу, а только после закрытия диалога. Вы можете не использовать параметр вообще, тогда получаемый предмет просто проигнорируется. Вы можете показать один диалог "из другого" и последовательность может быть бесконечной, но вы можете иметь лишь ОДИН диалог одного типа на экране. Т.е. вы не можете вызвать диалог X из диалога X.


Формат шаблонов.

Это стандартный файл текстовой таблицы Героев 3.
Первые две строки пропускаются (могут быть заполнены текстом или оставлены пустыми).
Самый левый столбик также игнорируется (может быть заполнен текстом или оставлен пустым).

В шаблоне должно быть как минимум 14 колонок. Последняя графа в характеристике пункта (сразу после "флаг") это всегда текст подсказки – если текстовый пункт для подсказки присутствует. Подсказка требует для себя места даже там, где её не надо. Если графа пуста, то и подсказки как бы нет. Если же шаблон "обрезан", например, до 13 колонок, то для пункта "Text" (как самого "длинного") вместо пустой и "невидимой" подсказки выведится надпись …not found the text resourse….

Диалог начинается со следующих строк (в порядке столбца):

0: пропускается (можно использовать для внутренних заметок)
1: знак '#' - означает начало нового шаблона диалога
2: xxx номер - уникальный Id диалога
3: номер x позиции - X позиция от верхнего левого угла (-1 = центр экрана)
4: номер y позиции - Y позиция от верхнего левого угла (-1 = центр экрана)
5: dx номер - горизонтальный размер диалога
6: dy номер - вертикальный размер диалога
7: xxx номер - кол-во пунктов диалога (вы можете использовать меньше, но не больше, чем выбрали)
8: xxx номер - установить цвет рамки диалога под цвет номера игрока (-1 = для текущего игрока)
9: текст - имя PCX файла, который будет фоном. Примечание (скрыть)
Если не указывать имя PCX файла (оставить поле пустым), то фон будет создан автоматически под указанные размеры диалога (стандартный фон игровых диалогов).

10: XXX номер - Id текстового пункта, который используется как поле с описанием 'hint' (для игнорирования укажите пустое значение поля).

Следующие строки анализируются как пункты диалога до тех пор, пока не будет знака '#' в первом столбце. Это может быть просто пустая строка с '#', или линия с началом нового диалога.

Самый главный элемент - первый символ в первом столбце.
Поддерживаемые на данный момент элементы:

'P' - PCX рисунок (показать)

0: пропускается
1: 'P'…
2: xxx номер - уникальный Id пункта
3: номер x позиции - X позиция в диалоге от верхнего левого угла
4: номер y позиции - Y позиция в диалоге от верхнего левого угла
5: dx номер - горизонтальный размер пункта
6: dy номер - вертикальный размер пункта
7: текст - имя PCX файла
8: флаги - для 'P'-элемента значение равно 2048
9: 'hint' - выводимый текст в диалоговом поле описания при наведении курсора на данный элемент диалога

'D' - кадр DEF рисунка (показать)

0: пропускается
1: 'D'…
2: xxx номер - уникальный Id пункта
3: номер x позиции - X позиция в диалоге от верхнего левого угла
4: номер y позиции - Y позиция в диалоге от верхнего левого угла
5: dx номер - горизонтальный размер пункта
6: dy номер - вертикальный размер пункта
7: текст - имя DEF файла
8: кадр - изображения внутри DEF'а для вывода
9: флаги - для 'D'-элемента значение равно 16
10: 'hint' - выводимый текст в диалоговом поле описания при наведении курсора на данный элемент диалога

'A' - анимированный DEF рисунок
 Ещё не поддерживается

'B' - кнопка (особый DEF) (показать)

0: пропускается
1: 'B'…
2: xxx номер - уникальный Id пункта
3: номер x позиции - X позиция в диалоге от верхнего левого угла
4: номер y позиции - Y позиция в диалоге от верхнего левого угла
5: dx номер - горизонтальный размер пункта
6: dy номер - вертикальный размер пункта
7: текст - имя DEF файла
8: флаги - для 'B'-элемента значение соответствует игровому коду горячей клавиши (показать)


9: 'hint' - выводимый текст в диалоговом поле описания при наведении курсора на данный элемент диалога

Замечание: в DEF'е кнопки должно быть как минимум 2 кадра. При нажатии на кнопку показывается второй кадр. Также при отключении кнопки (переводе элемента диалога в режим выключен) показывается второй кадр. Например, если вы сделаете кнопкой DEF с заклинаниями, то будет изображено заклинания "Вызов лодки", а при нажатии или выключении вы увидите следующее заклинание - "Затопить лодку".
При нажатии на кнопку (не удерживая) происходит выход из диалога (выход в предыдущий диалог, если диалог был открыт из другого диалога, и, конечно, кнопка должна быть включена).

Совет от Master'а: кнопкам всегда лучше давать отрицательные идентификаторы (Id = -32768…-1). Это гарантированно исключит совпадения и конфликты с прочими элементами геройских окон (других кнопок, надписей, картинок, DEF'ов и пр.), многие из которых незадокументированы в ERM-справке. Отрицательные Id работают совершенно нормально, но в геройском коде никогда не встречаются.

'T' - текст (показать)

0: пропускается
1: 'T'…
2: xxx номер - уникальный Id пункта
3: номер x позиции - X позиция в диалоге от верхнего левого угла
4: номер y позиции - Y позиция в диалоге от верхнего левого угла
5: dx номер - горизонтальный размер пункта
6: dy номер - вертикальный размер пункта
7: текст - текст (может быть пустым и заполняться позже)
8: шрифт - имя файла шрифта
9: цвет - цвет текста (см. ниже)
10: bkcol - цвета фона (показать)

0 -1 -4 -13 -18 4 33 -16 -14 9 35 6 2 24 22 3 -5 -11 23 8 12 11 16 25 10 -6 1 -12 -10 5 7 13
-
 

11: выравнивание - выравнивание текста
12: флаги - для 'T'-элемента значение равно 8
13: 'hint' - выводимый текст в диалоговом поле описания при наведении курсора на данный элемент диалога

'S' - текст с вертикальной прокруткой (показать)

0: пропускается
1: 'S'…
2: xxx номер - уникальный Id пункта
3: номер x позиции - X позиция в диалоге от верхнего левого угла
4: номер y позиции - Y позиция в диалоге от верхнего левого угла
5: dx номер - горизонтальный размер пункта
6: dy номер - вертикальный размер пункта
7: текст - текст (может быть пустым и заполняться позже)
8: шрифт - имя файла шрифта
9: цвет - цвет текста (см. ниже)
10: цвет2 - цвет полосы прокрутки (0 = не окрашивать; любое другое значение = окрасить синим)
11: 'hint' - выводимый текст в диалоговом поле описания при наведении курсора на данный элемент диалога (работает только, если элемент прокрутки имеет id=-1)

'E' - отредактированный текст (показать)

0: пропускается
1: 'E'…
2: xxx номер - уникальный Id пункта
3: номер x позиции - X позиция в диалоге от верхнего левого угла
4: номер y позиции - Y позиция в диалоге от верхнего левого угла
5: dx номер - горизонтальный размер пункта
6: dy номер - вертикальный размер пункта
7: текст - текст (может быть пустым и заполняться позже)
8: шрифт - имя файла шрифта
9: 'hint' - выводимый текст в диалоговом поле описания при наведении курсора на данный элемент диалога

'V' - SMK или BIK видео (показать)

0: пропускается
1: 'V'…
2: xxx номер - уникальный Id пункта
3: номер x позиции - X позиция в диалоге от верхнего левого угла
4: номер y позиции - Y позиция в диалоге от верхнего левого угла
5: номер видео - внутренний номер игрового видео
Видео выводится поверх любых других пунктов диалога и не имеет поддержки 'hint' описания. Это значит, что вам нужно следить, чтобы видео не вылазило за границы окна диалога, чтобы не получить проблем с перерисовкой.
Также вы можете использовать только одно видео за диалог.

Примечания:
Вы можете хранить больше одного диалога в файле шаблона.
Вы не должны использовать одинаковые Id диалогов в различных файлах шаблонов. Каждый диалог должен иметь свой унильный Id. Это также значит, что некоторые Id будут заняты под WoG-диалоги.
Пункт с номером 30721 - пункт отмены по умолчанию. Так, если игрок нажимает кнопку ESC когда выведен диалог - диалог закроется.

Цвета текста (показать)

  0 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
Цвет текста (для элементов 'T' и 'S') ещё цвета…










Белый: 17, 18, 30
Светло-жёлтый: 19, 21, 22
Жёлтый: 20, 29
Светло-зелёный: -6
Зелёный: -10, -4, 25
Голубой: -8, 26
Синий: 24
Фиолетовый: 28
Красный: 27
Тёмно-красный: -2
Чёрный: -9, -7, -5, -3, -1, 23