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

📄 bloodservershell.h

📁 Blood 2全套源码
💻 H
字号:
// ----------------------------------------------------------------------- //
//
// MODULE  : BloodServerShell.cpp
//
// PURPOSE : Blood's Server Shell - Definition
//
// CREATED : 9/18/97
//
// ----------------------------------------------------------------------- //

#ifndef __BLOODSERVERSHELL_H__
#define __BLOODSERVERSHELL_H__

#include "cpp_server_de.h"
#include "cpp_engineobjects_de.h"
#include "cpp_servershell_de.h"
#include "PathMgr.h"
#include "NetDefs.h"
#include "SharedDefs.h"
#include "VoiceMgr.h"
#include "TeamMgr.h"

#define MAX_CLIENTS		MAX_MULTI_PLAYERS

class CPlayerObj;


class CBloodServerShell : public CServerShellDE
{
	public :

		CBloodServerShell();
		~CBloodServerShell();
        
		void		FragStatus();
		GameType	GetGameType()	const { return (GameType)m_GameInfo.m_byType; }
		const NetGame *	GetNetGameInfo()	const { return &m_GameInfo; }
		DBOOL		IsMultiplayerGame() { return (m_GameInfo.m_byType != GAMETYPE_SINGLE); }
		DBOOL		IsMultiplayerTeamBasedGame();
		DBOOL		IsMultiplayerTeams() { return(m_GameInfo.m_byType == NGT_TEAMS); }
		DBOOL		IsMultiplayerCtf() { return(m_GameInfo.m_byType == NGT_CAPTUREFLAG); }
		DBOOL		IsMultiplayerSoccer() { return(m_GameInfo.m_byType == NGT_SOCCER); }
        
		PathMgr*    GetPathMgr() { return &m_PathMgr; }
		CVoiceMgr*	GetVoiceMgr() { return &m_VoiceMgr; }
		CTeamMgr*	GetTeamMgr() { return(&m_TeamMgr); }
		void		SetStartPointName(HSTRING hstrStartPt);
		HSTRING		GetStartPointName() { return m_hstrStartPointName; }
		void		SendBlood2ServConsoleMessage(char* sMsg);
		void		SetUpdateBlood2Serv() { m_bUpdateBlood2Serv = DTRUE; }
		HCLIENT		FindClient(HOBJECT hObject);

#ifdef _ADD_ON
		DBOOL		IsAddon() { return m_bAddonLevel; };
#endif

	protected :

		BaseClass*	OnClientEnterWorld(HCLIENT hClient, void* pClientData, DDWORD dwClientDataLen);
		void		OnClientExitWorld(HCLIENT hClient);
		void		OnMessage(HCLIENT hSender, DBYTE messageID, HMESSAGEREAD hMessage);
		void		OnCommandOn(HCLIENT hClient, int command);
		void		PreStartWorld(DBOOL bSwitchingWorlds);
		void		PostStartWorld();
		void		Update(DFLOAT timeElapsed);
		void		UpdateClientPingTimes();
		void		OnRemoveClient(HCLIENT hClient);

		DBOOL		LoadWorld(HMESSAGEREAD hMessage);
		DBOOL		SaveGame(DBYTE bySaveType, DBOOL bSavePlayers, DBOOL bSaveConsole);
		DBOOL		RestoreGame(DBYTE bySaveType);
//		DBOOL		BuildSavePath(char *pBuffer, char *pFilename);
		DBOOL		KeepAliveSave();
		DBOOL		KeepAliveLoad();

		void		CacheFiles();

		void		DoLevelChangeCharacterCheck(char* sLevel);

	private:

		int			m_NumPlayers;
		BaseClass*	CreatePlayer(HCLIENT hClient);
		void		RespawnPlayer(BaseClass* pBaseClass, HCLIENT hClient);
		void		ConsoleMessage(HCLIENT hClient, char *msg);
		void		AddPlayerMessage(HCLIENT hDestClient, HCLIENT hNewPlayerClient);
		void		AddPlayersMessage(HCLIENT hClient);
		void		RemovePlayerMessage(HCLIENT hClient);
		void		SetGameInfo(DBYTE nGameFlags, DBYTE nDifficulty);
		void		SetupGameInfo();

		DBOOL		UpdateSessionName();
		DBOOL		UpdateBlood2Server();
		void		UpdateMultiplayer();
		void		StartNextMultiplayerLevel();
		void		StartNextMultiplayerLevelAck();
		DRESULT		ServerAppMessageFn(char* sMsg);


		void		ClearClientList() { for (int i = 0; i < MAX_CLIENTS; i++) { m_aClients[i] = DNULL; } }
		DBOOL		AddClientToList(HCLIENT hClient);
		DBOOL		RemoveClientFromList(HCLIENT hClient);
		DBOOL		IsClientInList(HCLIENT hClient);
		CPlayerObj*	GetPlayerFromClientList(HCLIENT hClient);

		CVoiceMgr	m_VoiceMgr;
		CTeamMgr	m_TeamMgr;
		PathMgr		m_PathMgr;
		HSTRING		m_hstrStartPointName;
		DBOOL		m_bKeepAlive;
#ifdef _ADD_ON
		DBOOL		m_bAddonLevel;
#endif

		HCLIENT		m_aClients[MAX_CLIENTS];	

		NetGame		m_GameInfo;
		DBOOL		m_bBlood2ServHosted;
		DBOOL		m_bUpdateBlood2Serv;
		int			m_nCurLevel;
};


// Externs...

extern CBloodServerShell* g_pBloodServerShell;
extern char g_szVarRevisiting[];
extern char g_szVarDifficulty[];
extern char g_szVarGameType[];


// Inlines...

inline DBOOL CBloodServerShell::IsMultiplayerTeamBasedGame()
{
	if (m_GameInfo.m_byType == NGT_CAPTUREFLAG) return(DTRUE);
	if (m_GameInfo.m_byType == NGT_TEAMS) return(DTRUE);
	if (m_GameInfo.m_byType == NGT_SOCCER) return(DTRUE);

	return(DFALSE);
}


// EOF...

#endif  // __BLOODSERVERSHELL_H__

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -