X-Git-Url: https://de.git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Fwarpzonelib%2Fserver.qc;h=dfc30bdfd569868c8d3f96f569fd521bae877e80;hb=616650bb18362024afeed71fed91d33dc1708d09;hp=3d4a750455a3e5947b073e3c62e698a9d347ea74;hpb=5836f4f65fb9b51c0f48b47b936033c7a799f273;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/warpzonelib/server.qc b/qcsrc/warpzonelib/server.qc index 3d4a75045..dfc30bdfd 100644 --- a/qcsrc/warpzonelib/server.qc +++ b/qcsrc/warpzonelib/server.qc @@ -1,4 +1,6 @@ -#define REMOVEHACK +#ifdef WARPZONELIB_KEEPDEBUG +#define WARPZONELIB_REMOVEHACK +#endif // for think function .vector warpzone_save_origin; @@ -300,6 +302,7 @@ float WarpZone_Camera_Send(entity to, float sendflags) return TRUE; } +#ifndef WARPZONELIB_KEEPDEBUG float WarpZone_CheckProjectileImpact(entity player) { vector o0, v0; @@ -317,7 +320,7 @@ float WarpZone_CheckProjectileImpact(entity player) if(!wz) return 0; -#ifdef REMOVEHACK +#ifdef WARPZONELIB_REMOVEHACK print("impactfilter found something - and it no longer gets handled correctly - please tell divVerent whether anything behaves broken now\n"); #else print("impactfilter found something - and it even gets handled correctly - please tell divVerent that this code apparently gets triggered again\n"); @@ -326,7 +329,7 @@ float WarpZone_CheckProjectileImpact(entity player) print("Origin: ", vtos(player.origin), "\n"); print("Velocity: ", vtos(player.velocity), "\n"); -#ifdef REMOVEHACK +#ifdef WARPZONELIB_REMOVEHACK return 0; #else // retry previous move @@ -365,6 +368,8 @@ float WarpZone_CheckProjectileImpact(entity player) return +1; #endif } +#endif + float WarpZone_Projectile_Touch() { float f; @@ -372,9 +377,15 @@ float WarpZone_Projectile_Touch() return TRUE; // no further impacts if we teleported this frame! + // this is because even if we did teleport, the engine still may raise + // touch events for the previous location + // engine now aborts moves on teleport, so this SHOULD not happen any more + // but if this is called from TouchAreaGrid of the projectile moving, + // then this won't do if(time == self.warpzone_teleport_time) return TRUE; +#ifndef WARPZONELIB_KEEPDEBUG // this SEEMS to not happen at the moment, but if it did, it would be more reliable { float save_dpstartcontents; @@ -419,6 +430,7 @@ float WarpZone_Projectile_Touch() trace_inopen = save_inopen; trace_inwater = save_inwater; } +#endif if(WarpZone_Projectile_Touch_ImpactFilter_Callback()) return TRUE; @@ -571,7 +583,7 @@ void WarpZone_InitStep_UpdateTransform() print("Position target of trigger_warpzone near ", vtos(self.aiment.origin), " points into trigger_warpzone. BEWARE.\n"); norm = -1 * norm; } - ang = vectoangles(norm, v_up); // keep rotation, but turn exactly against plane + ang = vectoangles2(norm, v_up); // keep rotation, but turn exactly against plane ang_x = -ang_x; if(norm * v_forward < 0.99) print("trigger_warpzone near ", vtos(self.aiment.origin), " has been turned to match plane orientation (", vtos(self.aiment.angles), " -> ", vtos(ang), "\n");