28

» WarCraft 3 / Способность: повышение атаки при каждом ударе

А этот парень что-то знает... ))
Это пункт я объяснил. В фильтрах событий, GetFilterUnit() как правило возвращает юнита, что вызвал триггер.
))
Это, в общем-то и есть boolean, но через функцию.
ты думаешь что объект group - это плохо, а большое количество лишних объектов event - это нормально (если не сказать "хорошо")
Нет, не думаю, вопрос только в том, насколько лишними эти объекты будут.
Вообще - пруф в студию.
Выше.

В каждой карте, когда создаётся объект, ей даётся свой ID, который на 1 больше предыдущего ID. Так вот, если коротко, то там создаётся объект и его ID вычитается от наименьшей возможной ID ( 0x100000 ), то есть если ID нового объекта - 0x100512, то разница будет равна 0x512. Значит на карте примерно 0x512 объектов. Вот таким нехитрым образом и работает данный счётчик.
Понятно, но почему он тогда в -100 ушёл?
Вот скрин, тут не -100, но меньше нуля.
А ещё мне кажется, что цикл создания локаций может никогда не закончится, потому что мы зануляем next, если index != previndex + 1.
Ещё по поводу объектов: image и player имеют ID куда меньше 0x100000, но тоже объекты.
Extremator:
Ооо... далеко пойдёшь...
Спасибо)
ClotPh:
событие: юнит атакован обладателем пассивки Страшный Топор"
Такое есть, делаем проверку в фильтре этого условия.
28

» WarCraft 3 / Способность: повышение атаки при каждом ударе

А ещё иногда при нажатии на ESC счётчик на некоторое время увеличивается на несколько сотен, а потом вновь возвращается назад. Странно всё это, лучше лича об этом спросить.
28

» WarCraft 3 / Способность: повышение атаки при каждом ударе

Пока триггер существует, существуют и все зарегистрированные события на уже несуществующих юнитов.
У меня при нажатии ESC ничего не происходит.
А почему этот счётчик верен?

Хм, а сейчас заработало.
Крутой счётчик, в -100 ушёл.
28

» WarCraft 3 / Способность: повышение атаки при каждом ударе

Ни разу не сталкивался, пример есть? С условием, что атакующий какой-то один герой
Так это событие будет срабатывать на замах любого юнита, отсеять ненужных можно в фильтре или событии. Факт в том, что срабатывать будет.
У меня лагало, но атакующих юнитов было много. Также в этом триггере была сложная функция. Решил проблему отключения выполнения сложной функции на некоторое время для каждого определённого юнита.
В частности, quq_CCCP меня ругал за то, что я в своей карте использую это событие.

В любом случае, оба способа не гарантируют, что юнит-таки получит урон, но первый способ проще.
8gabriel8:
человек жаловался в своё время, что через минут 10-30 интенсивного спавна с этим добавлением события начинало сильнейше лагать.
Помню-помню такое, но в это слабо верится, потому что кто-то более разбирающийся говорил, что как только юнит удаляется, а все ссылки на его хендл обнулены, то и все зарегистрированные события для него удаляются. Лаги может вызывать много чего, если неразумно использовать.

А вообще тут опять ушли от вопроса и начали холивар об оптимизации)
28

» WarCraft 3 / Дамми

Снаряд летающий? Ещё может быть у стенки есть какие-то настройки, которые не позволяют ей пропускать через себя снаряд.
28

» WarCraft 3 / Способность: повышение атаки при каждом ударе


Способ с событием Вся карта и условием отсеивающее ненужных юнитов.
Плюсы.
  • Простой
  • Не нагружает игру
Минусы.
  • Зарегистрированный юнит возможно так и не будет атакован

Способ Extremator.
Плюсы.
  • Регистрирует не всех юнитов.
Минусы.
  • Для верной работы требуется создание доп. объектов.
  • Постоянно срабатывает во время игры.
  • Зарегистрированный юнит возможно так и не будет атакован, так как UNIT_ATTACKED срабатывает при замахе.

