X-Git-Url: http://git.xonotic.org/?a=blobdiff_plain;f=qcsrc%2Flib%2Fwarpzone%2Fserver.qc;h=2805c005096582383c78f9464906ccecca337817;hb=fbd313c7ceb26a09310d8062926f4ac2468623a8;hp=116ad00023ae98b1a4321c609698298a2dd46f0b;hpb=530e29e1a8395e12b8b8b44ac1030a84546eb903;p=xonotic%2Fxonotic-data.pk3dir.git diff --git a/qcsrc/lib/warpzone/server.qc b/qcsrc/lib/warpzone/server.qc index 116ad0002..2805c0050 100644 --- a/qcsrc/lib/warpzone/server.qc +++ b/qcsrc/lib/warpzone/server.qc @@ -6,7 +6,7 @@ #elif defined(SVQC) #include #include - #include + #include #include #include #include @@ -37,6 +37,10 @@ void WarpZone_TeleportPlayer(entity teleporter, entity player, vector to, vector to_angles, vector to_velocity) { +#ifdef SVQC + player.lastteleport_origin = player.origin; + player.lastteleporttime = time; +#endif setorigin(player, to); // NOTE: this also aborts the move, when this is called by touch #ifdef SVQC player.oldorigin = to; // for DP's unsticking @@ -57,9 +61,7 @@ void WarpZone_TeleportPlayer(entity teleporter, entity player, vector to, vector bool WarpZone_Teleported_Send(entity this, entity to, int sf) { WriteHeader(MSG_ENTITY, ENT_CLIENT_WARPZONE_TELEPORTED); - WriteCoord(MSG_ENTITY, this.angles.x); - WriteCoord(MSG_ENTITY, this.angles.y); - WriteCoord(MSG_ENTITY, this.angles.z); + WriteVector(MSG_ENTITY, this.angles); return true; } #endif @@ -114,7 +116,7 @@ float WarpZone_Teleport(entity wz, entity player, float f0, float f1) } else { - LOG_INFO("would have to put player in solid, won't do that\n"); + LOG_INFO("would have to put player in solid, won't do that"); setorigin(player, o0 - player.view_ofs); return 0; } @@ -175,11 +177,7 @@ void WarpZone_Touch(entity this, entity toucher) return; // FIXME needs a better check to know what is safe to teleport and what not - if((toucher.move_movetype == MOVETYPE_NONE && toucher.move_movetype == MOVETYPE_NONE) || toucher.move_movetype == MOVETYPE_FOLLOW || toucher.move_movetype == MOVETYPE_FOLLOW || toucher.tag_entity -#ifdef CSQC - || tag_networkentity -#endif - ) + if(toucher.move_movetype == MOVETYPE_NONE || toucher.move_movetype == MOVETYPE_FOLLOW || toucher.tag_entity) return; if(WarpZoneLib_ExactTrigger_Touch(this, toucher)) @@ -348,13 +346,13 @@ float WarpZone_CheckProjectileImpact(entity player) return 0; #ifdef WARPZONELIB_REMOVEHACK - LOG_INFO("impactfilter found something - and it no longer gets handled correctly - please tell divVerent whether anything behaves broken now\n"); + LOG_INFO("impactfilter found something - and it no longer gets handled correctly - please tell divVerent whether anything behaves broken now"); #else - LOG_INFO("impactfilter found something - and it even gets handled correctly - please tell divVerent that this code apparently gets triggered again\n"); + LOG_INFO("impactfilter found something - and it even gets handled correctly - please tell divVerent that this code apparently gets triggered again"); #endif - LOG_INFO("Entity type: ", player.classname, "\n"); - LOG_INFO("Origin: ", vtos(player.origin), "\n"); - LOG_INFO("Velocity: ", vtos(player.velocity), "\n"); + LOG_INFO("Entity type: ", player.classname); + LOG_INFO("Origin: ", vtos(player.origin)); + LOG_INFO("Velocity: ", vtos(player.velocity)); #ifdef WARPZONELIB_REMOVEHACK return 0; @@ -583,7 +581,7 @@ void WarpZone_InitStep_UpdateTransform(entity this) point = point * (1 / (3 * area)); if(vdist(norm, <, 0.99)) { - LOG_INFO("trigger_warpzone near ", vtos(this.aiment.origin), " is nonplanar. BEWARE.\n"); + LOG_INFO("trigger_warpzone near ", vtos(this.aiment.origin), " is nonplanar. BEWARE."); area = 0; // no autofixing in this case } norm = normalize(norm); @@ -600,15 +598,15 @@ void WarpZone_InitStep_UpdateTransform(entity this) makevectors(ang); if(norm * v_forward < 0) { - LOG_INFO("Position target of trigger_warpzone near ", vtos(this.aiment.origin), " points into trigger_warpzone. BEWARE.\n"); + LOG_INFO("Position target of trigger_warpzone near ", vtos(this.aiment.origin), " points into trigger_warpzone. BEWARE."); norm = -1 * norm; } ang = vectoangles2(norm, v_up); // keep rotation, but turn exactly against plane ang.x = -ang.x; if(norm * v_forward < 0.99) - LOG_INFO("trigger_warpzone near ", vtos(this.aiment.origin), " has been turned to match plane orientation (", vtos(this.aiment.angles), " -> ", vtos(ang), "\n"); + LOG_INFO("trigger_warpzone near ", vtos(this.aiment.origin), " has been turned to match plane orientation (", vtos(this.aiment.angles), " -> ", vtos(ang)); if(vdist(org - this.aiment.origin, >, 0.5)) - LOG_INFO("trigger_warpzone near ", vtos(this.aiment.origin), " has been moved to match the plane (", vtos(this.aiment.origin), " -> ", vtos(org), ").\n"); + LOG_INFO("trigger_warpzone near ", vtos(this.aiment.origin), " has been moved to match the plane (", vtos(this.aiment.origin), " -> ", vtos(org), ")."); } } else if(area > 0) @@ -811,7 +809,7 @@ void WarpZone_StartFrame() WarpZone_StoreProjectileData(it); }); } - + FOREACH_CLIENT(true, { @@ -888,7 +886,7 @@ void WarpZone_PlayerPhysics_FixVAngle(entity this) #ifndef WARPZONE_DONT_FIX_VANGLE if(IS_REAL_CLIENT(this)) if(this.v_angle.z <= 360) // if not already adjusted - if(time - this.ping * 0.001 < this.warpzone_teleport_time) + if(time - CS(this).ping * 0.001 < this.warpzone_teleport_time) { this.v_angle = WarpZone_TransformVAngles(this.warpzone_teleport_zone, this.v_angle); this.v_angle_z += 720; // mark as adjusted