Add OnEntitySpawned to SDKHooks.
This commit is contained in:
		
							parent
							
								
									8e07790997
								
							
						
					
					
						commit
						102b01c626
					
				| @ -112,6 +112,7 @@ IServerTools *servertools = NULL; | |||||||
| 
 | 
 | ||||||
| // global hooks and forwards
 | // global hooks and forwards
 | ||||||
| IForward *g_pOnEntityCreated = NULL; | IForward *g_pOnEntityCreated = NULL; | ||||||
|  | IForward *g_pOnEntitySpawned = NULL; | ||||||
| IForward *g_pOnEntityDestroyed = NULL; | IForward *g_pOnEntityDestroyed = NULL; | ||||||
| 
 | 
 | ||||||
| #ifdef GAMEDESC_CAN_CHANGE | #ifdef GAMEDESC_CAN_CHANGE | ||||||
| @ -252,6 +253,7 @@ bool SDKHooks::SDK_OnLoad(char *error, size_t maxlength, bool late) | |||||||
| 	plsys->AddPluginsListener(&g_Interface); | 	plsys->AddPluginsListener(&g_Interface); | ||||||
| 
 | 
 | ||||||
| 	g_pOnEntityCreated = forwards->CreateForward("OnEntityCreated", ET_Ignore, 2, NULL, Param_Cell, Param_String); | 	g_pOnEntityCreated = forwards->CreateForward("OnEntityCreated", ET_Ignore, 2, NULL, Param_Cell, Param_String); | ||||||
|  | 	g_pOnEntitySpawned = forwards->CreateForward("OnEntitySpawned", ET_Ignore, 2, NULL, Param_Cell, Param_String); | ||||||
| 	g_pOnEntityDestroyed = forwards->CreateForward("OnEntityDestroyed", ET_Ignore, 1, NULL, Param_Cell); | 	g_pOnEntityDestroyed = forwards->CreateForward("OnEntityDestroyed", ET_Ignore, 1, NULL, Param_Cell); | ||||||
| #ifdef GAMEDESC_CAN_CHANGE | #ifdef GAMEDESC_CAN_CHANGE | ||||||
| 	g_pOnGetGameNameDescription = forwards->CreateForward("OnGetGameDescription", ET_Hook, 2, NULL, Param_String); | 	g_pOnGetGameNameDescription = forwards->CreateForward("OnGetGameDescription", ET_Hook, 2, NULL, Param_String); | ||||||
| @ -344,6 +346,7 @@ void SDKHooks::SDK_OnUnload() | |||||||
| #endif | #endif | ||||||
| 
 | 
 | ||||||
| 	forwards->ReleaseForward(g_pOnEntityCreated); | 	forwards->ReleaseForward(g_pOnEntityCreated); | ||||||
|  | 	forwards->ReleaseForward(g_pOnEntitySpawned); | ||||||
| 	forwards->ReleaseForward(g_pOnEntityDestroyed); | 	forwards->ReleaseForward(g_pOnEntityDestroyed); | ||||||
| #ifdef GAMEDESC_CAN_CHANGE | #ifdef GAMEDESC_CAN_CHANGE | ||||||
| 	forwards->ReleaseForward(g_pOnGetGameNameDescription); | 	forwards->ReleaseForward(g_pOnGetGameNameDescription); | ||||||
| @ -420,6 +423,7 @@ void SDKHooks::OnClientPutInServer(int client) | |||||||
| 	CBaseEntity *pPlayer = gamehelpers->ReferenceToEntity(client); | 	CBaseEntity *pPlayer = gamehelpers->ReferenceToEntity(client); | ||||||
| 
 | 
 | ||||||
