A unit will always keep a tiny bit of memory, even when removed properly. 0.04 kb and unpreventable.
Вдруг глобальная пользовательская ссылка на юнита, когда её переназначают на другого юнита, тоже оставляет утечку в памяти, тип object же?
Хотя нет, точки и группы создают же объект, а эта просто ссылается.
Сделать двух одинаковых юнитов, но у одного будет способность Тёмный (Орда) с превращением во второго, а у другого невоисприимчивость к магии. Исследование будет в требованиях к Тёмный, так все твои юниты после завершения исследования перевоплотятся в невосприимчивых к магии. Это без триггеров;
Делаешь пустышку с требованием исследования, своему типу юнитов даёшь эту пустышку, после завершения исследования блокируешь пустышку и выбираешь всех юнитов твоего типа у игрока, делаешь ещё триггер, что если юнит входит в игровую область или меняет владельца и у его владельца изучено исследование, то дать юниту способность.
Здесь такие же картоделы, как и ты, а не служба поддержки World Editor от Blizzard, чтобы дать «простое решение».
Ты уже озвучил решение, триггерно заблокировать способность у игрока, а после исследования разблокировать.
Если не поможет, то будет смысл спрашивать.
В конкурсе мини-игр есть такие карты, например, Mazer.
Не могу найти темы с конкурсом, там в комментариях ещё были да это она и оказалось, в архиве Mazer и BlastBusters
Есть карты, куда импортирована dll renderedge, не все из них у меня работают на основной версии варика, потому все их запускаю на старой версии варика, которая перегружена всякими утилитами и модификациями. Так вот в теории эта dll позволяет использовать возможности renderedge у любого пользователя, который запустил карту, пусть на практике иногда это не получается.
Да нормальные вопросы. Хочется использовать утилиту не только для себя, а у всех игроков в карту, даже если они её не устанавливали. В карты с мемхаком ведь можно играть без мемхака, вот и с этой охота так.
статья по ссылке неплохая, но ей не хватает информации по объёму каждого типа утечки памяти и информации по юнитам, будут ли переменные типа unit расходовать больше памяти, чем юниты сами по себе, одинаковы ли в этом плане bj_-глобалки и пользовательские глобалки?
JackFastGame, тесты показывают, что созданный последним юнит почти полностью синхронизирован с главным юнитом, предпоследний чуть больше тормозит и так далее до первого - самого медленного. Пробовал и циклом отдавать приказы, и отдельным триггером для каждого клона, но всякий раз чем младше клон, тем он быстрее реагирует.
Как бы продолжу тесты, меняя очерёдность отдачи приказов и принадлежность разным игрокам, но это скорее из-за интереса к механикам игры, чем в надежде решить проблему. Но это точно показывает, что дело не только в частых приказах, а в необходимости времени на исполнение каждого приказа. Разные игроки для клонов работают без задержки.
Вариант такой есть: делаешь морф в такого же юнита без атаки, отображения на миникарте и с обзором 0, на его основе делаешь клонов разных игроков, но твоего цвета, даёшь им классификацию страж, чтобы не имели панели приказов. С помощью способности телескопа гоблинов устанавливаешь обзор твоему морфу. Так юниты не должны тормозить, но ты не сможешь видеть ими, если только не создашь для каждого клона специальных дамми для обзора. Основной же минус в том, что враг определит среди клонов своих, если их встретит. Хотя можно дать клонам Москиты, а на их место каждые 0.03 секунды перемещать юнитов с невидимой моделью и без физического размера с collision off, но видимым портретом. Они бы могли служить и для обзора вместо дамми, но при этом надо синхронизировать и наложенные заклинания, типа подкопа, стана, сна. Короче, очень суровый костыль.
Делаешь два триггера:
Событие: Боевая единица - Юнит Начинает применять способность
Условие: (Ability being cast) равно ТВОЯ_СПОСОБНОСТЬ
Действие: Спецэффекты - создать спецэффект в (Target ability being cast)
Set ПЕРЕМЕННАЯ_КАТЕГОРИИ_СПЕЦЭФФЕКТ = (Last created special effect)
Событие: Боевая единица - Юнит Приводит способность в действие
Условие: (Ability being cast) равно ТВОЯ_СПОСОБНОСТЬ
Действие: Спецэффекты - Destroy ПЕРЕМЕННАЯ_КАТЕГОРИИ_СПЕЦЭФФЕКТ
Нет, они не утекают.
Утекают группы, точки, эффекты, строки, вроде как камеры и многие объекты типа handle, но не все, есть некоторые псевдохэндлы. Но в этом не эксперт, просто ретранслировал информацию, которую прежде читал. строки не чистятся
Вот тут о том, что текстаг не является настоящим хэндлом, но не знаю, создаёт ли он ещё утечки кроме утечки строки. DracoL1ch:
тексттаг не является настоящим хендлом и не подвержен синхронизации, каждйы клиент имеет свои таги
аналогично молнии и уберсплаты
проверяется GetHandleId(объект)
если результат меньше 0x100000 - это локальный объект без синхронизации
Странно, что нигде не видел статьи с полным списком возможных утечек. По идее за столько лет кто-то мог бы и заморочиться.
Дай ему классификацию страж на время морфа, так у него все кнопки на панели приказов пропадут, но триггерно будут выполняться. По идее с классификацией страж можно было бы и не делать юнита нейтрально-пассивным, а дать классификацию, убрать какую-то пассивку, чтобы освободить место, дать и использовать морф, подождать конца перевоплощения, убрать морф, вернуть пассивку, убрать классификацию страж.
Во время морфа юнит всё равно перестаёт быть управляемым, делаешь его нейтрально-пассивным, у него разблокируется заблокированная способность, отдаёшь приказ на её выполнение, отдаёшь обратно игроку.
Но нужно будет на время передачи фиксировать лимит пищи и добавлять к выбранным юнитам, если он там был. А для этого время манипуляций должно быть минимальным, желательно не более 0.003 сек.
Конечно, можно попробовать реализовать костыль, когда вместо юнита выбирается другой, с таймером, который можно ставить на паузу. Но сразу проблемы возникают с отдачей приказов такому юниту на паузе, с анимацией портрета при выборе и отдаче приказа, сможет ли юнит произнести что-то, будучи на паузе, и самми баффы на таком юните будут отсутствовать, а ещё выбор юнита отловить будет не так уж просто.
По идее таймер может встать на паузу, если юнита поставить на паузу. Правда, там и бафф стана может сохраниться, но это не точно.
Ещё есть вариант с отображением не полоски, а цифр оставшегося времени, как-нибудь красиво это замутив. Например, с помощью DGUI создавая панель над панелью характеристик и портрета, где будет указано оставшееся время, либо просто убывающая шкала, ведь в неё не придётся вглядываться.
Всё-таки опиши на конкретном примере, как это должно выглядеть, а не общими словами.
NazarPunk, предлагает просто триггерный таймер, который не отображается визуально.
Можно сделать над юнитом шкалу времени действия, как полоска здоровья.
Опиши подробнее задачу. Тебе нужен юнит с превращением, таймер превращения которого можно остановить, либо нужно просто отобразить таймер на юните? Зачем останавливать и при каких условиях это следует делать?
Это странно, может область нужно создать во всю карту и её в модификаторе видимости указать? Но сначала попробуй где-то в свойствах карты убрать галочку Скрытые области частично видимы.
» WarCraft 3 / Очистка данных типа real или integer?
Хотя нет, точки и группы создают же объект, а эта просто ссылается.
» WarCraft 3 / Юниты тупят при передвижении
» WarCraft 3 / Сделать невосприимчивость к магии доступной после иследования
» WarCraft 3 / Сделать невосприимчивость к магии доступной после иследования
Ты уже озвучил решение, триггерно заблокировать способность у игрока, а после исследования разблокировать.
Если не поможет, то будет смысл спрашивать.
» WarCraft 3 / WFE - Warcraft Feature Extender
Не могу найти темы с конкурсом, там в комментариях ещё были
да это она и оказалось, в архиве Mazer и BlastBusters
» WarCraft 3 / WFE - Warcraft Feature Extender
» WarCraft 3 / WFE - Warcraft Feature Extender
» WarCraft 3 / Новая руда
» WarCraft 3 / Очистка данных типа real или integer?
» WarCraft 3 / Как отключить триггерно атаку?
» WarCraft 3 / Юниты тупят при передвижении
Как бы продолжу тесты, меняя очерёдность отдачи приказов и принадлежность разным игрокам, но это скорее из-за интереса к механикам игры, чем в надежде решить проблему. Но это точно показывает, что дело не только в частых приказах, а в необходимости времени на исполнение каждого приказа.
Разные игроки для клонов работают без задержки.
Хотя можно дать клонам Москиты, а на их место каждые 0.03 секунды перемещать юнитов с невидимой моделью и без физического размера с collision off, но видимым портретом. Они бы могли служить и для обзора вместо дамми, но при этом надо синхронизировать и наложенные заклинания, типа подкопа, стана, сна. Короче, очень суровый костыль.
» WarCraft 3 / Способности и алгоритмы на заказ
Событие: Боевая единица - Юнит Начинает применять способность
Условие: (Ability being cast) равно ТВОЯ_СПОСОБНОСТЬ
Действие: Спецэффекты - создать спецэффект в (Target ability being cast)
Set ПЕРЕМЕННАЯ_КАТЕГОРИИ_СПЕЦЭФФЕКТ = (Last created special effect)
Условие: (Ability being cast) равно ТВОЯ_СПОСОБНОСТЬ
Действие: Спецэффекты - Destroy ПЕРЕМЕННАЯ_КАТЕГОРИИ_СПЕЦЭФФЕКТ
» WarCraft 3 / Очистка данных типа real или integer?
Утекают группы, точки, эффекты, строки, вроде как камеры и многие объекты типа handle, но не все, есть некоторые псевдохэндлы. Но в этом не эксперт, просто ретранслировал информацию, которую прежде читал.
строки не чистятся
DracoL1ch: Странно, что нигде не видел статьи с полным списком возможных утечек. По идее за столько лет кто-то мог бы и заморочиться.
» WarCraft 3 / Использование скрытого скилла
» WarCraft 3 / Использование скрытого скилла
Но нужно будет на время передачи фиксировать лимит пищи и добавлять к выбранным юнитам, если он там был. А для этого время манипуляций должно быть минимальным, желательно не более 0.003 сек.
» WarCraft 3 / Создание эффекта и урона при входе в область
» WarCraft 3 / Использование скрытого скилла
» WarCraft 3 / UnitApplyTimedLife без убийства юнита
» WarCraft 3 / UnitApplyTimedLife без убийства юнита
» WarCraft 3 / UnitApplyTimedLife без убийства юнита
» WarCraft 3 / UnitApplyTimedLife без убийства юнита
Ещё есть вариант с отображением не полоски, а цифр оставшегося времени, как-нибудь красиво это замутив. Например, с помощью DGUI создавая панель над панелью характеристик и портрета, где будет указано оставшееся время, либо просто убывающая шкала, ведь в неё не придётся вглядываться.
Всё-таки опиши на конкретном примере, как это должно выглядеть, а не общими словами.
» WarCraft 3 / UnitApplyTimedLife без убийства юнита
Можно сделать над юнитом шкалу времени действия, как полоска здоровья.
» WarCraft 3 / UnitApplyTimedLife без убийства юнита
» WarCraft 3 / По поводу Тумана войны
» WarCraft 3 / Юниты тупят при передвижении