5

» WarCraft 3 / [JASS] Оптимизация

Эх... опять не договариваю я...
Это не бред, ибо на время действия способности создается один триггер на отлов атаки и урона именной одной взятой цели, а не нескольких, как ты мне предлагаешь. Ибо при включенной способности каждый атакованный будет проверятся, а скорость-то велика (менее 1 раза в 0.02), тем самым пойдет конкретная нагрузка с перезапусками логических и поиск цели в массивах. А с моим способом проверяется только единственный атакованный с запуском только одного массива, а потом удаление триггера, дабы триггер более не проверял атакованного или получившего урон и не нагружал варчик.
Надеюсь толково объяснил почему производительность больше?
5

» WarCraft 3 / [JASS] Оптимизация

ну так вместо 3 триггеров можно юзать 1
Согласен использовать лишь для пассивок. Для активного режима способности используется
EVENT_UNIT_ATTACKED
только одна боевая единица, в силу этого триггер не будет реагировать на другие атаки. Тем самым повышается производительность.
в функции SkillW_A_Func_Adder переменная левел юзается только 1 раз а значит нафиг не нужна
Верно, как-то не сообразил.
также не стоит писать в условиях большой код
С этим спору нет, но как я погляжу в моем коде особых усилий не приложено. Однако я собираюсь еще впихнуть одну проверку на неуязвимость от дядьки DioD'а из wc3c и уже после этого, думаю, возможен такой бажок.
5

» WarCraft 3 / [JASS] Оптимизация

что за бред ты пишешь
Разве бред? В карте всего лишь 3 триггера с таким евентом. Два для пассивок первой и второй способности, третий для активного режима. В производительности, думаю, слабо видны изменения. А есть предложения помимо евентов? Что мне действительно нужно, так это обращение внимания на функции, а не поиск проблем в евентах.
5

» WarCraft 3 / [JASS] Оптимизация

nvc123:
Верно, многих отлавливаю, но в случае активного режима способности проделывается как раз-таки отлов только одного.
можно создать 1 триггер с событием
TriggerRegisterAnyUnitEventBJ(trg, EVENT_PLAYER_UNIT_ATTACKED)
и обрабатывать в нём всех юнитов которые атакуют
а не плодить кучу триггеров с одинаковым событием
и не смотреть на то как они отбирают друг у друга процессорное время
Насколько я понял, ты предлагаешь во время способности включать сия триггер, а по завершению вырубать?
Но как я определю нанес ли Герой урон атакованному? Ведь флудить в сия триггере
EVENT_UNIT_DAMAGED
очень плохо. А если еще один триггер создавать с отловом урона, то все равно придется обращаться к массиву и искать нанесшего урон и получившего урон.
А так выходит сразу отлов атаки => отлов урона => уничтожение триггера и обнуление массива. Иль это медленней нежили создание системы по отлову атаки и урона?
5

» WarCraft 3 / [JASS] Оптимизация

Я кажись не правильно объясняю... поэтому совет будет один, протестировать. Может тогда поймешь чего я хочу.
5

» WarCraft 3 / [JASS] Оптимизация

SkillW_E_Func_GetTriggerIndex - выдает порядковый номер триггера из массива.
SkillW_E_Func_GetUnitIndex - выдает порядковый номер героя из массива.
SkillW_E_Func_TargetActions - отвечает за отлов атаки и урона.
SkillW_E_Func_AreaActions - отвечает за поиск цели.
SkillW_E_Func_Periodic - отвечает за время действия и обнуления массива.
SkillW_E_Func_Condition - отвечает за использование способности.
Clamp:
Или я проглядел какой-то подводный камень?
Причина в том что Герой меняется на Героя имеющего перезарядку атаки =0.00, тем самым атака зависит только от анимации, но этот сменный не имеет скорости ходьбы, дабы отрубить кнопку Move, иначе игрок мог запросто нажимать ПКМ и тем самым сбивать атаку сменного героя.
По поводу скорости, дается аура (торнадо), что дает макс. скорость атаки и ходьбы.
Урон зависит от ловкости, тем самым здесь участвует система добавления характеристик, в данном случае атаки. Урон же, дается только на одну атаку, поэтому я и мучаюсь с этим отловом атаки и урона.
Вроде бы пояснил, что мог.
К тому же я кинул карту с героем, если кому угодно, может протестировать героя и поделиться своим впечатлением.
НО предупреждаю, что Третья способность еще не оптимизирована как мне хочется, в силу этого из-за нее во время теста могут быть лаги.
5

» WarCraft 3 / [JASS] Оптимизация

