call BlzSetSpecialEffectZ(sEff, GetRandomInt(150,600))
call BlzSetSpecialEffectX(sEff,GetUnitX(sCaster))
call BlzSetSpecialEffectY(sEff,GetUnitY(sCaster))
Почему то высота не меняется, если убрать строчки
call BlzSetSpecialEffectX(sEff,GetUnitX(sCaster))
call BlzSetSpecialEffectY(sEff,GetUnitY(sCaster))
то всё работает...что за фигня, почему это конфликтует? или как это понимать
В кратце что б понимать что происходит, абилка на основе иммолейта, активируешь если двигаешься высераются огненные лепёшки под героем, эффект огненной ловушки боковой крепиться должен по высоте и xy героя в периодике с нужным поворотом что б сзади горело ))). Повторюсь, если убрать xy высота работает (для примера в коде я тестировал просто random высоту после того как понял что проблемы)
scope RocketBoots  
    /* ---------------------- ABILITY ------------------------------------------ */
    /* -------------------------------------------------------------------------- */
    globals
        private constant integer MOVE_SPEED_BONUS         = 'A0FF'
        private constant integer    ABILITY               = 'A014'
    endglobals
    /* -------------------------------------------------------------------------- */
    /*                                   System                                   */
    /* -------------------------------------------------------------------------- */
    private struct RocketBoots
        timer sTimer = null
        unit sCaster = null
        effect sEff =  null
        real curX = 0
        real curY = 0
        real prevX = 0
        real prevY = 0
        real spam = 0
        real sManaDrainPeriod = 0
       
        private static method onPeriod takes nothing returns nothing
               local thistype this = GetTimerData(GetExpiredTimer())
               local real damage 
               local unit u
               local real bonus = GetHeroInt(sCaster, true)* (0.50+( 0.25*GetUnitAbilityLevel(sCaster,ABILITY) ))
       
          
if GetUnitAbilityLevel(sCaster, 'B002') > 0 and UnitAlive(sCaster) then
   set sManaDrainPeriod = sManaDrainPeriod + 0.01
   
   if sManaDrainPeriod >= 0.25 then
    call AddUnitMana(sCaster, -1*(GetUnitState(sCaster,UNIT_STATE_MAX_MANA)/100*2.) )
    set sManaDrainPeriod = 0
   endif
//---------------------
   set prevX = curX
   set prevY = curY
   set curX = GetUnitX(sCaster)
   set curY = GetUnitY(sCaster)
   if prevX != curX or prevY != curY  then
     set spam = spam + DistanceBetweenCoordinates(prevX,prevY,curX,curY)
   endif
   
   if spam >= 40 then
    set u = CreateUnit(GetOwningPlayer(sCaster),'h011',curX,curY, 0 )
    call UnitApplyTimedLife(u,'BTLF',10)
    call SetUnitPathing(u,false)
    call BlzSetAbilityRealFieldBJ( BlzGetUnitAbility(u, 'A015'), ABILITY_RF_ARF_MISSILE_ARC, (BlzGetAbilityRealField(BlzGetUnitAbility(u, 'A015'), ABILITY_RF_ARF_MISSILE_ARC) + bonus   ) )            
    set spam = 0
   endif
//------------   
    call BlzSetSpecialEffectYaw(sEff, (GetUnitFacing(sCaster)+90)*bj_DEGTORAD)
    call BlzSetSpecialEffectZ(sEff, GetRandomInt(150,600))
    call BlzSetSpecialEffectX(sEff,GetUnitX(sCaster))        <-----убираем  и работает
    call BlzSetSpecialEffectY(sEff,GetUnitY(sCaster))        <-----убираем и  работает
else
                call BlzStartUnitAbilityCooldown( sCaster, ABILITY, 30 )
                call DisarmUnit(sCaster,false)
                call UnitRemoveAbility(sCaster,  MOVE_SPEED_BONUS)
                call DestroyEffect(sEff)
                set sEff = null
                call ReleaseTimer(sTimer)
                call deallocate()
                set sTimer  = null
                set sCaster   = null
endif    
                set u = null
        endmethod

  

        private static method onOrder takes nothing returns nothing
              local unit  caster = GetOrderedUnit()
              local thistype this 
           
            if GetIssuedOrderId() == 852177   then
                 set this   = thistype.allocate()
                 set sTimer  = NewTimerEx(this)
                 set sCaster   = caster
                 set curX = GetUnitX(sCaster)
                 set curY = GetUnitY(sCaster)
        set sEff = AddSpecialEffectEx("Doodads\\Cinematic\\FireTrapSide\\FireTrapSide", curX , curY, 0, 1.2)
        call BlzSetSpecialEffectYaw(sEff, (GetUnitFacing(caster)+90)*bj_DEGTORAD)
        call BlzSetSpecialEffectTimeScale(sEff,5)
        call BlzSetSpecialEffectScale(sEff,0.75)
        call DisarmUnit(caster,true)
        call UnitAddAbilityP( caster,MOVE_SPEED_BONUS)
        call TimerStart(sTimer, 0.01, true, function thistype.onPeriod)
            endif
        
            set caster = null
    
         endmethod
        static method onInit takes nothing returns nothing
            call RegisterPlayerUnitEvent(EVENT_PLAYER_UNIT_ISSUED_ORDER, function thistype.onOrder)
        endmethod
    endstruct
endscope

Принятый ответ

Нууу с виду всё норм, смотри тут как не странно важен порядок
Сначала делаешь XY
Потом делаешь Z
Потом делаешь специализированные операции типа scale/pitch/yaw
По крайне и в любом случае операции XY копеечные, вы ничего не потеряете, если буде их делать
AddSpecialEffectEx, самодельная?

Вообще эффект XY сбивают 90% scale/pitch/yaw, попробуйте разобраться с порядком
`
ОЖИДАНИЕ РЕКЛАМЫ...
1
32
2 года назад
1
Странно, не должно быть такого, нужно больше кода
0
10
2 года назад
0
Странно, не должно быть такого, нужно больше кода
прикрепил код
1
32
2 года назад
1
Нууу с виду всё норм, смотри тут как не странно важен порядок
Сначала делаешь XY
Потом делаешь Z
Потом делаешь специализированные операции типа scale/pitch/yaw
По крайне и в любом случае операции XY копеечные, вы ничего не потеряете, если буде их делать
AddSpecialEffectEx, самодельная?

Вообще эффект XY сбивают 90% scale/pitch/yaw, попробуйте разобраться с порядком
Принятый ответ
0
10
2 года назад
Отредактирован EviLInside
0
AddSpecialEffectEx, самодельная?
да , это тоже самая AddSpecialEffect но с изначальной высотой и масштабом, удобно для DestroyEffect(AddSpecialEffectEx .... )
Если что я пробовал со стандартной AddSpecialEffect, она не влияет никак на проблемы с высотой , это так к слову
Щас затестирую с порядком, отпишу что и как

Сначала делаешь XY
Потом делаешь Z
Потом делаешь специализированные операции типа scale/pitch/yaw
Вообще эффект XY сбивают 90% scale/pitch/yaw, попробуйте разобраться с порядком
Короче по твоему порядку заработало, я кстати пытался менять XY и Z местами подозревал что то )) но yaw оставался навреху поэтому не помогало, в любом случае огромное спасибо, надо делать именно так как ты сказал. Ну и конечно я не знаю как с этим дальше жить, на ровном месте из неоткуда проблемы )))))
Чтобы оставить комментарий, пожалуйста, войдите на сайт.