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

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

Закрытая тема
 
DragonSpirit
у - уходи
offline
Опыт: 22,625
Активность:
Удаление действий триггера
У меня вопрос:Как удалять действия из локально триггера действия без кэша?
Старый 08.05.2009, 20:29
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
удалять действия из локально триггера действия без кэша?

моя непонимать твоя, напиши на русском языке
Старый 08.05.2009, 20:35
DragonSpirit
у - уходи
offline
Опыт: 22,625
Активность:
ADOLF,я нашел с удалением тригера(локального(local triger t = CreateTrigger()),но там с кэшешм,а как без него?(call RemoveTrigger)

DragonSpirit добавил:
вот код триггера
Код:
function new takes nothing returns nothing
local trigger t = CreateTrigger()
local triggeraction TrA = TriggerAddAction( t, function Trig_move_Actions )
call TriggerRegisterPlayerChatEvent( t, Player(0), "-go", true )
call TriggerAddAction(t, function Trig_move_Actions )
endfunction

при удалении триггера - действия из функции не идут( function Trig_move_Actions )
Старый 08.05.2009, 21:16
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
DragonSpirit, ну естественно они не идут. Ты же удалил триггер...
Старый 08.05.2009, 22:22
DragonSpirit
у - уходи
offline
Опыт: 22,625
Активность:
Hellfim,удаление произошло после запуска функции Trig_move_Actions
Старый 08.05.2009, 23:04
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
DragonSpirit, ну так покажи весь код целиком.
Старый 08.05.2009, 23:41
DragonSpirit
у - уходи
offline
Опыт: 22,625
Активность:
Hellfim,
Код:
function move takes nothing returns nothing
    local unit u = GetSpellAbilityUnit() 
    local effect e
    local real i = 4.00
    local string s = "Abilities\\Spells\\Undead\\FreezingBreath\\FreezingBreathMissile.mdl"
    call SetUnitPositionLoc( (u), PolarProjectionBJ(GetUnitLoc(u), i, GetUnitFacing(u)) )
    call AddSpecialEffectLocBJ( GetUnitLoc(u), s )
    set e = GetLastCreatedEffectBJ()
    call DestroyEffect(e)
    set e = null
    set u = null 
    set s = ""
endfunction

function Trig_move_Actions takes nothing returns nothing
    local unit u = gg_unit_Hblm_0000
    local timer t = CreateTimer()
    call SetCameraTargetControllerNoZForPlayer( Player(0), u, 0, 0, false )
    call TimerStart(t,0.01,true,function move)
    call TriggerSleepAction(2)
    call TimerStart(t,0.01,false,function move)
    call ResetToGameCameraForPlayer( Player(0), 0 )
    call DestroyTimer( t )
    set u = null  
    set t = null   
endfunction

function new takes nothing returns nothing
local trigger t = CreateTrigger()
local triggeraction TrA = TriggerAddAction( t, function Trig_move_Actions )
call TriggerRegisterPlayerChatEvent( t, Player(0), "-go", true ) 
call TriggerAddAction(t, function Trig_move_Actions )
call DestroyTrigger(t)
set t = null
endfunction

//===========================================================================
function InitTrig_move takes nothing returns nothing
    set gg_trg_move = CreateTrigger(  )
    call TriggerAddAction( gg_trg_move, function new)
endfunction


DragonSpirit добавил:
Hellfim,правда после небольшой оптимизации он стал таким =):
Код:
function move takes nothing returns nothing
    local unit u = GetTriggerUnit() 
    local unit u2 = GetSpellTargetUnit()
    local effect e
    local real i = 4.00
    local string s = "Abilities\\Spells\\Undead\\FreezingBreath\\FreezingBreathMissile.mdl"
    call SetUnitFacingToFaceUnitTimed( u2, u, 0 )
    call SetUnitPositionLoc( u2, PolarProjectionBJ(GetUnitLoc(u2), i, GetUnitFacing(u)) )
    call AddSpecialEffectLocBJ( GetUnitLoc(u2), s )
    set e = GetLastCreatedEffectBJ()
    call DestroyEffect(e)
    set e = null
    set u = null 
    set u2 = null 
    set s = ""
endfunction

function new takes nothing returns nothing
local unit u =  GetEventTargetUnit() 
local timer t = CreateTimer()
call TimerStart(t,0.01,true,function move)
call TriggerSleepAction(2)
call TimerStart(t,0.01,false,function move)
call DestroyTimer( t )
set t = null 
set u = null 
endfunction

