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

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

Закрытая тема
 
tgonta
Pixelated Sora Coder
offline
Опыт: 3,160
Активность:
И снова таймеры...
У меня есть вопрос: почему не запускается таймером функция, которая по идее должна создавать 3 водных круга и двигать их?
» Неработающий код
function Trig_Water_rage_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 0x41303249
endfunction

function WS_ForGroup takes nothing returns nothing
    local unit caster = GetTriggerUnit()
    local integer damageperlvl = 200
    call UnitDamageTarget(caster,GetEnumUnit(),damageperlvl * GetUnitAbilityLevel(caster,0x41303249) / 24,true,false,ConvertAttackType(6),ConvertDamageType(4),ConvertWeaponType(0))
    set caster = null
endfunction

function WS_GroupFilter takes nothing returns boolean
    return GetUnitState(GetFilterUnit(),ConvertUnitState(0)) > 0 and IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(GetTriggerUnit())) == true    
endfunction

function WS_Timer takes nothing returns nothing
    local integer i2 = 1
    local integer i3 = 1
    local unit caster = GetTriggerUnit()
    local real casterx = GetUnitX(caster)
    local real castery = GetUnitY(caster)
    local real pointx
    local real pointy
    local effect e
    local real aoe
    local real array distance
    local real array degrees
    local integer array counter
    local group array damagegroup
    loop
        exitwhen i3 > i2
        if(counter[i3] < 600) then
            if(counter[i3] < 300) then
                set counter[i3] = counter[i3] + 5
                set degrees[i3] = degrees[i3] + 4.
                set degrees[i3] = degrees[i3] + 120.
                set distance[i3] = distance[i3] + 5.
                set pointx = casterx + distance[i3] * Cos(degrees[i3] * .0174532)
                set pointy = castery + distance[i3] * Sin(degrees[i3] * .0174532)
                // --------
                set e = AddSpecialEffectLoc("Abilities\\Weapons\\WaterElementalMissile\\WaterElementalMissile.mdl"​,Location(pointx,pointy))
                call DestroyEffect(e)
                // &#221;&#242;&#238; &#228;&#229;&#235;&#224;&#229;&#242;&#241;&#255; 3 &#240;&#224;&#231;&#224;...
                set degrees[i3] = degrees[i3] + 120.
                set pointx = casterx + distance[i3] * Cos(degrees[i3] * .0174532)
                set pointy = castery + distance[i3] * Sin(degrees[i3] * .0174532)
                set e = AddSpecialEffectLoc("Abilities\\Weapons\\WaterElementalMissile\\WaterElementalMissile.mdl"​,Location(pointx,pointy))
                call DestroyEffect(e)
                // --------
                set degrees[i3] = degrees[i3] + 120.
                set pointx = casterx + distance[i3] * Cos(degrees[i3] * .0174532)
                set pointy = castery + distance[i3] * Sin(degrees[i3] * .0174532)
                set e = AddSpecialEffectLoc("Abilities\\Weapons\\WaterElementalMissile\\WaterElementalMissile.mdl"​,Location(pointx,pointy))
                call DestroyEffect(e)
                if(counter[i3] == counter[i3] / 25 * 25 and counter[i3] <= 300) then
                    set damagegroup[i3] = GetUnitsInRangeOfLocMatching(aoe,Location(casterx,castery),Condition(function WS_GroupFilter))
                    call ForGroup(damagegroup[i3],function WS_ForGroup)    
                    call DestroyGroup(damagegroup[i3])
                endif
            else
                if(counter[i3] == counter[i3] / 25 * 25 and counter[i3] >= 300 and counter[i3] <= 600) then
                    set damagegroup[i3] = GetUnitsInRangeOfLocMatching(aoe,Location(casterx,castery),Condition(function WS_GroupFilter))
                    call ForGroup(damagegroup[i3],function WS_ForGroup)    
                    call DestroyGroup(damagegroup[i3])
                endif
                set counter[i3] = counter[i3] + 5
                set degrees[i3] = degrees[i3] + 4.
                set degrees[i3] = degrees[i3] + 120.
                set distance[i3] = distance[i3] - 5.
                set pointx = casterx + distance[i3] * Cos(degrees[i3] * .0174532)
                set pointy = castery + distance[i3] * Sin(degrees[i3] * .0174532)
                // --------
                set e = AddSpecialEffectLoc("Abilities\\Weapons\\WaterElementalMissile\\WaterElementalMissile.mdl"​,Location(pointx,pointy))
                call DestroyEffect(e)
                // &#221;&#242;&#238; &#228;&#229;&#235;&#224;&#229;&#242;&#241;&#255; 3 &#240;&#224;&#231;&#224;...
                set degrees[i3] = degrees[i3] + 120.
                set pointx = casterx + distance[i3] * Cos(degrees[i3] * .0174532)
                set pointy = castery + distance[i3] * Sin(degrees[i3] * .0174532)
                set e = AddSpecialEffectLoc("Abilities\\Weapons\\WaterElementalMissile\\WaterElementalMissile.mdl"​,Location(pointx,pointy))
                call DestroyEffect(e)
                // --------
                set degrees[i3] = degrees[i3] + 120.
                set pointx = casterx + distance[i3] * Cos(degrees[i3] * .0174532)
                set pointy = castery + distance[i3] * Sin(degrees[i3] * .0174532)
                set e = AddSpecialEffectLoc("Abilities\\Weapons\\WaterElementalMissile\\WaterElementalMissile.mdl"​,Location(pointx,pointy))
                call DestroyEffect(e)
                if(counter[i3] == 600) then
                    call SetHeroAgi(caster,GetHeroAgi(caster,false),true)
                endif
            endif
        endif
        set i3 = i3 + 1
    endloop
    set caster = null
    set e = null
    set damagegroup[i3] = null
