Some changes and bug fixes

This commit is contained in:
EntenKoeniq
2022-04-14 05:27:47 +02:00
parent 81733a2c19
commit e978c13f41
11 changed files with 86 additions and 138 deletions

View File

@ -150,22 +150,19 @@ namespace CoopClient.Entities.Player
if (!characterExist) if (!characterExist)
{ {
if (!CreateCharacter()) CreateCharacter();
{ return;
return;
}
} }
else if (LastSyncWasFull) else if (LastSyncWasFull)
{ {
if (ModelHash != _lastModelHash) if (ModelHash != _lastModelHash)
{ {
Character.Kill(); Character.Kill();
Character.MarkAsNoLongerNeeded();
Character.Delete(); Character.Delete();
if (!CreateCharacter()) CreateCharacter();
{ return;
return;
}
} }
else if (!Clothes.Compare(_lastClothes)) else if (!Clothes.Compare(_lastClothes))
{ {
@ -210,38 +207,42 @@ namespace CoopClient.Entities.Player
private void RenderNameTag() 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; return;
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);
} }
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()) if (PedBlip != null && PedBlip.Exists())
{ {
PedBlip.Delete(); PedBlip.Delete();
@ -249,22 +250,20 @@ namespace CoopClient.Entities.Player
} }
Model characterModel = ModelHash.ModelRequest(); Model characterModel = ModelHash.ModelRequest();
if (characterModel == null) if (characterModel == null)
{ {
//GTA.UI.Notification.Show($"~r~(Character)Model ({CurrentModelHash}) cannot be loaded!"); return;
return false;
} }
Character = World.CreatePed(characterModel, Position, Rotation.Z); Character = World.CreatePed(characterModel, Position);
characterModel.MarkAsNoLongerNeeded(); characterModel.MarkAsNoLongerNeeded();
if (Character == null)
{
return;
}
Character.RelationshipGroup = Main.RelationshipGroup; Character.RelationshipGroup = Main.RelationshipGroup;
Character.Health = Health; Character.Health = Health;
if (IsInVehicle)
{
Character.IsVisible = false;
}
Character.BlockPermanentEvents = true; Character.BlockPermanentEvents = true;
Character.CanRagdoll = false; Character.CanRagdoll = false;
Character.IsInvincible = true; Character.IsInvincible = true;
@ -286,8 +285,6 @@ namespace CoopClient.Entities.Player
Character.AttachedBlip.Color = BlipColor.White; Character.AttachedBlip.Color = BlipColor.White;
Character.AttachedBlip.Scale = 0.8f; Character.AttachedBlip.Scale = 0.8f;
Character.AttachedBlip.Name = Username; Character.AttachedBlip.Name = Username;
return true;
} }
private void SetClothes() private void SetClothes()

View File

