Skip to content

Commit 52c9885

Browse files
committed
add passengers to vehicle
1 parent 4b37fcd commit 52c9885

File tree

8 files changed

+159
-7
lines changed

8 files changed

+159
-7
lines changed

api/AltV.Net.Async/Elements/Entities/AsyncVehicle.cs

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.Diagnostics.CodeAnalysis;
34
using System.Numerics;
45
using AltV.Net.Data;
@@ -579,7 +580,8 @@ public AsyncVehicle(IVehicle vehicle, IAsyncContext asyncContext) : base(vehicle
579580
Vehicle = vehicle;
580581
}
581582

582-
public AsyncVehicle(ICore core, IntPtr nativePointer, uint id) : this(new Vehicle(core, nativePointer, id), null)
583+
public AsyncVehicle(ICore core, IntPtr nativePointer, uint id) : this(new Vehicle(core, nativePointer, id),
584+
null)
583585
{
584586
}
585587

@@ -778,7 +780,7 @@ public uint TimedExplosionTime
778780
}
779781
}
780782

781-
public bool SirenActive
783+
public bool SirenActive
782784
{
783785
get
784786
{
@@ -990,7 +992,8 @@ public int PetrolTankHealth
990992
}
991993
}
992994

993-
public float SteeringAngle {
995+
public float SteeringAngle
996+
{
994997
get
995998
{
996999
lock (Vehicle)
@@ -999,7 +1002,6 @@ public float SteeringAngle {
9991002
return Vehicle.SteeringAngle;
10001003
}
10011004
}
1002-
10031005
}
10041006

10051007
public byte WheelsCount
@@ -1950,7 +1952,8 @@ public Quaternion Quaternion
19501952
}
19511953
}
19521954

