28

» WarCraft 3 / Утечки группы.

EugeAl, если не нужно хранить коллекцию юнитов, можно вообще их даже в саму группу не добавлять. Просто в Enum передавать фильтр с нужными дейтсвиями, а самом фильтре либо возвращать false, либо ничего. Я такой способ уже давно практикую.
28

» WarCraft 3 / Чем можно заменить "TriggerRegisterTimerEventSingle"?

Хм, а как понять, что функция "вредна" и создаёт утечки?
Создают утечку не функции, а автор карты. Надо просто следить за созданием объектов и ненужные удалять.

Если вы на рефе, есть либа, которая исправит все утечки.
28

» WarCraft 3 / Чем можно заменить "TriggerRegisterTimerEventSingle"?

Как я помню, код, подсвеченный красным цветом, вызывает утечки
Абсолютно точно нет.

Ничем не заменять, абсолютно безвредная функция.
function TriggerRegisterTimerEventPeriodic takes trigger trig, real timeout returns event
    return TriggerRegisterTimerEvent(trig, timeout, true)
endfunction

function TriggerRegisterTimerEventSingle takes trigger trig, real timeout returns event
    return TriggerRegisterTimerEvent(trig, timeout, false)
endfunction
28

» WarCraft 3 / JNGP: ReBuild by Enobraed

Посмотрел vrJass, при беглом осмотре всё оттуда есть в ZINC. Ладно бы проект обновлялся, но последний релиз был в 2016.
28

» WarCraft 3 / JNGP: Rebuild от PT153

SсRealm, первый вариант есть, надо включить Colorizer. Но в моих настройках он офается, были с ним какие-то проблемы + я описания держал в таблице и раскрашивал скриптом по ключевым словам.
Что касается остального - моя сборка носит чисто косметический характер: дополнить Rebuild недостающими файлами и обновлениями. Есть, например, сборка от moyack, там куча дополнительных утилит. Или вот от Enobraed.
28

» WarCraft 3 / Кривая Безье

В далёком 2021 делал для кого-то примеры того, как использовать Безье в варе.
Пример кубической Безье. xgm.guru/files/100/319649/comments/525358/Bezier_example_1.w3m
Тут рабочий просто "бежит" по кривой построенной на основе 4-х точек.
Пример квадратичной Безье. xgm.guru/files/100/319649/comments/525358/Bezier_example_2.w3m
Тут рабочий движется к пехотинцу по воздуху. Из опорных точек можно установить только ту, что в воздухе, указав её высоту и расположение на линии между пехотинцем и рабочим.
28

» WarCraft 3 / Не отображается текст в WarCraft reforged

Tony_North37, какой язык в редакторе в игре? Точнее, какой язык у самой карты стоит основным.
28

» WarCraft 3 / Не отображается текст в WarCraft reforged

Давай так попробуем.
В Warcraft III\_retail_\fonts расположи файл. Папку fonts нужно будет создать.
Далее нужно будет активировать этот .reg файл (включает локальные файлы для игры).
28

» Wisp TD / Скачать карту

konvan5, нет. Но дать возможность скачать без авторизации всё же стоит. Так-то карта выложена и на EpicWar, и на maps.reforged.com.
28

» Администрация XGM / Иконки

А можно ли указать стиль? Classic/sharp или solid/regular/light/duotone/thin?
28

» Администрация XGM / Плитки навигации

Было бы неплохо сделать перенос заголовка, если нет описания.
Uploaded files
28

» WarCraft 3 / Не отображается текст в WarCraft reforged

Решается также, как и на обычном варике - через локальные файли и закидыванием шрифта с ру символами.
28

» WarCraft 3 / 16. Функция как объект

без нового потока смысл был бы нулевой в этой функции.
Абсолютно нет, это всё ещё вызов условий триггера и всё ещё вызов функции из любого места кода (о чём и говорится в цитате из этой статьи).
Я всегда считал, что TriggerEvaluate не создаёт свой поток, поэтому эта функция и быстрее TriggerExecute. И поэтому для создания потоков я использовал .execute(). А оно вон как на самом деле: TriggerExecute медленный из-за поддержки вейтов.
Показали бы конкретику - карту без этой фичи и с ней, и что она конкретно дает разрабу
Читаем статью, получаем ответ на вопрос.
28

» WarCraft 3 / 16. Функция как объект

Функция, как объект, имеет некоторые преимущества - метод evaluate позволяет совершать вызов функции из любого участка кода, даже если место вызова находится выше места объявления функции. Метод execute делает то же самое, но при этом порождает новый поток, однако, выполняется быстрее старого доброго ExecuteFunc.
И может так и было, когда JassHelper только создавался, но я сейчас сам протестировал на 1.26, TriggerEvaluate действительно создаёт свой поток. Тогда в execute() нет смысла кроме вейтов.
Забавный факт: execute() не возвращает значение, даже если оригинальная функция это делает. Почему? Vexorian решил, что это не нужно. 🤣

Не удивлюсь, если TriggerExecute на самом деле нифига не быстрее ExecuteFunc.
Uploaded files
28

» WarCraft 3 / 16. Функция как объект

"поиск" присутствует только в контексте обычных структур, но это даже не поиск, потому что vJass прекрасно знает, какой индекс свободен во время аллокации новой структуры указанного типа. Выходить за лимит в 8к не рекомендуется, иначе во время каждого обращения к атрибуту или перезаписываемому методу будет происходить резолв массива по индексу структуры.

ScorpioT1000, так а причём тут структуры, если речь про функции и их "интерфейсы"? Структуры другой разговор.
28

» WarCraft 3 / 16. Функция как объект

ScorpioT1000, никакого поиска и заполнения дырок нет. Если у тебя в коде 1000 функции типа takes integer returns nothing, а в качестве переменных юзается 5, будет создан массив триггеров и 5 триггеров только для этих 5 функций.
28

» WarCraft 3 / 16. Функция как объект

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

» WarCraft 3 / 16. Функция как объект

Не очевидно, но evaluate и execute вызывают новый поток, со своим оп лимитом
evaluate не создаёт.

И правда, какая разница, в насколько слоупочный код оно под капотом развернётся? Ведь главное это удобство. Даже если оно в 1фпс исполняться будет.
В ни насколько не слоупочный код. По результату тоже самое, что и сохранение имени функции в хеш и её последующий вызов через ExecuteFunc. Только в случае vJass юзается массив (быстрее хеша) и TriggerExecute (быстрее ExecuteFunc). Так что юзаем vJass на зло всем чистожассерам, которые вместо глобалок хеш юзают (а такие есть). 🤣

Правда, не нравится мне, что эта фича плодит триггеры. Возможно, надёжнее будет всё тоже самое делать через глобальные поля и boolexpr. Хоть и выглядит уродливо.
Будет тоже самое, только руками. В чём смысл?
28

» WarCraft 3 / JNGP: ReBuild by Enobraed

А почему до сих пор не утверждено?