Есть пеший герой, которому способностью "сфинкс" дается полет.
Герой может менять высоту в разных ситуациях, но в какой то момент отображение высоты ломается.
Основной затык в том, что мне пока не удается определить где и когда начинаются проблемы.
Смерть и воскрешение героя не сбивают эффекта, при этом GetUnitHeight возвращает значения, будто герой в воздухе.

Как выяснилось спускать модель не затрагивая UnitHeight
могут "корни" и они у меня используются в паре мест.
Однако, в отличие от "корней" когда происходит этот баг герой может свободно перемещаться,
так что версия с "корнями" либо отпадает, либо это какой то их очень редкий баг.

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

Bergi_Bear:
Кажется я понял в чем дело.

Такое ощущение, что корни/сеть как то фиксируют максимальную высоту полета.
Те. если юнит до корней не поднимался в воздух или поднимался на слишком низкую высоту,
то после корней он забагуется.

Лечиться подъемом юнита верх/вниз сразу после спавна.
После воскрешения нужно повторять фикс.
Как вылечить уже сломавшегося юнита пока не нашел

код
  boolean is_fix = false
  u = CreateUnit(Player(0),'opeo',x,y,0)                   //Создан юнит
  UnitAddAbility(u,'A000'); UnitRemoveAbility(u,'A000')    //Добавление удаление сфинкса
  
  //==========!!fix
   if is_fix {  //После восскрешения следует применить снова
    SetUnitFlyHeight (u,99999,0)
    SetUnitFlyHeight (u,0,0)
   } 
  //==========!!end_fix

  //==========!!BUG
   SetUnitFlyHeight   (u,0,0)                        //До корней высота должна измениться высота хотябы раз (высота должна быть меньше x в моем случае < 100, возможно зависит от высоты рельефа)
   TriggerSleepAction ( 2 )                          //Задержка может быть любой
   DummyAbilityCastL  (u,'A048',1,"entanglingroots") //Дамми каст корней
  //==========!!end_BUG
  
  
  //==========!!ПРОВЕРЯЕМ
   TriggerSleepAction ( 3 )                         //Задержка что бы корни успели кастануться  
   SetUnitFlyHeight(u,40,0)                         //Пробуем поднять юнита () 
   TriggerSleepAction( 1 )                          //Юнит остается на земле
   Msg("GetUnitZ = "+R2S(GetUnitFlyHeight(u)))      //Запрашиваем высоту - высота всегда корректная (и с багом, и без)
`
ОЖИДАНИЕ РЕКЛАМЫ...
2
32
3 года назад
2
Да такая проблема есть и я её даже репортил на сайт, щас посмотрел в своих вопросах и увы ничего не нашел, точно могу сказать подтвердить что это связано с рутами и несёт исключительно рандомный характер.
Я 2 раза такое ловил, в одном я использовал сетку наездников ensnare в другом корни хранителя рощи
1
25
3 года назад
Отредактирован Jack-of-shadow
1
Bergi_Bear:
Кажется я понял в чем дело.

Такое ощущение, что корни/сеть как то фиксируют максимальную высоту полета.
Те. если юнит до корней не поднимался в воздух или поднимался на слишком низкую высоту,
то после корней он забагуется.

Лечиться подъемом юнита верх/вниз сразу после спавна.
После воскрешения нужно повторять фикс.
Как вылечить уже сломавшегося юнита пока не нашел

код
  boolean is_fix = false
  u = CreateUnit(Player(0),'opeo',x,y,0)                   //Создан юнит
  UnitAddAbility(u,'A000'); UnitRemoveAbility(u,'A000')    //Добавление удаление сфинкса
  
  //==========!!fix
   if is_fix {  //После восскрешения следует применить снова
    SetUnitFlyHeight (u,99999,0)
    SetUnitFlyHeight (u,0,0)
   } 
  //==========!!end_fix

  //==========!!BUG
   SetUnitFlyHeight   (u,0,0)                        //До корней высота должна измениться высота хотябы раз (высота должна быть меньше x в моем случае < 100, возможно зависит от высоты рельефа)
   TriggerSleepAction ( 2 )                          //Задержка может быть любой
   DummyAbilityCastL  (u,'A048',1,"entanglingroots") //Дамми каст корней
  //==========!!end_BUG
  
  
  //==========!!ПРОВЕРЯЕМ
   TriggerSleepAction ( 3 )                         //Задержка что бы корни успели кастануться  
   SetUnitFlyHeight(u,40,0)                         //Пробуем поднять юнита () 
   TriggerSleepAction( 1 )                          //Юнит остается на земле
   Msg("GetUnitZ = "+R2S(GetUnitFlyHeight(u)))      //Запрашиваем высоту - высота всегда корректная (и с багом, и без)
Принятый ответ
0
32
3 года назад
0
Как вылечить уже сломавшегося юнита пока не нашел
Это было очень давно, кажись лечилось смертью и воскрешением, каких то адекватных способов лечения такого поломанного юнита не находил
0
25
3 года назад
0
Bergi_Bear:
Не, смерть/воскрешение не помогают, по крайней мере с героями это не сработало. Ну в любом случае вроде как фикс страхует от подобных ситуаций, если пробрасывать его на спавне и воскрешении.
0
32
3 года назад
0
Просто дебажить это смысла не имеет ибо как ты уже и сказал, GetUnitHeight возвращает высоту правильно, проблема чисто визуальная
Чтобы оставить комментарий, пожалуйста, войдите на сайт.