47 lines
1.8 KiB
C++
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);
|
|
} |