Mark scriptstrings as used even when referencing them via zone pointer

This commit is contained in:
Jan 2022-12-03 12:44:33 +01:00
parent bb613e4fcf
commit 61a42afe28
3 changed files with 20 additions and 2 deletions

View File

@ -649,6 +649,11 @@ class ZoneLoadTemplate::Internal final : BaseTemplate
LINE(MakeMemberAccess(info, member, modifier)<< " = m_stream->ConvertOffsetToPointer("<<MakeMemberAccess(info, member, modifier)<<");") LINE(MakeMemberAccess(info, member, modifier)<< " = m_stream->ConvertOffsetToPointer("<<MakeMemberAccess(info, member, modifier)<<");")
if (member->m_is_script_string && loadType == MemberLoadType::ARRAY_POINTER)
{
LINE("MarkScriptStringArrayAsUsed(" << MakeMemberAccess(info, member, modifier) << ", " << MakeEvaluation(modifier.GetArrayPointerCountEvaluation()) << ");")
}
m_intendation--; m_intendation--;
LINE("}") LINE("}")
} }

View File

@ -50,6 +50,18 @@ void AssetLoader::LoadScriptStringArray(const bool atStreamStart, const size_t c
} }
} }
void AssetLoader::MarkScriptStringArrayAsUsed(const scr_string_t* scrStringArray, const size_t count)
{
for (size_t index = 0; index < count; index++)
{
const auto scrString = scrStringArray[index];
if (scrString >= m_zone->m_script_strings.Count())
continue;
m_used_script_strings.emplace(scrString);
}
}
XAssetInfoGeneric* AssetLoader::LinkAsset(std::string name, void* asset) XAssetInfoGeneric* AssetLoader::LinkAsset(std::string name, void* asset)
{ {
std::vector<scr_string_t> usedScriptStrings; std::vector<scr_string_t> usedScriptStrings;

View File

@ -23,6 +23,7 @@ protected:
scr_string_t UseScriptString(scr_string_t scrString); scr_string_t UseScriptString(scr_string_t scrString);
void LoadScriptStringArray(bool atStreamStart, size_t count); void LoadScriptStringArray(bool atStreamStart, size_t count);
void MarkScriptStringArrayAsUsed(const scr_string_t* scrStringArray, size_t count);
XAssetInfoGeneric* LinkAsset(std::string name, void* asset); XAssetInfoGeneric* LinkAsset(std::string name, void* asset);