Add OnEntitySpawned to SDKHooks.
This commit is contained in:
		
							parent
							
								
									8e07790997
								
							
						
					
					
						commit
						102b01c626
					
				| @ -112,6 +112,7 @@ IServerTools *servertools = NULL; | ||||
| 
 | ||||
| // global hooks and forwards
 | ||||
| IForward *g_pOnEntityCreated = NULL; | ||||
| IForward *g_pOnEntitySpawned = NULL; | ||||
| IForward *g_pOnEntityDestroyed = NULL; | ||||
| 
 | ||||
| #ifdef GAMEDESC_CAN_CHANGE | ||||
| @ -252,6 +253,7 @@ bool SDKHooks::SDK_OnLoad(char *error, size_t maxlength, bool late) | ||||
| 	plsys->AddPluginsListener(&g_Interface); | ||||
| 
 | ||||
| 	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); | ||||
| #ifdef GAMEDESC_CAN_CHANGE | ||||
| 	g_pOnGetGameNameDescription = forwards->CreateForward("OnGetGameDescription", ET_Hook, 2, NULL, Param_String); | ||||
| @ -344,6 +346,7 @@ void SDKHooks::SDK_OnUnload() | ||||
| #endif | ||||
| 
 | ||||
| 	forwards->ReleaseForward(g_pOnEntityCreated); | ||||
| 	forwards->ReleaseForward(g_pOnEntitySpawned); | ||||
| 	forwards->ReleaseForward(g_pOnEntityDestroyed); | ||||
| #ifdef GAMEDESC_CAN_CHANGE | ||||
| 	forwards->ReleaseForward(g_pOnGetGameNameDescription); | ||||
| @ -420,6 +423,7 @@ void SDKHooks::OnClientPutInServer(int client) | ||||
| 	CBaseEntity *pPlayer = gamehelpers->ReferenceToEntity(client); | ||||
| 
 | ||||
| 	HandleEntityCreated(pPlayer, client, gamehelpers->EntityToReference(pPlayer)); | ||||
| 	HandleEntitySpawned(pPlayer, client, gamehelpers->EntityToReference(pPlayer)); | ||||
| } | ||||
| 
 | ||||
| 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 | ||||
| const char *SDKHooks::Hook_GetGameDescription() | ||||
| { | ||||
| @ -1791,6 +1816,32 @@ void SDKHooks::HandleEntityCreated(CBaseEntity *pEntity, int index, cell_t 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) | ||||
| { | ||||
| 	cell_t bcompatRef = gamehelpers->EntityToBCompatRef(pEntity); | ||||
|  | ||||
| @ -238,6 +238,7 @@ public:  // IFeatureProvider | ||||
| 
 | ||||
| public:  // IEntityListener
 | ||||
| 	virtual void OnEntityCreated(CBaseEntity *pEntity); | ||||
| 	virtual void OnEntitySpawned(CBaseEntity *pEntity); | ||||
| 	virtual void OnEntityDeleted(CBaseEntity *pEntity); | ||||
| 
 | ||||
| public:  // IClientListener
 | ||||
| @ -330,6 +331,7 @@ public: | ||||
| 	 | ||||
| private: | ||||
| 	void HandleEntityCreated(CBaseEntity *pEntity, int index, cell_t ref); | ||||
| 	void HandleEntitySpawned(CBaseEntity *pEntity, int index, cell_t ref); | ||||
| 	void HandleEntityDeleted(CBaseEntity *pEntity); | ||||
| 	void Unhook(CBaseEntity *pEntity); | ||||
| 	void Unhook(IPluginContext *pContext); | ||||
|  | ||||
| @ -333,6 +333,14 @@ typeset SDKHookCB | ||||
|  */ | ||||
| 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 | ||||
|  * | ||||
|  | ||||
| @ -36,7 +36,7 @@ | ||||
| #include <IShareSys.h> | ||||
| 
 | ||||
| #define SMINTERFACE_SDKHOOKS_NAME		"ISDKHooks" | ||||
| #define SMINTERFACE_SDKHOOKS_VERSION	1 | ||||
| #define SMINTERFACE_SDKHOOKS_VERSION	2 | ||||
| 
 | ||||
| class CBaseEntity; | ||||
| 
 | ||||
| @ -71,6 +71,16 @@ namespace SourceMod | ||||
| 		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