From e978c13f411b8c440d499827f40bf5ad62a075e7 Mon Sep 17 00:00:00 2001 From: EntenKoeniq <81123713+EntenKoeniq@users.noreply.github.com> Date: Thu, 14 Apr 2022 05:27:47 +0200 Subject: [PATCH] Some changes and bug fixes --- Client/Entities/Player/EntitiesPlayer.cs | 87 ++++++++++--------- Client/Entities/Player/Sync/OnFootSync.cs | 3 - Client/Entities/Player/Sync/VehicleSync.cs | 98 ++++++++++------------ Client/Main.cs | 2 +- Client/Packets/NPCPackets.cs | 2 - Client/Packets/Packets.cs | 1 - Client/Packets/PlayerPackets.cs | 2 - Client/Util.cs | 24 +----- Server/Packets/NPCPackets.cs | 2 - Server/Packets/Packets.cs | 1 - Server/Packets/PlayerPackets.cs | 2 - 11 files changed, 86 insertions(+), 138 deletions(-) diff --git a/Client/Entities/Player/EntitiesPlayer.cs b/Client/Entities/Player/EntitiesPlayer.cs index 4be2eba..9112f17 100644 --- a/Client/Entities/Player/EntitiesPlayer.cs +++ b/Client/Entities/Player/EntitiesPlayer.cs @@ -150,22 +150,19 @@ namespace CoopClient.Entities.Player if (!characterExist) { - if (!CreateCharacter()) - { - return; - } + CreateCharacter(); + return; } else if (LastSyncWasFull) { if (ModelHash != _lastModelHash) { Character.Kill(); + Character.MarkAsNoLongerNeeded(); Character.Delete(); - if (!CreateCharacter()) - { - return; - } + CreateCharacter(); + return; } else if (!Clothes.Compare(_lastClothes)) { @@ -210,38 +207,42 @@ namespace CoopClient.Entities.Player private void RenderNameTag() { - if (Character.IsVisible && Character.IsInRange(Game.Player.Character.Position, 20f)) + if (!Character.IsVisible || !Character.IsInRange(Game.Player.Character.Position, 20f)) { - float sizeOffset; - if (GameplayCamera.IsFirstPersonAimCamActive) - { - Vector3 targetPos = Character.Bones[Bone.IKHead].Position + new Vector3(0, 0, 0.10f) + (Character.Velocity / Game.FPS); - - Function.Call(Hash.SET_DRAW_ORIGIN, targetPos.X, targetPos.Y, targetPos.Z, 0); - - sizeOffset = Math.Max(1f - ((GameplayCamera.Position - Character.Position).Length() / 30f), 0.30f); - } - else - { - Vector3 targetPos = Character.Bones[Bone.IKHead].Position + new Vector3(0, 0, 0.35f) + (Character.Velocity / Game.FPS); - - Function.Call(Hash.SET_DRAW_ORIGIN, targetPos.X, targetPos.Y, targetPos.Z, 0); - - sizeOffset = Math.Max(1f - ((GameplayCamera.Position - Character.Position).Length() / 25f), 0.25f); - } - - new ScaledText(new PointF(0, 0), Username, 0.4f * sizeOffset, GTA.UI.Font.ChaletLondon) - { - Outline = true, - Alignment = GTA.UI.Alignment.Center - }.Draw(); - - Function.Call(Hash.CLEAR_DRAW_ORIGIN); + return; } + + string renderText = (Util.GetTickCount64() - LastUpdateReceived) > 5000 ? "~r~AFK" : Username; + Vector3 targetPos = Character.Bones[Bone.IKHead].Position + new Vector3(0, 0, 0.35f) + (Character.Velocity / Game.FPS); + + Function.Call(Hash.SET_DRAW_ORIGIN, targetPos.X, targetPos.Y, targetPos.Z, 0); + + float dist = (GameplayCamera.Position - Character.Position).Length(); + var sizeOffset = Math.Max(1f - (dist / 30f), 0.3f); + + new ScaledText(new PointF(0, 0), renderText, 0.4f * sizeOffset, GTA.UI.Font.ChaletLondon) + { + Outline = true, + Alignment = GTA.UI.Alignment.Center + }.Draw(); + + Function.Call(Hash.CLEAR_DRAW_ORIGIN); } - private bool CreateCharacter() + private void CreateCharacter() { + if (Character != null) + { + if (Character.Exists()) + { + Character.Kill(); + Character.MarkAsNoLongerNeeded(); + Character.Delete(); + } + + Character = null; + } + if (PedBlip != null && PedBlip.Exists()) { PedBlip.Delete(); @@ -249,22 +250,20 @@ namespace CoopClient.Entities.Player } Model characterModel = ModelHash.ModelRequest(); - if (characterModel == null) { - //GTA.UI.Notification.Show($"~r~(Character)Model ({CurrentModelHash}) cannot be loaded!"); - return false; + return; } - Character = World.CreatePed(characterModel, Position, Rotation.Z); + Character = World.CreatePed(characterModel, Position); characterModel.MarkAsNoLongerNeeded(); + if (Character == null) + { + return; + } Character.RelationshipGroup = Main.RelationshipGroup; Character.Health = Health; - if (IsInVehicle) - { - Character.IsVisible = false; - } Character.BlockPermanentEvents = true; Character.CanRagdoll = false; Character.IsInvincible = true; @@ -286,8 +285,6 @@ namespace CoopClient.Entities.Player Character.AttachedBlip.Color = BlipColor.White; Character.AttachedBlip.Scale = 0.8f; Character.AttachedBlip.Name = Username; - - return true; } private void SetClothes() diff --git a/Client/Entities/Player/Sync/OnFootSync.cs b/Client/Entities/Player/Sync/OnFootSync.cs index 2f94f1e..e9e0930 100644 --- a/Client/Entities/Player/Sync/OnFootSync.cs +++ b/Client/Entities/Player/Sync/OnFootSync.cs @@ -41,9 +41,6 @@ namespace CoopClient.Entities.Player { if (Character.IsInVehicle()) { - Character.Task.ClearAll(); - Character.Task.ClearSecondary(); - if (MainVehicle == null) { Character.Task.LeaveVehicle(); diff --git a/Client/Entities/Player/Sync/VehicleSync.cs b/Client/Entities/Player/Sync/VehicleSync.cs index 05cf255..1fa4583 100644 --- a/Client/Entities/Player/Sync/VehicleSync.cs +++ b/Client/Entities/Player/Sync/VehicleSync.cs @@ -69,30 +69,19 @@ namespace CoopClient.Entities.Player Model vehicleModel = VehicleModelHash.ModelRequest(); if (vehicleModel == null) { - //GTA.UI.Notification.Show($"~r~(Vehicle)Model ({CurrentVehicleModelHash}) cannot be loaded!"); - Character.IsVisible = false; return; } - bool vehFound = false; - Vehicle targetVehicle = World.GetClosestVehicle(Position, 7f, vehicleModel); - if (targetVehicle != null) + if (targetVehicle != null && targetVehicle.IsSeatFree((VehicleSeat)VehicleSeatIndex)) { - if (targetVehicle.IsSeatFree((VehicleSeat)VehicleSeatIndex)) - { - MainVehicle = targetVehicle; - vehFound = true; - } + MainVehicle = targetVehicle; } - - if (!vehFound) + else { MainVehicle = World.CreateVehicle(vehicleModel, Position); - MainVehicle.IsVisible = false; - MainVehicle.Quaternion = _vehicleRotation; - MainVehicle.IsInvincible = true; + MainVehicle.Quaternion = _vehicleRotation; if (MainVehicle.HasRoof) { @@ -105,7 +94,6 @@ namespace CoopClient.Entities.Player } vehicleModel.MarkAsNoLongerNeeded(); - return; } if (_lastVehicleEnter != 0) @@ -122,8 +110,6 @@ namespace CoopClient.Entities.Player } else if (!Character.IsInVehicle() || Character.CurrentVehicle.Handle != MainVehicle.Handle) { - MainVehicle.IsVisible = true; - if (Game.Player.Character.CurrentVehicle?.Handle == MainVehicle.Handle && VehicleSeatIndex == (int)Game.Player.Character.SeatIndex) { @@ -134,17 +120,16 @@ namespace CoopClient.Entities.Player if (VehicleSpeed > 0.2f || !Character.IsInRange(MainVehicle.Position, 4f)) { Character.SetIntoVehicle(MainVehicle, (VehicleSeat)VehicleSeatIndex); - Character.IsVisible = true; } else { _lastVehicleEnter = Util.GetTickCount64(); Character.Task.ClearAllImmediately(); - Character.IsVisible = true; Character.Task.EnterVehicle(MainVehicle, (VehicleSeat)VehicleSeatIndex, -1, 2f, EnterVehicleFlags.WarpToDoor); - return; } + + return; } if ((int)Character.SeatIndex != VehicleSeatIndex) @@ -176,6 +161,11 @@ namespace CoopClient.Entities.Player private void UpdateVehicleInfo() { + if (LastSyncWasFull) + { + MainVehicle.SetVehicleDamageModel(VehDamageModel); + } + if (VehicleColors != null && VehicleColors != _lastVehicleColors) { Function.Call(Hash.SET_VEHICLE_COLOURS, MainVehicle, VehicleColors[0], VehicleColors[1]); @@ -231,34 +221,6 @@ namespace CoopClient.Entities.Player MainVehicle.IsEngineRunning = VehIsEngineRunning; } - MainVehicle.CurrentRPM = VehRPM; - - if (VehAreLightsOn != MainVehicle.AreLightsOn) - { - MainVehicle.AreLightsOn = VehAreLightsOn; - } - - if (VehAreHighBeamsOn != MainVehicle.AreHighBeamsOn) - { - MainVehicle.AreHighBeamsOn = VehAreHighBeamsOn; - } - - if (MainVehicle.IsSubmarineCar) - { - if (Transformed) - { - if (!_lastTransformed) - { - _lastTransformed = true; - Function.Call(Hash._TRANSFORM_VEHICLE_TO_SUBMARINE, MainVehicle.Handle, false); - } - } - else if (_lastTransformed) - { - _lastTransformed = false; - Function.Call(Hash._TRANSFORM_SUBMARINE_TO_VEHICLE, MainVehicle.Handle, false); - } - } if (MainVehicle.IsPlane) { @@ -269,11 +231,40 @@ namespace CoopClient.Entities.Player } else { + if (MainVehicle.IsSubmarineCar) + { + if (Transformed) + { + if (!_lastTransformed) + { + _lastTransformed = true; + Function.Call(Hash._TRANSFORM_VEHICLE_TO_SUBMARINE, MainVehicle.Handle, false); + } + } + else if (_lastTransformed) + { + _lastTransformed = false; + Function.Call(Hash._TRANSFORM_SUBMARINE_TO_VEHICLE, MainVehicle.Handle, false); + } + } + + if (VehAreLightsOn != MainVehicle.AreLightsOn) + { + MainVehicle.AreLightsOn = VehAreLightsOn; + } + + if (VehAreHighBeamsOn != MainVehicle.AreHighBeamsOn) + { + MainVehicle.AreHighBeamsOn = VehAreHighBeamsOn; + } + if (MainVehicle.HasSiren && VehIsSireneActive != MainVehicle.IsSirenActive) { MainVehicle.IsSirenActive = VehIsSireneActive; } + MainVehicle.AreBrakeLightsOn = VehAreBrakeLightsOn; + if (IsHornActive) { if (!_lastHornActive) @@ -296,19 +287,14 @@ namespace CoopClient.Entities.Player MainVehicle.RoofState = VehRoofOpened ? VehicleRoofState.Opening : VehicleRoofState.Closing; } } - - Function.Call(Hash.SET_VEHICLE_BRAKE_LIGHTS, MainVehicle.Handle, VehAreBrakeLightsOn); - - if (LastSyncWasFull) - { - MainVehicle.SetVehicleDamageModel(VehDamageModel); - } } } } private void UpdateVehiclePosition() { + MainVehicle.CurrentRPM = VehRPM; + float avrLat = Math.Min(1.5f, (Util.GetTickCount64() - LastUpdateReceived) / AverageLatency); if (_lastVehicleSteeringAngle != VehicleSteeringAngle) diff --git a/Client/Main.cs b/Client/Main.cs index 05cf8dd..ae6b46e 100644 --- a/Client/Main.cs +++ b/Client/Main.cs @@ -374,7 +374,7 @@ namespace CoopClient DebugSyncPed = Players[0]; } - if ((Util.GetTickCount64() - _artificialLagCounter) < 279) + if ((Util.GetTickCount64() - _artificialLagCounter) < 243) { return; } diff --git a/Client/Packets/NPCPackets.cs b/Client/Packets/NPCPackets.cs index 48342da..75eb778 100644 --- a/Client/Packets/NPCPackets.cs +++ b/Client/Packets/NPCPackets.cs @@ -314,7 +314,6 @@ namespace CoopClient byteArray.Add(VehDamageModel.BrokenDoors); byteArray.Add(VehDamageModel.BrokenWindows); byteArray.AddRange(BitConverter.GetBytes(VehDamageModel.BurstedTires)); - byteArray.AddRange(BitConverter.GetBytes(VehDamageModel.PuncturedTires)); byteArray.Add(VehDamageModel.LeftHeadLightBroken); byteArray.Add(VehDamageModel.RightHeadLightBroken); } @@ -441,7 +440,6 @@ namespace CoopClient BrokenDoors = reader.ReadByte(), BrokenWindows = reader.ReadByte(), BurstedTires = reader.ReadShort(), - PuncturedTires = reader.ReadShort(), LeftHeadLightBroken = reader.ReadByte(), RightHeadLightBroken = reader.ReadByte() }; diff --git a/Client/Packets/Packets.cs b/Client/Packets/Packets.cs index 63e6385..5108d44 100644 --- a/Client/Packets/Packets.cs +++ b/Client/Packets/Packets.cs @@ -169,7 +169,6 @@ namespace CoopClient public byte BrokenWindows { get; set; } public byte BrokenDoors { get; set; } public short BurstedTires { get; set; } - public short PuncturedTires { get; set; } public byte LeftHeadLightBroken { get; set; } public byte RightHeadLightBroken { get; set; } } diff --git a/Client/Packets/PlayerPackets.cs b/Client/Packets/PlayerPackets.cs index c14be46..94b59d3 100644 --- a/Client/Packets/PlayerPackets.cs +++ b/Client/Packets/PlayerPackets.cs @@ -525,7 +525,6 @@ namespace CoopClient byteArray.Add(VehDamageModel.BrokenDoors); byteArray.Add(VehDamageModel.BrokenWindows); byteArray.AddRange(BitConverter.GetBytes(VehDamageModel.BurstedTires)); - byteArray.AddRange(BitConverter.GetBytes(VehDamageModel.PuncturedTires)); byteArray.Add(VehDamageModel.LeftHeadLightBroken); byteArray.Add(VehDamageModel.RightHeadLightBroken); } @@ -673,7 +672,6 @@ namespace CoopClient BrokenDoors = reader.ReadByte(), BrokenWindows = reader.ReadByte(), BurstedTires = reader.ReadShort(), - PuncturedTires = reader.ReadShort(), LeftHeadLightBroken = reader.ReadByte(), RightHeadLightBroken = reader.ReadByte() }; diff --git a/Client/Util.cs b/Client/Util.cs index 994ca02..33f36ba 100644 --- a/Client/Util.cs +++ b/Client/Util.cs @@ -379,20 +379,13 @@ namespace CoopClient } } - // Bursted and Punctured tires - short puncturedTires = 0; + // Bursted tires short burstedTires = 0; foreach (VehicleWheel wheel in veh.Wheels.GetAllWheels()) { if (wheel.IsBursted) { burstedTires |= (short)(1 << (int)wheel.BoneId); - continue; - } - - if (wheel.IsPunctured) - { - puncturedTires |= (short)(1 << (int)wheel.BoneId); } } @@ -401,7 +394,6 @@ namespace CoopClient BrokenDoors = brokenDoors, BrokenWindows = brokenWindows, BurstedTires = burstedTires, - PuncturedTires = puncturedTires, LeftHeadLightBroken = (byte)(veh.IsLeftHeadLightBroken ? 1 : 0), RightHeadLightBroken = (byte)(veh.IsRightHeadLightBroken ? 1 : 0) }; @@ -441,25 +433,11 @@ namespace CoopClient wheel.Puncture(); wheel.Burst(); } - - continue; } else if (wheel.IsBursted) { wheel.Fix(); } - - if ((model.PuncturedTires & (short)(1 << (int)wheel.BoneId)) != 0) - { - if (!wheel.IsPunctured) - { - wheel.Puncture(); - } - } - else if (wheel.IsPunctured) - { - wheel.Fix(); - } } veh.IsLeftHeadLightBroken = model.LeftHeadLightBroken > 0; diff --git a/Server/Packets/NPCPackets.cs b/Server/Packets/NPCPackets.cs index a620f88..63a794c 100644 --- a/Server/Packets/NPCPackets.cs +++ b/Server/Packets/NPCPackets.cs @@ -314,7 +314,6 @@ namespace CoopServer byteArray.Add(VehDamageModel.BrokenDoors); byteArray.Add(VehDamageModel.BrokenWindows); byteArray.AddRange(BitConverter.GetBytes(VehDamageModel.BurstedTires)); - byteArray.AddRange(BitConverter.GetBytes(VehDamageModel.PuncturedTires)); byteArray.Add(VehDamageModel.LeftHeadLightBroken); byteArray.Add(VehDamageModel.RightHeadLightBroken); } @@ -441,7 +440,6 @@ namespace CoopServer BrokenDoors = reader.ReadByte(), BrokenWindows = reader.ReadByte(), BurstedTires = reader.ReadShort(), - PuncturedTires = reader.ReadShort(), LeftHeadLightBroken = reader.ReadByte(), RightHeadLightBroken = reader.ReadByte() }; diff --git a/Server/Packets/Packets.cs b/Server/Packets/Packets.cs index 10d1ef5..de665e2 100644 --- a/Server/Packets/Packets.cs +++ b/Server/Packets/Packets.cs @@ -157,7 +157,6 @@ namespace CoopServer public byte BrokenWindows { get; set; } public byte BrokenDoors { get; set; } public short BurstedTires { get; set; } - public short PuncturedTires { get; set; } public byte LeftHeadLightBroken { get; set; } public byte RightHeadLightBroken { get; set; } } diff --git a/Server/Packets/PlayerPackets.cs b/Server/Packets/PlayerPackets.cs index 99eef96..4bebad6 100644 --- a/Server/Packets/PlayerPackets.cs +++ b/Server/Packets/PlayerPackets.cs @@ -525,7 +525,6 @@ namespace CoopServer byteArray.Add(VehDamageModel.BrokenDoors); byteArray.Add(VehDamageModel.BrokenWindows); byteArray.AddRange(BitConverter.GetBytes(VehDamageModel.BurstedTires)); - byteArray.AddRange(BitConverter.GetBytes(VehDamageModel.PuncturedTires)); byteArray.Add(VehDamageModel.LeftHeadLightBroken); byteArray.Add(VehDamageModel.RightHeadLightBroken); } @@ -673,7 +672,6 @@ namespace CoopServer BrokenDoors = reader.ReadByte(), BrokenWindows = reader.ReadByte(), BurstedTires = reader.ReadShort(), - PuncturedTires = reader.ReadShort(), LeftHeadLightBroken = reader.ReadByte(), RightHeadLightBroken = reader.ReadByte() };