Fixed bugs amb352 and amb274

--HG--
extra : convert_revision : svn%3A39bc706e-5318-0410-9160-8a85361fbb7c/trunk%40922
This commit is contained in:
David Anderson 2007-06-07 18:50:52 +00:00
parent d4bc20d32b
commit be6335c91a
4 changed files with 34 additions and 0 deletions

View File

@ -321,6 +321,18 @@ void PlayerManager::OnClientPutInServer(edict_t *pEntity, const char *playername
m_clputinserver->Execute(&res, NULL);
}
void PlayerManager::OnSourceModLevelEnd()
{
/* Disconnect all bots still in game */
for (int i=1; i<=m_maxClients; i++)
{
if (m_Players[i].IsConnected() && m_Players[i].IsFakeClient())
{
OnClientDisconnect(m_Players[i].GetEdict());
}
}
}
void PlayerManager::OnClientDisconnect(edict_t *pEntity)
{
cell_t res;

View File

@ -75,6 +75,7 @@ public:
public: //SMGlobalClass
void OnSourceModAllInitialized();
void OnSourceModShutdown();
void OnSourceModLevelEnd();
public:
CPlayer *GetPlayerByIndex(int client) const;
void RunAuthChecks();

View File

@ -108,6 +108,13 @@ public:
{
}
/**
* @brief Called when the level ends.
*/
virtual void OnSourceModLevelEnd()
{
}
/**
* @brief Called after plugins are loaded on mapchange.
*/

View File

@ -256,6 +256,7 @@ void SourceModBase::StartSourceMod(bool late)
g_Loaded = true;
}
static bool g_LevelEndBarrier = false;
bool SourceModBase::LevelInit(char const *pMapName, char const *pMapEntities, char const *pOldLevel, char const *pLandmarkName, bool loadGame, bool background)
{
/* If we're not loaded... */
@ -306,6 +307,8 @@ bool SourceModBase::LevelInit(char const *pMapName, char const *pMapEntities, ch
g_pOnMapEnd = g_Forwards.CreateForward("OnMapEnd", ET_Ignore, 0, NULL);
}
g_LevelEndBarrier = true;
RETURN_META_VALUE(MRES_IGNORED, true);
}
@ -405,6 +408,17 @@ void SourceModBase::GameFrame(bool simulating)
void SourceModBase::LevelShutdown()
{
if (g_LevelEndBarrier)
{
SMGlobalClass *next = SMGlobalClass::head;
while (next)
{
next->OnSourceModLevelEnd();
next = next->m_pGlobalClassNext;
}
g_LevelEndBarrier = false;
}
if (g_pOnMapEnd && m_ExecOnMapEnd)
{
g_pOnMapEnd->Execute(NULL);