Вполне возможно, вопрос, на самом деле, простой, разжеванный и я зря отвлекаю ваше внимание, но, тем не менее...
Мне нужно триггерно на постоянной основе отлавливать атаки определенных видов войск и полностью блокировать их урон.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
19
3 года назад
0
Похожие вопросы:

ответ
~8gabriel8:
Ещё можешь наносить вместо отравления иной бафф, а отравлять даммиком. По этому баффу сможешь различать урон от автоатаки и способности.

1
28
3 года назад
1
0
12
3 года назад
0
Видов войск или типов атаки?
0
17
3 года назад
0
Roy Mustang, вариант. Воспользуюсь, если не найдется более простой и примитивной альтернативы.
Стас Орлов, формально - без разницы. На деле - лучше виды войск.
Я крайне грубым и простым методом делаю разброс снарядов. Раньше для "обнуления" урона пользовался "фальшивым" типом атаки с нулевыми настройками. Теперь потребовались все 6 доступных типов.
0
12
3 года назад
Отредактирован Стас Орлов
0
Как-то так
function BlockDamageTest takes nothing returns nothing
    local timer BlockDamageTimer = GetExpiredTimer()
    local integer tid = GetHandleId(BlockDamageTimer)
    local unit u = LoadUnitHandle(udg_hash, tid, StringHash("Target"))
    local real Damage = LoadReal(udg_hash, tid, StringHash("Damage"))
    
    call SetUnitState(u, UNIT_STATE_LIFE, (GetUnitState(u, UNIT_STATE_LIFE) + Damage))
    call UnitRemoveAbility(u, 'A005')
    
    call DestroyTimer(BlockDamageTimer)
    call FlushChildHashtable(udg_hash, tid)
        
    set BlockDamageTimer = null
    set u = null
endfunction

function Damaged_Handler_Test takes unit source, unit target, real dmg returns nothing
    local timer BlockDamageTimer = CreateTimer()
    local integer tid = GetHandleId(BlockDamageTimer)
    
    if  IsUnitType(source, UNIT_TYPE_RANGED_ATTACKER) == true  then
        call UnitAddAbility(target, 'A005')
        call TimerStart(BlockDamageTimer, 0.01, false, function BlockDamageTest)
        call SaveUnitHandle(udg_hash, tid, StringHash("Target"), target)
        call SaveReal(udg_hash, tid, StringHash("Damage"), dmg)
    endif 
    
    set source = null
    set target = null
    set BlockDamageTimer = null
endfunction

function Damage_Event_Test takes nothing returns nothing
    call DisableTrigger( GetTriggeringTrigger( ) )
    call Damaged_Handler_Test( GetEventDamageSource( ), GetTriggerUnit( ), GetEventDamage( ) )
    call EnableTrigger( GetTriggeringTrigger( ) )
endfunction

//===========================================================================
function InitTrig_DamageTest takes nothing returns nothing
    local group gMain = CreateGroup()
    local unit uTemp 
    local trigger trTemp = CreateTrigger()
    
    if true then
        call GroupEnumUnitsInRect( gMain, bj_mapInitialPlayableArea, null )
        loop
            set uTemp = FirstOfGroup( gMain )
            exitwhen uTemp == null
            call TriggerRegisterUnitEvent( trTemp, uTemp, EVENT_UNIT_DAMAGED )
            call GroupRemoveUnit( gMain, uTemp )
        endloop
        call TriggerAddAction( trTemp, function Damage_Event_Test )
    endif
    
    set gMain = null
    set uTemp = null
    set trTemp = null
endfunction

Если нужен конкретный тип войск, которые будут блокировать урон то ставь условие с source
0
28
3 года назад
0
1.26 или 1.31+?
0
17
3 года назад
0
PT153, первое.
1
27
3 года назад
1
Стас Орлов, а это для чего xgm.guru/p/wc3/negate-damage-lib
к тому же оно блочит весь урон, спеллы и прочее
0
11
3 года назад
0
Тоже верно, можно ещё мемхак использовать
Чтобы оставить комментарий, пожалуйста, войдите на сайт.