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

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

Закрытая тема
 
Nameless_One

offline
Опыт: 20
Активность:
Глюк Абилки
Здрасте. Баг с абилкой , не могу понять почему , ибо только только начал изучать джасс. Изначально абилка была на гуи при помощи CS , потом решил в джасс конвертнуть и чуток подкорректировать.
Концепция абилы : выпускается волна в цель , обратно летит вторая (как у Дредлорда) Однако теперь при использовании абилы выпускаеться только первая (обычная) волна. Зато когла использую другие способности этого героя вылетают куча волна моментально и игра виснит через 5 сек ))) Увы , не могу сказать после какого изменения стало глючить. Хелп плз )
function DoubleWave_Conditions takes nothing returns boolean
    if ( GetSpellAbilityId() == 'A025' ) then
        return false
    endif
    return true
endfunction

function DoubleWave_lvl1 takes nothing returns boolean
    if ( GetUnitAbilityLevelSwapped('A025', udg_DeathKnight) == 1 ) then
        return false
    endif
    return true
endfunction

function DoubleWave_lvl2 takes nothing returns boolean
    if ( GetUnitAbilityLevelSwapped('A025', udg_DeathKnight) == 2 ) then
        return false
    endif
    return true
endfunction

function DoubleWave_lvl3 takes nothing returns boolean
    if ( GetUnitAbilityLevelSwapped('A025', udg_DeathKnight) == 3 ) then
        return false
    endif
    return true
endfunction

function DoubleWave_lvl4 takes nothing returns boolean
    if ( GetUnitAbilityLevelSwapped('A025', udg_DeathKnight) == 4 ) then
        return false
    endif
    return true
endfunction

function DoubleWave_lvl5 takes nothing returns boolean
    if ( GetUnitAbilityLevelSwapped('A025', udg_DeathKnight) == 5 ) then
        return false
    endif
    return true
endfunction

function DoubleWave_Actions takes nothing returns nothing
    local unit u
    local unit DK
    if ( DoubleWave_lvl1() ) then
        set DK = udg_DeathKnight
        call CreateNUnitsAtLoc( 1, 'h007', GetOwningPlayer(DK), GetSpellTargetLoc(), bj_UNIT_FACING )
        set u = GetLastCreatedUnit()
        call UnitAddAbilityBJ( 'A027', u )
        call TriggerSleepAction( 0.20 )
        call IssuePointOrderLocBJ( u, "carrionswarm", GetUnitLoc(DK) )
        call UnitApplyTimedLifeBJ( 1.00, 'BTLF',u )
        set u = null
        set DK = null
        
    else
    endif
    if ( DoubleWave_lvl2() ) then
        set DK = udg_DeathKnight
        call CreateNUnitsAtLoc( 1, 'h007', GetOwningPlayer(DK), GetSpellTargetLoc(), bj_UNIT_FACING )
        set u = GetLastCreatedUnit()
        call UnitAddAbilityBJ( 'A028', u )
        call TriggerSleepAction( 0.20 )
        call IssuePointOrderLocBJ( u, "carrionswarm", GetUnitLoc(DK) )
        call UnitApplyTimedLifeBJ( 1.00, 'BTLF',u )
        set u = null
        set DK = null
    else
    endif
    if ( DoubleWave_lvl3() ) then
        set DK = udg_DeathKnight
        call CreateNUnitsAtLoc( 1, 'h007', GetOwningPlayer(DK), GetSpellTargetLoc(), bj_UNIT_FACING )
        set u = GetLastCreatedUnit()
        call UnitAddAbilityBJ( 'A029', u )
        call TriggerSleepAction( 0.20 )
        call IssuePointOrderLocBJ( u, "carrionswarm", GetUnitLoc(DK) )
        call UnitApplyTimedLifeBJ( 1.00, 'BTLF',u )
        set u = null
        set DK = null
    else
    endif
    if ( DoubleWave_lvl4() ) then
        set DK = udg_DeathKnight
        call CreateNUnitsAtLoc( 1, 'h007', GetOwningPlayer(DK), GetSpellTargetLoc(), bj_UNIT_FACING )
        set u = GetLastCreatedUnit()
        call UnitAddAbilityBJ( 'A02A', u )
        call TriggerSleepAction( 0.20 )
        call IssuePointOrderLocBJ( u, "carrionswarm", GetUnitLoc(DK) )
        call UnitApplyTimedLifeBJ( 1.00, 'BTLF',u )
        set u = null
        set DK = null
    else
    endif
    if ( DoubleWave_lvl5() ) then
        set DK = udg_DeathKnight
        call CreateNUnitsAtLoc( 1, 'h007', GetOwningPlayer(DK), GetSpellTargetLoc(), bj_UNIT_FACING )
        set u = GetLastCreatedUnit()
        call UnitAddAbilityBJ( 'A026', u )
        call TriggerSleepAction( 0.20 )
        call IssuePointOrderLocBJ( u, "carrionswarm", GetUnitLoc(DK) )
        call UnitApplyTimedLifeBJ( 1.00, 'BTLF',u )
        set u = null
        set DK = null
    else
    endif
