diff --git a/Source/gs-entbase/server/func_recharge.cpp b/Source/gs-entbase/server/func_recharge.cpp index 4dcaaaaa..0623975e 100644 --- a/Source/gs-entbase/server/func_recharge.cpp +++ b/Source/gs-entbase/server/func_recharge.cpp @@ -8,25 +8,66 @@ class func_recharge:CBaseTrigger { + entity m_eUser; float m_flDelay; - + float m_flCheck; + void() func_recharge; + virtual void() customphysics; virtual void() PlayerUse; }; void func_recharge::PlayerUse(void) { eActivator.gflags |= GF_USE_RELEASED; + + /* First come first serve */ + if (m_eUser && eActivator != m_eUser) { + return; + } + + /* First time */ + if (m_eUser == world) { + sound(this, CHAN_VOICE, "items/suitchargeok1.wav", 1.0, ATTN_NORM); + } + if (m_flDelay > time) { return; } - eActivator.armor = bound(0, eActivator.armor += 1, 100); + if (eActivator.armor >= 100) { + eActivator.gflags &= ~GF_USE_RELEASED; + sound(this, CHAN_VOICE, "items/suitchargeno1.wav", 1.0, ATTN_NORM); + } else { + if (m_eUser == world) { + sound(this, CHAN_ITEM, "items/suitcharge1.wav", 1.0, ATTN_NORM); + } + eActivator.armor = bound(0, eActivator.armor += 1, 100); + } + + m_eUser = eActivator; m_flDelay = time + 0.1f; + m_flCheck = time + 0.25f; +} + +void func_recharge::customphysics(void) +{ + if (m_flCheck > time) { + return; + } + if (m_eUser) { + sound(this, CHAN_ITEM, "misc/null.wav", 1.0, ATTN_NORM); + m_eUser = world; + } } void func_recharge::func_recharge(void) { + precache_sound("items/suitchargeok1.wav"); + precache_sound("items/suitchargeno1.wav"); + precache_sound("items/suitcharge1.wav"); + + solid = SOLID_BSP; movetype = MOVETYPE_PUSH; setorigin(this, origin);