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

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

Ответ
 
Snappy

offline
Опыт: 1,335
Активность: 18
Зависает варкрафт при использование способности
Вот собственно код, как только способность включаться вакрафт зависает
function Trig_Byakugan_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A062'
endfunction

function Trig_Byakugan_Filter takes nothing returns boolean
    return IsPlayerEnemy(GetOwningPlayer(GetTriggerUnit()), GetOwningPlayer(GetFilterUnit())) and GetWidgetLife(GetFilterUnit()) > 0.405 and not IsUnitType(GetFilterUnit(), UNIT_TYPE_STRUCTURE) and not IsUnitType(GetFilterUnit(), UNIT_TYPE_FLYING)
endfunction

function Trig_Byakugan_Actions takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local integer h = GetHandleId(t)
    local unit u = LoadUnitHandle(udg_Hash,h,1)
    local effect e = LoadEffectHandle(udg_Hash,h,2)
    local integer counter = LoadInteger(udg_Hash,h,3)
    if counter>0 then
      call SaveInteger(udg_Hash,h,3,counter-1)
    else
        call DestroyEffect(e)
        call PauseTimer(t)
        call DestroyTimer(t)
        call FlushChildHashtable(udg_Hash,h)
    endif
    set t = null
    set u = null
    set e = null
endfunction

function Trig_Byakugan_Actions2 takes nothing returns nothing
     local unit u =  GetSpellAbilityUnit()
     local timer t = CreateTimer()
     local integer h = GetHandleId(t)
     local group g = CreateGroup()
     local player p = GetLocalPlayer()
     local real x = GetUnitX(u)
     local real y = GetUnitY(u)
     local real x1
     local real y1
     local string s = ""
     local unit f
     local effect e
     local boolexpr b = Condition(function Trig_Byakugan_Filter)
     call GroupEnumUnitsInRange(g,x,y,1600,b)
     if GetLocalPlayer() ==  GetOwningPlayer(u) then
          set s = "Abilities\\Spells\\Human\\ThunderClap\\ThunderClapCaster.mdl"
        endif
     loop
        set f = FirstOfGroup(g)
        exitwhen f == null
        set x1 = GetUnitX(f)
        set y1 = GetUnitY(f)
        set e = AddSpecialEffectTarget(s,f,"origin")
     endloop
     call SaveUnitHandle(udg_Hash,h,1,u)
     call SaveEffectHandle(udg_Hash,h,2,e)
     call SaveInteger(udg_Hash,h,3,275)
     call TimerStart(t,0.04,true,function Trig_Byakugan_Actions)
     set u = null
     set t = null
     call DestroyGroup(g)
     call DestroyBoolExpr(b)
     set g = null
endfunction

//===========================================================================
function InitTrig_Byakugan takes nothing returns nothing
    local trigger t = CreateTrigger(  )
    local integer i = 0
    loop
        call TriggerRegisterPlayerUnitEvent(t, Player(i), EVENT_PLAYER_UNIT_SPELL_EFFECT , null)
        set i = i + 1
        exitwhen i == 16
    endloop
    call TriggerAddCondition(t, Condition( function Trig_Byakugan_Conditions ) )
    call TriggerAddAction(t, function Trig_Byakugan_Actions2 )
    set t = null
endfunction

Отредактировано Кет, 01.07.2014 в 04:11.
Старый 23.06.2014, 20:08
ZLOY5

offline
Опыт: 903
Активность: 5
loop
set f = FirstOfGroup(g)
exitwhen f == null
set x1 = GetUnitX(f)
set y1 = GetUnitY(f)
set e = AddSpecialEffectTarget(s,f,"origin")
endloop
оно?
но вар полностью зависать не должен
Старый 23.06.2014, 21:11
nvc123
new status
ты забыл убрать юнита из группы в конце цикла
nvc123 добавил:
а вообще код убог по определению
nvc123 добавил:
ибо криво хэш юзаешь
да и не нужен тут хэш
1 таймера с перебором массива структур хватит
Старый 23.06.2014, 23:14
Ответ

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

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

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

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



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