From 6bc4bcbfd12aa53b22fef9f8de202f11151dfc13 Mon Sep 17 00:00:00 2001 From: Jakob MG Date: Sun, 23 Oct 2011 23:37:16 +0200 Subject: [PATCH] Vehicle antilag --- qcsrc/server/g_subs.qc | 14 ++++++++++-- qcsrc/server/g_world.qc | 2 ++ qcsrc/server/vehicles/racer.qc | 5 ++--- qcsrc/server/vehicles/raptor.qc | 2 +- qcsrc/server/vehicles/spiderbot.qc | 2 +- qcsrc/server/vehicles/vehicles.qc | 36 +++++++++++++++++++++++++++++- qcsrc/server/w_common.qc | 15 +++++++++++-- 7 files changed, 66 insertions(+), 10 deletions(-) diff --git a/qcsrc/server/g_subs.qc b/qcsrc/server/g_subs.qc index 6a62d61b5..a908353a4 100644 --- a/qcsrc/server/g_subs.qc +++ b/qcsrc/server/g_subs.qc @@ -391,7 +391,12 @@ void tracebox_antilag_force_wz (entity source, vector v1, vector mi, vector ma, // take players back into the past FOR_EACH_PLAYER(player) if(player != forent) - antilag_takeback(player, time - lag); + { + antilag_takeback(player, time - lag); + if(player.vehicle) + antilag_takeback(player.vehicle, time - lag); + } + } // do the trace @@ -405,7 +410,12 @@ void tracebox_antilag_force_wz (entity source, vector v1, vector mi, vector ma, { FOR_EACH_PLAYER(player) if(player != forent) - antilag_restore(player); + { + antilag_restore(player); + if(player.vehicle) + antilag_restore(player.vehicle); + } + } // restore shooter solid type diff --git a/qcsrc/server/g_world.qc b/qcsrc/server/g_world.qc index b134886d4..5560c0b73 100644 --- a/qcsrc/server/g_world.qc +++ b/qcsrc/server/g_world.qc @@ -2853,6 +2853,8 @@ void EndFrame() self.hitsound = FALSE; self.typehitsound = FALSE; antilag_record(self, altime); + if(self.vehicle) + antilag_record(self.vehicle, altime); } } diff --git a/qcsrc/server/vehicles/racer.qc b/qcsrc/server/vehicles/racer.qc index e3c74c5e1..759502743 100644 --- a/qcsrc/server/vehicles/racer.qc +++ b/qcsrc/server/vehicles/racer.qc @@ -273,10 +273,9 @@ float racer_frame() return 1; } + racer_align4point(); - - crosshair_trace(player); - + vh_crosshair_trace(player); racer.angles_x *= -1; // Yaw diff --git a/qcsrc/server/vehicles/raptor.qc b/qcsrc/server/vehicles/raptor.qc index 201c186c3..4712777ee 100644 --- a/qcsrc/server/vehicles/raptor.qc +++ b/qcsrc/server/vehicles/raptor.qc @@ -344,7 +344,7 @@ float raptor_frame() player.BUTTON_ATCK = player.BUTTON_ATCK2 = 0; return 1; } - crosshair_trace(player); + vh_crosshair_trace(player); vector vang; vang = raptor.angles; diff --git a/qcsrc/server/vehicles/spiderbot.qc b/qcsrc/server/vehicles/spiderbot.qc index f43ec08e5..00e8f3382 100644 --- a/qcsrc/server/vehicles/spiderbot.qc +++ b/qcsrc/server/vehicles/spiderbot.qc @@ -145,7 +145,7 @@ void spiderbot_rocket_do() if not (self.owner.BUTTON_ATCK2) return; - crosshair_trace(self.owner); + vh_crosshair_trace(self.owner); v = gettaginfo(self.tur_head,gettagindex(self.tur_head,"tag_fire")); rocket = vehicles_projectile("spiderbot_rocket_launch", "weapons/rocket_fire.wav", diff --git a/qcsrc/server/vehicles/vehicles.qc b/qcsrc/server/vehicles/vehicles.qc index c4e287538..051a9136e 100644 --- a/qcsrc/server/vehicles/vehicles.qc +++ b/qcsrc/server/vehicles/vehicles.qc @@ -111,6 +111,40 @@ void CSQCVehicleSetup(entity own, float vehicle_id) dont before calling. **/ +void vh_crosshair_trace(entity player) +{ + float lag; + entity pl; + + lag = ANTILAG_LATENCY(self); + if(lag < 0.001) + lag = 0; + if(clienttype(self) != CLIENTTYPE_REAL) + lag = 0; + if(autocvar_g_antilag == 0 || self.cvar_cl_noantilag) + lag = 0; // only do hitscan, but no antilag + + if(lag) + FOR_EACH_PLAYER(pl) + if(pl != self) + { + antilag_takeback(pl, time - lag); + if(pl.vehicle) + antilag_takeback(pl.vehicle, time - lag); + + } + + crosshair_trace(player); + + if(lag) + FOR_EACH_PLAYER(pl) + if(pl != self) + { + antilag_restore(pl); + if(pl.vehicle) + antilag_restore(pl.vehicle); + } +} .entity lock_target; .float lock_strength; .float lock_time; @@ -144,7 +178,7 @@ void vehicles_locktarget(float incr, float decr, float _lock_time) if(trace_ent.deadflag != DEAD_NO) trace_ent = world; - if not (trace_ent.vehicle_flags & VHF_ISVEHICLE || trace_ent.turrcaps_flags & TFL_TURRCAPS_ISTURRET) + if not (trace_ent.vehicle_flags & VHF_ISVEHICLE || trace_ent.turrcaps_flags & TFL_TURRCAPS_ISTURRET || trace_ent.classname == "player") trace_ent = world; } diff --git a/qcsrc/server/w_common.qc b/qcsrc/server/w_common.qc index 1a995191c..00a9d2ed0 100644 --- a/qcsrc/server/w_common.qc +++ b/qcsrc/server/w_common.qc @@ -419,7 +419,13 @@ void fireBallisticBullet(vector start, vector dir, float spread, float pSpeed, f if(lag) FOR_EACH_PLAYER(pl) if(pl != self) - antilag_takeback(pl, time - lag); + { + antilag_takeback(pl, time - lag); + if(pl.vehicle) + antilag_takeback(pl.vehicle, time - lag); + + } + oldself = self; self = proj; @@ -498,7 +504,12 @@ void fireBallisticBullet(vector start, vector dir, float spread, float pSpeed, f if(lag) FOR_EACH_PLAYER(pl) if(pl != self) - antilag_restore(pl); + { + antilag_restore(pl); + if(pl.vehicle) + antilag_restore(pl.vehicle); + } + remove(proj); -- 2.39.2