Тема такая. Есть идея героя на основе www.smitefire.com/smite/god/bakasura-19
+ просто оставлю это здесь - wc3-maps.ru/load/modeli_dlja_warcraft_3/modeli_iz_dota_2/slark_f... - минимум переделки фейса протестить
Ключевые спеллы:
Думаю об оптимальной реализации хаванья и вырыгивания.
Первейшая идея такая - при касте спелла, которым он хавает крипов, хайдить и неуязвимить сожранного крипа, запоминать героя и сожранный юнит в локалку и запускать периодический таймер ну хотя бы в 0.5 сек. В таймере проверять наличие на герое некоей маркерной абилы, при ее наличии сбрасывать с него эту самую абилу и анхайдить-разнеуязвимить-вырыгивать крипа, делать дамаг за него, накладывать на ближайших врагов слоу. А при применении вырыгивающей способности просто давать ему эту маркерную абилу.
Второй вариант - создать глобальную переменную-массив группы на всех игроков, втч нейтральных, при касте на крипа спелла хавания так же хайдить его, неуязвимить и добавлять в эту группу. При применении вырыгивающей способности анхайдить, разнеуязвить, вырыгивать всех юнитов из группы.
Обе идеи довольно приемлемые, но кое-что смущает.
В первом случае таких таймеров теоретически могут быть сотни на ОДНОГО Бакасуру (а миррор матч теоретически возможен). И пусть там хватит периода даже больше 0.5 сек., все равно воздействие на производительность может оказаться достаточно значительным (или я ошибаюсь и 200 локальных таймеров с периодом 0.5-0.7 сек. не так уж страшны? Мне все-таки кажется, что не очень ошибаюсь).
Второй вариант кажется намного лучше и проще в реализации, но не нравится необходимость добавления глобальной переменной. Плюс небольшая неприятность - если у одного игрока будет два Бакасуры, то каждый будет вырыгивать крипов, съеденных обоими (хотя это, в принципе, очень-очень маленькая проблема и вероятность, но тем не менее).
Какой вариант считаете лучшим? Или есть собственные идеи?

Принятый ответ

глобальный массив не нужен. сохраняй группу в хэш-таблицу на хэндл героя, потом загружай ее когда надо. у каждого героя будет своя группа
вот пример, молот бурь съедает юнита а удар грома ставит всех юнитов обратно
Загруженные файлы
0
32
7 лет назад
0
Что мешает сделать кастом поедание?
Хештаблица в помощь, там довольно таки изи сделать - паузим, хайдим, делаем неуязвимым и отключаем пути, достаточно 1 группы юнитов на 1 героя, в группу добавляем сожанных а потом делаем с ними что нужно.
0
21
7 лет назад
0
Так вот как я через хэш обойдусь без группы-глобальной переменной? Можно пример?
Можно и с глобальной, конечно, но см. выше.
0
19
7 лет назад
0
Сделай периодик 0.01(который будет включать в себя ВСЕ тексты, чтобы не нагружать множеством периодиков для каждого), который будет рисовать текст, отображающий integer = количество юнитов в group, над головой героя. При поедании юнита, делай его неуязвимым, hide, двигай куда то в недосегаемое место на карте(не знаю, на всякий случай, я бы сделал так).
При использовании отрыгивания, настраиваешь все параметры исходя из integer(урон, например) и затем unhide, uninvul всех юнитов в группе + делаешь с ними всю грязь.
И мне кажется идею ты содрал не с этого Slark's bastard'a, а с васаби жирного, из league of legends, который хавает крипов и плюет ими, нанося урон и земдляя. Ну, в общем, так и сделаешь.
А если хочешь, чтобы он мог схавать таким образом героя, а ты имел вижен на нем, есть два варианта:
прозрачность = 100%; пауза/стан;
SetUnitX(udg_Hero,GetUnitX(udg_Eater))
SetUnitY(udg_Hero,GetUnitY(udg_Eater))
;
Магический огонь + привязать камеру + классический hide сожранного героя.
А вообще, рекомендовал бы всегда использовать станы вместо пауз и прозрачность 100% вместо hide, потому что это решает нерешаемые проблемы паузы и hide, при этом оставляя лишь небольшие минусы, которые можно исправить небольшими костылями.
2
20
7 лет назад
2
глобальный массив не нужен. сохраняй группу в хэш-таблицу на хэндл героя, потом загружай ее когда надо. у каждого героя будет своя группа
вот пример, молот бурь съедает юнита а удар грома ставит всех юнитов обратно
Загруженные файлы
Принятый ответ
Чтобы оставить комментарий, пожалуйста, войдите на сайт.