#include "stdafx.h" #include "WiseMapInfo.h" #include #include #include "MapFieldInfo.h" #include "MapWmoInfo.h" #include "GameZone.h" #include "GameField.h" #include "MapFieldInfo.Shared.h" #include ////////////////////////////////////////////////////////////////////////// // void WiseMapInfo::_Clear() { //m_pWorldBase; //m_FIELD_ID; //m_wVersion; // Field Version //m_MapObjHash; //m_TriggerInfoManager; for(MAP_FIELD_INFO_HASH_IT it=m_MAP_FIELD_HASH.begin() ; it != m_MAP_FIELD_HASH.end(); ++it) { MapFieldInfo* pFieldInfo = it->second; SAFE_DELETE(pFieldInfo); } m_MAP_FIELD_HASH.clear(); for(MAP_WMO_INFO_HASH_IT it=m_MAP_WMO_HASH.begin() ; it != m_MAP_WMO_HASH.end() ; ++it) { MapWmoInfo* pWmoInfo = it->second; SAFE_DELETE(pWmoInfo); } m_MAP_WMO_HASH.clear(); } TERRAIN_ID_T WiseMapInfo::Create(CWzArchive& archive, MAPCODE mcCODE) { MapInfoParser* pPARSER = MapInfoParser::Instance(); sMAPINFO_HASH& rMAPHASH = pPARSER->GetMapInfoHash(); sMAPINFO_HASH::iterator itFIND = rMAPHASH.find(mcCODE); if(itFIND == rMAPHASH.end()) return INVALID_TERRAIN_ID_VALUE; // ½Å±Ô ¸Ê Ãß°¡ MAP_FIELD_LIST& rLIST = m_MAP_CONTAINER_HASH[mcCODE]; if(rLIST.size()) // ÀÌ¹Ì »ý¼ºµÈ °ÍÀÌ Á¸ÀçÇÑ´Ù. return mcCODE; sMAPINFO* pINFO = itFIND->second; MAPCODE* pFIELDs = pINFO->FCode; FIELDCODE* pWMOs = pINFO->FWMOCode; FIELDCODE* pWUTs = pINFO->FWUTCode; for(DWORD dwIdx=0 ; dwIdxCreate(archive, *pFIELDs); AddMapFieldInfo(*pFIELDs, pFieldInfo); } MapWmoInfo* pWmoInfo = FindMapWmoInfo(*pWMOs); if(!pWmoInfo) { pWmoInfo = new MapWmoInfo(m_rINSTANCE, pFieldInfo->EIWORLDBASE()); pWmoInfo->Create(archive, *pWMOs); AddMapWmoInfo(*pWMOs, pWmoInfo); } // WUTs AddSharedMapInfo(*pFIELDs, pFieldInfo, *pWMOs, pWmoInfo); sSharedFieldInfo* pSFI = FindSharedMapInfo(*pFIELDs, *pWMOs); rLIST.push_back(pSFI); } return mcCODE; } void WiseMapInfo::AddSharedMapInfo(FIELDCODE fcFIELD, MapFieldInfo* pFIELD, FIELDCODE fcWMO, MapWmoInfo* pWMO) { sSharedFieldInfo* pINFO = FindSharedMapInfo(fcFIELD, fcWMO); if(pINFO) { //DEBUGGING_CODE_L1("INVALID"); //DEBUG_INTERRUPT(); return; } sSharedFieldInfo rINFO; uFIELD_ID& uID = rINFO.SHARED_ID; uID.FIELD = fcFIELD; uID.WMO = fcWMO; rINFO.FIELD_INFO = pFIELD; rINFO.WMO_INFO = pWMO; m_SHARED_FIELD_HASH.insert(make_pair(uID.ID, rINFO)); } BOOL WiseMapInfo::_CheckVersion_MAPnWMO(DWORD verMAP, DWORD verWMO) { // 167 ÀÌÇÏ ¹öÀüÀÇ MapÀº ½Å±Ô·Î ±³Ã¼ÇÏ´Â °ÍÀÌ ·Îµù¿¡ ºÎÇϰ¡ Àû´Ù. if(!(verMAP > 167)) { //SUNLOG(eCRITICAL_LOG, "[_CheckVersionBetweenMapWmo] Warning! %s Version[%u] is Low!!", m_tszMapPath, MapVersion); } // 162, 166, 167À» °æ°è·Î Wmo º¸´Ù MapÀÇ ¹öÀüÀÌ ´õ ³ôÀ¸¸é ¾ÈµÈ´Ù. BOOL bCheckFail = TRUE; bCheckFail = bCheckFail && (verMAP>162) && !(verWMO>162); bCheckFail = bCheckFail && (verMAP>166) && !(verWMO>166); bCheckFail = bCheckFail && (verMAP>167) && !(verWMO>167); bCheckFail = bCheckFail && (verMAP>170) && !(verWMO>170); if(!bCheckFail) { //SUNLOG(eCRITICAL_LOG, "[_CheckVersionBetweenMapWmo] Critical! %s Version[%u] is Low!!", m_tszMapPath, WmoVersion); DEBUGGING_CODE_L1("CRITICAL Version Mismatch!"); DEBUG_INTERRUPT(); return FALSE; } return TRUE; } void WiseMapInfo::_Destroy() { } //////////////////////////////////////////////////////////////////////////// //// //void WiseMapInfo::_Clear() //{ // //m_pWorldBase; // //m_FIELD_ID; // //m_wVersion; // Field Version // //m_MapObjHash; // // //m_TriggerInfoManager; //} // //BOOL WiseMapInfo::Create(MAPCODE mcCODE) //{ // MapInfoParser* pPARSER = MapInfoParser::Instance(); // sMAPINFO_HASH& rMAPHASH = pPARSER->GetMapInfoHash(); // // sMAPINFO_HASH::iterator itFIND = rMAPHASH.find(mcCODE); // if(itFIND != rMAPHASH.end()) // { // sMAPINFO* pINFO = itFIND->second; // pINFO-> // } // // //return Create //} // //BOOL WiseMapInfo::Create(const CHAR* pszFieldPath, FIELDCODE fcFIELD, FIELDCODE fcWMO, BOOL bUsePathEngine) //{ // m_FIELD_ID.FIELD = fcFIELD; // m_FIELD_ID.WMO = fcWMO; // // STARTENDLOG("MapLoading"); // // m_pWorldBase = (CWorldBase*)m_rINSTANCE.HANDLEofTERRAIN()(CT_NEW_WORLD, 0); // m_pWorldBase->Create(bUsePathEngine); // // return _Load(pszFieldPath); //} // // // //BOOL WiseMapInfo::_Load_WMO_MAPOBJECT(CWzArchive& archive) //{ // ////////////////////////////////////////////////////////////////////////// // // // CLoadHelper& rLoadHelper = *(EIWORLDBASE().x_pLoadHelper); // rLoadHelper.LoadObj(&archive); // // //¿Àºê Á§Æ® ¸®½ºÆ® ·Îµù // DWORD dwCount = rLoadHelper.GetObjectCount(); // St_LHObject* pLHObject = rLoadHelper.GetObject(); // // 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[dwIdx] = pOBJECT; // } // // rLoadHelper.DeleteObject(); // // return TRUE; //} // //BOOL WiseMapInfo::_Load_WMO_TRIGGER(CWzArchive& archive) //{ // m_TriggerInfoManager.LoadGroupInfos(archive); // // return TRUE; //} // //BOOL WiseMapInfo::_Load_WMO(CWzArchive& archive) //{ // BOOL bContinue = TRUE; // // ////////////////////////////////////////////////////////////////////////// // // // do // { // St_ChunkInfo stCI = archive.ReadChunk(); // if(stCI.m_nID == 0x1792) // bContinue = FALSE; // else // archive.SkipCurrentChunk(stCI); // } while(bContinue); // // const sWMOINFO* pWMOINFO = MapInfoParser::Instance()->FindWMOInfo(CODEofWMO()); // if(!pWMOINFO) // return FALSE; // // ////////////////////////////////////////////////////////////////////////// // // // // BOOL bRET = FALSE; // // CWzArchive rWMOArchive; // rWMOArchive.SetDiscAccess(EIWORLDBASE().GetDiscAccess()); // // if(_access(pWMOINFO->pszPath, 0) < 0) // { // //SUNLOG(eCRITICAL_LOG, "[_LoadMapObjectInfo] Failed : %s file is not Exist", pszFilePath); // goto CLOSURE_MARK; // } // // if(!rWMOArchive.LoadFile(const_cast(pWMOINFO->pszPath))) // { // goto CLOSURE_MARK; // } // // WORD wVersion = 0; // rWMOArchive.Seek(4, SO_CURRENT); // rWMOArchive >> wVersion; // rWMOArchive.SetVersion(wVersion); // // St_LHFileHeader stLHFH; // if(170 < rWMOArchive.GetVersion()) // { // rWMOArchive.Read(&stLHFH.wSecondVersion, sizeof(WORD)); // rWMOArchive.Read(&stLHFH.dwCheckSum, sizeof(DWORD)); // //SUNLOG(eDEV_LOG, "Second Ver[%u] and CheckSum[%u]", fhInfo.wSecondVersion, fhInfo.dwCheckSum); // } // // EIWORLDBASE().SerializeExtraAreaInfo(&rWMOArchive, TRUE); // // if(! (bRET = _Load_WMO_MAPOBJECT(rWMOArchive))) // goto CLOSURE_MARK; // // if(! (bRET = _Load_WMO_TRIGGER(rWMOArchive))) // goto CLOSURE_MARK; // // // // // Map°ú Wmo ÆÄÀÏÀÇ Version ¹«°á¼º üũ! // _CheckVersion_MAPnWMO(m_wVersion, wVersion); // // bRET = TRUE; // //CLOSURE_MARK: // rWMOArchive.Close(); // // return bRET; //} // //BOOL WiseMapInfo::_CheckVersion_MAPnWMO(DWORD verMAP, DWORD verWMO) //{ // // 167 ÀÌÇÏ ¹öÀüÀÇ MapÀº ½Å±Ô·Î ±³Ã¼ÇÏ´Â °ÍÀÌ ·Îµù¿¡ ºÎÇϰ¡ Àû´Ù. // if(!(verMAP > 167)) // { // //SUNLOG(eCRITICAL_LOG, "[_CheckVersionBetweenMapWmo] Warning! %s Version[%u] is Low!!", m_tszMapPath, MapVersion); // } // // // 162, 166, 167À» °æ°è·Î Wmo º¸´Ù MapÀÇ ¹öÀüÀÌ ´õ ³ôÀ¸¸é ¾ÈµÈ´Ù. // BOOL bCheckFail = TRUE; // // bCheckFail = bCheckFail && (verMAP>162) && !(verWMO>162); // bCheckFail = bCheckFail && (verMAP>166) && !(verWMO>166); // bCheckFail = bCheckFail && (verMAP>167) && !(verWMO>167); // bCheckFail = bCheckFail && (verMAP>170) && !(verWMO>170); // // if(!bCheckFail) // { // //SUNLOG(eCRITICAL_LOG, "[_CheckVersionBetweenMapWmo] Critical! %s Version[%u] is Low!!", m_tszMapPath, WmoVersion); // DEBUGGING_CODE_L1("CRITICAL Version Mismatch!"); // DEBUG_INTERRUPT(); // return FALSE; // } // return TRUE; //} // //void WiseMapInfo::_Destroy() //{ //} // //