[ГАЙД] Как удобно делать прекэш после загрузки кастомки

SweetBaget2

Новичок
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. У меня получилось вот так:
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
3. Вызвать эту команду в любом месте. Я вызываю её в Barebones'кой функции PostLoadPrecache
Lua:
SpawnEntityFromTableAsynchronous("logic_script", {
        vscripts = "precache.lua"
    }, {}, {})
В строчке vscripts ваш путь до файла - vscripts = "ваш/путь/до/файла/precache.lua"
Имя должно быть именно "logic_script", как я понял, это Вальвовский костыль

И всё исправно загружается! Супер просто и без запар имеем доступ к прекэш контексту и прекэшим что хотим
Нашел еще способ вручную создать кастомных юнитов, прописывать им все что нужно для прогрузки и уже потом асинхронно их грузить. Но это же ВРУЧНУЮ надо каждую обнову запариваться. Это не для тру программеров, так что вот
 
Реклама: