Нужно определить юнит-алтарь, который в данный момент воскрешает героя?
Нужно решить для ситуации множества алтарей и возможности воскрешения нескольких героев с одинаковым типом ид.
Думал можно отловить ордер - но ордера воскрешения вообще нет.
Как и не обнаружил нативной функции, что вернула бы алтарь - формально герой воскрешает сам себя, даже до завершения воскрешения остаётся лежать где помер.
Можно, конечно, перебрать все алтари игрока - но как определить нужный, который воскрешает конкретного героя в конкретном месте?
Нужно решить для ситуации множества алтарей и возможности воскрешения нескольких героев с одинаковым типом ид.
Думал можно отловить ордер - но ордера воскрешения вообще нет.
Как и не обнаружил нативной функции, что вернула бы алтарь - формально герой воскрешает сам себя, даже до завершения воскрешения остаётся лежать где помер.
Можно, конечно, перебрать все алтари игрока - но как определить нужный, который воскрешает конкретного героя в конкретном месте?
По сути аналогичный вопрос про строительство - как определить рабочего-строителя, что строит здание?
Как находясь внутри здания (как у орков) и вне здания (как у альянса)? У ночных эльфов ещё есть выращивание древ с потерей рабочего (но если отменить до завершения - то рабочий возвращается - значит, до этого момента он ещё существует, как его найти)
Как находясь внутри здания (как у орков) и вне здания (как у альянса)? У ночных эльфов ещё есть выращивание древ с потерей рабочего (но если отменить до завершения - то рабочий возвращается - значит, до этого момента он ещё существует, как его найти)
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
Можно определить триггерами, только кто начал строить или закончил, если не ошибаюсь.
Или же делать свою триггерное строительство.
Отредактирован Darklight
1. Делать триггерное воскрешение - над этим можно подумать, хотя чувствую, что очень геморно это и цель не оправдает средства - это надо делать свою абилку алтаря для каждого героя (добавляя её всем алтарям по событию "EVENT_PLAYER_HERO_REVIVABLE" и убирая по событию "EVENT_PLAYER_HERO_REVIVE_START" и возвращать по событию "EVENT_PLAYER_HERO_REVIVE_CANCEL" - но тогда придётся ещё как-то эмулировать сам процесс воскрешения - начиная от правильного определения ресурсов и времени (причём в подсказке текстом это заранее не показать) и до полосы прогресса (стандартный не сделать) и обработки отмены.
Хотя нет, события "EVENT_PLAYER_HERO_REVIVE_*" не подойдут – если эмулировать сам процесс воскрешения (их не будет), да и обрабатывать нужно именно события самой аблики (ведь именно событие абилки будет на алтаре).
Выполнить процесс воскрешение на подставном алтаре видимо тоже не получится – такой команды (и нативной функции), судя по всему, просто нет. А функция ReviveHero воскрешает немедленно!
Найти алтарь, выполняющий воскрешение, наверное, не большая проблема - достаточно пройтись по всем живым алтарям, программно добавить им дамми-абилку и попробовать дать ей команду - думаю, что занятый алтарь не выполнит команду - это можно отследить (но не факт, что не выполнит); останется отфильтровать только алтари, занятые процессом найма (но это как раз отслеживается по команде найма).
Но, думаю это тоже решаемо - алтари же не начинают этот процесс одновременно - всё-равно сначала начнёт один, затем начнёт второй и т.д.
Поэтому надо отслеживать, указанным мною способом, алтарь, который только что начал воскрешение, и помечать его занятым, при следующей "команде" на воскрешение исключать его до завершения воскрешения.
Но это уже по событию "EVENT_PLAYER_HERO_REVIVE_START" определить можно (отмену тоже надо отслеживать) - собственно с него и надо начинать - сразу получаем героя, ищем занятный (но ещё не обработанный/связанный с другим героем - воскрешаемым или нанимаемым) алтарь через дамми-абилку, вуа-ля - нашли нужный алтарь - связали его с нужным героем. По событиям "EVENT_PLAYER_HERO_REVIVE_CANCEL" и "EVENT_PLAYER_HERO_REVIVE_FINISH" освобождаем связь алтаря и героя (находя её по герою).
Осталось проверить сработает ли приказ дамми-абилки на занятом воскрешением алтаре - какую лучше абилку для этого взять, посоветуете?
Отредактирован Darklight
Вот пришёл в голову более простой вариант (для интерактивной работы, с программной всё прозрачнее и там таких проблем нет):
Второй вариант. Определять текущий алтарь через выбранный пользователем (по событию "EVENT_PLAYER_HERO_REVIVE_START")
Сделал на одном триггере (по событию "EVENT_PLAYER_HERO_REVIVE_START") с небольшим ожиданием обработки команды