78 lines
		
	
	
		
			2.2 KiB
		
	
	
	
		
			SourcePawn
		
	
	
	
	
	
			
		
		
	
	
			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;
 | 
						|
}
 |