Из РО.
Пассивно дает шанс при атаке нанести многократный урон и дает шанс избежать любой урон, а так же увеличивает добавку к ловкости за каждый уровень.
При использовании на время действия способности Герой приобретает максимальную скорость и телепортируется к случайному врагу, что находится в области действия. Если враг герой, то наносит доп. урон, иначе урон снижается.
Вот, вроде бы, все описано как есть.
5

» WarCraft 3 / [JASS] Оптимизация

Clamp, спору нет. Тогда тебе задачка, как сделать, чтобы функция на поиск цели (SkillW_E_Func_AreaActions) запустилась по повторной после того как Герой нанесет урон выбранной цели?
Поясняю, сия функция находится ниже чем отлов урона, далее сия функция требует целочисленную (index героя).
Запустить нативкой ExecuteFunc не выйдет, в силу требуемой целочисленной.
5

» WarCraft 3 / [JASS] Оптимизация

Clamp, ты кажись меня совсем ребенком считаешь. Сия фокус мной уже давно используется.
5

» WarCraft 3 / [JASS] Оптимизация

quq_CCCP, это и есть системы от Bribe и от Nestharus. Причем у последнего раза в три круче, насколько я знаю.
Clamp, прикол в том, что твоя система не ловит урон от атаки, она ловит любой урон.
Дядьки, есть еще предложения как повысить производительность способности, кроме переделки системы отлова атаки?
5

» WarCraft 3 / [JASS] Оптимизация

Clamp:
DazzleFirst, xgm.guru/p/wc3/catch-dmg
При наличии понимания работы варкрафта система пишется за час ленивого написания.
С этим спора нет. Подобие этому я делал и выходило довольно не плохо, но у меня были утечки и я тупо удалил весь код не разбираясь где утечки.
Так же как-то пробовал из хейва от дядьки Bribe брать систему отлова урона, но там много чего, что мне не нужно, ибо мне нужно отловить чисто урон от атаки. В силу этого не обойтись без еще одного события EVENT_UNIT_ATTACKED и дополнительной логической, которая будет во время любого урона, кроме атаки менять свое значение.
5

» WarCraft 3 / [JASS] Оптимизация

nvc123: единожды для 1 юнита
quq_CCCP:
навороченной системы отлова физ урона
Что-то подобное хотел сделать, но не вышло из-за уделенного времени, ибо я студентик которых еще поискать надо - ленивый до чертиков.
nvc123:
мало вероятно что ты отлавливаешь лишь 1 атакующего юнита за всю игру
Запамятовал... Верно, многих отлавливаю, но в случае активного режима способности проделывается как раз-таки отлов только одного.
То есть, сначала периодическая функция проверяет есть ли в массиве выбранный враг, если нет, то вызывает функцию SkillW_E_Func_AreaActions, что в свою очередь ищет этого врага и по новой запускает триггер на отлов атаки и урона от Героя. Если триггер на отлов был запущен иначе, чем отлов, то триггер уничтожается и обнуляется, в иных случаях действует по заданному сценарию.
Вот весь секрет триггера на отлов урона и атаки.
5

» WarCraft 3 / [JASS] Оптимизация

создавать триггер ради того чтобы его уничтожить
Так и есть, ибо реагировать на событие EVENT_UNIT_DAMAGED или EVENT_UNIT_ATTACKED может только триггер, а он нужен только единожды - на один удар.
5

» WarCraft 3 / [JASS] Оптимизация

С юзердатой как-то не по себе...
А по поводу массива целочисленной с индексом боевых единиц - подобие хештаблицы. Читал как-то на хейве, что хештаблицы медленней чем массивы, в силу этого решил начирикать код для способностей.
Но мне до сих пор интересно... читал разок на сия сайте, что уничтожение триггера - хреновая вещь. Но до сих пор не было такого замечания. Далее никто ничего не промолвил про имитацию атаки. Неужто там везде так хорошо?
nvc123:
DazzleFirst, вот тебе имба способ
создаёшь массив интежеров в котором хранятся индексы юнитов
обращение к массиву через хэндл
Отдельное спасибо за такой способ. Как-то своим мозга не смог сообразить.
5

» WarCraft 3 / [JASS] Оптимизация

Помимо этой способности имеется еще две и порой в них тоже ищется через массив...
Спасибо, учту.
5

» WarCraft 3 / [JASS] Оптимизация

Рано утром мудренее...
Вот и утро наступило. Прочитал по новой, что ты хотел сказать и понял.
Да, существует такой бажок, однако, если использовать пустую боевую единицу, что будет атаковать, то все предметы и пассивные способности надо будет передавать этой пустышке, но тем самым не будет бага. Это еще не рассматривая характеристики основы и баффов и т.д. и т.п.
Так что это не вариант использовать пустышку ради исправления всего лишь одной атаки.
Загруженные файлы
5

