📄 netstart.cpp
字号:
}
// If we get here, we didn't find this rez...
return(FALSE);
}
BOOL IsSourceItemAddable(HWND hSourceList, HWND hDestList)
{
// Sanity checks...
if (!hSourceList) return(FALSE);
if (!hDestList) return(FALSE);
// Get the selected rez in the source list...
int nIndex = SendMessage(hSourceList, LB_GETCURSEL, 0, 0);
if (nIndex == LB_ERR) return(FALSE);
char sRez[256];
int nRet = SendMessage(hSourceList, LB_GETTEXT, nIndex, (LPARAM)(LPCSTR)sRez);
if (nRet == LB_ERR) return(FALSE);
// Determine if this rez is already selected...
return(!IsRezSelected(hDestList, sRez));
}
BOOL IsDestItemRemovable(HWND hSourceList, HWND hDestList)
{
// Sanity checks...
if (!hSourceList) return(FALSE);
if (!hDestList) return(FALSE);
// Get the selected rez in the dest list...
int nIndex = SendMessage(hDestList, LB_GETCURSEL, 0, 0);
return (nIndex != LB_ERR);
}
void UpdateRezControls(HWND hDlg)
{
if (!hDlg) return;
BOOL bAddable = IsSourceItemAddable(GetDlgItem(hDlg, IDC_SOURCELIST), GetDlgItem(hDlg, IDC_DESTLIST));
EnableWindow(GetDlgItem(hDlg, IDC_ADD), bAddable);
BOOL bRemable = IsDestItemRemovable(GetDlgItem(hDlg, IDC_SOURCELIST), GetDlgItem(hDlg, IDC_DESTLIST));
EnableWindow(GetDlgItem(hDlg, IDC_REMOVE), bRemable);
}
int AddSelectedToList(HWND hDestList)
{
// Sanity checks...
if (!hDestList) return(0);
// Remove all the items from the current string list...
s_collRezFiles.RemoveAll();
// Add each item in the list box to our string list...
int nCount = SendMessage(hDestList, LB_GETCOUNT, 0, 0);
if (nCount == LB_ERR) return(0);
int c = 0;
for (int i = 0; i < nCount; i++)
{
char sRez[256];
int nRet = SendMessage(hDestList, LB_GETTEXT, i, (LPARAM)(LPCSTR)sRez);
if (nRet != LB_ERR)
{
if (strstr(sRez, "\\"))
{
s_collRezFiles.AddTail(sRez);
}
else
{
char sTemp[256];
sprintf(sTemp, "Custom\\%s", sRez);
s_collRezFiles.AddTail(sTemp);
}
c++;
}
}
// All done...
return(c);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: SaveRezStrings
//
// PURPOSE: Saves all the strings to the registry if requested
//
// ----------------------------------------------------------------------- //
void SaveRezStrings()
{
// Save each rez file string...
POSITION pos = s_collRezFiles.GetHeadPosition();
int nCount = 0;
while (pos)
{
CString sRez = s_collRezFiles.GetNext(pos);
if (!sRez.IsEmpty())
{
char sLabel[32];
sprintf(sLabel, "RezFile%i", nCount);
SetGameVar(sLabel, sRez);
nCount++;
}
}
// Save the count of strings...
SetGameVar("NumRezFiles", nCount);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: LoadRezStrings
//
// PURPOSE: Loads all the strings from the registry if requested
//
// ----------------------------------------------------------------------- //
void LoadRezStrings()
{
// Clear the list of rez files...
s_collRezFiles.RemoveAll();
// Load the count of rez strings...
int nCount = 0;
if (!NS_GetGameVar("NumRezFiles", nCount)) return;
if (nCount <= 0) return;
// Load the strings...
for (int i = 0; i < nCount; i++)
{
char sLabel[32];
sprintf(sLabel, "RezFile%i", i);
char sRez[128] = { "" };
NS_GetGameVar(sLabel, sRez, 125);
if (sRez[0] != '\0')
{
s_collRezFiles.AddTail(sRez);
}
}
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: NetStart_Options
//
// PURPOSE: Does the OPTIONS dialog
//
// ----------------------------------------------------------------------- //
BOOL CALLBACK NetDlg_Options(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_INITDIALOG:
{
SetIcon(hDlg);
ForceActiveFocus(hDlg);
NetStart_InitOptions(hDlg);
return(TRUE);
}
case WM_COMMAND:
{
if (NetStart_HandleDefaultDialogCommands(hDlg, wParam))
{
return(TRUE);
}
else if (wParam == IDC_NEXT)
{
NetStart_FillOptions(hDlg);
EndDialog(hDlg, DLG_NEXT);
return(TRUE);
}
else if (wParam == IDC_HELP_RUNSPEED)
{
DoOptionHelp(hDlg, IDS_HELP_RUNSPEED, IDS_TITLE_RUNSPEED);
return(TRUE);
}
else if (wParam == IDC_HELP_MISSILESPEED)
{
DoOptionHelp(hDlg, IDS_HELP_MISSILESPEED, IDS_TITLE_MISSILESPEED);
return(TRUE);
}
else if (wParam == IDC_HELP_TIMESPEED)
{
DoOptionHelp(hDlg, IDS_HELP_TIMESPEED, IDS_TITLE_TIMESPEED);
return(TRUE);
}
else if (wParam == IDC_HELP_NIGHTCOLOR)
{
DoOptionHelp(hDlg, IDS_HELP_NIGHTCOLOR, IDS_TITLE_NIGHTCOLOR);
return(TRUE);
}
else if (wParam == IDC_HELP_RESPAWNSCALE)
{
DoOptionHelp(hDlg, IDS_HELP_RESPAWNSCALE, IDS_TITLE_RESPAWNSCALE);
return(TRUE);
}
else if (wParam == IDC_HELP_HEALSCALE)
{
DoOptionHelp(hDlg, IDS_HELP_HEALSCALE, IDS_TITLE_HEALSCALE);
return(TRUE);
}
else if (wParam == IDC_COLORPICKER)
{
if (NetStart_GetWorldNightColor(NULL))
{
SetDlgItemText(hDlg, IDC_NIGHTCOLOR, s_pServerOptions->m_sWorldNightColor);
}
return(TRUE);
}
return(TRUE);
}
}
return(FALSE);
}
BOOL DoOptionHelp(HWND hParentWnd, int iMsg, int iTitle)
{
if (!s_hInst) s_hInst = GetModuleHandle(NULL);
char sMsg[256];
if (LoadString(s_hInst, iMsg, sMsg, 250) == 0) return(FALSE);
char sTitle[128];
if (LoadString(s_hInst, iTitle, sTitle, 125) == 0) return(FALSE);
MessageBox(hParentWnd, sMsg, sTitle, MB_OK | MB_ICONINFORMATION);
return(TRUE);
}
BOOL NetStart_InitOptions(HWND hDlg)
{
if (!hDlg) return(FALSE);
if (!s_pServerOptions) return(FALSE);
if (s_bIsTcpIp)
{
ShowWindow(GetDlgItem(hDlg, IDC_PORTNUMTEXT), SW_SHOW);
ShowWindow(GetDlgItem(hDlg, IDC_PORTNUM), SW_SHOW);
SetDlgItemInt(hDlg, IDC_PORTNUM, s_nPort, FALSE);
}
else
{
ShowWindow(GetDlgItem(hDlg, IDC_PORTNUMTEXT), SW_HIDE);
ShowWindow(GetDlgItem(hDlg, IDC_PORTNUM), SW_HIDE);
}
SetDlgItemFloat(hDlg, IDC_RUNSPEED, s_pServerOptions->m_fRunSpeed);
SetDlgItemFloat(hDlg, IDC_MISSILESPEED, s_pServerOptions->m_fMissileSpeed);
SetDlgItemText(hDlg, IDC_NIGHTCOLOR, s_pServerOptions->m_sWorldNightColor);
float fTime = s_pServerOptions->m_fWorldTimeSpeed;
SetDlgItemFloat(hDlg, IDC_TIMESPEED, fTime);
SetDlgItemInt(hDlg, IDC_MAXPLAYERS, s_nMaxPlayers, FALSE);
return(TRUE);
}
void SetDlgItemFloat(HWND hDlg, int iCtrl, float fValue)
{
char sBuf[64];
sprintf(sBuf, "%f", fValue);
SetDlgItemText(hDlg, iCtrl, sBuf);
}
float GetDlgItemFloat(HWND hDlg, int iCtrl)
{
char sBuf[64];
GetDlgItemText(hDlg, iCtrl, sBuf, 62);
return((float)atof(sBuf));
}
BOOL NetStart_FillOptions(HWND hDlg)
{
if (!hDlg) return(FALSE);
if (!s_pServerOptions) return(FALSE);
s_pServerOptions->m_fRunSpeed = GetDlgItemFloat(hDlg, IDC_RUNSPEED);
s_pServerOptions->m_fMissileSpeed = GetDlgItemFloat(hDlg, IDC_MISSILESPEED);
GetDlgItemText(hDlg, IDC_NIGHTCOLOR, s_pServerOptions->m_sWorldNightColor, 30);
s_nPort = 0;
s_nPort = GetDlgItemInt(hDlg, IDC_PORT, NULL, FALSE);
float fTime = GetDlgItemFloat(hDlg, IDC_TIMESPEED);
if (fTime != 0) s_pServerOptions->m_fWorldTimeSpeed = fTime;
s_nMaxPlayers = GetDlgItemInt(hDlg, IDC_MAXPLAYERS, NULL, FALSE);
if (s_nMaxPlayers <= 0) s_nMaxPlayers = 2;
if (s_nMaxPlayers >= MAX_MULTI_PLAYERS) s_nMaxPlayers = MAX_MULTI_PLAYERS;
s_pServerInfo->m_dwMaxPlayers = s_nMaxPlayers;
return(TRUE);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: NetStart_RunServerOptions
//
// PURPOSE: Runs all of the server options
//
// ----------------------------------------------------------------------- //
BOOL NetStart_RunServerOptions(ServerInterface* pServerMgr, ServerOptions* pServerOptions)
{
// Sanity checks...
if (!pServerMgr) return(FALSE);
if (!pServerOptions) return(FALSE);
return(TRUE); // no more server options for now
// Run the speed options...
char sBuf[128];
if (pServerOptions->m_fRunSpeed != 0)
{
sprintf(sBuf, "RunSpeed %f", pServerOptions->m_fRunSpeed);
pServerMgr->RunConsoleString(sBuf);
}
if (pServerOptions->m_fMissileSpeed != 0)
{
sprintf(sBuf, "MissileSpeed %f", pServerOptions->m_fMissileSpeed);
pServerMgr->RunConsoleString(sBuf);
}
// Run the world options...
if (pServerOptions->m_fWorldTimeSpeed != 0)
{
sprintf(sBuf, "WorldTimeSpeed %f", pServerOptions->m_fWorldTimeSpeed);
pServerMgr->RunConsoleString(sBuf);
}
if (pServerOptions->m_sWorldNightColor[0] != '\0')
{
sprintf(sBuf, "WorldColorNight \"%s\"", pServerOptions->m_sWorldNightColor);
pServerMgr->RunConsoleString(sBuf);
}
// All done...
return(TRUE);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: NetStart_DoOptionsDialog
//
// PURPOSE: Does the options dialog
//
// ----------------------------------------------------------------------- //
BOOL NetStart_DoOptionsDialog(HWND hParentWnd, ServerInterface* pServerMgr, ServerOptions* pServerOptions)
{
// Sanity checks...
if (!pServerMgr) return(FALSE);
if (!pServerOptions) return(FALSE);
// Do the dialog...
if (!s_hInst) s_hInst = GetModuleHandle(NULL);
int nRet = DialogBox(s_hInst, "SERVER_OPTIONS", hParentWnd, (DLGPROC)NetDlg_Options);
if (nRet != DLG_NEXT) return(FALSE);
// Run the console options...
if (!NetStart_RunServerOptions(pServerMgr, pServerOptions))
{
return(FALSE);
}
SetGameVar("WorldNightColor", s_pServerOptions->m_sWorldNightColor);
SetGameVar("RunSpeed", s_pServerOptions->m_fRunSpeed);
SetGameVar("MissileSpeed", s_pServerOptions->m_fMissileSpeed);
SetGameVar("TimeSpeed", s_pServerOptions->m_fWorldTimeSpeed);
// All done...
return(TRUE);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: NetStart_GetWorldNightColor
//
// PURPOSE: Gets the world night color via a color dialog
//
// ----------------------------------------------------------------------- //
BOOL NetStart_GetWorldNightColor(HWND hParenWnd)
{
// Do the color dialog...
CColorDialog dlg;
int nRet = dlg.DoModal();
if (nRet != IDOK) return(FALSE);
// Update the color...
COLORREF cr = dlg.GetColor();
BYTE byRed = (BYTE)(cr);
BYTE byGreen = (BYTE)(cr >> 8);
BYTE byBlue = (BYTE)(cr >> 16);
float fRed = (float)byRed / 255.0f;
float fGreen = (float)byGreen / 255.0f;
float fBlue = (float)byBlue / 255.0f;
sprintf(s_pServerOptions->m_sWorldNightColor, "%.2f %.2f %.2f", fRed, fGreen, fBlue);
// All done...
return(TRUE);
}
// ----------------------------------------------------------------------- //
//
// ROUTINE: NetStart_GameItems
//
// PURPOSE: Does the GAMEITEMS dialog
//
// ----------------------------------------------------------------------- //
BOOL CALLBACK NetDlg_GameItems(HWND hDlg, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
switch (uMsg)
{
case WM_INITDIALOG:
{
ForceActiveFocus(hDlg);
NetStart_InitGameItems(hDlg);
return(TRUE);
}
case WM_COMMAND:
{
if (NetStart_HandleDefaultDialogCommands(hDlg, wParam))
{
return(TRUE);
}
else if (wParam == IDC_NEXT)
{
NetStart_FillGameItems(hDlg);
EndDialog(hDlg, DLG_NEXT);
return(TRUE);
}
}
}
return(FALSE);
}
BOOL NetStart_InitGameItems(HWND hDlg)
{
if (!hDlg) return(FALSE);
SetItemLevel(hDlg, IDC_AMMO_LEVEL, s_nAmmoLevel);
SetItemLevel(hDlg, IDC_ARMOR_LEVEL, s_nArmorLevel);
SetItemLevel(hDlg, IDC_HEALTH_LEVEL, s_nHealthLevel);
SetItemLevel(hDlg, IDC_POWERUPS_LEVEL, s_nPowerupsLevel);
SetItemRespawn(hDlg, IDC_AMMO_RESPAWN, s_nAmmoRespawn);
SetItemRespawn(hDlg, IDC_ARMOR_RESPAWN, s_nArmorRespawn);
SetItemRespawn(hDlg, IDC_HEALTH_RESPAWN, s_nHealthRespawn);
SetItemRespawn(hDlg, IDC_POWERUPS_RESPAWN, s_nPowerupsRespawn);
return(TRUE);
}
BOOL NetStart_FillGameItems(HWND hDlg)
{
if (!hDlg) return(FALSE);
s_nAmmoLevel = GetItemLevel(hDlg, IDC_AMMO_LEVEL);
s_nArmorLevel = GetItemLevel(hDlg, IDC_ARMOR_LEVEL);
s_nHealthLevel = GetItemLevel(hDlg, IDC_HEALTH_LEVEL);
s_nPowerupsLevel = GetItemLevel(hDlg, IDC_POWERUPS_LEVEL);
s_nAmmoRespawn = GetItemRespawn(hDlg, IDC_AMMO_RESPAWN);
s_nArmorRespawn = GetItemRespawn(hDlg, IDC_ARMOR_RESPAWN);
s_nHealthRespawn = GetItemRespawn(hDlg, IDC_HEALTH_RESPAWN);
s_nPowerupsResp
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -