Не особо понимаю, как работает мемхак, но возникла необходимость при срабатывании триггера на урон по юниту уменьшить сам урон вдвое, и я попробовал следующее:
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, ты не тот детект взял для изменения урона юзается другой детект, он своего рода глобальный евент на урон всем юнитам на карте и работает до того как сработают триггеры на урон, там можно менять кол-во урона.
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
16
выводил число? там вообще урон приходит?
изменение должно работать, у меня работает, например. ибо это первый шаг перед тем, как данные отправятся ниже по течению к стандартным обработчикам
6
DracoL1ch:
выводил число? там вообще урон приходит?
изменение должно работать, у меня работает, например. ибо это первый шаг перед тем, как данные отправятся ниже по течению к стандартным обработчикам
Выводил до изменения полученное число, выглядит правдоподобно, если вы об этом.
16
покажи весь код этой функции, где идет работа
6
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 - уменьшено вдвое, на деле урон не изменился.
32
WAGARAX, ты не тот детект взял для изменения урона юзается другой детект, он своего рода глобальный евент на урон всем юнитам на карте и работает до того как сработают триггеры на урон, там можно менять кол-во урона.
Принятый ответ
6
quq_CCCP:
WAGARAX, ты не тот детект взял для изменения урона юзается другой детект, он своего рода глобальный евент на урон всем юнитам на карте и работает до того как сработают триггеры на урон, там можно менять кол-во урона.
Всмысле другая система отлова урона?
32
WAGARAX, внимательно мои публикации смотри по мемхаку.
6
quq_CCCP:
WAGARAX, внимательно мои публикации смотри по мемхаку.
Насколько я понял, вы про это xgm.guru/p/wc3/damagedetect. Пока-что вроде получается кое-как менять, попробую сделать что-то внятное.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.