Files
mir_server/server/LogicServer/misc/caches/MonsterConfigCacher.cpp
aixianling 5c9f1dae4a init
2025-01-09 17:45:40 +08:00

79 lines
2.2 KiB
C++

#include "StdAfx.h"
#include "MonsterConfigCacher.h"
const FILEIDENT CMonsterConfigCacher::CacheFileIdent = { MAKEFOURCC('M', 'S', 'C', 0) };
const FILEVERSION CMonsterConfigCacher::CacheVersion = { MAKEFOURCC(1, 11, 3, 5) };
bool CMonsterConfigCacher::ValidateHeader(const CONF_DATA_CACHE_HDR& hdr)
{
//验证文件标识
if (hdr.Ident.uIdent != CacheFileIdent.uIdent)
return false;
//验证文件版本
if (hdr.Version.uVersion != CacheVersion.uVersion)
return false;
//验证MonsterConfig结构大小
if (sizeof(MONSTERCONFIG) != hdr.dwSizeElement)
return false;
return true;
}
bool CMonsterConfigCacher::AdjustElementPointers(LPVOID lpElement)
{
MONSTERCONFIG *pMonConf = (PMONSTERCONFIG)lpElement;
#define AdjustPtr(ptr, T) if (ptr && !(ptr = (T)GetNewMemoryPtr(ptr))) return false;
#define AdjustPtrArray(a, name, n, T) for (i=n-1; i>-1; --i) if ( (a)[i].name && !((a)[i].name = (T)GetNewMemoryPtr((a)[i].name)) ) return false;
AdjustPtr(pMonConf->drops.data.pData, PONEDROPDATA);
/*for (INT_PTR i = 0; i < mstMax; i++)
{
MonsterSayInfo &info = pMonConf->monsterSayList.vecSayInfo[i];
if (info.nCount > 0)
{
AdjustPtr(info.pMsgList, LPSTR*);
for (INT_PTR j = 0; j < info.nCount; j++)
{
AdjustPtr(info.pMsgList[j], LPSTR);
}
}
}*/
for (INT_PTR i = 0; i < mstMax; i++)
{
MonsterSayTypeConfig& sayTypeCfg = pMonConf->monsterSayList.vecSayTypeInfo[i];
if (sayTypeCfg.nCount > 0)
{
AdjustPtr(sayTypeCfg.pMonsterSayCfg, MonsterSayInfo*);
MonsterSayInfo* pMonsterSayCfg = sayTypeCfg.pMonsterSayCfg;
for (INT_PTR j = 0; j < sayTypeCfg.nCount; j++)
{
MonsterSayInfo* pInfo = &pMonsterSayCfg[j];
AdjustPtr(pInfo->pMsgList, LPSTR*);
LPSTR* pMsgList = pInfo->pMsgList;
for (INT_PTR k = 0; k < pInfo->nCount; k++)
{
AdjustPtr(pMsgList[k], LPSTR);
}
}
}
}
PriorAttackTarget &targetInfo = pMonConf->priorAttackTarget;
if (targetInfo.nCount > 0)
{
AdjustPtr(targetInfo.pTargetIDList, int *);
}
#undef AdjustPtr
#undef AdjustPtrArray
return true;
}
void CMonsterConfigCacher::FillHeaderData(CONF_DATA_CACHE_HDR& hdr)
{
hdr.Ident.uIdent = CacheFileIdent.uIdent;
hdr.Version.uVersion = CacheVersion.uVersion;
hdr.dwSizeElement = sizeof(MONSTERCONFIG);
}