Добавлен
Делаю щит от первого заклинания с перезарядки на основе "Амулета Защиты". В триггерной способности даммиком вешаю на цель дебаф (в моём случае "замедление"), после этого отсееваю цель которая имеет дебаф и наношу ей урон. Но отсеивание видимо проходит намного быстрее чем даммик успевает вешать дебаф. В итоге цель не получает урон, а только дебафф, а при повторном использовании спелла пока на цели висит дебаф, урон уже проходит. Вопрос: есть дебафы которые вешаются быстрее или может кто подскажет как по другому сделать?
`
ОЖИДАНИЕ РЕКЛАМЫ...

Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
0
27
0
Так без примера сложно сказать.. можно только тыкнуть. Ну, возможна, надо делать задержку.. таймером после каста замедления даймиком.
Но возможна задержка нужно
  1. некоторые ивенты срабатывают не сразу. Например, событие получение урона. Оно предвищает, что урон сейчас должен прийти, а не то что "он пришел", его нет пока. Или событие - дроп итема => дропающий предмет еще в инвентаре. И много похожих ивентов,так далее. Сделано спецом, чтобы удобно было манипулировать данными. Пример, как узнать из какого слота выпал итем, что за юнит и пр. В рефордже урон можно было изменять, и определять итд.
  2. бафф после каста возможна не сразу исчезает/появляется. Нужна задержка и здесь. Это игровой момент.
  3. многие другие вещи. Например, мне надо было дропнуть все итемы с инвентаря или продать все итемы. Это можно сделвть мгновенно, но правда, нужна была задержка 0.00 сек после каждого приказа
На все при все нужно задержка 0.00 сек. Посмотри сам. Если не помогает, попробуй задержку увеличить. Тут зависит от кастера, заклинания или приказа. Видишь, вот дроп юнит не может мгновенно сделать, так и продать тоже. Теперь, разбираемся с заклинаниями. Тут у каждого заклинания есть особенности, они могут не сразу кастовать. И ещк у юнитов есть задержки анимации, т.е. он должен начать махать
Зачем юнитам задают задержки анимациям
Как настроить дамми каст
0
1
0
С таймером всё вообще перестает правильно работать. Вот код:
function Trig_StrelaLda_Actions2 takes nothing returns nothing
    local timer timerAct = GetExpiredTimer()
    local integer id = GetHandleId(timerAct)
    local unit caster = LU(Hash, id, k_caster)
    local unit dummy = LU(Hash, id, k_dummy)
    local real process = LR(Hash, id, k_process) + LR(Hash, id, k_speed)
    local group groupAct
    local group groupAct2
    local unit u = null
    
    if process > LR(Hash, id, k_maxDistance) then
        call DestroyGroup(LG(Hash, id, k_group))
        call KillUnit(dummy)
        call FlushChildHashtable(Hash, id)
        call PauseTimer(timerAct)
        call DestroyTimer(timerAct)
    else
        call SR(Hash, id, k_process, process)
      if Move2WithNormalizeCond(dummy, LR(Hash, id, k_speed), LR(Hash, id, k_angle), true, false) then
      else
        call SR(Hash, id, k_process, LR(Hash, id, k_maxDistance))
      endif  
        
        set groupAct = CreateGroup()
        call GroupEnumUnitsInRange(groupAct, GetUnitX(dummy), GetUnitY(dummy), LR(Hash, id, k_aoe), null)
        set u = FirstOfGroup(groupAct)
            if GetWidgetLife(u) > 0.405 and not IsUnitInGroup(u, LG(Hash, id, k_group)) then
                if not IsUnitType(u, UNIT_TYPE_MAGIC_IMMUNE) then
                    if IsUnitEnemy(u, GetOwningPlayer(caster)) then
                       
                        local unit x = CreateUnit(GetOwningPlayer(caster), 'h00Z', GetUnitX(u), GetUnitY(u), 1.00)
                        call IssueTargetOrder(x, "slow", u)
                        call UnitApplyTimedLife(x, 'BTLF', 1)
                        if GetUnitAbilityLevel(u, 'B00F') > 0 then
                        call UnitDamageTarget(x, u, LR(Hash, id, k_damage), false, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC, null)
                        endif
                        
                        call DestroyEffect(AddSpecialEffectTarget(LS(Hash, id, k_damageEffect), u, "origin"))
                        call GroupAddUnit(LG(Hash, id, k_group), u)
                        set x = null
                        set groupAct2 = CreateGroup()
                        call GroupEnumUnitsInRange(groupAct2, GetUnitX(u), GetUnitY(u), 500, null)
                    loop
                        set u = FirstOfGroup(groupAct2)
                        exitwhen u == null
                        if GetWidgetLife(u) > 0.405 and not IsUnitInGroup(u, LG(Hash, id, k_group)) then
                            if not IsUnitType(u, UNIT_TYPE_MAGIC_IMMUNE) then
                                if IsUnitEnemy(u, GetOwningPlayer(caster)) then
                        
                        local unit x2 = CreateUnit(GetOwningPlayer(caster), 'h00Z', GetUnitX(u), GetUnitY(u), 1.00)
                        call IssueTargetOrder(x2, "slow", u)
                        call UnitApplyTimedLife(x2, 'BTLF', 1)
                        if GetUnitAbilityLevel(u, 'B00F') > 0 then
                        call UnitDamageTarget(x2, u, LR(Hash, id, k_damage) / 2, false, false, ATTACK_TYPE_NORMAL, DAMAGE_TYPE_MAGIC, null)
                        endif
                        
                        call DestroyEffect(AddSpecialEffectTarget(LS(Hash, id, k_damageEffect), u, "origin"))
                        call GroupAddUnit(LG(Hash, id, k_group), u)
                        set x2 = null
                                endif
                            endif
                        endif
                        call GroupRemoveUnit(groupAct2, u)
                    endloop
                        call DestroyGroup(groupAct2)
                        call DestroyGroup(LG(Hash, id, k_group))
                        call KillUnit(dummy)
                        call FlushChildHashtable(Hash, id)
                        call PauseTimer(timerAct)
                        call DestroyTimer(timerAct)
                    endif
                endif
            endif
        call GroupRemoveUnit(groupAct, u)
        call DestroyGroup(groupAct)
    endif
    set caster = null
    set dummy = null
    set timerAct = null
    set groupAct = null
    set groupAct2 = null
endfunction

function Trig_StrelaLda_Actions takes nothing returns nothing
    local unit caster = GetTriggerUnit()
    local real xCaster = GetUnitX(caster)
    local real yCaster = GetUnitY(caster)
    local real xTarget = GetSpellTargetX()
    local real yTarget = GetSpellTargetY()
    local real angle = bj_RADTODEG * Atan2(yTarget - yCaster, xTarget - xCaster)
    local unit dummy = CreateUnit(GetOwningPlayer(caster), 'n016', xCaster, yCaster, angle)
    
    local integer level = GetUnitAbilityLevel(caster, 'A030')
    local real maxDistance = 10000
    local real damage = 500 + GetHeroStr(caster, true) * 3
    local real aoe = 125 * level
    local real speed = 900
    
    local string damageEffect = "Abilities\\Spells\\Undead\\DeathCoil\\DeathCoilSpecialArt.mdl"
    
    local timer timerAct = CreateTimer()
    local integer id = GetHandleId(timerAct)
    
    if xCaster == xTarget and yCaster == yTarget then
        set angle = GetUnitFacing(caster)
    endif
    call SetUnitX(dummy, xCaster + aoe * 1.33 * Cos(angle * bj_DEGTORAD))
    call SetUnitY(dummy, yCaster + aoe * 1.33 * Sin(angle * bj_DEGTORAD))
    call SetUnitScale(dummy, aoe * 0.8 * 0.01, aoe * 0.8 * 0.01, aoe * 0.8 * 0.01)
    
    call SU(Hash, id, k_caster, caster)
    call SU(Hash, id, k_dummy, dummy)
    
    call SR(Hash, id, k_damage, damage)
    call SR(Hash, id, k_maxDistance, maxDistance)
    call SR(Hash, id, k_angle, angle)
    call SR(Hash, id, k_aoe, aoe)
    call SR(Hash, id, k_speed, speed  * 0.03)
    
    call SS(Hash, id, k_damageEffect, damageEffect)
    
    call SR(Hash, id, k_process, 0)
    call SG(Hash, id, k_group, CreateGroup())
    
    call TimerStart(timerAct, 0.03, true, function Trig_StrelaLda_Actions2)
    
    set caster = null
    set dummy = null
    set timerAct = null
endfunction

function Trig_StrelaLda_Conditions takes nothing returns boolean
    return GetSpellAbilityId() == 'A030'
endfunction

function InitTrig_StrelaLda takes nothing returns nothing
    set gg_trg_StrelaLda = CreateTrigger(  )
    call TriggerRegisterAnyUnitEventBJ( gg_trg_StrelaLda, EVENT_PLAYER_UNIT_SPELL_EFFECT )
    call TriggerAddCondition( gg_trg_StrelaLda, Condition( function Trig_StrelaLda_Conditions ) )
    call TriggerAddAction( gg_trg_StrelaLda, function Trig_StrelaLda_Actions )
endfunction
0
27
0
local unit x = CreateUnit(GetOwningPlayer(caster), 'h00Z', GetUnitX(u), GetUnitY(u), 1.00)
Почему эта строчка не вначале кода. В jass все локалки инициируются в верху функц. Как у вас прокатило?

И здесь
local unit x2 = CreateUnit(GetOwningPlayer(caster), 'h00Z', GetUnitX(u), GetUnitY(u), 1.00)
Это же не луа
0
26
0
Почему эта строчка не вначале кода. В jass все локалки инициируются в верху функц. Как у вас прокатило?
Потому что внутри лупа.

Ты когда вешаешь дебаф ( ты же определяешь эту цель) сразу наноси триггерно урон. Не нужно делать проверку на наличие дебафа и потом наносить урон.
0
27
0
Но на логику вроде все верно.
Лучше наносить урон от имени кастера, а не даймика. кастер получает опыт, и пр

Потому что внутри лупа.
что то не помню такого. Это обнова?
0
24
0
не надо делать внутри лупа local так может варик лагануть, лучше наверху лупа поставь локал u и в лупе set u =
С чего бы? Локальная переменная объявленная внутри цикла существует только в теле этого цикла и только время его выполнения, соответственно, если не пытаться к ней обращаться после его завершения поведение всегда стабильно
0
1
0
Почему эта строчка не вначале кода. В jass все локалки инициируются в верху функц. Как у вас прокатило?
Потому что внутри лупа.

Ты когда вешаешь дебаф ( ты же определяешь эту цель) сразу наноси триггерно урон. Не нужно делать проверку на наличие дебафа и потом наносить урон.
Да триггер нормально работает без дебафа, но мне нужен дебаф для проверки что нет щита от заклинаний...
0
26
0
Да триггер нормально работает без дебафа, но мне нужен дебаф для проверки что нет щита от заклинаний...
Попробуй урон повесить на событие "Даммик заканчивает применение способности" с проверкой на дебаф. Т.е. это будет отдельное событие, а значит отдельный триггер.
Тогда у тебя будут два события, которые явно идут одно за другим.
1
29
1
darkowlom, на жассе можно объявлять локалки внутри цикла?

МрачныйВорон, это сижасс. Он переносит объявления локалок вверх функции. Из-за чего особо одарённые картоделы начинают думать, что можно объявлять локалки где попало и в итоге отстреливают себе колено.
0
24
0
darkowlom, на жассе можно объявлять локалки внутри цикла?

МрачныйВорон, это сижасс. Он переносит объявления локалок вверх функции. Из-за чего особо одарённые картоделы начинают думать, что можно объявлять локалки где попало и в итоге отстреливают себе колено.
Ты сам ответил, там не чистый джазз
Чистым еще кто-то пользуется вообще? 0_о
1
29
1
Ты сам ответил, там не чистый джазз
Ну так твоё утверждение в корне не верно:
Локальная переменная объявленная внутри цикла существует только в теле этого цикла

Чистым еще кто-то пользуется вообще? 0_о
Не стоит вскрывать эту тему...
Показан только небольшой набор комментариев вокруг указанного. Перейти к актуальным.
Чтобы оставить комментарий, пожалуйста, войдите на сайт.