function damage takes nothing returns nothing
    local effect e = AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodFootman.mdl", GetEnumUnit(), "chest") // Создаём спецэффект //
    call UnitDamageTarget(caster, GetEnumUnit(), 100, TRUE, FALSE, ATTACK_TYPE_HERO, DAMAGE_TYPE_NORMAL, WEAPON_TYPE_WHOKNOWS)
    call TriggerSleepAction(0.3)
    call DestroyEffect(e)
    set e = null
endfunction
Почему утекает спецэффект?

function check takes nothing returns boolean
    local unit u = GetFilterUnit()
    local player p = GetOwningPlayer(caster)
    local real coneAngle = TransferDegrees(bj_RADTODEG * Atan2(GetUnitY(u) - GetUnitY(caster), GetUnitX(u) - GetUnitX(caster)))
    local real sector = 30
    local boolean answer =  u != caster and IsUnitEnemy(u, p) and IsUnitVisible(u, p) and IsUnitAliveBJ(u) and GetUnitFacing(caster) - coneAngle <= sector and GetUnitFacing(caster) - coneAngle >= sector - sector*2
    set u = null
    set p = null // игрока можно не обнулять, их всё же очень конечное количество.
    return answer
endfunction
На кол-во handles это никак не повлияло.
Потому что никто из твоих FilterUnit() не был убран из игры. Без обнуления после удаления юнита хэндл бы остался, а с обнулением, был бы освобождён для нового использования.
У них стандартное время смерти 5 секунд, смотри игровые константы.
Поставь в игровых константах Decay Time - Effects время меньше, но не очень маленькое, а то анимация смерти эффекта проигрываться не будет.

Чтобы не плодить переменные эффекта, сделай такие функции:
function CreateEffectPoint takes string s, real x, real y returns nothing
    call DestroyEffect(AddSpecialEffect(s, x, y))
endfunction

function CreateEffectTarget takes string s, widget w, string att returns nothing
    call DestroyEffect(AddSpecialEffectTarget(s, w, att))
endfunction
Во время сохранения при включённой оптимизации кода и выключенном режиме дебага эти 2 функции будут "раскрыты", и в конечном коде будут только DestroyEffect(AddSpecialEffectTarget(...)).
У Inline оптимизации есть некоторые требования для передаваемых параметров, потому функции не в некоторых случаях не будут "раскрыты".
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
29
function check takes nothing returns boolean
    local unit u = GetFilterUnit()
    local player p = GetOwningPlayer(caster)
    local real coneAngle = TransferDegrees(bj_RADTODEG * Atan2(GetUnitY(u) - GetUnitY(caster), GetUnitX(u) - GetUnitX(caster)))
    local real sector = 30
    return u != caster and IsUnitEnemy(u, p) and IsUnitVisible(u, p) and IsUnitAliveBJ(u) and GetUnitFacing(caster) - coneAngle <= sector and GetUnitFacing(caster) - coneAngle >= sector - sector*2
endfunction

function Trig_x_Actions takes nothing returns nothing
    if GetSpellAbilityId() == 'A000' then
        set caster = GetTriggerUnit() // Caster
        local real x1 = GetUnitX(caster) // Координата X Caster
        local real y1 = GetUnitY(caster) // Координата Y Caster
        local real range = 450 // Радиус выборки юнитов в группе
            call BJDebugMsg(R2S(GetUnitFacing(caster)))
            call GroupEnumUnitsInRange(bj_lastCreatedGroup, x1, y1, range, Condition(function check)) // Выбираем всех юнитов
            call ForGroup(bj_lastCreatedGroup, function damage) // Атаковать соответствующих юнитов //
            call GroupClear(bj_lastCreatedGroup)
    endif
Не работает != утекает
Она утекает, но работает, как часы.
29
В check у тебя утекает юнит.
PrincePhoenix:
Она утекает, но работает, как часы.
без слипа утекает не робит
???
29
Msey, это ладно, мне бы со спецэффектом разобраться
Утекает один лишь спецэффект
Msey:
не робит
Зачеркнул же)
29
Попробуй создать спецэффекты без привязки к юниту и без функции нанесения урона и затем проверь, в нем ли проблема.
И как ты выявил, что именно спецэффект утекает?
29
И как ты выявил, что именно спецэффект утекает?
Удалил действие со спецэффектом, хэндлы перестали плодиться.
Попробуй создать спецэффекты без привязки к юниту и без функции нанесения урона и затем проверь, в нем ли проблема.
Попробуем.
29
DestroyEffect(AddSpecialEffectTarget("Objects\\Spawnmodels\\Human\\HumanBlood\\HumanBloodFootman.mdl", GetEnumUnit(), "chest")
пробуй
29
Msey:
Пробовал эффект без привязок, всё-равно утекает.
Пробовал без урона, утекает.
Удаляю действие AddSpecialEffect, не утекает.
пробуй
И это тоже утекает.

И зачем ты сломал сайт?
убийца сайтов
Загруженные файлы
29
Предположу, что если ты прелоад не делал, то при первом срабатывании эффект инициализируется и остается в памяти, чтобы при последующих созданиях спецэффектов не было лагов.
Сайт сам себя руинит ссср
29
Предположу, что если ты прелоад не делал, то при первом срабатывании эффект инициализируется и остается в памяти
Нужно прелоадить?
29
Все спецэффекты должны прелоадиться, чтобы при первом их применении не было лагов. Это особенно заметно, если использовать многокомпонентные заклинания с несколькими эффектами.
Делается так:
call Preload("Abilities\\Spells\\Other\\Stampede\\StampedeMissileDeath.mdl")
28
если ты вызовешь функцию более одного раза за 0.3 секунды, то запаузенный триггер запустится заново, а созданный спецэффект не удалится.
Удалится, он же локальную переменную использует, а не глобальную, потому что при каждом запуске триггера создаётся новый поток.
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.