сильнейше лагать
Сильнейше лагать будет и от UNIT_ATTACKED, так что такой способ определённо не выход.
8gabriel8:
И есть ведь вроде действие, которое возвращает изначальное состояние триггера до добавления в него событий, условий и действий?
Есть такое, но я не знаю, так ли оно работает, как ты описал.
native ResetTrigger takes trigger whichTrigger returns nothing
28

» WarCraft 3 / Способность: повышение атаки при каждом ударе

создаёшь группу
Но зачем, когда можно просто регистрировать во время входа. 1 добавленное событие проще 1000 срабатываний триггера с проверкой.
Само событие UNIT_ATTACKED сильно нагружает игру
28

» WarCraft 3 / Способность: повышение атаки при каждом ударе

указал в скобках +фильтр, тебе не кажется, что это что-то должно значить?
В фильтре можно только прочекать GetFilterUnit(), а для события получения урона GetFilterUnit() возвращает наносителя.

Да и как ты проверишь, что для этого юнита уже зарегистрировано событие без создания доп. костылей?
Само событие UNIT_ATTACKED сильно нагружает игру, потому что срабатывает каждый раз при замахе. У меня из-за частого срабатывания этого события сильно глючила игра. А событие на вход во всю карту срабатывает 1 раз за игру.
Решение Extremator требует сохранения boolean, которое будет отвечать за регистрацию такого события и будет уникально для каждого юнита. И оно также может вызывать лаги. Потому с точки зрения оптимизации и с точки зрения простоты способ ниже самый лучший, если получить урон может любой юнит. Если не любой, то просто в условии или в фильтре отсеиваем ненужных.
Событие. Юнит - Юнит входит в область Вся карта.
Действие. Триггер - Добавить событие такому-то триггеру Вошедший юнит Получает урон.
28

» WarCraft 3 / Дамми

Какая?
Принадлежность точки сектору. Я не смог найти эту наработку в поиске, почему-то.
28

» WarCraft 3 / Дамми

А сейчас эта функция есть? Я не могу найти эту наработку.
28

» WarCraft 3 / Способность: повышение атаки при каждом ударе

Ведь можно вешать только на тех, кто будет атакован с такой абилкой... Нее?
Но ведь атакованы могут быть все.
Extremator:
Нее?
И каждый раз, когда юнит будет атакован юнитом со способностью X, будет добавляться событие, из-за чего триггер будет срабатывать кучу раз для атакованного юнита.
PT153:
UNIT АТАКУЕТ
Его просто сделать, если добавить фильтр в событие UNIT_ATTACKED. Фильт отлавливает только того, кто атакует, как ни странно.
28

» WarCraft 3 / Дамми

юнит – враг, сравнивая игроков
Есть такая функция
constant native IsUnitEnemy takes unit whichUnit, player whichPlayer returns boolean
Используй её.
А куда условие добавил? В той формуле не передаются юниты или игроки.
В boolexpr точно работает GetFilterUnit(), насчёт остальных таких нативок сказать не могу, но они точно не работают в boolexpr у событий.
28

» WarCraft 3 / Дамми

А стенка - здание?
При попадании можно стенку сразу удалять RemoveUnit, а для проигрывания анимации нужно в позиции стенки создавать и сразу удалять эффект, который использует модель стенки.
Atesla:
у меня из-за двух условий булэкспр "сдувался"
Что это значит? Распиши поподробнее, можешь код кинуть.
28

» WarCraft 3 / Как скрыть характеристики врагов ?

на гуи просто так дать и убрать?
Ну да, функция на Jass и в гуи одинаковая.
28

» WarCraft 3 / Дамми

С каких пор боолэкспры багуются? Использую их и всё работает хорошо.
Стенка же юнит? Во время смерти убери поставь в SetUnitPathing на false.
28

