init
This commit is contained in:
47
server/LogicServer/misc/caches/StdItemConfigCacher.cpp
Normal file
47
server/LogicServer/misc/caches/StdItemConfigCacher.cpp
Normal file
@@ -0,0 +1,47 @@
|
||||
#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);
|
||||
}
|
||||
Reference in New Issue
Block a user