From 8dce154dd9bd2b3719210561da766d01b06567ff Mon Sep 17 00:00:00 2001 From: Mario Date: Wed, 31 Jan 2018 21:56:03 +1000 Subject: [PATCH] Clean up trigger_counter's code so it doesn't abuse trigger_multiple's functions (probably fixes some weird bugs), also give it a respawntime key for reactivating the counter --- qcsrc/common/triggers/trigger/counter.qc | 33 ++++++++++++++++-------- 1 file changed, 22 insertions(+), 11 deletions(-) diff --git a/qcsrc/common/triggers/trigger/counter.qc b/qcsrc/common/triggers/trigger/counter.qc index 8246aed7c..16490fae5 100644 --- a/qcsrc/common/triggers/trigger/counter.qc +++ b/qcsrc/common/triggers/trigger/counter.qc @@ -1,5 +1,7 @@ #include "counter.qh" #ifdef SVQC +void counter_reset(entity this); + void counter_use(entity this, entity actor, entity trigger) { this.count -= 1; @@ -8,38 +10,47 @@ void counter_use(entity this, entity actor, entity trigger) if (this.count == 0) { - if(IS_PLAYER(actor) && (this.spawnflags & SPAWNFLAG_NOMESSAGE) == 0) + if(IS_PLAYER(actor) && !(this.spawnflags & SPAWNFLAG_NOMESSAGE)) Send_Notification(NOTIF_ONE, actor, MSG_CENTER, CENTER_SEQUENCE_COMPLETED); - this.enemy = actor; - multi_trigger(this); + SUB_UseTargets(this, actor, trigger); + + if(this.respawntime) + { + setthink(this, counter_reset); + this.nextthink = time + this.respawntime; + } } else { - if(IS_PLAYER(actor) && (this.spawnflags & SPAWNFLAG_NOMESSAGE) == 0) - if(this.count >= 4) - Send_Notification(NOTIF_ONE, actor, MSG_CENTER, CENTER_SEQUENCE_COUNTER); - else - Send_Notification(NOTIF_ONE, actor, MSG_CENTER, CENTER_SEQUENCE_COUNTER_FEWMORE, this.count); + if(IS_PLAYER(actor) && !(this.spawnflags & SPAWNFLAG_NOMESSAGE)) + { + if(this.count >= 4) + Send_Notification(NOTIF_ONE, actor, MSG_CENTER, CENTER_SEQUENCE_COUNTER); + else + Send_Notification(NOTIF_ONE, actor, MSG_CENTER, CENTER_SEQUENCE_COUNTER_FEWMORE, this.count); + } } } void counter_reset(entity this) { + setthink(this, func_null); + this.nextthink = 0; this.count = this.cnt; - multi_reset(this); } /*QUAKED spawnfunc_trigger_counter (.5 .5 .5) ? nomessage Acts as an intermediary for an action that takes multiple inputs. -If nomessage is not set, t will print "1 more.. " etc when triggered and "sequence complete" when finished. +If nomessage is not set, it will print "1 more.. " etc when triggered and "sequence complete" when finished. + +If respawntime is set, it will re-enable itself after the time once the sequence has been completed After the counter has been triggered "count" times (default 2), it will fire all of it's targets and remove itself. */ spawnfunc(trigger_counter) { - this.wait = -1; if (!this.count) this.count = 2; this.cnt = this.count; -- 2.39.2