XGM Forum
Сайт - Статьи - Проекты - Ресурсы - Блоги

Форуме в режиме ТОЛЬКО ЧТЕНИЕ. Вы можете задать вопросы в Q/A на сайте, либо создать свой проект или ресурс.
Вернуться   XGM Forum > Warcraft> Академия: форум для вопросов> Jass
Ник
Пароль
Войти через VK в один клик
Сайт использует только имя.

Ответ
 
Maniac

offline
Опыт: 16
Активность:
Не работает событие
Господа, выскажите свои соображения. Я наткнулся на такую проблему. Я сменил в триггере событие:

Код:
function Attack_mana_burn_Conditions takes nothing returns boolean
    return (GetRandomInt(1,100)<=15) and GetUnitAbilityLevel(GetAttacker(),'A000')>0 and IsUnitType(GetTriggerUnit(),UNIT_TYPE_STRUCTURE)!=true
endfunction

function Attack_mana_burn_Condition takes nothing returns boolean
    return GetUnitAbilityLevel(GetEventDamageSource(),'A000')>0
endfunction

function Attack_mana_burn_Action takes nothing returns nothing
    local unit e = GetEventDamageSource()
    local unit w = GetTriggerUnit()
    local integer i = GetUnitAbilityLevel(e,'A000')
    local unit u = CreateUnit(GetOwningPlayer(e),'h000',GetUnitX(e),GetUnitY(e),bj_UNIT_FACING)
    call UnitAddAbility(u,'A001')
    call SetUnitAbilityLevel(u,'A001',i)
    call IssueTargetOrder(u,"manaburn",w)
    call UnitApplyTimedLife(u,'BTLF',3)
    set e = null
    set w = null
    set u = null
    call DestroyTrigger(GetTriggeringTrigger())
endfunction

function Attack_mana_burn_Actions takes nothing returns nothing
    local trigger t = CreateTrigger()
    local unit u = GetTriggerUnit()
    local unit y = GetAttacker()
    local boolexpr c = Condition(function Attack_mana_burn_Condition)
    call TriggerRegisterUnitEvent(t,u,EVENT_UNIT_DAMAGED)
    call TriggerAddCondition(t,c)
    call TriggerAddAction(t,function Attack_mana_burn_Action)
    call TriggerSleepAction(1)
    call DestroyTrigger(t)
    call DestroyBoolExpr(c)
    set u = null
    set y = null
    set c = null
endfunction

//===========================================================================
function InitTrig_Attack_mana_burn takes nothing returns nothing
    set gg_trg_Attack_mana_burn = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ(gg_trg_Attack_mana_burn,EVENT_PLAYER_UNIT_ATTACKED  )
    call TriggerAddCondition(gg_trg_Attack_mana_burn,Condition(function Attack_mana_burn_Conditions))
    call TriggerAddAction(gg_trg_Attack_mana_burn,function Attack_mana_burn_Actions)


на такое событие:
Код:
function Attack_mana_burn_Conditions takes nothing returns boolean
    return GetUnitAbilityLevel(GetAttacker(),'A000')>0 and IsUnitType(GetTriggerUnit(),UNIT_TYPE_STRUCTURE)!=true//(GetRandomInt(1,100)<=15) and
endfunction

function Attack_mana_burn_Condition takes nothing returns boolean
    return GetUnitAbilityLevel(GetEventDamageSource(),'A000')>0
endfunction

function Attack_mana_burn_Action takes nothing returns nothing
    local unit e = GetEventDamageSource()
    local unit w = GetTriggerUnit()
    local integer i = GetUnitAbilityLevel(e,'A000')
    local unit u = CreateUnit(GetOwningPlayer(e),'h000',GetUnitX(e),GetUnitY(e),bj_UNIT_FACING)
    call UnitAddAbility(u,'A001')
    call SetUnitAbilityLevel(u,'A001',i)
    call IssueTargetOrder(u,"manaburn",w)
    call UnitApplyTimedLife(u,'BTLF',3)
    set e = null
    set w = null
    set u = null
    call DestroyTrigger(GetTriggeringTrigger())
endfunction

function Attack_mana_burn_Actions takes nothing returns nothing
    local trigger t = CreateTrigger()
    local unit u = GetTriggerUnit()
    local unit y = GetAttacker()
    local boolexpr c = Condition(function Attack_mana_burn_Condition)
    call TriggerRegisterUnitEvent(t,u,EVENT_UNIT_DAMAGED)
    call TriggerAddCondition(t,c)
    call TriggerAddAction(t,function Attack_mana_burn_Action)
    call TriggerSleepAction(1)
    call DestroyTrigger(t)
    call DestroyBoolExpr(c)
    set u = null
    set y = null
    set c = null
endfunction

//===========================================================================
function InitTrig_Attack_mana_burn takes nothing returns nothing
    local trigger t = CreateTrigger()
    local integer i = 0
    loop
        exitwhen i > 9
        call TriggerRegisterPlayerUnitEvent(t,Player(i),EVENT_PLAYER_UNIT_ATTACKED,null)
        set i = i + 1
    endloop
    call TriggerAddCondition(t,Condition(function Attack_mana_burn_Conditions))
    call TriggerAddAction(t,function Attack_mana_burn_Actions)
endfunction


После теста на карте событие с циклом не работает. Интересно еще то, что я когда скопировал этот триг с событием цикла в чистую пустую карту, он там работает. Есть какие нибудь соображения?

Отредактировано Maniac, 08.12.2012 в 20:22.
Старый 08.12.2012, 20:13
Faion
Noblesse Oblige
offline
Опыт: 30,395
Активность:
Не вижу отладочных сообщений
Старый 08.12.2012, 21:55
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Maniac, условия проверь как следует, и расставь отладочные сообщения, и протестируй, где обрываются действия....
Старый 09.12.2012, 06:49
Ответ

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы можете скачивать файлы

BB-коды Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход



Часовой пояс GMT +3, время: 01:03.