diff --git a/AntiNoob/scripting/AntiNoob.sp b/AntiNoob/scripting/AntiNoob.sp index fe9993ea..640f6f32 100644 --- a/AntiNoob/scripting/AntiNoob.sp +++ b/AntiNoob/scripting/AntiNoob.sp @@ -17,6 +17,7 @@ int g_iLowStreak; int g_iHumanScore; int g_iZombieScore; int g_iOldZombieScore; +int g_iZombieStreak; float g_fKnockbackLowBoost; float g_fKnockbackMediumBoost; @@ -26,44 +27,51 @@ float g_fNapalmLowReduction; float g_fNapalmMediumReduction; float g_fNapalmHighReduction; -int g_iZombieStreak; - bool g_bLowPopulation; int g_iMaxPopulation; float g_fKnockbackPopulationBoost; float g_fNapalmPopulationReduction; +bool g_bMidRound; +float g_fKnockbackMidRoundBoost; +float g_fNapalmMidRoundReduction; +float g_fMidRoundRatio; + bool g_bAntiNoob; -char g_cAntiNoobHelp[64]; -char g_cAntiNoobPopulation[32]; +float g_fCurrentKnockbackBoost; +float g_fCurrentNapalmDamage; public Plugin myinfo = { name = "AntiNoob", author = "Dogan", description = "Provide help when the server is doing bad on a map", - version = "3.0.0", + version = "4.0.0", url = "" } public void OnPluginStart() { HookEvent("round_start", OnRoundStart); + HookEvent("player_team", OnPlayerTeam); + + g_fCurrentKnockbackBoost = 1.0; + g_fCurrentNapalmDamage = 50.0; 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_bAntiNoob = cvar.BoolValue; HookConVarChange((cvar = CreateConVar("sm_an_maxplayers", "40", "max active players until the kb should be increased")), g_cvMaxPopulation); g_iMaxPopulation = cvar.IntValue; - HookConVarChange((cvar = CreateConVar("sm_an_kb_population", "5.0", "knockback boost during low population in procent (stacks with the helps)")), g_cvKnockbackPopulationBoost); + HookConVarChange((cvar = CreateConVar("sm_an_kb_population", "5.0", "knockback boost during low population in procent (stacking)")), g_cvKnockbackPopulationBoost); g_fKnockbackPopulationBoost = cvar.FloatValue / 100.0; - 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); + HookConVarChange((cvar = CreateConVar("sm_an_napalm_population", "2.0", "napalm damage reduction needed during low population for full burn from nades (stacking)")), g_cvNapalmPopulationReduction); g_fNapalmPopulationReduction = cvar.FloatValue; - HookConVarChange((cvar = CreateConVar("sm_an_lowratio", "3", "human:zombie ratio to perform low help")), g_cvLowRatio); + HookConVarChange((cvar = CreateConVar("sm_an_lowratio", "3", "human:zombie score ratio to perform low help, x = zombie")), g_cvLowRatio); g_iLowRatio = cvar.IntValue; - HookConVarChange((cvar = CreateConVar("sm_an_mediumratio", "5", "human:zombie ratio to perform medium help")), g_cvMediumRatio); + HookConVarChange((cvar = CreateConVar("sm_an_mediumratio", "5", "human:zombie score ratio to perform medium help, x = zombie")), g_cvMediumRatio); g_iMediumRatio = cvar.IntValue; - HookConVarChange((cvar = CreateConVar("sm_an_highratio", "7", "human:zombie ratio to perform high help")), g_cvHighRatio); + HookConVarChange((cvar = CreateConVar("sm_an_highratio", "7", "human:zombie score ratio to perform high help, x = zombie")), 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; @@ -71,28 +79,37 @@ public void OnPluginStart() 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); + HookConVarChange((cvar = CreateConVar("sm_an_kb_lowhelp", "5.0", "knockback boost in procent when low help is performed (stacking)")), 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); + HookConVarChange((cvar = CreateConVar("sm_an_kb_mediumhelp", "10.0", "knockback boost in procent when medium help is performed (stacking)")), 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); + HookConVarChange((cvar = CreateConVar("sm_an_kb_highhelp", "15.0", "knockback boost in procent when high help is performed (stacking)")), 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); + HookConVarChange((cvar = CreateConVar("sm_an_napalm_lowhelp", "2.0", "napalm damage reduction needed when low help is perfomed for full burn from nades (stacking)")), 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); + HookConVarChange((cvar = CreateConVar("sm_an_napalm_mediumhelp", "4.0", "napalm damage reduction needed when medium help is performed for full burn from nades (stacking)")), 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); + HookConVarChange((cvar = CreateConVar("sm_an_napalm_highhelp", "6.0", "napalm damage reduction needed when high help is perfomed for full burn from nades (stacking)")), g_cvNapalmHighReduction); g_fNapalmHighReduction = cvar.FloatValue; + HookConVarChange((cvar = CreateConVar("sm_an_napalm_midround", "2.0", "napalm damage reduction needed when mid round help is performed for full burn from nades (stacking)")), g_cvNapalmMidRoundReduction); + g_fNapalmMidRoundReduction = cvar.FloatValue; + HookConVarChange((cvar = CreateConVar("sm_an_kb_midround", "5.0", "knockback boost in procent when mid round help is performed (stacking)")), g_cvKnockbackMidRoundBoost); + g_fKnockbackMidRoundBoost = cvar.FloatValue / 100.0; + HookConVarChange((cvar = CreateConVar("sm_an_midroundratio", "1.0", "human:zombie amount ratio to perform mid round help, x = zombie")), g_cvMidRoundRatio); + g_fMidRoundRatio = cvar.FloatValue; delete cvar; - g_cAntiNoobHelp = "{cyan}[AntiNoob]{white} Plugin still loading"; - g_cAntiNoobPopulation = "{white}."; - RegAdminCmd("sm_antinoob", Command_AntiNoob, ADMFLAG_GENERIC, "returns the current helps or boosts for this round"); AutoExecConfig(true, "plugin.AntiNoob"); } +public void OnPluginEnd() +{ + ServerCommand("zr_class_set_multiplier zombies knockback 1.0"); + ServerCommand("zr_napalm_time_scale 50.0"); +} + public void g_cvAntiNoob(ConVar convar, const char[] oldValue, const char[] newValue) { g_bAntiNoob = convar.BoolValue; @@ -173,6 +190,21 @@ public void g_cvNapalmHighReduction(ConVar convar, const char[] oldValue, const g_fNapalmHighReduction = convar.FloatValue; } +public void g_cvNapalmMidRoundReduction(ConVar convar, const char[] oldValue, const char[] newValue) +{ + g_fNapalmMidRoundReduction = convar.FloatValue; +} + +public void g_cvKnockbackMidRoundBoost(ConVar convar, const char[] oldValue, const char[] newValue) +{ + g_fKnockbackMidRoundBoost = convar.FloatValue / 100.0; +} + +public void g_cvMidRoundRatio(ConVar convar, const char[] oldValue, const char[] newValue) +{ + g_fMidRoundRatio = convar.FloatValue; +} + public void OnMapStart() { g_iHumanScore = 1; @@ -183,16 +215,85 @@ public void OnMapStart() public Action Command_AntiNoob(int client, int args) { - CPrintToChat(client, "%s%s", g_cAntiNoobHelp, g_cAntiNoobPopulation); + char cAdminNotification[128] = "{cyan}[AntiNoob]{white} Currently disabled."; + + if(!g_bAntiNoob) + { + CPrintToChat(client, "%s", cAdminNotification); + return Plugin_Handled; + } + + Format(cAdminNotification, sizeof(cAdminNotification), "{cyan}[AntiNoob]{white} Currently boosting knockback by {red}%d%%{white}.", RoundToNearest((g_fCurrentKnockbackBoost - 1.0) * 100.0)); + + CPrintToChat(client, "%s", cAdminNotification); return Plugin_Handled; } +public void OnPlayerTeam(Event event, const char[] name, bool dontBroadcast) +{ + RequestFrame(RequestFrame_Callback); +} + +public void OnClientDisconnect(int client) +{ + RequestFrame(RequestFrame_Callback); +} + +public void RequestFrame_Callback(int iPacked) +{ + CheckHumanZombieCount(); +} + +public void CheckHumanZombieCount() +{ + if(g_bMidRound) + return; + + int iHumanCount; + int iZombieCount; + + for(int i = 1; i <= MaxClients; i++) + { + if(!IsClientInGame(i) || IsFakeClient(i) || !IsPlayerAlive(i)) + continue; + + if(GetClientTeam(i) == CS_TEAM_CT) + iHumanCount++; + + if(GetClientTeam(i) == CS_TEAM_T) + iZombieCount++; + } + + if(iHumanCount == 0 || iZombieCount == 0) + return; + + if(float(iZombieCount) / float(iHumanCount) >= g_fMidRoundRatio) + { + g_bMidRound = true; + g_fCurrentKnockbackBoost = g_fCurrentKnockbackBoost + g_fKnockbackMidRoundBoost; + g_fCurrentNapalmDamage = g_fCurrentNapalmDamage - g_fNapalmMidRoundReduction; + ServerCommand("zr_class_set_multiplier zombies knockback %f", g_fCurrentKnockbackBoost); + ServerCommand("zr_napalm_time_scale %f", g_fCurrentNapalmDamage); + + char cAdminNotification[256]; + Format(cAdminNotification, sizeof(cAdminNotification), "{cyan}[AntiNoob]{white} Adding an additional {red}%d%%{white} mid round boost because the Human:Zombie Ratio exceeded 1:%f.", RoundToNearest(g_fKnockbackMidRoundBoost * 100.0), g_fMidRoundRatio); + + for(int i = 1; i <= MaxClients; i++) + { + if(IsAdmin(i)) + CPrintToChat(i,"%s", cAdminNotification); + } + } +} + public void OnRoundStart(Event hEvent, const char[] sEvent, bool bDontBroadcast) { g_iHumanScore = GetTeamScore(CS_TEAM_CT); g_iZombieScore = GetTeamScore(CS_TEAM_T); + g_bMidRound = false; + if(g_iHumanScore == 0) { g_iHumanScore = 1; @@ -208,66 +309,49 @@ public void OnRoundStart(Event hEvent, const char[] sEvent, bool bDontBroadcast) g_iZombieStreak = 0; } - int ActivePlayers; + int iActivePlayers; for(int i = 1; i <= MaxClients; i++) { if(IsClientInGame(i) && !IsFakeClient(i) && GetClientTeam(i) >= CS_TEAM_T) - { - ActivePlayers++; - } + iActivePlayers++; } + char cAdminNotification[128] = "{cyan}[AntiNoob]{white} Currently disabled."; + if(!g_bAntiNoob) { - g_cAntiNoobHelp = "{cyan}[AntiNoob]{white} Currently disabled"; - g_cAntiNoobPopulation = "{white}."; PerformReset(); + for(int i = 1; i <= MaxClients; i++) { if(IsAdmin(i)) - CPrintToChat(i,"%s%s", g_cAntiNoobHelp, g_cAntiNoobPopulation); + CPrintToChat(i,"%s", cAdminNotification); } return; } - if(ActivePlayers <= g_iMaxPopulation) - { + if(iActivePlayers <= g_iMaxPopulation) g_bLowPopulation = true; - g_cAntiNoobPopulation = "{white} + Low Population Boost."; - } else - { g_bLowPopulation = false; - g_cAntiNoobPopulation = "{white}."; - } if(g_iZombieScore / g_iHumanScore >= g_iHighRatio || g_iZombieStreak >= g_iHighStreak) - { - g_cAntiNoobHelp = "{cyan}[AntiNoob]{white} Currently perfoming High Help"; PerformHighHelp(); - } else if(g_iZombieScore / g_iHumanScore >= g_iMediumRatio || g_iZombieStreak >= g_iMediumStreak) - { - g_cAntiNoobHelp = "{cyan}[AntiNoob]{white} Currently perfoming Medium Help"; PerformMediumHelp(); - } else if(g_iZombieScore / g_iHumanScore >= g_iLowRatio || g_iZombieStreak >= g_iLowStreak) - { - g_cAntiNoobHelp = "{cyan}[AntiNoob]{white} Currently perfoming Low Help"; PerformLowHelp(); - } else - { - g_cAntiNoobHelp = "{cyan}[AntiNoob]{white} Currently perfoming No Help"; PerformReset(); - } + + Format(cAdminNotification, sizeof(cAdminNotification), "{cyan}[AntiNoob]{white} Starting to boost this round by {red}%d%%{white} knockback increase.", RoundToNearest((g_fCurrentKnockbackBoost - 1.0) * 100.0)); for(int i = 1; i <= MaxClients; i++) { if(IsAdmin(i)) - CPrintToChat(i,"%s%s", g_cAntiNoobHelp, g_cAntiNoobPopulation); + CPrintToChat(i,"%s", cAdminNotification); } } @@ -277,11 +361,15 @@ public void PerformHighHelp() { ServerCommand("zr_class_set_multiplier zombies knockback %f", 1.0 + g_fKnockbackHighBoost + g_fKnockbackPopulationBoost); ServerCommand("zr_napalm_time_scale %f", 50.0 - g_fNapalmHighReduction - g_fNapalmPopulationReduction); + g_fCurrentKnockbackBoost = 1.0 + g_fKnockbackHighBoost + g_fKnockbackPopulationBoost; + g_fCurrentNapalmDamage = 50.0 - g_fNapalmHighReduction - g_fNapalmPopulationReduction; } else { ServerCommand("zr_class_set_multiplier zombies knockback %f", 1.0 + g_fKnockbackHighBoost); ServerCommand("zr_napalm_time_scale %f", 50.0 - g_fNapalmHighReduction); + g_fCurrentKnockbackBoost = 1.0 + g_fKnockbackHighBoost; + g_fCurrentNapalmDamage = 50.0 - g_fNapalmHighReduction; } } @@ -291,11 +379,15 @@ public void PerformMediumHelp() { ServerCommand("zr_class_set_multiplier zombies knockback %f", 1.0 + g_fKnockbackMediumBoost + g_fKnockbackPopulationBoost); ServerCommand("zr_napalm_time_scale %f", 50.0 - g_fNapalmMediumReduction - g_fNapalmPopulationReduction); + g_fCurrentKnockbackBoost = 1.0 + g_fKnockbackMediumBoost + g_fKnockbackPopulationBoost; + g_fCurrentNapalmDamage = 50.0 - g_fNapalmMediumReduction - g_fNapalmPopulationReduction; } else { ServerCommand("zr_class_set_multiplier zombies knockback %f", 1.0 + g_fKnockbackMediumBoost); ServerCommand("zr_napalm_time_scale %f", 50.0 - g_fNapalmMediumReduction); + g_fCurrentKnockbackBoost = 1.0 + g_fKnockbackMediumBoost + g_fKnockbackPopulationBoost; + g_fCurrentNapalmDamage = 50.0 - g_fNapalmMediumReduction; } } @@ -305,11 +397,15 @@ public void PerformLowHelp() { ServerCommand("zr_class_set_multiplier zombies knockback %f", 1.0 + g_fKnockbackLowBoost + g_fKnockbackPopulationBoost); ServerCommand("zr_napalm_time_scale %f", 50.0 - g_fNapalmLowReduction - g_fNapalmPopulationReduction); + g_fCurrentKnockbackBoost = 1.0 + g_fKnockbackLowBoost + g_fKnockbackPopulationBoost; + g_fCurrentNapalmDamage = 50.0 - g_fNapalmLowReduction - g_fNapalmPopulationReduction; } else { ServerCommand("zr_class_set_multiplier zombies knockback %f", 1.0 + g_fKnockbackLowBoost); ServerCommand("zr_napalm_time_scale %f", 50.0 - g_fNapalmLowReduction); + g_fCurrentKnockbackBoost = 1.0 + g_fKnockbackLowBoost; + g_fCurrentNapalmDamage = 50.0 - g_fNapalmLowReduction; } } @@ -319,11 +415,15 @@ public void PerformReset() { ServerCommand("zr_class_set_multiplier zombies knockback %f", 1.0 + g_fKnockbackPopulationBoost); ServerCommand("zr_napalm_time_scale %f", 50.0 - g_fNapalmPopulationReduction); + g_fCurrentKnockbackBoost = 1.0 + g_fKnockbackPopulationBoost; + g_fCurrentNapalmDamage = 50.0 - g_fNapalmPopulationReduction; } else { ServerCommand("zr_class_set_multiplier zombies knockback 1.0"); ServerCommand("zr_napalm_time_scale 50.0"); + g_fCurrentKnockbackBoost = 1.0; + g_fCurrentNapalmDamage = 50.0; } }