Вкратце: есть тригер, который после получения урона сокровищницей должен выдавать 1 золото, если его атакует сатир, то должно выдаваться 3. Проблема в том, что на всем юнитах золото выдается после получения сокровищницей урона (как и должно), но если её атакует сатир, то после начала анимации игроку уже выдается 3 золота, из-за чего можно отменять атаку, чтобы абузить золото.
`
ОЖИДАНИЕ РЕКЛАМЫ...
32
Странная реализация, потом поставил бы хоть проверку на кол-во урона, то там может прилетать 0 урона, помимо основной атаки.
По хорошему бы нормальный детект урона задействовать.
5
quq_CCCP:
Странная реализация, потом поставил бы хоть проверку на кол-во урона, то там может прилетать 0 урона, помимо основной атаки.
По хорошему бы нормальный детект урона задействовать.
А как сделать проверку на урон? Я нашел только 2 ивента похожих на то, что мне могло бы подойти: Unit — specific unit event: is attacked; Unit — specific unit event: takes damage. Мне казалось, что второй ивент должен тригериться только после получения какого-либо количества урона.
32
Capitan Alex, ну все верно, EVENT_UNIT_DAMAGED - это юнит получает урон, причем любой, даже нулевой, а всякие абилки, дебаффы и тому подобное постоянно наносят 0 урона, ты не замечал что когда ты кастанул спелл, а он еще не долетел до нейтралов они уже бегут к тебе - при касте ты наносишь 0.00 ед. урона. Проверку добавь GetEventDamage() > 5.00 или сколько там примерно снимают хп с 1 удара твои юниты.
на версии 1.26 - особо проверить тип урона нечем, есть три функции реакции на событие - Юнит получает урон, это GetEvenDamageSource() - источник урона, GetEventDamage() - получаемый урон с учетом всех резистов, ну т.е сколько в итоге хп отнимет полученный урон, на момент срабатывания события хп еще не отнимается и юнит жив, если урон смертелен. GetTriggerUnit() - тот кто получил урон. И все, и приходится пользвоатся обходными путями, к примеру мемхаком ссылка
Ну это тема сложная для новичков.
9
Мне казалось, что второй ивент должен тригериться только после получения какого-либо количества урона.
Технически, он срабатывает до получения урона.
quq_CCCP:
то там может прилетать 0 урона, помимо основной атаки.
А банальное GetEventDamage()>0 не сработает?
32
map_maiker, ну а я про что написал, и так на всякий пожарный, ставишь порог урона, который нужно нанести для получения золота, а то мало ли еще какая хрень там урон наносит?
28
Как вообще такая проблема могла возникнуть? Сокровище же не получает урон если отменять атаку, соответственно и событие не должно срабатывать

Скинь пожалуйста карту с подобной проблемой, у меня не получается её воссоздать
20
rsfghd:
Как вообще такая проблема могла возникнуть? Сокровище же не получает урон если отменять атаку, соответственно и событие не должно срабатывать
если есть триг, который действует от события "юнит начал атаковать" - событие действует во время замаха юнита и ДО получения урона. То есть, нажимая кнопку Стоп, можно спамить событие замаха
9
ssbbssc:
rsfghd:
Как вообще такая проблема могла возникнуть? Сокровище же не получает урон если отменять атаку, соответственно и событие не должно срабатывать
если есть триг, который действует от события "юнит начал атаковать" - событие действует во время замаха юнита и ДО получения урона. То есть, нажимая кнопку Стоп, можно спамить событие замаха
Но там же "получает урон", а не "атакован"...
28
map_maiker, именно)
ssbbssc, думаю мы все бы учли этот факт и уведомили автора об неправильном событии, но у него всё норм)
21
map_maiker, может быть, у вас есть другой триггер, который регистрирует событие EVENT_PLAYER_UNIT_ATTACKED и/или EVENT_UNIT_ATTACKED, а в действии наносит урон от лица атаковавшего.

Также, вполне может быть, что у сатира есть некое подобие жара преисподней, которая наносит урон ещё до атаки.
9
map_maiker, может быть, у вас есть другой триггер, который регистрирует событие EVENT_PLAYER_UNIT_ATTACKED и/или EVENT_UNIT_ATTACKED, а в действии наносит урон от лица атаковавшего.
Да зачем другое событие? То, что "получает урон" срабатывает чуть раньше урона позволяет при желании заблокировать оный урон или ещё что с ним сделать.
Блокируется выдачей неуязвимости на .0 секунд или абилки на блок урона (не проверял, но работать чуть получше должно - менее заметно при большой плотности наносящих урон).
Собственно, то, что времени .0 (практически мгновенно) хватает чтобы заблокировать урон намекает (слегка) на то, что событие срабатывает мгновенно. Только чуть раньше.

Также, вполне может быть, что у сатира есть некое подобие жара преисподней, которая наносит урон ещё до атаки.
Ну или ещё какой дебафф, вроде промахов.
28
map_maiker
То, что "получает урон" срабатывает чуть раньше урона
?
Если ты про 1.26, то тут событие срабатывает только после получения урона. На рефе есть _DAMAGING, вот оно до урона срабатывает
32
rsfghd, не рассказывай ерунду, оба до урона срабатывают, одно общее на всех на карте, второе на конкретного юнита, и если юзать событие на юнита то уже не успеешь заблочить урон (хотя как заблочить, один хер кроме мемхака ниче не позволяет так делать). Просто близарды были лентяи и сделали тяп, ляп, лиж бы отвязатся.
9
Если ты про 1.26, то тут событие срабатывает только после получения урона. На рефе есть _DAMAGING, вот оно до урона срабатывает
Это довольно забавно слышать, я же описал в том же сообщении идею блока урона.
quq_CCCP:
(хотя как заблочить, один хер кроме мемхака ниче не позволяет так делать)
Думаю, тут имеется в виду какой-нибудь способ в духе BlockTakingDamage() в триггере с получением урона?

rsfghd:
map_maiker, сорян)
Бывает.
20
я описал вообще как могла ситуация возникнуть
2
То, что тебе нужно, это DDS - Damage Detection System. Я использую эту либу: github.com/Igneaalis/MIX/blob/master/source/libraries/UnitRecycl... там ещё есть unit recycler для лучшей производительности. Посмотри внимательнее на функцию ShowDamage и UnitRecyclerInit, она показывает урон по юниту, там ты найдёшь все нужные переменные.
Загруженные файлы
26
Capitan Alex:
то после начала анимации игроку уже выдается 3 золота
Может у тебя просто анимация замаха атаки выставлена не так как нужно? вот и получается что сатир замахивается - а урон уже проходит. Не?
А вообще я бы тоже рассматривал возможность ситуации с уроном от ивента "замаха". Чекни входящий урон в этом триггере, выведи его на экран, может выловить получится.
5
Насколько я сейчас понял: проблема заключается в том, что выходя из перманентного Инвиза Warcraft III считает, что юнит уже наносит нулевой урон, из-за чего добавляется золото в триггере. Спасибо за ваши советы, простите за иннактив, сейчас разберусь и выберу лучший ответ.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.