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

47 lines
1.8 KiB
C++

#include "StdAfx.h"
#include "StdItemConfigCacher.h"
const FILEIDENT CStdItemConfigCacher::CacheFileIdent = { MAKEFOURCC('S', 'I', 'C', 0) };
const FILEVERSION CStdItemConfigCacher::CacheVersion = { MAKEFOURCC(1, 11, 2, 17) };
bool CStdItemConfigCacher::ValidateHeader(const CONF_DATA_CACHE_HDR& hdr)
{
//验证文件标识
if (hdr.Ident.uIdent != CacheFileIdent.uIdent)
return false;
//验证文件版本
if (hdr.Version.uVersion != CacheVersion.uVersion)
return false;
//验证StdItem结构大小
if (sizeof(CStdItem) != hdr.dwSizeElement)
return false;
return true;
}
bool CStdItemConfigCacher::AdjustElementPointers(LPVOID lpElement)
{
INT_PTR i;
CStdItem *pStdItem = (CStdItem*)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(pStdItem->m_StaticAttrs.pAttrs, PGAMEATTR);
AdjustPtrArray(pStdItem->m_QualityAttrs, pAttrs, ArrayCount(pStdItem->m_QualityAttrs), PGAMEATTR);
AdjustPtrArray(pStdItem->m_StrongAttrs, pAttrs, ArrayCount(pStdItem->m_StrongAttrs), PGAMEATTR);
//AdjustPtr(pStdItem->m_UnitedAttrs.pGroups, CStdItem::UnitedAttributeGroup*);
//AdjustPtrArray(pStdItem->m_UnitedAttrs.pGroups, pUnitedItemIds, pStdItem->m_UnitedAttrs.nCount, PWORD);
//AdjustPtr(pStdItem->m_SmithAttrs.pAttrs, PRANDOMATTRTERM);
AdjustPtr(pStdItem->m_Conditions.pConds, CStdItem::ItemUseCondition*);
AdjustPtr(pStdItem->m_existScenes.pSceneId, int*);
#undef AdjustPtr
#undef AdjustPtrArray
return true;
}
void CStdItemConfigCacher::FillHeaderData(CONF_DATA_CACHE_HDR& hdr)
{
hdr.Ident.uIdent = CacheFileIdent.uIdent;
hdr.Version.uVersion = CacheVersion.uVersion;
hdr.dwSizeElement = sizeof(CStdItem);
}