161 lines
4.3 KiB
C++
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;
|
|
}
|
|
|