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)
|
|
||||||
g_Logger.LogError("[SM] Blaming plugin: %s", blame);
|
|
||||||
g_Logger.LogError("[SM] Call stack trace:");
|
|
||||||
|
|
||||||
for (int index = 0; !iter.Done(); iter.Next(), index++) {
|
if (blame)
|
||||||
const char *fn = iter.FunctionName();
|
{
|
||||||
if (!fn)
|
g_Logger.LogError("[SM] Blaming: %s()", blame);
|
||||||
fn = "<unknown function>";
|
}
|
||||||
|
|
||||||
if (iter.IsNativeFrame()) {
|
if (!iter.Done())
|
||||||
g_Logger.LogError("[SM] [%d] %s", index, fn);
|
{
|
||||||
continue;
|
g_Logger.LogError("[SM] Call stack trace:");
|
||||||
}
|
|
||||||
if (iter.IsScriptedFrame()) {
|
for (int index = 0; !iter.Done(); iter.Next(), index++)
|
||||||
const char *file = iter.FilePath();
|
{
|
||||||
if (!file)
|
const char *fn = iter.FunctionName();
|
||||||
file = "<unknown>";
|
if (!fn)
|
||||||
g_Logger.LogError("[SM] [%d] Line %d, %s::%s()",
|
{
|
||||||
index,
|
fn = "<unknown function>";
|
||||||
iter.LineNumber(),
|
}
|
||||||
file,
|
if (iter.IsNativeFrame())
|
||||||
fn);
|
{
|
||||||
|
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);
|
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