Files
Sun1602/Tools/WiseClient/Information/Zone/MapFieldInfo.cpp
T
2022-10-26 12:25:11 +08:00

87 lines
1.7 KiB
C++

#include "stdafx.h"
#include "MapFieldInfo.h"
//
#include <MapInfoParser.h>
#include <io.h>
BOOL MapFieldInfo::Create(CWzArchive& archive, FIELDCODE fcFIELD)
{
MapInfoParser* pPARSER = MapInfoParser::Instance();
sFIELDINFO_HASH& rFIELDHASH = pPARSER->GetFieldInfoHash();
BOOL bRET = FALSE;
sFIELDINFO* pINFO = rFIELDHASH.GetData(fcFIELD);
if(pINFO)
{
m_pWorldBase = (CWorldBase*)m_rINSTANCE.HANDLEofTERRAIN()(CT_NEW_WORLD, 0);
m_pWorldBase->Create(pINFO->bNewPathEngine);
bRET = _Load(archive, pINFO->pszPath);
if(!bRET)
{
m_pWorldBase->Destroy(NULL);
m_rINSTANCE.HANDLEofTERRAIN()(CT_DELETE_WORLD, 0);
m_pWorldBase = NULL;
}
else
{
}
}
return bRET;
}
BOOL MapFieldInfo::_Load(CWzArchive& archive, const CHAR* pszFieldPath)
{
//C3D_WORLD_BASE rWORLD(m_pWorldBase);
BOOL bRET = FALSE;
CDiscAccess cda;
cda.Create();
archive.SetDiscAccess(&cda);
if(_access(pszFieldPath, 0) < 0)
{
//SUNLOG(eCRITICAL_LOG, "[FieldInfo::Load] Failed : %s file is not Exist", field_path);
goto CLOSURE_MARK;
}
if(archive.LoadFile(const_cast<CHAR*>(pszFieldPath)) == FALSE)
{
//SUNLOG(eCRITICAL_LOG, "[FieldInfo::Load] Failed LoadFile() : From Fieldxx.map[%s]", field_path);
goto CLOSURE_MARK;
}
archive.Seek(4, SO_CURRENT);
archive >> m_wVersion;
archive.Seek(-6, SO_CURRENT);
if(!m_pWorldBase->Serialize(&archive))
{
goto CLOSURE_MARK;
}
BOOL bContinue = TRUE;
//////////////////////////////////////////////////////////////////////////
// <WMO HEADER>
do
{
St_ChunkInfo stCI = archive.ReadChunk();
if(stCI.m_nID == 0x1792)
bContinue = FALSE;
else
archive.SkipCurrentChunk(stCI);
} while(bContinue);
bRET = TRUE;
CLOSURE_MARK:
archive.Close();
return bRET;
}