X-Git-Url: https://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Ftriggers%2Fteleporters.qc;h=e7d3c5fd70edf3b4e3a7efb804ed4b900b1ec302;hb=9f1091e432a2db424bfad2482694ee8b34edbe9c;hp=f990cd1d529d281270026082dd53f6ac6d24916b;hpb=ac0ab7e8b52ac931e7275bcbffe1aebe4259317f;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/triggers/teleporters.qc b/qcsrc/common/triggers/teleporters.qc index f990cd1d5..e7d3c5fd7 100644 --- a/qcsrc/common/triggers/teleporters.qc +++ b/qcsrc/common/triggers/teleporters.qc @@ -110,6 +110,7 @@ void TeleportPlayer(entity teleporter, entity player, vector to, vector to_angle makevectors(player.angles); Reset_ArcBeam(player, v_forward); UpdateCSQCProjectileAfterTeleport(player); + UpdateItemAfterTeleport(player); #elif defined(CSQC) from = player.move_origin; player.move_origin = to; @@ -119,8 +120,12 @@ void TeleportPlayer(entity teleporter, entity player, vector to, vector to_angle 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 @@ -133,7 +138,7 @@ void TeleportPlayer(entity teleporter, entity player, vector to, vector to_angle 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; @@ -280,29 +285,36 @@ entity Teleport_Find(vector mi, vector ma) 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