1953-
public bool IsHornActive {
1955+
public bool IsHornActive
1956+
{
19541957
get
19551958
{
19561959
lock (Vehicle)
@@ -1961,7 +1964,8 @@ public bool IsHornActive {
19611964
}
19621965
}
19631966

1964-
public float AccelerationLevel {
1967+
public float AccelerationLevel
1968+
{
19651969
get
19661970
{
19671971
lock (Vehicle)
@@ -1972,7 +1976,8 @@ public float AccelerationLevel {
19721976
}
19731977
}
19741978

1975-
public float BrakeLevel {
1979+
public float BrakeLevel
1980+
{
19761981
get
19771982
{
19781983
lock (Vehicle)
@@ -1983,6 +1988,18 @@ public float BrakeLevel {
19831988
}
19841989
}
19851990

1991+
public List<PlayerSeat> Passengers
1992+
{
1993+
get
1994+
{
1995+
lock (Vehicle)
1996+
{
1997+
if (!AsyncContext.CheckIfExistsOrCachedNullable(Vehicle)) return default;
1998+
return Vehicle.Passengers;
1999+
}
2000+
}
2001+
}
2002+
19862003
[Obsolete("Use new async API instead")]
19872004
public IVehicle ToAsync(IAsyncContext asyncContext)
19882005
{

api/AltV.Net.Mock/MockCore.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ namespace AltV.Net.Mock
1818
public class MockCore : ICore
1919
{
2020
ISharedPoolManager ISharedCore.PoolManager => PoolManager;
21+
public Dictionary<IntPtr, List<InternalPlayerSeat>> VehiclePassengers { get; }
2122
public IPoolManager PoolManager { get; }
2223
public EventStateManager EventStateManager { get; }
2324
ISharedNativeResource ISharedCore.Resource => Resource;

api/AltV.Net/Core.Events.cs

Lines changed: 84 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -522,6 +522,24 @@ public void OnPlayerChangeVehicleSeat(IntPtr vehiclePointer, IntPtr playerPointe
522522
return;
523523
}
524524

525+
if (VehiclePassengers.TryGetValue(vehiclePointer, out var passengers))
526+
{
527+
if (passengers.Exists(x => x.PlayerPointer == playerPointer))
528+
{
529+
var playerSeat = passengers.First(x => x.PlayerPointer == playerPointer);
530+
playerSeat.Seat = newSeat;
531+
}
532+
else
533+
{
534+
passengers.Add(new InternalPlayerSeat { PlayerPointer = playerPointer, Seat = newSeat });
535+
}
536+
}
537+
else
538+
{
539+
VehiclePassengers[vehiclePointer] = new List<InternalPlayerSeat>
540+
{ new() { PlayerPointer = playerPointer, Seat = newSeat } };
541+
}
542+
525543
OnPlayerChangeVehicleSeatEvent(vehicle, player, oldSeat, newSeat);
526544
}
527545

@@ -562,6 +580,24 @@ public void OnPlayerEnterVehicle(IntPtr vehiclePointer, IntPtr playerPointer, by
562580
return;
563581
}
564582

583+
if (VehiclePassengers.TryGetValue(vehiclePointer, out var passengers))
584+
{
585+
if (passengers.Exists(x => x.PlayerPointer == playerPointer))
586+
{
587+
var playerSeat = passengers.First(x => x.PlayerPointer == playerPointer);
588+
playerSeat.Seat = seat;
589+
}
590+
else
591+
{
592+
passengers.Add(new InternalPlayerSeat { PlayerPointer = playerPointer, Seat = seat });
593+
}
594+
}
595+
else
596+
{
597+
VehiclePassengers[vehiclePointer] = new List<InternalPlayerSeat>
598+
{ new() { PlayerPointer = playerPointer, Seat = seat } };
599+
}
600+
565601
OnPlayerEnterVehicleEvent(vehicle, player, seat);
566602
}
567603

@@ -602,6 +638,24 @@ public void OnPlayerEnteringVehicle(IntPtr vehiclePointer, IntPtr playerPointer,
602638
return;
603639
}
604640

641+
if (VehiclePassengers.TryGetValue(vehiclePointer, out var passengers))
642+
{
643+
if (passengers.Exists(x => x.PlayerPointer == playerPointer))
644+
{
645+
var playerSeat = passengers.First(x => x.PlayerPointer == playerPointer);
646+
playerSeat.Seat = seat;
647+
}
648+
else
649+
{
650+
passengers.Add(new InternalPlayerSeat { PlayerPointer = playerPointer, Seat = seat });
651+
}
652+
}
653+
else
654+
{
655+
VehiclePassengers[vehiclePointer] = new List<InternalPlayerSeat>
656+
{ new() { PlayerPointer = playerPointer, Seat = seat } };
657+
}
658+
605659
OnPlayerEnteringVehicleEvent(vehicle, player, seat);
606660
}
607661

@@ -642,6 +696,20 @@ public void OnPlayerLeaveVehicle(IntPtr vehiclePointer, IntPtr playerPointer, by
642696
return;
643697
}
644698

699+
if (VehiclePassengers.TryGetValue(vehiclePointer, out var passengers))
700+
{
701+
if (passengers.Exists(x => x.PlayerPointer == playerPointer))
702+
{
703+
var playerSeat = passengers.First(x => x.PlayerPointer == playerPointer);
704+
passengers.Remove(playerSeat);
705+
}
706+
707+
if (!passengers.Any())
708+
{
709+
VehiclePassengers.Remove(vehiclePointer);
710+
}
711+
}
712+
645713
OnPlayerLeaveVehicleEvent(vehicle, player, seat);
646714
}
647715

@@ -1928,6 +1996,17 @@ public void OnPlayerRemove(IntPtr playerPointer)
19281996
return;
19291997
}
19301998

1999+
foreach (var vehiclePassenger in VehiclePassengers)
2000+
{
2001+
if (vehiclePassenger.Value.All(x => x.PlayerPointer != playerPointer))
2002+
{
2003+
continue;
2004+
}
2005+
2006+
var playerSeat = vehiclePassenger.Value.First(x => x.PlayerPointer == playerPointer);
2007+
vehiclePassenger.Value.Remove(playerSeat);
2008+
}
2009+
19312010
OnPlayerRemoveEvent(player);
19322011
}
19332012

@@ -1959,6 +2038,11 @@ public void OnVehicleRemove(IntPtr vehiclePointer)
19592038
return;
19602039
}
19612040

2041+
if (VehiclePassengers.ContainsKey(vehiclePointer))
2042+
{
2043+
VehiclePassengers.Remove(vehiclePointer);
2044+
}
2045+
19622046
OnVehicleRemoveEvent(vehicle);
19632047
}
19642048

