Многим известна фишка что для способности целью может являться предмет в инвентаре юнита, это широко используется в доте чтобы применить предмет на себя, дабл клик и усе...
Но вот есть один неприятный баг (в доте тоже) если на юнита наложена одна из опутывающих способностей,
( 'Aens' - Ensnare Ловчий, 'Aweb' - Web Паутина, 'AEer' - Entanglingroots - Гнев Деревьев )
То юнит не сможет применить способность на предмет в инвентаре, игра выдаст ошибку Цель слишком далеко.
Немного теории:
Предметы не передвигаются вслед за владельцем, а остаются скрытыми в том месте где владелец их получил, а когда он решит их выложить они перемещаются в нужное место...
Это досадный баг, который довольно давно не может пофиксить фрог, но вот в доте в сетях вы сидите не так уж часто, а в моей карте сети встречаются каждую игру...
Лекарство от этого недоразумения:
  • Пересоздать предмет при получении баффа сетей (корней), тогда юнит сможет сделать дабл клик по предмету.
Но и тут не все гладко, перечислим проблемы:
  1. Кулдаун, ну сам то кулдаун не сбрасывается, но его анимация идет сначала, не самое лучшее решение.
  2. Прицел, если кто то целился предметом во врага\союзника и получил бафф сетей то ему тут же собьет прицел...
  3. Как нам не пересоздать предмет юниту по 100500 раз, когда предмет кд или на юнита в сетях еще и наложили корни\другие сети...
