Почему через триггер вместо постоянных трупов создаются скелеты, которые пропадают через сек 5? Я указывал неразложившийся , но серавно. Как-то раз было нормально... что подскажете?

Вот код, который создаёт "постоянного" трупа.
раскрыть
function CreatePermanentCorpseLocBJ takes integer style, integer unitid, player whichPlayer, location loc, real facing returns unit
    set bj_lastCreatedUnit = CreateCorpse(whichPlayer, unitid, GetLocationX(loc), GetLocationY(loc), facing)
    call SetUnitBlendTime(bj_lastCreatedUnit, 0)

    if (style == bj_CORPSETYPE_FLESH) then
        call SetUnitAnimation(bj_lastCreatedUnit, "decay flesh")
        call GroupAddUnit(bj_suspendDecayFleshGroup, bj_lastCreatedUnit)
    elseif (style == bj_CORPSETYPE_BONE) then
        call SetUnitAnimation(bj_lastCreatedUnit, "decay bone")
        call GroupAddUnit(bj_suspendDecayBoneGroup, bj_lastCreatedUnit)
    else
        // Unknown decay style - treat as skeletal.
        call SetUnitAnimation(bj_lastCreatedUnit, "decay bone")
        call GroupAddUnit(bj_suspendDecayBoneGroup, bj_lastCreatedUnit)
    endif

    call TimerStart(bj_delayedSuspendDecayTimer, 0.05, false, null)
    return bj_lastCreatedUnit
endfunction
bj_delayedSuspendDecayTimer вызывает эту функцию.
раскрыть
function DelayedSuspendDecay takes nothing returns nothing
    local group boneGroup
    local group fleshGroup

    // Switch the global unit groups over to local variables and recreate
    // the global versions, so that this function can handle overlapping
    // calls.
    set boneGroup = bj_suspendDecayBoneGroup
    set fleshGroup = bj_suspendDecayFleshGroup
    set bj_suspendDecayBoneGroup = CreateGroup()
    set bj_suspendDecayFleshGroup = CreateGroup()

    call ForGroup(fleshGroup, function DelayedSuspendDecayStopAnimEnum)
    call ForGroup(boneGroup, function DelayedSuspendDecayStopAnimEnum)

    call TriggerSleepAction(bj_CORPSE_MAX_DEATH_TIME)
    call ForGroup(fleshGroup, function DelayedSuspendDecayFleshEnum)
    call ForGroup(boneGroup, function DelayedSuspendDecayBoneEnum)

    call TriggerSleepAction(0.05)
    call ForGroup(fleshGroup, function DelayedSuspendDecayStopAnimEnum)

    call DestroyGroup(boneGroup)
    call DestroyGroup(fleshGroup)
endfunction
Что происходит.
Через 0.05 после создания "постоянного" трупа его анимация ставится на паузу, через 8 секунд его разложение ставится на паузу, а если его тип разложение есть flesh, то возвращается нужная анимация с ускорением, а через 0.05 анимация опять ставится на паузу.

