void FGameplayDebuggerModule::OnWorldInitialized(UWorld* World, const UWorld::InitializationValues IVS) { // make sure that world has valid player manager, create when it doesn't if (World && World->IsGameWorld()) { GetPlayerManager(World); } }
Player* Controller::GetMyPlayer() { if (m_pMyPlayer == 0) { m_strMyPlayerID = Game()->GetConfig()->GetRandomID(); m_pMyPlayer = new Player(); m_pMyPlayer->init(); m_pMyPlayer->SetID(m_strMyPlayerID); GetPlayerManager()->AddPlayer(m_pMyPlayer); } return m_pMyPlayer; }
void sv::ObstacleManager::ParseLevel() { char dir[1024]; char path[15]; memcpy(path, "../Level/?.lvl", 15 * sizeof(char)); path[9] = '0' + GetPlayerManager()->GetNumber(); Engine::Instance()->GetPath(path, dir, sizeof(dir)); std::ifstream inFile; inFile.open(dir); bool success = ! inFile.fail(); if(! success) { Engine::Instance()->GetPath("../Level/default.lvl", dir, sizeof(dir)); inFile.open(dir); success = ! inFile.fail(); } if(success) { char lane = 0; char step = 0; char c = inFile.get(); char line[LANE_MAX]; char* level[1024]; while(inFile.good() && lane < sizeof(level)) { while(c != '\n' && c != '\r' && inFile.good()) { if(step < 16) line[step++] = c; c = inFile.get(); } if(step > 0) { level[lane] = (char*) malloc(LANE_MAX * sizeof(char)); memcpy(level[lane], line, LANE_MAX * sizeof(char)); lane++; } step = 0; c = inFile.get(); } m_LevelSize = lane; m_Level = (char**) malloc(lane * sizeof(char*)); memcpy(m_Level, level, lane * sizeof(char*)); inFile.close(); } else { m_LevelSize = 1; m_Level = (char**) malloc(1 * sizeof(char*)); m_Level[0] = (char*) malloc(LANE_MAX * sizeof(char)); memset(m_Level[0], ' ', LANE_MAX * sizeof(char)); } }
/************************************************************************ * 游戏主循环 ************************************************************************/ void Controller::LoopGame(float delt) { static int StaticTimeInterval = 0.0f; if(!m_bLoopGame) { return; } StaticTimeInterval += delt; if(m_bIsNetGame) { GameProtocol protocol; if (Game()->GetNetworkModule()->TryReadPackage(protocol)) { Game()->GetRecvDataLogic()->Process(protocol); } } if (m_bIsNetGame && StaticTimeInterval > 1.0f) { GameProtocol protocol; //GamePackage_Player* pl = protocol.AddPlayer(); //GetPlayerManager()->ConvertPlayer2Package(*GetPlayerManager()->GetPlayer(m_strMyPlayerID),*pl); //protocol.SetMsgCode(CodeMsg::code_player_send_state); //GetNetworkModule()->SendPackage(protocol); StaticTimeInterval = 0.0f; } // 怪物管理器对怪物进行的一些处理 Game()->GetMonsterManager()->Process(delt); // 怪物的AI处理 Game()->GetMonsterAI()->Process(delt); vector<Player*> playerList = GetPlayerManager()->GetPlayerList(); for (int i = 0 ;i < playerList.size(); ++i) { Player* player = playerList[i]; // 玩家死亡 if (player->GetMsg() == CodeMsg::code_player_die) { PlayerLogic::GetInstance()->HandlePlayerDie(player); continue;; } // 检测玩家是否在传送门中 if (CheckPlayerIsInPortal()) { return; } // 玩家回血 PlayerLogic::GetInstance()->HandlePlayerBloodChange(player,Game()->GetConfig()->GetPlayerBloodReturnValue()); // 玩家回魔 PlayerLogic::GetInstance()->HandlePlayerMagicChange(player,Game()->GetConfig()->GetPlayerMagicReturnValue()); // 装备管理器对装备进行的一些处理 Game()->GetEquipmentManager()->Process(delt); // 设置当前被选中的怪物(假如有的话) SetCurrentSelectedMonster(); // 主要针对玩家的处理 PlayerLogic::GetInstance()->PlayerProcess(player,m_pCurrentSelectedMonster); } }
bool CServer::OnLoad() { // If in debug mode set memory test function #ifdef NIV_DEBUG atexit(MemoryTest); #endif // Open the log file CLogFile::Open("Server.log", true); // Install our exception handler CExceptionHandler::Install(); CLogFile::Printf("Starting up " SERVER_TITLE "..."); // Create the config instance g_pConfig = new CConfig(); if(!g_pConfig) { CLogFile::Printf("Failed to create config instance!"); return false; } CLogFile::Printf("Config instance created"); // Open the config file if(!g_pConfig->Open(String("%sServer.conf", SharedUtility::GetAppPath()))) CLogFile::Printf("Failed to open config file! Settings will default to appropriate values."); else CLogFile::Printf("Config file opened"); // Initialize the net module if(!CNetworkModule::Init()) { CLogFile::Printf("Failed to initialize the net module!"); return false; } CLogFile::Printf("Net module initialized"); // Create the network manager instance m_pNetworkManager = new CNetworkManager(); if(!m_pNetworkManager) { CLogFile::Printf("Failed to create network manager instance!"); return false; } CLogFile::Printf("Network manager instance created"); // Create the player manager instance m_pPlayerManager = new CPlayerManager(); if(!GetPlayerManager()) { CLogFile::Printf("Failed to create player manager instance!"); } CLogFile::Printf("Player manager instance created"); // Create the vehicle manager instance m_pVehicleManager = new CVehicleManager(); if(!m_pVehicleManager) { CLogFile::Printf("Failed to create vehicle manager instance!"); } CLogFile::Printf("Vehicle manager instance created"); // Get server port int iServerPort = GetConfigInteger("port", 9999); // Get show fps m_bShowFPS = GetConfigBoolean("showfps", true); // Start up the network manager m_pNetworkManager->Startup(iServerPort, PLAYER_MAX); CLogFile::Printf("Network manager started up"); // Create the resource and scripting manager CEntityIDs::Initalize(); m_pRootEntity = new CRootEntity(); g_pRootEntity = m_pRootEntity; m_pResourceManager = new CResourceManager("resources/"); g_pResourceManager = m_pResourceManager; // Load resources, get the first resource node if(g_pConfig->GetXML()->findNode("resource")) { while(true) { // Get the resource name String strResource = g_pConfig->GetXML()->nodeContent(); // Make sure the name is valid and attempt to load the resource if(strResource && !strResource.IsEmpty()) m_pResourceManager->Load(strResource); // Attempt to load the next resource node (if any) if(!g_pConfig->GetXML()->nextNode()) break; } } /*TiXmlDocument pDocument("Server.conf"); if(pDocument.LoadFile()) { TiXmlNode* pNode = pDocument.RootElement()->FirstChild("resource"); while(pNode) { String strResource = pNode->ToElement()->GetText(); pNode = pNode->NextSibling("resource"); } }*/ // Create the server lister instance m_pServerLister = new CServerLister(iServerPort); // Set the server title #ifdef WIN32 SetTitle(SERVER_TITLE); #endif CLogFile::Printf("Server started on port %d", iServerPort); /*// Temporary code CVehicle * pVehicle = m_pVehicleManager->Add(174); pVehicle->SetPosition(CVector3(-341.36f, 1144.80f, 14.79f)); pVehicle->SetRotation(CVector3(0.0f, 0.0f, 40.114815f)); pVehicle->SpawnForWorld();*/ return true; }