//===========================================================================
function InitTrig_move takes nothing returns nothing
    set gg_trg_move = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_move, EVENT_PLAYER_UNIT_SPELL_EFFECT)
    call TriggerAddCondition( gg_trg_move, Condition( function Trig_move_Conditions ) )
    call TriggerAddAction( gg_trg_move, function new)
endfunction
Старый 09.05.2009, 00:16
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
set s = ""

ненужно ибо фейк

ADOLF добавил:
Код:
local unit u = GetTriggerUnit()
 local unit t = GetSpellTargetUnit()
 local real x = GetUnitX(t)
 local real y = GetUnitY(t)
 local real f = GetUnitFacing(u)*.01745 
 call SetUnitFacing(t, Atan2(GetUnitY(u)-y, GetUnitX(u)-x))
 call SetUnitPosition(t, x+4.*Cos(f), y+4.*Sin(f)
 call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Undead\\FreezingBreath\\FreezingBreathMissile.mdl", x, y)) 
 set u = null
 set t = null


примерно так должна выглядеть фция move(), если я не напутал ничего с фейсингом

ADOLF добавил:
Цитата:
call TriggerSleepAction(2)


эту функцию нельзя использовать в спелах, да и в остальных местах тоже...

в коде также не как не аттачится юнитк к таймеру, заклинание работать небудет

ADOLF добавил:
итого: автору идти читать статьи о жассе/спелах
Старый 09.05.2009, 13:31
ELDAR
НИИ 4А-ВО кафедра SPELLS
offline
Опыт: 8,394
Активность:
Цитата:
Код:
call TimerStart(t,0.01,false,function move)
call DestroyTimer( t )

интересно, что же успеет выполнится

ELDAR добавил:
Цитата:
правда после небольшой оптимизации он стал таким =):

Цитата:
call AddSpecialEffectLocBJ( GetUnitLoc(u2), s )
set e = GetLastCreatedEffectBJ()
call DestroyEffect(e)

сам себе противоречишь :)

ELDAR добавил:
Цитата:
Hellfim,удаление произошло после запуска функции Trig_move_Actions

к твоему сведению после удаления трига, действие тоже удаляется
Старый 10.05.2009, 09:41
DragonSpirit
у - уходи
offline
Опыт: 22,625
Активность:
Цитата:
к твоему сведению после удаления трига, действие тоже удаляется

теперь ясно), но каким действием отследить момент,когда закончаться все действия в функции,что выше?
Цитата:
call AddSpecialEffectLocBJ( GetUnitLoc(u2), s )
set e = GetLastCreatedEffectBJ()
call DestroyEffect(e)





сам себе противоречишь :)

Это действие было в таймере(каждые 0,01 сек), засчёт чего выходило так,что спецэффект шёл за юнитом,а удаление что бы не было утече

DragonSpirit добавил:
Цитата:
call TimerStart(t,0.01,false,function move)
call DestroyTimer( t )






интересно, что же успеет выполнится

это действие выключения таймера,после отключения я и удаляю(с таймером всё работало)
Цитата:
set s = ""





ненужно ибо фейк

а как обнулять переменные типа строка?
Цитата:
local unit u = GetTriggerUnit()
local unit t = GetSpellTargetUnit()
local real x = GetUnitX(t)
local real y = GetUnitY(t)
local real f = GetUnitFacing(u)*.01745
call SetUnitFacing(t, Atan2(GetUnitY(u)-y, GetUnitX(u)-x))
call SetUnitPosition(t, x+4.*Cos(f), y+4.*Sin(f)
call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Undead\\FreezingBreath\\FreezingBreathMissile.mdl", x, y))
set u = null
set t = null


примерно так должна выглядеть фция move(), если я не напутал ничего с фейсингом


это да,с локациями лучше не работать


Цитата:
итого: автору идти читать статьи о жассе/спелах


было уже прочтено и вникнуто,вот и перехожу к практике, а т.к новичёк вот и спрашиваю

Ладно,буду дальше учить, всем спасибо за помощь и оптимизацию)
Старый 10.05.2009, 21:22
adic3x

offline
Опыт: 108,439
Активность:
Цитата:
а как обнулять переменные типа строка?

никак т.к. это ненужно
Старый 11.05.2009, 18:07
Закрытая тема

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

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

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

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



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