Merge pull request #448 from alliedmodders/use-blamepluginerror
Update SP and use BlamePluginError in sdkhooks and sdktools.
This commit is contained in:
		
						commit
						0e80ffef55
					
				@ -157,44 +157,66 @@ int DebugReport::_GetPluginIndex(IPluginContext *ctx)
 | 
			
		||||
 | 
			
		||||
void DebugReport::ReportError(const IErrorReport &report, IFrameIterator &iter)
 | 
			
		||||
{
 | 
			
		||||
	// Find the nearest plugin to blame.
 | 
			
		||||
	const char *blame = nullptr;
 | 
			
		||||
	for (; !iter.Done(); iter.Next()) {
 | 
			
		||||
		if (iter.IsScriptedFrame()) {
 | 
			
		||||
			IPlugin *plugin = pluginsys->FindPluginByContext(iter.Context()->GetContext());
 | 
			
		||||
			if (plugin)
 | 
			
		||||
				blame = plugin->GetFilename();
 | 
			
		||||
			else
 | 
			
		||||
				blame = iter.Context()->GetRuntime()->GetFilename();
 | 
			
		||||
			break;
 | 
			
		||||
	if (report.Blame()) 
 | 
			
		||||
	{
 | 
			
		||||
		blame = report.Blame()->DebugName();
 | 
			
		||||
	} else {
 | 
			
		||||
	    // Find the nearest plugin to blame.
 | 
			
		||||
		for (; !iter.Done(); iter.Next()) 
 | 
			
		||||
		{
 | 
			
		||||
			if (iter.IsScriptedFrame()) 
 | 
			
		||||
			{
 | 
			
		||||
				IPlugin *plugin = pluginsys->FindPluginByContext(iter.Context()->GetContext());
 | 
			
		||||
				if (plugin)
 | 
			
		||||
				{
 | 
			
		||||
					blame = plugin->GetFilename();
 | 
			
		||||
				} else {
 | 
			
		||||
					blame = iter.Context()->GetRuntime()->GetFilename();
 | 
			
		||||
				}
 | 
			
		||||
				break;
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	iter.Reset();
 | 
			
		||||
 | 
			
		||||
	g_Logger.LogError("[SM] Exception reported: %s", report.Message());
 | 
			
		||||
 | 
			
		||||
	if (blame) 
 | 
			
		||||
		g_Logger.LogError("[SM] Blaming plugin: %s", blame);
 | 
			
		||||
	g_Logger.LogError("[SM] Call stack trace:");
 | 
			
		||||
	{
 | 
			
		||||
		g_Logger.LogError("[SM] Blaming: %s()", blame);
 | 
			
		||||
	}
 | 
			
		||||
 | 
			
		||||
	for (int index = 0; !iter.Done(); iter.Next(), index++) {
 | 
			
		||||
		const char *fn = iter.FunctionName();
 | 
			
		||||
		if (!fn)
 | 
			
		||||
			fn = "<unknown function>";
 | 
			
		||||
	if (!iter.Done()) 
 | 
			
		||||
	{
 | 
			
		||||
		g_Logger.LogError("[SM] Call stack trace:");
 | 
			
		||||
 | 
			
		||||
		if (iter.IsNativeFrame()) {
 | 
			
		||||
			g_Logger.LogError("[SM]   [%d] %s", index, fn);
 | 
			
		||||
			continue;
 | 
			
		||||
		}
 | 
			
		||||
		if (iter.IsScriptedFrame()) {
 | 
			
		||||
			const char *file = iter.FilePath();
 | 
			
		||||
			if (!file)
 | 
			
		||||
				file = "<unknown>";
 | 
			
		||||
			g_Logger.LogError("[SM]   [%d] Line %d, %s::%s()",
 | 
			
		||||
				index,
 | 
			
		||||
				iter.LineNumber(),
 | 
			
		||||
				file,
 | 
			
		||||
				fn);
 | 
			
		||||
		for (int index = 0; !iter.Done(); iter.Next(), index++) 
 | 
			
		||||
		{
 | 
			
		||||
			const char *fn = iter.FunctionName();
 | 
			
		||||
			if (!fn)
 | 
			
		||||
			{
 | 
			
		||||
				fn = "<unknown function>";
 | 
			
		||||
			}
 | 
			
		||||
			if (iter.IsNativeFrame()) 
 | 
			
		||||
			{
 | 
			
		||||
				g_Logger.LogError("[SM]   [%d] %s", index, fn);
 | 
			
		||||
				continue;
 | 
			
		||||
			}
 | 
			
		||||
			if (iter.IsScriptedFrame()) 
 | 
			
		||||
			{
 | 
			
		||||
				const char *file = iter.FilePath();
 | 
			
		||||
				if (!file)
 | 
			
		||||
				{
 | 
			
		||||
					file = "<unknown>";
 | 
			
		||||
				}
 | 
			
		||||
				g_Logger.LogError("[SM]   [%d] Line %d, %s::%s()",
 | 
			
		||||
						index,
 | 
			
		||||
						iter.LineNumber(),
 | 
			
		||||
						file,
 | 
			
		||||
						fn);
 | 
			
		||||
			}
 | 
			
		||||
		}
 | 
			
		||||
	}
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
@ -1059,13 +1059,13 @@ int SDKHooks::HandleOnTakeDamageHook(CTakeDamageInfoHack &info, SDKHookType hook
 | 
			
		||||
					CBaseEntity *pEntAttacker = gamehelpers->ReferenceToEntity(attacker);
 | 
			
		||||
					if (!pEntAttacker)
 | 
			
		||||
					{
 | 
			
		||||
						callback->GetParentRuntime()->GetDefaultContext()->ThrowNativeError("Entity %d for attacker is invalid", attacker);
 | 
			
		||||
						callback->GetParentContext()->BlamePluginError(callback, "Callback-provided entity %d for attacker is invalid", attacker);
 | 
			
		||||
						RETURN_META_VALUE(MRES_IGNORED, 0);
 | 
			
		||||
					}
 | 
			
		||||
					CBaseEntity *pEntInflictor = gamehelpers->ReferenceToEntity(inflictor);
 | 
			
		||||
					if (!pEntInflictor)
 | 
			
		||||
					{
 | 
			
		||||
						callback->GetParentRuntime()->GetDefaultContext()->ThrowNativeError("Entity %d for inflictor is invalid", inflictor);
 | 
			
		||||
						callback->GetParentContext()->BlamePluginError(callback, "Callback-provided entity %d for inflictor is invalid", inflictor);
 | 
			
		||||
						RETURN_META_VALUE(MRES_IGNORED, 0);
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
@ -1442,13 +1442,13 @@ void SDKHooks::Hook_TraceAttack(CTakeDamageInfoHack &info, const Vector &vecDir,
 | 
			
		||||
					CBaseEntity *pEntAttacker = gamehelpers->ReferenceToEntity(attacker);
 | 
			
		||||
					if(!pEntAttacker)
 | 
			
		||||
					{
 | 
			
		||||
						callback->GetParentRuntime()->GetDefaultContext()->ThrowNativeError("Entity %d for attacker is invalid", attacker);
 | 
			
		||||
						callback->GetParentContext()->BlamePluginError(callback, "Callback-provided entity %d for attacker is invalid", attacker);
 | 
			
		||||
						RETURN_META(MRES_IGNORED);
 | 
			
		||||
					}
 | 
			
		||||
					CBaseEntity *pEntInflictor = gamehelpers->ReferenceToEntity(inflictor);
 | 
			
		||||
					if(!pEntInflictor)
 | 
			
		||||
					{
 | 
			
		||||
						callback->GetParentRuntime()->GetDefaultContext()->ThrowNativeError("Entity %d for inflictor is invalid", inflictor);
 | 
			
		||||
						callback->GetParentContext()->BlamePluginError(callback, "Callback-provided entity %d for inflictor is invalid", inflictor);
 | 
			
		||||
						RETURN_META(MRES_IGNORED);
 | 
			
		||||
					}
 | 
			
		||||
					
 | 
			
		||||
 | 
			
		||||
@ -410,9 +410,9 @@ void SoundHooks::OnEmitSound(IRecipientFilter &filter, int iEntIndex, int iChann
 | 
			
		||||
 | 
			
		||||
					if (!pPlayer)
 | 
			
		||||
					{
 | 
			
		||||
						pFunc->GetParentContext()->ThrowNativeError("Client index %d is invalid", client);
 | 
			
		||||
						pFunc->GetParentContext()->BlamePluginError(pFunc, "Callback-provided client index %d is invalid", client);
 | 
			
		||||
					} else if (!pPlayer->IsInGame()) {
 | 
			
		||||
						pFunc->GetParentContext()->ThrowNativeError("Client %d is not connected", client);
 | 
			
		||||
						pFunc->GetParentContext()->BlamePluginError(pFunc, "Client %d is not connected", client);
 | 
			
		||||
					} else {
 | 
			
		||||
						continue;
 | 
			
		||||
					}
 | 
			
		||||
@ -548,9 +548,9 @@ void SoundHooks::OnEmitSound2(IRecipientFilter &filter, int iEntIndex, int iChan
 | 
			
		||||
 | 
			
		||||
					if (!pPlayer)
 | 
			
		||||
					{
 | 
			
		||||
						pFunc->GetParentContext()->ThrowNativeError("Client index %d is invalid", client);
 | 
			
		||||
						pFunc->GetParentContext()->BlamePluginError(pFunc, "Client index %d is invalid", client);
 | 
			
		||||
					} else if (!pPlayer->IsInGame()) {
 | 
			
		||||
						pFunc->GetParentContext()->ThrowNativeError("Client %d is not connected", client);
 | 
			
		||||
						pFunc->GetParentContext()->BlamePluginError(pFunc, "Client %d is not connected", client);
 | 
			
		||||
					} else {
 | 
			
		||||
						continue;
 | 
			
		||||
					}
 | 
			
		||||
 | 
			
		||||
@ -1 +1 @@
 | 
			
		||||
Subproject commit dde42ef136c59ae125169a850298b1383e53afb6
 | 
			
		||||
Subproject commit 22e7ddeeac40503d51a27e228e8de49ca49566af
 | 
			
		||||
		Loading…
	
		Reference in New Issue
	
	Block a user