» WarCraft 3 / Какую версию jasshelper лучше использовать?

Принятый ответ
На w3c.net есть самая оригинальная, её лучше и использовать.
28

» WarCraft 3 / Как копировать данные ландшфат?

Вообще, вроде бы рельеф можно перенести, скопировав из .mpq карты какой-то файл, но я не знаю какой.
28

» WarCraft 3 / Система стана

насколько помню с этим была какая то проблема, в доте почему не юзнули
Я вот поэтому многие механики игры и не использую, потому что иногда такие сюрпризы получаются.
28

» WarCraft 3 / Система стана

Как бы флаг стана используют 100500 стандартных дисейблов в варе, смерчь, огненная сетка, и многое другое.
Я имел в виду только те способности, что используют бафф стана BPSE. Но даже из этого есть выход, нашему стану мы даём кастомный бафф.
PT153:
Но в таком случае придётся отказаться от других станящих способностей.
Так что не придётся.
Всё. Кастомная система баффов готова.
Только не баффов, а станов.
28

» WarCraft 3 / Способность: повышение атаки при каждом ударе

А как создать событие Получает урон,
Есть для определённого юнита. Если есть юниты на карте, регистрируем для них. Для юнитов, что создаются во время игры, надо сделать такой триггер.
Событие. Юнит - Юнит входит в область Вся карта.
Действие. Триггер - Добавить событие такому-то триггеру Вошедший юнит Получает урон.
28

» WarCraft 3 / Способность: повышение атаки при каждом ударе

То есть если нет таймера, то он создаст его, а если таймер есть, то он увеличит уровень способности? (я немного запутался просто)
Да, ведь так должен спел работать? Я из описания вопроса так понял.
И такой способ для события Получает урон?
Событие "Юнит атакован" срабатывает во время замаха. Это можно абузить. Для каждого юнита на карте нужно зарегистрировать событие по получению урона. Для каждого, потому что общей такой функции нет.
28

» WarCraft 3 / Система стана

Потеря очереди приказов (у юнита) из-за такого стана не играет для вас вообще никакой роли?!
Это к кому обращение? У меня не играет, потому что.
PT153:
у меня это делается на юнитов, которых никто не контролирует
Да и у способа UrsaBoss не должно быть прерываний текущей очереди приказов.

Делается очень просто.
На каждого юнита приходится 1 число. Как только он получается стан, это число увеличивается на 1. Как только какой-то стан истекает, число уменьшается на 1. По истечению стана проверяем, чему равно число. Если 0, то снимаем бафф. Если больше 0, то ничего не делаем.
Чтобы было всё нативно, используем такое наложение стана.
UrsaBoss:
Один дамми молот бурь с 0 времени стана (или -1)
Далее хештаблица и таймер, сохраняешь юнита по хендлу таймера и запускаешь его на нужное время
Всё. Кастомная система баффов готова.

Но в таком случае придётся отказаться от других станящих способностей.
28

» WarCraft 3 / Почему нельзя вызвать через code переменная?

даже через интерфейс то пашет а если без него нет..
Не, не надо создавать переменные типа code. Просто пишешь имя функции, а после неё сразу .evaluate() или .execute(), если нужно создать новый поток.
28

» WarCraft 3 / Копирование триггеров в war3map.j

какой jasshelper в блокноте?
Прочитай мануал к jasshelper, его можно вызывать без JNPG.
28

» WarCraft 3 / Способность: повышение атаки при каждом ударе

крутил-крутил-вертел код, сделал так, вроде, работает, но мне кажется, что можно лучше
У тебя всё равно плодятся таймеры при каждом замахе. Через несколько минут игры будут лаги. Лучше глянь сообщение над своим.
Они бы не плодились, если бы была проверка на наличие способности, которую добавляешь (если уровень способности больше нуля, ничего не делаем). Но такой проверки нет.

Нашёл ошибку в своей реализации, исправил.