Тексттагов ограниченное количество, около 128, но их можно создавать и удалять асинхронно без проблем, соответственно, достаточно создавать только те тт, которые нужны твоему локальному игроку. Как вариант - удалять тт, вышедшие за границы обзора и создавать тт с новой информацией, которую игрок может увидеть.
Но при этом, желательно убедиться, конечно, что проблем с синхронизацией нет и асинхронно вызывается только то, что можно вызывать асинхронно, например локации асинхронно создавать нельзя и поэтому нужно будет работать с координатами.
>>"MPQ редактор не предлагать, так как он не может сохранять изменения в карте, а только вытаскивать от туда данные...."
Вы просто не умеете его готовить
Для получения редактируемого архива нужно распаковать старый в какую-то папку, после чего создать новый архив из этой папки, и данных с старого файла.
После этого у вас будет архив, который вы можете редактировать и будет иметь все нужные файлы.
Объясняется невозможность редактировать произвольный архив тем, что довольно часто у карт поломанные заголовки и индексы, из-за чего, например, в фс архива будет считаться несколько терабайт мусорных файлов, с которыми непонятно что делать и непонятно которые из них файлами в действительности не являются, нужна ручная работа для того, чтобы отсечь все лишнее.
Для учета такого поведения MPQ редактор не позволяет редактировать нестандартные архивы, чтобы не сломать чего ненароком и не забить диск мусором.
Не подскажите, зачем вам нужно такого рода механика? Может есть более простые решения, для того, что вы хотите сделать?
Но, в общем, есть ощутимые сомнения в возможности решения поставленной в вопросе задачи, так как очередность разного рода объектов на экране придумана не просто так и в определенной мере прибита гвоздями.
Использовать событие времени прошло 30 секунд, по событию - выводить сообщение 😒
С таймером особого смысла это связывать и вовсе нет, но можно, в принципе стартануть таймер на 30 секунд, по истечению времени вывести сообщение и стартануть таймер уже на 45 минут минус 30 секунд.
PUVer,
Конкретно это вероятно не связано с оп лимитом, так как редактор не то чтобы умеет в джасс вообще. Я допускаю, что например в триггерные строки данные не влезали, так как этих строк может быть не столь уж много, сколь много хотелось бы, ну, это например.
Если вглядеться в код, что задача нетривиальная, видно, что вы 4 раза в секунду проверяете всех юнитов на карте работник ли это.
Добавляете их в группу.
Для каждого работника создаете квадрат, в нем проверяете все скажем разрушаемые объекты на предмет того, что же это есть.
Тоесть если у вас есть 100 работников, и в среднем 100 разрушаемых объектов на рект, то вы будете выполнять операции выбора деструкта 40000 раз в секунду, зная о том, какого вида код генерируется при вашем скрипте это просто жирновато. Соответственно, чем больше работников и разрушаемых - тем тяжелее игре дается код.
На практике, вам не нужно каждому юниту приказывать что-то делать 4 раза в секунду. Пока он занимается своим делом, что будет происходить большую часть времени, трогать его вообще не стоит.
Bogdan Shmay
К несчастию или нет, у луа машины в рефорже и тут разные наборы доступных и реализованных функций, в том числе с разным именованием. Вероятно, проблемы возникают с использованием функций типа изменения описаний способностей и тому подобного.
Можно попробовать делать не уровни улучшений, а отдельные улучшения, дающие необходимые бонусы, и требующие предыдущее улучшение. Конечно, в целом, рак, но особо тут ничего не сделать, разве что в целом давать все бонусы триггерно.
Не всегда перечисленные операции выполняются успешно, и чтобы показать, что это так, они возвращают false.
На практике, это не очень нужно, но, тем не менее, может где-то быть использовано, например проверка добавилась ли способность очевидно может быть полезна.
Замечу, что достаточно часто, одной из первых оптимизаций хэштаблицы, которые можно, а часто и полезно, использовать - замена стрингхэшэй на тип кей из вжаса и "Массивы" с камими-то большими смещениями, ну типа на 100к, для каждого набора тех данных, которые хочется хранить, этого примерно всегда будет достаточно, и даст какой-то плюс по производительности и количеству написанного кода.
Но предположу, что возможно, одной из вторичных затрат при использовании систем, в которых на каждый объект приходится отдельный таймер, и, которые так хорошо идут с хэштаблицами, являются затраты на старт отдельного потока при срабатывании таймеров, что по моему скромному мнению должно также требовать некоторых ресурсов.
skin я так понимаю, это текстура модели. Так вот, есть такие функции. Однако, там указывают не сразу строки, а ид (чего конкретно не понять, надо найти пример)
Под скином, насколько я помню, подразумевается айди юниита, чью кожу будет надевать наш герой.
Unryze
Я отыскал в закоулках своей памяти карту, в которой возникала проблема из-за таких утечек. Там таблица хэндлов раздувалась примерно до 400 мегабайт, и, замечу, одним куском, с реаллокацией чего сложности возникнут раньше чем с кусками маленькими.)
Есть даже сейв, с которым можно сразу посмотреть проблему. Даже удивительно, что что-то такое сохранилось.
Я тут обратил внимание, что функция EnableOPLimit не очень справляется, что вызывает некоторые сложности с тестированием (Ну и может вызвать десинки в мультиплеере). Например при исполнении этой функции поток, почему-то рвется.
function TestEnableOpLimit2()
{
rect r= Rect(0,0,1,1);
integer i = 0;
EnableOPLimit(false);
BJDebugMsg("TestEnableOpLimit2 started");
for(0<i<100000)
{
DestroyGroup(GetUnitsInRectMatching(r,null));
}
BJDebugMsg("TestEnableOpLimit2 ended");//????????????????????
}
Доступ к ресурсам в архивах осуществляется в зависимости от приоритета при загрузке этих архивов. Более того, такой архив можно грузить из карты или любого другого архива.
Есть достаточно много способов грузить свой архив, например мемхаком или миксом.
Можно грузить и несколько архивов с разными приоритетами, если на то есть желание.
pGameState+0x194 - сколько мест в таблице выделено
pGameState+0x198 - сколько мест в таблице занято
pGameState+0x19с - Массив структур, хранящих количество ссылок на хэндл, указатель на объект, и, возможно, еще что-то.
pGameState+0x1A0 - Шаг повышения размера таблицы.
Я предполагаю, что при наличии ссылок, хэндл не будет перевыдан другоу объекту, что, я надеюсь, логично, но, вероятно, сам, оригинальный объект, которому соответствует хэндл, может быть удален.
Строго говоря, утечка в 3?! байта - не критично, но за несколько часов, при достаточном усердии, можно набрать достаточно. Но в коротких играх, вероятно, источником проблем такая утечка не будет.
А безопасности, в рамках моего понимания, необнуление не даст, так как по сути, если на сущность нет ссылок на хэндл, а сама сущность удалена - нет никаких способов с ей провзаимодействовать или пострадать от её отсутствия.
» WarCraft 3 / Как можно расширить макс число плавающего текста?
Ред. goodlyhero
» WarCraft 3 / Как открыть и изменить файл формата .w3a не в WE?
Ну и помнить, что там используются нуль-терминированные строки.
Ред. goodlyhero
» WarCraft 3 / Как удалить War3map.j из карты?
После этого у вас будет архив, который вы можете редактировать и будет иметь все нужные файлы.
» WarCraft 3 / Функция Анимации
Ред. goodlyhero
» WarCraft 3 / Отрисовка юнита поверх всего
Ред. goodlyhero
» WarCraft 3 / Таймер
» WarCraft 3 / Лимит операций (op-limit) и как создать поток вручную
Конкретно это вероятно не связано с оп лимитом, так как редактор не то чтобы умеет в джасс вообще. Я допускаю, что например в триггерные строки данные не влезали, так как этих строк может быть не столь уж много, сколь много хотелось бы, ну, это например.
» WarCraft 3 / Лимит операций (op-limit) и как создать поток вручную
» WarCraft 3 / Лимит операций (op-limit) и как создать поток вручную
Карту в студию, можно даже отдельным вопросом
Ред. goodlyhero
» WarCraft 3 / Почему функция вызывает просадки FPS
Ред. goodlyhero
» Warcraft III - Lua / Warcraft III - Lua
К несчастию или нет, у луа машины в рефорже и тут разные наборы доступных и реализованных функций, в том числе с разным именованием. Вероятно, проблемы возникают с использованием функций типа изменения описаний способностей и тому подобного.
Ред. goodlyhero
» Unity / Как запустить карту варкрафта в Unity
» Программирование / Интеграция Lua и Python
» WarCraft 3 / Экспоненциальный рост статы в улучшении
Ред. goodlyhero
» WarCraft 3 / Странные функции в jass
На практике, это не очень нужно, но, тем не менее, может где-то быть использовано, например проверка добавилась ли способность очевидно может быть полезна.
Ред. goodlyhero
» WarCraft 3 / Jass MythBusters
» WarCraft 3 / Без контакта или нет началу игры
Ред. goodlyhero
» WarCraft 3 / Рандомные названия городам из списка
» WarCraft 3 / Создание пассивки
» WarCraft 3 / Jass MythBusters
Я отыскал в закоулках своей памяти карту, в которой возникала проблема из-за таких утечек. Там таблица хэндлов раздувалась примерно до 400 мегабайт, и, замечу, одним куском, с реаллокацией чего сложности возникнут раньше чем с кусками маленькими.)
Даже удивительно, что что-то такое сохранилось.
Ред. goodlyhero
» WarCraft 3 / MemoryHackAPI
Это zinc
Ред. goodlyhero
» WarCraft 3 / Jass MythBusters
Ред. goodlyhero
» WarCraft 3 / MemoryHackAPI
Ред. goodlyhero
» WarCraft 3 / Последовательность подгрузки MPQ и всё что с этим связано.
Есть достаточно много способов грузить свой архив, например мемхаком или миксом.
Можно грузить и несколько архивов с разными приоритетами, если на то есть желание.
Ред. goodlyhero
» WarCraft 3 / Jass MythBusters
pGameState = *(pGameWar3+0x1c)
pGameState+0x198 - сколько мест в таблице занято
pGameState+0x19с - Массив структур, хранящих количество ссылок на хэндл, указатель на объект, и, возможно, еще что-то.
pGameState+0x1A0 - Шаг повышения размера таблицы.