Xoniks
offline
Опыт:
1,858Активность: |
Есть 2 триггера на Jass как всё в 1 запихнуть?
» code 1
((код Jass
function Trig_Thorns_Cond takes nothing returns boolean local unit u = GetTriggerUnit( ) if GetUnitAbilityLevel(u, 'A000') > 0 then call UnitDamageTarget(u, GetAttacker( ), (12. * I2R(GetUnitLevel( u ))), true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS) endif set u = null return false endfunction function InitTrig_Thorns takes nothing returns nothing set gg_trg_Thorns = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_Thorns, EVENT_PLAYER_UNIT_ATTACKED ) call TriggerAddCondition( gg_trg_Thorns, function Trig_Thorns_Cond ) endfunction ))
» code 2
((код Jass
function Trig_Thorns_Buff_Timer takes nothing returns nothing
local timer t = GetExpiredTimer( ) local integer hid = GetHandleId(t) call UnitRemoveAbility(LoadUnitHandle(Hash, hid, 0), 'A000') call FlushChildHashtable(Hash, hid) call DestroyTimer(t) set t=null endfunction function Trig_Thorns_Buff_Cond takes nothing returns boolean
local unit u = GetSpellTargetUnit( ) local timer t = CreateTimer( ) if GetSpellAbilityId( ) == 'A003' then call UnitAddAbility(u, 'A000') call SaveUnitHandle(Hash, GetHandleId(t), 0, u) call TimerStart(t, 60., false, function Trig_Thorns_Buff_Timer) endif set t = null set u = null return false endfunction function InitTrig_Thorns_Buff takes nothing returns nothing set gg_trg_Thorns_Buff = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ(gg_trg_Thorns_Buff, EVENT_PLAYER_UNIT_SPELL_EFFECT) call TriggerAddCondition( gg_trg_Thorns_Buff, function Trig_Thorns_Buff_Cond ) endfunction )) если кто сделает объясните все по шагам с чего начинать и чем заканчивать |
08.03.2012, 18:02 | #1
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,338Активность: |
Xoniks, чё тут думать, создайш локальный триггер, и даёш ему событие условие и деиствие, сохраняеш в хэш таблицу а затем удаляеш... Для примера могу скинуть скилл.... |
08.03.2012, 18:06 | #2
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Xoniks
offline
Опыт:
1,858Активность: |
quq_CCCP, скинь если не затруднит |
08.03.2012, 18:08 | #3
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,338Активность: |
Xoniks,
вот код такого скила, где создаётся локальный триггер:
» смотреть сюда
((код jass
function Trig_BlinkStrike_Conditions takes nothing returns boolean
return ( GetSpellAbilityId() == 'A000' ) endfunction function Trig_Extra_strike_Conditions takes nothing returns boolean
return GetEventDamageSource() == LoadUnitHandle(udg_Hash, GetHandleId(GetTriggeringTrigger()),0) endfunction function Destroy_Extra_Strikes takes nothing returns nothing
local timer t = GetExpiredTimer() local trigger trg = LoadTriggerHandle(udg_Hash, GetHandleId(t),1) call FlushChildHashtable(udg_Hash,GetHandleId(t)) call FlushChildHashtable(udg_Hash,GetHandleId(trg)) call DestroyTimer(t) call DestroyTrigger(trg) set t = null set trg = null endfunction function Trig_Extra_strike takes nothing returns nothing
local unit Caster = GetTriggerUnit() local unit Target = GetEventDamageSource() local real TargX = GetUnitX(Target) local real TargY = GetUnitY(Target) local real TargA = GetUnitFacing(Target) local effect fx call DisableTrigger(GetTriggeringTrigger()) call DestroyEffect(AddSpecialEffectTarget("Abilities\\Spells\\NightElf\\Blink\\BlinkTarget.mdl",Caster,"chest")) set TargA = TargA + 180.00
set TargX = TargX + 100.00 * Cos( TargA * 0.0174532 ) set TargY = TargY + 100.00 * Sin( TargA * 0.0174532 ) call SetUnitPosition( Caster, TargX, TargY ) call SetUnitFacing( Caster, TargA - 180.00 ) call IssueTargetOrder( Caster, "attack", Target ) set fx = AddSpecialEffectTarget("Abilities\\Spells\\Other\\Stampede\\StampedeMissileDeath.mdl",Target,"chest") call TriggerSleepAction(1.00) call DestroyEffect(fx) call DestroyTrigger(GetTriggeringTrigger()) set Caster = null set Target = null set fx = null endfunction function Trig_BlinkStrike_Actions takes nothing returns nothing
local unit Caster = GetSpellAbilityUnit() local unit Target = GetSpellTargetUnit() local real TargX = GetUnitX(Target) local real TargY = GetUnitY(Target) local real TargA = GetUnitFacing(Target) local trigger trg = CreateTrigger() local timer t = CreateTimer() set TargA = TargA + 180.00 set TargX = TargX + 100.00 * Cos( TargA * 0.0174532 ) set TargY = TargY + 100.00 * Sin( TargA * 0.0174532 ) call SetUnitPosition( Caster, TargX, TargY ) call SetUnitFacing( Caster, TargA - 180.00 ) call IssueTargetOrder( Caster, "attack", Target ) call SaveUnitHandle(udg_Hash, GetHandleId(trg),0,Target) call SaveTriggerHandle(udg_Hash, GetHandleId(t),1,trg) call TriggerRegisterUnitEvent( trg, Caster, EVENT_UNIT_DAMAGED) call TriggerAddCondition(trg, Condition( function Trig_Extra_strike_Conditions )) call TriggerAddAction( trg, function Trig_Extra_strike ) call TimerStart(t, 2.00, false, function Destroy_Extra_Strikes ) set Caster = null set Target = null set trg = null set t = null endfunction =========================================================================== function InitTrig_BlinkStrike takes nothing returns nothing set gg_trg_BlinkStrike = CreateTrigger( ) call TriggerRegisterAnyUnitEventBJ( gg_trg_BlinkStrike, EVENT_PLAYER_UNIT_SPELL_EFFECT ) call TriggerAddCondition( gg_trg_BlinkStrike, Condition( function Trig_BlinkStrike_Conditions ) ) call TriggerAddAction( gg_trg_BlinkStrike, function Trig_BlinkStrike_Actions ) endfunction )) а вот карта... |
08.03.2012, 18:20 | #4
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Nerevar
I'll be back!
offline
Опыт:
18,352Активность: |
И получаешь 2 утекающих хэндла сам угадай где |
08.03.2012, 18:29 | #5
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,338Активность: |
Nerevar, там всё удаляется, что таймер что триггер... |
08.03.2012, 18:36 | #6
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Nerevar
I'll be back!
offline
Опыт:
18,352Активность: |
Triggercondition\triggeraction тоже удаляются? А ведь они являются хэндлами,поэтому ты их тоже должен удалять вместе с триггером |
08.03.2012, 18:37 | #7
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
quq_CCCP
Я белый и пушистый!
offline
Опыт:
94,338Активность: |
Nerevar, да да, Player тоже хендл, тока чёто его не обнуляют, эти действия утечек не несут... |
08.03.2012, 18:41 | #8
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Nerevar
I'll be back!
offline
Опыт:
18,352Активность: |
Создай на пустой карте счетчик хэндлов и периодически создавай свои локальные триггеры без уничтожения кондишнов\экшнов и посмотри как счетчик "не будет" расти |
08.03.2012, 18:45 | #9
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Xoniks
offline
Опыт:
1,858Активность: |
Nerevar, как обнулить "локальные" action/condition не подскажешь? |
08.03.2012, 19:58 | #10
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Klop
Папа римский
offline
Опыт:
13,006Активность: |
Xoniks, также как и триггер
call TriggerRemoveAction(t,ta) condition незнаю я его не использую |
08.03.2012, 21:15 | #11
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hellfim
Новичок
offline
Опыт:
79,700Активность: |
Klop, нет, так они только из триггера выпиливаются. Действия и условия никак не удалить. |
08.03.2012, 22:52 | #12
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Klop
Папа римский
offline
Опыт:
13,006Активность: |
использую вместо condition, if в коде пусть дольше работает за то без утечки там есть ещё очистка дейсвий Clear,но в данном случае,я подумал и пришёл к выводу
при создании триггера обьявляется его переменная так вот думаю если для локального триггера не создавать триггер,а сделать глобалку и сделать создание в обьявлении глобалки это если JNGP,тогда может не будет куча гемороя и новый триггер создаваться не будет а просто заменятся или я ошибаюсь, это вопрос по этой теме? |
09.03.2012, 01:12 | #13
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Hellfim
Новичок
offline
Опыт:
79,700Активность: |
Klop, триггер останется в памяти, а вот ссылка на него заменится, да. |
09.03.2012, 01:40 | #14
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|
Klop
Папа римский
offline
Опыт:
13,006Активность: |
да уж триггеры геморой, жаль по другому событие не вызвать) |
09.03.2012, 01:42 | #15
+0/−0
Профиль |
Приват |
Поиск |
Цитата |
IP: Записан
|