@ -41,9 +41,6 @@ namespace CoopClient.Entities.Player
{ {
if (Character.IsInVehicle()) if (Character.IsInVehicle())
{ {
Character.Task.ClearAll();
Character.Task.ClearSecondary();
if (MainVehicle == null) if (MainVehicle == null)
{ {
Character.Task.LeaveVehicle(); Character.Task.LeaveVehicle();

View File

@ -69,30 +69,19 @@ namespace CoopClient.Entities.Player
Model vehicleModel = VehicleModelHash.ModelRequest(); Model vehicleModel = VehicleModelHash.ModelRequest();
if (vehicleModel == null) if (vehicleModel == null)
{ {
//GTA.UI.Notification.Show($"~r~(Vehicle)Model ({CurrentVehicleModelHash}) cannot be loaded!");
Character.IsVisible = false;
return; return;
} }
bool vehFound = false;
Vehicle targetVehicle = World.GetClosestVehicle(Position, 7f, vehicleModel); Vehicle targetVehicle = World.GetClosestVehicle(Position, 7f, vehicleModel);
if (targetVehicle != null) if (targetVehicle != null && targetVehicle.IsSeatFree((VehicleSeat)VehicleSeatIndex))
{ {
if (targetVehicle.IsSeatFree((VehicleSeat)VehicleSeatIndex)) MainVehicle = targetVehicle;
{
MainVehicle = targetVehicle;
vehFound = true;
}
} }
else
if (!vehFound)
{ {
MainVehicle = World.CreateVehicle(vehicleModel, Position); MainVehicle = World.CreateVehicle(vehicleModel, Position);
MainVehicle.IsVisible = false;
MainVehicle.Quaternion = _vehicleRotation;
MainVehicle.IsInvincible = true; MainVehicle.IsInvincible = true;
MainVehicle.Quaternion = _vehicleRotation;
if (MainVehicle.HasRoof) if (MainVehicle.HasRoof)
{ {
@ -105,7 +94,6 @@ namespace CoopClient.Entities.Player
} }
vehicleModel.MarkAsNoLongerNeeded(); vehicleModel.MarkAsNoLongerNeeded();
return;
} }
if (_lastVehicleEnter != 0) if (_lastVehicleEnter != 0)
@ -122,8 +110,6 @@ namespace CoopClient.Entities.Player
} }
else if (!Character.IsInVehicle() || Character.CurrentVehicle.Handle != MainVehicle.Handle) else if (!Character.IsInVehicle() || Character.CurrentVehicle.Handle != MainVehicle.Handle)
{ {
MainVehicle.IsVisible = true;
if (Game.Player.Character.CurrentVehicle?.Handle == MainVehicle.Handle && if (Game.Player.Character.CurrentVehicle?.Handle == MainVehicle.Handle &&
VehicleSeatIndex == (int)Game.Player.Character.SeatIndex) VehicleSeatIndex == (int)Game.Player.Character.SeatIndex)
{ {
@ -134,17 +120,16 @@ namespace CoopClient.Entities.Player
if (VehicleSpeed > 0.2f || !Character.IsInRange(MainVehicle.Position, 4f)) if (VehicleSpeed > 0.2f || !Character.IsInRange(MainVehicle.Position, 4f))
{ {
Character.SetIntoVehicle(MainVehicle, (VehicleSeat)VehicleSeatIndex); Character.SetIntoVehicle(MainVehicle, (VehicleSeat)VehicleSeatIndex);
Character.IsVisible = true;
} }
else else
{ {
_lastVehicleEnter = Util.GetTickCount64(); _lastVehicleEnter = Util.GetTickCount64();
Character.Task.ClearAllImmediately(); Character.Task.ClearAllImmediately();
Character.IsVisible = true;
Character.Task.EnterVehicle(MainVehicle, (VehicleSeat)VehicleSeatIndex, -1, 2f, EnterVehicleFlags.WarpToDoor); Character.Task.EnterVehicle(MainVehicle, (VehicleSeat)VehicleSeatIndex, -1, 2f, EnterVehicleFlags.WarpToDoor);
return;
} }
return;
} }
if ((int)Character.SeatIndex != VehicleSeatIndex) if ((int)Character.SeatIndex != VehicleSeatIndex)
@ -176,6 +161,11 @@ namespace CoopClient.Entities.Player
private void UpdateVehicleInfo() private void UpdateVehicleInfo()
{ {
if (LastSyncWasFull)
{
MainVehicle.SetVehicleDamageModel(VehDamageModel);
}
if (VehicleColors != null && VehicleColors != _lastVehicleColors) if (VehicleColors != null && VehicleColors != _lastVehicleColors)
{ {
Function.Call(Hash.SET_VEHICLE_COLOURS, MainVehicle, VehicleColors[0], VehicleColors[1]); Function.Call(Hash.SET_VEHICLE_COLOURS, MainVehicle, VehicleColors[0], VehicleColors[1]);
@ -231,34 +221,6 @@ namespace CoopClient.Entities.Player
MainVehicle.IsEngineRunning = VehIsEngineRunning; 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) if (MainVehicle.IsPlane)
{ {
@ -269,11 +231,40 @@ namespace CoopClient.Entities.Player
} }
else 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) if (MainVehicle.HasSiren && VehIsSireneActive != MainVehicle.IsSirenActive)
{ {
MainVehicle.IsSirenActive = VehIsSireneActive; MainVehicle.IsSirenActive = VehIsSireneActive;
} }
MainVehicle.AreBrakeLightsOn = VehAreBrakeLightsOn;
if (IsHornActive) if (IsHornActive)
{ {
if (!_lastHornActive) if (!_lastHornActive)
@ -296,19 +287,14 @@ namespace CoopClient.Entities.Player
MainVehicle.RoofState = VehRoofOpened ? VehicleRoofState.Opening : VehicleRoofState.Closing; 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() private void UpdateVehiclePosition()
{ {
MainVehicle.CurrentRPM = VehRPM;
float avrLat = Math.Min(1.5f, (Util.GetTickCount64() - LastUpdateReceived) / AverageLatency); float avrLat = Math.Min(1.5f, (Util.GetTickCount64() - LastUpdateReceived) / AverageLatency);
if (_lastVehicleSteeringAngle != VehicleSteeringAngle) if (_lastVehicleSteeringAngle != VehicleSteeringAngle)

View File

@ -374,7 +374,7 @@ namespace CoopClient
DebugSyncPed = Players[0]; DebugSyncPed = Players[0];
} }
if ((Util.GetTickCount64() - _artificialLagCounter) < 279) if ((Util.GetTickCount64() - _artificialLagCounter) < 243)
{ {
return; return;
} }

View File

@ -314,7 +314,6 @@ namespace CoopClient
byteArray.Add(VehDamageModel.BrokenDoors); byteArray.Add(VehDamageModel.BrokenDoors);
byteArray.Add(VehDamageModel.BrokenWindows); byteArray.Add(VehDamageModel.BrokenWindows);
byteArray.AddRange(BitConverter.GetBytes(VehDamageModel.BurstedTires)); byteArray.AddRange(BitConverter.GetBytes(VehDamageModel.BurstedTires));
byteArray.AddRange(BitConverter.GetBytes(VehDamageModel.PuncturedTires));
byteArray.Add(VehDamageModel.LeftHeadLightBroken); byteArray.Add(VehDamageModel.LeftHeadLightBroken);
byteArray.Add(VehDamageModel.RightHeadLightBroken); byteArray.Add(VehDamageModel.RightHeadLightBroken);
} }
@ -441,7 +440,6 @@ namespace CoopClient
BrokenDoors = reader.ReadByte(), BrokenDoors = reader.ReadByte(),
BrokenWindows = reader.ReadByte(), BrokenWindows = reader.ReadByte(),
BurstedTires = reader.ReadShort(), BurstedTires = reader.ReadShort(),
PuncturedTires = reader.ReadShort(),
LeftHeadLightBroken = reader.ReadByte(), LeftHeadLightBroken = reader.ReadByte(),
RightHeadLightBroken = reader.ReadByte() RightHeadLightBroken = reader.ReadByte()
}; };

View File

@ -169,7 +169,6 @@ namespace CoopClient
public byte BrokenWindows { get; set; } public byte BrokenWindows { get; set; }
public byte BrokenDoors { get; set; } public byte BrokenDoors { get; set; }
public short BurstedTires { get; set; } public short BurstedTires { get; set; }
public short PuncturedTires { get; set; }
public byte LeftHeadLightBroken { get; set; } public byte LeftHeadLightBroken { get; set; }
public byte RightHeadLightBroken { get; set; } public byte RightHeadLightBroken { get; set; }
} }

View File

@ -525,7 +525,6 @@ namespace CoopClient
byteArray.Add(VehDamageModel.BrokenDoors); byteArray.Add(VehDamageModel.BrokenDoors);
byteArray.Add(VehDamageModel.BrokenWindows); byteArray.Add(VehDamageModel.BrokenWindows);
byteArray.AddRange(BitConverter.GetBytes(VehDamageModel.BurstedTires)); byteArray.AddRange(BitConverter.GetBytes(VehDamageModel.BurstedTires));
byteArray.AddRange(BitConverter.GetBytes(VehDamageModel.PuncturedTires));
byteArray.Add(VehDamageModel.LeftHeadLightBroken); byteArray.Add(VehDamageModel.LeftHeadLightBroken);
byteArray.Add(VehDamageModel.RightHeadLightBroken); byteArray.Add(VehDamageModel.RightHeadLightBroken);
} }
@ -673,7 +672,6 @@ namespace CoopClient
BrokenDoors = reader.ReadByte(), BrokenDoors = reader.ReadByte(),
BrokenWindows = reader.ReadByte(), BrokenWindows = reader.ReadByte(),
BurstedTires = reader.ReadShort(), BurstedTires = reader.ReadShort(),
PuncturedTires = reader.ReadShort(),
LeftHeadLightBroken = reader.ReadByte(), LeftHeadLightBroken = reader.ReadByte(),
RightHeadLightBroken = reader.ReadByte() RightHeadLightBroken = reader.ReadByte()
}; };

