From 129d0ec2b75559668300400c119f959f2d083ef4 Mon Sep 17 00:00:00 2001 From: zaCade Date: Sat, 24 Nov 2018 14:01:09 +0100 Subject: [PATCH] ItemSpawn: Add a filter for items onto balrog. --- ItemSpawn/scripting/ItemSpawn.sp | 34 ++++++++++++++++++++++++++++ ItemSpawn/scripting/items/balrog.inc | 9 ++++++-- 2 files changed, 41 insertions(+), 2 deletions(-) diff --git a/ItemSpawn/scripting/ItemSpawn.sp b/ItemSpawn/scripting/ItemSpawn.sp index d621bdcf..8a605659 100644 --- a/ItemSpawn/scripting/ItemSpawn.sp +++ b/ItemSpawn/scripting/ItemSpawn.sp @@ -2,6 +2,7 @@ #include #include +#include #include #include @@ -9,6 +10,8 @@ int g_iCounter = 0; +bool g_bClientHasItem[MAXPLAYERS+1] = false; + Handle g_hGetSlot; Handle g_hBumpWeapon; Handle g_hOnPickedUp; @@ -287,6 +290,24 @@ stock void SetEntityProps(int entity) SetEntProp(entity, Prop_Send, "m_fEffects", 32); } +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +stock void AddItemFilter(int entity) +{ + SDKHook(entity, SDKHook_StartTouch, OnTriggerTouch); + SDKHook(entity, SDKHook_EndTouch, OnTriggerTouch); + SDKHook(entity, SDKHook_Touch, OnTriggerTouch); +} + +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public Action OnTriggerTouch(int trigger, int client) +{ + return (IsValidClient(client) && g_bClientHasItem[client]) ? Plugin_Handled : Plugin_Continue; +} + //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- @@ -323,11 +344,24 @@ public bool IsValidClient(int client) return true; } +//---------------------------------------------------------------------------------------------------- +// Purpose: +//---------------------------------------------------------------------------------------------------- +public void OnClientDisconnect(int client) +{ + g_bClientHasItem[client] = false; +} + //---------------------------------------------------------------------------------------------------- // Purpose: //---------------------------------------------------------------------------------------------------- public void OnRoundStart(Event hEvent, const char[] sEvent, bool bDontBroadcast) { + for (int client = 1; client <= MaxClients; client++) + { + g_bClientHasItem[client] = false; + } + g_iCounter = 0; // player_weaponstrip. diff --git a/ItemSpawn/scripting/items/balrog.inc b/ItemSpawn/scripting/items/balrog.inc index 9856beda..7ad281c8 100644 --- a/ItemSpawn/scripting/items/balrog.inc +++ b/ItemSpawn/scripting/items/balrog.inc @@ -140,6 +140,7 @@ public void SpawnBalrog(float fOrigin[3]) DispatchKeyFormat(iTriggerRoar, "OnStartTouch", "item_spawn_speedmod,ModifySpeed,1.0,10,-1"); SpawnAndActivate(iTriggerRoar); ParentToEntity(iTriggerRoar, iKnife); + AddItemFilter(iTriggerRoar); // make the trigger work. SetEntityBBox(iTriggerRoar, view_as({-736.0, -736.0, -560.0}), view_as({736.0, 736.0, 560.0})); @@ -356,9 +357,13 @@ public void SpawnBalrog(float fOrigin[3]) //---------------------------------------------------------------------------------------------------- public void BalrogPickup(const char[] output, int caller, int activator, float delay) { - ServerCommand("say ** %N has picked up Balrog **", activator); + if (IsValidClient(activator)) + { + ServerCommand("say ** %N has picked up Balrog **", activator); - PrintToChat(activator, "RIGHT CLICK = MOTIVATE ZOMBIES and LEFT CLICK = ATTACK."); + PrintToChat(activator, "RIGHT CLICK = MOTIVATE ZOMBIES and LEFT CLICK = ATTACK."); + g_bClientHasItem[activator] = true; + } } //----------------------------------------------------------------------------------------------------