Добавлен
Обнулял всё, что только в голову взбрело, даже то, что не нужно, и всё равно они есть.. Как же оно задолбало. Может что-то пропустил, не обнулил, не удалил, я хз.
Научите нуба, пожалуйста, избавляться от этой саранчи. Практически среди всех способностей похожего типа присутствуют эти 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
Загруженные файлы
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
1
22
3 года назад
Отредактирован PROSHELDOTU
1
quq_CCCP, и чё такого в таймере 0.01? Почему бы не заюзать его для движения снаряда, который будет лететь от силы сек 3, что в этом такого
Или ты волнуешься за чьи-то калькуляторы? Пусть за них волнуются их обладатели

NazarPunk, я не знаю cJass и vJass, я этим даже воспользоваться не смогу
в той наработке вроде Zinc, если я не путаю с какой-то другой )
0
32
3 года назад
0
Proshel_Doty, нет никакой надобности в подобном, о чем я пытаюсь донести - но кто бы слушал. Да и вовсе рализация не лучшая.
0
22
3 года назад
0
Было 230, стало 233
Правильно, потому что объекты всё ещё присутствуют в игре, хоть их не видно

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

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