Small improvements to SprayManager
Fixed (some) gross code. Enabled long range spraying on entities that allow it. Added simple non-aids anti jump spam plugin for zr.
This commit is contained in:
parent
4186448f5c
commit
eeb3ecb028
115
AntiJumpSpam/scripting/AntiJumpSpam.sp
Normal file
115
AntiJumpSpam/scripting/AntiJumpSpam.sp
Normal file
@ -0,0 +1,115 @@
|
||||
#pragma semicolon 1
|
||||
|
||||
#include <sourcemod>
|
||||
#include <cstrike>
|
||||
|
||||
#undef REQUIRE_PLUGIN
|
||||
#tryinclude <zombiereloaded>
|
||||
#define REQUIRE_PLUGIN
|
||||
|
||||
#pragma newdecls required
|
||||
|
||||
bool g_bZRLoaded;
|
||||
|
||||
ConVar g_cvarJumpsUntilBlock = null;
|
||||
ConVar g_cvarIntervalBetweenJumps = null;
|
||||
ConVar g_cvarCooldownInterval = null;
|
||||
|
||||
float g_fLastJumpTime[MAXPLAYERS + 1];
|
||||
|
||||
int g_iFastJumpCount[MAXPLAYERS + 1];
|
||||
|
||||
public Plugin myinfo =
|
||||
{
|
||||
name = "Anti Jump Spam",
|
||||
author = "Obus",
|
||||
description = "Prevents clients from spamming jump to avoid knockback in crawl spaces.",
|
||||
version = "1.0.0",
|
||||
url = ""
|
||||
}
|
||||
|
||||
public void OnPluginStart()
|
||||
{
|
||||
g_cvarJumpsUntilBlock = CreateConVar("sm_ajs_jumpsuntilblock", "5", "Successive jumps until anti jump-spam kicks in.");
|
||||
g_cvarIntervalBetweenJumps = CreateConVar("sm_ajs_jumpinterval", "0.2", "If a client jumps faster than this their jumps will be blocked after the amount of jumps specified in \"sm_ajs_jumpsuntilblock\" is reached.");
|
||||
g_cvarCooldownInterval = CreateConVar("sm_ajs_cooldowninterval", "0.0", "Changes the amount of time required for a jump to not be considered spam anymore. (Setting this to 0 makes the interval sm_ajs_jumpinterval * 2)");
|
||||
|
||||
AutoExecConfig(true, "plugin.antijumpspam");
|
||||
}
|
||||
|
||||
public void OnAllPluginsLoaded()
|
||||
{
|
||||
g_bZRLoaded = LibraryExists("zombiereloaded");
|
||||
}
|
||||
|
||||
public void OnLibraryAdded(const char[] sName)
|
||||
{
|
||||
if (strcmp(sName, "zombiereloaded", false) == 0)
|
||||
g_bZRLoaded = true;
|
||||
}
|
||||
|
||||
public void OnLibraryRemoved(const char[] sName)
|
||||
{
|
||||
if (strcmp(sName, "zombiereloaded", false) == 0)
|
||||
g_bZRLoaded = false;
|
||||
}
|
||||
|
||||
public void OnClientDisconnect(int client)
|
||||
{
|
||||
g_fLastJumpTime[client] = 0.0;
|
||||
g_iFastJumpCount[client] = 0;
|
||||
}
|
||||
|
||||
public Action OnPlayerRunCmd(int client, int &buttons)
|
||||
{
|
||||
static bool bHoldingJump[MAXPLAYERS + 1];
|
||||
|
||||
#if defined _zr_included
|
||||
if (!IsPlayerAlive(client) || (g_bZRLoaded && !ZR_IsClientZombie(client)) || (!g_bZRLoaded && GetClientTeam(client) != CS_TEAM_T))
|
||||
return Plugin_Continue;
|
||||
#else
|
||||
if (!IsPlayerAlive(client) || GetClientTeam(client) != CS_TEAM_T)
|
||||
return Plugin_Continue;
|
||||
#endif
|
||||
|
||||
if (buttons & IN_JUMP && GetEntityFlags(client) & FL_ONGROUND)
|
||||
{
|
||||
float fCurTime = GetEngineTime();
|
||||
float fTimeSinceLastJump = fCurTime - g_fLastJumpTime[client];
|
||||
|
||||
if (!bHoldingJump[client])
|
||||
{
|
||||
if (fTimeSinceLastJump > (g_cvarCooldownInterval.FloatValue > 0.0 ? g_cvarCooldownInterval.FloatValue : g_cvarIntervalBetweenJumps.FloatValue * 2.0) && g_iFastJumpCount[client] > 0)
|
||||
{
|
||||
int iJumpsToDeduct = RoundToFloor(fTimeSinceLastJump / (g_cvarCooldownInterval.FloatValue > 0.0 ? g_cvarCooldownInterval.FloatValue : g_cvarIntervalBetweenJumps.FloatValue * 2));
|
||||
|
||||
iJumpsToDeduct = iJumpsToDeduct <= g_iFastJumpCount[client] ? iJumpsToDeduct : g_iFastJumpCount[client];
|
||||
|
||||
g_iFastJumpCount[client] -= iJumpsToDeduct;
|
||||
}
|
||||
}
|
||||
|
||||
if (g_iFastJumpCount[client] >= g_cvarJumpsUntilBlock.IntValue)
|
||||
{
|
||||
buttons &= ~IN_JUMP;
|
||||
|
||||
return Plugin_Continue;
|
||||
}
|
||||
|
||||
if (!bHoldingJump[client])
|
||||
{
|
||||
bHoldingJump[client] = true;
|
||||
|
||||
if (fTimeSinceLastJump < g_cvarIntervalBetweenJumps.FloatValue)
|
||||
g_iFastJumpCount[client]++;
|
||||
|
||||
g_fLastJumpTime[client] = fCurTime;
|
||||
}
|
||||
}
|
||||
else if (bHoldingJump[client])
|
||||
{
|
||||
bHoldingJump[client] = false;
|
||||
}
|
||||
|
||||
return Plugin_Continue;
|
||||
}
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue
Block a user