Как можно отлавливать события, что юнит получил/нанёс урон? Только без jass и хаков, но можно на lua (в ногу со временем)

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

local DamageTrigger = CreateTrigger()
for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
	TriggerRegisterPlayerUnitEvent(DamageTrigger, Player(i), EVENT_PLAYER_UNIT_DAMAGING) -- до вычета брони
	TriggerRegisterPlayerUnitEvent(DamageTrigger, Player(i), EVENT_PLAYER_UNIT_DAMAGED) -- после вычета брони
end
TriggerAddAction(DamageTrigger, function()
	local damage     = GetEventDamage() -- число урона
	local damageType = BlzGetEventDamageType() -- тип урона
	local target     = GetTriggerUnit() -- тот кто получил урон
	local caster     = GetEventDamageSource() -- тот кто нанёс урон
end)
`
ОЖИДАНИЕ РЕКЛАМЫ...
2
29
4 года назад
Отредактирован nazarpunk
2
local DamageTrigger = CreateTrigger()
for i = 0, bj_MAX_PLAYER_SLOTS - 1 do
	TriggerRegisterPlayerUnitEvent(DamageTrigger, Player(i), EVENT_PLAYER_UNIT_DAMAGING) -- до вычета брони
	TriggerRegisterPlayerUnitEvent(DamageTrigger, Player(i), EVENT_PLAYER_UNIT_DAMAGED) -- после вычета брони
end
TriggerAddAction(DamageTrigger, function()
	local damage     = GetEventDamage() -- число урона
	local damageType = BlzGetEventDamageType() -- тип урона
	local target     = GetTriggerUnit() -- тот кто получил урон
	local caster     = GetEventDamageSource() -- тот кто нанёс урон
end)
Принятый ответ
0
15
4 года назад
0
NazarPunk, ого, спасибо
0
28
4 года назад
0
NazarPunk, только лучше использовать 2 разных триггера, так как часть функций имеют эффект только до вычета брони.
0
29
4 года назад
0
только лучше использовать 2 разных триггера
а можно не плодить триггеры и функции
TriggerAddAction(DamageTrigger, function()
	local damage     = GetEventDamage() -- число урона
	local damageType = BlzGetEventDamageType() -- тип урона
	local target     = GetTriggerUnit() -- тот кто получил урон
	local caster     = GetEventDamageSource() -- тот кто нанёс урон
	
	if GetHandleId(GetTriggerEventId()) == GetHandleId(EVENT_PLAYER_UNIT_DAMAGING) then
		print 'до вычета брони'
	else
		print 'после вычета брони'
	end
end)
0
28
4 года назад
Отредактирован PT153
0
NazarPunk, с таким подходом можно все события в один триггер запихнуть, но зачем? Всяко проще сделать 2 файла под 2 разных триггера и в каждом файле отдельно работать. Ибо на каждое событие может быть своя логика, что включает в себя ветки if, циклы и вызовы, не вижу смысла городить всё это в одном месте.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.