X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Ftriggers%2Ftrigger%2Fjumppads.qc;h=be3671b924db4fcb909977129ddd174f60be7e49;hb=1cbef966e133966c5b5f0f5b58fbd1a5851ed35b;hp=b14078fb41a970b3eb176002ff189e5e149b4d3d;hpb=221325d0a55851348e3397354225f04cd472d42f;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/triggers/trigger/jumppads.qc b/qcsrc/common/triggers/trigger/jumppads.qc index b14078fb4..be3671b92 100644 --- a/qcsrc/common/triggers/trigger/jumppads.qc +++ b/qcsrc/common/triggers/trigger/jumppads.qc @@ -1,11 +1,10 @@ // TODO: split target_push and put it in the target folder #ifdef SVQC -#include "../../../server/_all.qh" #include "jumppads.qh" #include "../../movetypes/movetypes.qh" void trigger_push_use() -{ +{SELFPARAM(); if(teamplay) { self.team = activator.team; @@ -14,6 +13,9 @@ void trigger_push_use() } #endif +REGISTER_NET_LINKED(ENT_CLIENT_TRIGGER_PUSH) +REGISTER_NET_LINKED(ENT_CLIENT_TARGET_PUSH) + /* trigger_push_calculatevelocity @@ -35,7 +37,7 @@ vector trigger_push_calculatevelocity(vector org, entity tgt, float ht) torg = tgt.origin + (tgt.mins + tgt.maxs) * 0.5; - grav = PHYS_GRAVITY; + grav = PHYS_GRAVITY(other); if(PHYS_ENTGRAVITY(other)) grav *= PHYS_ENTGRAVITY(other); @@ -128,8 +130,8 @@ vector trigger_push_calculatevelocity(vector org, entity tgt, float ht) } void trigger_push_touch() -{ - if (self.active == ACTIVE_NOT) +{SELFPARAM(); + if (this.active == ACTIVE_NOT) return; #ifdef SVQC @@ -137,34 +139,34 @@ void trigger_push_touch() return; #endif - if(self.team) - if(((self.spawnflags & 4) == 0) == (DIFF_TEAM(self, other))) + if(this.team) + if(((this.spawnflags & 4) == 0) == (DIFF_TEAM(this, other))) return; EXACTTRIGGER_TOUCH; - if(self.enemy) + if(this.enemy) { - other.velocity = trigger_push_calculatevelocity(other.origin, self.enemy, self.height); + other.velocity = trigger_push_calculatevelocity(other.origin, this.enemy, this.height); other.move_velocity = other.velocity; } - else if(self.target) + else if(this.target) { entity e; RandomSelection_Init(); - for(e = world; (e = find(e, targetname, self.target)); ) + for(e = world; (e = find(e, targetname, this.target)); ) { if(e.cnt) RandomSelection_Add(e, 0, string_null, e.cnt, 1); else RandomSelection_Add(e, 0, string_null, 1, 1); } - other.velocity = trigger_push_calculatevelocity(other.origin, RandomSelection_chosen_ent, self.height); + other.velocity = trigger_push_calculatevelocity(other.origin, RandomSelection_chosen_ent, this.height); other.move_velocity = other.velocity; } else { - other.velocity = self.movedir; + other.velocity = this.movedir; other.move_velocity = other.velocity; } @@ -178,29 +180,29 @@ void trigger_push_touch() // reset tracking of oldvelocity for impact damage (sudden velocity changes) other.oldvelocity = other.velocity; - if(self.pushltime < time) // prevent "snorring" sound when a player hits the jumppad more than once + if(this.pushltime < time) // prevent "snorring" sound when a player hits the jumppad more than once { // flash when activated - Send_Effect("jumppad_activate", other.origin, other.velocity, 1); - sound (other, CH_TRIGGER, self.noise, VOL_BASE, ATTEN_NORM); - self.pushltime = time + 0.2; + Send_Effect(EFFECT_JUMPPAD, other.origin, other.velocity, 1); + _sound (other, CH_TRIGGER, this.noise, VOL_BASE, ATTEN_NORM); + this.pushltime = time + 0.2; } if(IS_REAL_CLIENT(other) || IS_BOT_CLIENT(other)) { bool found = false; for(int i = 0; i < other.jumppadcount && i < NUM_JUMPPADSUSED; ++i) - if(other.(jumppadsused[i]) == self) + if(other.(jumppadsused[i]) == this) found = true; if(!found) { - other.(jumppadsused[other.jumppadcount % NUM_JUMPPADSUSED]) = self; + other.(jumppadsused[other.jumppadcount % NUM_JUMPPADSUSED]) = this; other.jumppadcount = other.jumppadcount + 1; } if(IS_REAL_CLIENT(other)) { - if(self.message) - centerprint(other, self.message); + if(this.message) + centerprint(other, this.message); } else other.lastteleporttime = time; @@ -216,14 +218,10 @@ void trigger_push_touch() other.istypefrag = 0; } - if(self.enemy.target) + if(this.enemy.target) { - entity oldself; - oldself = self; activator = other; - self = self.enemy; - SUB_UseTargets(); - self = oldself; + WITH(entity, self, this.enemy, SUB_UseTargets()); } if (other.flags & FL_PROJECTILE) @@ -243,11 +241,11 @@ void trigger_push_touch() UpdateCSQCProjectile(other); } - if (self.spawnflags & PUSH_ONCE) + if (this.spawnflags & PUSH_ONCE) { - self.touch = func_null; - self.think = SUB_Remove; - self.nextthink = time; + this.touch = func_null; + this.think = SUB_Remove_self; + this.nextthink = time; } #endif } @@ -257,7 +255,7 @@ void trigger_push_link(); void trigger_push_updatelink(); #endif void trigger_push_findtarget() -{ +{SELFPARAM(); entity t; vector org; @@ -315,14 +313,14 @@ void trigger_push_findtarget() } trigger_push_link(); - defer(0.1, trigger_push_updatelink); + defer(self, 0.1, trigger_push_updatelink); #endif } #ifdef SVQC float trigger_push_send(entity to, float sf) -{ - WriteByte(MSG_ENTITY, ENT_CLIENT_TRIGGER_PUSH); +{SELFPARAM(); + WriteHeader(MSG_ENTITY, ENT_CLIENT_TRIGGER_PUSH); WriteByte(MSG_ENTITY, sf); if(sf & 1) @@ -345,7 +343,7 @@ float trigger_push_send(entity to, float sf) } void trigger_push_updatelink() -{ +{SELFPARAM(); self.SendFlags |= 1; } @@ -367,9 +365,9 @@ void trigger_push_link() * values to target a point on the ceiling. * movedir: if target is not set, this * speed * 10 is the velocity to be reached. */ -void spawnfunc_trigger_push() +spawnfunc(trigger_push) { - SetMovedir (); + SetMovedir(self); EXACTTRIGGER_INIT; @@ -391,9 +389,9 @@ void spawnfunc_trigger_push() } -float target_push_send(entity to, float sf) +bool target_push_send(entity this, entity to, float sf) { - WriteByte(MSG_ENTITY, ENT_CLIENT_TARGET_PUSH); + WriteHeader(MSG_ENTITY, ENT_CLIENT_TARGET_PUSH); WriteByte(MSG_ENTITY, self.cnt); WriteString(MSG_ENTITY, self.targetname); @@ -405,20 +403,20 @@ float target_push_send(entity to, float sf) } void target_push_link() -{ - Net_LinkEntity(self, false, 0, target_push_send); - self.SendFlags |= 1; // update +{SELFPARAM(); + //Net_LinkEntity(self, false, 0, target_push_send); + //self.SendFlags |= 1; // update } -void spawnfunc_target_push() { target_push_link(); } -void spawnfunc_info_notnull() { target_push_link(); } -void spawnfunc_target_position() { target_push_link(); } +spawnfunc(target_push) { target_push_link(); } +spawnfunc(info_notnull) { target_push_link(); } +spawnfunc(target_position) { make_pure(this); target_push_link(); } #endif #ifdef CSQC -void ent_trigger_push() +NET_HANDLE(ENT_CLIENT_TRIGGER_PUSH, bool isnew) { float sf = ReadByte(); @@ -446,10 +444,11 @@ void ent_trigger_push() self.team = ReadByte(); self.active = ReadByte(); } + return true; } void target_push_remove() -{ +{SELFPARAM(); if(self.classname) strunzone(self.classname); self.classname = string_null; @@ -459,7 +458,7 @@ void target_push_remove() self.targetname = string_null; } -void ent_target_push() +NET_HANDLE(ENT_CLIENT_TARGET_PUSH, bool isnew) { self.classname = "push_target"; self.cnt = ReadByte(); @@ -467,6 +466,9 @@ void ent_target_push() self.origin_x = ReadCoord(); self.origin_y = ReadCoord(); self.origin_z = ReadCoord(); + + return = true; + setorigin(self, self.origin); self.drawmask = MASK_NORMAL;