Files
GTASource/game/script/ScriptMetadataManager.cpp
expvintl 419f2e4752 init
2025-02-23 17:40:52 +08:00

161 lines
4.3 KiB
C++

//
// script/ScriptMetadataManager.cpp
//
// Copyright (C) 1999-2015 Rockstar Games. All Rights Reserved.
//
#include "script/script_channel.h"
#include "script/ScriptMetadataManager.h"
#include "parser/macros.h"
#include "parser/manager.h"
const char* CScriptMetadataManager::sm_scriptMetadataPath = "common:/data/scriptMetadata";
CScriptMetadata* CScriptMetadataManager::m_ScriptMetadata = NULL;
CScriptMetadataManager::CScriptMetadataManager()
{
m_ScriptMetadata = new CScriptMetadata();
}
CScriptMetadataManager::~CScriptMetadataManager()
{
Shutdown();
}
void CScriptMetadataManager::Init()
{
PARSER.LoadObjectPtr(sm_scriptMetadataPath, "meta", m_ScriptMetadata);
Assertf(m_ScriptMetadata, "CScriptMetadataManager::Init: Failed to load %s", sm_scriptMetadataPath);
}
void CScriptMetadataManager::Shutdown()
{
m_ScriptMetadata->~CScriptMetadata();
}
bool CScriptMetadataManager::GetMPOutfitData(CMPOutfitsData** outfit, int id, bool bMale)
{
CMPOutfitsMap* outfitsDataMap = NULL;
if(bMale)
outfitsDataMap = &(m_ScriptMetadata->m_MPOutfits.m_MPOutfitsDataMale);
else
outfitsDataMap = &(m_ScriptMetadata->m_MPOutfits.m_MPOutfitsDataFemale);
if(outfitsDataMap->m_MPOutfitsData.GetCount() > id && id >= 0)
{
*outfit = &outfitsDataMap->m_MPOutfitsData[id];
return true;
}
return false;
}
bool CScriptMetadataManager::GetBaseElementLocation(CBaseElementLocation** outLocation, int element, bool bHighApt)
{
CBaseElementLocationsMap* locationsMap = NULL;
if(bHighApt)
locationsMap = &(m_ScriptMetadata->m_BaseElements.m_BaseElementLocationsMap_HighApt);
else
locationsMap = &(m_ScriptMetadata->m_BaseElements.m_BaseElementLocationsMap);
if(locationsMap->m_BaseElementLocations.GetCount() > element && element >= 0)
{
*outLocation = &locationsMap->m_BaseElementLocations[element];
return true;
}
return false;
}
bool CScriptMetadataManager::GetBaseElementLocationFromBlock(CBaseElementLocation** outLocation, int element, int dataBlock)
{
CBaseElementLocationsMap* locationsMap = NULL;
switch(dataBlock)
{
case 0:
locationsMap = &(m_ScriptMetadata->m_BaseElements.m_BaseElementLocationsMap);
break;
case 1:
locationsMap = &(m_ScriptMetadata->m_BaseElements.m_BaseElementLocationsMap_HighApt);
break;
case 2:
locationsMap = &(m_ScriptMetadata->m_BaseElements.m_ExtraBaseElementLocMap1);
break;
case 3:
locationsMap = &(m_ScriptMetadata->m_BaseElements.m_ExtraBaseElementLocMap2);
break;
case 4:
locationsMap = &(m_ScriptMetadata->m_BaseElements.m_ExtraBaseElementLocMap3);
break;
case 5:
locationsMap = &(m_ScriptMetadata->m_BaseElements.m_ExtraBaseElementLocMap4);
break;
case 6:
locationsMap = &(m_ScriptMetadata->m_BaseElements.m_ExtraBaseElementLocMap5);
break;
case 7:
locationsMap = &(m_ScriptMetadata->m_BaseElements.m_ExtraBaseElementLocMap6);
break;
case 8:
locationsMap = &(m_ScriptMetadata->m_BaseElements.m_ExtraBaseElementLocMap7);
break;
case 9:
locationsMap = &(m_ScriptMetadata->m_BaseElements.m_ExtraBaseElementLocMap8);
break;
case 10:
locationsMap = &(m_ScriptMetadata->m_BaseElements.m_ExtraBaseElementLocMap9);
break;
case 11:
locationsMap = &(m_ScriptMetadata->m_BaseElements.m_ExtraBaseElementLocMap10);
break;
case 12:
locationsMap = &(m_ScriptMetadata->m_BaseElements.m_ExtraBaseElementLocMap11);
break;
case 13:
locationsMap = &(m_ScriptMetadata->m_BaseElements.m_ExtraBaseElementLocMap12);
break;
case 14:
locationsMap = &(m_ScriptMetadata->m_BaseElements.m_ExtraBaseElementLocMap13);
break;
case 15:
locationsMap = &(m_ScriptMetadata->m_BaseElements.m_ExtraBaseElementLocMap14);
break;
default:
scriptAssertf(false, "Unrecognised BaseElementLocation : %d", dataBlock);
return(false);
}
if(locationsMap->m_BaseElementLocations.GetCount() > element && element >= 0)
{
*outLocation = &locationsMap->m_BaseElementLocations[element];
return true;
}
return false;
}
int CScriptMetadataManager::GetMPApparelMale(u32 hash)
{
const int* pValue = m_ScriptMetadata->m_MPApparelData.m_MPApparelDataMale.Access(hash);
if(pValue)
{
return *pValue;
}
return -1;
}
int CScriptMetadataManager::GetMPApparelFemale(u32 hash)
{
const int* pValue = m_ScriptMetadata->m_MPApparelData.m_MPApparelDataFemale.Access(hash);
if(pValue)
{
return *pValue;
}
return -1;
}