From 71ddf57bd3d754239900ac4e9bfa74292cea5a01 Mon Sep 17 00:00:00 2001 From: jenz Date: Wed, 8 May 2024 21:55:02 +0200 Subject: [PATCH] made message less spammy, added round start prevention so it first checks zones after a minute and added low grav for zm --- zombie_hunting_respawn/zh_respawn_stop.sp | 80 +++++++++++++++++++++-- 1 file changed, 74 insertions(+), 6 deletions(-) diff --git a/zombie_hunting_respawn/zh_respawn_stop.sp b/zombie_hunting_respawn/zh_respawn_stop.sp index f3e45bfe..7b2c6cfb 100644 --- a/zombie_hunting_respawn/zh_respawn_stop.sp +++ b/zombie_hunting_respawn/zh_respawn_stop.sp @@ -16,6 +16,8 @@ int g_iCT_Damage_in_zone[MAXPLAYERS + 1]; int g_iZone_fought_or_ct_controlled[MAXZONES]; int g_iLast_Client_In_Zone[MAXPLAYERS + 1]; int ping_ents[MAXPLAYERS + 1]; +int g_iAnnounce_zone_controll = 0; +bool g_permit_zone_benefits = false; bool round_start_delay; @@ -35,6 +37,7 @@ ConVar g_hHealthRegenAmount; Handle hText; Handle g_hZMZoneTimer = null; Handle g_hZoneCounter = null; +Handle g_hZoneBenefits = null; //---------------------------------------------------------------------------------------------------- // Purpose: @@ -70,7 +73,7 @@ public void OnPluginStart() round_start_delay = true; //timer for ZM zone benefits g_hZMZoneTimer = CreateTimer(5.0, give_zm_zone_boosts, _, TIMER_REPEAT); - g_hZoneCounter = CreateTimer(30.0, announce_zone_controlls, _, TIMER_REPEAT); + g_hZoneCounter = CreateTimer(10.0, announce_zone_controlls, _, TIMER_REPEAT); } public Action announce_zone_controlls(Handle hTimer) @@ -78,7 +81,7 @@ public Action announce_zone_controlls(Handle hTimer) float fought_zone = 0.0; float ct_controlled_zone = 0.0; float zm_controlled_zone = 0.0; - if (g_zoneCount == 0) + if (g_zoneCount == 0 || !g_permit_zone_benefits) { return Plugin_Handled; } @@ -97,30 +100,80 @@ public Action announce_zone_controlls(Handle hTimer) zm_controlled_zone++; } } + g_iAnnounce_zone_controll++; int ct_control_percentage = RoundToFloor((ct_controlled_zone/ g_zoneCount) * 100); int zm_control_percentage = RoundToFloor((zm_controlled_zone/ g_zoneCount) * 100); int fought_percentage = RoundToFloor((fought_zone/ g_zoneCount) * 100); - PrintToChatAll("CT controll %i%s of zones. ZM controll %i%s of zones. %i%s of zones are fought over", + if (g_iAnnounce_zone_controll >= 3) + { + PrintToChatAll("CT controll %i%s of zones. ZM controll %i%s of zones. %i%s of zones are fought over", ct_control_percentage, "%", zm_control_percentage, "%", fought_percentage, "%"); + } + + if (zm_control_percentage > 70) + { + for (int i = 0; i < MaxClients; i++) + { + if (IsValidClient(i) && IsPlayerAlive(i)) + { + if (GetClientTeam(i) == CS_TEAM_T) + { + SetEntityGravity(i, 0.7); + } + else + { + SetEntityGravity(i, 1.0); + } + } + } + if (g_iAnnounce_zone_controll >= 3) + { + PrintToChatAll("ZM controll over 70%s of zones. Applying 30%s low grav", "%", "%"); + } + } + else + { + for (int i = 0; i < MaxClients; i++) + { + if (IsValidClient(i) && IsPlayerAlive(i)) + { + SetEntityGravity(i, 1.0); + } + } + } + if (ct_control_percentage > 90) { g_human_damage_addition = 0.6; - PrintToChatAll("CT controll over 90%s of zones. Applying 60%s extra damage", "%", "%"); + if (g_iAnnounce_zone_controll >= 3) + { + PrintToChatAll("CT controll over 90%s of zones. Applying 60%s extra damage", "%", "%"); + } } else if (ct_control_percentage > 70) { g_human_damage_addition = 0.40; - PrintToChatAll("CT controll over 70%s of zones. Applying 40%s extra damage", "%", "%"); + if (g_iAnnounce_zone_controll >= 3) + { + PrintToChatAll("CT controll over 70%s of zones. Applying 40%s extra damage", "%", "%"); + } } else if (ct_control_percentage > 50) { g_human_damage_addition = 0.2; - PrintToChatAll("CT controll over 50%s of zones. Applying 20%s extra damage", "%", "%"); + if (g_iAnnounce_zone_controll >= 3) + { + PrintToChatAll("CT controll over 50%s of zones. Applying 20%s extra damage", "%", "%"); + } } else { g_human_damage_addition = 1.0; //indicating no damage buffs } + if (g_iAnnounce_zone_controll >= 3) + { + g_iAnnounce_zone_controll = 0; + } return Plugin_Handled; } @@ -168,6 +221,8 @@ public void OnPluginEnd() delete g_hZMZoneTimer; if (g_hZoneCounter != null) delete g_hZoneCounter; + if (g_hZoneBenefits != null) + delete g_hZoneBenefits; } //---------------------------------------------------------------------------------------------------- @@ -213,6 +268,11 @@ public void adjust_clients() public void OnRoundEnd(Event hEvent, const char[] sEvent, bool bDontBroadcast) { + if(g_hZoneBenefits != INVALID_HANDLE) + { + KillTimer(g_hZoneBenefits); + g_hZoneBenefits = INVALID_HANDLE; + } round_start_delay = true; bool found_alive_zm = false; for (int client = 0; client < MaxClients; client++) @@ -238,11 +298,19 @@ public void OnRoundEnd(Event hEvent, const char[] sEvent, bool bDontBroadcast) } } +public Action permit_zone_benefits(Handle hTimer) +{ + g_permit_zone_benefits = true; + return Plugin_Handled; +} + //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- public void OnRoundStart(Event hEvent, const char[] sEvent, bool bDontBroadcast) { + g_permit_zone_benefits = false; + g_hZoneBenefits = CreateTimer(60.0, permit_zone_benefits); g_human_damage_addition = 1.0; for (int client = 0; client < MaxClients; client++) {