diff --git a/RageCoop.Client/RageCoop.Client.csproj b/RageCoop.Client/RageCoop.Client.csproj
index 74daed0..75217c7 100644
--- a/RageCoop.Client/RageCoop.Client.csproj
+++ b/RageCoop.Client/RageCoop.Client.csproj
@@ -10,7 +10,7 @@
Properties
RageCoop.Client
RageCoop.Client
- v4.8
+ v4.8.1
512
true
diff --git a/RageCoop.Client/Sync/EntityPool.cs b/RageCoop.Client/Sync/EntityPool.cs
index 95e0400..2d6036e 100644
--- a/RageCoop.Client/Sync/EntityPool.cs
+++ b/RageCoop.Client/Sync/EntityPool.cs
@@ -46,8 +46,7 @@ namespace RageCoop.Client
{
foreach (int id in new List(PedsByID.Keys))
{
- if (keepPlayer&&(id==Main.LocalPlayerID)) { continue; }
- if (keepMine&&(PedsByID[id].OwnerID==Main.LocalPlayerID)) { continue; }
+ if (keepPlayer && (id==Main.LocalPlayerID)|| keepMine && (PedsByID[id].OwnerID == Main.LocalPlayerID)) { continue; }
RemovePed(id);
}
PedsByID.Clear();
@@ -88,55 +87,44 @@ namespace RageCoop.Client
}
#region PEDS
- public static SyncedPed GetPedByID(int id)
- {
- return PedsByID.ContainsKey(id) ? PedsByID[id] : null;
- }
- public static SyncedPed GetPedByHandle(int handle)
- {
- return PedsByHandle.ContainsKey(handle) ? PedsByHandle[handle] : null;
- }
- public static List GetPedIDs()
- {
- return new List(PedsByID.Keys);
- }
+ public static SyncedPed GetPedByID(int id) => PedsByID.ContainsKey(id) ? PedsByID[id] : null;
+ public static SyncedPed GetPedByHandle(int handle) => PedsByHandle.ContainsKey(handle) ? PedsByHandle[handle] : null;
+ public static List GetPedIDs() => new List(PedsByID.Keys);
public static bool AddPlayer()
{
Ped p = Game.Player.Character;
SyncedPed player = GetPedByID(Main.LocalPlayerID);
- if (player!=null)
- {
- if (player.MainPed!=p)
- {
- // Player model changed
- player.MainPed = p;
-
- // Remove it from Handle_Characters
- var pairs = PedsByHandle.Where(x => x.Value==player);
- if (pairs.Any())
- {
- var pair = pairs.First();
-
- // Re-add
- PedsByHandle.Remove(pair.Key);
- if (PedsByHandle.ContainsKey(p.Handle))
- {
- RemovePed(PedsByHandle[p.Handle].ID);
- }
- PedsByHandle.Add(p.Handle, player);
- }
- }
- }
- else
+ if (player==null)
{
Main.Logger.Debug($"Creating SyncEntity for player, handle:{p.Handle}");
SyncedPed c = new SyncedPed(p);
- Main.LocalPlayerID=c.OwnerID=c.ID;
+ 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.MainPed = p;
+
+ // Remove it from Handle_Characters
+ var pairs = PedsByHandle.Where(x => x.Value == player);
+ if (pairs.Any())
+ {
+ var pair = pairs.First();
+
+ // Re-add
+ PedsByHandle.Remove(pair.Key);
+ if (PedsByHandle.ContainsKey(p.Handle))
+ {
+ RemovePed(PedsByHandle[p.Handle].ID);
+ }
+ PedsByHandle.Add(p.Handle, player);
+ }
+ }
return false;
}
public static void Add(SyncedPed c)
@@ -194,18 +182,9 @@ namespace RageCoop.Client
#endregion
#region VEHICLES
- public static SyncedVehicle GetVehicleByID(int id)
- {
- return VehiclesByID.ContainsKey(id) ? VehiclesByID[id] : null;
- }
- public static SyncedVehicle GetVehicleByHandle(int handle)
- {
- return VehiclesByHandle.ContainsKey(handle) ? VehiclesByHandle[handle] : null;
- }
- public static List GetVehicleIDs()
- {
- return new List(VehiclesByID.Keys);
- }
+ public static SyncedVehicle GetVehicleByID(int id) => VehiclesByID.ContainsKey(id) ? VehiclesByID[id] : null;
+ public static SyncedVehicle GetVehicleByHandle(int handle) => VehiclesByHandle.ContainsKey(handle) ? VehiclesByHandle[handle] : null;
+ public static List GetVehicleIDs() => new List(VehiclesByID.Keys);
public static void Add(SyncedVehicle v)
{
if (VehiclesByID.ContainsKey(v.ID))
@@ -300,18 +279,9 @@ namespace RageCoop.Client
}
}
- public static bool PedExists(int id)
- {
- return PedsByID.ContainsKey(id);
- }
- public static bool VehicleExists(int id)
- {
- return VehiclesByID.ContainsKey(id);
- }
- public static bool ProjectileExists(int id)
- {
- return ProjectilesByID.ContainsKey(id);
- }
+ public static bool PedExists(int id) => PedsByID.ContainsKey(id);
+ public static bool VehicleExists(int id) => VehiclesByID.ContainsKey(id);
+ public static bool ProjectileExists(int id) => ProjectilesByID.ContainsKey(id);
#endregion
static int vehStateIndex;
static int pedStateIndex;
@@ -358,26 +328,21 @@ namespace RageCoop.Client
if (!ProjectilesByHandle.ContainsKey(p.Handle))
{
Add(new SyncedProjectile(p));
-
}
}
foreach (SyncedProjectile p in ProjectilesByID.Values.ToArray())
{
-
// Outgoing sync
if (p.IsLocal)
{
if (p.MainProjectile.AttachedEntity==null)
{
-
// 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);
@@ -393,11 +358,8 @@ namespace RageCoop.Client
{
p.Update();
}
-
}
-
}
-
}
i=-1;
@@ -411,20 +373,15 @@ namespace RageCoop.Client
SyncedPed c = EntityPool.GetPedByHandle(p.Handle);
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();
- continue;
- }
+ p.Delete();
+ continue;
}
// Main.Logger.Trace($"Creating SyncEntity for ped, handle:{p.Handle}");
c=new SyncedPed(p);
EntityPool.Add(c);
-
-
}
}
#if BENCHMARK
@@ -437,6 +394,7 @@ namespace RageCoop.Client
{
pedStateIndex=0;
}
+
foreach (SyncedPed c in ps)
{
i++;
@@ -457,7 +415,6 @@ namespace RageCoop.Client
Networking.SendPed(c, (i-pedStateIndex)5)
- {
- endPos=subject.GetAimCoord();
- 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 (++i<=5) { return false; }
+
+ endPos = subject.GetAimCoord();
+ if (subject.IsInVehicle() && subject.VehicleWeapon != VehicleWeaponHash.Invalid)
{
if (subject.IsOnTurretSeat())
{
@@ -346,8 +317,25 @@ namespace RageCoop.Client
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())
{
Main.QueueAction(getBulletImpact);
@@ -357,10 +345,8 @@ namespace RageCoop.Client
{
TriggerBulletShot((uint)VehicleWeaponHash.Tank, c, subject.LastWeaponImpactPosition);
}
-
}
-
// Vehicles
var g = subject.IsGettingIntoVehicle;
if (g && (!c._lastEnteringVehicle))
@@ -368,6 +354,7 @@ namespace RageCoop.Client
var v = subject.VehicleTryingToEnter.GetSyncEntity();
TriggerEnteringVehicle(c, v, subject.GetSeatTryingToEnter());
}
+
var currentSitting = subject.IsSittingInVehicle();
if (c._lastSittingInVehicle)
{
@@ -391,18 +378,20 @@ namespace RageCoop.Client
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))
- {
- TriggerNozzleTransform(v.ID, false);
- }
- else if ((v.LastNozzleAngle==0) && (v.MainVehicle.GetNozzleAngel()!=0))
- {
- TriggerNozzleTransform(v.ID, true);
- }
- v.LastNozzleAngle=v.MainVehicle.GetNozzleAngel();
+ return;
}
+
+ if ((v.LastNozzleAngle == 1) && (v.MainVehicle.GetNozzleAngel() != 1))
+ {
+ TriggerNozzleTransform(v.ID, false);
+ }
+ else if ((v.LastNozzleAngle == 0) && (v.MainVehicle.GetNozzleAngel() != 0))
+ {
+ TriggerNozzleTransform(v.ID, true);
+ }
+ v.LastNozzleAngle = v.MainVehicle.GetNozzleAngel();
}
#endregion
}