BOOL Sparam_Add(char* sSource, const char* sId, int nParam) { char sTmp[256]; wsprintf(sTmp, "%i", nParam); return(Sparam_Add(sSource, sId, sTmp)); }
BOOL CGameServDlg::StartServer() { // Sanity checks... if (!m_pServerMgr) return(FALSE); // Set the debug level... m_pServerMgr->RunConsoleString("debuglevel 0"); // Set the server options... NetStart_RunServerOptions(m_pServerMgr, &g_ServerOptions); // Set the game type string based on the game type... int nStringID = IDS_GAMETYPE_DEATHMATCH; switch (g_NetGame.m_byType) { case NGT_CAPTUREFLAG: nStringID = IDS_GAMETYPE_CAPTUREFLAG; break; case NGT_COOPERATIVE: nStringID = IDS_GAMETYPE_COOPERATIVE; break; case NGT_TEAMS: nStringID = IDS_GAMETYPE_TEAM; break; #ifdef _ADDON case NGT_SOCCER: nStringID = IDS_GAMETYPE_SOCCER; break; #endif } m_sGameSpyGameType.LoadString(nStringID); // Look at some console vars... HCONSOLEVAR hVar = NULL; DRESULT dr = m_pServerMgr->GetConsoleVar("WebRegUpdate", &hVar, NULL); if (dr == LT_OK && hVar) { float fVal = 0; dr = m_pServerMgr->GetVarValueFloat(hVar, &fVal); if (dr == LT_OK && fVal > 1) { s_timerWebRegUpdate = (DWORD)fVal; } } hVar = NULL; dr = m_pServerMgr->GetConsoleVar("EmptyExit", &hVar, NULL); if (dr == LT_OK && hVar) { float fVal = 0; dr = m_pServerMgr->GetVarValueFloat(hVar, &fVal); if (dr == LT_OK && fVal >= 1) { g_bEmptyExit = TRUE; } } hVar = NULL; dr = m_pServerMgr->GetConsoleVar("EmptyExitDelay", &hVar, NULL); if (dr == LT_OK && hVar) { float fVal = 0; dr = m_pServerMgr->GetVarValueFloat(hVar, &fVal); if (dr == LT_OK && fVal >= 1) { g_nEmptyExitDelay = (int)fVal; } } hVar = NULL; dr = m_pServerMgr->GetConsoleVar("SpyGameType", &hVar, NULL); if (dr == LT_OK && hVar) { char sTemp[64] = { "" }; dr = m_pServerMgr->GetVarValueString(hVar, sTemp, 64); if (dr == LT_OK && sTemp[0] != '\0') { m_sGameSpyGameType = sTemp; } } hVar = NULL; dr = m_pServerMgr->GetConsoleVar("SpyGameMode", &hVar, NULL); if (dr == LT_OK && hVar) { char sTemp[64] = { "" }; dr = m_pServerMgr->GetVarValueString(hVar, sTemp, 64); if (dr == LT_OK && sTemp[0] != '\0') { m_sGameSpyGameMode = sTemp; } } // Host the game... CWaitCursor wc; NetHost nh; memset(&nh, 0, sizeof(nh)); nh.m_dwMaxPlayers = g_ServerInfo.m_dwMaxPlayers; nh.m_Port = NetStart_GetPort(); CString sHost; #ifdef _ADDON sHost.LoadString(IDS_APPNAME_AO); #else sHost.LoadString(IDS_APPNAME); #endif Sparam_Add(nh.m_sName, NST_GAMENAME, g_ServerInfo.m_sName); Sparam_Add(nh.m_sName, NST_GAMEHOST, sHost); Sparam_Add(nh.m_sName, NST_GAMELEVEL, g_NetGame.m_sLevels[0]); Sparam_Add(nh.m_sName, NST_GAMETYPE, g_NetGame.m_byType); if (m_pServerMgr->HostGame(&nh) != DTRUE) { WriteConsoleString(IDS_CONSOLE_UNABLETOHOST); StopServer(); return(FALSE); } // Start the world... StartGameRequest req; memset(&req, 0, sizeof(req)); req.m_Type = STARTGAME_HOST; req.m_pGameInfo = &g_NetGame; req.m_GameInfoLen = sizeof(NetGame_t); strcpy(req.m_WorldName, g_NetGame.m_sLevels[0]); if (m_pServerMgr->StartWorld(&req) != DTRUE) { WriteConsoleString(IDS_CONSOLE_UNABLETOSTARTWORLD); WriteConsoleString(req.m_WorldName); StopServer(); return(FALSE); } // Update the service info with the tcp/ip address if available... g_ServerInfo.m_sAddress[0] = '\0'; g_wPort = 0; m_pServerMgr->GetTcpIpAddress(g_ServerInfo.m_sAddress, 128, g_wPort); CString sService = g_ServerInfo.m_sService; g_sFullTcpIpAddress = ""; if (g_ServerInfo.m_sAddress[0] != '\0') { sService += " "; g_sFullTcpIpAddress = g_ServerInfo.m_sAddress; if (g_wPort > 0 && g_wPort != DEFAULT_PORT) { char sTemp[32]; wsprintf(sTemp, ":%i", g_wPort); g_sFullTcpIpAddress += sTemp; } sService += "["; sService += g_sFullTcpIpAddress; sService += "]"; } SetDlgItemText(IDC_SERVER_SERVICE, sService); // Tell the server shell to update the game info parameters... m_pServerMgr->SendToServerShell("GAMEINIT"); // Tell the server that this is a stand-alone server hosted game... m_pServerMgr->SendToServerShell("SERVHOST"); // Init some stuff now that we're running... m_bRunning = TRUE; m_timeServerStart = timeGetTime(); g_timeStart = timeGetTime(); m_timeLevelStart = m_timeServerStart; // Init the GameSpy manager... if (g_ServerInfo.m_bUseGameSpy) { if (m_GameSpyMgr.Init(g_sSpyGameName, g_sSpyGameVer, g_sSpyGameKey, 0, g_wPort, (g_wPort+166), GSMF_USEGAMEPORTFORHEARTBEAT)) { m_GameSpyMgr.SetSendHandler(&m_SendHandler); } else { g_ServerInfo.m_bUseGameSpy = FALSE; } } // Create the thread to do our updating... m_hThread = CreateThread(NULL, 0, ThreadUpdate, (void*)g_pDialog, 0, &m_dwThreadID); // All done... WriteConsoleString(IDS_CONSOLE_SERVERRUNNING); return(TRUE); }