Попробуй выбрать другой тип разложения.
`
ОЖИДАНИЕ РЕКЛАМЫ...
23
Похожие вопросы:

ответ
Maxim53:
Obelick, У Труповозки есть заклинание (кастомное) "Сбросить труп" наносит урон по области. Так вот я хочу ,чтоб при применении этого заклинания у Труповозки тратился один труп из тех что она имеет,а если не имеет трупов то и заклинание применить нельзя.
дать труповозке кастом велью (или свою переменную, если труповозок больше чем 1 - массив с индеком или опять кастом велью) по количеству трупов не? если ты используешь гулей как боевые единицы, создай их кастомную копию и используй её, а появление натурального гуля (или его трупа) уже отлавливай
Maxim53:
Obelick, У Труповозки есть заклинание (кастомное) "Сбросить труп" наносит урон по области. Так вот я хочу ,чтоб при применении этого заклинания у Труповозки тратился один труп из тех что она имеет,а если не имеет трупов то и заклинание применить нельзя.
собсно, порывшись в редакторе, есть идея насчет выброски трупа - дать труповозке запрещенный спеллбук со стандратным скиллом Drop Corpse и дать приказ на его каст, как только прокастует - дать команду Stop, чтобы больше 1 трупа не вылетело. И я не знаю как отследить выброшенный труп, потому что его нужно будет сразу удалить из игры, а если трупов в округе больше 1 - конкретно выброшенный твоей труповозкой отследить не представляется мне возможным
Maxim53:
Obelick, У Труповозки есть заклинание (кастомное) "Сбросить труп" наносит урон по области. Так вот я хочу ,чтоб при применении этого заклинания у Труповозки тратился один труп из тех что она имеет,а если не имеет трупов то и заклинание применить нельзя.
можешь дать труповозке ману без регена, и скилл наподобие того что у гулей (я...ням-ням..кушать....людей), когда они едят трупы, и за каждый съеденный давать 1 ману, а при касте - тратить или сразу манакост в 1 выставить. Если у тебя есть восстановители маны - опять таки вводить массив\кастом велью по количеству трупов и периодически устанавливать ману в его значение, но это немного бажно, ибо становится возможен каст без наличия трупа.
Obelick:
Что? Какое заклинание? Ты не написал, что именно тебе надо. Ты хочешь сделать заклинание труповозки триггерно? Или что? Трупы в ней - это вурдулаки, загруженные как на корабль. Выбрать трупы тоже можно, есть где-то в условиях.
выбрать трупы внутри труповозки нельзя, насколько я сейчас понял. даже если внести всех жмуриков на карте в массив - у труповозки есть способность Exnum Corpses, когда она сама генерирует труп. Причем он не появляется рядом и она его поднимает, он сразу добавляется ей. Как их-то отловить? Только если выкинуть
ответ
Темы-паровозы с обсуждениями создавайте в личном блоге.
ответ
N7 Molot:
Да, можно. Если знаешь как правильно выстроить случайное значение, то особого труда не составит построить определенный сценарий. Это можно реализовать через области, 3 изначальные области где будет выстраиваться тот или иной сценарий + через математический расчет координат областей можно выставить определенные предметы, но краше будет чистый "hardcore", выстраиваем случайное расположение точек, и в них что угодно, магазин, декор, и так далее...

На практике выглядит так:
При прогрузке карты выдаем случайное значение, которое имеет... скажем 3 триггера (3 комнаты). И в триггерах прописываем сценарий рендера локации комнаты, плюс триггер на эффект обитателя в области той или иной комнате.
ответ
создать дамми с временем жизни
приказать заюзать скил
что тут можно не уметь?

28
Потому что там всё не так просто. Лучше сделай обычного юнита и убей его.
4
PT153:
Потому что там всё не так просто. Лучше сделай обычного юнита и убей его.
Мне надо для обстановки. Типа, кругом трупы лежат
28
Вот код, который создаёт "постоянного" трупа.
раскрыть
function CreatePermanentCorpseLocBJ takes integer style, integer unitid, player whichPlayer, location loc, real facing returns unit
    set bj_lastCreatedUnit = CreateCorpse(whichPlayer, unitid, GetLocationX(loc), GetLocationY(loc), facing)
    call SetUnitBlendTime(bj_lastCreatedUnit, 0)

    if (style == bj_CORPSETYPE_FLESH) then
        call SetUnitAnimation(bj_lastCreatedUnit, "decay flesh")
        call GroupAddUnit(bj_suspendDecayFleshGroup, bj_lastCreatedUnit)
    elseif (style == bj_CORPSETYPE_BONE) then
        call SetUnitAnimation(bj_lastCreatedUnit, "decay bone")
        call GroupAddUnit(bj_suspendDecayBoneGroup, bj_lastCreatedUnit)
    else
        // Unknown decay style - treat as skeletal.
        call SetUnitAnimation(bj_lastCreatedUnit, "decay bone")
        call GroupAddUnit(bj_suspendDecayBoneGroup, bj_lastCreatedUnit)
    endif

    call TimerStart(bj_delayedSuspendDecayTimer, 0.05, false, null)
    return bj_lastCreatedUnit
endfunction
bj_delayedSuspendDecayTimer вызывает эту функцию.
раскрыть
function DelayedSuspendDecay takes nothing returns nothing
    local group boneGroup
    local group fleshGroup

    // Switch the global unit groups over to local variables and recreate
    // the global versions, so that this function can handle overlapping
    // calls.
    set boneGroup = bj_suspendDecayBoneGroup
    set fleshGroup = bj_suspendDecayFleshGroup
    set bj_suspendDecayBoneGroup = CreateGroup()
    set bj_suspendDecayFleshGroup = CreateGroup()

    call ForGroup(fleshGroup, function DelayedSuspendDecayStopAnimEnum)
    call ForGroup(boneGroup, function DelayedSuspendDecayStopAnimEnum)

    call TriggerSleepAction(bj_CORPSE_MAX_DEATH_TIME)
    call ForGroup(fleshGroup, function DelayedSuspendDecayFleshEnum)
    call ForGroup(boneGroup, function DelayedSuspendDecayBoneEnum)

    call TriggerSleepAction(0.05)
    call ForGroup(fleshGroup, function DelayedSuspendDecayStopAnimEnum)

    call DestroyGroup(boneGroup)
    call DestroyGroup(fleshGroup)
endfunction
Что происходит.
Через 0.05 после создания "постоянного" трупа его анимация ставится на паузу, через 8 секунд его разложение ставится на паузу, а если его тип разложение есть flesh, то возвращается нужная анимация с ускорением, а через 0.05 анимация опять ставится на паузу.

Попробуй выбрать другой тип разложения.
Принятый ответ
1
А что если кинуть модельки убитых декору и включать нужную анимацию?
22
Зачем такой сложный костыль? Просто при смерти юнит заносим массив что он умер но не разлагает. При удаление юнита в массиве проверяем и создаем труп и в массив заносим что он повторяет. и так по кругу...
PS Извини за кривой обьяснение
Чтобы оставить комментарий, пожалуйста, войдите на сайт.