87 lines
1.7 KiB
C++
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;
|
|
}
|