X-Git-Url: http://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fcommon%2Ftriggers%2Fteleporters.qc;h=b5e97b1fc7516f1a082a82d69c354a85f4b8594e;hb=268f9c69576b6bb929f66d19f0d077d19ba47edd;hp=475904d21eafb3e78597ab056955d237f4cab94c;hpb=fb7b625a2f9482eb9ae538f15d172b2fcb9742dc;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/common/triggers/teleporters.qc b/qcsrc/common/triggers/teleporters.qc index 475904d21..b5e97b1fc 100644 --- a/qcsrc/common/triggers/teleporters.qc +++ b/qcsrc/common/triggers/teleporters.qc @@ -112,7 +112,7 @@ void TeleportPlayer(entity teleporter, entity player, vector to, vector to_angle // assuming to allows PL_MIN to PL_MAX box and some more #ifdef SVQC from = player.origin; - setorigin (player, to); + setorigin(player, to); player.oldorigin = to; // don't undo the teleport by unsticking player.angles = to_angles; player.fixangle = true; @@ -124,22 +124,20 @@ void TeleportPlayer(entity teleporter, entity player, vector to, vector to_angle UpdateCSQCProjectileAfterTeleport(player); UpdateItemAfterTeleport(player); #elif defined(CSQC) - from = player.move_origin; - player.move_origin = to; - player.move_angles = to_angles; - player.move_velocity = to_velocity; - player.move_flags &= ~FL_ONGROUND; + from = player.origin; + setorigin(player, to); + player.angles = to_angles; + player.velocity = to_velocity; + UNSET_ONGROUND(player); player.iflags |= IFLAG_TELEPORTED | IFLAG_V_ANGLE | IFLAG_ANGLES; player.csqcmodel_teleported = 1; player.v_angle = to_angles; - if(player.isplayermodel) // not for anything but the main player + if(player == csqcplayer) // not for anything but the main player { - setproperty(VF_ANGLES, player.move_angles); - setproperty(VF_CL_VIEWANGLES, player.move_angles); + setproperty(VF_ANGLES, player.angles); + setproperty(VF_CL_VIEWANGLES, player.angles); } - - makevectors(player.move_angles); #endif #ifdef SVQC @@ -187,21 +185,21 @@ entity Simple_TeleportPlayer(entity teleporter, entity player) else { RandomSelection_Init(); - for(e = world; (e = find(e, targetname, teleporter.target)); ) + FOREACH_ENTITY_STRING(targetname, teleporter.target, { p = 1; if(STAT(TELEPORT_TELEFRAG_AVOID, player)) { #ifdef SVQC - locout = e.origin + '0 0 1' * (1 - player.mins.z - 24); + locout = it.origin + '0 0 1' * (1 - player.mins.z - 24); #elif defined(CSQC) - locout = e.origin + '0 0 1' * (1 - player.mins.z - 24); + locout = it.origin + '0 0 1' * (1 - player.mins.z - 24); #endif if(check_tdeath(player, locout, '0 0 0', '0 0 0')) p = 0; } - RandomSelection_Add(e, 0, string_null, (e.cnt ? e.cnt : 1), p); - } + RandomSelection_Add(it, 0, string_null, (it.cnt ? it.cnt : 1), p); + }); e = RandomSelection_chosen_ent; } @@ -213,35 +211,17 @@ entity Simple_TeleportPlayer(entity teleporter, entity player) makevectors(e.mangle); -#ifdef SVQC if(e.speed) if(vdist(player.velocity, >, e.speed)) player.velocity = normalize(player.velocity) * max(0, e.speed); -#elif defined(CSQC) - if(e.speed) - if(vdist(player.move_velocity, >, e.speed)) - player.move_velocity = normalize(player.move_velocity) * max(0, e.speed); -#endif -#ifdef SVQC if(STAT(TELEPORT_MAXSPEED, player)) if(vdist(player.velocity, >, STAT(TELEPORT_MAXSPEED, player))) player.velocity = normalize(player.velocity) * max(0, STAT(TELEPORT_MAXSPEED, player)); -#elif defined(CSQC) - if(STAT(TELEPORT_MAXSPEED, player)) - if(vdist(player.move_velocity, >, STAT(TELEPORT_MAXSPEED, player))) - player.move_velocity = normalize(player.move_velocity) * max(0, STAT(TELEPORT_MAXSPEED, player)); -#endif -#ifdef SVQC locout = e.origin + '0 0 1' * (1 - player.mins.z - 24); TeleportPlayer(teleporter, player, locout, e.mangle, v_forward * vlen(player.velocity), '0 0 0', '0 0 0', TELEPORT_FLAGS_TELEPORTER); -#elif defined(CSQC) - locout = e.origin + '0 0 1' * (1 - player.mins.z - 24); - - TeleportPlayer(teleporter, player, locout, e.mangle, v_forward * vlen(player.move_velocity), '0 0 0', '0 0 0', TELEPORT_FLAGS_TELEPORTER); -#endif return e; } @@ -250,11 +230,11 @@ void teleport_findtarget(entity this) { int n = 0; entity e; - for(e = world; (e = find(e, targetname, this.target)); ) + for(e = NULL; (e = find(e, targetname, this.target)); ) { ++n; #ifdef SVQC - if(e.movetype == MOVETYPE_NONE) + if(e.move_movetype == MOVETYPE_NONE) waypoint_spawnforteleporter(this, e.origin, 0); if(e.classname != "info_teleport_destination") LOG_INFO("^3MAPPER ERROR: teleporter does target an invalid teleport destination entity. Angles will not work.\n"); @@ -275,7 +255,7 @@ void teleport_findtarget(entity this) else { // have to use random selection every single time - this.enemy = world; + this.enemy = NULL; } // now enable touch @@ -287,11 +267,11 @@ void teleport_findtarget(entity this) entity Teleport_Find(vector mi, vector ma) { - entity e; - for(e = world; (e = find(e, classname, "trigger_teleport")); ) - if(WarpZoneLib_BoxTouchesBrush(mi, ma, e, world)) - return e; - return world; + IL_EACH(g_teleporters, WarpZoneLib_BoxTouchesBrush(mi, ma, it, NULL), + { + return it; + }); + return NULL; } void WarpZone_PostTeleportPlayer_Callback(entity pl) @@ -310,10 +290,10 @@ void WarpZone_PostTeleportPlayer_Callback(entity pl) #ifdef SVQC if(!(pl.flags & FL_PROJECTILE)) #elif defined(CSQC) - if(!(pl.move_flags & BIT(15))) // FL_PROJECTILE + if(!(pl.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; + pl.owner = NULL; } if(IS_PLAYER(pl)) {