REGISTER_NET_LINKED(ENT_CLIENT_TRIGGER_TELEPORT)
#ifdef SVQC
-void trigger_teleport_use()
-{SELFPARAM();
+void trigger_teleport_use(entity this, entity actor, entity trigger)
+{
if(teamplay)
- self.team = activator.team;
+ this.team = actor.team;
#ifdef SVQC
- self.SendFlags |= SF_TRIGGER_UPDATE;
+ this.SendFlags |= SF_TRIGGER_UPDATE;
#endif
}
#endif
-void Teleport_Touch ()
-{SELFPARAM();
- if (self.active != ACTIVE_ACTIVE)
+void Teleport_Touch(entity this, entity toucher)
+{
+ if (this.active != ACTIVE_ACTIVE)
return;
#ifdef SVQC
- if (!other.teleportable)
+ if (!toucher.teleportable)
return;
- if(other.vehicle)
- if(!other.vehicle.teleportable)
+ if(toucher.vehicle)
+ if(!toucher.vehicle.teleportable)
return;
- if(IS_TURRET(other))
+ if(IS_TURRET(toucher))
+ return;
+#elif defined(CSQC)
+ if(!IS_PLAYER(toucher))
return;
#endif
- if(PHYS_DEAD(other))
+ if(IS_DEAD(toucher))
return;
- if(self.team)
- if(((self.spawnflags & 4) == 0) == (DIFF_TEAM(this, other)))
+ if(this.team)
+ if(((this.spawnflags & 4) == 0) == (DIFF_TEAM(this, toucher)))
return;
- EXACTTRIGGER_TOUCH;
+ EXACTTRIGGER_TOUCH(this, toucher);
#ifdef SVQC
- if(IS_PLAYER(other))
- RemoveGrapplingHook(other);
+ if(IS_PLAYER(toucher))
+ RemoveGrapplingHook(toucher);
#endif
entity e;
- e = Simple_TeleportPlayer(self, other);
+ e = Simple_TeleportPlayer(this, toucher);
#ifdef SVQC
- activator = other;
- string s = self.target; self.target = string_null;
- SUB_UseTargets();
- if (!self.target) self.target = s;
+ string s = this.target; this.target = string_null;
+ SUB_UseTargets(this, toucher, toucher); // TODO: should we be using toucher for trigger too?
+ if (!this.target) this.target = s;
- WITH(entity, self, e, SUB_UseTargets());
+ SUB_UseTargets(e, toucher, toucher);
#endif
}
#ifdef SVQC
-float trigger_teleport_send(entity to, float sf)
-{SELFPARAM();
+float trigger_teleport_send(entity this, entity to, float sf)
+{
WriteHeader(MSG_ENTITY, ENT_CLIENT_TRIGGER_TELEPORT);
- int f = 0;
- if(self.warpzone_isboxy)
- BITSET_ASSIGN(f, 1);
- if(self.origin != '0 0 0')
- BITSET_ASSIGN(f, 4);
- WriteByte(MSG_ENTITY, f);
-
- if(f & 4)
- {
- WriteCoord(MSG_ENTITY, self.origin.x);
- WriteCoord(MSG_ENTITY, self.origin.y);
- WriteCoord(MSG_ENTITY, self.origin.z);
- }
+ WriteByte(MSG_ENTITY, this.team);
+ WriteInt24_t(MSG_ENTITY, this.spawnflags);
+ WriteByte(MSG_ENTITY, this.active);
+ WriteCoord(MSG_ENTITY, this.speed);
- WriteShort(MSG_ENTITY, self.modelindex);
- WriteCoord(MSG_ENTITY, self.mins.x);
- WriteCoord(MSG_ENTITY, self.mins.y);
- WriteCoord(MSG_ENTITY, self.mins.z);
- WriteCoord(MSG_ENTITY, self.maxs.x);
- WriteCoord(MSG_ENTITY, self.maxs.y);
- WriteCoord(MSG_ENTITY, self.maxs.z);
- WriteByte(MSG_ENTITY, bound(1, self.scale * 16, 255));
- WriteByte(MSG_ENTITY, self.team);
- WriteInt24_t(MSG_ENTITY, self.spawnflags);
- WriteByte(MSG_ENTITY, self.active);
- WriteCoord(MSG_ENTITY, self.speed);
-
- trigger_common_write(true);
+ trigger_common_write(this, true);
return true;
}
void trigger_teleport_link(entity this)
{
- this.SendEntity = trigger_teleport_send;
- this.SendFlags = 0xFFFFFF;
+ //trigger_link(this, trigger_teleport_send);
}
spawnfunc(trigger_teleport)
{
- self.angles = '0 0 0';
-
- string m = self.model;
- WarpZoneLib_ExactTrigger_Init();
- if(m != "")
- {
- precache_model(m);
- _setmodel(self, m); // no precision needed
- }
- setorigin(self, self.origin);
- if(self.scale)
- setsize(self, self.mins * self.scale, self.maxs * self.scale);
- else
- setsize(self, self.mins, self.maxs);
+ this.angles = '0 0 0';
- self.active = ACTIVE_ACTIVE;
- BITSET_ASSIGN(self.effects, EF_NODEPTHTEST);
- self.use = trigger_teleport_use;
+ this.active = ACTIVE_ACTIVE;
+ //trigger_init(this); // only for predicted triggers?
+ EXACTTRIGGER_INIT;
+ this.use = trigger_teleport_use;
+
+ if(this.noise != "")
+ FOREACH_WORD(this.noise, true, precache_sound(it));
// this must be called to spawn the teleport waypoints for bots
- InitializeEntity(self, teleport_findtarget, INITPRIO_FINDTARGET);
+ InitializeEntity(this, teleport_findtarget, INITPRIO_FINDTARGET);
- if (self.target == "")
+ if (this.target == "")
{
- objerror ("Teleporter with no target");
+ objerror (this, "Teleporter with no target");
return;
}
- self.teleport_next = teleport_first;
- teleport_first = self;
+ this.teleport_next = teleport_first;
+ teleport_first = this;
}
#elif defined(CSQC)
NET_HANDLE(ENT_CLIENT_TRIGGER_TELEPORT, bool isnew)
{
- int f = ReadByte();
- self.warpzone_isboxy = (f & 1);
- if(f & 4)
- {
- self.origin_x = ReadCoord();
- self.origin_y = ReadCoord();
- self.origin_z = ReadCoord();
- }
- else
- self.origin = '0 0 0';
-
- self.modelindex = ReadShort();
- self.mins_x = ReadCoord();
- self.mins_y = ReadCoord();
- self.mins_z = ReadCoord();
- self.maxs_x = ReadCoord();
- self.maxs_y = ReadCoord();
- self.maxs_z = ReadCoord();
- self.scale = ReadByte() / 16;
- self.classname = "trigger_teleport";
- int mytm = ReadByte(); if(mytm) { self.team = mytm - 1; }
- self.spawnflags = ReadInt24_t();
- self.active = ReadByte();
- self.speed = ReadCoord();
-
- trigger_common_read(true);
-
- self.entremove = trigger_remove_generic;
- self.solid = SOLID_TRIGGER;
- //self.draw = trigger_draw_generic;
- //self.move_touch = trigger_push_touch;
- self.drawmask = MASK_NORMAL;
- self.move_time = time;
- defer(self, 0.25, teleport_findtarget);
-
- self.teleport_next = teleport_first;
- teleport_first = self;
+ this.classname = "trigger_teleport";
+ int mytm = ReadByte(); if(mytm) { this.team = mytm - 1; }
+ this.spawnflags = ReadInt24_t();
+ this.active = ReadByte();
+ this.speed = ReadCoord();
+
+ trigger_common_read(this, true);
+
+ this.entremove = trigger_remove_generic;
+ this.solid = SOLID_TRIGGER;
+ //settouch(this, trigger_push_touch);
+ this.move_time = time;
+ defer(this, 0.25, teleport_findtarget);
+
+ this.teleport_next = teleport_first;
+ teleport_first = this;
return true;
}