View File

@ -379,20 +379,13 @@ namespace CoopClient
} }
} }
// Bursted and Punctured tires // Bursted tires
short puncturedTires = 0;
short burstedTires = 0; short burstedTires = 0;
foreach (VehicleWheel wheel in veh.Wheels.GetAllWheels()) foreach (VehicleWheel wheel in veh.Wheels.GetAllWheels())
{ {
if (wheel.IsBursted) if (wheel.IsBursted)
{ {
burstedTires |= (short)(1 << (int)wheel.BoneId); burstedTires |= (short)(1 << (int)wheel.BoneId);
continue;
}
if (wheel.IsPunctured)
{
puncturedTires |= (short)(1 << (int)wheel.BoneId);
} }
} }
@ -401,7 +394,6 @@ namespace CoopClient
BrokenDoors = brokenDoors, BrokenDoors = brokenDoors,
BrokenWindows = brokenWindows, BrokenWindows = brokenWindows,
BurstedTires = burstedTires, BurstedTires = burstedTires,
PuncturedTires = puncturedTires,
LeftHeadLightBroken = (byte)(veh.IsLeftHeadLightBroken ? 1 : 0), LeftHeadLightBroken = (byte)(veh.IsLeftHeadLightBroken ? 1 : 0),
RightHeadLightBroken = (byte)(veh.IsRightHeadLightBroken ? 1 : 0) RightHeadLightBroken = (byte)(veh.IsRightHeadLightBroken ? 1 : 0)
}; };
@ -441,25 +433,11 @@ namespace CoopClient
wheel.Puncture(); wheel.Puncture();
wheel.Burst(); wheel.Burst();
} }
continue;
} }
else if (wheel.IsBursted) else if (wheel.IsBursted)
{ {
wheel.Fix(); 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; veh.IsLeftHeadLightBroken = model.LeftHeadLightBroken > 0;

View File

@ -314,7 +314,6 @@ namespace CoopServer
byteArray.Add(VehDamageModel.BrokenDoors); byteArray.Add(VehDamageModel.BrokenDoors);
byteArray.Add(VehDamageModel.BrokenWindows); byteArray.Add(VehDamageModel.BrokenWindows);
byteArray.AddRange(BitConverter.GetBytes(VehDamageModel.BurstedTires)); byteArray.AddRange(BitConverter.GetBytes(VehDamageModel.BurstedTires));
byteArray.AddRange(BitConverter.GetBytes(VehDamageModel.PuncturedTires));
byteArray.Add(VehDamageModel.LeftHeadLightBroken); byteArray.Add(VehDamageModel.LeftHeadLightBroken);
byteArray.Add(VehDamageModel.RightHeadLightBroken); byteArray.Add(VehDamageModel.RightHeadLightBroken);
} }
@ -441,7 +440,6 @@ namespace CoopServer
BrokenDoors = reader.ReadByte(), BrokenDoors = reader.ReadByte(),
BrokenWindows = reader.ReadByte(), BrokenWindows = reader.ReadByte(),
BurstedTires = reader.ReadShort(), BurstedTires = reader.ReadShort(),
PuncturedTires = reader.ReadShort(),
LeftHeadLightBroken = reader.ReadByte(), LeftHeadLightBroken = reader.ReadByte(),
RightHeadLightBroken = reader.ReadByte() RightHeadLightBroken = reader.ReadByte()
}; };

