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

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

Ответ
 
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
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Xoniks, чё тут думать, создайш локальный триггер, и даёш ему событие условие и деиствие, сохраняеш в хэш таблицу а затем удаляеш...
Для примера могу скинуть скилл....
Старый 08.03.2012, 18:06
Xoniks

offline
Опыт: 1,858
Активность:
quq_CCCP, скинь если не затруднит
Старый 08.03.2012, 18:08
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
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",Targ​et,"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
))
а вот карта...
Прикрепленные файлы
Тип файла: w3x Blink Strike.w3x (15.5 Кбайт, 7 просмотров )
Старый 08.03.2012, 18:20
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
И получаешь 2 утекающих хэндла сам угадай где
Старый 08.03.2012, 18:29
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Nerevar, там всё удаляется, что таймер что триггер...
Старый 08.03.2012, 18:36
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
Triggercondition\triggeraction тоже удаляются? А ведь они являются хэндлами,поэтому ты их тоже должен удалять вместе с триггером
Старый 08.03.2012, 18:37
quq_CCCP
Я белый и пушистый!
offline
Опыт: 93,279
Активность:
Nerevar, да да, Player тоже хендл, тока чёто его не обнуляют, эти действия утечек не несут...
Старый 08.03.2012, 18:41
Nerevar
I'll be back!
offline
Опыт: 18,352
Активность:
Создай на пустой карте счетчик хэндлов и периодически создавай свои локальные триггеры без уничтожения кондишнов\экшнов и посмотри как счетчик "не будет" расти
Старый 08.03.2012, 18:45
Xoniks

offline
Опыт: 1,858
Активность:
Nerevar, как обнулить "локальные" action/condition не подскажешь?
Старый 08.03.2012, 19:58
Klop
Папа римский
offline
Опыт: 13,006
Активность:
Xoniks, также как и триггер
call TriggerRemoveAction(t,ta)
condition незнаю я его не использую
Старый 08.03.2012, 21:15
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Klop, нет, так они только из триггера выпиливаются.
Действия и условия никак не удалить.
Старый 08.03.2012, 22:52
Klop
Папа римский
offline
Опыт: 13,006
Активность:
использую вместо condition, if в коде пусть дольше работает за то без утечки там есть ещё очистка дейсвий Clear,но в данном случае,я подумал и пришёл к выводу
при создании триггера обьявляется его переменная
так вот думаю если для локального триггера не создавать триггер,а сделать глобалку и сделать создание в обьявлении глобалки это если JNGP,тогда может не будет куча гемороя и новый триггер создаваться не будет а просто заменятся или я ошибаюсь, это вопрос по этой теме?
Старый 09.03.2012, 01:12
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Klop, триггер останется в памяти, а вот ссылка на него заменится, да.
Старый 09.03.2012, 01:40
Klop
Папа римский
offline
Опыт: 13,006
Активность:
да уж триггеры геморой, жаль по другому событие не вызвать)
Старый 09.03.2012, 01:42
Ответ

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

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

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

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



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