From abc69e4807f412e10c5323e8b870676e97028dea Mon Sep 17 00:00:00 2001 From: zaCade Date: Thu, 23 May 2024 12:47:02 +0200 Subject: [PATCH] [ReplicateGravity] 'New' stripped version of FixPlayerGravity. --- .../scripting/ReplicateGravity.sp | 61 +++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 ReplicateGravity/scripting/ReplicateGravity.sp diff --git a/ReplicateGravity/scripting/ReplicateGravity.sp b/ReplicateGravity/scripting/ReplicateGravity.sp new file mode 100644 index 0000000..32c2723 --- /dev/null +++ b/ReplicateGravity/scripting/ReplicateGravity.sp @@ -0,0 +1,61 @@ +#pragma semicolon 1 +#pragma newdecls required + +#include + +ConVar g_hCVar_Gravity; + +float g_flClientGravityReplicate[MAXPLAYERS+1]; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Plugin myinfo = +{ + name = "ReplicateGravity", + author = "xen, zaCade", + description = "Allow client prediction for gravity", + version = "1.0.0" +}; + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnPluginStart() +{ + if ((g_hCVar_Gravity = FindConVar("sv_gravity")) == null) + { + SetFailState("Unable to find ConVar \"sv_gravity\"!"); + return; + } +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnGameFrame() +{ + float flServerGravity = g_hCVar_Gravity.FloatValue; + + for (int client = 1; client < MaxClients; client++) + { + if (!IsClientInGame(client) || !IsPlayerAlive(client) || IsFakeClient(client)) + { + g_flClientGravityReplicate[client] = flServerGravity; + continue; + } + + float flClientGravity = GetEntityGravity(client); + float flClientGravityReplicate = flClientGravity * flServerGravity; + + if (flClientGravityReplicate != g_flClientGravityReplicate[client]) + { + char szGravity[8]; + FloatToString(flClientGravityReplicate, szGravity, sizeof(szGravity)); + + g_hCVar_Gravity.ReplicateToClient(client, szGravity); + + g_flClientGravityReplicate[client] = flClientGravityReplicate; + } + } +} \ No newline at end of file