⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 netstart.cpp

📁 Blood 2全套源码
💻 CPP
📖 第 1 页 / 共 5 页
字号:
	}


	// 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 + -