api/AltV.Net/Core.cs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,7 @@ namespace AltV.Net
2424
public partial class Core : SharedCore, ICore, IInternalCore
2525
{
2626
public override IPoolManager PoolManager { get;}
27+
public Dictionary<IntPtr, List<InternalPlayerSeat>> VehiclePassengers { get; }
2728
ISharedPoolManager ISharedCore.PoolManager => PoolManager;
2829

2930
public INativeResourcePool NativeResourcePool { get; }
@@ -76,6 +77,7 @@ public Core(IntPtr nativePointer, IntPtr resourcePointer, AssemblyLoadContext as
7677
this.weaponModelInfoCache = new();
7778
nativeResourcePool.GetOrCreate(this, resourcePointer, out var resource);
7879
Resource = resource;
80+
this.VehiclePassengers = new();
7981
}
8082

8183
void IInternalCore.InitResource(INativeResource resource)

api/AltV.Net/Data/PlayerSeat.cs

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
using System;
2+
using AltV.Net.Elements.Entities;
3+
4+
namespace AltV.Net.Data;
5+
6+
public struct InternalPlayerSeat
7+
{
8+
public IntPtr PlayerPointer { get; set; }
9+
public byte Seat { get; set; }
10+
}
11+
12+
public struct PlayerSeat
13+
{
14+
public IPlayer Player { get; set; }
15+
public byte Seat { get; set; }
16+
}

api/AltV.Net/Elements/Entities/IVehicle.cs

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.Numerics;
34
using AltV.Net.Data;
45
using AltV.Net.Enums;
@@ -859,5 +860,7 @@ NumberPlateStyle GetNumberPlateStyleExt() =>
859860

860861
float AccelerationLevel { get; }
861862
float BrakeLevel { get; }
863+
864+
List<PlayerSeat> Passengers { get; }
862865
}
863866
}

api/AltV.Net/Elements/Entities/Vehicle.cs

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
using System;
2+
using System.Collections.Generic;
23
using System.Numerics;
34
using System.Runtime.InteropServices;
45
using AltV.Net.Data;
@@ -2063,6 +2064,33 @@ public float BrakeLevel
20632064
}
20642065
}
20652066

2067+
public List<PlayerSeat> Passengers
2068+
{
2069+
get
2070+
{
2071+
if (!Core.VehiclePassengers.TryGetValue(VehicleNativePointer, out var passengers))
2072+
{
2073+
return new List<PlayerSeat>();
2074+
}
2075+
2076+
var result = new List<PlayerSeat>();
2077+
foreach (var passenger in passengers)
2078+
{
2079+
var player = Core.PoolManager.Player.Get(passenger.PlayerPointer);
2080+
if (player is null) continue;
2081+
2082+
var playerSeat = new PlayerSeat
2083+
{
2084+
Player = player,
2085+
Seat = passenger.Seat
2086+
};
2087+
result.Add(playerSeat);
2088+
}
2089+
2090+
return result;
2091+
}
2092+
}
2093+
20662094
public override void SetCached(IntPtr cachedVehicle)
20672095
{
20682096
this.VehicleNativePointer = cachedVehicle;

api/AltV.Net/ICore.cs

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,6 +16,7 @@ namespace AltV.Net
1616
public interface ICore : ISharedCore
1717
{
1818
new IPoolManager PoolManager { get; }
19+
Dictionary<IntPtr, List<InternalPlayerSeat>> VehiclePassengers { get; }
1920
INativeResourcePool NativeResourcePool { get; }
2021

2122
int NetTime { get; }

0 commit comments

Comments
 (0)