Добавлен
Обнулял всё, что только в голову взбрело, даже то, что не нужно, и всё равно они есть.. Как же оно задолбало. Может что-то пропустил, не обнулил, не удалил, я хз.
Научите нуба, пожалуйста, избавляться от этой саранчи. Практически среди всех способностей похожего типа присутствуют эти 1-3 утечки, которые растут при быстром касте абилок
Прикладываю карту

quq_CCCP скинул карту с нормальным кодом.
Спасибо большое)
Код:
globals
    hashtable H = InitHashtable()
    real x
    real y
    group g = CreateGroup()
    real MaxX
    real MinX
    real MaxY
    real MinY
    unit bj_lastFilterUnit = null
endglobals

function GetCorX takes real x returns real
    if ( x < MinX ) then
        return MinX
    endif
    if ( x > MaxX ) then
        return MaxY
    endif
    return x
endfunction

function GetCorY takes real y returns real
    if ( y < MinY ) then
        return MinY
    endif
    if ( y > MaxY ) then
        return MaxY
    endif
    return y
endfunction

function Trig_Frost_Conditions takes nothing returns boolean
    return ( GetSpellAbilityId() == 'A000' )
endfunction

function Enemy_Filter takes nothing returns boolean
    set bj_lastFilterUnit = GetFilterUnit( )
    return IsUnitEnemy( bj_lastFilterUnit, bj_groupEnumOwningPlayer ) and GetWidgetLife(bj_lastFilterUnit) > 0.405 and not IsUnitType( bj_lastFilterUnit, UNIT_TYPE_STRUCTURE ) 
endfunction

function Group_Damage_Enemy_Enum takes nothing returns nothing
    local unit enemy = GetEnumUnit()
    call UnitDamageTarget( bj_lastReplacedUnit, enemy, 100.00,  true, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_COLD, WEAPON_TYPE_WHOKNOWS )
    call DestroyEffect( AddSpecialEffectTarget( "Abilities\\Spells\\Undead\\FrostArmor\\FrostArmorDamage.mdl", enemy, "chest" ) )
    set enemy = null
endfunction

function Timer_Dummy_Move_Expires takes nothing returns nothing
    local timer t = GetExpiredTimer()
    local integer id = GetHandleId(t)
    local unit cast = LoadUnitHandle( H, id, 0 )
    local unit dummy = LoadUnitHandle( H, id, 1 )
    local real facing = LoadReal( H, id, 2 )
    local real dist = LoadReal( H, id, 3 ) + 32.00

    set x = GetCorX( GetUnitX(dummy) + 32.00 * Cos( facing ) )
    set y = GetCorY( GetUnitY(dummy) + 32.00 * Sin( facing ) )
    call SetUnitX( dummy, x )
    call SetUnitY( dummy, y )
    call GroupClear( g )
    set bj_groupEnumOwningPlayer = GetOwningPlayer( cast )
    call GroupEnumUnitsInRange( g, x, y, 125.00, Condition( function Enemy_Filter ) )  
    if dist < 1500.00 and FirstOfGroup( g ) == null then
        call SaveReal( H, id, 3, dist )
    else
        call GroupClear( g )
        set bj_groupEnumOwningPlayer = GetOwningPlayer( cast )
        call GroupEnumUnitsInRange( g, x, y, 225.00, Condition( function Enemy_Filter ) ) 
        set bj_lastReplacedUnit = cast
        call ForGroup( g, function Group_Damage_Enemy_Enum )
        call FlushChildHashtable( H, id )
        call PauseTimer(t)
        call DestroyTimer(t)
        call KillUnit(dummy)
    endif

    set t = null
    set cast = null
    set dummy = null
endfunction

function Trig_Frost_Actions takes nothing returns nothing
    local timer t = CreateTimer()
    local integer id = GetHandleId(t)
    local unit cast = GetSpellAbilityUnit()
    local real dx = GetUnitX(cast)
    local real dy = GetUnitY(cast)
    local real facing = Atan2(GetSpellTargetY() - dy, GetSpellTargetX() - dx)
    local unit dummy = CreateUnit( GetOwningPlayer(cast), 'u000', GetCorX( dx + 64.00 * Cos(facing) ), GetCorY( dy + 64.00 * Sin(facing) ), facing * bj_DEGTORAD )
    
    call SetUnitPathing( dummy, false )
    call UnitApplyTimedLife( dummy, 'BTLF', 0.00 )
    
    call SaveUnitHandle( H, id, 0, cast )
    call SaveUnitHandle( H, id, 1, dummy )
    call SaveReal( H, id, 2, facing )
    call SaveReal( H, id, 3, 0.00 )
    call TimerStart( t, 0.03125, true, function Timer_Dummy_Move_Expires )
    
    set cast = null
    set dummy = null
    set t = null
endfunction

//===========================================================================
function InitTrig_Frost takes nothing returns nothing
    set gg_trg_Frost = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_Frost, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_Frost, Condition( function Trig_Frost_Conditions ) )
    call TriggerAddAction( gg_trg_Frost, function Trig_Frost_Actions )
endfunction
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
32
Proshel_Doty, нет никакой надобности в подобном, о чем я пытаюсь донести - но кто бы слушал. Да и вовсе рализация не лучшая.
21
Было 230, стало 233
Правильно, потому что объекты всё ещё присутствуют в игре, хоть их не видно

quq_CCCP, ещё как есть. Попробуй прицепить текст за курсором на 0.02 сек или хп бар у юнита на 0.02 сек, и посмотришь как он будет подёргиваться
38
quq_CCCP, Тем не менее предлагаешь обновлять 32 раза в секунду)
беды с олдовостью
32
ScorpioT1000,на 300 мс делать 100 раз все, ок, понятно все с вами.
16
Разницу между 60 и 144 видно, между 144 и 240 - нет, ни один участник исследований не смог определить где какой, с достоверной точностью.
Проблема таймеров 0.01 в высокой нагрузке при нулевом смысле в этой самой скорости. Пару снарядов сделать так можно, но для активно используемых вещей 002 более чем хорошо, даже 0.325 терпимо для не чётких моделей
21
Проблема таймеров 0.01 в высокой нагрузке при нулевом смысле в этой самой скорости. Пару снарядов сделать так можно, но для активно используемых вещей 002 более чем хорошо, даже 0.325 терпимо для не чётких моделей
верняк
38
32 фпс... на снарядах, карл
терпимо
действительно, остаётся только терпеть)
7
Может тогда изменить подход ? пулять снаряд до юнита (который находится на краю карты), отрисовка будет будет ровна кол-во фпс, а в цикле мы просто меняем точку снаряда и делаем проверки (интервал хоть 0.05).
А автору, чтобы ускорить код, лучше не высчитывать 15*Cos(a*bj_DEGTORAD) каждый раз, если у тебя угол снаряда не меняется.

И не высчитывать каждый раз это: if SquareRoot(dx*dx+dy*dy) >= 900 then у тебя скорость постоянная.
Этот комментарий удален
38
Можно интерполировать анимацию как взрослые дяди, но всем лень
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.