#include "heal.qh" #ifdef SVQC .float triggerhealtime; void trigger_heal_touch(entity this, entity toucher) { if (this.active != ACTIVE_ACTIVE) return; // only do the EXACTTRIGGER_TOUCH checks when really needed (saves some cpu) if (toucher.iscreature) { if (toucher.takedamage && !IS_DEAD(toucher) && toucher.triggerhealtime < time) { bool is_trigger = this.targetname == ""; if(is_trigger) EXACTTRIGGER_TOUCH(this, toucher); if(this.delay > 0) toucher.triggerhealtime = time + this.delay; bool playthesound = (this.spawnflags & HEAL_SOUND_ALWAYS); if (toucher.health < this.max_health) { playthesound = true; toucher.health = min(toucher.health + this.health, this.max_health); toucher.pauserothealth_finished = max(toucher.pauserothealth_finished, time + autocvar_g_balance_pause_health_rot); } if(playthesound) _sound (toucher, CH_TRIGGER, this.noise, VOL_BASE, ATTEN_NORM); } } } void trigger_heal_use(entity this, entity actor, entity trigger) { trigger_heal_touch(this, actor); } void trigger_heal_init(entity this) { this.active = ACTIVE_ACTIVE; if(!this.delay) this.delay = 1; if(!this.health) this.health = 10; if(!this.max_health) this.max_health = 200; // max health topoff for field if(this.noise == "") this.noise = "misc/mediumhealth.wav"; precache_sound(this.noise); } spawnfunc(trigger_heal) { EXACTTRIGGER_INIT; settouch(this, trigger_heal_touch); trigger_heal_init(this); } spawnfunc(target_heal) { this.use = trigger_heal_use; trigger_heal_init(this); } #endif