sm-plugins/ReplicateGravity/scripting/ReplicateGravity.sp
2024-06-06 14:49:09 +02:00

78 lines
2.2 KiB
SourcePawn

#pragma semicolon 1
#pragma newdecls required
#include <sourcemod>
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);
if (flClientGravity == 0.0)
flClientGravity = 1.0;
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;
}
}
}
//probably not needed at all.
public void OnClientDisconnect(int client)
{
float flServerGravity = g_hCVar_Gravity.FloatValue;
g_flClientGravityReplicate[client] = flServerGravity;
}
public void OnClientPostAdminCheck(int client)
{
float flServerGravity = g_hCVar_Gravity.FloatValue;
g_flClientGravityReplicate[client] = flServerGravity;
}