HackFix: Mimic forwardsys style of pawn calling.
This commit is contained in:
		
							parent
							
								
									803a54b773
								
							
						
					
					
						commit
						97610edda4
					
				@ -438,6 +438,20 @@ FeatureStatus SDKHooks::GetFeatureStatus(FeatureType type, const char *name)
 | 
				
			|||||||
/**
 | 
					/**
 | 
				
			||||||
 * Functions
 | 
					 * Functions
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					static void CopyEntityVector(const ke::Vector<HookList> &source, ke::Vector<HookList> &destination, int entity)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						for (size_t iter = 0; iter < source.length(); ++iter)
 | 
				
			||||||
 | 
						{
 | 
				
			||||||
 | 
							if (source[iter].entity != entity)
 | 
				
			||||||
 | 
							{
 | 
				
			||||||
 | 
								continue;
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							destination.append(source[iter]);
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
cell_t SDKHooks::Call(int entity, SDKHookType type, int other)
 | 
					cell_t SDKHooks::Call(int entity, SDKHookType type, int other)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	return Call(gamehelpers->ReferenceToEntity(entity), type, gamehelpers->ReferenceToEntity(other));
 | 
						return Call(gamehelpers->ReferenceToEntity(entity), type, gamehelpers->ReferenceToEntity(other));
 | 
				
			||||||
@ -461,16 +475,13 @@ cell_t SDKHooks::Call(CBaseEntity *pEnt, SDKHookType type, CBaseEntity *pOther)
 | 
				
			|||||||
			continue;
 | 
								continue;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ke::Vector<HookList> &pawnlist = vtablehooklist[entry]->hooks;
 | 
					 | 
				
			||||||
		int entity = gamehelpers->EntityToBCompatRef(pEnt);
 | 
							int entity = gamehelpers->EntityToBCompatRef(pEnt);
 | 
				
			||||||
		int other = gamehelpers->EntityToBCompatRef(pOther);
 | 
							int other = gamehelpers->EntityToBCompatRef(pOther);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							ke::Vector<HookList> pawnlist;
 | 
				
			||||||
 | 
							CopyEntityVector(vtablehooklist[entry]->hooks, pawnlist, entity);
 | 
				
			||||||
		for (entry = 0; entry < pawnlist.length(); ++entry)
 | 
							for (entry = 0; entry < pawnlist.length(); ++entry)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (entity != pawnlist[entry].entity)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				continue;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			IPluginFunction *callback = pawnlist[entry].callback;
 | 
								IPluginFunction *callback = pawnlist[entry].callback;
 | 
				
			||||||
			callback->PushCell(entity);
 | 
								callback->PushCell(entity);
 | 
				
			||||||
			callback->PushCell(other);
 | 
								callback->PushCell(other);
 | 
				
			||||||
@ -914,14 +925,10 @@ void SDKHooks::Hook_FireBulletsPost(const FireBulletsInfo_t &info)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		const char *weapon = pInfo->GetWeaponName();
 | 
							const char *weapon = pInfo->GetWeaponName();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ke::Vector<HookList> &pawnlist = vtablehooklist[entry]->hooks;
 | 
							ke::Vector<HookList> pawnlist;
 | 
				
			||||||
 | 
							CopyEntityVector(vtablehooklist[entry]->hooks, pawnlist, entity);
 | 
				
			||||||
		for (entry = 0; entry < pawnlist.length(); ++entry)
 | 
							for (entry = 0; entry < pawnlist.length(); ++entry)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (entity != pawnlist[entry].entity)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				continue;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			IPluginFunction *callback = pawnlist[entry].callback;
 | 
								IPluginFunction *callback = pawnlist[entry].callback;
 | 
				
			||||||
			callback->PushCell(entity);
 | 
								callback->PushCell(entity);
 | 
				
			||||||
			callback->PushCell(info.m_iShots);
 | 
								callback->PushCell(info.m_iShots);
 | 
				
			||||||
@ -956,14 +963,10 @@ int SDKHooks::Hook_GetMaxHealth()
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		cell_t res = Pl_Continue;
 | 
							cell_t res = Pl_Continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ke::Vector<HookList> &pawnlist = vtablehooklist[entry]->hooks;
 | 
							ke::Vector<HookList> pawnlist;
 | 
				
			||||||
 | 
							CopyEntityVector(vtablehooklist[entry]->hooks, pawnlist, entity);
 | 
				
			||||||
		for (entry = 0; entry < pawnlist.length(); ++entry)
 | 
							for (entry = 0; entry < pawnlist.length(); ++entry)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (entity != pawnlist[entry].entity)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				continue;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			IPluginFunction *callback = pawnlist[entry].callback;
 | 
								IPluginFunction *callback = pawnlist[entry].callback;
 | 
				
			||||||
			callback->PushCell(entity);
 | 
								callback->PushCell(entity);
 | 
				
			||||||
			callback->PushCellByRef(&new_max);
 | 
								callback->PushCellByRef(&new_max);
 | 
				
			||||||
@ -1013,14 +1016,10 @@ int SDKHooks::Hook_OnTakeDamage(CTakeDamageInfoHack &info)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		cell_t res, ret = Pl_Continue;
 | 
							cell_t res, ret = Pl_Continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ke::Vector<HookList> &pawnlist = vtablehooklist[entry]->hooks;
 | 
							ke::Vector<HookList> pawnlist;
 | 
				
			||||||
 | 
							CopyEntityVector(vtablehooklist[entry]->hooks, pawnlist, entity);
 | 
				
			||||||
		for (entry = 0; entry < pawnlist.length(); ++entry)
 | 
							for (entry = 0; entry < pawnlist.length(); ++entry)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (entity != pawnlist[entry].entity)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				continue;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			IPluginFunction *callback = pawnlist[entry].callback;
 | 
								IPluginFunction *callback = pawnlist[entry].callback;
 | 
				
			||||||
			callback->PushCell(entity);
 | 
								callback->PushCell(entity);
 | 
				
			||||||
			callback->PushCellByRef(&attacker);
 | 
								callback->PushCellByRef(&attacker);
 | 
				
			||||||
@ -1095,14 +1094,10 @@ int SDKHooks::Hook_OnTakeDamagePost(CTakeDamageInfoHack &info)
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		int entity = gamehelpers->EntityToBCompatRef(pEntity);
 | 
							int entity = gamehelpers->EntityToBCompatRef(pEntity);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ke::Vector<HookList> &pawnlist = vtablehooklist[entry]->hooks;
 | 
							ke::Vector<HookList> pawnlist;
 | 
				
			||||||
 | 
							CopyEntityVector(vtablehooklist[entry]->hooks, pawnlist, entity);
 | 
				
			||||||
		for (entry = 0; entry < pawnlist.length(); ++entry)
 | 
							for (entry = 0; entry < pawnlist.length(); ++entry)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (entity != pawnlist[entry].entity)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				continue;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			IPluginFunction *callback = pawnlist[entry].callback;
 | 
								IPluginFunction *callback = pawnlist[entry].callback;
 | 
				
			||||||
			callback->PushCell(entity);
 | 
								callback->PushCell(entity);
 | 
				
			||||||
			callback->PushCell(info.GetAttacker());
 | 
								callback->PushCell(info.GetAttacker());
 | 
				
			||||||
@ -1168,14 +1163,10 @@ bool SDKHooks::Hook_Reload()
 | 
				
			|||||||
		int entity = gamehelpers->EntityToBCompatRef(pEntity);
 | 
							int entity = gamehelpers->EntityToBCompatRef(pEntity);
 | 
				
			||||||
		cell_t res = Pl_Continue;
 | 
							cell_t res = Pl_Continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ke::Vector<HookList> &pawnlist = vtablehooklist[entry]->hooks;
 | 
							ke::Vector<HookList> pawnlist;
 | 
				
			||||||
 | 
							CopyEntityVector(vtablehooklist[entry]->hooks, pawnlist, entity);
 | 
				
			||||||
		for (entry = 0; entry < pawnlist.length(); ++entry)
 | 
							for (entry = 0; entry < pawnlist.length(); ++entry)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (entity != pawnlist[entry].entity)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				continue;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			IPluginFunction *callback = pawnlist[entry].callback;
 | 
								IPluginFunction *callback = pawnlist[entry].callback;
 | 
				
			||||||
			callback->PushCell(entity);
 | 
								callback->PushCell(entity);
 | 
				
			||||||
			callback->Execute(&res);
 | 
								callback->Execute(&res);
 | 
				
			||||||
@ -1206,14 +1197,10 @@ bool SDKHooks::Hook_ReloadPost()
 | 
				
			|||||||
		int entity = gamehelpers->EntityToBCompatRef(pEntity);
 | 
							int entity = gamehelpers->EntityToBCompatRef(pEntity);
 | 
				
			||||||
		cell_t origreturn = META_RESULT_ORIG_RET(bool) ? 1 : 0;
 | 
							cell_t origreturn = META_RESULT_ORIG_RET(bool) ? 1 : 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ke::Vector<HookList> &pawnlist = vtablehooklist[entry]->hooks;
 | 
							ke::Vector<HookList> pawnlist;
 | 
				
			||||||
 | 
							CopyEntityVector(vtablehooklist[entry]->hooks, pawnlist, entity);
 | 
				
			||||||
		for (entry = 0; entry < pawnlist.length(); ++entry)
 | 
							for (entry = 0; entry < pawnlist.length(); ++entry)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (entity != pawnlist[entry].entity)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				continue;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			IPluginFunction *callback = pawnlist[entry].callback;
 | 
								IPluginFunction *callback = pawnlist[entry].callback;
 | 
				
			||||||
			callback->PushCell(entity);
 | 
								callback->PushCell(entity);
 | 
				
			||||||
			callback->PushCell(origreturn);
 | 
								callback->PushCell(origreturn);
 | 
				
			||||||
@ -1253,14 +1240,10 @@ bool SDKHooks::Hook_ShouldCollide(int collisionGroup, int contentsMask)
 | 
				
			|||||||
		cell_t origRet = ((META_RESULT_STATUS >= MRES_OVERRIDE)?(META_RESULT_OVERRIDE_RET(bool)):(META_RESULT_ORIG_RET(bool))) ? 1 : 0;
 | 
							cell_t origRet = ((META_RESULT_STATUS >= MRES_OVERRIDE)?(META_RESULT_OVERRIDE_RET(bool)):(META_RESULT_ORIG_RET(bool))) ? 1 : 0;
 | 
				
			||||||
		cell_t res = 0;
 | 
							cell_t res = 0;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ke::Vector<HookList> &pawnlist = vtablehooklist[entry]->hooks;
 | 
							ke::Vector<HookList> pawnlist;
 | 
				
			||||||
 | 
							CopyEntityVector(vtablehooklist[entry]->hooks, pawnlist, entity);
 | 
				
			||||||
		for (entry = 0; entry < pawnlist.length(); ++entry)
 | 
							for (entry = 0; entry < pawnlist.length(); ++entry)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (entity != pawnlist[entry].entity)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				continue;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			IPluginFunction *callback = pawnlist[entry].callback;
 | 
								IPluginFunction *callback = pawnlist[entry].callback;
 | 
				
			||||||
			callback->PushCell(entity);
 | 
								callback->PushCell(entity);
 | 
				
			||||||
			callback->PushCell(collisionGroup);
 | 
								callback->PushCell(collisionGroup);
 | 
				
			||||||
@ -1301,14 +1284,10 @@ void SDKHooks::Hook_Spawn()
 | 
				
			|||||||
		int entity = gamehelpers->EntityToBCompatRef(pEntity);
 | 
							int entity = gamehelpers->EntityToBCompatRef(pEntity);
 | 
				
			||||||
		cell_t res = Pl_Continue;
 | 
							cell_t res = Pl_Continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ke::Vector<HookList> &pawnlist = vtablehooklist[entry]->hooks;
 | 
							ke::Vector<HookList> pawnlist;
 | 
				
			||||||
 | 
							CopyEntityVector(vtablehooklist[entry]->hooks, pawnlist, entity);
 | 
				
			||||||
		for (entry = 0; entry < pawnlist.length(); ++entry)
 | 
							for (entry = 0; entry < pawnlist.length(); ++entry)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (entity != pawnlist[entry].entity)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				continue;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			IPluginFunction *callback = pawnlist[entry].callback;
 | 
								IPluginFunction *callback = pawnlist[entry].callback;
 | 
				
			||||||
			callback->PushCell(entity);
 | 
								callback->PushCell(entity);
 | 
				
			||||||
			callback->Execute(&res);
 | 
								callback->Execute(&res);
 | 
				
			||||||
@ -1399,14 +1378,10 @@ void SDKHooks::Hook_TraceAttack(CTakeDamageInfoHack &info, const Vector &vecDir,
 | 
				
			|||||||
		int ammotype = info.GetAmmoType();
 | 
							int ammotype = info.GetAmmoType();
 | 
				
			||||||
		cell_t res, ret = Pl_Continue;
 | 
							cell_t res, ret = Pl_Continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ke::Vector<HookList> &pawnlist = vtablehooklist[entry]->hooks;
 | 
							ke::Vector<HookList> pawnlist;
 | 
				
			||||||
 | 
							CopyEntityVector(vtablehooklist[entry]->hooks, pawnlist, entity);
 | 
				
			||||||
		for (entry = 0; entry < pawnlist.length(); ++entry)
 | 
							for (entry = 0; entry < pawnlist.length(); ++entry)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (entity != pawnlist[entry].entity)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				continue;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			IPluginFunction *callback = pawnlist[entry].callback;
 | 
								IPluginFunction *callback = pawnlist[entry].callback;
 | 
				
			||||||
			callback->PushCell(entity);
 | 
								callback->PushCell(entity);
 | 
				
			||||||
			callback->PushCellByRef(&attacker);
 | 
								callback->PushCellByRef(&attacker);
 | 
				
			||||||
@ -1477,14 +1452,10 @@ void SDKHooks::Hook_TraceAttackPost(CTakeDamageInfoHack &info, const Vector &vec
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
		int entity = gamehelpers->EntityToBCompatRef(pEntity);
 | 
							int entity = gamehelpers->EntityToBCompatRef(pEntity);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ke::Vector<HookList> &pawnlist = vtablehooklist[entry]->hooks;
 | 
							ke::Vector<HookList> pawnlist;
 | 
				
			||||||
 | 
							CopyEntityVector(vtablehooklist[entry]->hooks, pawnlist, entity);
 | 
				
			||||||
		for (entry = 0; entry < pawnlist.length(); ++entry)
 | 
							for (entry = 0; entry < pawnlist.length(); ++entry)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (entity != pawnlist[entry].entity)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				continue;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			IPluginFunction *callback = pawnlist[entry].callback;
 | 
								IPluginFunction *callback = pawnlist[entry].callback;
 | 
				
			||||||
			callback->PushCell(entity);
 | 
								callback->PushCell(entity);
 | 
				
			||||||
			callback->PushCell(info.GetAttacker());
 | 
								callback->PushCell(info.GetAttacker());
 | 
				
			||||||
@ -1521,14 +1492,10 @@ void SDKHooks::Hook_Use(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_TYPE
 | 
				
			|||||||
		int caller = gamehelpers->EntityToBCompatRef(pCaller);
 | 
							int caller = gamehelpers->EntityToBCompatRef(pCaller);
 | 
				
			||||||
		cell_t ret = Pl_Continue;
 | 
							cell_t ret = Pl_Continue;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ke::Vector<HookList> &pawnlist = vtablehooklist[entry]->hooks;
 | 
							ke::Vector<HookList> pawnlist;
 | 
				
			||||||
 | 
							CopyEntityVector(vtablehooklist[entry]->hooks, pawnlist, entity);
 | 
				
			||||||
		for (entry = 0; entry < pawnlist.length(); ++entry)
 | 
							for (entry = 0; entry < pawnlist.length(); ++entry)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (entity != pawnlist[entry].entity)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				continue;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			IPluginFunction *callback = pawnlist[entry].callback;
 | 
								IPluginFunction *callback = pawnlist[entry].callback;
 | 
				
			||||||
			callback->PushCell(entity);
 | 
								callback->PushCell(entity);
 | 
				
			||||||
			callback->PushCell(activator);
 | 
								callback->PushCell(activator);
 | 
				
			||||||
@ -1564,14 +1531,10 @@ void SDKHooks::Hook_UsePost(CBaseEntity *pActivator, CBaseEntity *pCaller, USE_T
 | 
				
			|||||||
		int activator = gamehelpers->EntityToBCompatRef(pActivator);
 | 
							int activator = gamehelpers->EntityToBCompatRef(pActivator);
 | 
				
			||||||
		int caller = gamehelpers->EntityToBCompatRef(pCaller);
 | 
							int caller = gamehelpers->EntityToBCompatRef(pCaller);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		ke::Vector<HookList> &pawnlist = vtablehooklist[entry]->hooks;
 | 
							ke::Vector<HookList> pawnlist;
 | 
				
			||||||
 | 
							CopyEntityVector(vtablehooklist[entry]->hooks, pawnlist, entity);
 | 
				
			||||||
		for (entry = 0; entry < pawnlist.length(); ++entry)
 | 
							for (entry = 0; entry < pawnlist.length(); ++entry)
 | 
				
			||||||
		{
 | 
							{
 | 
				
			||||||
			if (entity != pawnlist[entry].entity)
 | 
					 | 
				
			||||||
			{
 | 
					 | 
				
			||||||
				continue;
 | 
					 | 
				
			||||||
			}
 | 
					 | 
				
			||||||
 | 
					 | 
				
			||||||
			IPluginFunction *callback = pawnlist[entry].callback;
 | 
								IPluginFunction *callback = pawnlist[entry].callback;
 | 
				
			||||||
			callback->PushCell(entity);
 | 
								callback->PushCell(entity);
 | 
				
			||||||
			callback->PushCell(activator);
 | 
								callback->PushCell(activator);
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user