From fda5ac1738810905c65d5e7a9b0e050e6022b2c8 Mon Sep 17 00:00:00 2001 From: David Anderson <dvander@alliedmods.net> Date: Wed, 26 Sep 2007 13:12:59 +0000 Subject: [PATCH] added new api to IPlayerHelpers for detecting when the server starts up --HG-- extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%401491 --- core/PlayerManager.cpp | 17 ++++++++++++++--- core/PlayerManager.h | 1 + public/IPlayerHelpers.h | 17 ++++++++++++++++- 3 files changed, 31 insertions(+), 4 deletions(-) diff --git a/core/PlayerManager.cpp b/core/PlayerManager.cpp index 6082cb52..9eb23a50 100644 --- a/core/PlayerManager.cpp +++ b/core/PlayerManager.cpp @@ -79,7 +79,7 @@ public: PlayerManager::PlayerManager() { m_AuthQueue = NULL; - m_FirstPass = true; + m_FirstPass = false; m_UserIdLookUp = new int[USHRT_MAX+1]; memset(m_UserIdLookUp, 0, sizeof(int) * (USHRT_MAX+1)); @@ -180,14 +180,14 @@ ConfigResult PlayerManager::OnSourceModConfigChanged(const char *key, void PlayerManager::OnServerActivate(edict_t *pEdictList, int edictCount, int clientMax) { - if (m_FirstPass) + if (!m_FirstPass) { /* Initialize all players */ m_maxClients = clientMax; m_PlayerCount = 0; m_Players = new CPlayer[m_maxClients + 1]; m_AuthQueue = new unsigned int[m_maxClients + 1]; - m_FirstPass = false; + m_FirstPass = true; memset(m_AuthQueue, 0, sizeof(unsigned int) * (m_maxClients + 1)); @@ -196,11 +196,22 @@ void PlayerManager::OnServerActivate(edict_t *pEdictList, int edictCount, int cl m_onActivate->Execute(NULL); m_onActivate2->Execute(NULL); + List<IClientListener *>::iterator iter; + for (iter = m_hooks.begin; iter != m_hooks.end(); iter++) + { + (*iter)->OnServerActivated(clientMax); + } + g_OnMapStarted = true; SM_ExecuteAllConfigs(); } +bool PlayerManager::IsServerActivated() +{ + return m_FirstPass; +} + bool PlayerManager::CheckSetAdmin(int index, CPlayer *pPlayer, AdminId id) { const char *password = g_Admins.GetAdminPassword(id); diff --git a/core/PlayerManager.h b/core/PlayerManager.h index c058f0d7..983f3cd5 100644 --- a/core/PlayerManager.h +++ b/core/PlayerManager.h @@ -130,6 +130,7 @@ public: //IPlayerManager int GetMaxClients(); int GetNumPlayers(); int GetClientOfUserId(int userid); + bool IsServerActivated(); public: inline int MaxClients() { diff --git a/public/IPlayerHelpers.h b/public/IPlayerHelpers.h index 43596bb3..bf02dcf3 100644 --- a/public/IPlayerHelpers.h +++ b/public/IPlayerHelpers.h @@ -41,7 +41,7 @@ #include <IAdminSystem.h> #define SMINTERFACE_PLAYERMANAGER_NAME "IPlayerManager" -#define SMINTERFACE_PLAYERMANAGER_VERSION 4 +#define SMINTERFACE_PLAYERMANAGER_VERSION 5 struct edict_t; class IPlayerInfo; @@ -220,6 +220,13 @@ namespace SourceMod virtual void OnClientAuthorized(int client, const char *authstring) { } + + /** + * @brief Called when the server is activated. + */ + virtual void OnServerActivated(int max_clients) + { + } }; class IPlayerManager : public SMInterface @@ -288,6 +295,14 @@ namespace SourceMod * @return Client index, or 0 if invalid userid passed. */ virtual int GetClientOfUserId(int userid) =0; + + /** + * @brief Returns whether or not the server is activated. + * + * @return True if ServerActivate() has been called + * at least once, false otherwise. + */ + virtual bool IsServerActivated() =0; }; }