made message less spammy, added round start prevention so it first checks zones after a minute and added low grav for zm

This commit is contained in:
jenz 2024-05-08 21:55:02 +02:00
parent 48e50398ce
commit 71ddf57bd3

View File

@ -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++)
{