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

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

Ответ
 
dartwizard
v zapoe :(
offline
Опыт: 4,762
Активность:
Cтатьи по таймерам
дайте ссылку на статьи про таймеры.
Старый 04.08.2009, 17:26
Daemonik

offline
Опыт: 5,084
Активность:
Ну что-то в этом роде
function Timer takes nothing returns nothing
	// действия, выполняющиеся по истечении времени
	call PauseTimer(t)
endfunction

function Trig_timer_actions
	call TimerStart(t, время, function Timer)
endfunction
Старый 04.08.2009, 17:58
timeR
Deadly Grip
offline
Опыт: 5,238
Активность:
Таймером мона заменить такие события как периодическое время и времени прошло, а на периоде кстате оч много утечек бывает, а вот если юзать таймер то некоторые из них можно избежать. Как работает? Создаем тригг. инициализация мапы условие пропускаем в действии время задать таймер, создаем перменую тип таймер и задем этой перменой время однократное или многократное, создаем триг два где событие время таймера прошло указываем в событие наш таймер и все теперь он работает на заданом таймере. Два одинаковых таймера лучше не юзать для каждого "периодического или единовременого события" создавайте переменную и задавайте ее в ини или где вам будет угодно, к примеру в тригере которы запустит таймер:
Юнит Атакован
Юнит = Супермэн
Действие задать таймер Superman(переменая) как многократное на 0.04 сек.
Вкл. Триг. номер 2
Событие Таймер Superman истечен.
Действие.
Ваше действие которое будет повторяться 0.04 сек.
Незнаю это автору надо было или нет, но мб новичкам пригодится.
Старый 04.08.2009, 19:00
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Daemonik, я бы сказал, что так правильно:
function TimerActions takes nothing returns nothing
    // Действия, выполняющиеся по истечении времени.
    call DestroyTimer(GetExpiredTimer())
endfunction

function MyTimerFunction takes nothing returns nothing
    call TimerStart(t,<time>,<periodic/simple>,function TimerActions)
    //если периодичный таймер (periodic), то пишешь true, если таймер 1 раз выполняется, то пишешь false.
endfunction
Старый 04.08.2009, 19:16
dartwizard
v zapoe :(
offline
Опыт: 4,762
Активность:
timeR, мне на ГУИ не надо... на ГУИ у мну скил сделан, но если два чела заюзают, то всё, или фатал или они застывают оба(они всмысле юниты)
Старый 04.08.2009, 22:54
Daemonik

offline
Опыт: 5,084
Активность:
Hellfim:
function TimerActions takes nothing returns nothing
Действия, выполняющиеся по истечении времени.
call DestroyTimer(GetExpiredTimer())
endfunction
function MyTimerFunction takes nothing returns nothing
call TimerStart(t,<time>,<periodic/simple>,function TimerActions)
если периодичный таймер (periodic), то пишешь true, если таймер 1 раз выполняется, то пишешь false.
endfunction
а это похоже на гуи?
Старый 04.08.2009, 22:56
dartwizard
v zapoe :(
offline
Опыт: 4,762
Активность:
Вылезает куча ошибок в TimerActions
function Trig_Jump_Conditions takes nothing returns boolean
    if ( not ( GetSpellAbilityId() == 'A02B' ) ) then
        return false
    endif
    return true
endfunction

function TimerActions takes nothing returns nothing
    set jssp = GetUnitLoc(jc)
    set jsp = PolarProjectionBJ(jssp, ( DistanceBetweenPoints(jcp, jtp) / 110.00 ), AngleBetweenPoints(jcp, jtp))
    call SetUnitPositionLocFacingBJ( jc, jsp, AngleBetweenPoints(jcp, jtp) )
    call DestroyTimer(GetExpiredTimer())
endfunction

function Trig_Jump_Actions takes nothing returns nothing
    local unit jc
    local effect se
    local location jcp
    local location jtp
    local location jsp
    local location jssp
    local location sl
    local timer jt=CreateTimer()
    local integer ji=0
    local integer ji2=0
    local effect array je
    set jc = GetSpellAbilityUnit()
    set jcp = GetUnitLoc(jc)
    set jtp = GetSpellTargetLoc()
    call PauseUnitBJ( true, jc )
    call SetUnitPathing( jc, false )
    call SetUnitInvulnerable( jc, true ) 
    set je[0] = AddSpecialEffectTargetUnitBJ( "right hand", jc, "Abilities\\Weapons\\IllidanMissile\\IllidanMissile.mdl" )
    set je[1] = AddSpecialEffectTargetUnitBJ( "left hand", jc, "Abilities\\Weapons\\IllidanMissile\\IllidanMissile.mdl" )
    call UnitAddAbilityBJ( 'Amrf', jc )
    call SetUnitTimeScalePercent( jc, 50.00 )
    call SetUnitAnimation( jc, "spell slam" )
    call SetUnitFlyHeightBJ( jc, 250.00, 750.00 )
    loop
    exitwhen ji>80
    set ji=ji+1
    set jssp = GetUnitLoc(jc)
    set jsp = PolarProjectionBJ(jssp, ( DistanceBetweenPoints(jcp, jtp) / 110.00 ), AngleBetweenPoints(jcp, jtp))
    call SetUnitPositionLocFacingBJ( jc, jsp, AngleBetweenPoints(jcp, jtp) )
    call TimerStart(jt,0.01,false,function TimerActions)
    endloop
    call SetUnitFlyHeightBJ( jc, 0.00, 750.00)
    call SetUnitTimeScalePercent( jc, 100.00 )
    call ResetUnitAnimation( jc )
    call TimerStart(jt, 0.05, false, null)
    set sl = GetUnitLoc(jc)
    call CreateNUnitsAtLoc( 1, 'h007', GetOwningPlayer(jc), sl, bj_UNIT_FACING )
    call RemoveLocation(sl)
    set se = AddSpecialEffectLocBJ( sl, "Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl" )
    call SetUnitAbilityLevelSwapped( 'A02D', GetLastCreatedUnit(), GetUnitAbilityLevelSwapped('A02B', jc) )
    call UnitApplyTimedLifeBJ( 1.00, 'BTLF', GetLastCreatedUnit() )
    call IssueImmediateOrderBJ( GetLastCreatedUnit(), "thunderclap" )
    call UnitRemoveAbilityBJ( 'Amrf', jc )
    call PauseUnitBJ( false, jc )
    call SetUnitPathing( jc, true )
    call SetUnitInvulnerable( jc, false )
    call RemoveLocation(jcp)
    call RemoveLocation(jtp)
    call DestroyEffectBJ( je[0] )
    call DestroyEffectBJ( je[1] )
    call TriggerSleepAction( 0.25 )
    call DestroyEffectBJ( se )
endfunction

//===========================================================================
function InitTrig_Jump takes nothing returns nothing
    set gg_trg_Jump = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Jump, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Jump, Condition( function Trig_Jump_Conditions ) )
    call TriggerAddAction( gg_trg_Jump, function Trig_Jump_Actions )
endfunction
dartwizard добавил:
Daemonik, не, я про таймера говорю, а не про вас:)
Старый 04.08.2009, 22:59
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
dartwizard
  1. Код - говно.
  2. Сейчас перепишу, если что-то поймешь только +.
Старый 04.08.2009, 23:03
ScorpioT1000
Работаем
offline
Опыт: отключен
Hellfim, Destroy - обратное действие Create, если ты дестроишь, тогда надо и создавать его заного
другое дело Start/Pause
Старый 04.08.2009, 23:06
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
» code
scope Jump

globals
    private unit caster=null
    private real casterX=0.00
    private real casterY=0.00
    private real targetLocationX=0.00
    private real targetLocationY=0.00
    private real casterAngle=0.00
    private intger index=0
endglobals

function Trig_Jump_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A02B'
endfunction

function MoveUnitActions takes nothing returns nothing
    local real dist=SquareRoot((casterX-targetLocationX)*(casterX-targetLocationX)+(casterY-targetLocationY)*(caste​rY-targetLocationY))/110.00
    if index<=80
        set casterAngle=Atan2(casterY-targetLocationY,casterX-targetLocationX)
        set casterX=casterX+dist*Cos(casterAngle)
        set casterY=casterY+dist*Sin(casterAngle)
        call SetUnitX(caster,casterX)
        call SetUnitY(caster,casterY)
        if index<=39 then
            call SetUnitFlyHeight(caster,GetUnitFlyHeight(caster)+20,10000000)
        else
            call SetUnitFlyHeight(caster,GetUnitFlyHeight(caster)-20,10000000)
        endif
        set index=index+1
    else
        call DestroyTimer(GetExpiredTimer())
        set index=0
    endif
endfunction

function Trig_Jump_Actions takes nothing returns nothing
    local unit dummy=null
    local location targetLocation=GetSpellTargetLoc()
    set caster=GetSpellAbilityUnit()
    set casterX=GetUnitX(caster)
    set casterY=GetUnitY(caster)
    set targetLocationX=GetLocationX(targetLocation)
    set targetLocationY=GetLocationY(targetLocation)
    call PauseUnit(caster,true)
    call SetUnitPathing(caster,false)
    call SetUnitInvulnerable(caster,true) 
    call DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\IllidanMissile\\IllidanMissile.mdl&qu​ot;,caster,"right hand"))
    call DestroyEffect(AddSpecialEffectTarget("Abilities\\Weapons\\IllidanMissile\\IllidanMissile.mdl&qu​ot;,caster,"left hand"))
    call UnitAddAbility(caster,'Amrf')
    call SetUnitTimeScalePercent(caster,50.00)//Я забыл, что делает это функция, так что пускай будет
    call SetUnitAnimation(caster,"spell slam")
    call TimerStart(CreateTimer(),0.04,true,function MoveUnitActions)
    call SetUnitTimeScalePercent(caster,100.00)
    call ResetUnitAnimation(caster)
    set dummy=CreateUnit(GetOwningPlayer(caster),'h007',casterX,casterY,0)
    call DestroyEffect(AddSpecialEffect("Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl&qu​ot;,casterX,casterY))
    call SetUnitAbilityLevel(dummy,'A02D',GetUnitAbilityLevel('A02B',caster))
    call UnitApplyTimedLife(dummy,'BTLF',1.00)
    call IssueImmediateOrder(dummy,"thunderclap")
    call UnitRemoveAbility(caster,'Amrf')
    call PauseUnit(caster,false)
    call SetUnitPathing(caster,true)
    call SetUnitInvulnerable(caster,false)
    call RemoveLocation(targetLocation)
    set dummy=null
    set targetLocation=null
endfunction

//===========================================================================
function InitTrig_Jump takes nothing returns nothing
    set gg_trg_Jump = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Jump, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Jump, Condition( function Trig_Jump_Conditions ) )
    call TriggerAddAction( gg_trg_Jump, function Trig_Jump_Actions )
endfunction

endscope
Hellfim добавил:
ScorpioT1000, К.О., вы как нельзя кстати!

Отредактировано Hellfim, 05.08.2009 в 19:22.
Старый 04.08.2009, 23:36
Klop
Папа римский
offline
Опыт: 13,006
Активность:
помогите мне раздуплиться ,я тут вс внимательно прочитал попробовал переделать свой триггерный спелл из 2 триггеров и сделать цыклом в один и поставить в цикле этот таймер вместо вейта перевёл в текст,но теперь оно просто срабатывает мгновенно и не видно пропуска времени подскажите куда должны быть втсавлены действия толка
Код:
function MyTimer takes nothing returns nothing
    call DestroyEffectBJ( GetLastCreatedEffectBJ() )
    call DestroyTimer(GetExpiredTimer())
endfunction

function Trig_AuraHammerShieldActive_Jass_Actions takes nothing returns nothing
    local timer t=CreateTimer()
    set udg_Cyckle[4] = GetRandomInt(1, 4)
    if ( Trig_AuraHammerShieldActive_Jass_Func002C() ) then
        set udg_Unit[13] = GetAttackedUnitBJ()
        set udg_Cyckle[5] = 1
        loop
            exitwhen udg_Cyckle[5] > 7
            set udg_Cyckle[5] = (udg_Cyckle[5]+1)
            call AddSpecialEffectTargetUnitBJ( "origin", GetAttackedUnitBJ(), "Abilities\\Weapons\\AncientProtectorMissile\\AncientProtectorMissile.mdl" )
            call SetUnitPositionLoc( GetAttackedUnitBJ(), PolarProjectionBJ(GetUnitLoc(GetAttackedUnitBJ()), ( 5.00 * I2R(udg_Cyckle[5]) ), ( GetUnitFacing(GetAttackedUnitBJ()) + 180.00 )) )
            call UnitDamageTargetBJ( udg_Unit[12], GetAttackedUnitBJ(), ( 12.00 * I2R(GetUnitAbilityLevelSwapped('A00I', udg_Unit[12])) ), ATTACK_TYPE_NORMAL, DAMAGE_TYPE_NORMAL )
            call TimerStart(t,0.05,false,function MyTimer)
        endloop
    else
        call DoNothing(  )
    endif
endfunction
Старый 05.08.2009, 02:08
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
Mr_KLOP, цикл заменяется таймером... Полностью. Смотри мой код выше.
Старый 05.08.2009, 02:13
dartwizard
v zapoe :(
offline
Опыт: 4,762
Активность:
call SetUnitTimeScalePercent(caster,50.00)
делает скорость анимации 50%.
Старый 05.08.2009, 09:51
Daemonik

offline
Опыт: 5,084
Активность:
dartwizard, твоя ошибка была в том что, у тебя в функции TimerAction использовались не вызванные в функции локалки. Надеюсь понял.
Старый 05.08.2009, 09:55
dartwizard
v zapoe :(
offline
Опыт: 4,762
Активность:
Hellfim, не пашет твой код(
dartwizard добавил:
он должен "прыгнуть", а не скользить. И прыгать туда, куда указано, а не в случайную сторону.
З.Ы. попробовал переделать код, но ничего не вышло.
dartwizard добавил:
ну кто-нить поможет?
Старый 05.08.2009, 10:36
Hellfim
Новичок
offline
Опыт: 79,707
Активность:
dartwizard, исправил, теперь вроде норм должен прыгать.
Старый 05.08.2009, 19:20
Ответ

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

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

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

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



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