Обходя ограничения движка. Часть 1 — Проблема целеуказания
В редакторе сценариев есть фундаментальное ограничение, которое почти незаметно, пока вы не пытаетесь сделать что-то нетривиальное.
Триггерные команды позволяют выбирать объект двумя способами: через объектный выбор или через фильтрацию. Фактически, это означает, что вы можете работать либо с конкретно заданным объектом, либо с группой объектов по условиям.
Проблемы возникают, когда объект динамический — то есть его положение меняется в течение времени — и не стартовый — то есть не был установлен в редакторе карт изначально.
Простой пример: вы хотите, чтобы конкретный мечник автоматически восстанавливал здоровье, если оно падает ниже 10. Казалось бы, задача тривиальная — изменить атрибут HP при выполнении условия. Но вы не можете указать ID конкретного динамического юнита напрямую.
Вместо этого редактор вам "предлагает" изменить здоровье:
– всем мечникам;
– юнитам в заранее заданной области;
– стартовому объекту;
Но не одному произвольному юниту, который, например, был создан в казармах и свободно перемещается по карте.
Это и есть ограничение движка: отсутствие прямой работы с ID динамических объектов в параметрах триггеров. При этом иронично, что внутри кода игры в параметр триггерной команды передается именно ID объекта.
В результате любые более-менее сложные механики — предмет-специфические эффекты, уникальные баффы, кастомные статусы — практически невозможно реализовать на триггерах: в лучшем случае они потребуют громоздких костылей, и их стабильная работа не гарантирована.
Я начал искать способ обойти это ограничение на уровне движка. В следующем посте расскажу об идее, которая оказалась рабочей.
In bundle
the third prophecy