- 3 Июл 2023
- 6
- 3
- Проект
- ULTRA RANDOM DOTA
У меня кастомка, в которой используются все скиллы героев, так что я столкнулся с проблемой прекэша этих скиллов. Придумал оптимизацию, когда игроки могут опционально выбрать, какую часть прекэша скиллов им подгружать. Если оставить только звуки и не подгружать эффекты, то выигрыш в оперативной памяти будет целых 2.3 гига. Так что я начал копать как это сделать, так как интерфейс Game Setup грузится уже после вызова Precache из addon_game_mode, и игрок никак не может повлиять на выбор до его появления
По итогу, я нашел что искал и делюсь этим с вами
Схема действий простая:
1. Создать отдельный lua файл по любому пути после папки vscripts. Мой путь такой: vscripts/precache.lua
2. Записать туда функцию Precache. По такому же принципу, как и в файле addon_game_mode. У меня получилось вот так:
3. Вызвать эту команду в любом месте. Я вызываю её в Barebones'кой функции PostLoadPrecache
В строчке vscripts ваш путь до файла - vscripts = "ваш/путь/до/файла/precache.lua"
Имя должно быть именно "logic_script", как я понял, это Вальвовский костыль
И всё исправно загружается! Супер просто и без запар имеем доступ к прекэш контексту и прекэшим что хотим
Нашел еще способ вручную создать кастомных юнитов, прописывать им все что нужно для прогрузки и уже потом асинхронно их грузить. Но это же ВРУЧНУЮ надо каждую обнову запариваться. Это не для тру программеров, так что вот
По итогу, я нашел что искал и делюсь этим с вами
Схема действий простая:
1. Создать отдельный lua файл по любому пути после папки vscripts. Мой путь такой: vscripts/precache.lua
2. Записать туда функцию Precache. По такому же принципу, как и в файле addon_game_mode. У меня получилось вот так:
Lua:
function Precache(context)
local npcHeroesKV = LoadKeyValues("scripts/npc/npc_heroes.txt")
for heroName, heroInfo in pairs(npcHeroesKV) do
if type(heroInfo) == "table" then
if heroInfo.particle_folder ~= nil then
PrecacheResource("particle_folder", heroInfo.particle_folder, context)
end
end
end
end
Lua:
SpawnEntityFromTableAsynchronous("logic_script", {
vscripts = "precache.lua"
}, {}, {})
Имя должно быть именно "logic_script", как я понял, это Вальвовский костыль
И всё исправно загружается! Супер просто и без запар имеем доступ к прекэш контексту и прекэшим что хотим
Нашел еще способ вручную создать кастомных юнитов, прописывать им все что нужно для прогрузки и уже потом асинхронно их грузить. Но это же ВРУЧНУЮ надо каждую обнову запариваться. Это не для тру программеров, так что вот