diff --git a/RageCoop.Client/Main.cs b/RageCoop.Client/Main.cs index 894488c..9542370 100644 --- a/RageCoop.Client/Main.cs +++ b/RageCoop.Client/Main.cs @@ -9,6 +9,8 @@ using System.Diagnostics; using System.IO; using System.Linq; using System.Windows.Forms; +using System.Threading.Tasks; +using System.Threading; namespace RageCoop.Client { @@ -391,6 +393,13 @@ namespace RageCoop.Client lock (QueuedActions) { QueuedActions.Clear(); } } - + public static void Delay(Action a, int time) + { + Task.Run(() => + { + Thread.Sleep(time); + QueueAction(a); + }); + } } } diff --git a/RageCoop.Client/Sync/Entities/SyncedVehicle.cs b/RageCoop.Client/Sync/Entities/SyncedVehicle.cs index fc4b399..b14ea8a 100644 --- a/RageCoop.Client/Sync/Entities/SyncedVehicle.cs +++ b/RageCoop.Client/Sync/Entities/SyncedVehicle.cs @@ -158,7 +158,13 @@ namespace RageCoop.Client { if (MainVehicle.IsDead) { - MainVehicle.Repair(); + Main.Delay(() => + { + if (MainVehicle.IsDead && !IsDead) + { + MainVehicle.Repair(); + } + },1000); } } if (MainVehicle.IsOnFire) @@ -341,13 +347,7 @@ namespace RageCoop.Client { var current = MainVehicle.Position; var predicted = Position+Velocity*(SyncParameters.PositioinPredictionDefault+0.001f*LastSyncedStopWatch.ElapsedMilliseconds); - if (current.DistanceTo(Main.PlayerPosition)>50) - { - MainVehicle.Position=predicted; - MainVehicle.Velocity=Velocity; - MainVehicle.Quaternion=Quaternion; - } - else if (current.DistanceTo(Position)<5) + if (current.DistanceTo(Position)<5) { MainVehicle.Velocity = Velocity+5*(predicted - current); if (IsFlipped) diff --git a/RageCoop.Client/Util/VehicleExtensions.cs b/RageCoop.Client/Util/VehicleExtensions.cs index e55701d..0ca35b5 100644 --- a/RageCoop.Client/Util/VehicleExtensions.cs +++ b/RageCoop.Client/Util/VehicleExtensions.cs @@ -269,6 +269,7 @@ namespace RageCoop.Client Function.Call(Hash.SET_VEHICLE_FLIGHT_NOZZLE_POSITION, plane, ratio); } + #endregion } }