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

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