📄 netstart.cpp
字号:
s_bDontDisplaySettingsDialog = GetConsoleInt("DontDisplaySettingsDialog", 0);
s_bHaveSettingInfo = GetConsoleInt("HaveSettingInfo", 0);
s_nNetAmmoLevel = GetConsoleInt("NetAmmoLevel", s_nNetAmmoLevel);
s_nNetAmmoRespawn = GetConsoleInt("NetAmmoRespawn", s_nNetAmmoRespawn);
s_nNetArmorLevel = GetConsoleInt("NetArmorLevel", s_nNetArmorLevel);
s_nNetArmorRespawn = GetConsoleInt("NetArmorRespawn", s_nNetArmorRespawn);
s_nNetHealthLevel = GetConsoleInt("NetHealthLevel", s_nNetHealthLevel);
s_nNetHealthRespawn = GetConsoleInt("NetHealthRespawn", s_nNetHealthRespawn);
s_nNetPowerupsLevel = GetConsoleInt("NetPowerupsLevel", s_nNetPowerupsLevel);
s_nNetPowerupsRespawn = GetConsoleInt("NetPowerupsRespawn", s_nNetPowerupsRespawn);
s_nNetHealingRate = GetConsoleInt("NetHealingRate", s_nNetHealingRate);
s_nNetTeam = GetConsoleInt("NetTeam", s_nNetTeam);
s_bNetFallDamage = GetConsoleInt("NetFallDamage", s_bNetFallDamage);
s_bNetFriendlyFire = GetConsoleInt("NetFriendlyFire", s_bNetFriendlyFire);
s_bNetNegTeamFrags = GetConsoleInt("NetNegTeamFrags", s_bNetNegTeamFrags);
s_bNetOnlyFlagScores = GetConsoleInt("NetOnlyFlagScores", s_bNetOnlyFlagScores);
s_bNetOnlyGoalScores = GetConsoleInt("NetOnlyGoalScores", s_bNetOnlyGoalScores);
s_bNetUseTeamSize = GetConsoleInt("NetUseTeamSize", s_bNetUseTeamSize);
s_nNetFlagValue = GetConsoleInt("NetFlagValue", s_nNetFlagValue);
s_nNetGoalValue = GetConsoleInt("NetGoalValue", s_nNetGoalValue);
s_nNetSocBallSkin = GetConsoleInt("NetSocBallSkin", s_nNetSocBallSkin);
s_pServerOptions->m_fWorldTimeSpeed = GetConsoleFloat("NetWorldTimeSpeed", s_pServerOptions->m_fWorldTimeSpeed);
s_pServerOptions->m_fRunSpeed = GetConsoleFloat("NetRunSpeed", s_pServerOptions->m_fRunSpeed);
s_pServerOptions->m_fMissileSpeed = GetConsoleFloat("NetMissileSpeed", s_pServerOptions->m_fMissileSpeed);
GetConsoleString("NetWorldNightColor", s_pServerOptions->m_sWorldNightColor, s_pServerOptions->m_sWorldNightColor);
#ifndef _ADDON
if (s_nGameType == NGT_SOCCER) s_nGameType = NGT_DEATHMATCH;
#endif
// Declare local variables we'll be using...
int nRet;
HWND hParentWnd = NULL;
// Check if we were given connect info on the command line...
s_nConnectType = NetStart_GetConnectCommands(pClient, pNetStart);
if (s_nConnectType == CONNECT_TCPIP_HOST)
{
if (!NetStart_HostTcpIp(pClient)) return(FALSE);
s_pNetStart->m_bHaveTcpIp = FALSE;
goto PlayerDlg;
}
else if (s_nConnectType == CONNECT_TCPIP || s_nConnectType == CONNECT_TCPIP_QUICK)
{
if (!NetStart_DoSettingsDialog())
{
return(DFALSE);
}
goto FinishedDlg;
}
// Do the services dialog...
ServicesDlg:
nRet = DialogBox(hInst, "NET_SERVICES", hParentWnd, (DLGPROC)NetDlg_Services);
if (nRet == DLG_CANCEL) return(DFALSE);
if (nRet == DLG_ERROR)
{
NetStart_DisplayError(hInst);
return(DFALSE);
}
// Do the player dialog...
PlayerDlg:
nRet = DialogBox(hInst, "NET_PLAYER", hParentWnd, (DLGPROC)NetDlg_Player);
if (nRet == DLG_BACK) goto ServicesDlg;
if (nRet == DLG_CANCEL) return(DFALSE);
if (nRet == DLG_ERROR)
{
NetStart_DisplayError(hInst);
return(DFALSE);
}
if (s_pNetStart->m_bHost) goto GameDlg;
if (s_pNetStart->m_bHaveTcpIp) goto FinishedDlg;
// Do the sessions dialog...
if (GetSelectedServiceFlags() & NETSERVICE_TCPIP)
{
nRet = DialogBox(hInst, "NET_SESSIONS_TCPIP", hParentWnd, (DLGPROC)NetDlg_SessionsTcpIp);
}
else
{
nRet = DialogBox(hInst, "NET_SESSIONS", hParentWnd, (DLGPROC)NetDlg_Sessions);
}
s_IpMgr.WriteIps();
if (nRet == DLG_BACK) goto PlayerDlg;
if (nRet == DLG_CANCEL) return(DFALSE);
if (nRet == DLG_ERROR)
{
NetStart_DisplayError(hInst);
return(DFALSE);
}
goto FinishedDlg;
// Do the game dialog (host only)...
GameDlg:
#ifdef _ADDON
nRet = DialogBox(hInst, "NET_GAME_AO", hParentWnd, (DLGPROC)NetDlg_Game);
#else
nRet = DialogBox(hInst, "NET_GAME", hParentWnd, (DLGPROC)NetDlg_Game);
#endif
if (nRet == DLG_BACK) goto PlayerDlg;
if (nRet == DLG_CANCEL) return(DFALSE);
if (nRet == DLG_ERROR)
{
NetStart_DisplayError(hInst);
return(DFALSE);
}
// If necessary, do the team options dialog...
TeamOptionsDlg:
if (s_nGameType != NGT_TEAMS) goto CtfOptionsDlg;
nRet = DialogBox(hInst, "NET_OPTIONS_TEAMS", hParentWnd, (DLGPROC)NetDlg_TeamOptions);
if (nRet == DLG_BACK) goto GameDlg;
if (nRet == DLG_CANCEL) return(DFALSE);
if (nRet == DLG_ERROR)
{
NetStart_DisplayError(hInst);
return(DFALSE);
}
// If necessary, do the ctf options dialog...
CtfOptionsDlg:
if (s_nGameType != NGT_CAPTUREFLAG) goto SoccerOptionsDlg;
nRet = DialogBox(hInst, "NET_OPTIONS_CTF", hParentWnd, (DLGPROC)NetDlg_CtfOptions);
if (nRet == DLG_BACK) goto GameDlg;
if (nRet == DLG_CANCEL) return(DFALSE);
if (nRet == DLG_ERROR)
{
NetStart_DisplayError(hInst);
return(DFALSE);
}
// If necessary, do the soccer options dialog...
SoccerOptionsDlg:
if (s_nGameType != NGT_SOCCER) goto OptionsDlg;
nRet = DialogBox(hInst, "NET_OPTIONS_SOCCER", hParentWnd, (DLGPROC)NetDlg_SoccerOptions);
if (nRet == DLG_BACK) goto GameDlg;
if (nRet == DLG_CANCEL) return(DFALSE);
if (nRet == DLG_ERROR)
{
NetStart_DisplayError(hInst);
return(DFALSE);
}
// Do the game server options dialog (host only)...
OptionsDlg:
nRet = DialogBox(hInst, "NET_OPTIONS", hParentWnd, (DLGPROC)NetDlg_Options);
if (nRet == DLG_BACK)
{
if (s_nGameType == NGT_SOCCER) goto SoccerOptionsDlg;
if (s_nGameType == NGT_CAPTUREFLAG) goto CtfOptionsDlg;
if (s_nGameType == NGT_TEAMS) goto TeamOptionsDlg;
goto GameDlg;
}
if (nRet == DLG_CANCEL) return(DFALSE);
if (nRet == DLG_ERROR)
{
NetStart_DisplayError(hInst);
return(DFALSE);
}
// Do the game items dialog (host only)...
GameItemsDlg:
nRet = DialogBox(hInst, "NET_GAMEITEMS", hParentWnd, (DLGPROC)NetDlg_GameItems);
if (nRet == DLG_BACK) goto OptionsDlg;
if (nRet == DLG_CANCEL) return(DFALSE);
if (nRet == DLG_ERROR)
{
NetStart_DisplayError(hInst);
return(DFALSE);
}
// Do the game damage dialog (host only)...
GameDamageDlg:
nRet = DialogBox(hInst, "NET_GAMEDAMAGE", hParentWnd, (DLGPROC)NetDlg_GameDamage);
if (nRet == DLG_BACK) goto GameItemsDlg;
if (nRet == DLG_CANCEL) return(DFALSE);
if (nRet == DLG_ERROR)
{
NetStart_DisplayError(hInst);
return(DFALSE);
}
// Do the game levels dialog (host only)...
nRet = DialogBox(hInst, "NET_GAMELEVELS", hParentWnd, (DLGPROC)NetDlg_GameLevels);
if (nRet == DLG_BACK) goto GameDamageDlg;
if (nRet == DLG_CANCEL) return(DFALSE);
if (nRet == DLG_ERROR)
{
NetStart_DisplayError(hInst);
return(DFALSE);
}
// Do the finished dialog...
FinishedDlg:
// Write out some console values...
if (s_pNetStart->m_bHost)
{
WriteConsoleString("NetSessionName", s_sSessionName);
WriteConsoleInt("NetGameType", s_nGameType);
WriteConsoleInt("NetGameEnd", s_nEndType);
WriteConsoleInt("NetEndFrags", s_nEndFrags);
WriteConsoleInt("NetEndTime", s_nEndTime);
WriteConsoleInt("NetMaxPlayers", s_nMaxPlayers);
WriteConsoleInt("NetAmmoLevel", s_nNetAmmoLevel);
WriteConsoleInt("NetAmmoRespawn", s_nNetAmmoRespawn);
WriteConsoleInt("NetArmorLevel", s_nNetArmorLevel);
WriteConsoleInt("NetArmorRespawn", s_nNetArmorRespawn);
WriteConsoleInt("NetHealthLevel", s_nNetHealthLevel);
WriteConsoleInt("NetHealthRespawn", s_nNetHealthRespawn);
WriteConsoleInt("NetPowerupsLevel", s_nNetPowerupsLevel);
WriteConsoleInt("NetPowerupsRespawn", s_nNetPowerupsRespawn);
WriteConsoleInt("NetHealingRate", s_nNetHealingRate);
WriteConsoleInt("NetFallDamage", s_bNetFallDamage);
WriteConsoleInt("NetFriendlyFire", s_bNetFriendlyFire);
WriteConsoleInt("NetNegTeamFrags", s_bNetNegTeamFrags);
WriteConsoleInt("NetOnlyFlagScores", s_bNetOnlyFlagScores);
WriteConsoleInt("NetOnlyFlagScores", s_bNetOnlyGoalScores);
WriteConsoleInt("NetUseTeamSize", s_bNetUseTeamSize);
WriteConsoleInt("NetFlagValue", s_nNetFlagValue);
WriteConsoleInt("NetGoalValue", s_nNetGoalValue);
WriteConsoleInt("NetSocBallSkin", s_nNetSocBallSkin);
WriteConsoleFloat("NetWorldTimeSpeed", s_pServerOptions->m_fWorldTimeSpeed);
WriteConsoleFloat("NetRunSpeed", s_pServerOptions->m_fRunSpeed);
WriteConsoleFloat("NetMissileSpeed", s_pServerOptions->m_fMissileSpeed);
WriteConsoleString("NetWorldNightColor", s_pServerOptions->m_sWorldNightColor);
}
PostProcessName(s_sPlayerName);
WriteConsoleString("NetPlayerName", s_sPlayerName);
WriteConsoleString("NetConfigFile", s_sNetConfigFile);
WriteConsoleInt("NetService", s_nNetService);
WriteConsoleInt("NetJoinHost", s_nNetJoinHost);
WriteConsoleInt("UpdateRate", s_nNetLatency);
WriteConsoleInt("NetFpsLimit", s_nFpsLimit);
WriteConsoleInt("NetLimitFps", s_bLimitFps);
WriteConsoleInt("NetSaveLevels", s_bSaveLevels);
WriteConsoleInt("NetTeam", s_nNetTeam);
// All done...
return(DTRUE);
}
NetPlayer* NetStart_GetPlayerStruct()
{
return(&s_NetPlayer);
}
NetGame* NetStart_GetGameStruct()
{
return(&s_NetGame);
}
NetClientData* NetStart_GetClientDataStruct()
{
return(&s_NetClientData);
}
void NetStart_ClearGameStruct()
{
memset(&s_NetGame, 0, sizeof(NetGame));
}
void GetConsoleString(char* sKey, char* sDest, char* sDefault)
{
if (s_pClient)
{
HCONSOLEVAR hVar = s_pClient->GetConsoleVar(sKey);
if (hVar)
{
char* sValue = s_pClient->GetVarValueString(hVar);
if (sValue)
{
strcpy(sDest, sValue);
return;
}
}
}
strcpy(sDest, sDefault);
}
int GetConsoleInt(char* sKey, int nDefault)
{
if (s_pClient)
{
HCONSOLEVAR hVar = s_pClient->GetConsoleVar(sKey);
if (hVar)
{
float fValue = s_pClient->GetVarValueFloat(hVar);
return((int)fValue);
}
}
return(nDefault);
}
DFLOAT GetConsoleFloat(char* sKey, DFLOAT fDefault)
{
if (s_pClient)
{
HCONSOLEVAR hVar = s_pClient->GetConsoleVar(sKey);
if (hVar)
{
float fValue = s_pClient->GetVarValueFloat(hVar);
return(fValue);
}
}
return(fDefault);
}
void WriteConsoleString(char* sKey, char* sValue)
{
if (s_pClient)
{
char sTemp[256];
wsprintf(sTemp, "+%s \"%s\"", sKey, sValue);
s_pClient->RunConsoleString(sTemp);
}
}
void WriteConsoleInt(char* sKey, int nValue)
{
if (s_pClient)
{
char sTemp[256];
wsprintf(sTemp, "+%s %i", sKey, nValue);
s_pClient->RunConsoleString(sTemp);
}
}
void WriteConsoleFloat(char* sKey, DFLOAT fValue)
{
if (s_pClient)
{
char sTemp[256];
sprintf(sTemp, "+%s %f", sKey, fValue);
s_pClient->RunConsoleString(sTemp);
}
}
void NetStart_DisplayError(HINSTANCE hInst)
{
char sError[256];
if (LoadString(hInst, s_nErrorString, sError, 254) == 0)
{
strcpy(sError, "ERROR - Unable to setup the network game.");
}
#ifdef _DEMO
MessageBox(NULL, sError, "Blood2 Demo", MB_OK);
#else
MessageBox(NULL, sError, "Blood2", MB_OK);
#endif
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: NetStart_DoLobbyLaunchWizard
//
// PURPOSE: Does the net start wizard for a lobby launched game
//
// ----------------------------------------------------------------------- //
DBOOL NetStart_DoLobbyLaunchWizard(CClientDE* pClient)
{
// Sanity checks...
if (!pClient) return(DFALSE);
// Declare local variables we'll be using...
int nRet;
HWND hParentWnd = NULL;
NetStart ns;
// Set our static pointers...
s_pClient = pClient;
s_pNetStart = &ns;
s_pServerOptions = &g_ServerOptions;
s_bLobbyLaunch = TRUE;
// Fill in the default server options...
memset(s_pServerOptions, 0, sizeof(ServerOptions));
s_pServerOptions->m_fWorldTimeSpeed = -1.0f;
s_pServerOptions->m_fRunSpeed = 1.3f;
s_pServerOptions->m_fMissileSpeed = 1.0;
strcpy(s_pServerOptions->m_sWorldNightColor, "0.5 0.5 0.5");
// Init the net game info manager...
s_NinfoMgr.Term();
s_NinfoMgr.Init(s_pClient);
// Clear the NetStart structure...
memset(s_pNetStart, 0, sizeof(NetStart));
// Clear our static player and game structures...
memset(&s_NetPlayer, 0, sizeof(NetPlayer));
memset(&s_NetGame, 0, sizeof(NetGame));
// Get the module handle...
HINSTANCE hInst;
void* hModule;
g_pClientDE->GetEngineHook("cres_hinstance",&hModule);
hInst = (HINSTANCE)hModule;
if (!hInst) return (DFALSE);
s_hInst = hInst;
// Init the engine's networking...
DRESULT dr = pClient->InitNetworking(NULL, 0);
if (dr != LT_OK)
{
s_nErrorString = IDS_NETERR_INIT;
NetStart_DisplayError(hInst);
return(DFALSE);
}
// Get the lobby launch info...
void* pLobbyLaunchInfo = NULL;
dr = pClient->GetLobbyLaunchInfo("dplay2", &pLobbyLaunchInfo);
if (dr != LT_OK)
{
s_nErrorString = IDS_NETERR_INIT;
NetStart_DisplayError(hInst);
return(DFALSE);
}
LPDPLCONNECTION pDplConn = (LPDPLCONNECTION)pLobbyLaunchInfo;
// Read some default values from the console...
GetConsoleString("NetPlayerName", s_sPlayerName, "Caleb");
PostProcessName(s_sPlayerName);
#ifdef _DEMO
GetConsoleString("NetSessionName", s_sSessionName, "Multiplayer Blood2 Demo");
#else
GetConsoleString("NetSessionName", s_sSessionName, "Multiplayer Blood2");
#endif
s_nGameType = GetConsoleInt("NetGameType", NGT_DEATHMATCH);
s_nEndType = GetConsoleInt("NetGameEnd", NGE_FRAGS);
s_nEndFrags = GetConsoleInt("NetEndFrags", 25);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -