BOOL Scene::SetLoadData( const CHAR* filename, SCENE_LOAD& SceneLoad ) { __ENTER_FUNCTION CHAR szTemp[ _MAX_PATH ], szMap[ _MAX_PATH ], szMonster[ _MAX_PATH ], szPlatform[ _MAX_PATH ], szGrowPointData[ _MAX_PATH ], szGrowPointSetup[ _MAX_PATH ], szPatrolPointData[ _MAX_PATH ], szArea[ _MAX_PATH ], //szPet[_MAX_PATH], szStallInfo[ _MAX_PATH ] ; BOOL IsPlatformExist ; BOOL IsGrowPointExist ; BOOL IsStallInfoExist ; //////////////////////////////////////////////////////////////////////////////// //读取场景文件 .scn memset( szTemp, 0, _MAX_PATH ) ; GET_SCENE_FULL_PATH( szTemp, filename ) ; Ini f( szTemp ) ; memset( szMap, 0, _MAX_PATH ) ; f.ReadText( "System", "navmapname", szMap, _MAX_PATH ) ; memset( szMonster, 0, _MAX_PATH ) ; f.ReadText( "System", "monsterfile", szMonster, _MAX_PATH ) ; memset( szArea, 0, _MAX_PATH ) ; f.ReadText( "System", "eventfile", szArea, _MAX_PATH ) ; memset( szPlatform, 0, _MAX_PATH ) ; IsPlatformExist = f.ReadTextIfExist( "System", "platformfile", szPlatform, _MAX_PATH ) ; memset( szGrowPointData, 0, _MAX_PATH ) ; IsGrowPointExist = f.ReadTextIfExist( "System", "growpointdata", szGrowPointData, _MAX_PATH ) ; if ( IsGrowPointExist ) { memset( szGrowPointSetup, 0, _MAX_PATH ) ; f.ReadTextIfExist( "System", "growpointsetup", szGrowPointSetup, _MAX_PATH ) ; } //摊位信息 memset( szStallInfo, 0, _MAX_PATH ) ; IsStallInfoExist = f.ReadTextIfExist( "System", "stallinfodata", szStallInfo, _MAX_PATH ) ; if ( IsStallInfoExist ) { f.ReadText( "System", "stallinfodata", szStallInfo, _MAX_PATH ) ; } memset( szPatrolPointData,0,_MAX_PATH ) ; f.ReadText( "System", "patrolpoint", szPatrolPointData, _MAX_PATH ) ; //memset(szPet, 0, _MAX_PATH) ; //f.ReadText("System", "petfile", szPet, _MAX_PATH) ; SceneLoad.CleanUp() ; strncpy( SceneLoad.m_szMap, szMap, _MAX_PATH - 1 ) ; strncpy( SceneLoad.m_szMonster, szMonster, _MAX_PATH - 1 ) ; strncpy( SceneLoad.m_szPlatform, szPlatform, _MAX_PATH - 1 ) ; strncpy( SceneLoad.m_szGrowPointData, szGrowPointData, _MAX_PATH - 1 ) ; strncpy( SceneLoad.m_szGrowPointSetup, szGrowPointSetup, _MAX_PATH - 1 ) ; strncpy( SceneLoad.m_szPatrolPointData, szPatrolPointData, _MAX_PATH - 1 ) ; strncpy( SceneLoad.m_szArea, szArea, _MAX_PATH - 1 ) ; //strncpy( SceneLoad.m_szPet, szPet, _MAX_PATH-1 ) ; strncpy( SceneLoad.m_szStallInfo, szStallInfo, _MAX_PATH - 1 ) ; SceneLoad.m_IsGrowPointExist = IsGrowPointExist ; SceneLoad.m_IsPlatformExist = IsPlatformExist ; SceneLoad.m_IsStallInfoExist = IsStallInfoExist ; return TRUE ; __LEAVE_FUNCTION return FALSE ; }
BOOL Scene::Load( SCENE_LOAD* load ) { __ENTER_FUNCTION CHAR szTemp[ _MAX_PATH ], szMap[ _MAX_PATH ], szMonster[ _MAX_PATH ], szPlatform[ _MAX_PATH ], szGrowPointData[ _MAX_PATH ], szGrowPointSetup[ _MAX_PATH ], szPatrolPointData[ _MAX_PATH ], szArea[ _MAX_PATH ], //szPet[_MAX_PATH], szStallInfo[ _MAX_PATH ] ; memset( szTemp, 0, _MAX_PATH ) ; memset( szMap, 0, _MAX_PATH ) ; memset( szMonster, 0, _MAX_PATH ) ; memset( szPlatform, 0, _MAX_PATH ) ; memset( szGrowPointData, 0, _MAX_PATH ) ; memset( szGrowPointSetup, 0, _MAX_PATH ) ; memset( szPatrolPointData, 0, _MAX_PATH ) ; memset( szArea, 0, _MAX_PATH ) ; //memset( szPet, 0, _MAX_PATH ) ; memset( szStallInfo, 0, _MAX_PATH ) ; BOOL IsPlatformExist ; BOOL IsGrowPointExist ; BOOL IsStallInfoExist ; strncpy( szMap, load->m_szMap, _MAX_PATH - 1 ) ; strncpy( szMonster, load->m_szMonster, _MAX_PATH - 1 ) ; strncpy( szPlatform, load->m_szPlatform, _MAX_PATH - 1 ) ; strncpy( szGrowPointData, load->m_szGrowPointData, _MAX_PATH - 1 ) ; strncpy( szGrowPointSetup, load->m_szGrowPointSetup, _MAX_PATH - 1 ) ; strncpy( szPatrolPointData, load->m_szPatrolPointData, _MAX_PATH - 1 ) ; strncpy( szArea, load->m_szArea, _MAX_PATH - 1 ) ; //strncpy( szPet, load->m_szPet, _MAX_PATH-1 ) ; strncpy( szStallInfo, load->m_szStallInfo, _MAX_PATH - 1 ) ; IsGrowPointExist = load->m_IsGrowPointExist ; IsPlatformExist = load->m_IsPlatformExist ; IsStallInfoExist = load->m_IsStallInfoExist ; //清除当前场景中的Player信息 if ( m_pScenePlayerManager ) { m_pScenePlayerManager->RemoveAllPlayer() ; } Log::SaveLog( SERVER_LOGFILE, "BeginLoad %d", this->SceneID() ) ; //////////////////////////////////////////////////////////////////////////////// //读取地图信息 memset( szTemp, 0, _MAX_PATH ) ; GET_SCENE_FULL_PATH( szTemp, szMap ) ; BOOL ret = m_pMap->Load( szTemp ) ; if ( !ret ) { Assert( FALSE ) ; return FALSE ; } if ( NULL == m_pZone ) { INT cx = ( INT )( m_pMap->CX() / g_Config.m_ConfigInfo.m_ZoneSize ) ; INT cz = ( INT )( m_pMap->CZ() / g_Config.m_ConfigInfo.m_ZoneSize ) ; if( 0 < ( INT )m_pMap->CX() % g_Config.m_ConfigInfo.m_ZoneSize ) cx ++ ; if( 0 < ( INT )m_pMap->CZ() % g_Config.m_ConfigInfo.m_ZoneSize ) cz ++ ; m_ZoneInfo.m_wZoneSize = ( WORD )( cx * cz ) ; m_ZoneInfo.m_wZoneW = ( WORD )cx ; m_ZoneInfo.m_wZoneH = ( WORD )cz ; m_pZone = new Zone[ m_ZoneInfo.m_wZoneSize ] ; if ( NULL == m_pZone ) { Assert( FALSE ) ; return FALSE ; } for ( WORD i = 0 ; i < m_ZoneInfo.m_wZoneSize ; i++ ) { m_pZone[i].SetZoneID( ( ZoneID_t )i ) ; } } else { for( WORD i = 0 ; i < m_ZoneInfo.m_wZoneSize ; i++ ) { m_pZone[i].CleanUp() ; } } Log::SaveLog( SERVER_LOGFILE, "Load %s ...OK!", szTemp ) ; ////////////////////////////////////////////////////////////////////////// // 读取巡逻路线信息 memset( szTemp, 0, _MAX_PATH ) ; GET_SCENE_FULL_PATH( szTemp, szPatrolPointData ) ; m_pPatrolPathMgr->CleanUp() ; m_pPatrolPathMgr->LoadPatrolPoint( szTemp ) ; Log::SaveLog( SERVER_LOGFILE, "Load %s ...OK!", szTemp ) ; //////////////////////////////////////////////////////////////////////////////// //读取怪物信息 已经包含“读取宠物信息” memset( szTemp, 0, _MAX_PATH ) ; GET_SCENE_FULL_PATH( szTemp, szMonster ) ; // 重置宠物信息 m_pPetManager->RemoveAllPet() ; m_pPetManager->Reset() ; m_pMonsterManager->RemoveAllMonster() ; m_pMonsterManager->Reset() ; ret = m_pMonsterManager->LoadMonster( szTemp ) ; if ( !ret ) { Assert( FALSE ) ; return FALSE ; } //////////////////////////////////////////////////////////////////////////////// // 读取操作台 if ( FALSE != IsPlatformExist ) { memset( szTemp, 0, _MAX_PATH ) ; GET_SCENE_FULL_PATH( szTemp, szPlatform ) ; m_pPlatformManager->RemoveAllPlatform() ; ret = m_pPlatformManager->LoadPlatform( szTemp ) ; if ( FALSE == ret ) { Assert( FALSE ) ; Log::SaveLog( SERVER_LOGFILE, "This scene read platform error!" ) ; } else { Log::SaveLog( SERVER_LOGFILE, "Load %s ...OK!", szTemp ) ; } } else { Log::SaveLog( SERVER_LOGFILE, "This scene has no platform!" ) ; } //////////////////////////////////////////////////////////////////////////////// //读取摊位信息, 不能用于开辟副本 if ( IsStallInfoExist ) { memset( szTemp, 0, _MAX_PATH ) ; GET_SCENE_FULL_PATH( szTemp, szStallInfo ) ; m_pStallInfoManager->CleanUp() ; //分配内存 m_pStallInfoManager->Init( m_pMap->CX(), m_pMap->CZ() ) ; //读取数据 if ( FALSE == m_pStallInfoManager->Load( szTemp ) ) { m_pStallInfoManager->CleanUp() ; Assert( FALSE ) ; Log::SaveLog( SERVER_LOGFILE, "This scene read stallinfo error!" ) ; } else { Log::SaveLog( SERVER_LOGFILE, "Load %s ...OK!", szTemp ) ; } } else { Log::SaveLog( SERVER_LOGFILE, "This scene has no stallinfo!" ) ; } //////////////////////////////////////////////////////////////////////////////// //读取初始化玩家商店管理器 m_pPlayerShopManager->Init( this ) ; Log::SaveLog( SERVER_LOGFILE, "Init m_pPlayerShopManager OK!" ) ; //////////////////////////////////////////////////////////////////////////////// //读取初始化掉落包管理器 m_pItemBoxManager->Init() ; Log::SaveLog( SERVER_LOGFILE, "Init ItemBoxManager OK!" ) ; //////////////////////////////////////////////////////////////////////////////// //任务相关 m_pLuaInterface->Destroy() ; m_pLuaInterface->Init( this ) ; Log::SaveLog( SERVER_LOGFILE, "Init LuaInterface OK!" ) ; //////////////////////////////////////////////////////////////////////////////// //脚本注册相关 if ( !m_pScriptFileMgr->IsInit() ) { m_pScriptFileMgr->Init( FILE_SCRIPT, FALSE ) ; } Log::SaveLog( SERVER_LOGFILE, "Load ../Public/Data/script.dat OK!" ) ; //////////////////////////////////////////////////////////////////////////////// //场景定时器 if ( !m_pSceneTimers->IsInit() ) { m_pSceneTimers->CreateTimer( g_Config.m_ConfigInfo.m_MaxTimerCount, this ) ; } else { m_pSceneTimers->CleanUp() ; } //////////////////////////////////////////////////////////////////////////////// //场景生长点 if ( IsGrowPointExist ) { memset( szTemp, 0, _MAX_PATH ) ; GET_SCENE_FULL_PATH( szTemp, szGrowPointData ) ; strcpy( szGrowPointData, szTemp ) ; memset( szTemp, 0, _MAX_PATH ) ; GET_SCENE_FULL_PATH( szTemp, szGrowPointSetup ) ; strcpy( szGrowPointSetup, szTemp ) ; m_GrowPointGroup.CleanUp() ; BOOL bInitGp = m_GrowPointGroup.Load( szGrowPointData, szGrowPointSetup ) ; if ( !bInitGp ) { Log::SaveLog( SERVER_LOGFILE, "This scene has no growpoint!" ) ; } } else { Log::SaveLog( SERVER_LOGFILE, "This scene has no growpoint!" ) ; } //////////////////////////////////////////////////////////////////////////////// //事件区 memset( szTemp, 0, _MAX_PATH ) ; GET_SCENE_FULL_PATH( szTemp, szArea ) ; m_pAreaManager->Term() ; ret = m_pAreaManager->Init( szTemp ) ; if ( !ret ) { Assert( FALSE ) ; return FALSE ; } Log::SaveLog( SERVER_LOGFILE, "Load %s ...OK!", szTemp ) ; m_EventCore.Reset() ; Log::SaveLog( SERVER_LOGFILE, "Reset EventCore ...OK!" ) ; Log::SaveLog( SERVER_LOGFILE, "EndLoad %d", this->SceneID() ) ; return TRUE ; __LEAVE_FUNCTION return FALSE ; }
BOOL Scene::Load( SCENE_LOAD* load ) { __ENTER_FUNCTION CHAR szTemp[_MAX_PATH], szMap[_MAX_PATH], szMonster[_MAX_PATH], szPlatform[_MAX_PATH], szGrowPointData[_MAX_PATH], szGrowPointSetup[_MAX_PATH], szPatrolPointData[_MAX_PATH], szArea[_MAX_PATH], //szPet[_MAX_PATH], szStallInfo[_MAX_PATH], szBus[_MAX_PATH]; memset( szTemp, 0, _MAX_PATH ) ; memset( szMap, 0, _MAX_PATH ) ; memset( szMonster, 0, _MAX_PATH ) ; memset( szPlatform, 0, _MAX_PATH ) ; memset( szGrowPointData, 0, _MAX_PATH ) ; memset( szGrowPointSetup, 0, _MAX_PATH ) ; memset( szPatrolPointData, 0, _MAX_PATH ) ; memset( szArea, 0, _MAX_PATH ) ; //memset( szPet, 0, _MAX_PATH ) ; memset( szStallInfo, 0, _MAX_PATH ) ; memset( szBus, 0, _MAX_PATH ) ; BOOL IsPlatformExist; BOOL IsGrowPointExist; BOOL IsStallInfoExist; BOOL IsBusExist; strncpy( szMap, load->m_szMap, _MAX_PATH-1 ) ; strncpy( szMonster, load->m_szMonster, _MAX_PATH-1 ) ; strncpy( szPlatform, load->m_szPlatform, _MAX_PATH-1 ) ; strncpy( szGrowPointData, load->m_szGrowPointData, _MAX_PATH-1 ) ; strncpy( szGrowPointSetup, load->m_szGrowPointSetup, _MAX_PATH-1 ) ; strncpy( szPatrolPointData, load->m_szPatrolPointData, _MAX_PATH-1 ) ; strncpy( szArea, load->m_szArea, _MAX_PATH-1 ) ; //strncpy( szPet, load->m_szPet, _MAX_PATH-1 ) ; strncpy( szStallInfo, load->m_szStallInfo, _MAX_PATH-1 ) ; strncpy( szBus, load->m_szBus, _MAX_PATH-1 ) ; IsGrowPointExist = load->m_IsGrowPointExist ; IsPlatformExist = load->m_IsPlatformExist ; IsStallInfoExist = load->m_IsStallInfoExist ; IsBusExist = load->m_IsBusExist ; //清除当前场景中的Player信息 if( m_pScenePlayerManager ) { m_pScenePlayerManager->RemoveAllPlayer() ; } Log::SaveLog( SERVER_LOGFILE, "BeginLoad %d", this->SceneID() ) ; //////////////////////////////////////////////////////////////////////////////// //读取地图信息 memset( szTemp, 0, _MAX_PATH ) ; GET_SCENE_FULL_PATH( szTemp, szMap ); BOOL ret = m_pMap->Load( szTemp ) ; if( !ret ) { Assert(FALSE) ; return FALSE ; } if(m_pZone==NULL) { INT cx = (INT)(m_pMap->CX()/g_Config.m_ConfigInfo.m_ZoneSize) ; INT cz = (INT)(m_pMap->CZ()/g_Config.m_ConfigInfo.m_ZoneSize) ; if( (INT)m_pMap->CX()%g_Config.m_ConfigInfo.m_ZoneSize > 0 ) cx ++ ; if( (INT)m_pMap->CZ()%g_Config.m_ConfigInfo.m_ZoneSize > 0 ) cz ++ ; m_ZoneInfo.m_wZoneSize = (WORD)(cx*cz) ; m_ZoneInfo.m_wZoneW = (WORD)cx ; m_ZoneInfo.m_wZoneH = (WORD)cz ; m_pZone = new Zone[m_ZoneInfo.m_wZoneSize] ; if( m_pZone==NULL ) { Assert( FALSE ) ; return FALSE ; } for( WORD i=0; i<m_ZoneInfo.m_wZoneSize; i++ ) { m_pZone[i].SetZoneID( (ZoneID_t)i ) ; } } else { for( WORD i=0; i<m_ZoneInfo.m_wZoneSize; i++ ) { m_pZone[i].CleanUp() ; } } Log::SaveLog( SERVER_LOGFILE, "Load %s ...OK!", szTemp ) ; m_ClientRes = g_pSceneManager->GetClientResByNavName( szMap ) ; ////////////////////////////////////////////////////////////////////////// // 读取巡逻路线信息 FrankWu[9/20/2005] memset( szTemp, 0, _MAX_PATH ) ; GET_SCENE_FULL_PATH( szTemp, szPatrolPointData ); m_pPatrolPathMgr->CleanUp() ; m_pPatrolPathMgr->LoadPatrolPoint(szTemp); Log::SaveLog( SERVER_LOGFILE, "Load %s ...OK!", szTemp ) ; //////////////////////////////////////////////////////////////////////////////// //读取怪物信息 已经包含“读取宠物信息” memset( szTemp, 0, _MAX_PATH ) ; GET_SCENE_FULL_PATH( szTemp, szMonster ); // 重置宠物信息 m_pPetManager->RemoveAllPet() ; m_pPetManager->Reset(); m_pHorseManager->RemoveAllHorse(); m_pHorseManager->Reset(); m_pMonsterManager->RemoveAllMonster() ; m_pMonsterManager->Reset() ; ret = m_pMonsterManager->LoadMonster( szTemp ) ; if( !ret ) { Assert(FALSE) ; return FALSE ; } //////////////////////////////////////////////////////////////////////////////// // 读取操作台 if( IsPlatformExist != FALSE ) { memset( szTemp, 0, _MAX_PATH ); GET_SCENE_FULL_PATH( szTemp, szPlatform ); m_pPlatformManager->RemoveAllPlatform( ) ; ret = m_pPlatformManager->LoadPlatform( szTemp ); if( ret == FALSE ) { Assert(FALSE) ; Log::SaveLog( SERVER_LOGFILE, "This scene read platform error!" ); } else { Log::SaveLog( SERVER_LOGFILE, "Load %s ...OK!", szTemp ); } } else { Log::SaveLog( SERVER_LOGFILE, "This scene has no platform!" ); } //////////////////////////////////////////////////////////////////////////////// //读取摊位信息, 不能用于开辟副本 if(IsStallInfoExist) { memset( szTemp, 0, _MAX_PATH ); GET_SCENE_FULL_PATH( szTemp, szStallInfo ); Assert(m_pStallInfoManager); m_pStallInfoManager->CleanUp(); //分配内存 m_pStallInfoManager->Init( m_pMap->CX(), m_pMap->CZ() ); //读取数据 if(m_pStallInfoManager->Load( szTemp ) == FALSE) { m_pStallInfoManager->CleanUp(); Assert(FALSE) ; Log::SaveLog( SERVER_LOGFILE, "This scene read stallinfo error!" ); } else { Log::SaveLog( SERVER_LOGFILE, "Load %s ...OK!", szTemp ); } } else { Log::SaveLog( SERVER_LOGFILE, "This scene has no stallinfo!" ); } //////////////////////////////////////////////////////////////////////////////// //读取初始化掉落包管理器 m_pItemBoxManager->Init(); Log::SaveLog( SERVER_LOGFILE, "Init ItemBoxManager OK!" ); m_pObjItemManager->Init(); Log::SaveLog( SERVER_LOGFILE, "Init Obj_ItemManager OK!" ); //////////////////////////////////////////////////////////////////////////////// //读取初始化掉落包管理器 m_pTimerDoingManager->Init(); m_pTimerDoingManager->SetScene(this); Log::SaveLog( SERVER_LOGFILE, "Init TimerDoingManager OK!" ); //任务相关 m_pLuaInterface->Destroy() ; m_pLuaInterface->Init(this); Log::SaveLog( SERVER_LOGFILE, "Init LuaInterface OK!" ); //////////////////////////////////////////////////////////////////////////////// //脚本注册相关 if( !m_pScriptFileMgr->IsInit() ) { m_pScriptFileMgr->Init( FILE_SCRIPT, FALSE); } Log::SaveLog( SERVER_LOGFILE, "Load ../Public/Data/script.dat OK!" ); //////////////////////////////////////////////////////////////////////////////// //场景定时器 if( !m_pSceneTimers->IsInit() ) { m_pSceneTimers->CreateTimer(g_Config.m_ConfigInfo.m_MaxTimerCount,this); } else { m_pSceneTimers->CleanUp() ; } //////////////////////////////////////////////////////////////////////////////// //场景生长点 if(IsGrowPointExist) { memset( szTemp, 0, _MAX_PATH ) ; GET_SCENE_FULL_PATH( szTemp, szGrowPointData ); strcpy(szGrowPointData,szTemp); memset( szTemp, 0, _MAX_PATH ) ; GET_SCENE_FULL_PATH( szTemp, szGrowPointSetup ); strcpy(szGrowPointSetup,szTemp); m_GrowPointGroup.CleanUp() ; BOOL bInitGp = m_GrowPointGroup.Load(szGrowPointData,szGrowPointSetup); if(!bInitGp) { Log::SaveLog( SERVER_LOGFILE, "This scene has no growpoint!" ); } } else { Log::SaveLog( SERVER_LOGFILE, "This scene has no growpoint!" ); } //////////////////////////////////////////////////////////////////////////////// // 读取Bus if(IsBusExist) { memset( szTemp, 0, _MAX_PATH ); GET_SCENE_FULL_PATH( szTemp, szBus ); _MY_TRY { m_pBusManager->RemoveAllBus( ) ; } _MY_CATCH { } m_pBusManager->Reset( ) ; ret = m_pBusManager->LoadBus( szTemp ); if( ret == FALSE ) { DiskLog( SERVER_LOGFILE, "This scene read bus error!" ); } else { DiskLog( SERVER_LOGFILE, "Load %s ...OK!", szTemp ); } } else {