View File

@ -157,7 +157,6 @@ namespace CoopServer
public byte BrokenWindows { get; set; } public byte BrokenWindows { get; set; }
public byte BrokenDoors { get; set; } public byte BrokenDoors { get; set; }
public short BurstedTires { get; set; } public short BurstedTires { get; set; }
public short PuncturedTires { get; set; }
public byte LeftHeadLightBroken { get; set; } public byte LeftHeadLightBroken { get; set; }
public byte RightHeadLightBroken { get; set; } public byte RightHeadLightBroken { get; set; }
} }

View File

@ -525,7 +525,6 @@ namespace CoopServer
byteArray.Add(VehDamageModel.BrokenDoors); byteArray.Add(VehDamageModel.BrokenDoors);
byteArray.Add(VehDamageModel.BrokenWindows); byteArray.Add(VehDamageModel.BrokenWindows);
byteArray.AddRange(BitConverter.GetBytes(VehDamageModel.BurstedTires)); byteArray.AddRange(BitConverter.GetBytes(VehDamageModel.BurstedTires));
byteArray.AddRange(BitConverter.GetBytes(VehDamageModel.PuncturedTires));
byteArray.Add(VehDamageModel.LeftHeadLightBroken); byteArray.Add(VehDamageModel.LeftHeadLightBroken);
byteArray.Add(VehDamageModel.RightHeadLightBroken); byteArray.Add(VehDamageModel.RightHeadLightBroken);
} }
@ -673,7 +672,6 @@ namespace CoopServer
BrokenDoors = reader.ReadByte(), BrokenDoors = reader.ReadByte(),
BrokenWindows = reader.ReadByte(), BrokenWindows = reader.ReadByte(),
BurstedTires = reader.ReadShort(), BurstedTires = reader.ReadShort(),
PuncturedTires = reader.ReadShort(),
LeftHeadLightBroken = reader.ReadByte(), LeftHeadLightBroken = reader.ReadByte(),
RightHeadLightBroken = reader.ReadByte() RightHeadLightBroken = reader.ReadByte()
}; };