#include "stdafx.h" #include "MapWmoInfo.h" // #include #include BOOL MapWmoInfo::Create(CWzArchive& archive, FIELDCODE fcWMO) { m_fcCODE = fcWMO; MapInfoParser* pPARSER = MapInfoParser::Instance(); const sWMOINFO* pWMOINFO = pPARSER->FindWMOInfo(m_fcCODE); if(!pWMOINFO) return FALSE; ////////////////////////////////////////////////////////////////////////// // BOOL bRET = FALSE; CDiscAccess cda; cda.Create(); archive.SetDiscAccess(&cda); if(_access(pWMOINFO->pszPath, 0) < 0) { //SUNLOG(eCRITICAL_LOG, "[_LoadMapObjectInfo] Failed : %s file is not Exist", pszFilePath); goto CLOSURE_MARK; } if(!archive.LoadFile((CHAR*)pWMOINFO->pszPath)) { goto CLOSURE_MARK; } WORD wVersion = 0; archive.Seek(4, SO_CURRENT); archive >> wVersion; archive.Seek(-6, SO_CURRENT); archive.SetVersion(wVersion); /* { BOOL bAreaChunk = FALSE; while( TRUE ) { St_ChunkInfo ci = archive.ReadChunk(); if( ci.m_nID == 0x1792 ) { bAreaChunk = TRUE; break; } archive.SkipCurrentChunk(ci); } ASSERT( TRUE == bAreaChunk ); }; St_LHFileHeader stLHFH; if(170 < archive.GetVersion()) { archive.Read(&stLHFH.wSecondVersion, sizeof(WORD)); archive.Read(&stLHFH.dwCheckSum, sizeof(DWORD)); //SUNLOG(eDEV_LOG, "Second Ver[%u] and CheckSum[%u]", fhInfo.wSecondVersion, fhInfo.dwCheckSum); } EIWORLDBASE()->SerializeExtraAreaInfo(&archive, TRUE); if(! (bRET = _Load_WMO_MAPOBJECT(archive))) goto CLOSURE_MARK; if(! (bRET = _Load_WMO_TRIGGER(archive))) goto CLOSURE_MARK; */ bRET = TRUE; CLOSURE_MARK: archive.Close(); return bRET; } BOOL MapWmoInfo::_Load_WMO_MAPOBJECT(CWzArchive& archive) { ////////////////////////////////////////////////////////////////////////// // CLoadHelper* pLoadHelper = (EIWORLDBASE()->x_pLoadHelper); pLoadHelper->LoadObj(&archive); //¿Àºê Á§Æ® ¸®½ºÆ® ·Îµù DWORD dwCount = pLoadHelper->GetObjectCount(); St_LHObject* pLHObject = pLoadHelper->GetObject(); static DWORD dwObjTotalCount = 0; ObjectPoolRouter* pROUTER = ObjectPoolRouter::Instance(); //ASSERT(count < (ITEM_OBJECT_KEY - MAP_OBJECT_KEY)); //< ۰¡ 5¸¸°³ ÀÌÇÏ¿©¾ß ÇÑ´Ù. for(DWORD dwIdx=0 ; dwIdxAlloc(OBJTYPE_MAPOBJECT_INFO); //// // WzID wzId; // DWORD dwAttribute; // WzVector wvPos; // WzVector wzScale; // WzVector wzRot; // WzBoundingVolume wzBV; // DWORD dwExtraInfos[eMAPOBJECT_MAX]; pOBJECT->dwMapObjectID = dwIdx; // MAP_OBJECT_KEY + pOBJECT->wzId = pOffObj->m_WzID; pOBJECT->dwAttribute = pOffObj->m_dwAttribute; pOBJECT->wvPos = pOffObj->m_wvPos; pOBJECT->wzScale = pOffObj->m_wvScale; pOBJECT->wzRot = pOffObj->m_wvRot; pOBJECT->wzBV = pOffObj->m_wzBV; //// Ãß°¡ µ¥ÀÌÅÍ ¼³Á¤ (¼³Á¤°ªµé) // eMAPOBJECT_TYPE // eMAPOBJECT_MONSTER // eMAPOBJECT_USE_ALPHA // eMAPOBJECT_RESERVED2 CopyMemory(pOBJECT->dwExtraInfos, pOffObj->m_dwParam, sizeof(pOBJECT->dwExtraInfos)); m_MapObjHash.insert(make_pair(dwIdx, pOBJECT)); ++dwObjTotalCount; } pLoadHelper->DeleteObject(); return TRUE; } BOOL MapWmoInfo::_Load_WMO_TRIGGER(CWzArchive& archive) { m_TriggerInfoManager.LoadGroupInfos(archive); return TRUE; }