endfunction

//===========================================================================
function InitTrig_DoubleWave takes nothing returns nothing
    set gg_trg_DoubleWave = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_DoubleWave, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( gg_trg_DoubleWave, Condition( function DoubleWave_Conditions ) )
    call TriggerAddAction( gg_trg_DoubleWave, function DoubleWave_Actions )
endfunction
Старый 22.08.2012, 16:04
16GB
GhostOne User
offline
Опыт: 60,317
Активность:
function DoubleWave_Conditions takes nothing returns boolean
return GetSpellAbilityId() == 'A025'
endfunction

function DoubleWave_Actions takes nothing returns nothing
local unit dk = udg_DeathKnight
local integer lvl = GetUnitAbilityLevel(dk,'A025')
local real x = GetSpellTargetX()
local real y = GetSpellTargetY()
local real a = GetUnitX(dk)
local real b = GetUnitY(dk)
local real r = Atan2(y-b,x-a)*bj_RATODEG
local unit u = CreateUnit(GetOwningPlayer(dk),'h007',x,y,r)
call UnitApplyTimedLife(u,'BTLF',1.)
if lvl == 1 then
call UnitAddAbility(u,'A027')
elseif  lvl = 2 then
call UnitAddAbility(u,'A028')
elseif  lvl = 3 then
call UnitAddAbility(u,'A029')
elseif  lvl = 4 then
call UnitAddAbility(u,'A02A')
elseif  lvl = 5 then
call UnitAddAbility(u,'A026')
endif
call TriggerSleepAction(0.20)
call IssuePointOrder(u,"carrionswarm",a,b)
set dk = null
set u = null
endfunction

function InitTrig_DoubleWave takes nothing returns nothing
    set gg_trg_DoubleWave = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_DoubleWave, EVENT_PLAYER_UNIT_SPELL_CAST )
    call TriggerAddCondition( gg_trg_DoubleWave, Condition( function DoubleWave_Conditions ) )
    call TriggerAddAction( gg_trg_DoubleWave, function DoubleWave_Actions )
endfunction
попробуй так, если так же бажить будет, то надо вместо вейта таймеры использовать
Старый 22.08.2012, 16:20
adic3x

offline
Опыт: 108,439
Активность:
call TriggerSleepAction(0.20)
Ай-ай-ай, нельзя использовать в спелах вообще.
Старый 22.08.2012, 16:24
Nameless_One

offline
Опыт: 20
Активность:
Проблема решилась после оптимазации строк кода условий :)
Ну да , вейты плохо ,я уже наслышан. Но честно , не совсем понял как работать с таймерами. Может кто подсказать? )
Старый 22.08.2012, 18:57
spellwerk

offline
Опыт: 4,869
Активность:
Старый 22.08.2012, 19:26
Закрытая тема

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

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

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

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



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