BOOL CGameServDlg::Init() { if(!m_bCSInitted) { InitializeCriticalSection(&m_CS); m_bCSInitted = TRUE; } // Display a console message... WriteConsoleString(IDS_CONSOLE_INITSERVER); // Get the server interface... m_pServerMgr = GetServerInterface(); if (!m_pServerMgr) return(FALSE); // Set our app handler... m_pServerMgr->SetAppHandler(&g_AppHandler); // Set the tab stops for the player list box... int nTabs[10] = { 30, 116, 181, 84, 86, 88, 90, 92, 94, 96 }; m_lbPlayers.SetTabStops(10, nTabs); // Load some strings... g_sSpyGameName.LoadString(IDS_SPYGAMENAME); g_sSpyGameKey.LoadString(IDS_SPYGAMEKEY); g_sWebRegUrl.LoadString(IDS_WEBREGURL); #ifdef _ADDON g_sSpyGameVer.LoadString(IDS_SPYGAMEVER_AO); g_sWebGameName.LoadString(IDS_WEBGAMENAME_AO); g_sWebGameVer.LoadString(IDS_WEBGAMEVER_AO); #else g_sSpyGameVer.LoadString(IDS_SPYGAMEVER); g_sWebGameName.LoadString(IDS_WEBGAMENAME); g_sWebGameVer.LoadString(IDS_WEBGAMEVER); #endif // All done... WriteConsoleString(IDS_CONSOLE_SERVERINITED); return(TRUE); }
void CGameServDlg::OnCommandsNextLevel() { if (m_pServerMgr) { WriteConsoleString(IDS_NEXTLEVEL); m_pServerMgr->SendToServerShell("NEXTLEVEL"); } }
void CGameServDlg::OnConsoleMessageUpdate(char* pMsg) { char sTemp[128]; if (Sparam_Get(sTemp, pMsg, NST_CONSOLEMSG)) { WriteConsoleString(sTemp); } }
void CGameServDlg::WriteServerError() { char str[256]; if (m_pServerMgr) { m_pServerMgr->GetErrorString(str, sizeof(str)-1); WriteConsoleString(str); } }
void CPerformanceMgr::SetPerformanceCfg(int nCfg) { if (nCfg < 0 || (uint32)nCfg >= m_ConfigList.size()) { WriteConsoleString("PerformanceConfig",".CustomConfig"); // g_pLTClient->WriteConfigFile("autoexec.cfg"); return; } sPerformCfg *pCfg = m_ConfigList[nCfg]; SetPerformanceOptions(pCfg,nCfg); }
void CGameServDlg::OnConsoleSend() { if (!m_pServerMgr) return; char sCmd[128]; sCmd[0] = '\0'; if (GetDlgItemText(IDC_CONSOLE_COMMAND, sCmd, 120) == 0) return; WriteConsoleString(sCmd); SetDlgItemText(IDC_CONSOLE_COMMAND, ""); m_pServerMgr->RunConsoleString(sCmd); UpdateConsoleVars(); }
void CFolderHostLevels::SaveLevelList(CListCtrl *pList) { // Sanity checks... if (!pList) return; // Write out the level count... int cLevels = pList->GetNum(); if (m_nGameType == COOPERATIVE_ASSAULT) { WriteConsoleInt("NetCANumLevels", cLevels); } else { WriteConsoleInt("NetNumLevels", cLevels); } // Write out each level... for (int i = 0; i < cLevels; i++) { char sLabel[32]; if (m_nGameType == COOPERATIVE_ASSAULT) { wsprintf(sLabel, "NetCALevel%i", i); } else { wsprintf(sLabel, "NetLevel%i", i); } CStaticTextCtrl *pCtrl = (CStaticTextCtrl *)pList->GetControl(i); HSTRING hText = pCtrl->GetString(); char *pTemp = g_pLTClient->GetStringData(hText); char sLevel[256] = ""; sprintf(sLevel,"%s\\%s",szPath,pTemp); WriteConsoleString(sLabel, sLevel); } }
void CGameServDlg::WriteConsoleString(int nStringID) { CString sMsg; if (!sMsg.LoadString(nStringID)) return; WriteConsoleString(sMsg); }
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); }
void CGameServDlg::OnConsoleOutput(char* pMsg) { WriteConsoleString(pMsg); }
void CGameServDlg::OnStandardUpdate(char* pMsg) { // Update the level info... char sTemp[128]; if (Sparam_Get(sTemp, pMsg, NST_CURLEVEL)) { SetDlgItemText(IDC_GAME_CURLEVEL, sTemp); } if (Sparam_Get(sTemp, pMsg, NST_NEXTLEVEL)) { SetDlgItemText(IDC_GAME_NEXTLEVEL, sTemp); } // Get the current player selection info... CString sCurSel; CString sCurSelName; int nCurSel = m_lbPlayers.GetCurSel(); if (nCurSel != LB_ERR) { m_lbPlayers.GetText(nCurSel, sCurSel); int i = 0; while (sCurSel[i] >= 32) { sCurSelName += sCurSel[i]; i++; } } // Update the player info... m_lbPlayers.ResetContent(); int count = 0; int cPlayers = 0; int nNewSel = nCurSel; if (Sparam_Get(sTemp, pMsg, NST_PLRCOUNT)) { count = atoi(sTemp); } for (int i = 1; i <= count; i++) { char sBase[32]; char sName[64]; int j = i-1; wsprintf(sBase, "%s%i", NST_PLRNAME_BASE, i); if (Sparam_Get(sName, pMsg, sBase)) { strcpy(m_aPis[j].sName, sName); wsprintf(sBase, "%s%i", NST_PLRFRAG_BASE, i); if (Sparam_Get(sTemp, pMsg, sBase)) { m_aPis[j].nFrags = atoi(sTemp); wsprintf(sBase, "%s%i", NST_PLRID_BASE, i); if (Sparam_Get(sTemp, pMsg, sBase)) { m_aPis[j].dwID = atoi(sTemp); } else { m_aPis[j].dwID = 0; } } } int clientIndex = ClientIDToIndex(m_pServerMgr, m_aPis[j].dwID); m_aPis[j].dwPing = 0; if(clientIndex != -1) { ClientInfo info; if(m_pServerMgr->GetClientInfo(clientIndex, &info)) { m_aPis[j].dwPing = (DWORD)(info.m_Ping * 1000.0f); } } cPlayers++; } // Sort the players... PLAYERINFO TempPi; for (i = 0; i < count - 1; i++) { for (int j = i+1; j < count; j++) { BOOL bSwap = FALSE; if (m_aPis[i].nFrags < m_aPis[j].nFrags) bSwap = TRUE; if (m_aPis[i].nFrags == m_aPis[j].nFrags) { if (strcmp(m_aPis[i].sName, m_aPis[j].sName) > 0) bSwap = TRUE; } if (bSwap) { memcpy(&TempPi, &m_aPis[i], sizeof(PLAYERINFO)); memcpy(&m_aPis[i], &m_aPis[j], sizeof(PLAYERINFO)); memcpy(&m_aPis[j], &TempPi, sizeof(PLAYERINFO)); } } } // Add the players to the list box... nNewSel = LB_ERR; for (i = 0; i < count; i++) { CString sPlayer; sPlayer.Format("(%d)\t%s\t%i", m_aPis[i].dwPing, m_aPis[i].sName, m_aPis[i].nFrags); int nIndex = m_lbPlayers.AddString(sPlayer); if (nIndex != LB_ERR) { m_lbPlayers.SetItemData(nIndex, m_aPis[i].dwID); if (!sCurSelName.IsEmpty() && strcmp(m_aPis[i].sName, sCurSelName) == 0) nNewSel = nIndex; } } // Reselect the selected player if necessary... if (nNewSel != LB_ERR) { m_lbPlayers.SetCurSel(nNewSel); } CWnd* pWnd = GetDlgItem(IDC_PLAYERS_BOOT); if (pWnd) { pWnd->EnableWindow(nNewSel != LB_ERR); } // Check for empty exit... if (g_bEmptyExit) { if (m_cPlayers > 0 && cPlayers == 0) { WriteConsoleString(IDS_CONSOLE_LASTPLAYERLEFT); g_bDoEmptyExit = TRUE; g_timerEmptyExit = g_nEmptyExitDelay * 1000; } else { if (cPlayers >= 1) g_bDoEmptyExit = FALSE; } } // Set the number of players... m_cPlayers = cPlayers; SetDlgItemInt(IDC_GAME_PLAYERS, cPlayers); }
//sets current options from given cfg void CPerformanceMgr::SetPerformanceOptions(sPerformCfg *pCfg, int nCfg) { for (int i = 0; i < kNumDetailSettings; i++) { WriteConsoleInt(sSettings[i].szVar,pCfg->nSettings[i]); } uint32 dwAdvancedOptions = g_pInterfaceMgr->GetAdvancedOptions(); //disable triple buffer if ( !(dwAdvancedOptions & AO_TRIPLEBUFFER)) { } if (nCfg == 2 && kPerform_TripleBuffering) { //for high detail, the triple buffering default value depends on the VSyncOnFlip setting int vsync = !!GetConsoleInt("VSyncOnFlip",1); WriteConsoleInt(sSettings[kPerform_TripleBuffering].szVar,vsync+1); } //disable music if ( !(dwAdvancedOptions & AO_MUSIC)) { WriteConsoleInt(sSettings[kPerform_MusicActive].szVar,0); } if (pCfg->nSettings[kPerform_MusicActive] == 0) { WriteConsoleInt("musicvolume",MUSIC_MIN_VOL); } if (pCfg->nSettings[kPerform_ShadowDetail] <= 0) { //turn off shadows if appropriate WriteConsoleInt("ModelShadow_Proj_Enable", 0 ); } else { WriteConsoleInt("ModelShadow_Proj_Enable", 1 ); int8 nDetail = pCfg->nSettings[kPerform_ShadowDetail] - 1; for (int sub = 0; sub < kNumShadowDetails; sub++) { WriteConsoleInt(sShadowDetails[sub].szVar,sShadowDetails[sub].nSetting[nDetail]); } } uint8 nDetail = pCfg->nSettings[kPerform_FXDetail]; for (int sub = 0; sub < kNumFXDetails; sub++) { WriteConsoleInt(sFXDetails[sub].szVar,sFXDetails[sub].nSetting[nDetail]); } // Set the fx detail setting here (it is set in the loop above) so we know it is // always correct... g_pGameClientShell->GetClientFXMgr()->SetDetailLevel( GetConsoleInt("ClientFXDetailLevel", 0) ); switch (pCfg->nSettings[kPerform_EnvironmentalDetail]) { case 0: //off WriteConsoleInt("ScatterEnable", 0 ); WriteConsoleInt("SnowEnable", 0 ); break; case 1: //low WriteConsoleInt("ScatterEnable", 0 ); WriteConsoleInt("SnowEnable", 1 ); WriteConsoleFloat("SnowDensityScale", 0.25f ); break; case 2: //medium WriteConsoleInt("ScatterEnable", 1 ); WriteConsoleInt("SnowEnable", 1 ); WriteConsoleFloat("SnowDensityScale", 0.5f ); break; case 3: //high WriteConsoleInt("ScatterEnable", 1 ); WriteConsoleInt("SnowEnable", 1 ); WriteConsoleFloat("SnowDensityScale", 1.0f ); break; } nDetail = pCfg->nSettings[kPerform_DetailLevel]; if ( nDetail >= 0 && nDetail < kNumDetailLevels) { for (int grp = 0; grp < kNumTextureGroups; grp++) { WriteConsoleInt(sTextureGroups[grp].szVar,sTextureGroups[grp].nSetting[nDetail]); } } else { for (int grp = 0; grp < kNumTextureGroups; grp++) { WriteConsoleInt(sTextureGroups[grp].szVar,pCfg->nDetails[grp]); } } if (nCfg < 0) nCfg = GetPerformanceCfg(false); if (nCfg < 0 || (uint32)nCfg >= m_ConfigList.size()) { WriteConsoleString("PerformanceConfig",".CustomConfig"); } else { sPerformCfg *pPresetCfg = m_ConfigList[nCfg]; WriteConsoleString("PerformanceConfig",pPresetCfg->szName); } // g_pLTClient->WriteConfigFile("autoexec.cfg"); }
// Change in focus void CFolderPlayer::OnFocus(LTBOOL bFocus) { if (bFocus) { m_bRestoreSkinHead = LTTRUE; m_nModNum = -1; m_nSkinNum = 0; m_nHeadNum = 0; int nUpdateRate = GetConsoleInt("UpdateRate",10); m_nConnect = 3; while (m_nConnect && nUpdateRate < kConnectSpeeds[m_nConnect]) m_nConnect--; nInitConnect = m_nConnect; SAFE_STRCPY(m_szPlayerModel,g_vtPlayerModel.GetStr() ); GetConsoleString("NetPlayerSkin",m_szPlayerSkin,""); GetConsoleString("NetPlayerHead",m_szPlayerHead,""); if ( !m_szPlayerSkin[0] || !m_szPlayerHead[0] ) { char szTemp[512]; strcpy(szTemp, m_szPlayerModel); if ( strchr(szTemp, ',') ) { *strchr(szTemp, ',') = '_'; _strlwr(szTemp); strcpy(m_szPlayerSkin, g_pModelButeMgr->GetButeMgr()->GetString(szTemp, "Skin0")); strcpy(m_szPlayerHead, g_pModelButeMgr->GetButeMgr()->GetString(szTemp, "Head0")); } } BuildModelList(); SAFE_STRCPY(m_szPlayerName,g_vtPlayerName.GetStr() ); if (m_nModNum < 0) { m_nModNum = 0; HSTRING hStr = m_pModelCtrl->GetString(0); strcpy(m_szPlayerModel,g_pLTClient->GetStringData(hStr)); } m_nTeam = (int)g_vtPlayerTeam.GetFloat(); m_nTargetNameSize = (int)g_vtTargetNameSize.GetFloat(); m_nTargetNameTransparency = (int)(100.0f*g_vtTargetNameTransparency.GetFloat()); m_bAutoSwitchWeapons = (LTBOOL)GetConsoleInt("AutoWeaponSwitch",1); m_bAutoSwitchAmmo = (LTBOOL)GetConsoleInt("AutoAmmoSwitch",1); m_bIgnoreTaunts = (LTBOOL)GetConsoleInt("IgnoreTaunts",0); UpdateData(LTFALSE); } else { UpdateData(); if (nInitConnect != m_nConnect) { WriteConsoleInt("UpdateRate",kConnectSpeeds[m_nConnect]); } LTBOOL bChanged = LTFALSE; char szTemp[32]; SAFE_STRCPY(szTemp,g_vtPlayerModel.GetStr() ); if (strcmp(szTemp,m_szPlayerModel) != 0) bChanged = LTTRUE; GetConsoleString("NetPlayerSkin",szTemp,""); if (strcmp(szTemp,m_szPlayerSkin) != 0) bChanged = LTTRUE; GetConsoleString("NetPlayerHead",szTemp,""); if (strcmp(szTemp,m_szPlayerHead) != 0) bChanged = LTTRUE; SAFE_STRCPY(szTemp,g_vtPlayerName.GetStr() ); if (strcmp(szTemp,m_szPlayerName) != 0) bChanged = LTTRUE; if (m_nTeam != (int)g_vtPlayerTeam.GetFloat()) bChanged = LTTRUE; g_vtPlayerName.SetStr(m_szPlayerName); g_vtPlayerModel.SetStr(m_szPlayerModel); WriteConsoleString("NetPlayerHead",m_szPlayerHead); WriteConsoleString("NetPlayerSkin",m_szPlayerSkin); g_vtPlayerTeam.WriteFloat((LTFLOAT)m_nTeam); g_vtTargetNameSize.WriteFloat((LTFLOAT)m_nTargetNameSize); g_vtTargetNameTransparency.WriteFloat((LTFLOAT)m_nTargetNameTransparency/100.0f); WriteConsoleInt("AutoWeaponSwitch",(int)m_bAutoSwitchWeapons); WriteConsoleInt("AutoAmmoSwitch",(int)m_bAutoSwitchAmmo); WriteConsoleInt("IgnoreTaunts",(int)m_bIgnoreTaunts); HLOCALOBJ hPlayerObj = g_pLTClient->GetClientObject(); if (bChanged && g_pGameClientShell->IsInWorld() && hPlayerObj && g_pGameClientShell->IsMultiplayerGame()) { HSTRING hstrName = g_pLTClient->CreateString(m_szPlayerName); if (!hstrName) return; HSTRING hstrModel = g_pLTClient->CreateString(m_szPlayerModel); if (!hstrModel) return; HSTRING hstrSkin = g_pLTClient->CreateString(strchr(m_szPlayerSkin, ',')+1); if (!hstrSkin) return; HSTRING hstrHead = g_pLTClient->CreateString(strchr(m_szPlayerHead, ',')+1); if (!hstrHead) return; // Init multiplayer info on server... HMESSAGEWRITE hWrite = g_pLTClient->StartMessage(MID_PLAYER_MULTIPLAYER_CHANGE); g_pLTClient->WriteToMessageHString(hWrite, hstrName); g_pLTClient->WriteToMessageHString(hWrite, hstrModel); g_pLTClient->WriteToMessageHString(hWrite, hstrSkin); g_pLTClient->WriteToMessageHString(hWrite, hstrHead); g_pLTClient->WriteToMessageByte(hWrite, (uint8)m_nTeam); g_pLTClient->EndMessage(hWrite); g_pLTClient->FreeString(hstrName); g_pLTClient->FreeString(hstrModel); g_pLTClient->FreeString(hstrSkin); g_pLTClient->FreeString(hstrHead); ClearModelList(); } g_pLTClient->FreeUnusedModels(); g_pLTClient->WriteConfigFile("autoexec.cfg"); } CBaseFolder::OnFocus(bFocus); }