Не особо понимаю, как работает мемхак, но возникла необходимость при срабатывании триггера на урон по юниту уменьшить сам урон вдвое, и я попробовал следующее:
local integer EventData = GetDamageEventESPData()
local integer Data = RMem(EventData + $00)
local real damage = mI2R( RMem( Data + 0x10 ) )
local integer Data = RMem(EventData + $00)
local real damage = mI2R( RMem( Data + 0x10 ) )
call WMem( Data + 0x10, mR2I( damage/2) )
Если вместо второго аргумента WMem указывал 0, урон не проходил, если что-то кроме 0, урон каким был, таким и остался. Можно ли подобным образом все же поменять урон, и если можно, что я сделал не так?
Принятый ответ
WAGARAX, ты не тот детект взял для изменения урона юзается другой детект, он своего рода глобальный евент на урон всем юнитам на карте и работает до того как сработают триггеры на урон, там можно менять кол-во урона.
`
ОЖИДАНИЕ РЕКЛАМЫ...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.
local unit unt = GetTriggerUnit()
local integer EventData = GetDamageEventESPData()
local integer Data = RMem(EventData + $00)
local effect effeShield = LoadEffectHandle(hash, WH2I(unt), 200)
local trigger tr = GetTriggeringTrigger()
local triggeraction trA = LoadTriggerActionHandle(hash, WH2I(tr), 1)
local real damage = mI2R( RMem( Data + 0x10 ) )
if(damage <= 400)then
call WMem( Data + 0x10, 0 )
else
call WMem( Data + 0x10, mR2I( damage/2 ) )
endif
call DestroyEffect(effeShield)
call EffeDestrTimed(AddSpecialEffectTarget("Energy Release.mdx", unt, "origin"), 0.4)
call TriggerRemoveAction(tr, trA)
call TriggerClearActions(tr)
call FlushChildHashtable(hash, WH2I(tr))
call DestroyTrigger(tr)
endfunction