Думал отслеживать баффы по 0.00 ед. урона, а кд по таймеру и пересоздавать (еще смутно предмтавляю как буду отслеживать кд десятка предметов...
Есть идеи по решению данной проблемы, мб кто то у себя в карте уже смог пофиксить этот баг?

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

SetUnitPropWindow
Спс, что то раньше этой нативки не видел, ну пока сделал на пересоздании предмета, там посмотрим.
`
ОЖИДАНИЕ РЕКЛАМЫ...
0
20
8 лет назад
0
а зачем пересоздавать?
нельзя дропнуть итем и тут же вернуть его?
или дропать итем, отлавливать в переменную, обратно в инвентарь, и потом двигать итем по карте при касте (хз прокнет или нет)
анимация кд хоть и будет обнулена, но время останется тоже самое, а насчет прицела - ну, сложновато в кого-то целиться, если тебя опутали сетями, можно сделать это фишкой (герой кастует сеть, блабла, у пораженных врагов сбиваются прицелы заклинаний и блабла)
0
32
8 лет назад
0
Быстрее чем дропать и подбирать, не говоря о том что юнит может быть скрыт или еще чего (ну вспомни баг ск\пака\дестра и линкен сферы) не хотелось бы у себя такого бага.
Двигать итемы нельзя, тронешь - выпадет на землю, сразу спешу обрадовать - хайдить, двигать и прочие действия с предметами (виджета) пока он в инветаре приводят к выпаданию предмета из инвентаря...
2
23
8 лет назад
Отредактирован Obelick
2
Делать опутывающие заклинания тригерно? Запретить атаку и установить скорость юнита на 0 не сложно.
0
32
8 лет назад
0
Obelick:
Делать опутывающие заклинания тригерно? Запретить атаку и установить скорость юнита на 0 не сложно.
Прошу пример триггерного опутывающего заклинания 1 в 1 как сеть, чтобы без морфов и без подмены юнитов.
Так же скорость юнита если что в 0 не убирается, простыми способами.
Так что в *опу кастом сети, еще больше геморроя.
2
23
8 лет назад
2
quq_CCCP, основная механика корней это остановить юнита и запретить ему атаковать. Изменить скорость - есть такое действие. Запретить атаковать - безмолвие или пламя преисподней (если не ошибаюсь). В обоих случаях есть дебафф. Что еще нужно?
Если надо 1 в 1, то экспериментируй, подгоняй параметры и таймеры. Даже ловчего на летающего юнита можно сделать тригерно.
0
20
8 лет назад
0
Obelick:
для изменения скорости придется пилить систему со всеми итемами, баффами и абилками на мув спид...
0
32
8 лет назад
0
Да, да, только вы забыли одно большое но! Юнит хоть и не может передвигаться но его скорость не равна 0, да и еще установить скорость меньше константной движок не даст.
Юнита нельзя заставить не ходить, ну хоть ты лопни, про морфы с мс 1. даже не рассматриваем, в опу этот костыль.
Удаление 'Amov' тоже не вариант, его нельзя вернуть никак иначе кроме морфа в другого юнита.
0
28
8 лет назад
0
quq_CCCP, константу можно поменять в игровых константах
ещё можно таймером на месте держать его
основная проблема с летающими юнитами
там без морфа ну вообще никак
ssbbssc, есть функция
constant native GetUnitDefaultMoveSpeed takes unit whichUnit returns real
0
32
8 лет назад
0
nvc123:
quq_CCCP, константу можно поменять в игровых константах
ещё можно таймером на месте держать его
основная проблема с летающими юнитами
там без морфа ну вообще никак
ssbbssc, есть функция
constant native GetUnitDefaultMoveSpeed takes unit whichUnit returns real
Спс, но мне морфы юнитов мне противопоказаны.
И как назло переделывать очень много...
Кстати да, второй пункт снимается:
Опутывающие способности и так сбивают прицел и текущий приказ юнита, в чем они даже похожи на станы.
Значит сейчас осталось отследить что предмет в кулдауне чтобы его не пересоздать пока он кд (да в принципе и незачем, юнит всеравно не сможет его применить)
А так же подумать о провке на бафф, все опутывающие способности - негативные баффы, они наносят 0.00 ед. урона при попадании в юнита, сбивая все стандартные лечения (которые сбиваются уроном)
Бафы сети и паутины наносят урон единожды - при попадании.
А вот бафф корней наносит 0.00 ед. при первом появлении в статусе, а так же после исчезновения или удаления.
0
14
8 лет назад
0
Попробуй использовать нативку SetUnitPropWindow
Обездвижить:
SetUnitPropWindow(unit, 0.0)
Вернуть как было:
SetUnitPropWindow(unit, GetUnitDefaultPropWindow(unit))
Не забудь триггерно запретить использовать предметы, которые позволяют телепортироваться (под сеткой они ведь запрещены?).
0
32
8 лет назад
Отредактирован quq_CCCP
0
SetUnitPropWindow
Спс, что то раньше этой нативки не видел, ну пока сделал на пересоздании предмета, там посмотрим.
Принятый ответ
0
20
8 лет назад
0
nvc123:
в итоге мув спуд окажется равен стандартному, несмотря на все усиления\бафы\апгрейды\дебафы под которыми герой находился на момент применения
0
32
8 лет назад
0
IceFog:
Попробуй использовать нативку SetUnitPropWindow
Обездвижить:
SetUnitPropWindow(unit, 0.0)
Вернуть как было:
SetUnitPropWindow(unit, GetUnitDefaultPropWindow(unit))
Не забудь триггерно запретить использовать предметы, которые позволяют телепортироваться (под сеткой они ведь запрещены?).
Ой ну и хрень же этот ваш GetUnitDefaultPropWindow(unit)
Нужно указать в ро сдивг окна указан в градусах, что и берет GetUnitDefaultPropWindow(unit)
но SetUnitPropwWindow - то требует угол в радианах, а не в градусах, если сделать SetUnitPropWindow(unit, GetUnitDefaultPropWindow(unit)) то начнется треш и угар - юнит бегает кругами и не слушается...
Хорошо я сделал дебаг и помотрел Сдвиг окна юнита через GetUnitPropWindow
1.046
Странно в ро же 60 градусов, и GetUnitDefaultPropWindow(unit) тоже возвращает 60.00, а потом таки решил проверить что если при всех действиях смотреть чему равен GetUnitPropWindow и тут меня осенило - 60 * (3.14 \180.)) = 1.046 Сдвиг окна юнита указывается не в градусах а в радианах...
Чтобы оставить комментарий, пожалуйста, войдите на сайт.