Cleaned up

This commit is contained in:
Nick I. A
2022-08-11 14:29:18 +02:00
parent 29202906e1
commit d70c739208
3 changed files with 90 additions and 158 deletions

View File

@ -10,7 +10,7 @@
<AppDesignerFolder>Properties</AppDesignerFolder> <AppDesignerFolder>Properties</AppDesignerFolder>
<RootNamespace>RageCoop.Client</RootNamespace> <RootNamespace>RageCoop.Client</RootNamespace>
<AssemblyName>RageCoop.Client</AssemblyName> <AssemblyName>RageCoop.Client</AssemblyName>
<TargetFrameworkVersion>v4.8</TargetFrameworkVersion> <TargetFrameworkVersion>v4.8.1</TargetFrameworkVersion>
<FileAlignment>512</FileAlignment> <FileAlignment>512</FileAlignment>
<Deterministic>true</Deterministic> <Deterministic>true</Deterministic>
<TargetFrameworkProfile /> <TargetFrameworkProfile />

View File

@ -46,8 +46,7 @@ namespace RageCoop.Client
{ {
foreach (int id in new List<int>(PedsByID.Keys)) foreach (int id in new List<int>(PedsByID.Keys))
{ {
if (keepPlayer&&(id==Main.LocalPlayerID)) { continue; } if (keepPlayer && (id==Main.LocalPlayerID)|| keepMine && (PedsByID[id].OwnerID == Main.LocalPlayerID)) { continue; }
if (keepMine&&(PedsByID[id].OwnerID==Main.LocalPlayerID)) { continue; }
RemovePed(id); RemovePed(id);
} }
PedsByID.Clear(); PedsByID.Clear();
@ -88,31 +87,31 @@ namespace RageCoop.Client
} }
#region PEDS #region PEDS
public static SyncedPed GetPedByID(int id) public static SyncedPed GetPedByID(int id) => PedsByID.ContainsKey(id) ? PedsByID[id] : null;
{ public static SyncedPed GetPedByHandle(int handle) => PedsByHandle.ContainsKey(handle) ? PedsByHandle[handle] : null;
return PedsByID.ContainsKey(id) ? PedsByID[id] : null; public static List<int> GetPedIDs() => new List<int>(PedsByID.Keys);
}
public static SyncedPed GetPedByHandle(int handle)
{
return PedsByHandle.ContainsKey(handle) ? PedsByHandle[handle] : null;
}
public static List<int> GetPedIDs()
{
return new List<int>(PedsByID.Keys);
}
public static bool AddPlayer() public static bool AddPlayer()
{ {
Ped p = Game.Player.Character; Ped p = Game.Player.Character;
SyncedPed player = GetPedByID(Main.LocalPlayerID); SyncedPed player = GetPedByID(Main.LocalPlayerID);
if (player!=null) if (player==null)
{ {
if (player.MainPed!=p) Main.Logger.Debug($"Creating SyncEntity for player, handle:{p.Handle}");
SyncedPed c = new SyncedPed(p);
Main.LocalPlayerID = c.OwnerID = c.ID;
Add(c);
Main.Logger.Debug($"Local player ID is:{c.ID}");
PlayerList.SetPlayer(c.ID, Main.Settings.Username);
return true;
}
if (player.MainPed != p)
{ {
// Player model changed // Player model changed
player.MainPed = p; player.MainPed = p;
// Remove it from Handle_Characters // Remove it from Handle_Characters
var pairs = PedsByHandle.Where(x => x.Value==player); var pairs = PedsByHandle.Where(x => x.Value == player);
if (pairs.Any()) if (pairs.Any())
{ {
var pair = pairs.First(); var pair = pairs.First();
@ -126,17 +125,6 @@ namespace RageCoop.Client
PedsByHandle.Add(p.Handle, player); PedsByHandle.Add(p.Handle, player);
} }
} }
}
else
{
Main.Logger.Debug($"Creating SyncEntity for player, handle:{p.Handle}");
SyncedPed c = new SyncedPed(p);
Main.LocalPlayerID=c.OwnerID=c.ID;
Add(c);
Main.Logger.Debug($"Local player ID is:{c.ID}");
PlayerList.SetPlayer(c.ID, Main.Settings.Username);
return true;
}
return false; return false;
} }
public static void Add(SyncedPed c) public static void Add(SyncedPed c)
@ -194,18 +182,9 @@ namespace RageCoop.Client
#endregion #endregion
#region VEHICLES #region VEHICLES
public static SyncedVehicle GetVehicleByID(int id) public static SyncedVehicle GetVehicleByID(int id) => VehiclesByID.ContainsKey(id) ? VehiclesByID[id] : null;
{ public static SyncedVehicle GetVehicleByHandle(int handle) => VehiclesByHandle.ContainsKey(handle) ? VehiclesByHandle[handle] : null;
return VehiclesByID.ContainsKey(id) ? VehiclesByID[id] : null; public static List<int> GetVehicleIDs() => new List<int>(VehiclesByID.Keys);
}
public static SyncedVehicle GetVehicleByHandle(int handle)
{
return VehiclesByHandle.ContainsKey(handle) ? VehiclesByHandle[handle] : null;
}
public static List<int> GetVehicleIDs()
{
return new List<int>(VehiclesByID.Keys);
}
public static void Add(SyncedVehicle v) public static void Add(SyncedVehicle v)
{ {
if (VehiclesByID.ContainsKey(v.ID)) if (VehiclesByID.ContainsKey(v.ID))
@ -300,18 +279,9 @@ namespace RageCoop.Client
} }
} }
public static bool PedExists(int id) public static bool PedExists(int id) => PedsByID.ContainsKey(id);
{ public static bool VehicleExists(int id) => VehiclesByID.ContainsKey(id);
return PedsByID.ContainsKey(id); public static bool ProjectileExists(int id) => ProjectilesByID.ContainsKey(id);
}
public static bool VehicleExists(int id)
{
return VehiclesByID.ContainsKey(id);
}
public static bool ProjectileExists(int id)
{
return ProjectilesByID.ContainsKey(id);
}
#endregion #endregion
static int vehStateIndex; static int vehStateIndex;
static int pedStateIndex; static int pedStateIndex;
@ -358,27 +328,22 @@ namespace RageCoop.Client
if (!ProjectilesByHandle.ContainsKey(p.Handle)) if (!ProjectilesByHandle.ContainsKey(p.Handle))
{ {
Add(new SyncedProjectile(p)); Add(new SyncedProjectile(p));
} }
} }
foreach (SyncedProjectile p in ProjectilesByID.Values.ToArray()) foreach (SyncedProjectile p in ProjectilesByID.Values.ToArray())
{ {
// Outgoing sync // Outgoing sync
if (p.IsLocal) if (p.IsLocal)
{ {
if (p.MainProjectile.AttachedEntity==null) if (p.MainProjectile.AttachedEntity==null)
{ {
// Prevent projectiles from exploding next to vehicle // Prevent projectiles from exploding next to vehicle
if (WeaponUtil.VehicleProjectileWeapons.Contains((VehicleWeaponHash)p.MainProjectile.WeaponHash)) if (WeaponUtil.VehicleProjectileWeapons.Contains((VehicleWeaponHash)p.MainProjectile.WeaponHash) &&
{ p.MainProjectile.WeaponHash != (WeaponHash)VehicleWeaponHash.Tank && p.Origin.DistanceTo(p.MainProjectile.Position) < 2)
if (p.MainProjectile.WeaponHash!=(WeaponHash)VehicleWeaponHash.Tank && p.Origin.DistanceTo(p.MainProjectile.Position)<2)
{ {
continue; continue;
} }
}
Networking.SendProjectile(p); Networking.SendProjectile(p);
} }
@ -393,11 +358,8 @@ namespace RageCoop.Client
{ {
p.Update(); p.Update();
} }
} }
} }
} }
i=-1; i=-1;
@ -411,20 +373,15 @@ namespace RageCoop.Client
SyncedPed c = EntityPool.GetPedByHandle(p.Handle); SyncedPed c = EntityPool.GetPedByHandle(p.Handle);
if (c==null && (p!=Game.Player.Character)) if (c==null && (p!=Game.Player.Character))
{ {
if (allPeds.Length>Main.Settings.WorldPedSoftLimit) if (allPeds.Length>Main.Settings.WorldPedSoftLimit && p.PopulationType != EntityPopulationType.RandomAmbient)
{
if (p.PopulationType!=EntityPopulationType.RandomAmbient)
{ {
p.Delete(); p.Delete();
continue; continue;
} }
}
// Main.Logger.Trace($"Creating SyncEntity for ped, handle:{p.Handle}"); // Main.Logger.Trace($"Creating SyncEntity for ped, handle:{p.Handle}");
c=new SyncedPed(p); c=new SyncedPed(p);
EntityPool.Add(c); EntityPool.Add(c);
} }
} }
#if BENCHMARK #if BENCHMARK
@ -437,6 +394,7 @@ namespace RageCoop.Client
{ {
pedStateIndex=0; pedStateIndex=0;
} }
foreach (SyncedPed c in ps) foreach (SyncedPed c in ps)
{ {
i++; i++;
@ -457,7 +415,6 @@ namespace RageCoop.Client
Networking.SendPed(c, (i-pedStateIndex)<pedStatesPerFrame); Networking.SendPed(c, (i-pedStateIndex)<pedStatesPerFrame);
#if BENCHMARK #if BENCHMARK
Debug.TimeStamps[TimeStamp.SendPed]=PerfCounter2.ElapsedTicks-start; Debug.TimeStamps[TimeStamp.SendPed]=PerfCounter2.ElapsedTicks-start;
#endif #endif
} }
@ -472,13 +429,11 @@ namespace RageCoop.Client
RemovePed(c.ID, "OutOfSync"); RemovePed(c.ID, "OutOfSync");
} }
#if BENCHMARK #if BENCHMARK
Debug.TimeStamps[TimeStamp.UpdatePed]=PerfCounter2.ElapsedTicks-start; Debug.TimeStamps[TimeStamp.UpdatePed]=PerfCounter2.ElapsedTicks-start;
#endif #endif
} }
} }
#if BENCHMARK #if BENCHMARK
Debug.TimeStamps[TimeStamp.PedTotal]=PerfCounter.ElapsedTicks; Debug.TimeStamps[TimeStamp.PedTotal]=PerfCounter.ElapsedTicks;
#endif #endif
} }
@ -487,7 +442,6 @@ namespace RageCoop.Client
lock (VehiclesLock) lock (VehiclesLock)
{ {
foreach (Vehicle veh in allVehicles) foreach (Vehicle veh in allVehicles)
{ {
if (!VehiclesByHandle.ContainsKey(veh.Handle)) if (!VehiclesByHandle.ContainsKey(veh.Handle))
@ -513,12 +467,9 @@ namespace RageCoop.Client
// Main.Logger.Debug($"Creating SyncEntity for vehicle, handle:{veh.Handle}"); // Main.Logger.Debug($"Creating SyncEntity for vehicle, handle:{veh.Handle}");
Add(new SyncedVehicle(veh)); Add(new SyncedVehicle(veh));
} }
} }
#if BENCHMARK #if BENCHMARK
Debug.TimeStamps[TimeStamp.AddVehicles]=PerfCounter.ElapsedTicks; Debug.TimeStamps[TimeStamp.AddVehicles]=PerfCounter.ElapsedTicks;
#endif #endif
var vs = VehiclesByID.Values.ToArray(); var vs = VehiclesByID.Values.ToArray();
@ -527,6 +478,7 @@ namespace RageCoop.Client
{ {
vehStateIndex=0; vehStateIndex=0;
} }
foreach (SyncedVehicle v in vs) foreach (SyncedVehicle v in vs)
{ {
i++; i++;
@ -543,20 +495,15 @@ namespace RageCoop.Client
SyncEvents.Check(v); SyncEvents.Check(v);
Networking.SendVehicle(v, (i-vehStateIndex)<vehStatesPerFrame); Networking.SendVehicle(v, (i-vehStateIndex)<vehStatesPerFrame);
} }
else // Incoming sync else // Incoming sync
{ {
v.Update(); v.Update();
if (v.IsOutOfSync) if (v.IsOutOfSync)
{ {
RemoveVehicle(v.ID, "OutOfSync"); RemoveVehicle(v.ID, "OutOfSync");
} }
} }
} }
#if BENCHMARK #if BENCHMARK
@ -586,6 +533,7 @@ namespace RageCoop.Client
RemovePed(p.ID); RemovePed(p.ID);
} }
} }
foreach (SyncedVehicle v in VehiclesByID.Values.ToArray()) foreach (SyncedVehicle v in VehiclesByID.Values.ToArray())
{ {
if (v.OwnerID==playerPedId) if (v.OwnerID==playerPedId)
@ -598,10 +546,7 @@ namespace RageCoop.Client
public static int RequestNewID() public static int RequestNewID()
{ {
int ID = 0; int ID = 0;
while ((ID==0) while ((ID==0) || PedsByID.ContainsKey(ID) || VehiclesByID.ContainsKey(ID) || ProjectilesByID.ContainsKey(ID))
|| PedsByID.ContainsKey(ID)
|| VehiclesByID.ContainsKey(ID)
|| ProjectilesByID.ContainsKey(ID))
{ {
byte[] rngBytes = new byte[4]; byte[] rngBytes = new byte[4];
@ -619,16 +564,14 @@ namespace RageCoop.Client
} }
public static string DumpDebug() public static string DumpDebug()
{ {
string s = ""; return $"\nID_Peds: {PedsByID.Count}" +
s+="\nID_Peds: "+PedsByID.Count; $"\nHandle_Peds: {PedsByHandle.Count}" +
s+="\nHandle_Peds: "+PedsByHandle.Count; $"\nID_Vehicles: {VehiclesByID.Count}" +
s+="\nID_Vehicles: "+VehiclesByID.Count; $"\nHandle_vehicles: {VehiclesByHandle.Count}" +
s+="\nHandle_Vehicles: "+VehiclesByHandle.Count; $"\nID_Projectiles: {ProjectilesByID.Count}" +
s+="\nID_Projectiles: "+ProjectilesByID.Count; $"\nHandle_Projectiles: {ProjectilesByHandle.Count}" +
s+="\nHandle_Projectiles: "+ProjectilesByHandle.Count; $"\npedStatesPerFrame: {pedStatesPerFrame}" +
s+="\npedStatesPerFrame:"+pedStatesPerFrame; $"\nvehStatesPerFrame: {vehStatesPerFrame}";
s+="\nvehStatesPerFrame:"+vehStatesPerFrame;
return s;
} }
public static class ThreadSafe public static class ThreadSafe
{ {

View File

@ -136,13 +136,10 @@ namespace RageCoop.Client
var v = EntityPool.GetVehicleByID(vehId); var v = EntityPool.GetVehicleByID(vehId);
var p = EntityPool.GetPedByID(pedId)?.MainPed; var p = EntityPool.GetPedByID(pedId)?.MainPed;
if (v==null||p==null) { return; } if (v==null||p==null) { return; }
if (!v.MainVehicle.IsSeatFree(seat)) if (!v.MainVehicle.IsSeatFree(seat) && v.MainVehicle.GetPedOnSeat(seat) != p)
{
if (v.MainVehicle.GetPedOnSeat(seat)!=p)
{ {
v.MainVehicle.GetPedOnSeat(seat).Task.WarpOutOfVehicle(v.MainVehicle); v.MainVehicle.GetPedOnSeat(seat).Task.WarpOutOfVehicle(v.MainVehicle);
} }
}
p.SetIntoVehicle(v.MainVehicle, seat); p.SetIntoVehicle(v.MainVehicle, seat);
} }
private static void HandleOwnerChanged(Packets.OwnerChanged p) private static void HandleOwnerChanged(Packets.OwnerChanged p)
@ -215,16 +212,12 @@ namespace RageCoop.Client
{ {
World.CreateParticleEffectNonLooped(CorePFXAsset, "muz_assault_rifle", p.GetMuzzlePosition(), w.Rotation, 1); World.CreateParticleEffectNonLooped(CorePFXAsset, "muz_assault_rifle", p.GetMuzzlePosition(), w.Rotation, 1);
} }
} }
else if (p.VehicleWeapon!=VehicleWeaponHash.Invalid) else if (p.VehicleWeapon!=VehicleWeaponHash.Invalid && p.VehicleWeapon == VehicleWeaponHash.Tank)
{
if (p.VehicleWeapon==VehicleWeaponHash.Tank)
{ {
World.CreateParticleEffectNonLooped(CorePFXAsset, "muz_tank", p.CurrentVehicle.GetMuzzleInfo().Position, p.CurrentVehicle.Bones[35].ForwardVector.ToEulerRotation(p.CurrentVehicle.Bones[35].UpVector), 1); World.CreateParticleEffectNonLooped(CorePFXAsset, "muz_tank", p.CurrentVehicle.GetMuzzleInfo().Position, p.CurrentVehicle.Bones[35].ForwardVector.ToEulerRotation(p.CurrentVehicle.Bones[35].UpVector), 1);
} }
} }
}
public static void HandleEvent(PacketType type, byte[] data) public static void HandleEvent(PacketType type, byte[] data)
{ {
switch (type) switch (type)
@ -303,32 +296,10 @@ namespace RageCoop.Client
Vector3 endPos = subject.LastWeaponImpactPosition; Vector3 endPos = subject.LastWeaponImpactPosition;
if (endPos==default) if (endPos==default)
{ {
if (i>5) if (++i<=5) { return false; }
{
endPos=subject.GetAimCoord(); endPos = subject.GetAimCoord();
if (subject.IsInVehicle() && subject.VehicleWeapon!=VehicleWeaponHash.Invalid) if (subject.IsInVehicle() && subject.VehicleWeapon != VehicleWeaponHash.Invalid)
{
if (subject.IsOnTurretSeat())
{
TriggerBulletShot((uint)subject.VehicleWeapon, c, endPos);
}
else
{
TriggerVehBulletShot((uint)subject.VehicleWeapon, subject.CurrentVehicle, c);
}
}
else
{
TriggerBulletShot((uint)subject.Weapons.Current.Hash, c, endPos);
}
return true;
}
i++;
return false;
}
else
{
if (subject.IsInVehicle() && subject.VehicleWeapon!=VehicleWeaponHash.Invalid)
{ {
if (subject.IsOnTurretSeat()) if (subject.IsOnTurretSeat())
{ {
@ -346,8 +317,25 @@ namespace RageCoop.Client
return true; return true;
} }
if (subject.IsInVehicle() && subject.VehicleWeapon != VehicleWeaponHash.Invalid)
{
if (subject.IsOnTurretSeat())
{
TriggerBulletShot((uint)subject.VehicleWeapon, c, endPos);
}
else
{
TriggerVehBulletShot((uint)subject.VehicleWeapon, subject.CurrentVehicle, c);
}
}
else
{
TriggerBulletShot((uint)subject.Weapons.Current.Hash, c, endPos);
}
return true;
}); });
if (!getBulletImpact()) if (!getBulletImpact())
{ {
Main.QueueAction(getBulletImpact); Main.QueueAction(getBulletImpact);
@ -357,10 +345,8 @@ namespace RageCoop.Client
{ {
TriggerBulletShot((uint)VehicleWeaponHash.Tank, c, subject.LastWeaponImpactPosition); TriggerBulletShot((uint)VehicleWeaponHash.Tank, c, subject.LastWeaponImpactPosition);
} }
} }
// Vehicles // Vehicles
var g = subject.IsGettingIntoVehicle; var g = subject.IsGettingIntoVehicle;
if (g && (!c._lastEnteringVehicle)) if (g && (!c._lastEnteringVehicle))
@ -368,6 +354,7 @@ namespace RageCoop.Client
var v = subject.VehicleTryingToEnter.GetSyncEntity(); var v = subject.VehicleTryingToEnter.GetSyncEntity();
TriggerEnteringVehicle(c, v, subject.GetSeatTryingToEnter()); TriggerEnteringVehicle(c, v, subject.GetSeatTryingToEnter());
} }
var currentSitting = subject.IsSittingInVehicle(); var currentSitting = subject.IsSittingInVehicle();
if (c._lastSittingInVehicle) if (c._lastSittingInVehicle)
{ {
@ -391,18 +378,20 @@ namespace RageCoop.Client
public static void Check(SyncedVehicle v) public static void Check(SyncedVehicle v)
{ {
if (v.MainVehicle!=null&&v.MainVehicle.HasNozzle()) if (v.MainVehicle==null||!v.MainVehicle.HasNozzle())
{ {
if ((v.LastNozzleAngle==1) && (v.MainVehicle.GetNozzleAngel()!=1)) return;
}
if ((v.LastNozzleAngle == 1) && (v.MainVehicle.GetNozzleAngel() != 1))
{ {
TriggerNozzleTransform(v.ID, false); TriggerNozzleTransform(v.ID, false);
} }
else if ((v.LastNozzleAngle==0) && (v.MainVehicle.GetNozzleAngel()!=0)) else if ((v.LastNozzleAngle == 0) && (v.MainVehicle.GetNozzleAngel() != 0))
{ {
TriggerNozzleTransform(v.ID, true); TriggerNozzleTransform(v.ID, true);
} }
v.LastNozzleAngle=v.MainVehicle.GetNozzleAngel(); v.LastNozzleAngle = v.MainVehicle.GetNozzleAngel();
}
} }
#endregion #endregion
} }