» WarCraft 3 / [JASS] Оптимизация

скорость перемещения 1 ставь, делов то.
В связи с этим игрок может отменить атаку во время действия способности тупо кликая правой клавишей мыши.
Скажем сделал это благодаря Xin'у из DotA. Однако мой герой может перемещаться, если врага в области действия нет (смена ID героя) и главная особенность, способность имеет время действия.
quq_CCCP:
я про оформление в отдельную функцию а не про не юзай буль...
С этим спора нету, но для простоты запихнул в одну функцию, чтоб самому не париться и в каждом случае урона добавлять логическую.
quq_CCCP:
эмм а зачем? Ты же про оптимизацию спросил, лишние действия...
Так уж и быть... уговорил. Удалю ради одного тебя.
quq_CCCP:
ты на на содержание а на оформление смотри...
Позволь повториться... Я использую фильтр в разных случаях. К примеру хочу нанести боевым единицам с иммунитетом к магии иль хочу взять всех, кроме тех, что в отдельной группе.
Задача состоит в оптимизации кода способности (активный режим и все его составляющее), а не функций что используются часто и уже оптимизированы до минимума.
Но в любом случае спасибо.
5

» WarCraft 3 / [JASS] Оптимизация

SetUnitPosition
В силу того что способность включает в себя смену героя что имеет скорость ходьбы 0 то переместить его нативками типа
quq_CCCP:
SetUnitX\Y
не представляется возможным.
quq_CCCP:
UnitDamageTargetEx
Сия функция нужна для нанесения урона и внедрения логической, что используется в пассивном режиме способности. Если убрать логическую, то любой урон регистрируется пассивным режимом способности, что мне не нужно, а нужно только регистрация от атаки и ее урона.
quq_CCCP:
Проверка на 'Aloc'
На всякий случай проделал сия проверку.
quq_CCCP:
Туча констант
Исправляется сия ужас обычной оптимизация прогой от Vexoriana.
По поводу
quq_CCCP:
Вот как выглядит нормальный фильтр без локалок и прочего
Есть ли смысл проверять на наличие здоровья? Ибо логическая "not IsUnitType(GetFilterUnit(),UNIT_TYPE_DEAD" прекрасно работает. К тому же после смерти боевая единица может повысить свое здоровье. Простой пример: герой погиб,но через триггер ему дали опыт, от чего тот повысил уровень, в силу этого он уже имеет больше здоровье чем .405 ед.
Так же фильтр я использую в разных случаях и он имеет некую универсальность.
5

» WarCraft 3 / GetUnitsInRangeOfLocAll?

Насколько я помню, так же исправляет bj функции и программка Wc3map Optimizer от Vexorian. Однако я не уверен в этом.
5

» WarCraft 3 / Попадание пуль в стену.

Исправляется путем вставки иной точки вместо Point1, к примеру на TempPoint, в триггере, что вызывается интервалом.
Вот исправленный вариант твоей ужасосистемы... и как писал тут дадька nvc123:
вот только эта система генерирует точки кучами
На что ты должен обратить внимание в первую очередь!
И забыл написать, что так же последняя пуля тоже не учитывается. Лечится прямыми руками и внимательным чтением ресурсов данного сайта. Ибо тем по этому поводу тут полно...
Загруженные файлы
5

» WarCraft 3 / Попадание пуль в стену.

Как я и писал тебе в ЛС. Проблема в том что я использовал твою точку udg_Point1 в триггере с интервалом и после использования я ее удаляю. В силу этого остальные 3 пули создаются в центре карты.
5

» WarCraft 3 / GetUnitsInRangeOfLocAll?

Скачай JNGP - Jass New Gen Pack. Там запускаешь триггеры и с зажатым Ctrl кликаешь на функцию выделенную красным цветом, далее вылетит окошечко где написан "скелет" этой функции. Такими простыми движениями узнаешь, через какие нативки сделана сия функция.
5

» WarCraft 3 / Попадание пуль в стену.

Все прочекал и прекрасно работает.
Однако оптимизировать не собираюсь. Придется тебе самому сия тяжким трудом заняться.
Загруженные файлы
5

» WarCraft 3 / Попадание пуль в стену.

Попробуй сделать наработку в которой регион будет двигаться в каждом интервале и проверять на наличие декораций в регионе.
Или используй наработку дядьки на хейве под названием, вроде, IsTerrainPathing.
(Надеюсь за перевод на другой ресурс меня не изнасилуют дядьки модераторы)