From f420bfc7edc3a2122aa88e9ab6cce523632516a7 Mon Sep 17 00:00:00 2001 From: jenz Date: Thu, 1 Aug 2024 20:24:16 +0200 Subject: [PATCH] updated icecap plugins so its not interfering with ztele and events. also made zombie hunting plugin aln always active --- .../ze_icecap_escape_act2_b3s_fix.sp | 39 +- zombie_hunting_respawn/zh_respawn_stop.sp | 612 +++++++++++------- 2 files changed, 391 insertions(+), 260 deletions(-) diff --git a/ze_icecap_escape_act2_b3s_fix/scripting/ze_icecap_escape_act2_b3s_fix.sp b/ze_icecap_escape_act2_b3s_fix/scripting/ze_icecap_escape_act2_b3s_fix.sp index a4e09e64..9806cddd 100644 --- a/ze_icecap_escape_act2_b3s_fix/scripting/ze_icecap_escape_act2_b3s_fix.sp +++ b/ze_icecap_escape_act2_b3s_fix/scripting/ze_icecap_escape_act2_b3s_fix.sp @@ -51,17 +51,14 @@ public void OnPluginStart() public Action Command_ztele(int client, const char[] Command, int Args) { - if (!g_b_is_icecap_act2) + if (g_b_is_icecap_act2) { - return Plugin_Handled; + if (IsValidClient(client)) + { + int userid = GetClientUserId(client); + ServerCommand("sm_forceinputplayer #%i Clearparent", userid); + } } - - if (IsValidClient(client)) - { - int userid = GetClientUserId(client); - ServerCommand("sm_forceinputplayer #%i Clearparent", userid); - } - return Plugin_Handled; } public void OnClientPostAdminCheck(int client) @@ -78,25 +75,23 @@ stock bool IsValidClient(int client) //right before round end deactivate gameUI and unparent players from moving vehicles. public void OnRoundEnd(Handle event, const char[] name, bool dontBroadcast) { - if (!g_b_is_icecap_act2) + if (g_b_is_icecap_act2) { - return; + //its the correct map if it contains icecap_escape_act2 + ServerCommand("sm_forceinput Game Deactivate; sm_forceinput Game2 Deactivate;sm_forceinput Game3 Deactivate;sm_forceinput Game4 Deactivate; sm_forceinput Gameleft Deactivate; sm_forceinput Gameright Deactivate; sm_forceinput Gameseat Deactivate; sm_forceinput Gameseat2 Deactivate; sm_forceinput Gameseat3 Deactivate; sm_forceinput Gameseat4 Deactivate; sm_forceinput Gameseat5 Deactivate; sm_forceinput Gameseat6 Deactivate;"); + ServerCommand("sm_forceinput player Clearparent;"); + ServerCommand("sm_forceinput heli kill; sm_forceinput moblie kill; sm_forceinput car kill; sm_forceinput battery kill;"); } - //its the correct map if it contains icecap_escape_act2 - ServerCommand("sm_forceinput Game Deactivate; sm_forceinput Game2 Deactivate;sm_forceinput Game3 Deactivate;sm_forceinput Game4 Deactivate; sm_forceinput Gameleft Deactivate; sm_forceinput Gameright Deactivate; sm_forceinput Gameseat Deactivate; sm_forceinput Gameseat2 Deactivate; sm_forceinput Gameseat3 Deactivate; sm_forceinput Gameseat4 Deactivate; sm_forceinput Gameseat5 Deactivate; sm_forceinput Gameseat6 Deactivate;"); - ServerCommand("sm_forceinput player Clearparent;"); - ServerCommand("sm_forceinput heli kill; sm_forceinput moblie kill; sm_forceinput car kill; sm_forceinput battery kill;"); } public void trigger_teleport(const char[] output, int entity_index, int client, float delay) { - if (!g_b_is_icecap_act2) + if (g_b_is_icecap_act2) { - return; - } - if (IsValidClient(client)) - { - int userid = GetClientUserId(client); - ServerCommand("sm_forceinputplayer #%i Clearparent", userid); + if (IsValidClient(client)) + { + int userid = GetClientUserId(client); + ServerCommand("sm_forceinputplayer #%i Clearparent", userid); + } } } diff --git a/zombie_hunting_respawn/zh_respawn_stop.sp b/zombie_hunting_respawn/zh_respawn_stop.sp index 99eca1d0..a6007b89 100644 --- a/zombie_hunting_respawn/zh_respawn_stop.sp +++ b/zombie_hunting_respawn/zh_respawn_stop.sp @@ -19,6 +19,8 @@ int ping_ents[MAXPLAYERS + 1]; int g_iAnnounce_zone_controll = 0; bool g_permit_zone_benefits = false; +bool g_is_zh_map = false; + bool round_start_delay; //spawning the markers @@ -78,130 +80,145 @@ public void OnPluginStart() 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 || !g_permit_zone_benefits) + if (g_is_zh_map) { - g_human_damage_addition = 1.0; //indicating no damage buffs - for (int i = 0; i < MaxClients; i++) + float fought_zone = 0.0; + float ct_controlled_zone = 0.0; + float zm_controlled_zone = 0.0; + if (g_zoneCount == 0 || !g_permit_zone_benefits) { - if (IsValidClient(i) && IsPlayerAlive(i)) + g_human_damage_addition = 1.0; //indicating no damage buffs + for (int i = 0; i < MaxClients; i++) { - SetEntityGravity(i, 1.0); + if (IsValidClient(i) && IsPlayerAlive(i)) + { + SetEntityGravity(i, 1.0); + } + } + return Plugin_Handled; + } + for (int i = 0; i < g_zoneCount; i++) + { + if (g_iZone_fought_or_ct_controlled[i] == 1) //fought over zone + { + fought_zone++; + } + if (g_iZone_fought_or_ct_controlled[i] == 2) //CT zone + { + ct_controlled_zone++; + } + if (g_iZone_fought_or_ct_controlled[i] == 3) //ZM zone + { + zm_controlled_zone++; } } - return Plugin_Handled; - } - for (int i = 0; i < g_zoneCount; i++) - { - if (g_iZone_fought_or_ct_controlled[i] == 1) //fought over 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); + if (g_iAnnounce_zone_controll >= 3) { - fought_zone++; + 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 (g_iZone_fought_or_ct_controlled[i] == 2) //CT zone - { - ct_controlled_zone++; - } - if (g_iZone_fought_or_ct_controlled[i] == 3) //ZM zone - { - 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); - 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 (zm_control_percentage > 70) { - if (IsValidClient(i) && IsPlayerAlive(i)) + for (int i = 0; i < MaxClients; i++) { - if (GetClientTeam(i) == CS_TEAM_T) + if (IsValidClient(i) && IsPlayerAlive(i)) { - SetEntityGravity(i, 0.7); + if (GetClientTeam(i) == CS_TEAM_T) + { + SetEntityGravity(i, 0.7); + } + else + { + SetEntityGravity(i, 1.0); + } } - else + } + 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 (g_iAnnounce_zone_controll >= 3) + + if (ct_control_percentage > 90) { - 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)) + g_human_damage_addition = 0.6; + if (g_iAnnounce_zone_controll >= 3) { - SetEntityGravity(i, 1.0); + PrintToChatAll("CT controll over 90%s of zones. Applying 60%s extra damage", "%", "%"); } } - } - - if (ct_control_percentage > 90) - { - g_human_damage_addition = 0.6; + else if (ct_control_percentage > 70) + { + g_human_damage_addition = 0.40; + 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; + 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) { - PrintToChatAll("CT controll over 90%s of zones. Applying 60%s extra damage", "%", "%"); + g_iAnnounce_zone_controll = 0; } } - else if (ct_control_percentage > 70) - { - g_human_damage_addition = 0.40; - 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; - 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; } public void OnClientPutInServer(int client) { - SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage); + if (g_is_zh_map) + { + SDKHook(client, SDKHook_OnTakeDamage, OnTakeDamage); + } } public Action OnTakeDamage(int client, int &attacker, int &inflictor, float &damage, int &damagetype) { - if (IsValidClient(attacker) && GetClientTeam(attacker) == CS_TEAM_CT && g_human_damage_addition != 1.0) + if (g_is_zh_map) { - damage += (g_human_damage_addition * damage); - return Plugin_Changed; + if (IsValidClient(attacker) && GetClientTeam(attacker) == CS_TEAM_CT && g_human_damage_addition != 1.0) + { + damage += (g_human_damage_addition * damage); + return Plugin_Changed; + } } + return Plugin_Continue; } public Action give_zm_zone_boosts(Handle hTimer) { + if (!g_is_zh_map) + { + return Plugin_Handled; + } + for (int client; client < MaxClients; client++) { if (IsValidClient(client) && IsPlayerAlive(client) && GetClientTeam(client) == CS_TEAM_T) @@ -238,16 +255,23 @@ public void OnPluginEnd() //---------------------------------------------------------------------------------------------------- public void OnClientDisconnect(int client) { - g_iCT_Damage_in_zone[client] = 0; - client_target[client] = 0; - g_client_in_zone[client] = -1; - adjust_clients(); //calling GetClientTeam inside adjust_clients complaints that client already disconnected. - g_bBlockRespawn[client] = 0; - SDKUnhook(client, SDKHook_OnTakeDamage, OnTakeDamage); + if (g_is_zh_map) + { + g_iCT_Damage_in_zone[client] = 0; + client_target[client] = 0; + g_client_in_zone[client] = -1; + adjust_clients(); //calling GetClientTeam inside adjust_clients complaints that client already disconnected. + g_bBlockRespawn[client] = 0; + SDKUnhook(client, SDKHook_OnTakeDamage, OnTakeDamage); + } } public void adjust_clients() { + if (!g_is_zh_map) + { + return; + } for (int i = 0; i < MAXZONES; i++) { g_cZones_CT_count[i] = 0; @@ -276,38 +300,45 @@ public void adjust_clients() public void OnRoundEnd(Event hEvent, const char[] sEvent, bool bDontBroadcast) { - if(g_hZoneBenefits != INVALID_HANDLE) + if (g_is_zh_map) { - KillTimer(g_hZoneBenefits); - g_hZoneBenefits = INVALID_HANDLE; - } - round_start_delay = true; - bool found_alive_zm = false; - for (int client = 0; client < MaxClients; client++) - { - if (IsValidClient(client) && GetClientTeam(client) == CS_TEAM_T && IsPlayerAlive(client)) + if(g_hZoneBenefits != INVALID_HANDLE) { - found_alive_zm = true; + KillTimer(g_hZoneBenefits); + g_hZoneBenefits = INVALID_HANDLE; } - } - - if (found_alive_zm) - { + round_start_delay = true; + bool found_alive_zm = false; for (int client = 0; client < MaxClients; client++) { - if (IsValidClient(client) && GetClientTeam(client) == CS_TEAM_CT) + if (IsValidClient(client) && GetClientTeam(client) == CS_TEAM_T && IsPlayerAlive(client)) { - ForcePlayerSuicide(client); + found_alive_zm = true; } } - PrintToChatAll("Humans failed!"); - PrintToChatAll("Humans failed!"); - PrintToChatAll("Humans failed!"); + + if (found_alive_zm) + { + for (int client = 0; client < MaxClients; client++) + { + if (IsValidClient(client) && GetClientTeam(client) == CS_TEAM_CT) + { + ForcePlayerSuicide(client); + } + } + PrintToChatAll("Humans failed!"); + PrintToChatAll("Humans failed!"); + PrintToChatAll("Humans failed!"); + } } } public Action permit_zone_benefits(Handle hTimer) { + if (!g_is_zh_map) + { + return Plugin_Handled; + } g_permit_zone_benefits = true; return Plugin_Handled; } @@ -317,32 +348,39 @@ public Action permit_zone_benefits(Handle hTimer) //---------------------------------------------------------------------------------------------------- public void OnRoundStart(Event hEvent, const char[] sEvent, bool bDontBroadcast) { - g_permit_zone_benefits = false; - g_hZoneBenefits = CreateTimer(35.0, permit_zone_benefits); - g_human_damage_addition = 1.0; - for (int client = 0; client < MaxClients; client++) + if (g_is_zh_map) { - g_bBlockRespawn[client] = 0; - if (IsValidClient(client)) + g_permit_zone_benefits = false; + g_hZoneBenefits = CreateTimer(35.0, permit_zone_benefits); + g_human_damage_addition = 1.0; + for (int client = 0; client < MaxClients; client++) { - g_iCT_Damage_in_zone[client] = 0; + g_bBlockRespawn[client] = 0; + if (IsValidClient(client)) + { + g_iCT_Damage_in_zone[client] = 0; + } + g_client_in_zone[client] = -1; } - g_client_in_zone[client] = -1; - } - for (int i = 0; i < MAXZONES; i++) - { - g_cZones_CT_count[i] = 0; - g_cZones_ZM_count[i] = 0; - g_iZone_fought_or_ct_controlled[i] = -1; - g_iLast_Client_In_Zone[i] = 0; + for (int i = 0; i < MAXZONES; i++) + { + g_cZones_CT_count[i] = 0; + g_cZones_ZM_count[i] = 0; + g_iZone_fought_or_ct_controlled[i] = -1; + g_iLast_Client_In_Zone[i] = 0; + } + round_start_delay = true; + CreateTimer(5.0, enable_pings); } - round_start_delay = true; - CreateTimer(5.0, enable_pings); } public Action enable_pings(Handle timer, any data) { + if (!g_is_zh_map) + { + return Plugin_Handled; + } round_start_delay = false; return Plugin_Handled; } @@ -352,28 +390,34 @@ public Action enable_pings(Handle timer, any data) //---------------------------------------------------------------------------------------------------- public void OnClientDeath(Event hEvent, const char[] sEvent, bool bDontBroadcast) { - int victim = GetClientOfUserId(hEvent.GetInt("userid")); - g_client_in_zone[victim] = -1; - adjust_clients(); - SetEntityRenderColor(victim, 255, 255, 255, 255); - if (g_bBlockRespawn[victim] > g_hRespawnTreshold.IntValue) - return; - PrintToChat(victim, "\x04[ZR]\x01 You have %i respawns left for this round.", g_hRespawnTreshold.IntValue - g_bBlockRespawn[victim]); - g_bBlockRespawn[victim]++; + if (g_is_zh_map) + { + int victim = GetClientOfUserId(hEvent.GetInt("userid")); + g_client_in_zone[victim] = -1; + adjust_clients(); + SetEntityRenderColor(victim, 255, 255, 255, 255); + if (g_bBlockRespawn[victim] > g_hRespawnTreshold.IntValue) + return; + PrintToChat(victim, "\x04[ZR]\x01 You have %i respawns left for this round.", g_hRespawnTreshold.IntValue - g_bBlockRespawn[victim]); + g_bBlockRespawn[victim]++; + } } public void ZR_OnClientInfected(int client, int attacker, bool motherInfect, bool respawnOverride, bool respawn) { - int index = g_client_in_zone[client]; - if (index != -1) + if (g_is_zh_map) { - //client got infected inside a specific zone, reduce human count inside that specific zone by 1 - if (g_cZones_CT_count[index] > 0) + int index = g_client_in_zone[client]; + if (index != -1) { - g_cZones_CT_count[index]--; + //client got infected inside a specific zone, reduce human count inside that specific zone by 1 + if (g_cZones_CT_count[index] > 0) + { + g_cZones_CT_count[index]--; + } + g_cZones_ZM_count[index]++; + UpdateMarkers(); } - g_cZones_ZM_count[index]++; - UpdateMarkers(); } } @@ -390,6 +434,10 @@ stock bool IsValidClient(int client) public float get_power_distance(int target_player, float pos[3]) { + if (!g_is_zh_map) + { + return 0.0; + } float vec[3]; GetClientAbsOrigin(target_player, vec); return GetVectorDistance(vec, pos); @@ -397,14 +445,21 @@ public float get_power_distance(int target_player, float pos[3]) public Action ZR_OnClientRespawn(&client, &ZR_RespawnCondition:condition) { - if (g_bBlockRespawn[client] > g_hRespawnTreshold.IntValue) - return Plugin_Handled; - find_teleport_target(client); + if (g_is_zh_map) + { + if (g_bBlockRespawn[client] > g_hRespawnTreshold.IntValue) + return Plugin_Handled; + find_teleport_target(client); + } return Plugin_Continue; } public void find_teleport_target(int client) { + if (!g_is_zh_map) + { + return; + } //teleport player to team members with farthest distance to enemy just. //checking all alive clients to determine which client has highest dist_target to its closest enemy float total_furthest_distance = -1.0; @@ -472,13 +527,20 @@ public bool TraceRayHitOnlyEnt(int entityhit, int mask, any data) { public void OnClientPostAdminCheck(int client) { - g_iCT_Damage_in_zone[client] = 0; - client_target[client] = 0; - g_client_in_zone[client] = -1; + if (g_is_zh_map) + { + g_iCT_Damage_in_zone[client] = 0; + client_target[client] = 0; + g_client_in_zone[client] = -1; + } } public Action tp_client(Handle timer, int client) { + if (!g_is_zh_map) + { + return Plugin_Handled; + } if (IsValidClient(client) && IsValidClient(client_target[client])) { float posd[3]; @@ -492,39 +554,49 @@ public Action tp_client(Handle timer, int client) public void unloze_zoneLeave(int client, char[] zone) { - int index = g_client_in_zone[client]; - if (index < 0) + if (g_is_zh_map) { - return; - } + int index = g_client_in_zone[client]; + if (index < 0) + { + return; + } - g_client_in_zone[client] = -1; - g_iCT_Damage_in_zone[client] = 0; - if (GetClientTeam(client) == CS_TEAM_CT) - { - if (g_cZones_CT_count[index] > 0) + g_client_in_zone[client] = -1; + g_iCT_Damage_in_zone[client] = 0; + if (GetClientTeam(client) == CS_TEAM_CT) { - g_cZones_CT_count[index]--; + if (g_cZones_CT_count[index] > 0) + { + g_cZones_CT_count[index]--; + } } - } - else - { - if (g_cZones_ZM_count[index] > 0) + else { - g_cZones_ZM_count[index]--; + if (g_cZones_ZM_count[index] > 0) + { + g_cZones_ZM_count[index]--; + } } + SetEntityRenderColor(client, 255, 255, 255, 255); + UpdateMarkers(); } - SetEntityRenderColor(client, 255, 255, 255, 255); - UpdateMarkers(); } public void unloze_zoneCreated() { - ReadZoneFile(); + if (g_is_zh_map) + { + ReadZoneFile(); + } } public Action retry_zoneEntry(Handle timer, DataPack data) { + if (!g_is_zh_map) + { + return Plugin_Handled; + } ResetPack(data); char zone[256]; data.ReadString(zone, sizeof(zone)); @@ -542,47 +614,54 @@ public Action retry_zoneEntry(Handle timer, DataPack data) public void unloze_zoneEntry(int client, char[] zone) { - int index = -1; - //unfortunately it can happen that a zone is entered before the current one is left, which can lead to -1 index - //when leaving the zone again. - //example: Enter new zone before old is left -> leave old zone -> index is -1 -> leave current zone -> leave forward is called before entering new zone is called -> - //tries to do -- on a array index where the index is -1 - if (g_client_in_zone[client] != -1) + if (g_is_zh_map) { - //the previous zone has to be left before we recognize the client entering the new zone - //only special cases are roundstart/respawning - DataPack hDataPack = new DataPack(); - hDataPack.WriteString(zone); - hDataPack.WriteCell(GetClientSerial(client)); - CreateTimer(0.2, retry_zoneEntry, hDataPack); - return; - } - for (int i = 0; i < g_zoneCount; i++) - { - if (StrEqual(g_cZones[i], zone)) + int index = -1; + //unfortunately it can happen that a zone is entered before the current one is left, which can lead to -1 index + //when leaving the zone again. + //example: Enter new zone before old is left -> leave old zone -> index is -1 -> leave current zone -> leave forward is called before entering new zone is called -> + //tries to do -- on a array index where the index is -1 + if (g_client_in_zone[client] != -1) { - index = i; - break; + //the previous zone has to be left before we recognize the client entering the new zone + //only special cases are roundstart/respawning + DataPack hDataPack = new DataPack(); + hDataPack.WriteString(zone); + hDataPack.WriteCell(GetClientSerial(client)); + CreateTimer(0.2, retry_zoneEntry, hDataPack); + return; } - } - g_client_in_zone[client] = index; + for (int i = 0; i < g_zoneCount; i++) + { + if (StrEqual(g_cZones[i], zone)) + { + index = i; + break; + } + } + g_client_in_zone[client] = index; - g_iCT_Damage_in_zone[client] = PlayerRankings_GetClientDamage(client); - if (GetClientTeam(client) == CS_TEAM_CT) - { - g_cZones_CT_count[index]++; + g_iCT_Damage_in_zone[client] = PlayerRankings_GetClientDamage(client); + if (GetClientTeam(client) == CS_TEAM_CT) + { + g_cZones_CT_count[index]++; + } + else + { + g_cZones_ZM_count[index]++; + } + g_iLast_Client_In_Zone[index] = client; + display_hud_text(index, client); + UpdateMarkers(); } - else - { - g_cZones_ZM_count[index]++; - } - g_iLast_Client_In_Zone[index] = client; - display_hud_text(index, client); - UpdateMarkers(); } public void handle_pings(int i, int pingtype) { + if (!g_is_zh_map) + { + return; + } if (round_start_delay) { return; //preventing pings from spawning exactly on roundStart as it might cause too many entities @@ -604,6 +683,10 @@ public void handle_pings(int i, int pingtype) public void display_hud_text(int index, int client) { + if (!g_is_zh_map) + { + return; + } if (hText != INVALID_HANDLE) { char msg[256]; @@ -635,56 +718,89 @@ public void display_hud_text(int index, int client) //---------------------------------------------------------------------------------------------------- public Action ReadZoneFile() { - int i_zoneTemp; - char l_cMapName[MAXZONES]; - GetCurrentMap(l_cMapName, sizeof(l_cMapName)); - Handle l_hZoneFile = INVALID_HANDLE; - char l_cLine[ZONENAMELENGTH]; - char sPart[4][32]; - BuildPath(Path_SM, g_cConfigZones, sizeof(g_cConfigZones), "configs/unloze_zones/%s.zones.txt", l_cMapName); - l_hZoneFile = OpenFile(g_cConfigZones, "r"); - if (l_hZoneFile == INVALID_HANDLE) + if (g_is_zh_map) { - Handle kv = CreateKeyValues("Zones"); - KeyValuesToFile(kv, g_cConfigZones); - CloseHandle(kv); + int i_zoneTemp; + char l_cMapName[MAXZONES]; + GetCurrentMap(l_cMapName, sizeof(l_cMapName)); + Handle l_hZoneFile = INVALID_HANDLE; + char l_cLine[ZONENAMELENGTH]; + char sPart[4][32]; + BuildPath(Path_SM, g_cConfigZones, sizeof(g_cConfigZones), "configs/unloze_zones/%s.zones.txt", l_cMapName); + l_hZoneFile = OpenFile(g_cConfigZones, "r"); + if (l_hZoneFile == INVALID_HANDLE) + { + Handle kv = CreateKeyValues("Zones"); + KeyValuesToFile(kv, g_cConfigZones); + CloseHandle(kv); + delete l_hZoneFile; + return Plugin_Handled; + } + while (!IsEndOfFile(l_hZoneFile) && ReadFileLine(l_hZoneFile, l_cLine, sizeof(l_cLine))) + { + if (StrContains(l_cLine, "name", false) > -1) + { + ReplaceStrings(l_cLine, "name"); + Format(g_cZones[i_zoneTemp], sizeof(g_cZones), l_cLine); + } + if (StrContains(l_cLine, "cordinate_a", false) >= 0) + { + ReplaceString(l_cLine, sizeof(l_cLine), "\"", "", true); + ReplaceString(l_cLine, sizeof(l_cLine), "cordinate_a", "", true); + ExplodeString(l_cLine, " ", sPart, 4, 32); + g_fStartPos[i_zoneTemp][0] = StringToFloat(sPart[0]);//reading first vector + g_fStartPos[i_zoneTemp][1] = StringToFloat(sPart[1]);//reading second vector + g_fStartPos[i_zoneTemp][2] = StringToFloat(sPart[2]);//reading third vector + } + if (StrContains(l_cLine, "cordinate_b", false) >= 0) + { + ReplaceString(l_cLine, sizeof(l_cLine), "\"", "", true); + ReplaceString(l_cLine, sizeof(l_cLine), "cordinate_b", "", true); + ExplodeString(l_cLine, " ", sPart, 4, 32); + g_fEndPos[i_zoneTemp][0] = StringToFloat(sPart[0]); + g_fEndPos[i_zoneTemp][1] = StringToFloat(sPart[1]); + g_fEndPos[i_zoneTemp][2] = StringToFloat(sPart[2]); + i_zoneTemp++; + } + } + g_zoneCount = i_zoneTemp; delete l_hZoneFile; - return Plugin_Handled; } - while (!IsEndOfFile(l_hZoneFile) && ReadFileLine(l_hZoneFile, l_cLine, sizeof(l_cLine))) - { - if (StrContains(l_cLine, "name", false) > -1) - { - ReplaceStrings(l_cLine, "name"); - Format(g_cZones[i_zoneTemp], sizeof(g_cZones), l_cLine); - } - if (StrContains(l_cLine, "cordinate_a", false) >= 0) - { - ReplaceString(l_cLine, sizeof(l_cLine), "\"", "", true); - ReplaceString(l_cLine, sizeof(l_cLine), "cordinate_a", "", true); - ExplodeString(l_cLine, " ", sPart, 4, 32); - g_fStartPos[i_zoneTemp][0] = StringToFloat(sPart[0]);//reading first vector - g_fStartPos[i_zoneTemp][1] = StringToFloat(sPart[1]);//reading second vector - g_fStartPos[i_zoneTemp][2] = StringToFloat(sPart[2]);//reading third vector - } - if (StrContains(l_cLine, "cordinate_b", false) >= 0) - { - ReplaceString(l_cLine, sizeof(l_cLine), "\"", "", true); - ReplaceString(l_cLine, sizeof(l_cLine), "cordinate_b", "", true); - ExplodeString(l_cLine, " ", sPart, 4, 32); - g_fEndPos[i_zoneTemp][0] = StringToFloat(sPart[0]); - g_fEndPos[i_zoneTemp][1] = StringToFloat(sPart[1]); - g_fEndPos[i_zoneTemp][2] = StringToFloat(sPart[2]); - i_zoneTemp++; - } - } - g_zoneCount = i_zoneTemp; - delete l_hZoneFile; return Plugin_Handled; } public void OnMapStart() { + g_is_zh_map = false; + char sConfigFile[PLATFORM_MAX_PATH]; + BuildPath(Path_SM, sConfigFile, sizeof(sConfigFile), "configs/zh_maps.cfg"); + if(!FileExists(sConfigFile)) + { + LogMessage("Could not find config: \"%s\"", sConfigFile); + return; + } + char map[PLATFORM_MAX_PATH]; + GetCurrentMap(map, PLATFORM_MAX_PATH); + + new Handle:fileHandle = OpenFile(sConfigFile, "r" ); + char lineBuffer[256]; + while( !IsEndOfFile( fileHandle ) && ReadFileLine( fileHandle, lineBuffer, sizeof( lineBuffer ) ) ) + { + TrimString( lineBuffer ); + if (StrEqual(lineBuffer, map, false)) + { + g_is_zh_map = true; + break; + } + } + CloseHandle( fileHandle ); + + if (!g_is_zh_map) + { + return; + } + + g_human_damage_addition = 1.0; //resetting coordinates and setup. for (int i = 0; i < MAXZONES; i++) @@ -956,6 +1072,10 @@ stock void ReplaceStrings(char[] str, char[] strReplace) public void SpawnPing(int skin, float pos[3], int index) { + if (!g_is_zh_map) + { + return; + } int Ent = CreateEntityByName("prop_dynamic"); SetEntityModel(Ent, "models/unloze/unloze_ping.mdl"); DispatchKeyValue(Ent, "modelscale", "1.5"); @@ -978,6 +1098,10 @@ public void SpawnPing(int skin, float pos[3], int index) //---------------------------------------------------------------------------------------------------- public void RemovePing(int index) { + if (!g_is_zh_map) + { + return; + } if (ping_ents[index] != -1 && IsValidEdict(ping_ents[index])) { char m_szClassname[64]; @@ -992,6 +1116,10 @@ public void RemovePing(int index) public void UpdateMarkers() { + if (!g_is_zh_map) + { + return; + } //this only works because of knowing that order of ping coordinates match with zone order. for (int i = 0; i <= g_zoneCount; i++) { @@ -1063,6 +1191,10 @@ public void UpdateMarkers() public void reward_zm_zone_points(int i) { + if (!g_is_zh_map) + { + return; + } for (int j = 0; j < MaxClients; j++) { //is validclient, is ct, is alive, is inside the zone that just changed from fought to T controlled @@ -1078,6 +1210,10 @@ public void reward_zm_zone_points(int i) public void reward_ct_zone_points(int i) { + if (!g_is_zh_map) + { + return; + } for (int j = 0; j < MaxClients; j++) { //is validclient, is ct, is alive, is inside the zone that just changed from fought to CT controlled