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)
 | 
					void DebugReport::ReportError(const IErrorReport &report, IFrameIterator &iter)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	// Find the nearest plugin to blame.
 | 
					 | 
				
			||||||
	const char *blame = nullptr;
 | 
						const char *blame = nullptr;
 | 
				
			||||||
	for (; !iter.Done(); iter.Next()) {
 | 
						if (report.Blame()) 
 | 
				
			||||||
		if (iter.IsScriptedFrame()) {
 | 
						{
 | 
				
			||||||
			IPlugin *plugin = pluginsys->FindPluginByContext(iter.Context()->GetContext());
 | 
							blame = report.Blame()->DebugName();
 | 
				
			||||||
			if (plugin)
 | 
						} else {
 | 
				
			||||||
				blame = plugin->GetFilename();
 | 
						    // Find the nearest plugin to blame.
 | 
				
			||||||
			else
 | 
							for (; !iter.Done(); iter.Next()) 
 | 
				
			||||||
				blame = iter.Context()->GetRuntime()->GetFilename();
 | 
							{
 | 
				
			||||||
			break;
 | 
								if (iter.IsScriptedFrame()) 
 | 
				
			||||||
 | 
								{
 | 
				
			||||||
 | 
									IPlugin *plugin = pluginsys->FindPluginByContext(iter.Context()->GetContext());
 | 
				
			||||||
 | 
									if (plugin)
 | 
				
			||||||
 | 
									{
 | 
				
			||||||
 | 
										blame = plugin->GetFilename();
 | 
				
			||||||
 | 
									} else {
 | 
				
			||||||
 | 
										blame = iter.Context()->GetRuntime()->GetFilename();
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									break;
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	iter.Reset();
 | 
						iter.Reset();
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	g_Logger.LogError("[SM] Exception reported: %s", report.Message());
 | 
						g_Logger.LogError("[SM] Exception reported: %s", report.Message());
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (blame) 
 | 
						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++) {
 | 
						if (!iter.Done()) 
 | 
				
			||||||
		const char *fn = iter.FunctionName();
 | 
						{
 | 
				
			||||||
		if (!fn)
 | 
							g_Logger.LogError("[SM] Call stack trace:");
 | 
				
			||||||
			fn = "<unknown function>";
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		if (iter.IsNativeFrame()) {
 | 
							for (int index = 0; !iter.Done(); iter.Next(), index++) 
 | 
				
			||||||
			g_Logger.LogError("[SM]   [%d] %s", index, fn);
 | 
							{
 | 
				
			||||||
			continue;
 | 
								const char *fn = iter.FunctionName();
 | 
				
			||||||
		}
 | 
								if (!fn)
 | 
				
			||||||
		if (iter.IsScriptedFrame()) {
 | 
								{
 | 
				
			||||||
			const char *file = iter.FilePath();
 | 
									fn = "<unknown function>";
 | 
				
			||||||
			if (!file)
 | 
								}
 | 
				
			||||||
				file = "<unknown>";
 | 
								if (iter.IsNativeFrame()) 
 | 
				
			||||||
			g_Logger.LogError("[SM]   [%d] Line %d, %s::%s()",
 | 
								{
 | 
				
			||||||
				index,
 | 
									g_Logger.LogError("[SM]   [%d] %s", index, fn);
 | 
				
			||||||
				iter.LineNumber(),
 | 
									continue;
 | 
				
			||||||
				file,
 | 
								}
 | 
				
			||||||
				fn);
 | 
								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);
 | 
										CBaseEntity *pEntAttacker = gamehelpers->ReferenceToEntity(attacker);
 | 
				
			||||||
					if (!pEntAttacker)
 | 
										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);
 | 
											RETURN_META_VALUE(MRES_IGNORED, 0);
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
					CBaseEntity *pEntInflictor = gamehelpers->ReferenceToEntity(inflictor);
 | 
										CBaseEntity *pEntInflictor = gamehelpers->ReferenceToEntity(inflictor);
 | 
				
			||||||
					if (!pEntInflictor)
 | 
										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);
 | 
											RETURN_META_VALUE(MRES_IGNORED, 0);
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -1442,13 +1442,13 @@ void SDKHooks::Hook_TraceAttack(CTakeDamageInfoHack &info, const Vector &vecDir,
 | 
				
			|||||||
					CBaseEntity *pEntAttacker = gamehelpers->ReferenceToEntity(attacker);
 | 
										CBaseEntity *pEntAttacker = gamehelpers->ReferenceToEntity(attacker);
 | 
				
			||||||
					if(!pEntAttacker)
 | 
										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);
 | 
											RETURN_META(MRES_IGNORED);
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
					CBaseEntity *pEntInflictor = gamehelpers->ReferenceToEntity(inflictor);
 | 
										CBaseEntity *pEntInflictor = gamehelpers->ReferenceToEntity(inflictor);
 | 
				
			||||||
					if(!pEntInflictor)
 | 
										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);
 | 
											RETURN_META(MRES_IGNORED);
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
					
 | 
										
 | 
				
			||||||
 | 
				
			|||||||
@ -410,9 +410,9 @@ void SoundHooks::OnEmitSound(IRecipientFilter &filter, int iEntIndex, int iChann
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
					if (!pPlayer)
 | 
										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()) {
 | 
										} else if (!pPlayer->IsInGame()) {
 | 
				
			||||||
						pFunc->GetParentContext()->ThrowNativeError("Client %d is not connected", client);
 | 
											pFunc->GetParentContext()->BlamePluginError(pFunc, "Client %d is not connected", client);
 | 
				
			||||||
					} else {
 | 
										} else {
 | 
				
			||||||
						continue;
 | 
											continue;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
@ -548,9 +548,9 @@ void SoundHooks::OnEmitSound2(IRecipientFilter &filter, int iEntIndex, int iChan
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
					if (!pPlayer)
 | 
										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()) {
 | 
										} else if (!pPlayer->IsInGame()) {
 | 
				
			||||||
						pFunc->GetParentContext()->ThrowNativeError("Client %d is not connected", client);
 | 
											pFunc->GetParentContext()->BlamePluginError(pFunc, "Client %d is not connected", client);
 | 
				
			||||||
					} else {
 | 
										} else {
 | 
				
			||||||
						continue;
 | 
											continue;
 | 
				
			||||||
					}
 | 
										}
 | 
				
			||||||
 | 
				
			|||||||
@ -1 +1 @@
 | 
				
			|||||||
Subproject commit dde42ef136c59ae125169a850298b1383e53afb6
 | 
					Subproject commit 22e7ddeeac40503d51a27e228e8de49ca49566af
 | 
				
			||||||
		Loading…
	
		Reference in New Issue
	
	Block a user