X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Ftriggers%2Fmisc%2Fteleport_dest.qc;h=33401930d8d929c836ee4f16273ae5aa6d90d669;hb=847371860eeb17f6a51aa1fa532aa997cb2d760b;hp=b80ce827d7dbf54da3b263764fbe1748e12747e4;hpb=777dc5e23d7512c3e33576884d8d200f244d3006;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/triggers/misc/teleport_dest.qc b/qcsrc/common/triggers/misc/teleport_dest.qc index b80ce827d..33401930d 100644 --- a/qcsrc/common/triggers/misc/teleport_dest.qc +++ b/qcsrc/common/triggers/misc/teleport_dest.qc @@ -1,6 +1,36 @@ +REGISTER_NET_LINKED(ENT_CLIENT_TELEPORT_DEST) + #ifdef SVQC -void spawnfunc_info_teleport_destination (void) +bool teleport_dest_send(entity this, entity to, int sf) +{ + WriteHeader(MSG_ENTITY, ENT_CLIENT_TELEPORT_DEST); + WriteByte(MSG_ENTITY, sf); + + if(sf & 1) + { + WriteByte(MSG_ENTITY, this.cnt); + WriteCoord(MSG_ENTITY, this.speed); + WriteString(MSG_ENTITY, this.targetname); + WriteCoord(MSG_ENTITY, this.origin_x); + WriteCoord(MSG_ENTITY, this.origin_y); + WriteCoord(MSG_ENTITY, this.origin_z); + + WriteAngle(MSG_ENTITY, this.mangle_x); + WriteAngle(MSG_ENTITY, this.mangle_y); + WriteAngle(MSG_ENTITY, this.mangle_z); + } + + return true; +} + +void teleport_dest_link() +{SELFPARAM(); + Net_LinkEntity(self, false, 0, teleport_dest_send); + self.SendFlags |= 1; // update +} + +spawnfunc(info_teleport_destination) { self.classname = "info_teleport_destination"; @@ -15,16 +45,58 @@ void spawnfunc_info_teleport_destination (void) } else objerror ("^3Teleport destination without a targetname"); + + teleport_dest_link(); } -void spawnfunc_misc_teleporter_dest (void) +spawnfunc(misc_teleporter_dest) { - spawnfunc_info_teleport_destination(); + spawnfunc_info_teleport_destination(this); } -void spawnfunc_target_teleporter (void) +spawnfunc(target_teleporter) { - spawnfunc_info_teleport_destination(); + spawnfunc_info_teleport_destination(this); +} + +#elif defined(CSQC) + +void teleport_dest_remove(entity this) +{ + //if(self.classname) + //strunzone(self.classname); + //self.classname = string_null; + + if(this.targetname) + strunzone(this.targetname); + this.targetname = string_null; +} + +NET_HANDLE(ENT_CLIENT_TELEPORT_DEST, bool isnew) +{ + int sf = ReadByte(); + + if(sf & 1) + { + self.classname = "info_teleport_destination"; + self.cnt = ReadByte(); + self.speed = ReadCoord(); + self.targetname = strzone(ReadString()); + self.origin_x = ReadCoord(); + self.origin_y = ReadCoord(); + self.origin_z = ReadCoord(); + + self.mangle_x = ReadAngle(); + self.mangle_y = ReadAngle(); + self.mangle_z = ReadAngle(); + + setorigin(self, self.origin); + + self.drawmask = MASK_NORMAL; + self.entremove = teleport_dest_remove; + } + + return = true; } #endif