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

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

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

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

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