From de8fdf911b5e5b38733f43ffcb115289aa977b28 Mon Sep 17 00:00:00 2001 From: hermansimensen Date: Sat, 4 Sep 2021 17:40:42 +0200 Subject: [PATCH] Fix unparsable data being sent to sourcemod. This should fix the crashes that occoured in #10 and #8 --- scripting/eventqueuefix.sp | 28 +++++++++++++++++++++++++++- 1 file changed, 27 insertions(+), 1 deletion(-) diff --git a/scripting/eventqueuefix.sp b/scripting/eventqueuefix.sp index 8a7de72..756ba82 100644 --- a/scripting/eventqueuefix.sp +++ b/scripting/eventqueuefix.sp @@ -228,7 +228,8 @@ public MRESReturn DHook_AddEventThree(Handle hParams) DHookGetParamString(hParams, 1, event.target, 64); DHookGetParamString(hParams, 2, event.targetInput, 64); - DHookGetParamObjectPtrString(hParams, 3, 0, ObjectValueType_String, event.variantValue, sizeof(event.variantValue)); + ResolveVariantValue(hParams, event); + int ticks = RoundToCeil((view_as(DHookGetParam(hParams, 4)) - FLT_EPSILON) / GetTickInterval()); event.delay = float(ticks); event.caller = EntityToBCompatRef(view_as
(DHookGetParam(hParams, 6))); @@ -242,6 +243,31 @@ public MRESReturn DHook_AddEventThree(Handle hParams) return MRES_Supercede; } +public void ResolveVariantValue(Handle ¶ms, event_t event) +{ + int type = DHookGetParamObjectPtrVar(params, 3, 16, ObjectValueType_Int); + + switch(type) + { + case 1: + { + float fVar = DHookGetParamObjectPtrVar(params, 3, 0, ObjectValueType_Float); + FloatToString(fVar, event.variantValue, sizeof(event.variantValue)); + } + + case 5: + { + int iVar = DHookGetParamObjectPtrVar(params, 3, 0, ObjectValueType_Int); + IntToString(iVar, event.variantValue, sizeof(event.variantValue)); + } + + default: + { + DHookGetParamObjectPtrString(params, 3, 0, ObjectValueType_String, event.variantValue, sizeof(event.variantValue)); + } + } +} + public Action OnTrigger(const char[] output, int caller, int activator, float delay) { if(activator <= MAXPLAYERS && activator > 0)