#include "counter.qh"
-#ifdef SVQC
-void counter_reset(entity this);
+#ifdef SVQC
void counter_use(entity this, entity actor, entity trigger)
{
+ if(this.active != ACTIVE_ACTIVE)
+ return;
+
entity store = this;
if(this.spawnflags & COUNTER_PER_PLAYER)
{
if(!IS_PLAYER(actor))
return;
- store = actor;
+ entity mycounter = NULL;
+ IL_EACH(g_counters, it.realowner == actor && it.owner == this,
+ {
+ mycounter = it;
+ break;
+ });
+ if(!mycounter)
+ {
+ mycounter = new_pure(counter);
+ IL_PUSH(g_counters, mycounter);
+ mycounter.owner = this;
+ mycounter.realowner = actor;
+ mycounter.reset = counter_reset; // NOTE: this may be useless as the player deletes their counters upon respawning
+ mycounter.counter_cnt = 0;
+ }
+ store = mycounter;
}
store.counter_cnt += 1;
if(this.respawntime)
{
- setthink(this, counter_reset);
- this.nextthink = time + this.respawntime;
+ setthink(store, counter_reset);
+ store.nextthink = time + this.respawntime;
}
}
else
setthink(this, func_null);
this.nextthink = 0;
this.counter_cnt = 0;
+ this.active = ACTIVE_ACTIVE;
}
/*QUAKED spawnfunc_trigger_counter (.5 .5 .5) ? nomessage COUNTER_FIRE_AT_COUNT
this.counter_cnt = 0;
this.use = counter_use;
this.reset = counter_reset;
+ this.active = ACTIVE_ACTIVE;
}
#endif