Сейчас 18:53:12 Вторник, 26 ноября, 2024 год
[ x ] Главная ⇒ Форум ⇐ RSS Файлы Cтатьи Картинки В о й т и   или   з а р е г и с т р и р о в а т ь с я


[ Новые сообщения · Участники · Правила форума · Поиск · RSS ]
  • Страница 1 из 1
  • 1
Модератор форума: PUVer, SirNikolas, Ty3uK  
Не работает код
SmartarosДата: Четверг, 28 Июня 2012, 14:23:01 | Сообщение # 1
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
Вообщем есть триггер, который в момент удара по врагу создает другой триггер, вот код:
Code
function Trig_SwirepostAct_Conditions takes nothing returns boolean
     if ( not ( GetUnitAbilityLevelSwapped('A0EG', GetAttacker()) > 0 ) ) then
         return false
     endif
     return true
endfunction

function Trig_SwirepostAct_Func01 takes nothing returns boolean
     return ( GetUnitAbilityLevelSwapped('A0EG', GetEventDamageSource()) > 0 )
endfunction

function Trig_SwirepostAct_Func02 takes nothing returns boolean
     return ( UnitHasBuffBJ(GetEventDamageSource(), 'B03R') == true )
endfunction

function Trig_SwirepostAct_Func03 takes nothing returns boolean
     return ( IsUnitType(GetTriggerUnit(), UNIT_TYPE_STRUCTURE) == false )
endfunction

function Trig_SwirepostAct_Func04 takes nothing returns boolean
     return ( GetEventDamage() != udg_Oboroten_real[2] )
endfunction

function Trig_SwirepostAct_Func05 takes nothing returns nothing
     set udg_Oboroten[0] = GetTriggerUnit()
     set udg_Oboroten_real[0] = GetUnitFacing(GetEventDamageSource())
     set udg_Oboroten_integer[0] = 0
     set udg_Oboroten_pos[2] = GetUnitLoc(GetEventDamageSource())
     set udg_Oboroten_real[2] = ( GetEventDamage() * ( 0.40 * I2R(GetUnitAbilityLevelSwapped('A0EG', GetEventDamageSource())) ) )
endfunction

function Trig_SwirepostAct_Func06 takes nothing returns boolean
     return ( UnitHasBuffBJ(GetTriggerUnit(), 'B03X') == true )
endfunction

function Trig_SwirepostAct_Func07 takes nothing returns boolean
     return ( GetEventDamage() != ( 20.00 * I2R(GetUnitAbilityLevelSwapped('A0EG', GetEventDamageSource())) ) )
endfunction

function Trig_SwirepostAct_Func08 takes nothing returns boolean
     return GetBooleanAnd( Trig_SwirepostAct_Func06(), Trig_SwirepostAct_Func07() )
endfunction

function Trig_SwirepostAct_Func09 takes nothing returns nothing
     if ( Trig_SwirepostAct_Func08() ) then
         call UnitDamageTargetBJ( GetEventDamageSource(), GetTriggerUnit(), ( 20.00 * I2R(GetUnitAbilityLevelSwapped('A0EG', GetEventDamageSource())) ), ATTACK_TYPE_CHAOS, DAMAGE_TYPE_UNKNOWN )
     else
         call DoNothing(  )
     endif
endfunction

function Trig_SwirepostAct_Func10 takes nothing returns boolean
     return ( UnitHasBuffBJ(GetTriggerUnit(), 'B03T') == true )
endfunction

function Trig_SwirepostAct_Func11 takes nothing returns nothing
     if ( Trig_SwirepostAct_Func10() ) then
         call UnitDamageTargetBJ( GetEventDamageSource(), GetTriggerUnit(), udg_Oboroten_real[2], ATTACK_TYPE_CHAOS, DAMAGE_TYPE_UNKNOWN )
         call CreateTextTagLocBJ( ( I2S(R2I(( GetEventDamage() + udg_Oboroten_real[2] ))) + "!" ), udg_Oboroten_pos[2], 40.00, 10, 100, 0.00, 0.00, 0 )
         call SetTextTagPermanentBJ( GetLastCreatedTextTag(), false )
         call SetTextTagVelocityBJ( GetLastCreatedTextTag(), 64, 90 )
         call SetTextTagLifespanBJ( GetLastCreatedTextTag(), 5 )
         call SetTextTagFadepointBJ( GetLastCreatedTextTag(), 4 )
         call RemoveLocation (udg_Oboroten_pos[2])
         call EnableTrigger( gg_trg_SwirepostKnock_Do )
     else
         call DoNothing(  )
     endif
endfunction

function Trig_SwirepostAct_Func12 takes nothing returns nothing
     call AddSpecialEffectTargetUnitBJ( "head", GetTriggerUnit(), "Abilities\\Weapons\\HydraliskImpact\\HydraliskImpact.mdl" )
     call DestroyEffect( GetLastCreatedEffectBJ() )
     call AddSpecialEffectTargetUnitBJ( "chest", GetTriggerUnit(), "Abilities\\Weapons\\HydraliskImpact\\HydraliskImpact.mdl" )
     call DestroyEffect( GetLastCreatedEffectBJ() )
endfunction

