makevectors(player.angles);
Reset_ArcBeam(player, v_forward);
UpdateCSQCProjectileAfterTeleport(player);
+ UpdateItemAfterTeleport(player);
#elif defined(CSQC)
from = player.move_origin;
player.move_origin = to;
player.iflags |= IFLAG_TELEPORTED | IFLAG_V_ANGLE | IFLAG_ANGLES;
player.csqcmodel_teleported = 1;
player.v_angle = to_angles;
- setproperty(VF_ANGLES, player.move_angles);
- setproperty(VF_CL_VIEWANGLES, player.move_angles);
+
+ if(player.isplayermodel) // not for anything but the main player
+ {
+ setproperty(VF_ANGLES, player.move_angles);
+ setproperty(VF_CL_VIEWANGLES, player.move_angles);
+ }
makevectors(player.move_angles);
#endif
tdeath(player, teleporter, telefragger, telefragmin, telefragmax);
// player no longer is on ground
- player.flags &= ~FL_ONGROUND;
+ UNSET_ONGROUND(player);
// reset tracking of oldvelocity for impact damage (sudden velocity changes)
player.oldvelocity = player.velocity;
return world;
}
-#ifdef SVQC
void WarpZone_PostTeleportPlayer_Callback(entity pl)
{SELFPARAM();
+#ifdef SVQC
makevectors(pl.angles);
Reset_ArcBeam(pl, v_forward);
UpdateCSQCProjectileAfterTeleport(pl);
+ UpdateItemAfterTeleport(pl);
{
WITH(entity, self, pl, anticheat_fixangle());
}
+#endif
// "disown" projectiles after teleport
if(pl.owner)
if(pl.owner == pl.realowner)
{
+ #ifdef SVQC
if(!(pl.flags & FL_PROJECTILE))
+ #elif defined(CSQC)
+ if(!(pl.move_flags & BIT(15))) // FL_PROJECTILE
+ #endif
LOG_INFO("A non-projectile got through a warpzone and its owner cleared. It's a ", pl.classname, ".\n");
pl.owner = world;
}
if(IS_PLAYER(pl))
{
// reset tracking of oldvelocity for impact damage (sudden velocity changes)
+ #ifdef SVQC
pl.oldvelocity = pl.velocity;
+ #endif
// reset teleport time tracking too (or multijump can cause insane speeds)
pl.lastteleporttime = time;
}
}
-#endif