X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fserver%2Fg_triggers.qc;h=a1ee74d4300439589790a925384997779f6c7de0;hb=19b6e4fe0563a322e4f2295d4c535933a9834f09;hp=08964655d9b048faf1d0e696323dbe303c805e5d;hpb=a271dac885ffbfb3f944f942970333cfeb2fb4f8;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/server/g_triggers.qc b/qcsrc/server/g_triggers.qc index 08964655d..a1ee74d43 100644 --- a/qcsrc/server/g_triggers.qc +++ b/qcsrc/server/g_triggers.qc @@ -413,6 +413,9 @@ void spawnfunc_trigger_counter() .float triggerhurttime; void trigger_hurt_touch() { + if (self.active != ACTIVE_ACTIVE) + return; + // only do the EXACTTRIGGER_TOUCH checks when really needed (saves some cpu) if (other.iscreature) { @@ -455,6 +458,7 @@ entity trigger_hurt_first; void spawnfunc_trigger_hurt() { EXACTTRIGGER_INIT; + self.active = ACTIVE_ACTIVE; self.touch = trigger_hurt_touch; if (!self.dmg) self.dmg = 1000; @@ -493,6 +497,9 @@ float tracebox_hits_trigger_hurt(vector start, vector mi, vector ma, vector end) .float triggerhealtime; void trigger_heal_touch() { + if (self.active != ACTIVE_ACTIVE) + return; + // only do the EXACTTRIGGER_TOUCH checks when really needed (saves some cpu) if (other.iscreature) { @@ -514,6 +521,8 @@ void trigger_heal_touch() void spawnfunc_trigger_heal() { + self.active = ACTIVE_ACTIVE; + EXACTTRIGGER_INIT; self.touch = trigger_heal_touch; if (!self.health) @@ -1207,6 +1216,9 @@ void trigger_impulse_touch1() float pushdeltatime; float str; + if (self.active != ACTIVE_ACTIVE) + return; + // FIXME: Better checking for what to push and not. if not(other.iscreature) if (other.classname != "corpse") @@ -1258,6 +1270,9 @@ void trigger_impulse_touch2() { float pushdeltatime; + if (self.active != ACTIVE_ACTIVE) + return; + // FIXME: Better checking for what to push and not. if not(other.iscreature) if (other.classname != "corpse") @@ -1295,6 +1310,9 @@ void trigger_impulse_touch3() float pushdeltatime; float str; + if (self.active != ACTIVE_ACTIVE) + return; + // FIXME: Better checking for what to push and not. if not(other.iscreature) if (other.classname != "corpse") @@ -1356,6 +1374,8 @@ in directional and sperical mode. For damper/accelerator mode this is not nesses void spawnfunc_trigger_impulse() { + self.active = ACTIVE_ACTIVE; + EXACTTRIGGER_INIT; if(self.radius) { @@ -1932,3 +1952,64 @@ void spawnfunc_trigger_magicear() // target: // what to trigger } + +void relay_activators_use() +{ + entity trg, os; + + os = self; + + for(trg = world; (trg = find(trg, targetname, os.target)); ) + { + self = trg; + if (trg.setactive) + trg.setactive(os.cnt); + else + { + //bprint("Not using setactive\n"); + if(os.cnt == ACTIVE_TOGGLE) + if(trg.active == ACTIVE_ACTIVE) + trg.active = ACTIVE_NOT; + else + trg.active = ACTIVE_ACTIVE; + else + trg.active = os.cnt; + } + } + self = os; +} + +void spawnfunc_relay_activate() +{ + self.cnt = ACTIVE_ACTIVE; + self.use = relay_activators_use; +} + +void spawnfunc_relay_deactivate() +{ + self.cnt = ACTIVE_NOT; + self.use = relay_activators_use; +} + +void spawnfunc_relay_activatetoggle() +{ + self.cnt = ACTIVE_TOGGLE; + self.use = relay_activators_use; +} + +.string chmap, gametype; +void spawnfunc_target_changelevel_use() +{ + if(self.gametype != "") + MapInfo_SwitchGameType(MapInfo_Type_FromString(self.gametype)); + + if (self.chmap == "") + localcmd("endmatch\n"); + else + localcmd(strcat("changelevel ", self.chmap, "\n")); +}; + +void spawnfunc_target_changelevel() +{ + self.use = spawnfunc_target_changelevel_use; +};