| 	HandleEntityCreated(pPlayer, client, gamehelpers->EntityToReference(pPlayer)); | 	HandleEntityCreated(pPlayer, client, gamehelpers->EntityToReference(pPlayer)); | ||||||
|  | 	HandleEntitySpawned(pPlayer, client, gamehelpers->EntityToReference(pPlayer)); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| void SDKHooks::OnClientDisconnecting(int client) | void SDKHooks::OnClientDisconnecting(int client) | ||||||
| @ -879,6 +883,27 @@ void SDKHooks::OnEntityCreated(CBaseEntity *pEntity) | |||||||
| 	} | 	} | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void SDKHooks::OnEntitySpawned(CBaseEntity *pEntity) | ||||||
|  | { | ||||||
|  | 	// Call OnEntitySpawned forward
 | ||||||
|  | 	int ref = gamehelpers->EntityToReference(pEntity); | ||||||
|  | 	int index = gamehelpers->ReferenceToIndex(ref); | ||||||
|  | 
 | ||||||
|  | 	// This can be -1 for player ents before any players have connected
 | ||||||
|  | 	if ((unsigned)index == INVALID_EHANDLE_INDEX || (index > 0 && index <= playerhelpers->GetMaxClients())) | ||||||
|  | 	{ | ||||||
|  | 		return; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	if (!IsEntityIndexInRange(index)) | ||||||
|  | 	{ | ||||||
|  | 		g_pSM->LogError(myself, "SDKHooks::OnEntitySpawned - Got entity index out of range (%d)", index); | ||||||
|  | 		return; | ||||||
|  | 	} | ||||||
|  | 
 | ||||||
|  | 	HandleEntitySpawned(pEntity, index, ref); | ||||||
|  | } | ||||||
|  | 
 | ||||||
| #ifdef GAMEDESC_CAN_CHANGE | #ifdef GAMEDESC_CAN_CHANGE | ||||||
| const char *SDKHooks::Hook_GetGameDescription() | const char *SDKHooks::Hook_GetGameDescription() | ||||||
| { | { | ||||||
| @ -1791,6 +1816,32 @@ void SDKHooks::HandleEntityCreated(CBaseEntity *pEntity, int index, cell_t ref) | |||||||
| 	m_EntityCache[index] = ref; | 	m_EntityCache[index] = ref; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
|  | void SDKHooks::HandleEntitySpawned(CBaseEntity *pEntity, int index, cell_t ref) | ||||||
|  | { | ||||||
|  | 	if (g_pOnEntitySpawned->GetFunctionCount() || m_EntListeners.size()) | ||||||
|  | 	{ | ||||||
|  | 		cell_t bcompatRef = gamehelpers->EntityToBCompatRef(pEntity); | ||||||
|  | 		const char *pName = gamehelpers->GetEntityClassname(pEntity); | ||||||
|  | 		if (!pName) | ||||||
|  | 			pName = ""; | ||||||
|  | 
 | ||||||
|  | 		// Send OnEntitySpawned to SM listeners
 | ||||||
|  | 		for (SourceHook::List<ISMEntityListener *>::iterator iter = m_EntListeners.begin(); iter != m_EntListeners.end(); iter++) | ||||||
|  | 		{ | ||||||
|  | 			ISMEntityListener *pListener = (*iter); | ||||||
|  | 			pListener->OnEntitySpawned(pEntity, pName); | ||||||
|  | 		} | ||||||
|  | 
 | ||||||
|  | 		// Call OnEntitySpawned forward
 | ||||||
|  | 		if (g_pOnEntitySpawned->GetFunctionCount()) | ||||||
|  | 		{ | ||||||
|  | 			g_pOnEntitySpawned->PushCell(bcompatRef); | ||||||
|  | 			g_pOnEntitySpawned->PushString(pName); | ||||||
|  | 			g_pOnEntitySpawned->Execute(NULL); | ||||||
|  | 		} | ||||||
|  | 	} | ||||||
|  | } | ||||||
|  | 
 | ||||||
| void SDKHooks::HandleEntityDeleted(CBaseEntity *pEntity) | void SDKHooks::HandleEntityDeleted(CBaseEntity *pEntity) | ||||||
| { | { | ||||||
| 	cell_t bcompatRef = gamehelpers->EntityToBCompatRef(pEntity); | 	cell_t bcompatRef = gamehelpers->EntityToBCompatRef(pEntity); | ||||||
|  | |||||||
| @ -238,6 +238,7 @@ public:  // IFeatureProvider | |||||||
| 
 | 
 | ||||||
| public:  // IEntityListener
 | public:  // IEntityListener
 | ||||||
| 	virtual void OnEntityCreated(CBaseEntity *pEntity); | 	virtual void OnEntityCreated(CBaseEntity *pEntity); | ||||||
|  | 	virtual void OnEntitySpawned(CBaseEntity *pEntity); | ||||||
| 	virtual void OnEntityDeleted(CBaseEntity *pEntity); | 	virtual void OnEntityDeleted(CBaseEntity *pEntity); | ||||||
| 
 | 
 | ||||||
| public:  // IClientListener
 | public:  // IClientListener
 | ||||||
| @ -330,6 +331,7 @@ public: | |||||||
| 	 | 	 | ||||||
| private: | private: | ||||||
| 	void HandleEntityCreated(CBaseEntity *pEntity, int index, cell_t ref); | 	void HandleEntityCreated(CBaseEntity *pEntity, int index, cell_t ref); | ||||||
|  | 	void HandleEntitySpawned(CBaseEntity *pEntity, int index, cell_t ref); | ||||||
| 	void HandleEntityDeleted(CBaseEntity *pEntity); | 	void HandleEntityDeleted(CBaseEntity *pEntity); | ||||||
| 	void Unhook(CBaseEntity *pEntity); | 	void Unhook(CBaseEntity *pEntity); | ||||||
| 	void Unhook(IPluginContext *pContext); | 	void Unhook(IPluginContext *pContext); | ||||||
|  | |||||||
| @ -333,6 +333,14 @@ typeset SDKHookCB | |||||||
|  */ |  */ | ||||||
| forward void OnEntityCreated(int entity, const char[] classname); | forward void OnEntityCreated(int entity, const char[] classname); | ||||||
| 
 | 
 | ||||||
|  | /** | ||||||
|  |  * When an entity is spawned | ||||||
|  |  * | ||||||
|  |  * @param entity        Entity index | ||||||
|  |  * @param classname     Class name | ||||||
|  |  */ | ||||||
|  | forward void OnEntitySpawned(int entity, const char[] classname); | ||||||
|  | 
 | ||||||
| /** | /** | ||||||
|  * When an entity is destroyed |  * When an entity is destroyed | ||||||
|  * |  * | ||||||
|  | |||||||
| @ -36,7 +36,7 @@ | |||||||
| #include <IShareSys.h> | #include <IShareSys.h> | ||||||
| 
 | 
 | ||||||
| #define SMINTERFACE_SDKHOOKS_NAME		"ISDKHooks" | #define SMINTERFACE_SDKHOOKS_NAME		"ISDKHooks" | ||||||
| #define SMINTERFACE_SDKHOOKS_VERSION	1 | #define SMINTERFACE_SDKHOOKS_VERSION	2 | ||||||
| 
 | 
 | ||||||
| class CBaseEntity; | class CBaseEntity; | ||||||
| 
 | 
 | ||||||
| @ -71,6 +71,16 @@ namespace SourceMod | |||||||
| 		virtual void OnEntityDestroyed(CBaseEntity *pEntity) | 		virtual void OnEntityDestroyed(CBaseEntity *pEntity) | ||||||
| 		{ | 		{ | ||||||
| 		} | 		} | ||||||
|  | 
 | ||||||
|  | 		/**
 | ||||||
|  | 		 * @brief	When an entity is spawned | ||||||
|  | 		 * | ||||||
|  | 		 * @param	pEntity		CBaseEntity entity. | ||||||
|  | 		 * @param	classname	Entity classname. | ||||||
|  | 		 */ | ||||||
|  | 		virtual void OnEntitySpawned(CBaseEntity *pEntity, const char *classname) | ||||||
|  | 		{ | ||||||
|  | 		} | ||||||
| 	}; | 	}; | ||||||
| 
 | 
 | ||||||
| 	/**
 | 	/**
 | ||||||
|  | |||||||
		Loading…
	
		Reference in New Issue
	
	Block a user