Ресивер RD(диалог найма существ)
!!RD:XXXX;
- позволяет настраивать игровой диалог найма существ самостоятельно.
Помимо команд работы с диалогом найма, в ERA были реализованы специальные события по обслуживанию этого диалога:
- OnOpenRecruitDlg (показать)
Всякий раз, когда создаётся диалог найма, запускается событие
OnOpenRecruitDlg со следующими параметрами:
x1 - выбранный/активный слот монстра (0..3)
х2 - флаги/опции, представляющие собой комбинацию битов, управляющих поведением диалога:
= 1 – CLOSE_ON_BUY
Диалог закроется, когда будет нажата кнопка покупки.
Обычно используется в городах, когда есть только один слот рекрута.
Снимите этот флаг, чтобы принудительно закрывать диалог вручную.
= 2 – AUTO_UPDATE_ADVMAP
Экран карты приключений необходимо обновлять после найма любого рекрута (даже когда отображается диалоговое окно).
Этот флаг используется при найме рекрутов во внешнем жилище существ, что позволяет игроку видеть кол-во новых существ в окне статуса.
x3 - включить диалог (1) или не показывать его (0).
- OnCloseRecruitDlg (показать)
Когда вы закрываете диалог найма, запускается соответствующее событие OnCloseRecruitDlg (без параметров)
- OnRecruitDlgMouseClick (показать)
При клике мышью в диалоге найма запускается OnRecruitDlgMouseClick (без параметров)
- OnRecruitDlgRecalc (показать)
При изменении положения ползунка внутри диалога или смене активного слота выполняется пересчёт кол-ва рекрутов и общей стоимости в событии
OnRecruitDlgRecalc.
Все параметры могут быть изменены:
x1 - стоимость существа в золоте
x2 - идентификатор ресурса (0..5 или -1)
х3 - кол-во ресурса
- OnRecruitDlgAction (показать)
При найме нескольких разных существ запускается
OnRecruitDlgAction
x1 - кол-во рекрутов (только чтение)
Наглядный пример создания диалога найма см. ниже
C#1/$2[/$3/$4/#5]
Настроить диалог найма.
#1 - слот диалога (0..3)
$2 - тип существа для найма в указанном слоте (-1 = слот пуст)
$3 - текущее кол-во существ для найма
$4 - индекс источника/хранилища, где имеется доступное кол-во существ
#5 - модификатор (0 = использовать оригинальное кол-во существ)
Комментарии (показать)
- Если #5=0, то это оригинальное число нанимаемых монстров, которое запоминается сразу после события OnOpenRecruitDlg (можно только получить). Кол-во существ, как правило, напрямую связано с каким-либо источником, например, c жилищем в городе. Таким образом, устанавливая это значение на этапе настройки, вы меняете реальное кол-во существ.
- Для существующих городов на карте можно использовать следующую формулу по источнику:
[Источник] = [Идентификатор города (см. CA:U)] × 14 + [уровень жилища существ в городе (0..6)] + [7 (только для улучшенных)].
К примеру, источник 2го города на карте → 3-е улучш.жилище: 1 * 14 + 3 + 7 = 24.
- Если диалог вызывается со специальными внешними источниками (определил игрок), они будут иметь следующие индексы: 9000, 9001, 9002, 9003. Например, модмейкер реализовал своё жилище в городе с некием хранилищем, где задано кол-во существ для найма. Скриптеры смогут видеть такой индекс источника как 9000.
- Пользовательский источник (индекс ≥ 10000). Реализация по скрипту игрока. Для такого вида источника выделяется уникальный блок памяти. Требует установки начального кол-ва рекрутов в OnOpenRecruitDlg, с последующим получением окончательного (оставшегося) кол-ва в OnCloseRecruitDlg.
- Один и тот же источник может быть назначен любому числу слотов диалога. Все эти слоты будут отображать одинаковое кол-во существ и обновляться одновременно. Это полезно для реализации альтернативных существ. Слоты могут иметь разные типы существ (и стоимость), но общее кол-во новобранцев распределяется между всеми слотами.
- Индекс источника изменяется до применения нового кол-ва монстров. Так !!RD:C0/13/100/20000 изменит источник сначала до 20000 (пользовательский), а затем установит кол-во монстров как 100 архангелов, не меняя первоначальный прирост жилища/объекта/и т.д.
- Если для слотов 0 и 3, к примеру, установить определённых существ, а для слотов 1 и 2 существ не определять (тип = -1), то произойдёт сдвиг слотов так, что игрок увидит только два первых слота с существами.
Диалоги без настроенных слотов ($2≠-1) не будут показаны.
Пример:
F#/$
Перевести реальный номер слота в логический (используется с командой C)
# - реальный (видимый) слот (0..3)
$ - логический слот (0..3, -1 = пустой)
Комментарии (показать)
Команда используется вместе с обработкой мыши в диалоге найма. Номера видимых слотов последовательно увеличиваются и их надо преобразовавать в номера логических слотов.
Пример:
Диалог с настроенными слотами: монстр А слот пуст слот пуст монстр Б,
- отображается в игре так: монстр А монстр Б. Здесь "монстр Б" имеет реальный номер слота 1, а логический - 3.
I?$1/?$2/?$3/?$4
Получить информацию по текущему диалогу найма.
$1 - уникальный номер диалога. Используется для различения вложенных диалогов.
$2 - идентификатор города (см. CA:U), для которого открывается диалог (-1 = нет/неизвестно).
$3 - идентификатор городского жилища (0..6 - обычное, 7..13 - улучш.; -1 = нет/неизвестно)
Здания Орд (+ X прирост) рассматриваются как жилища, на которые они влияют.
$4 - номер выбранного логического слота.
Комментарий (показать)
Номера диалогов уникальны только среди открытых диалогов найма в текущий момент.
После закрытия всей цепочки диалогов найма рекрутов номера диалогов возвращаются в резерв и могут быть назначены новым диалогам (эдакая многоразовость).
M#/$
Доступ к ассоциативной памяти текущего диалога.
# - либо целое число, либо уникальная строка. То же, что и SN:W
$ - установить/получить значение переменной
Команда обеспечивает полнофункциональный эквивалент SN:W при работе с памятью, выделенной для каждого созданного диалога найма.
Память освобождается после OnCloseRecruitDlg для каждого диалога.
Пример:
O#1/#2/#3/#4[/#5]
Открыть новый диалог найма (предыдущие диалоги останутся в фоновом режиме).
#1 - идентификатор города (см. CA:U; -1 = пропустить). Город будет использоваться как источник слотов.
#2 - идентификатор городского жилища (0..13; -1 = пропустить). Жилище будет использоваться как источник слотов.
#3 - куда помещать рекрутов при найме (определяется сценарием Lua/ERM и обрабатыватся вручную):
= 0 – в гарнизон города
= 1 – в армию героя
= 2 – своя реализация
#4 - идентификатор цели (герой, город или спец. значение для сценария Lua/ERM)
#5 - комбинация флагов CLOSE_ON_BUY и AUTO_UPDATE_ADVMAP (см. OnOpenRecruitDlg)
Не устанавливайте этот параметр, если используете собственные/стандартные настройки.
S#
Сдвиг слотов на # позиций.
В диалоге найма можно сдвигать все слоты на указанное число позиций вправо (# > 0) или влево (# < 0).
Если слот выходит за пределы логических значений (0..3), он исчезает.
Сдвиг выполняется при сохранении всех настроек (тип, кол-во, источник)
Примеры (показать)
Пример 1. Имеем 0..1 слоты с обычными и улучшенными существами (источник не важен):
монстр А монстр Б слот пуст слот пуст
Необходимо подготовить два пользовательских слота с Ангелами/Архангелами в них.
Получаем следующее:
2 ангела 2 архангела монстр А монстр Б.
Пример 2. Удалить 1-й слот с улучшенными монстрами и оставить только неулучшенных.
Демонстрационный скрипт применения !!RD от Berserker
'а (показать)
В Цитадели можно нанимать троллей вместо орков в соотношении 3:10 (1 тролль = 3.333 орка). К примеру, 8 орков можно нанять как 2 тролля + 1 орк или 1 тролль + 4 орка. Т.е. найм идёт по принципу - либо малое число одних, либо большое других. (
см. скриншот)
Все значения обновляются в реальном времени.