diff --git a/src/gs-entbase/server/basetrigger.cpp b/src/gs-entbase/server/basetrigger.cpp index ca9b734e..7cc7ab39 100644 --- a/src/gs-entbase/server/basetrigger.cpp +++ b/src/gs-entbase/server/basetrigger.cpp @@ -101,52 +101,44 @@ CBaseTrigger::Trigger(entity act, int state) } void -CBaseTrigger::UseTargets(entity act, int state) +CBaseTrigger::UseTargets(entity act, int state, float fDelay) { - for (entity f = world; (f = find(f, ::targetname, target));) { - CBaseTrigger trigger = (CBaseTrigger)f; - dprint(sprintf("^2%s::^3UseTargets^7: Triggering %s `%s` from %s\n", - this.classname, f.classname, trigger.targetname, act.classname)); - if (trigger.Trigger != __NULL__) { - trigger.Trigger(act, state); - } - } - - /* hack: check to see if this is a sound file */ - /*if (whichpack(m_strMessage)) { - print(m_strMessage); - print("\n"); - } else { - if (m_strMessage && act.flags & FL_CLIENT) { - centerprint(act, m_strMessage); - } - }*/ - - if (m_strKillTarget) { - entity eKill = find(world, ::targetname, m_strKillTarget); - if (eKill) { - remove(eKill); - } - } -} - -void -CBaseTrigger::UseTargets_Delay(entity act, int state, float fDelay) -{ - static void Entities_UseTargets_Delay_Think(void) { - CBaseTrigger::UseTargets(self.owner, self.health); /* ugly */ + static void Entities_UseTargets_Think(void) { + CBaseTrigger::UseTargets(self.owner, self.health, 0.0f); remove(self); } - dprint(sprintf("^2%s::^3UseTargets_Delay^7: Triggering `%s`\n", - this.classname, target)); + if (fDelay > 0.0f) { + dprint(sprintf("^2%s::^3UseTargets^7: Triggering `%s`\n", + this.classname, target)); - CBaseTrigger eTimer = spawn(CBaseTrigger); - eTimer.owner = act; - eTimer.think = Entities_UseTargets_Delay_Think; - eTimer.target = target; - eTimer.nextthink = time + fDelay; - eTimer.health = state; /* ugly */ + CBaseTrigger eTimer = spawn(CBaseTrigger); + eTimer.owner = act; + eTimer.think = Entities_UseTargets_Think; + eTimer.target = target; + eTimer.nextthink = time + fDelay; + eTimer.health = state; /* ugly */ + } else { + for (entity f = world; (f = find(f, ::targetname, target));) { + CBaseTrigger trigger = (CBaseTrigger)f; + + dprint(sprintf("^2%s::^3UseTargets^7:" \ + "Triggering %s `%s` from %s\n", \ + this.classname, f.classname, \ + trigger.targetname, act.classname)); + + if (trigger.Trigger != __NULL__) { + trigger.Trigger(act, state); + } + } + + if (m_strKillTarget) { + entity eKill = find(world, ::targetname, m_strKillTarget); + if (eKill) { + remove(eKill); + } + } + } } int diff --git a/src/gs-entbase/server/basetrigger.h b/src/gs-entbase/server/basetrigger.h index df54f0ed..86f6a024 100644 --- a/src/gs-entbase/server/basetrigger.h +++ b/src/gs-entbase/server/basetrigger.h @@ -48,8 +48,7 @@ class CBaseTrigger:CBaseEntity /* legacy trigger architecture */ float m_flDelay; virtual void(entity, int) Trigger; - virtual void(entity, int) UseTargets; - virtual void(entity, int, float) UseTargets_Delay; + virtual void(entity, int, float) UseTargets; /* master feature */ virtual int(void) GetValue; diff --git a/src/gs-entbase/server/button_target.cpp b/src/gs-entbase/server/button_target.cpp index 5227f7e4..5a39f1cf 100644 --- a/src/gs-entbase/server/button_target.cpp +++ b/src/gs-entbase/server/button_target.cpp @@ -17,6 +17,7 @@ /*QUAKED button_target (0 .5 .8) ? BUTTA_USE BUTTA_TEXON "targetname" Name "target" Target when triggered. +"delay" Time until target is triggered." Non-moving button that can either be used by hand, or shot. @@ -76,7 +77,7 @@ button_target::Trigger(entity act, int status) takedamage = DAMAGE_NO; frame = 1 - frame; - UseTargets(act, status); + UseTargets(act, status, m_flDelay); } void diff --git a/src/gs-entbase/server/func_breakable.cpp b/src/gs-entbase/server/func_breakable.cpp index 9fac51f7..6391accf 100755 --- a/src/gs-entbase/server/func_breakable.cpp +++ b/src/gs-entbase/server/func_breakable.cpp @@ -168,8 +168,8 @@ func_breakable::Explode(void) FX_BreakModel(vlen(size) / 10, absmin, absmax, [0,0,0], m_iMaterial); FX_Explosion(rp); Damage_Radius(rp, this, m_flExplodeMag, m_flExplodeMag * 2.5f, TRUE, 0); - CBaseTrigger::UseTargets(this, TRIG_TOGGLE); - CBaseEntity::Hide(); + UseTargets(this, TRIG_TOGGLE, 0.0f); /* delay... ignored. */ + Hide(); } void @@ -220,8 +220,8 @@ func_breakable::Death(void) } else { FX_BreakModel(vlen(size) / 10, absmin, absmax, [0,0,0], m_iMaterial); /* TODO: ability to have whoever destroyed the crate be the activator */ - CBaseTrigger::UseTargets(this, TRIG_TOGGLE); - CBaseEntity::Hide(); + UseTargets(this, TRIG_TOGGLE, 0.0f); + Hide(); } } diff --git a/src/gs-entbase/server/func_button.cpp b/src/gs-entbase/server/func_button.cpp index a3dcd143..fde270e2 100644 --- a/src/gs-entbase/server/func_button.cpp +++ b/src/gs-entbase/server/func_button.cpp @@ -211,12 +211,7 @@ func_button::Trigger(entity act, int state) Sound_Play(this, CHAN_VOICE, m_strSndPressed); MoveAway(); - - if (m_flDelay) { - UseTargets_Delay(act, TRIG_TOGGLE, m_flDelay); - } else { - UseTargets(act, TRIG_TOGGLE); - } + UseTargets(act, TRIG_TOGGLE, m_flDelay); } void diff --git a/src/gs-entbase/server/func_door.cpp b/src/gs-entbase/server/func_door.cpp index 8c035c23..958e60ac 100644 --- a/src/gs-entbase/server/func_door.cpp +++ b/src/gs-entbase/server/func_door.cpp @@ -225,11 +225,7 @@ func_door::Trigger(entity act, int state) /* only trigger stuff once we are done moving */ if ((m_iState == DOORSTATE_RAISED) || (m_iState == DOORSTATE_LOWERED)) { - if (m_flDelay > 0) { - CBaseTrigger::UseTargets_Delay(act, TRIG_TOGGLE, m_flDelay); - } else { - CBaseTrigger::UseTargets(act, TRIG_TOGGLE); - } + UseTargets(act, TRIG_TOGGLE, m_flDelay); } if (state == TRIG_OFF) { diff --git a/src/gs-entbase/server/func_door_rotating.cpp b/src/gs-entbase/server/func_door_rotating.cpp index 80427ef9..0fb89c58 100644 --- a/src/gs-entbase/server/func_door_rotating.cpp +++ b/src/gs-entbase/server/func_door_rotating.cpp @@ -223,12 +223,7 @@ void func_door_rotating::Trigger(entity act, int state) Away(); } - - if (m_flDelay) { - CBaseTrigger::UseTargets_Delay(act, TRIG_TOGGLE, m_flDelay); - } else { - CBaseTrigger::UseTargets(act, TRIG_TOGGLE); - } + UseTargets(act, TRIG_TOGGLE, m_flDelay); } void func_door_rotating::Use(void) diff --git a/src/gs-entbase/server/func_rot_button.cpp b/src/gs-entbase/server/func_rot_button.cpp index 37ef43ae..62937109 100644 --- a/src/gs-entbase/server/func_rot_button.cpp +++ b/src/gs-entbase/server/func_rot_button.cpp @@ -74,11 +74,7 @@ class func_rot_button:CBaseTrigger void func_rot_button::TriggerTargets(void) { - if (m_flDelay > 0) { - CBaseTrigger::UseTargets_Delay(this, TRIG_TOGGLE, m_flDelay); - } else { - CBaseTrigger::UseTargets(this, TRIG_TOGGLE); - } + UseTargets(this, TRIG_TOGGLE, m_flDelay); } void diff --git a/src/gs-entbase/server/func_tank.cpp b/src/gs-entbase/server/func_tank.cpp index 3738724c..916b2853 100644 --- a/src/gs-entbase/server/func_tank.cpp +++ b/src/gs-entbase/server/func_tank.cpp @@ -165,7 +165,7 @@ func_tank::PlayerInput(void) spos += v_right * m_vecTipPos[1]; spos += v_up * m_vecTipPos[2]; - CBaseTrigger::UseTargets(this, TRIG_ON); + UseTargets(this, TRIG_ON, m_flDelay); func_tank_shootsingle(m_eDriver, spos, m_vecSpread, m_iDamage); m_flFireTime = time + m_flFireRate; diff --git a/src/gs-entbase/server/func_tankmortar.cpp b/src/gs-entbase/server/func_tankmortar.cpp index 7ba0a27d..c3b5b20e 100644 --- a/src/gs-entbase/server/func_tankmortar.cpp +++ b/src/gs-entbase/server/func_tankmortar.cpp @@ -184,7 +184,7 @@ func_tankmortar::PlayerInput(void) SpriteSmoke(spos); SpriteFlash(spos); - CBaseTrigger::UseTargets(this, TRIG_ON); + UseTargets(this, TRIG_ON, m_flDelay); m_flFireTime = time + m_flFireRate; } diff --git a/src/gs-entbase/server/monstermaker.cpp b/src/gs-entbase/server/monstermaker.cpp index 66195f26..6a5a0f16 100644 --- a/src/gs-entbase/server/monstermaker.cpp +++ b/src/gs-entbase/server/monstermaker.cpp @@ -135,7 +135,7 @@ monstermaker::Spawner(void) m_iMonsterSpawned++; if (target) { - UseTargets(this, TRIG_TOGGLE); + UseTargets(this, TRIG_TOGGLE, 0.0f); } /* inherit the monsterclip flag */ diff --git a/src/gs-entbase/server/multi_manager.cpp b/src/gs-entbase/server/multi_manager.cpp index c8a8d354..86f7e65c 100644 --- a/src/gs-entbase/server/multi_manager.cpp +++ b/src/gs-entbase/server/multi_manager.cpp @@ -56,7 +56,7 @@ multi_manager::Trigger(entity act, int state) dprint(sprintf("^2%s::^3Trigger^7: %s (%s)\n", this.classname, wow.target, eFind.classname)); - CBaseTrigger::UseTargets(wow.m_eActivator, TRIG_TOGGLE); + CBaseTrigger::UseTargets(wow.m_eActivator, TRIG_TOGGLE, 0.0f); } if (GetMaster() == FALSE) diff --git a/src/gs-entbase/server/multisource.cpp b/src/gs-entbase/server/multisource.cpp index 5bcda43b..b3d63388 100644 --- a/src/gs-entbase/server/multisource.cpp +++ b/src/gs-entbase/server/multisource.cpp @@ -18,6 +18,7 @@ "targetname" Name "target" Target when triggered. "killtarget" Target to kill when triggered. +"delay" Delay until we trigger our target STUB! */ @@ -73,7 +74,7 @@ multisource::Trigger(entity act, int unused) dprint(sprintf("[^1MULTISOURCE^7] %s is now active.\n", targetname)); m_iValue = TRUE; - CBaseTrigger::UseTargets(act, TRIG_TOGGLE); + UseTargets(act, TRIG_TOGGLE, m_flDelay); } void diff --git a/src/gs-entbase/server/random_trigger.cpp b/src/gs-entbase/server/random_trigger.cpp index 31a3478e..a6ca7ba2 100644 --- a/src/gs-entbase/server/random_trigger.cpp +++ b/src/gs-entbase/server/random_trigger.cpp @@ -53,7 +53,7 @@ random_trigger::Trigger(entity act, int state) return; r = time + m_flMinTime + random(m_flRandMin, m_flRandMax); - CBaseTrigger::UseTargets_Delay(other, TRIG_TOGGLE, r); + UseTargets(other, TRIG_TOGGLE, r); } void diff --git a/src/gs-entbase/server/trigger_auto.cpp b/src/gs-entbase/server/trigger_auto.cpp index fb9f5b95..74a17118 100644 --- a/src/gs-entbase/server/trigger_auto.cpp +++ b/src/gs-entbase/server/trigger_auto.cpp @@ -42,7 +42,7 @@ trigger_auto::Processing(void) // This is weird, because ents may not be spawned yet. // However, Half-Life doesn't care about this, either. // So why should we? - CBaseTrigger::UseTargets_Delay(this, m_iTriggerState, m_flDelay); + UseTargets(this, m_iTriggerState, m_flDelay); if (spawnflags & 1) { dprint(sprintf("^2trigger_auto::^3think^7: %s triggerer removed self\n", target)); diff --git a/src/gs-entbase/server/trigger_autosave.cpp b/src/gs-entbase/server/trigger_autosave.cpp index 617773b4..1046977c 100644 --- a/src/gs-entbase/server/trigger_autosave.cpp +++ b/src/gs-entbase/server/trigger_autosave.cpp @@ -48,13 +48,9 @@ trigger_autosave::touch(void) //readcmd("save autosave\n"); Hide(); + SetSolid(SOLID_NOT); - if (m_flDelay > 0) { - CBaseTrigger::UseTargets_Delay(other, TRIG_TOGGLE, m_flDelay); - } else { - CBaseTrigger::UseTargets(other, TRIG_TOGGLE); - } - solid = SOLID_NOT; + CBaseTrigger::UseTargets(other, TRIG_TOGGLE, m_flDelay); } void diff --git a/src/gs-entbase/server/trigger_camera.cpp b/src/gs-entbase/server/trigger_camera.cpp index 30e7c3cb..130028de 100644 --- a/src/gs-entbase/server/trigger_camera.cpp +++ b/src/gs-entbase/server/trigger_camera.cpp @@ -37,11 +37,7 @@ class trigger_camera:CBaseTrigger void trigger_camera::Trigger(entity act, int state) { - if (m_flDelay > 0) { - CBaseTrigger::UseTargets_Delay(act, TRIG_TOGGLE, m_flDelay); - } else { - CBaseTrigger::UseTargets(act, TRIG_TOGGLE); - } + UseTargets(act, TRIG_TOGGLE, m_flDelay); if (m_strMoveTo) { entity e = find(world, ::targetname, m_strMoveTo); diff --git a/src/gs-entbase/server/trigger_counter.cpp b/src/gs-entbase/server/trigger_counter.cpp index afd4e8a4..1893ac02 100644 --- a/src/gs-entbase/server/trigger_counter.cpp +++ b/src/gs-entbase/server/trigger_counter.cpp @@ -69,14 +69,10 @@ trigger_counter::Trigger(entity act, int state) if (m_iCounted < m_iMaxCount) return; - solid = SOLID_NOT; /* make inactive */ + SetSolid(SOLID_NOT); /* make inactive */ m_iValue = 1; - if (m_flDelay > 0) { - CBaseTrigger::UseTargets_Delay(act, TRIG_TOGGLE, m_flDelay); - } else { - CBaseTrigger::UseTargets(act, TRIG_TOGGLE); - } + UseTargets(act, TRIG_TOGGLE, m_flDelay); } void diff --git a/src/gs-entbase/server/trigger_hurt.cpp b/src/gs-entbase/server/trigger_hurt.cpp index addeda02..4a09b31c 100644 --- a/src/gs-entbase/server/trigger_hurt.cpp +++ b/src/gs-entbase/server/trigger_hurt.cpp @@ -87,19 +87,11 @@ trigger_hurt::touch(void) if (spawnflags & SF_HURT_FIREONPLAYER) { if (other.flags & FL_CLIENT) { eActivator = other; - if (m_flDelay > 0) { - CBaseTrigger::UseTargets_Delay(other, TRIG_TOGGLE, m_flDelay); - } else { - CBaseTrigger::UseTargets(other, TRIG_TOGGLE); - } + UseTargets(other, TRIG_TOGGLE, m_flDelay); } } else { eActivator = other; - if (m_flDelay > 0) { - CBaseTrigger::UseTargets_Delay(other, TRIG_TOGGLE, m_flDelay); - } else { - CBaseTrigger::UseTargets(other, TRIG_TOGGLE); - } + UseTargets(other, TRIG_TOGGLE, m_flDelay); } } diff --git a/src/gs-entbase/server/trigger_look.cpp b/src/gs-entbase/server/trigger_look.cpp index 86000502..d421d100 100644 --- a/src/gs-entbase/server/trigger_look.cpp +++ b/src/gs-entbase/server/trigger_look.cpp @@ -89,12 +89,8 @@ trigger_look::Touch(void) } /* trigger and disable entity, for now */ - if (m_flDelay > 0) { - UseTargets_Delay(other, TRIG_TOGGLE, m_flDelay); - } else { - UseTargets(other, TRIG_TOGGLE); - } - solid = SOLID_NOT; + SetSolid(SOLID_NOT); + UseTargets(other, TRIG_TOGGLE, m_flDelay); } void diff --git a/src/gs-entbase/server/trigger_multiple.cpp b/src/gs-entbase/server/trigger_multiple.cpp index c0ad944e..ce1d2d67 100644 --- a/src/gs-entbase/server/trigger_multiple.cpp +++ b/src/gs-entbase/server/trigger_multiple.cpp @@ -69,11 +69,7 @@ trigger_multiple::touch(void) } /* legacy */ - if (m_flDelay > 0) { - UseTargets_Delay(other, TRIG_TOGGLE, m_flDelay); - } else { - UseTargets(other, TRIG_TOGGLE); - } + UseTargets(other, TRIG_TOGGLE, m_flDelay); /* This is effectively a trigger_once...*/ if (m_flWait != -1) { diff --git a/src/gs-entbase/server/trigger_once.cpp b/src/gs-entbase/server/trigger_once.cpp index f7967e3e..325a3a52 100644 --- a/src/gs-entbase/server/trigger_once.cpp +++ b/src/gs-entbase/server/trigger_once.cpp @@ -62,11 +62,7 @@ trigger_once::touch(void) return; } - if (m_flDelay > 0) { - CBaseTrigger::UseTargets_Delay(other, TRIG_TOGGLE, m_flDelay); - } else { - CBaseTrigger::UseTargets(other, TRIG_TOGGLE); - } + UseTargets(other, TRIG_TOGGLE, m_flDelay); } void diff --git a/src/gs-entbase/server/trigger_relay.cpp b/src/gs-entbase/server/trigger_relay.cpp index 24ccc9f4..aab66e71 100644 --- a/src/gs-entbase/server/trigger_relay.cpp +++ b/src/gs-entbase/server/trigger_relay.cpp @@ -52,11 +52,7 @@ trigger_relay::Trigger(entity act, int state) if (spawnflags & TRLY_ONCE) m_iEnabled = FALSE; - if (m_flDelay > 0) { - CBaseTrigger::UseTargets_Delay(act, m_iTriggerState, m_flDelay); - } else { - CBaseTrigger::UseTargets(act, m_iTriggerState); - } + UseTargets(act, m_iTriggerState, m_flDelay); } void diff --git a/src/server/cstrike/item_suit.cpp b/src/server/cstrike/item_suit.cpp index e7d02756..6af786b5 100644 --- a/src/server/cstrike/item_suit.cpp +++ b/src/server/cstrike/item_suit.cpp @@ -37,7 +37,7 @@ void item_suit::touch(void) sound(other, CHAN_ITEM, "items/tr_kevlar.wav", 1, ATTN_NORM); pl.g_items |= ITEM_SUIT; - CBaseTrigger::UseTargets(other, TRIG_TOGGLE); + UseTargets(other, TRIG_TOGGLE, m_flDelay); if (cvar("sv_playerslots") == 1) { remove(self); diff --git a/src/server/valve/item_longjump.cpp b/src/server/valve/item_longjump.cpp index a09b9381..4a5184f3 100644 --- a/src/server/valve/item_longjump.cpp +++ b/src/server/valve/item_longjump.cpp @@ -47,7 +47,7 @@ void item_longjump::touch(void) sound(other, CHAN_VOICE, "fvox/powermove_on.wav", 1, ATTN_NORM); pl.g_items |= ITEM_LONGJUMP; - CBaseTrigger::UseTargets(other, TRIG_TOGGLE); + UseTargets(other, TRIG_TOGGLE, m_flDelay); if (real_owner || cvar("sv_playerslots") == 1) { remove(self); diff --git a/src/server/valve/item_suit.cpp b/src/server/valve/item_suit.cpp index c839a089..9f2487cf 100644 --- a/src/server/valve/item_suit.cpp +++ b/src/server/valve/item_suit.cpp @@ -54,7 +54,7 @@ void item_suit::touch(void) UseOutput(other, m_strOnPlayerTouch); return; } else { - CBaseTrigger::UseTargets(other, TRIG_TOGGLE); + UseTargets(other, TRIG_TOGGLE, m_flDelay); } if (real_owner || cvar("sv_playerslots") == 1) { diff --git a/src/server/valve/items.cpp b/src/server/valve/items.cpp index e86895d9..b635066d 100644 --- a/src/server/valve/items.cpp +++ b/src/server/valve/items.cpp @@ -28,7 +28,7 @@ void item_pickup::touch(void) Logging_Pickup(other, this, __NULL__); Sound_Play(other, CHAN_ITEM, "weapon.pickup"); - CBaseTrigger::UseTargets(other, TRIG_TOGGLE); + UseTargets(other, TRIG_TOGGLE, m_flDelay); if (real_owner || m_iWasDropped == 1 || cvar("sv_playerslots") == 1) { remove(self);