function Trig_SwirepostAct_Actions takes nothing returns nothing
     call DestroyTrigger(udg_Swirepost_trigger)
     set udg_Swirepost_trigger = CreateTrigger()
     call TriggerRegisterUnitEvent( udg_Swirepost_trigger, GetTriggerUnit(), EVENT_UNIT_DAMAGED )
     call TriggerAddCondition( udg_Swirepost_trigger, Condition(function Trig_SwirepostAct_Func01) )
     call TriggerAddCondition( udg_Swirepost_trigger, Condition(function Trig_SwirepostAct_Func02) )
     call TriggerAddCondition( udg_Swirepost_trigger, Condition(function Trig_SwirepostAct_Func03) )
     call TriggerAddCondition( udg_Swirepost_trigger, Condition(function Trig_SwirepostAct_Func04) )
     call TriggerAddAction( udg_Swirepost_trigger, function Trig_SwirepostAct_Func05 )
     call TriggerAddAction( udg_Swirepost_trigger, function Trig_SwirepostAct_Func09 )
     call TriggerAddAction( udg_Swirepost_trigger, function Trig_SwirepostAct_Func11 )
     call TriggerAddAction( udg_Swirepost_trigger, function Trig_SwirepostAct_Func12 )
endfunction

//===========================================================================
function InitTrig_SwirepostAct takes nothing returns nothing
     set gg_trg_SwirepostAct = CreateTrigger(  )
     call TriggerRegisterAnyUnitEventBJ( gg_trg_SwirepostAct, EVENT_PLAYER_UNIT_ATTACKED )
     call TriggerAddCondition( gg_trg_SwirepostAct, Condition( function Trig_SwirepostAct_Conditions ) )
     call TriggerAddAction( gg_trg_SwirepostAct, function Trig_SwirepostAct_Actions )
endfunction

Суть в том, что создаваемый триггер есть триггер на получение урона. У героя есть способность крит с баффом, для проверки нанесения урона именно этим героем. И в создаваемом триггере идет проверка нет ли этого баффа в момент нанесения урона, если есть то там дальше все вроде понятно. Но дело в том что баф то навешевается, но последующие действия удовлетворяющие условие наличия этого баффа не происходят. В чем ошибка?
 

DreiiДата: Четверг, 28 Июня 2012, 15:04:42 | Сообщение # 2
10 уровень
Группа: Проверенные
Сообщений: 4991
Награды: 0
Репутация: 603
Блокировки:
Smartaros, приведи код в читаемый вид. и убери бред с дестроем триггера.

 

SirNikolasДата: Четверг, 28 Июня 2012, 16:49:16 | Сообщение # 3
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
Честно, впервые вижу, чтобы в триггер добавляли несколько условий/действий. Оно, наверное, будет работать, но зачем так?..

 

SmartarosДата: Воскресенье, 01 Июля 2012, 04:16:14 | Сообщение # 4
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
Просто у меня есть целиковый гуи триггер, который я делал до этого, для другого способа, такой же как и этот триггер, только в том способе видимо засорялась память, и игра вылетала. А новым способом я при замахе создаю тот самый гуи триггер, и уничтожаю, это можно только джассом сделать, и память засоряться не должна. Вся конструкция джасс триггера идентична гуи. Кстати тот гуи триггер работает, по началу, потом перестает работать, так как с ним взаимодействует другой джасс триггер, который наверно и засоряет память. А этот джасс триггер не работает. Хз, я пока 0 в этом джассе, скажите я нахимичил или нет? Можно все сделать проще, или нет?

Добавлено (01 Июль 2012, 04:16:14)
---------------------------------------------
Вопрос, а надо ли перед destroy trigger удалять его условия и действия? Если да, то как?

 

SirNikolasДата: Воскресенье, 01 Июля 2012, 12:23:01 | Сообщение # 5
Группа: Модераторы
Сообщений: 6729
Награды: 1
Репутация: 1867
Блокировки:
TriggerRemoveCondition/TriggerRemoveAction.

 

BorodachДата: Воскресенье, 01 Июля 2012, 12:47:28 | Сообщение # 6
9 уровень
Группа: Проверенные
Сообщений: 930
Награды: 0
Репутация: 422
Блокировки:
может лучше 1 рас создать триггер, чем постоянно новый создавать и удалять старый

Karamba
 

SmartarosДата: Четверг, 12 Июля 2012, 21:45:19 | Сообщение # 7
9 уровень
Группа: Проверенные
Сообщений: 810
Награды: 0
Репутация: 135
Блокировки:
А можешь написать, как будет выглядеть эта функция у меня, я сам попытался.....джасс хелпер недоволен всегда

Добавлено (12 Июль 2012, 21:45:19)
---------------------------------------------
если один раз создать то тогда как ты сможешь регистрировать урон по другому юниту?

Сообщение отредактировал Smartaros - Воскресенье, 01 Июля 2012, 15:03:02
 

  • Страница 1 из 1
  • 1
Поиск:

Copyright © 2006 - 2024 Warcraft3FT.info При копировании материалов c сайта ставьте, пожалуйста, активную обратную ссылку на нас • Design by gReeB04ki ©
Хостинг от uCoz