Взял с хайва скилл, но вот беда: у способности почти всегда сбрасывается кулдаун. Что нужно изменить, чтобы этого небыло?
Код
//===========================Constants Setup=================================
globals
    constant integer SpellRawcode = 'A04I'
    constant real BlinkDelay = 0.15
    constant real BlinkDamage = 150.00
    constant real BlinkRadius = 600.00
    constant string WeaponEffect = "Abilities\\Weapons\\PhoenixMissile\\Phoenix_Missile.mdl"
    constant string BlinkFirstEffect = "Abilities\\Spells\\NightElf\\Blink\\BlinkCaster.mdl"
    constant string BlinkEffect = "Abilities\\Spells\\NightElf\\Blink\\Blinka.mdl"
    constant attacktype AttackType = ATTACK_TYPE_HERO
    constant damagetype DamageType = DAMAGE_TYPE_NORMAL
    constant weapontype WeaponType = WEAPON_TYPE_AXE_MEDIUM_CHOP
endglobals
//============================Constants End=====================================

//Omnislash Conditions
function OmniConditions takes nothing returns boolean
    return GetSpellAbilityId() == SpellRawcode
endfunction

//Omnislash Group
function OmniGroup takes nothing returns boolean
    return IsUnitType(GetFilterUnit(),UNIT_TYPE_DEAD) == false and IsUnitEnemy(GetFilterUnit(), GetOwningPlayer(GetTriggerUnit())) == true and IsUnitType(GetFilterUnit(),UNIT_TYPE_STRUCTURE) == false
endfunction

function OmniActions takes nothing returns nothing
    local unit a = GetTriggerUnit()     //caster
    local unit b                        //first target on loop
    local unit c = GetSpellTargetUnit() //first spell target
    local integer i = 1
    local integer amount = 3 + (GetUnitAbilityLevel(a, SpellRawcode) * 2) //maximum blink amount
    local group g = CreateGroup()
    local effect FX                     //special effect
    local real x
    local real y
    local real angle
    call TriggerSleepAction(BlinkDelay)
    call SelectUnit(a, false)
    call SetUnitVertexColor(a, 150, 150, 150, 150)
    set FX = AddSpecialEffectTarget(WeaponEffect,a,"weapon")
    call SetUnitInvulnerable(a, true)
    call DestroyEffect(AddSpecialEffectTarget(BlinkFirstEffect, a, "chest"))
    //==========================1st blink============================
    set x = GetUnitX(c) + 50. * Cos(GetRandomReal(0, 360) * bj_DEGTORAD)
    set y = GetUnitY(c) + 50. * Cos(GetRandomReal(0, 360) * bj_DEGTORAD)
    set angle = bj_RADTODEG * Atan2(GetUnitY(c) - GetUnitY(a), GetUnitX(c) - GetUnitX(a))

    call SetUnitPosition(a,x,y)
    call SetUnitFacing(a,angle)
    call DestroyEffect(AddSpecialEffectTarget(BlinkEffect, a, "chest"))
    call UnitDamageTarget(a, c, BlinkDamage, false, true, AttackType, DamageType, WeaponType)
    call SetUnitAnimation(a, "attack")
    call TriggerSleepAction(BlinkDelay)
    call SelectUnit(a, false)    
    //=======================    END    =============================
    
    //Start Omnislash
    loop
        set i = i + 1 
        exitwhen i > amount  
        call GroupEnumUnitsInRange(g,GetUnitX(a),GetUnitY(a),BlinkRadius,Condition(function OmniGroup))
        set b = GroupPickRandomUnit(g)
        if b != null then
            //============================    BLINK START   =============================
            set x = GetUnitX(b) + 50. * Cos(GetRandomReal(0, 360) * bj_DEGTORAD)
            set y = GetUnitY(b) + 50. * Cos(GetRandomReal(0, 360) * bj_DEGTORAD)
            set angle = bj_RADTODEG * Atan2(GetUnitY(b) - GetUnitY(a), GetUnitX(b) - GetUnitX(a))
            call SetUnitPosition(a,x,y)
            call SetUnitFacing(a,angle)
            call DestroyEffect(AddSpecialEffectTarget(BlinkEffect, a, "chest"))
            //============================     BLINK END    =============================
            call UnitDamageTarget(a, b, BlinkDamage, false, true, AttackType, DamageType, WeaponType)
            call SetUnitAnimation(a, "attack")
            call TriggerSleepAction(BlinkDelay)
            call SelectUnit(a, false)
        endif
        call GroupClear(g)
    endloop    
    
    //End Omnislash
    if (GetLocalPlayer() == GetOwningPlayer(a)) then
        call ClearSelection()
        call SelectUnit(a, true)
    endif
    call SetUnitInvulnerable(a, false)
    call SetUnitVertexColor(a, 255, 255, 255, 255)
    call DestroyEffect(FX)
    set a = null     
    set b = null
    set c = null
    call DestroyGroup(g)
    set g = null
    set FX = null
endfunction

//===========================================================================
function InitTrig_Omnislash takes nothing returns nothing
    local trigger T = CreateTrigger()
    local integer i = 0
    loop
        call TriggerRegisterPlayerUnitEvent(T, Player(i), EVENT_PLAYER_UNIT_SPELL_CAST, null)
        set i = i + 1
        exitwhen i == bj_MAX_PLAYER_SLOTS
    endloop
    call TriggerAddCondition(T,Condition(function OmniConditions))
    call TriggerAddAction(T,function OmniActions)
    set T = null
endfunction

Принятый ответ

Audes, 0.01?
вейт минимум 0,1 может длиться
и там уже есть вейт
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
23
10 лет назад
0
хотя само слово точнее несовместимо со словом вейт
D
0
15
10 лет назад
0
nvc123, а скилл после вейта останется MUI?
0
28
10 лет назад
0
Audes, да
но вейт имеет много недостатков
он не точен
и если поставить игру на паузу то время вейта будет идти
например вейт 10 секунд
поставили на паузу игру на 10 секунд
сняли паузу и скил тутже сработал(тоесть вейт прошёл)
0
15
10 лет назад
0
Поставил TriggerSleepAction(0.01), но скилл перестал работать.
0
28
10 лет назад
0
Audes, 0.01?
вейт минимум 0,1 может длиться
и там уже есть вейт
Принятый ответ
0
15
10 лет назад
0
nvc123, не знал, спасибо.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.