Не особо понимаю, как работает мемхак, но возникла необходимость при срабатывании триггера на урон по юниту уменьшить сам урон вдвое, и я попробовал следующее:
local integer EventData = GetDamageEventESPData()
local integer Data = RMem(EventData + $00)
local real damage = mI2R( RMem( Data + 0x10 ) )
call WMem( Data + 0x10, mR2I( damage/2) )
Если вместо второго аргумента WMem указывал 0, урон не проходил, если что-то кроме 0, урон каким был, таким и остался. Можно ли подобным образом все же поменять урон, и если можно, что я сделал не так?

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

WAGARAX, ты не тот детект взял для изменения урона юзается другой детект, он своего рода глобальный евент на урон всем юнитам на карте и работает до того как сработают триггеры на урон, там можно менять кол-во урона.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
16
4 года назад
0
выводил число? там вообще урон приходит?
изменение должно работать, у меня работает, например. ибо это первый шаг перед тем, как данные отправятся ниже по течению к стандартным обработчикам
0
6
4 года назад
0
DracoL1ch:
выводил число? там вообще урон приходит?
изменение должно работать, у меня работает, например. ибо это первый шаг перед тем, как данные отправятся ниже по течению к стандартным обработчикам
Выводил до изменения полученное число, выглядит правдоподобно, если вы об этом.
0
16
4 года назад
0
покажи весь код этой функции, где идет работа
0
6
4 года назад
0
function Trig_SelfCast_Shield_Act takes nothing returns nothing
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

Читал число после выполнения WMem - уменьшено вдвое, на деле урон не изменился.
0
32
4 года назад
0
WAGARAX, ты не тот детект взял для изменения урона юзается другой детект, он своего рода глобальный евент на урон всем юнитам на карте и работает до того как сработают триггеры на урон, там можно менять кол-во урона.
Принятый ответ
0
6
4 года назад
0
quq_CCCP:
WAGARAX, ты не тот детект взял для изменения урона юзается другой детект, он своего рода глобальный евент на урон всем юнитам на карте и работает до того как сработают триггеры на урон, там можно менять кол-во урона.
Всмысле другая система отлова урона?
0
32
4 года назад
0
WAGARAX, внимательно мои публикации смотри по мемхаку.
0
6
4 года назад
0
quq_CCCP:
WAGARAX, внимательно мои публикации смотри по мемхаку.
Насколько я понял, вы про это xgm.guru/p/wc3/damagedetect. Пока-что вроде получается кое-как менять, попробую сделать что-то внятное.
0
32
4 года назад
0
WAGARAX, ибо на детект урона 2 разных хука, один как глобальное событие а второй дополнение к дефолтному событию урона, позволяющий узнать в потоке любого триггера сработавшего на урон данные об этом уроне. Назначение у наработок несколько разнится.
0
6
4 года назад
0
quq_CCCP, не совсем, правда, понимаю, почему предыдущий вариант работал с 0. Благодарю за помощь.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.