]> de.git.xonotic.org Git - xonotic/xonotic-data.pk3dir.git/blobdiff - qcsrc/common/triggers/misc/teleport_dest.qc
Merge branch 'master' into terencehill/min_spec_time
[xonotic/xonotic-data.pk3dir.git] / qcsrc / common / triggers / misc / teleport_dest.qc
index b80ce827d7dbf54da3b263764fbe1748e12747e4..40c7d46c42803ce65dc2411a5da2847d190791b0 100644 (file)
@@ -1,30 +1,94 @@
+#include "teleport_dest.qh"
+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)
 {
-       self.classname = "info_teleport_destination";
+       WriteHeader(MSG_ENTITY, ENT_CLIENT_TELEPORT_DEST);
+       WriteByte(MSG_ENTITY, sf);
 
-       self.mangle = self.angles;
-       self.angles = '0 0 0';
+       if(sf & 1)
+       {
+               WriteByte(MSG_ENTITY, this.cnt);
+               WriteCoord(MSG_ENTITY, this.speed);
+               WriteString(MSG_ENTITY, this.targetname);
+               WriteVector(MSG_ENTITY, this.origin);
 
-       //setorigin (self, self.origin + '0 0 27');     // To fix a mappers' habit as old as Quake
-       setorigin (self, self.origin);
+               WriteAngle(MSG_ENTITY, this.mangle_x);
+               WriteAngle(MSG_ENTITY, this.mangle_y);
+               WriteAngle(MSG_ENTITY, this.mangle_z);
+       }
+
+       return true;
+}
+
+void teleport_dest_link(entity this)
+{
+       Net_LinkEntity(this, false, 0, teleport_dest_send);
+       this.SendFlags |= 1; // update
+}
+
+spawnfunc(info_teleport_destination)
+{
+       this.classname = "info_teleport_destination";
+
+       this.mangle = this.angles;
+       this.angles = '0 0 0';
+
+       //setorigin(this, this.origin + '0 0 27');      // To fix a mappers' habit as old as Quake
+       setorigin(this, this.origin);
 
        IFTARGETED
        {
        }
        else
-               objerror ("^3Teleport destination without a targetname");
+               objerror (this, "^3Teleport destination without a targetname");
+
+       teleport_dest_link(this);
 }
 
-void spawnfunc_misc_teleporter_dest (void)
+spawnfunc(misc_teleporter_dest)
 {
-       spawnfunc_info_teleport_destination();
+       spawnfunc_info_teleport_destination(this);
 }
 
-void spawnfunc_target_teleporter (void)
+#elif defined(CSQC)
+
+void teleport_dest_remove(entity this)
+{
+       //if(this.classname)
+               //strunzone(this.classname);
+       //this.classname = string_null;
+
+       if(this.targetname)
+               strunzone(this.targetname);
+       this.targetname = string_null;
+}
+
+NET_HANDLE(ENT_CLIENT_TELEPORT_DEST, bool isnew)
 {
-       spawnfunc_info_teleport_destination();
+       int sf = ReadByte();
+
+       if(sf & 1)
+       {
+               this.classname = "info_teleport_destination";
+               this.cnt = ReadByte();
+               this.speed = ReadCoord();
+               this.targetname = strzone(ReadString());
+               this.origin = ReadVector();
+
+               this.mangle_x = ReadAngle();
+               this.mangle_y = ReadAngle();
+               this.mangle_z = ReadAngle();
+
+               setorigin(this, this.origin);
+
+               this.drawmask = MASK_NORMAL;
+               this.entremove = teleport_dest_remove;
+       }
+
+       return = true;
 }
 
 #endif