endfunction

function WS_Actions takes nothing returns nothing
    local timer t = CreateTimer()
    call TimerStart(t,.02,false,function WS_Timer)
    set t = null
endfunction

//===========================================================================
function InitTrig_Water_rage takes nothing returns nothing
    set gg_trg_Water_rage = CreateTrigger()
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Water_rage, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Water_rage, Condition( function Trig_Water_rage_Conditions ) )
    call TriggerAddAction( gg_trg_Water_rage, function WS_Actions)
endfunction
Старый 17.11.2009, 19:52
XOR

offline
Опыт: 38,159
Активность:
Ты Запускаешь и сразу обнуляешь таймер
XiMiKs добавил:
Это ничего хорошего не дает

Отредактировано XiMiKs, 17.11.2009 в 20:55.
Старый 17.11.2009, 20:09
agentex

offline
Опыт: 34,834
Активность:
однако это вполне правомерно и ничего нехорошего тоже не дает, просьба не дезинформировать
Старый 17.11.2009, 20:27
XOR

offline
Опыт: 38,159
Активность:
Я говорю что это уже есть =|
Старый 17.11.2009, 20:50
YellowStar
poon
offline
Опыт: 15,144
Активность:
ТТ - юзаи опк и дело в шляпе. ставь в код дебагер и ищи баг. это просто.
Старый 17.11.2009, 20:54
ShadoW DaemoN

offline
Опыт: 37,078
Активность:
Уважаемые, вы не туда смотрите...
  1. call TimerStart(t, .02, false, function WS_Timer) - запустится только один раз спустя 0.02 секунды
  2. call TimerStart(t, .02, true, function WS_Timer) - запускается с периодичностью в 0.02 секунды.
facepalm Здесь нужен второй вариант, естественно.
Остальной код не смотрел.
Старый 17.11.2009, 20:54
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
а разве
local unit caster = GetTriggerUnit()
Будет записывать кастера?
Он же от другого триггера идет.
Или я чето не понимаю?
Старый 18.11.2009, 18:14
agentex

offline
Опыт: 34,834
Активность:
вариант
Или я чето не понимаю?
Старый 18.11.2009, 18:14
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
значит будет всетаки записываться?
Старый 18.11.2009, 18:18
agentex

offline
Опыт: 34,834
Активность:
значит
Старый 18.11.2009, 18:18
bee
vjass.optimizer
offline
Опыт: 16,615
Активность:
пойду попробую...
Bee добавил:
чтото не верится =\
Старый 18.11.2009, 18:19
XOR

offline
Опыт: 38,159
Активность:
Функция относится к тому же триггеру => кастер записывается как надо
Старый 18.11.2009, 18:33
Закрытая тема

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

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

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

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



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