Ну давайте и я что-нибудь скажу...
Тосс Тини это полностью кастомный скилл, в котором из стандарта только кнопка каста от Канала. В момент начала каста проверяются допустимые цели вокруг героя, если таких нет - отдаётся приказ "стоп". Иначе - ничего, т.к. всё остальное обрабатывается уже по событию приведения способности в действие. Рандомно выбранный юнит, из числа допустимых, триггерно двигается (по таймеру) из своего местоположения до указанной позиции. Скорость движения юнита расчитывается в зависимост и от дистанции, т.к. он должен преодалеть его за одно и то же время в любом случае (за 1 секунду вроде). При этом финишная позиция является динамической, т.е. какое бы расстояние не было до неё, нужно половину пройти через половину времени, а всю - через всё время. После этого обычное триггерное движение юнита превращается в сигментированный рендеринг позиции юнита относительно прошедшему времени. Что там с броском? И уже после того как всё работает можно прикрутить регулировку высоты юниту. Делается это через раздел где так же регулируется окраска юнита (анимация или спецэффекты, не помню уже). Нужно отметить, что игра игнорирует выполнение этой функции, если для юнита она бесполезна - т.е. если это не является ЛЕТАЮЩИМ или ПАРЯЩИМ. Как же тогда это работает? Мы обманываем игру, и даём нашему юниту абилку "превращение в ворона"/"сфинкс". Это заставляет игру подумать что этот юнит может стать летающим, если сменит форму, а значит и высоту ему тоже можно менять. Далее нужно прикрепить плавное изменение высоты относительно текущего сигмента пути. Тут либо параболические формулы, либо безье, либо механический счёт.
На счёт шипов Лиона - раньше это был стандартный скилл, но потом из-за ряда технических особенностей (неуязвимость в броске, разворот юнитов) его перевели полностью на триггерную основу и теперь даже подбрасывание осуществляется точно так же как я описал выше - через функцию изменения высоты юнита. А рассчёты для этого производятся любым удобным способом.
Например механический счёт, представляет из себя изначальную запись "высоты" и "скорости" её изменения. Пишем что высота равна 0. Скорость равна 10. Далее каждый тик таймера мы уменьшаем скорость на 1 и прибавляем то что осталось в текущей высоте, и выдаём её юниту. В итоге мы получим ряд из +9, +8, +7, +6, +5, +4, +3, +2, +1, +0. А высота будет равна 0, 9, 17, 24, 30, 35, 39, 43, 46, 48, 49, 49... Это мы поднимаем юнита, а как его опускать? Да никак, просто пускай дальше считает ряд чисел +(-1), +(-2), +(-3), +(-4), и т.д. Высота при этом будет плавно понижаться. Здесь главное правильно расчитать сколько времени будет длится подброс и с какой скорости начать, что бы юнит за это время успел упасть (или не упал слишком рано). И когда будешь выставлять высоту юниту, удобнее её умножить на какое либо число. Если будет низко - увеличишь этот множитель, а если слышком высоко - просто уменьшишь его.
Разор это герой из доты, ультимативная абилка которого временно создаёт над ним грозовую тучу, местоположение которой закреплено над героем. Пару раз в секунду из тучи ударяет молния в условно случайного противника (приоритет на героя-врага с наименьшим ХП).
Предполагаю что туча - это дамми, который:
а) атакует нужную цель, и имеет при этом "грозовую атаку"
б) кастует цепную молнию (без отскоков) в нужную цель
Как вариант - да, сделать всё, включая отображение самой молнии, полностью триггерно.
Если стандартная метаморфоза демонхантера не снимается удалением баффа абилки (метаморфозы), что странно, тогда вариант пересадить всё на абилку "элексир ярости", с которой это 100% работает.
Я такое делал через постоянную проверку уровня ХП, и если оно становилось ниже чем было в предыдущий раз - записываю эту разницу в переменную, ( set X = ( сколько было - сколько сейчас ) ). Если X > 0, тогда добавляем это значение к тому что уже хранится от предыдущих проверок ( set HP = HP + X ).
И после этого нужно проверить что набранное значение HP больше чем некоторая доля здоровья (т.е. число помноженное на максимальное ХП юнита). Если больше - то обнуляешь HP (либо уменьшаешь на эначение этой доли) и воздаёшь нужный эффект от срабатывания абилки.
Скилл вполне рабочий, но имеет специфику критов, т.е. с орбами он будет наперекосяк работать (где-то была таблица работы этого эффекта с абилками и предметами из доты - это же топорик против крипов).
Для того чтобы он работал через некоторые орбы его нужно давать после получения героем этих орбов.
Может работать как на здания, так и отдельно на героев (множит урон как крит). При этом ДВЕ такие абилки будут этот урон ПЕРЕМНОЖАТЬ последовательно! (поэтому в доте нельзя было брать больше одного топорика, а так же давать его Кунке).
Ну по идеи прокать будет отлавливаемый ивент смерти виджета.
Но, такой герой может умереть и под аегисом...и его переместит и бафнет.
Потом он умрёт уже под своей ультой...его опять переместит и бафнет?
Extremator, я вроде видел писали что физ урон нанесенный триггерно проходит через доспехи, поэтому просто решил с этим не парится и руну с берсерком дал герою.
Если правильно триггерно наносишь физ.урон, то он и будет работать как физ.урон с руки героя, так же резиститься и блокироваться доспехами. Специфически настроенный урон может и игнорировать доспехи.
Extremator, Просто хотел сделать именно через перерождение т.к. до этого с этой абилкой ни разу не работал. + Такая смерть не вызывает событие обычной смерти юнита - а значит и не пишет в чат "наш герой погиб и т.д.", ещё бонусом идёт отображение КД и то что при недостатке маны она не прокнет, ну и иконка синеет если маны не хватает.
Понятно. Я просто в начале подумал что у тебя всё-таки проходит событие смерти юнита, игра регистрирует гибель героя, и сообщение об его смерти тоже вылетает, враги получают опыт, и т.д. (хз почему, но я представил себе именно так), и уже после этого героя триггерно поднимает там где он был 3 секунды назад. Ну да ладно...
На счёт отрицательного урона через безумие - что мешает дать отрицательный маг.резист герою? И, например, ещё каменный доспех для блокировки физ.урона. Это нам даст уйти от базового баффа стандартной абилки.
А чо, мне нравится. Не скажу что прям под мой вкус, но вполне играбельный ремейк.
Я бы предложил немного изменить описания, но впринципе и так пойдёт.
Например фако того что апперкот подкидывает на 0.75 секунды... Зачем знать точное время? Если юнит всё равно пребывает в стане. Думаю это лишняя инфа, ИМХО.
Не особо понимаю зачем ульт делать именно на механике перерождения, ты реально ловишь его смерть и всё? Я бы через другую пустышку сделал (хотя да, понимаю, смерть юнита это во многих случаях полная его очистка от эффектов... Хотя есть и другие варианты, но да, так проще). Про КД на иконке даже не спрашиваю, это очевидно.
Не знаю что тебе ответить. Для того что бы понимать откуда берётся этот сигнал - надо перелопатить файл ИИ и найти там где и как это вызывается. Дальше уже думать как выключить. Как-то подменить файл ИИ
Раньше я бы тоже сказал что эта кампания на много лучше всего другого просто по определению "качество/объём/время". Но позднее, когда уже для твоего глаза это всё не выглядит как "вау!" по-умолчанию, начинаешь видеть косяки. И чем больше ты всматриваешься - тем их больше.
Скиллы, на первый взгляд, ну просто мега-эпичные, т.к. они отличаются от стандарта. Потом ты уже просто видишь в них отредактированный стандарт. А позднее - малоуместный РО и местами багнутую реализацию. Часть скиллов действительно подходят по ситуации, другие же - ни о чём (по большому счёту, т.е. толк от них есть, но на третьем уровне его так мало, как будто это первый).
За ландшафт ничего плохого не скажу, но думаю не я один находил косяки. Например - огромная нелепая тень в самой первой миссии в самом начале, она падает якобы от стены города, в который мы должны попасть, обойдя весь остров кругом.
По юнитам тоже куча вопросов. Футман имеет 420хп, при этом огр имеет 400хп. Вот в чём огр тут сильнее? Просто груша для битья. То что скелеты с 180-200хп рассыпаются довольно быстро - это, я думаю, нормально. Бугаи по 700хп очень напрягали в своё время, когда у рыцаря на коне всего 800хп.
Миссия с деревнями отличительно топовая во всех смыслах, хоть и почему-то сложная, т.к. орки прут и прут со всех щелей и сносят поселение за поселением. Но сам факт того что нам дали что-то построить, нанимать и улучшать юнитов - просто бомбезно... Ага, особенно когда ты покупаешь отдельно эту кампанию рассчитывая на возможность игры, а тебе продают обрезанный клиент без каких-либо карт и редактора в том числе. И тупо кроме кампании ты ничего не можешь запустить, т.к. просто ничего нет ))
ТС, раз ты описываешь ситуация когда вызываются лаги при открытии "триггера" из-за огромного наслоения if-ов и прочих действий, то тут можно предложить просто немного другой вариант организации всего это уже имеющегося у тебя "завала"...
Я делал так - есть один триггер с событием "приводит способность в действие. В нём запускаются три-четыре триггера по очереди: "cast ITEMs", "cast HEROs", "cast UNITs". В первом идут поочерёдные запуски всех отдельных триггеров кастов предметных абилок. Во втором идут запуски триггеров подписанных как "HERO_NAME cast" Внутри "HERO_NAME cast" идут 2-5 if-ов, которые проверяют абилки конкретно одного героя (это чисто для удобства такая группировка) В третьем идут поочерёдные запуски всех триггеров на абилки не-героев
В итоге имеет всё работает, не смотря на общее нагромождение проверок и экзекутов. С атакой ровно так же - проверка замаха, чек предметов и инветаре, чек абилок, чек баффов.
Можно записывать пары юнитов и при смерти одного из них - убивать его пару.
set UnitsMax = UnitsMax + 1
set UnitsA[UnitsMax] = первый юнит из пары (при этом добавить его в общую группу)
set UnitsB[UnitsMax] = второй юнит из пары (тоже добавить в группу)
Пособытию смерти юнита проверяешь что он находится в группе. Далее ищешь его номер из массива.
set u = юнит который умер
set l = 0 для тела цикла
set n = 0 для результата
loop
set l = l + 1
if u == UnitsA[l] or u == UnitsB[l] then
set n = l
endif
exitwhen l == UnitsMax or n > 0
endloop
Всё, у тебя есть n , по которому можно получить обоих юнитов из ой пары, в которой один умер.
Ред. Extremator
» WarCraft 3 / Как подкинуть противника скиллом?
Тосс Тини это полностью кастомный скилл, в котором из стандарта только кнопка каста от Канала. В момент начала каста проверяются допустимые цели вокруг героя, если таких нет - отдаётся приказ "стоп". Иначе - ничего, т.к. всё остальное обрабатывается уже по событию приведения способности в действие. Рандомно выбранный юнит, из числа допустимых, триггерно двигается (по таймеру) из своего местоположения до указанной позиции. Скорость движения юнита расчитывается в зависимост и от дистанции, т.к. он должен преодалеть его за одно и то же время в любом случае (за 1 секунду вроде). При этом финишная позиция является динамической, т.е. какое бы расстояние не было до неё, нужно половину пройти через половину времени, а всю - через всё время. После этого обычное триггерное движение юнита превращается в сигментированный рендеринг позиции юнита относительно прошедшему времени. Что там с броском? И уже после того как всё работает можно прикрутить регулировку высоты юниту. Делается это через раздел где так же регулируется окраска юнита (анимация или спецэффекты, не помню уже). Нужно отметить, что игра игнорирует выполнение этой функции, если для юнита она бесполезна - т.е. если это не является ЛЕТАЮЩИМ или ПАРЯЩИМ. Как же тогда это работает? Мы обманываем игру, и даём нашему юниту абилку "превращение в ворона"/"сфинкс". Это заставляет игру подумать что этот юнит может стать летающим, если сменит форму, а значит и высоту ему тоже можно менять. Далее нужно прикрепить плавное изменение высоты относительно текущего сигмента пути. Тут либо параболические формулы, либо безье, либо механический счёт.
» WarCraft 3 / Как вернуть окраску юнита
» WarCraft 3 / Атака феникса но с эффектом молнии
а) атакует нужную цель, и имеет при этом "грозовую атаку"
б) кастует цепную молнию (без отскоков) в нужную цель
» WarCraft 3 / Атака феникса но с эффектом молнии
» WarCraft 3 / Заклинание которым можно снять метаморфоз демонхантера?
» WarCraft 3 / Заклинание которым можно снять метаморфоз демонхантера?
Так же можно триггерно снять с юнита бафф метаморфозы.
» WarCraft 3 / За каждый отсутсующий процент здоровья делать что-то
» WarCraft 3 / За каждый отсутсующий процент здоровья делать что-то
» WarCraft 3 / За каждый отсутсующий процент здоровья делать что-то
И после этого нужно проверить что набранное значение HP больше чем некоторая доля здоровья (т.е. число помноженное на максимальное ХП юнита). Если больше - то обнуляешь HP (либо уменьшаешь на эначение этой доли) и воздаёшь нужный эффект от срабатывания абилки.
Ред. Extremator
» WarCraft 3 / Почему может не работать умение "Разгром"?
» WarCraft 3 / Область активирующаяся на определённых юнитов
Сравление типов юнитов (unit-type comparison)
Тип юнита (юнит-инициатор) == Бугай
» WarCraft 3 / Пак способностей - Troll Godslayer
Но, такой герой может умереть и под аегисом...и его переместит и бафнет.
Потом он умрёт уже под своей ультой...его опять переместит и бафнет?
» WarCraft 3 / Пак способностей - Troll Godslayer
Тип оружия - Герой
» WarCraft 3 / Пак способностей - Troll Godslayer
» WarCraft 3 / Пак способностей - Troll Godslayer
» WarCraft 3 / Пак способностей - Troll Godslayer
Например фако того что апперкот подкидывает на 0.75 секунды... Зачем знать точное время? Если юнит всё равно пребывает в стане. Думаю это лишняя инфа, ИМХО.
Про КД на иконке даже не спрашиваю, это очевидно.
Ред. Extremator
» WarCraft 3 / блок урона
» WarCraft 3 / Отсутствие анимации постройки у нежити
» WarCraft 3 / Отметка на мини-карте от ИИ
Ред. Extremator
» WarCraft 3 / Отсутствие анимации постройки у нежити
Вот оно и не отображается повсеместно.
» WarCraft 3 / During The Dark Portal
Ага, особенно когда ты покупаешь отдельно эту кампанию рассчитывая на возможность игры, а тебе продают обрезанный клиент без каких-либо карт и редактора в том числе. И тупо кроме кампании ты ничего не можешь запустить, т.к. просто ничего нет ))
» WarCraft 3 / Много триггерных абилок
В нём запускаются три-четыре триггера по очереди: "cast ITEMs", "cast HEROs", "cast UNITs".
В первом идут поочерёдные запуски всех отдельных триггеров кастов предметных абилок.
Во втором идут запуски триггеров подписанных как "HERO_NAME cast"
Внутри "HERO_NAME cast" идут 2-5 if-ов, которые проверяют абилки конкретно одного героя
(это чисто для удобства такая группировка)
В третьем идут поочерёдные запуски всех триггеров на абилки не-героев
В итоге имеет всё работает, не смотря на общее нагромождение проверок и экзекутов.
С атакой ровно так же - проверка замаха, чек предметов и инветаре, чек абилок, чек баффов.
» WarCraft 3 / Как сменить вид прицела на скилле?
» WarCraft 3 / Связанные юниты
» WarCraft 3 / Связанные юниты
set UnitsA[UnitsMax] = первый юнит из пары (при этом добавить его в общую группу)
set UnitsB[UnitsMax] = второй юнит из пары (тоже добавить в группу)
set l = 0 для тела цикла
set n = 0 для результата
loop
set l = l + 1
if u == UnitsA[l] or u == UnitsB[l] then
set n = l
endif
exitwhen l == UnitsMax or n > 0
endloop