Added checks to avoid crashing in some natives before map start (bug 5119, r=fyren).
This commit is contained in:
parent
45f68840ed
commit
67163e14e6
@ -372,7 +372,7 @@ void CPlugin::Call_OnAllPluginsLoaded()
|
||||
pFunction->Execute(&result);
|
||||
}
|
||||
|
||||
if (g_OnMapStarted)
|
||||
if (g_SourceMod.IsMapRunning())
|
||||
{
|
||||
if ((pFunction = m_pRuntime->GetFunctionByName("OnMapStart")) != NULL)
|
||||
{
|
||||
|
@ -89,6 +89,11 @@ static cell_t GetGameTime(IPluginContext *pContext, const cell_t *params)
|
||||
|
||||
static cell_t CreateFakeClient(IPluginContext *pContext, const cell_t *params)
|
||||
{
|
||||
if (!g_SourceMod.IsMapRunning())
|
||||
{
|
||||
return pContext->ThrowNativeError("Cannot create fakeclient when no map is active");
|
||||
}
|
||||
|
||||
char *netname;
|
||||
|
||||
pContext->LocalToString(params[1], &netname);
|
||||
|
@ -745,5 +745,10 @@ int SourceModBase::GetShApiVersion()
|
||||
return api;
|
||||
}
|
||||
|
||||
bool SourceModBase::IsMapRunning()
|
||||
{
|
||||
return g_OnMapStarted;
|
||||
}
|
||||
|
||||
SMGlobalClass *SMGlobalClass::head = NULL;
|
||||
|
||||
|
@ -135,6 +135,7 @@ public: // ISourceMod
|
||||
const char *GetCoreConfigValue(const char *key);
|
||||
int GetPluginId();
|
||||
int GetShApiVersion();
|
||||
bool IsMapRunning();
|
||||
private:
|
||||
CStack<CDataPack *> m_freepacks;
|
||||
char m_SMBaseDir[PLATFORM_MAX_PATH];
|
||||
|
@ -760,6 +760,11 @@ static cell_t FindEntityByClassname(IPluginContext *pContext, const cell_t *para
|
||||
#if SOURCE_ENGINE >= SE_ORANGEBOX
|
||||
static cell_t CreateEntityByName(IPluginContext *pContext, const cell_t *params)
|
||||
{
|
||||
if (!g_pSM->IsMapRunning())
|
||||
{
|
||||
return pContext->ThrowNativeError("Cannot create new entity when no map is running");
|
||||
}
|
||||
|
||||
char *classname;
|
||||
pContext->LocalToString(params[1], &classname);
|
||||
CBaseEntity *pEntity = (CBaseEntity *)servertools->CreateEntityByName(classname);
|
||||
@ -768,6 +773,11 @@ static cell_t CreateEntityByName(IPluginContext *pContext, const cell_t *params)
|
||||
#else
|
||||
static cell_t CreateEntityByName(IPluginContext *pContext, const cell_t *params)
|
||||
{
|
||||
if (!g_pSM->IsMapRunning())
|
||||
{
|
||||
return pContext->ThrowNativeError("Cannot create new entity when no map is running");
|
||||
}
|
||||
|
||||
static ValveCall *pCall = NULL;
|
||||
if (!pCall)
|
||||
{
|
||||
|
@ -43,7 +43,7 @@
|
||||
#include <time.h>
|
||||
|
||||
#define SMINTERFACE_SOURCEMOD_NAME "ISourceMod"
|
||||
#define SMINTERFACE_SOURCEMOD_VERSION 12
|
||||
#define SMINTERFACE_SOURCEMOD_VERSION 13
|
||||
|
||||
/**
|
||||
* @brief Forward declaration of the KeyValues class.
|
||||
@ -311,6 +311,13 @@ namespace SourceMod
|
||||
* @return SourceHook API version number.
|
||||
*/
|
||||
virtual int GetShApiVersion() = 0;
|
||||
|
||||
/**
|
||||
* @brief Returns whether or not a map is currently running.
|
||||
*
|
||||
* @return True if a map is currently running, otherwise false.
|
||||
*/
|
||||
virtual bool IsMapRunning() = 0;
|
||||
};
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user