AntiNoob: bunch of improvements

This commit is contained in:
Dogan 2019-08-09 22:01:47 +02:00
parent c0e0492a7b
commit 6a1a8cb451

View File

@ -4,6 +4,7 @@
#include <sdktools> #include <sdktools>
#include <zombiereloaded> #include <zombiereloaded>
#include <cstrike> #include <cstrike>
#include <multicolors>
int g_iHighRatio; int g_iHighRatio;
int g_iMediumRatio; int g_iMediumRatio;
@ -17,59 +18,159 @@ int g_iHumanScore;
int g_iZombieScore; int g_iZombieScore;
int g_iOldZombieScore; int g_iOldZombieScore;
float g_fKnockbackLowBoost;
float g_fKnockbackMediumBoost;
float g_fKnockbackHighBoost;
float g_fNapalmLowReduction;
float g_fNapalmMediumReduction;
float g_fNapalmHighReduction;
int g_iZombieStreak; int g_iZombieStreak;
bool g_bLowPopulation; bool g_bLowPopulation;
int g_iMaxPopulation; int g_iMaxPopulation;
float g_fKnockbackBoost; float g_fKnockbackPopulationBoost;
float g_fNapalmPopulationReduction;
ConVar g_cvNapalmScale; int g_iAntiNoob;
float g_fNapalmScale; char g_cAntiNoobHelp[64];
char g_cAntiNoobPopulation[32];
public Plugin myinfo = public Plugin myinfo =
{ {
name = "AntiNoob", name = "AntiNoob",
author = "Dogan", author = "Dogan",
description = "Provide help when the server is doing bad on a map", description = "Provide help when the server is doing bad on a map",
version = "2.0.0", version = "3.0.0",
url = "" url = ""
} }
public void OnPluginStart() public void OnPluginStart()
{ {
g_iHighRatio = 7;
g_iMediumRatio = 5;
g_iLowRatio = 3;
g_iHighStreak = 6;
g_iMediumStreak = 4;
g_iLowStreak = 2;
HookEvent("round_start", OnRoundStart); HookEvent("round_start", OnRoundStart);
ConVar cvar; ConVar cvar;
HookConVarChange((cvar = CreateConVar("sm_an_help", "1", "1 = AntiNoob performs help, 0 = AntiNoob is disabled", FCVAR_NONE, true, 0.0, true, 1.0)), g_cvAntiNoob);
g_iAntiNoob = cvar.IntValue;
HookConVarChange((cvar = CreateConVar("sm_an_maxplayers", "40", "max active players until the kb should be increased")), g_cvMaxPopulation); HookConVarChange((cvar = CreateConVar("sm_an_maxplayers", "40", "max active players until the kb should be increased")), g_cvMaxPopulation);
g_iMaxPopulation = cvar.IntValue; g_iMaxPopulation = cvar.IntValue;
HookConVarChange((cvar = CreateConVar("sm_an_kb", "5.0", "knockback boost during low population in procent")), g_cvKnockbackBoost); HookConVarChange((cvar = CreateConVar("sm_an_kb_population", "5.0", "knockback boost during low population in procent (stacks with the helps)")), g_cvKnockbackPopulationBoost);
g_fKnockbackBoost = cvar.FloatValue / 100.0; g_fKnockbackPopulationBoost = cvar.FloatValue / 100.0;
delete cvar; HookConVarChange((cvar = CreateConVar("sm_an_napalm_population", "2.0", "napalm damage reduction needed during low population for full burn from nades (stacks with the helps)")), g_cvNapalmPopulationReduction);
g_fNapalmPopulationReduction = cvar.FloatValue;
HookConVarChange((cvar = CreateConVar("sm_an_lowratio", "3", "human:zombie ratio to perform low help")), g_cvLowRatio);
g_iLowRatio = cvar.IntValue;
HookConVarChange((cvar = CreateConVar("sm_an_mediumratio", "5", "human:zombie ratio to perform medium help")), g_cvMediumRatio);
g_iMediumRatio = cvar.IntValue;
HookConVarChange((cvar = CreateConVar("sm_an_highratio", "7", "human:zombie ratio to perform high help")), g_cvHighRatio);
g_iHighRatio = cvar.IntValue;
HookConVarChange((cvar = CreateConVar("sm_an_lowstreak", "2", "zombie win streaks to perfom low help")), g_cvLowStreak);
g_iLowStreak = cvar.IntValue;
HookConVarChange((cvar = CreateConVar("sm_an_mediumstreak", "4", "zombie win streaks to perfom medium help")), g_cvMediumStreak);
g_iMediumStreak = cvar.IntValue;
HookConVarChange((cvar = CreateConVar("sm_an_highstreak", "6", "zombie win streaks to perfom high help")), g_cvHighStreak);
g_iHighStreak = cvar.IntValue;
HookConVarChange((cvar = CreateConVar("sm_an_kb_lowhelp", "5.0", "knockback boost in procent when low help is performed (stacks with low population boost)")), g_cvKnockbackLowBoost);
g_fKnockbackLowBoost = cvar.FloatValue / 100.0;
HookConVarChange((cvar = CreateConVar("sm_an_kb_mediumhelp", "10.0", "knockback boost in procent when medium help is performed (stacks with low population boost)")), g_cvKnockbackMediumBoost);
g_fKnockbackMediumBoost = cvar.FloatValue / 100.0;
HookConVarChange((cvar = CreateConVar("sm_an_kb_highhelp", "15.0", "knockback boost in procent when high help is performed (stacks with low population boost)")), g_cvKnockbackHighBoost);
g_fKnockbackHighBoost = cvar.FloatValue / 100.0;
HookConVarChange((cvar = CreateConVar("sm_an_napalm_lowhelp", "2.0", "napalm damage reduction needed when low help is perfomed for full burn from nades (stacks with low population reduction)")), g_cvNapalmLowReduction);
g_fNapalmLowReduction = cvar.FloatValue;
HookConVarChange((cvar = CreateConVar("sm_an_napalm_mediumhelp", "4.0", "napalm damage reduction needed when medium help is performed for full burn from nades (stacks with low population reduction)")), g_cvNapalmMediumReduction);
g_fNapalmMediumReduction = cvar.FloatValue;
HookConVarChange((cvar = CreateConVar("sm_an_napalm_highhelp", "6.0", "napalm damage reduction needed when high help is perfomed for full burn from nades (stacks with low population reduction)")), g_cvNapalmHighReduction);
g_fNapalmHighReduction = cvar.FloatValue;
CloseHandle(cvar);
g_cAntiNoobHelp = "{cyan}[AntiNoob]{white} Plugin still loading";
g_cAntiNoobPopulation = "{white}.";
RegAdminCmd("sm_antinoob", Command_AntiNoob, ADMFLAG_RCON, "returns the current helps or boosts for this round");
AutoExecConfig(true, "plugin.AntiNoob"); AutoExecConfig(true, "plugin.AntiNoob");
} }
public void g_cvAntiNoob(ConVar convar, const char[] oldValue, const char[] newValue)
{
g_iAntiNoob = convar.IntValue;
}
public void g_cvMaxPopulation(ConVar convar, const char[] oldValue, const char[] newValue) public void g_cvMaxPopulation(ConVar convar, const char[] oldValue, const char[] newValue)
{ {
g_iMaxPopulation = convar.IntValue; g_iMaxPopulation = convar.IntValue;
} }
public void g_cvKnockbackBoost(ConVar convar, const char[] oldValue, const char[] newValue) public void g_cvKnockbackPopulationBoost(ConVar convar, const char[] oldValue, const char[] newValue)
{ {
g_fKnockbackBoost = convar.FloatValue / 100.0; g_fKnockbackPopulationBoost = convar.FloatValue / 100.0;
} }
public void OnAllPluginsLoaded() public void g_cvNapalmPopulationReduction(ConVar convar, const char[] oldValue, const char[] newValue)
{ {
g_cvNapalmScale = FindConVar("zr_napalm_time_scale"); g_fNapalmPopulationReduction = convar.FloatValue;
}
public void g_cvLowRatio(ConVar convar, const char[] oldValue, const char[] newValue)
{
g_iLowRatio = convar.IntValue;
}
public void g_cvMediumRatio(ConVar convar, const char[] oldValue, const char[] newValue)
{
g_iMediumRatio = convar.IntValue;
}
public void g_cvHighRatio(ConVar convar, const char[] oldValue, const char[] newValue)
{
g_iHighRatio = convar.IntValue;
}
public void g_cvLowStreak(ConVar convar, const char[] oldValue, const char[] newValue)
{
g_iLowStreak = convar.IntValue;
}
public void g_cvMediumStreak(ConVar convar, const char[] oldValue, const char[] newValue)
{
g_iMediumStreak = convar.IntValue;
}
public void g_cvHighStreak(ConVar convar, const char[] oldValue, const char[] newValue)
{
g_iHighStreak = convar.IntValue;
}
public void g_cvKnockbackLowBoost(ConVar convar, const char[] oldValue, const char[] newValue)
{
g_fKnockbackLowBoost = convar.FloatValue / 100.0;
}
public void g_cvKnockbackMediumBoost(ConVar convar, const char[] oldValue, const char[] newValue)
{
g_fKnockbackMediumBoost = convar.FloatValue / 100.0;
}
public void g_cvKnockbackHighBoost(ConVar convar, const char[] oldValue, const char[] newValue)
{
g_fKnockbackHighBoost = convar.FloatValue / 100.0;
}
public void g_cvNapalmLowReduction(ConVar convar, const char[] oldValue, const char[] newValue)
{
g_fNapalmLowReduction = convar.FloatValue;
}
public void g_cvNapalmMediumReduction(ConVar convar, const char[] oldValue, const char[] newValue)
{
g_fNapalmMediumReduction = convar.FloatValue;
}
public void g_cvNapalmHighReduction(ConVar convar, const char[] oldValue, const char[] newValue)
{
g_fNapalmHighReduction = convar.FloatValue;
} }
public void OnMapStart() public void OnMapStart()
@ -80,9 +181,11 @@ public void OnMapStart()
g_iZombieStreak = 0; g_iZombieStreak = 0;
} }
public void OnConfigsExecuted() public Action Command_AntiNoob(int client, int args)
{ {
g_fNapalmScale = g_cvNapalmScale.FloatValue; CPrintToChat(client, "%s%s", g_cAntiNoobHelp, g_cAntiNoobPopulation);
return Plugin_Handled;
} }
public void OnRoundStart(Event hEvent, const char[] sEvent, bool bDontBroadcast) public void OnRoundStart(Event hEvent, const char[] sEvent, bool bDontBroadcast)
@ -115,44 +218,70 @@ public void OnRoundStart(Event hEvent, const char[] sEvent, bool bDontBroadcast)
} }
} }
if(g_iAntiNoob == 0)
{
g_cAntiNoobHelp = "{cyan}[AntiNoob]{white} Currently disabled";
g_cAntiNoobPopulation = "{white}.";
PerformReset();
for(int i = 1; i <= MaxClients; i++)
{
if(IsRootAdmin(i))
CPrintToChat(i,"%s%s", g_cAntiNoobHelp, g_cAntiNoobPopulation);
}
return;
}
if(ActivePlayers <= g_iMaxPopulation) if(ActivePlayers <= g_iMaxPopulation)
{ {
g_bLowPopulation = true; g_bLowPopulation = true;
g_cAntiNoobPopulation = "{white} + Low Population Boost.";
} }
else else
{ {
g_bLowPopulation = false; g_bLowPopulation = false;
g_cAntiNoobPopulation = "{white}.";
} }
if(g_iZombieScore / g_iHumanScore >= g_iHighRatio || g_iZombieStreak >= g_iHighStreak) if(g_iZombieScore / g_iHumanScore >= g_iHighRatio || g_iZombieStreak >= g_iHighStreak)
{ {
g_cAntiNoobHelp = "{cyan}[AntiNoob]{white} Currently perfoming High Help";
PerformHighHelp(); PerformHighHelp();
} }
else if(g_iZombieScore / g_iHumanScore >= g_iMediumRatio || g_iZombieStreak >= g_iMediumStreak) else if(g_iZombieScore / g_iHumanScore >= g_iMediumRatio || g_iZombieStreak >= g_iMediumStreak)
{ {
g_cAntiNoobHelp = "{cyan}[AntiNoob]{white} Currently perfoming Medium Help";
PerformMediumHelp(); PerformMediumHelp();
} }
else if(g_iZombieScore / g_iHumanScore >= g_iLowRatio || g_iZombieStreak >= g_iLowStreak) else if(g_iZombieScore / g_iHumanScore >= g_iLowRatio || g_iZombieStreak >= g_iLowStreak)
{ {
g_cAntiNoobHelp = "{cyan}[AntiNoob]{white} Currently perfoming Low Help";
PerformLowHelp(); PerformLowHelp();
} }
else else
{ {
g_cAntiNoobHelp = "{cyan}[AntiNoob]{white} Currently perfoming No Help";
PerformReset(); PerformReset();
} }
for(int i = 1; i <= MaxClients; i++)
{
if(IsRootAdmin(i))
CPrintToChat(i,"%s%s", g_cAntiNoobHelp, g_cAntiNoobPopulation);
}
} }
public void PerformHighHelp() public void PerformHighHelp()
{ {
if(g_bLowPopulation) if(g_bLowPopulation)
{ {
ServerCommand("zr_class_set_multiplier zombies knockback %f", 1.15 + g_fKnockbackBoost); ServerCommand("zr_class_set_multiplier zombies knockback %f", 1.0 + g_fKnockbackHighBoost + g_fKnockbackPopulationBoost);
ServerCommand("zr_napalm_time_scale %f", g_fNapalmScale - 8.0); ServerCommand("zr_napalm_time_scale %f", 50.0 - g_fNapalmHighReduction - g_fNapalmPopulationReduction);
} }
else else
{ {
ServerCommand("zr_class_set_multiplier zombies knockback 1.15"); ServerCommand("zr_class_set_multiplier zombies knockback %f", 1.0 + g_fKnockbackHighBoost);
ServerCommand("zr_napalm_time_scale %f", g_fNapalmScale - 6.0); ServerCommand("zr_napalm_time_scale %f", 50.0 - g_fNapalmHighReduction);
} }
} }
@ -160,13 +289,13 @@ public void PerformMediumHelp()
{ {
if(g_bLowPopulation) if(g_bLowPopulation)
{ {
ServerCommand("zr_class_set_multiplier zombies knockback %f", 1.1 + g_fKnockbackBoost); ServerCommand("zr_class_set_multiplier zombies knockback %f", 1.0 + g_fKnockbackMediumBoost + g_fKnockbackPopulationBoost);
ServerCommand("zr_napalm_time_scale %f", g_fNapalmScale - 6.0); ServerCommand("zr_napalm_time_scale %f", 50.0 - g_fNapalmMediumReduction - g_fNapalmPopulationReduction);
} }
else else
{ {
ServerCommand("zr_class_set_multiplier zombies knockback 1.1"); ServerCommand("zr_class_set_multiplier zombies knockback %f", 1.0 + g_fKnockbackMediumBoost);
ServerCommand("zr_napalm_time_scale %f", g_fNapalmScale - 4.0); ServerCommand("zr_napalm_time_scale %f", 50.0 - g_fNapalmMediumReduction);
} }
} }
@ -174,26 +303,34 @@ public void PerformLowHelp()
{ {
if(g_bLowPopulation) if(g_bLowPopulation)
{ {
ServerCommand("zr_class_set_multiplier zombies knockback %f", 1.05 + g_fKnockbackBoost); ServerCommand("zr_class_set_multiplier zombies knockback %f", 1.0 + g_fKnockbackLowBoost + g_fKnockbackPopulationBoost);
ServerCommand("zr_napalm_time_scale %f", g_fNapalmScale - 4.0); ServerCommand("zr_napalm_time_scale %f", 50.0 - g_fNapalmLowReduction - g_fNapalmPopulationReduction);
} }
else else
{ {
ServerCommand("zr_class_set_multiplier zombies knockback 1.05"); ServerCommand("zr_class_set_multiplier zombies knockback %f", 1.0 + g_fKnockbackLowBoost);
ServerCommand("zr_napalm_time_scale %f", g_fNapalmScale - 2.0); ServerCommand("zr_napalm_time_scale %f", 50.0 - g_fNapalmLowReduction);
} }
} }
public void PerformReset() public void PerformReset()
{ {
if(g_bLowPopulation) if(g_bLowPopulation && g_iAntiNoob != 0)
{ {
ServerCommand("zr_class_set_multiplier zombies knockback %f", 1.0 + g_fKnockbackBoost); ServerCommand("zr_class_set_multiplier zombies knockback %f", 1.0 + g_fKnockbackPopulationBoost);
ServerCommand("zr_napalm_time_scale %f", g_fNapalmScale - 2.0); ServerCommand("zr_napalm_time_scale %f", 50.0 - g_fNapalmPopulationReduction);
} }
else else
{ {
ServerCommand("zr_class_set_multiplier zombies knockback 1.0"); ServerCommand("zr_class_set_multiplier zombies knockback 1.0");
ServerCommand("zr_napalm_time_scale %f", g_fNapalmScale); ServerCommand("zr_napalm_time_scale 50.0");
} }
} }
static stock bool IsRootAdmin(int client)
{
if (client > 0 && client <= MaxClients && IsClientInGame(client) && CheckCommandAccess(client, "", ADMFLAG_RCON))
return true;
else
return false;
}