From 04eea994d8746b66f5488575cdad6ab16de2365a Mon Sep 17 00:00:00 2001 From: rtldg <55846624+rtldg@users.noreply.github.com> Date: Tue, 7 Dec 2021 05:37:49 +0000 Subject: [PATCH] allow any number of kz buttons --- addons/sourcemod/scripting/shavit-zones.sp | 88 +++++++++------------- 1 file changed, 36 insertions(+), 52 deletions(-) diff --git a/addons/sourcemod/scripting/shavit-zones.sp b/addons/sourcemod/scripting/shavit-zones.sp index 8e39435b..498ce75a 100644 --- a/addons/sourcemod/scripting/shavit-zones.sp +++ b/addons/sourcemod/scripting/shavit-zones.sp @@ -174,7 +174,6 @@ Handle gH_Forwards_StageMessage = null; // kz support float gF_ClimbButtonCache[MAXPLAYERS+1][TRACKS_SIZE][2][3]; // 0 - location, 1 - angles -int gI_KZButtons[TRACKS_SIZE][2]; // 0 - start, 1 - end // set start bool gB_HasSetStart[MAXPLAYERS+1][TRACKS_SIZE]; @@ -918,35 +917,28 @@ public void OnEntityDestroyed(int entity) } } -public void Frame_HookButton(any data) +bool GetButtonInfo(int entity, int& zone, int& track) { - int entity = EntRefToEntIndex(data); - - if(entity == INVALID_ENT_REFERENCE) - { - return; - } - char sName[32]; GetEntPropString(entity, Prop_Data, "m_iName", sName, 32); if(StrContains(sName, "climb_") == -1) { - return; + return false; } - int zone = -1; - int track = Track_Main; - if(StrContains(sName, "startbutton") != -1) { zone = Zone_Start; } - else if(StrContains(sName, "endbutton") != -1) { zone = Zone_End; } + else + { + return false; + } int bonus = StrContains(sName, "bonus"); @@ -961,18 +953,37 @@ public void Frame_HookButton(any data) if (track < Track_Bonus || track > Track_Bonus_Last) { LogError("invalid track in climb button (%s) on %s", sName, gS_Map); - return; + return false; } } } - - if(zone != -1) + else { - gI_KZButtons[track][zone] = entity; - Shavit_MarkKZMap(track); - - SDKHook(entity, SDKHook_UsePost, UsePost); + track = Track_Main; } + + return true; +} + +public void Frame_HookButton(any data) +{ + int entity = EntRefToEntIndex(data); + + if(entity == INVALID_ENT_REFERENCE) + { + return; + } + + int zone = -1; + int track = Track_Main; + + if (!GetButtonInfo(entity, zone, track)) + { + return; + } + + Shavit_MarkKZMap(track); + SDKHook(entity, SDKHook_UsePost, UsePost); } bool parse_mod_zone(char sName[32], int& zone, int& track, int& zonedata) @@ -1114,13 +1125,6 @@ public void Frame_HookTrigger(any data) if(zone != -1) { - // TODO: Remove? - if (zone == Zone_Start || zone == Zone_End) - { - gI_KZButtons[track][zone] = entity; - Shavit_MarkKZMap(track); - } - int iZoneIndex = gI_MapZones; // Check for existing prebuilt zone in the cache and reuse slot. @@ -3743,12 +3747,6 @@ public void Player_Spawn(Event event, const char[] name, bool dontBroadcast) public void Round_Start(Event event, const char[] name, bool dontBroadcast) { - for(int i = 0; i < TRACKS_SIZE; i++) - { - gI_KZButtons[i][0] = -1; - gI_KZButtons[i][1] = -1; - } - bool empty_InsideZone[TRACKS_SIZE]; for (int i = 0; i <= MaxClients; i++) @@ -4044,23 +4042,6 @@ public void TouchPost(int entity, int other) } } -void GetButtonInfo(int entity, int &zone, int &track) -{ - for(int i = 0; i < TRACKS_SIZE; i++) - { - for(int j = 0; j < 2; j++) - { - if(gI_KZButtons[i][j] == entity) - { - zone = j; - track = i; - - return; - } - } - } -} - public void UsePost(int entity, int activator, int caller, UseType type, float value) { if (activator < 1 || activator > MaxClients || IsFakeClient(activator)) @@ -4071,7 +4052,10 @@ public void UsePost(int entity, int activator, int caller, UseType type, float v int zone = -1; int track = Track_Main; - GetButtonInfo(entity, zone, track); + if (!GetButtonInfo(entity, zone, track)) + { + return; + } if(zone == Zone_Start) {