From d860639d1bcb8c180a0b230c421daa7648bfcb2c Mon Sep 17 00:00:00 2001 From: doxoh Date: Sat, 21 Oct 2023 17:51:15 +0200 Subject: [PATCH 01/75] fix objectRequest and ObjectDelete events --- api/AltV.Net.CApi/Native/AltV.Resource.cs | 10 ++++++++++ api/AltV.Net/CSharpResourceImpl.cs | 8 ++++++++ api/AltV.Net/ModuleWrapper.cs | 2 +- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/api/AltV.Net.CApi/Native/AltV.Resource.cs b/api/AltV.Net.CApi/Native/AltV.Resource.cs index 47258bf3b..0726da7a3 100644 --- a/api/AltV.Net.CApi/Native/AltV.Resource.cs +++ b/api/AltV.Net.CApi/Native/AltV.Resource.cs @@ -140,6 +140,8 @@ internal delegate void PedHealDelegate(IntPtr pedPointer, ushort oldHealth, usho internal delegate void ScriptRPCDelegate(IntPtr eventPointer, IntPtr targetPointer, string name, IntPtr args, ulong size, ushort answerId); internal delegate void ScriptRPCAnswerDelegate(IntPtr targetPointer, ushort answerId, IntPtr answer, string answerError); + internal delegate void ClientRequestObjectDelegate(IntPtr eventPointer, IntPtr playerPointer, uint model, Position position); + internal delegate void ClientDeleteObjectDelegate(IntPtr eventPointer, IntPtr playerPointer); [DllImport(DllName, CallingConvention = NativeCallingConvention)] @@ -369,6 +371,14 @@ internal static extern void CSharpResourceImpl_SetScriptRPCDelegate(IntPtr resou [DllImport(DllName, CallingConvention = NativeCallingConvention)] internal static extern void CSharpResourceImpl_SetScriptRPCAnswerDelegate(IntPtr resource, ScriptRPCAnswerDelegate @delegate); + + [DllImport(DllName, CallingConvention = NativeCallingConvention)] + internal static extern void CSharpResourceImpl_SetClientRequestObjectDelegate(IntPtr resource, + ClientRequestObjectDelegate @delegate); + + [DllImport(DllName, CallingConvention = NativeCallingConvention)] + internal static extern void CSharpResourceImpl_SetClientDeleteObjectDelegate(IntPtr resource, + ClientDeleteObjectDelegate @delegate); } } } \ No newline at end of file diff --git a/api/AltV.Net/CSharpResourceImpl.cs b/api/AltV.Net/CSharpResourceImpl.cs index dffb498c4..b2803c30f 100644 --- a/api/AltV.Net/CSharpResourceImpl.cs +++ b/api/AltV.Net/CSharpResourceImpl.cs @@ -258,6 +258,14 @@ internal void SetDelegates(AltNative.Resource.MainDelegate onStart) handles.AddFirst(GCHandle.Alloc(onScriptRPCAnswer)); AltNative.Resource.CSharpResourceImpl_SetScriptRPCAnswerDelegate(this.NativePointer, onScriptRPCAnswer); + AltNative.Resource.ClientRequestObjectDelegate onClientRequestObject = ModuleWrapper.OnClientRequestObject; + handles.AddFirst(GCHandle.Alloc(onClientRequestObject)); + AltNative.Resource.CSharpResourceImpl_SetClientRequestObjectDelegate(this.NativePointer, onClientRequestObject); + + AltNative.Resource.ClientDeleteObjectDelegate onClientDeleteObject = ModuleWrapper.OnClientDeleteObject; + handles.AddFirst(GCHandle.Alloc(onClientDeleteObject)); + AltNative.Resource.CSharpResourceImpl_SetClientDeleteObjectDelegate(this.NativePointer, onClientDeleteObject); + } public void Dispose() diff --git a/api/AltV.Net/ModuleWrapper.cs b/api/AltV.Net/ModuleWrapper.cs index f75f35841..e18ec4f9e 100644 --- a/api/AltV.Net/ModuleWrapper.cs +++ b/api/AltV.Net/ModuleWrapper.cs @@ -482,7 +482,7 @@ public static void OnClientRequestObject(IntPtr eventPointer, IntPtr source, uin _core.OnClientRequestObject(eventPointer, source, model, position); } - public static void OnRequestSyncedScene(IntPtr eventPointer, IntPtr source) + public static void OnClientDeleteObject(IntPtr eventPointer, IntPtr source) { _core.OnClientDeleteObject(eventPointer, source); } From ba185ba9215e4efaee07ccec4e8bf68719ad005d Mon Sep 17 00:00:00 2001 From: doxoh Date: Sat, 21 Oct 2023 17:51:15 +0200 Subject: [PATCH 02/75] fix objectRequest and ObjectDelete events --- api/AltV.Net.CApi/Native/AltV.Resource.cs | 10 ++++++++++ api/AltV.Net/CSharpResourceImpl.cs | 8 ++++++++ api/AltV.Net/ModuleWrapper.cs | 2 +- 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/api/AltV.Net.CApi/Native/AltV.Resource.cs b/api/AltV.Net.CApi/Native/AltV.Resource.cs index 47258bf3b..0726da7a3 100644 --- a/api/AltV.Net.CApi/Native/AltV.Resource.cs +++ b/api/AltV.Net.CApi/Native/AltV.Resource.cs @@ -140,6 +140,8 @@ internal delegate void PedHealDelegate(IntPtr pedPointer, ushort oldHealth, usho internal delegate void ScriptRPCDelegate(IntPtr eventPointer, IntPtr targetPointer, string name, IntPtr args, ulong size, ushort answerId); internal delegate void ScriptRPCAnswerDelegate(IntPtr targetPointer, ushort answerId, IntPtr answer, string answerError); + internal delegate void ClientRequestObjectDelegate(IntPtr eventPointer, IntPtr playerPointer, uint model, Position position); + internal delegate void ClientDeleteObjectDelegate(IntPtr eventPointer, IntPtr playerPointer); [DllImport(DllName, CallingConvention = NativeCallingConvention)] @@ -369,6 +371,14 @@ internal static extern void CSharpResourceImpl_SetScriptRPCDelegate(IntPtr resou [DllImport(DllName, CallingConvention = NativeCallingConvention)] internal static extern void CSharpResourceImpl_SetScriptRPCAnswerDelegate(IntPtr resource, ScriptRPCAnswerDelegate @delegate); + + [DllImport(DllName, CallingConvention = NativeCallingConvention)] + internal static extern void CSharpResourceImpl_SetClientRequestObjectDelegate(IntPtr resource, + ClientRequestObjectDelegate @delegate); + + [DllImport(DllName, CallingConvention = NativeCallingConvention)] + internal static extern void CSharpResourceImpl_SetClientDeleteObjectDelegate(IntPtr resource, + ClientDeleteObjectDelegate @delegate); } } } \ No newline at end of file diff --git a/api/AltV.Net/CSharpResourceImpl.cs b/api/AltV.Net/CSharpResourceImpl.cs index dffb498c4..b2803c30f 100644 --- a/api/AltV.Net/CSharpResourceImpl.cs +++ b/api/AltV.Net/CSharpResourceImpl.cs @@ -258,6 +258,14 @@ internal void SetDelegates(AltNative.Resource.MainDelegate onStart) handles.AddFirst(GCHandle.Alloc(onScriptRPCAnswer)); AltNative.Resource.CSharpResourceImpl_SetScriptRPCAnswerDelegate(this.NativePointer, onScriptRPCAnswer); + AltNative.Resource.ClientRequestObjectDelegate onClientRequestObject = ModuleWrapper.OnClientRequestObject; + handles.AddFirst(GCHandle.Alloc(onClientRequestObject)); + AltNative.Resource.CSharpResourceImpl_SetClientRequestObjectDelegate(this.NativePointer, onClientRequestObject); + + AltNative.Resource.ClientDeleteObjectDelegate onClientDeleteObject = ModuleWrapper.OnClientDeleteObject; + handles.AddFirst(GCHandle.Alloc(onClientDeleteObject)); + AltNative.Resource.CSharpResourceImpl_SetClientDeleteObjectDelegate(this.NativePointer, onClientDeleteObject); + } public void Dispose() diff --git a/api/AltV.Net/ModuleWrapper.cs b/api/AltV.Net/ModuleWrapper.cs index f75f35841..e18ec4f9e 100644 --- a/api/AltV.Net/ModuleWrapper.cs +++ b/api/AltV.Net/ModuleWrapper.cs @@ -482,7 +482,7 @@ public static void OnClientRequestObject(IntPtr eventPointer, IntPtr source, uin _core.OnClientRequestObject(eventPointer, source, model, position); } - public static void OnRequestSyncedScene(IntPtr eventPointer, IntPtr source) + public static void OnClientDeleteObject(IntPtr eventPointer, IntPtr source) { _core.OnClientDeleteObject(eventPointer, source); } From d402b81d73b4b4a5ba9b0264bb751eec43652153 Mon Sep 17 00:00:00 2001 From: doxoh Date: Sun, 22 Oct 2023 14:37:12 +0200 Subject: [PATCH 03/75] Add IPlayer::ClearClothes --- api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs | 9 +++++++++ api/AltV.Net.CApi/Libraries/ClientLibrary.cs | 4 ++-- api/AltV.Net.CApi/Libraries/ServerLibrary.cs | 9 +++++++-- api/AltV.Net.CApi/Libraries/SharedLibrary.cs | 4 ++-- api/AltV.Net/Elements/Entities/IPlayer.cs | 2 ++ api/AltV.Net/Elements/Entities/Player.cs | 9 +++++++++ runtime | 2 +- 7 files changed, 32 insertions(+), 7 deletions(-) diff --git a/api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs b/api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs index d338a44de..77ad81af5 100644 --- a/api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs +++ b/api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs @@ -898,6 +898,15 @@ public bool SetDlcClothes(byte component, ushort drawable, byte texture, byte pa } } + public bool ClearClothes(byte component) + { + lock (Player) + { + if (!AsyncContext.CheckIfExistsNullable(Player)) return default; + return Player.ClearClothes(component); + } + } + public Prop GetProps(byte component) { lock (Player) diff --git a/api/AltV.Net.CApi/Libraries/ClientLibrary.cs b/api/AltV.Net.CApi/Libraries/ClientLibrary.cs index 15cd4b641..098dd5d93 100644 --- a/api/AltV.Net.CApi/Libraries/ClientLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/ClientLibrary.cs @@ -886,7 +886,7 @@ public unsafe interface IClientLibrary public unsafe class ClientLibrary : IClientLibrary { - public readonly uint Methods = 1738; + public readonly uint Methods = 1739; public delegate* unmanaged[Cdecl] Audio_AddOutput { get; } public delegate* unmanaged[Cdecl] Audio_GetBaseObject { get; } public delegate* unmanaged[Cdecl] Audio_GetCurrentTime { get; } @@ -3512,7 +3512,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public ClientLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 13325244553859733034UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 3086495798003042324UL) Outdated = true; Audio_AddOutput = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 9914412815391408844UL, Audio_AddOutputFallback); Audio_GetBaseObject = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 6330360502401226894UL, Audio_GetBaseObjectFallback); Audio_GetCurrentTime = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 2944324482134975819UL, Audio_GetCurrentTimeFallback); diff --git a/api/AltV.Net.CApi/Libraries/ServerLibrary.cs b/api/AltV.Net.CApi/Libraries/ServerLibrary.cs index 488d29842..91582424f 100644 --- a/api/AltV.Net.CApi/Libraries/ServerLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/ServerLibrary.cs @@ -158,6 +158,7 @@ public unsafe interface IServerLibrary public delegate* unmanaged[Cdecl] Player_AddDecoration { get; } public delegate* unmanaged[Cdecl] Player_AddWeaponComponent { get; } public delegate* unmanaged[Cdecl] Player_ClearBloodDamage { get; } + public delegate* unmanaged[Cdecl] Player_ClearClothes { get; } public delegate* unmanaged[Cdecl] Player_ClearDecorations { get; } public delegate* unmanaged[Cdecl] Player_ClearProps { get; } public delegate* unmanaged[Cdecl] Player_ClearTasks { get; } @@ -480,7 +481,7 @@ public unsafe interface IServerLibrary public unsafe class ServerLibrary : IServerLibrary { - public readonly uint Methods = 1738; + public readonly uint Methods = 1739; public delegate* unmanaged[Cdecl] BaseObject_DeleteSyncedMetaData { get; } public delegate* unmanaged[Cdecl] BaseObject_SetMultipleSyncedMetaData { get; } public delegate* unmanaged[Cdecl] BaseObject_SetSyncedMetaData { get; } @@ -629,6 +630,7 @@ public unsafe class ServerLibrary : IServerLibrary public delegate* unmanaged[Cdecl] Player_AddDecoration { get; } public delegate* unmanaged[Cdecl] Player_AddWeaponComponent { get; } public delegate* unmanaged[Cdecl] Player_ClearBloodDamage { get; } + public delegate* unmanaged[Cdecl] Player_ClearClothes { get; } public delegate* unmanaged[Cdecl] Player_ClearDecorations { get; } public delegate* unmanaged[Cdecl] Player_ClearProps { get; } public delegate* unmanaged[Cdecl] Player_ClearTasks { get; } @@ -1243,6 +1245,8 @@ public unsafe class ServerLibrary : IServerLibrary private static void Player_AddWeaponComponentFallback(nint _player, uint _weapon, uint _component) => throw new Exceptions.OutdatedSdkException("Player_AddWeaponComponent", "Player_AddWeaponComponent SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Player_ClearBloodDamageDelegate(nint _player); private static void Player_ClearBloodDamageFallback(nint _player) => throw new Exceptions.OutdatedSdkException("Player_ClearBloodDamage", "Player_ClearBloodDamage SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate byte Player_ClearClothesDelegate(nint _player, byte _component); + private static byte Player_ClearClothesFallback(nint _player, byte _component) => throw new Exceptions.OutdatedSdkException("Player_ClearClothes", "Player_ClearClothes SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Player_ClearDecorationsDelegate(nint _player); private static void Player_ClearDecorationsFallback(nint _player) => throw new Exceptions.OutdatedSdkException("Player_ClearDecorations", "Player_ClearDecorations SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Player_ClearPropsDelegate(nint _player, byte _component); @@ -1888,7 +1892,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public ServerLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 13325244553859733034UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 3086495798003042324UL) Outdated = true; BaseObject_DeleteSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8228424877092269355UL, BaseObject_DeleteSyncedMetaDataFallback); BaseObject_SetMultipleSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 1390762125822890831UL, BaseObject_SetMultipleSyncedMetaDataFallback); BaseObject_SetSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8002999088966424231UL, BaseObject_SetSyncedMetaDataFallback); @@ -2037,6 +2041,7 @@ public ServerLibrary(Dictionary funcTable) Player_AddDecoration = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 11189476182745634495UL, Player_AddDecorationFallback); Player_AddWeaponComponent = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 9305362021789278268UL, Player_AddWeaponComponentFallback); Player_ClearBloodDamage = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 1935399752104807234UL, Player_ClearBloodDamageFallback); + Player_ClearClothes = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 992364219024894490UL, Player_ClearClothesFallback); Player_ClearDecorations = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 1193224569935073604UL, Player_ClearDecorationsFallback); Player_ClearProps = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 14293729102633233291UL, Player_ClearPropsFallback); Player_ClearTasks = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 2394928316223850939UL, Player_ClearTasksFallback); diff --git a/api/AltV.Net.CApi/Libraries/SharedLibrary.cs b/api/AltV.Net.CApi/Libraries/SharedLibrary.cs index 8e656a311..dbd8d8233 100644 --- a/api/AltV.Net.CApi/Libraries/SharedLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/SharedLibrary.cs @@ -412,7 +412,7 @@ public unsafe interface ISharedLibrary public unsafe class SharedLibrary : ISharedLibrary { - public readonly uint Methods = 1738; + public readonly uint Methods = 1739; public delegate* unmanaged[Cdecl] Audio_GetID { get; } public delegate* unmanaged[Cdecl] AudioAttachedOutput_GetID { get; } public delegate* unmanaged[Cdecl] AudioFilter_GetID { get; } @@ -1616,7 +1616,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public SharedLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 13325244553859733034UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 3086495798003042324UL) Outdated = true; Audio_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 4464042055475980737UL, Audio_GetIDFallback); AudioAttachedOutput_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 17725794901805112189UL, AudioAttachedOutput_GetIDFallback); AudioFilter_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8824535635529306325UL, AudioFilter_GetIDFallback); diff --git a/api/AltV.Net/Elements/Entities/IPlayer.cs b/api/AltV.Net/Elements/Entities/IPlayer.cs index 2764f87df..1e8ed1744 100644 --- a/api/AltV.Net/Elements/Entities/IPlayer.cs +++ b/api/AltV.Net/Elements/Entities/IPlayer.cs @@ -257,6 +257,8 @@ void SetDateTime(int day, int month, int year, int hour, /// Thrown if drawable id is higher then 127 bool SetDlcClothes(byte component, ushort drawable, byte texture, byte palette, uint dlc); + bool ClearClothes(byte component); + /// /// Gets the player props /// diff --git a/api/AltV.Net/Elements/Entities/Player.cs b/api/AltV.Net/Elements/Entities/Player.cs index f3deec321..42b8e9620 100644 --- a/api/AltV.Net/Elements/Entities/Player.cs +++ b/api/AltV.Net/Elements/Entities/Player.cs @@ -1237,6 +1237,15 @@ public bool SetDlcClothes(byte component, ushort drawable, byte texture, byte pa } } + public bool ClearClothes(byte component) + { + unsafe + { + CheckIfEntityExists(); + return Core.Library.Server.Player_ClearClothes(PlayerNativePointer, component) == 1; + } + } + public Prop GetProps(byte component) { unsafe diff --git a/runtime b/runtime index e5596af24..bc39445e5 160000 --- a/runtime +++ b/runtime @@ -1 +1 @@ -Subproject commit e5596af24e358920e1ee8858087c62c2cbbfdae1 +Subproject commit bc39445e5e0369c7e53715afb9760c890f7d301a From f6973673e729006280939db11df4a3a2f9a59b7f Mon Sep 17 00:00:00 2001 From: doxoh Date: Sun, 22 Oct 2023 16:30:09 +0200 Subject: [PATCH 04/75] Updated submodule runtime --- runtime | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime b/runtime index bc39445e5..256e9d643 160000 --- a/runtime +++ b/runtime @@ -1 +1 @@ -Subproject commit bc39445e5e0369c7e53715afb9760c890f7d301a +Subproject commit 256e9d6432e58433f0897e8c35fcc3ae1d5668ff From 21983a3bf2ebf02827bb8aa99f4d83d60e626984 Mon Sep 17 00:00:00 2001 From: doxoh Date: Sun, 22 Oct 2023 16:38:13 +0200 Subject: [PATCH 05/75] Updated submodule runtime --- runtime | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime b/runtime index 256e9d643..077779ed9 160000 --- a/runtime +++ b/runtime @@ -1 +1 @@ -Subproject commit 256e9d6432e58433f0897e8c35fcc3ae1d5668ff +Subproject commit 077779ed9700897e7cc70fc7f8b54c4fecacc113 From 08160cba3acf71187875ec1e493e2931e9a28dfa Mon Sep 17 00:00:00 2001 From: doxoh Date: Sun, 22 Oct 2023 20:21:39 +0200 Subject: [PATCH 06/75] remove duplicate interface methods --- api/AltV.Net.Client/Elements/Interfaces/IBaseObject.cs | 3 --- api/AltV.Net.Shared/Elements/Entities/ISharedBlip.cs | 8 -------- api/AltV.Net/Elements/Entities/IColShape.cs | 8 -------- api/AltV.Net/Elements/Entities/IVehicle.cs | 8 -------- api/AltV.Net/Elements/Entities/IVoiceChannel.cs | 8 -------- 5 files changed, 35 deletions(-) diff --git a/api/AltV.Net.Client/Elements/Interfaces/IBaseObject.cs b/api/AltV.Net.Client/Elements/Interfaces/IBaseObject.cs index e8bbbd764..eda0d7432 100644 --- a/api/AltV.Net.Client/Elements/Interfaces/IBaseObject.cs +++ b/api/AltV.Net.Client/Elements/Interfaces/IBaseObject.cs @@ -5,9 +5,6 @@ namespace AltV.Net.Client.Elements.Interfaces public interface IBaseObject : ISharedBaseObject { new ICore Core { get; } - [Obsolete("Use Destroy() instead")] - public void Remove(); - public void Destroy(); uint RemoteId { get; } bool IsRemote { get; } } diff --git a/api/AltV.Net.Shared/Elements/Entities/ISharedBlip.cs b/api/AltV.Net.Shared/Elements/Entities/ISharedBlip.cs index 9eb7f3c93..b54f77822 100644 --- a/api/AltV.Net.Shared/Elements/Entities/ISharedBlip.cs +++ b/api/AltV.Net.Shared/Elements/Entities/ISharedBlip.cs @@ -171,14 +171,6 @@ public interface ISharedBlip : ISharedWorldObject /// Fades the blip /// void Fade(uint opacity, uint duration); - - [Obsolete("Use Destroy() instead")] - void Remove(); - - /// - /// Destroy the blip. - /// - void Destroy(); bool Visible { get; set; } bool IsHiddenOnLegend { get; set; } diff --git a/api/AltV.Net/Elements/Entities/IColShape.cs b/api/AltV.Net/Elements/Entities/IColShape.cs index 3b809fb37..1173f533f 100644 --- a/api/AltV.Net/Elements/Entities/IColShape.cs +++ b/api/AltV.Net/Elements/Entities/IColShape.cs @@ -16,14 +16,6 @@ public interface IColShape : ISharedColShape, IWorldObject /// bool IsPlayersOnly { get; set; } - [Obsolete("Use Destroy() instead")] - void Remove(); - - /// - /// Destroy the collision shape - /// - void Destroy(); - bool IsEntityIn(IEntity entity); /// diff --git a/api/AltV.Net/Elements/Entities/IVehicle.cs b/api/AltV.Net/Elements/Entities/IVehicle.cs index a3108436c..b0f721704 100644 --- a/api/AltV.Net/Elements/Entities/IVehicle.cs +++ b/api/AltV.Net/Elements/Entities/IVehicle.cs @@ -562,14 +562,6 @@ public interface IVehicle : ISharedVehicle, IEntity /// string ScriptData { get; set; } - [Obsolete("Use Destroy() instead")] - void Remove(); - - /// - /// Destroy the vehicle entity - /// - void Destroy(); - /// /// Repairs the vehicle /// diff --git a/api/AltV.Net/Elements/Entities/IVoiceChannel.cs b/api/AltV.Net/Elements/Entities/IVoiceChannel.cs index f34532222..be6c449ce 100644 --- a/api/AltV.Net/Elements/Entities/IVoiceChannel.cs +++ b/api/AltV.Net/Elements/Entities/IVoiceChannel.cs @@ -59,14 +59,6 @@ public interface IVoiceChannel : IBaseObject /// float MaxDistance { get; } - [Obsolete("Use Destroy() instead")] - void Remove(); - - /// - /// Destroy the voice channel - /// - void Destroy(); - uint Filter { get; set; } int Priority { get; set; } From 5ba37a111f2e1cc8096d1486b3a5df342eef845b Mon Sep 17 00:00:00 2001 From: doxoh Date: Sun, 22 Oct 2023 20:21:39 +0200 Subject: [PATCH 07/75] remove duplicate interface methods --- api/AltV.Net.Client/Elements/Interfaces/IBaseObject.cs | 3 --- api/AltV.Net.Shared/Elements/Entities/ISharedBlip.cs | 8 -------- api/AltV.Net/Elements/Entities/IColShape.cs | 8 -------- api/AltV.Net/Elements/Entities/IVehicle.cs | 8 -------- api/AltV.Net/Elements/Entities/IVoiceChannel.cs | 8 -------- 5 files changed, 35 deletions(-) diff --git a/api/AltV.Net.Client/Elements/Interfaces/IBaseObject.cs b/api/AltV.Net.Client/Elements/Interfaces/IBaseObject.cs index e8bbbd764..eda0d7432 100644 --- a/api/AltV.Net.Client/Elements/Interfaces/IBaseObject.cs +++ b/api/AltV.Net.Client/Elements/Interfaces/IBaseObject.cs @@ -5,9 +5,6 @@ namespace AltV.Net.Client.Elements.Interfaces public interface IBaseObject : ISharedBaseObject { new ICore Core { get; } - [Obsolete("Use Destroy() instead")] - public void Remove(); - public void Destroy(); uint RemoteId { get; } bool IsRemote { get; } } diff --git a/api/AltV.Net.Shared/Elements/Entities/ISharedBlip.cs b/api/AltV.Net.Shared/Elements/Entities/ISharedBlip.cs index 9eb7f3c93..b54f77822 100644 --- a/api/AltV.Net.Shared/Elements/Entities/ISharedBlip.cs +++ b/api/AltV.Net.Shared/Elements/Entities/ISharedBlip.cs @@ -171,14 +171,6 @@ public interface ISharedBlip : ISharedWorldObject /// Fades the blip /// void Fade(uint opacity, uint duration); - - [Obsolete("Use Destroy() instead")] - void Remove(); - - /// - /// Destroy the blip. - /// - void Destroy(); bool Visible { get; set; } bool IsHiddenOnLegend { get; set; } diff --git a/api/AltV.Net/Elements/Entities/IColShape.cs b/api/AltV.Net/Elements/Entities/IColShape.cs index 3b809fb37..1173f533f 100644 --- a/api/AltV.Net/Elements/Entities/IColShape.cs +++ b/api/AltV.Net/Elements/Entities/IColShape.cs @@ -16,14 +16,6 @@ public interface IColShape : ISharedColShape, IWorldObject /// bool IsPlayersOnly { get; set; } - [Obsolete("Use Destroy() instead")] - void Remove(); - - /// - /// Destroy the collision shape - /// - void Destroy(); - bool IsEntityIn(IEntity entity); /// diff --git a/api/AltV.Net/Elements/Entities/IVehicle.cs b/api/AltV.Net/Elements/Entities/IVehicle.cs index a3108436c..b0f721704 100644 --- a/api/AltV.Net/Elements/Entities/IVehicle.cs +++ b/api/AltV.Net/Elements/Entities/IVehicle.cs @@ -562,14 +562,6 @@ public interface IVehicle : ISharedVehicle, IEntity /// string ScriptData { get; set; } - [Obsolete("Use Destroy() instead")] - void Remove(); - - /// - /// Destroy the vehicle entity - /// - void Destroy(); - /// /// Repairs the vehicle /// diff --git a/api/AltV.Net/Elements/Entities/IVoiceChannel.cs b/api/AltV.Net/Elements/Entities/IVoiceChannel.cs index f34532222..be6c449ce 100644 --- a/api/AltV.Net/Elements/Entities/IVoiceChannel.cs +++ b/api/AltV.Net/Elements/Entities/IVoiceChannel.cs @@ -59,14 +59,6 @@ public interface IVoiceChannel : IBaseObject /// float MaxDistance { get; } - [Obsolete("Use Destroy() instead")] - void Remove(); - - /// - /// Destroy the voice channel - /// - void Destroy(); - uint Filter { get; set; } int Priority { get; set; } From 489d77ef96214196410ae482b4b629b47b09b283 Mon Sep 17 00:00:00 2001 From: doxoh Date: Sun, 22 Oct 2023 21:39:11 +0200 Subject: [PATCH 08/75] fix serverside blips --- api/AltV.Net.Async/Elements/Entities/AsyncBlip.cs | 10 +++++++--- api/AltV.Net/Elements/Entities/Blip.cs | 11 ++++++++--- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/api/AltV.Net.Async/Elements/Entities/AsyncBlip.cs b/api/AltV.Net.Async/Elements/Entities/AsyncBlip.cs index e8be2484e..379e0d174 100644 --- a/api/AltV.Net.Async/Elements/Entities/AsyncBlip.cs +++ b/api/AltV.Net.Async/Elements/Entities/AsyncBlip.cs @@ -13,7 +13,6 @@ public class AsyncBlip : AsyncWorldObject, IBlip, IAsyncConvertible { protected readonly IBlip Blip; public IntPtr BlipNativePointer => Blip.BlipNativePointer; - bool IBlip.IsGlobal { get; set; } public void AddTargetPlayer(IPlayer player) { lock (Blip) @@ -61,8 +60,6 @@ public bool IsGlobal } } - byte IBlip.BlipType { get; set; } - public bool IsAttached { get @@ -97,6 +94,13 @@ public byte BlipType return Blip.BlipType; } } + set { + lock (Blip) + { + if (!AsyncContext.CheckIfExistsNullable(Blip)) return; + Blip.BlipType = value; + } + } } public uint Sprite diff --git a/api/AltV.Net/Elements/Entities/Blip.cs b/api/AltV.Net/Elements/Entities/Blip.cs index ec49b0399..19245f411 100644 --- a/api/AltV.Net/Elements/Entities/Blip.cs +++ b/api/AltV.Net/Elements/Entities/Blip.cs @@ -12,7 +12,6 @@ namespace AltV.Net.Elements.Entities public class Blip : WorldObject, IBlip { public IntPtr BlipNativePointer { get; } - bool IBlip.IsGlobal { get; set; } public void AddTargetPlayer(IPlayer player) { unsafe @@ -72,10 +71,16 @@ public bool IsGlobal return Core.Library.Shared.Blip_IsGlobal(BlipNativePointer) == 1; } } + set + { + unsafe + { + CheckIfEntityExists(); + Core.Library.Server.Blip_SetGlobal(BlipNativePointer, (value) ? (byte)1 : (byte)0); + } + } } - byte IBlip.BlipType { get; set; } - public bool IsAttached { get From bbc2fb9c948890d830663cc67be3929216b8a447 Mon Sep 17 00:00:00 2001 From: doxoh Date: Wed, 25 Oct 2023 13:28:56 +0200 Subject: [PATCH 09/75] fix Audio addOutput --- api/AltV.Net.Client/Elements/Entities/Audio.cs | 4 ++-- api/AltV.Net.Client/Elements/Interfaces/IAudio.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/api/AltV.Net.Client/Elements/Entities/Audio.cs b/api/AltV.Net.Client/Elements/Entities/Audio.cs index 65bca1190..524e0570b 100644 --- a/api/AltV.Net.Client/Elements/Entities/Audio.cs +++ b/api/AltV.Net.Client/Elements/Entities/Audio.cs @@ -138,7 +138,7 @@ public bool IsPlaying } } - public void AddOutput(AudioOutput audioOutput) + public void AddOutput(IAudioOutput audioOutput) { unsafe { @@ -147,7 +147,7 @@ public void AddOutput(AudioOutput audioOutput) } } - public void RemoveOutput(AudioOutput audioOutput) + public void RemoveOutput(IAudioOutput audioOutput) { unsafe { diff --git a/api/AltV.Net.Client/Elements/Interfaces/IAudio.cs b/api/AltV.Net.Client/Elements/Interfaces/IAudio.cs index 426156941..ae11fdacf 100644 --- a/api/AltV.Net.Client/Elements/Interfaces/IAudio.cs +++ b/api/AltV.Net.Client/Elements/Interfaces/IAudio.cs @@ -11,8 +11,8 @@ public interface IAudio : IBaseObject double CurrentTime { get; } double MaxTime { get; } bool IsPlaying { get; } - void AddOutput(AudioOutput audioOutput); - void RemoveOutput(AudioOutput audioOutput); + void AddOutput(IAudioOutput audioOutput); + void RemoveOutput(IAudioOutput audioOutput); AudioEntity[] GetOutputs(); void Pause(); void Play(); From 1ed6bdccb38d439fefc486e02bc92ccc6e2ffa49 Mon Sep 17 00:00:00 2001 From: doxoh Date: Sun, 22 Oct 2023 21:39:11 +0200 Subject: [PATCH 10/75] fix serverside blips --- api/AltV.Net.Async/Elements/Entities/AsyncBlip.cs | 10 +++++++--- api/AltV.Net/Elements/Entities/Blip.cs | 11 ++++++++--- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/api/AltV.Net.Async/Elements/Entities/AsyncBlip.cs b/api/AltV.Net.Async/Elements/Entities/AsyncBlip.cs index e8be2484e..379e0d174 100644 --- a/api/AltV.Net.Async/Elements/Entities/AsyncBlip.cs +++ b/api/AltV.Net.Async/Elements/Entities/AsyncBlip.cs @@ -13,7 +13,6 @@ public class AsyncBlip : AsyncWorldObject, IBlip, IAsyncConvertible { protected readonly IBlip Blip; public IntPtr BlipNativePointer => Blip.BlipNativePointer; - bool IBlip.IsGlobal { get; set; } public void AddTargetPlayer(IPlayer player) { lock (Blip) @@ -61,8 +60,6 @@ public bool IsGlobal } } - byte IBlip.BlipType { get; set; } - public bool IsAttached { get @@ -97,6 +94,13 @@ public byte BlipType return Blip.BlipType; } } + set { + lock (Blip) + { + if (!AsyncContext.CheckIfExistsNullable(Blip)) return; + Blip.BlipType = value; + } + } } public uint Sprite diff --git a/api/AltV.Net/Elements/Entities/Blip.cs b/api/AltV.Net/Elements/Entities/Blip.cs index ec49b0399..19245f411 100644 --- a/api/AltV.Net/Elements/Entities/Blip.cs +++ b/api/AltV.Net/Elements/Entities/Blip.cs @@ -12,7 +12,6 @@ namespace AltV.Net.Elements.Entities public class Blip : WorldObject, IBlip { public IntPtr BlipNativePointer { get; } - bool IBlip.IsGlobal { get; set; } public void AddTargetPlayer(IPlayer player) { unsafe @@ -72,10 +71,16 @@ public bool IsGlobal return Core.Library.Shared.Blip_IsGlobal(BlipNativePointer) == 1; } } + set + { + unsafe + { + CheckIfEntityExists(); + Core.Library.Server.Blip_SetGlobal(BlipNativePointer, (value) ? (byte)1 : (byte)0); + } + } } - byte IBlip.BlipType { get; set; } - public bool IsAttached { get From a7fb45e198200e2fd7b77e8ea038633a07b5828a Mon Sep 17 00:00:00 2001 From: doxoh Date: Wed, 25 Oct 2023 13:28:56 +0200 Subject: [PATCH 11/75] fix Audio addOutput --- api/AltV.Net.Client/Elements/Entities/Audio.cs | 4 ++-- api/AltV.Net.Client/Elements/Interfaces/IAudio.cs | 4 ++-- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/api/AltV.Net.Client/Elements/Entities/Audio.cs b/api/AltV.Net.Client/Elements/Entities/Audio.cs index 65bca1190..524e0570b 100644 --- a/api/AltV.Net.Client/Elements/Entities/Audio.cs +++ b/api/AltV.Net.Client/Elements/Entities/Audio.cs @@ -138,7 +138,7 @@ public bool IsPlaying } } - public void AddOutput(AudioOutput audioOutput) + public void AddOutput(IAudioOutput audioOutput) { unsafe { @@ -147,7 +147,7 @@ public void AddOutput(AudioOutput audioOutput) } } - public void RemoveOutput(AudioOutput audioOutput) + public void RemoveOutput(IAudioOutput audioOutput) { unsafe { diff --git a/api/AltV.Net.Client/Elements/Interfaces/IAudio.cs b/api/AltV.Net.Client/Elements/Interfaces/IAudio.cs index 426156941..ae11fdacf 100644 --- a/api/AltV.Net.Client/Elements/Interfaces/IAudio.cs +++ b/api/AltV.Net.Client/Elements/Interfaces/IAudio.cs @@ -11,8 +11,8 @@ public interface IAudio : IBaseObject double CurrentTime { get; } double MaxTime { get; } bool IsPlaying { get; } - void AddOutput(AudioOutput audioOutput); - void RemoveOutput(AudioOutput audioOutput); + void AddOutput(IAudioOutput audioOutput); + void RemoveOutput(IAudioOutput audioOutput); AudioEntity[] GetOutputs(); void Pause(); void Play(); From b289d82d75bb00a0fbe3e64c09e8534f81252240 Mon Sep 17 00:00:00 2001 From: Robin <59572199+Kaiwoknats@users.noreply.github.com> Date: Tue, 31 Oct 2023 14:28:34 +0100 Subject: [PATCH 12/75] Update async-entity-factories.md changed types from ushort to uint --- docs/articles/getting-started/async-entity-factories.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/articles/getting-started/async-entity-factories.md b/docs/articles/getting-started/async-entity-factories.md index 2835c7c33..4a954a756 100644 --- a/docs/articles/getting-started/async-entity-factories.md +++ b/docs/articles/getting-started/async-entity-factories.md @@ -14,7 +14,7 @@ public class MyAsyncPlayer : AsyncPlayer { public bool LoggedIn { get; set; } - public MyAsyncPlayer(ICore core, IntPtr nativePointer, ushort id) : base(core, nativePointer, id) + public MyAsyncPlayer(ICore core, IntPtr nativePointer, uint id) : base(core, nativePointer, id) { LoggedIn = false; } @@ -27,12 +27,12 @@ Thats why you need to create a factory that will create the player for you when ## Step 2, Create the factory In the factory the defined default constructor of the player or vehicle class will be called. -You only need to override the ```IPlayer Create(IntPtr playerPointer, ushort id)``` method and initialize your own class instead of the default one. +You only need to override the ```IPlayer Create(IntPtr playerPointer, uint id)``` method and initialize your own class instead of the default one. ```csharp public class MyAsyncPlayerFactory : IEntityFactory { - public IPlayer Create(ICore core, IntPtr playerPointer, ushort id) + public IPlayer Create(ICore core, IntPtr playerPointer, uint id) { return new MyAsyncPlayer(core, playerPointer, id); } @@ -63,7 +63,7 @@ public class MyAsyncVehicle : AsyncVehicle public int MyData { get; set; } // This constructor is used for creation via entity factory - public MyAsyncVehicle(ICore core, IntPtr nativePointer, ushort id) : base(core, nativePointer, id) + public MyAsyncVehicle(ICore core, IntPtr nativePointer, uint id) : base(core, nativePointer, id) { MyData = 6; } From 3afe6f3812d659c9a57263e538eb491c3960a979 Mon Sep 17 00:00:00 2001 From: doxoh Date: Thu, 2 Nov 2023 12:44:14 +0100 Subject: [PATCH 13/75] Updated submodule runtime --- runtime | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime b/runtime index 077779ed9..fc55ff653 160000 --- a/runtime +++ b/runtime @@ -1 +1 @@ -Subproject commit 077779ed9700897e7cc70fc7f8b54c4fecacc113 +Subproject commit fc55ff6532afb06aa13dbc12eb238f247d01ef3d From 44283633f0f74767c204398f6b503c34cfdc087c Mon Sep 17 00:00:00 2001 From: deluvas1911 <69921315+deluvas1911@users.noreply.github.com> Date: Thu, 2 Nov 2023 12:44:31 +0100 Subject: [PATCH 14/75] Make PlayerRequestControl cancelable (#823) --- api/AltV.Net.Async/AsyncCore.cs | 4 ++-- api/AltV.Net.CApi/Native/AltV.Resource.cs | 2 +- api/AltV.Net/Alt.RegisterEvents.cs | 7 ++++++- api/AltV.Net/Core.Events.cs | 20 ++++++++++++++++---- api/AltV.Net/Events/Events.cs | 2 +- api/AltV.Net/ModuleWrapper.cs | 4 ++-- 6 files changed, 28 insertions(+), 11 deletions(-) diff --git a/api/AltV.Net.Async/AsyncCore.cs b/api/AltV.Net.Async/AsyncCore.cs index 92c5fcece..454a9c959 100644 --- a/api/AltV.Net.Async/AsyncCore.cs +++ b/api/AltV.Net.Async/AsyncCore.cs @@ -724,9 +724,9 @@ await ServerStartedAsyncEventHandler.CallAsync(@delegate => }); } - public override void OnPlayerRequestControlEvent(IEntity target, IPlayer player) + public override void OnPlayerRequestControlEvent(IntPtr eventPtr, IEntity target, IPlayer player) { - base.OnPlayerRequestControlEvent(target, player); + base.OnPlayerRequestControlEvent(eventPtr, target, player); if (!PlayerRequestControlAsyncEventHandler.HasEvents()) return; Task.Run(async () => diff --git a/api/AltV.Net.CApi/Native/AltV.Resource.cs b/api/AltV.Net.CApi/Native/AltV.Resource.cs index 0726da7a3..1d64a5db9 100644 --- a/api/AltV.Net.CApi/Native/AltV.Resource.cs +++ b/api/AltV.Net.CApi/Native/AltV.Resource.cs @@ -100,7 +100,7 @@ internal delegate void VehicleHornDelegate(IntPtr eventPointer, IntPtr targetPoi internal delegate void ServerStartedDelegate(); - internal delegate void PlayerRequestControlDelegate(IntPtr target, BaseObjectType targetType, IntPtr player); + internal delegate void PlayerRequestControlDelegate(IntPtr eventPtr, IntPtr target, BaseObjectType targetType, IntPtr player); internal delegate void PlayerChangeAnimationDelegate(IntPtr target, uint oldDict, uint newDict, uint oldName, uint newName); internal delegate void PlayerChangeInteriorDelegate(IntPtr target, uint oldIntLoc, uint newIntLoc); internal delegate void PlayerDimensionChangeDelegate(IntPtr player, int oldDimension, int newDimension); diff --git a/api/AltV.Net/Alt.RegisterEvents.cs b/api/AltV.Net/Alt.RegisterEvents.cs index 2a3244e9b..7c833e2ad 100644 --- a/api/AltV.Net/Alt.RegisterEvents.cs +++ b/api/AltV.Net/Alt.RegisterEvents.cs @@ -621,7 +621,12 @@ public static void RegisterEvents(object target) { scriptFunction.Set(entity); scriptFunction.Set(player); - scriptFunction.Call(); + if (scriptFunction.Call() is bool value) + { + return value; + } + + return true; }; break; } diff --git a/api/AltV.Net/Core.Events.cs b/api/AltV.Net/Core.Events.cs index d2895cd0c..cab649017 100644 --- a/api/AltV.Net/Core.Events.cs +++ b/api/AltV.Net/Core.Events.cs @@ -1433,7 +1433,7 @@ public virtual void OnServerStartedEvent() } } - public virtual void OnPlayerRequestControl(IntPtr targetPtr, BaseObjectType targetType, IntPtr playerPtr) + public virtual void OnPlayerRequestControl(IntPtr eventPtr, IntPtr targetPtr, BaseObjectType targetType, IntPtr playerPtr) { var target = (IEntity)PoolManager.Get(targetPtr, targetType); if (target is null) @@ -1449,16 +1449,20 @@ public virtual void OnPlayerRequestControl(IntPtr targetPtr, BaseObjectType targ return; } - OnPlayerRequestControlEvent(target, player); + OnPlayerRequestControlEvent(eventPtr, target, player); } - public virtual void OnPlayerRequestControlEvent(IEntity target, IPlayer player) + public virtual void OnPlayerRequestControlEvent(IntPtr eventPtr, IEntity target, IPlayer player) { + var cancel = false; foreach (var @delegate in PlayerRequestControlHandler.GetEvents()) { try { - @delegate(target, player); + if (!@delegate(target, player)) + { + cancel = true; + } } catch (TargetInvocationException exception) { @@ -1469,6 +1473,14 @@ public virtual void OnPlayerRequestControlEvent(IEntity target, IPlayer player) Alt.Log("exception at event:" + "OnPlayerRequestControlEvent" + ":" + exception); } } + + if (cancel) + { + unsafe + { + Alt.Core.Library.Shared.Event_Cancel(eventPtr); + } + } } public virtual void OnPlayerChangeAnimation(IntPtr playerPtr, uint oldDict, uint newDict, uint oldName, diff --git a/api/AltV.Net/Events/Events.cs b/api/AltV.Net/Events/Events.cs index a04a2766e..84cc5eb2a 100644 --- a/api/AltV.Net/Events/Events.cs +++ b/api/AltV.Net/Events/Events.cs @@ -87,7 +87,7 @@ public delegate WeaponDamageResponse WeaponDamageDelegate(IPlayer player, IEntit public delegate void ServerStartedDelegate(); - public delegate void PlayerRequestControlDelegate(IEntity target, IPlayer player); + public delegate bool PlayerRequestControlDelegate(IEntity target, IPlayer player); public delegate void PlayerChangeAnimationDelegate(IPlayer player, uint oldDict, uint newDict, uint oldName, uint newName); diff --git a/api/AltV.Net/ModuleWrapper.cs b/api/AltV.Net/ModuleWrapper.cs index e18ec4f9e..1fe63a5e4 100644 --- a/api/AltV.Net/ModuleWrapper.cs +++ b/api/AltV.Net/ModuleWrapper.cs @@ -398,9 +398,9 @@ public static void OnServerStarted() _core.OnServerStarted(); } - public static void OnPlayerRequestControl(IntPtr target, BaseObjectType targetType, IntPtr player) + public static void OnPlayerRequestControl(IntPtr eventPtr, IntPtr target, BaseObjectType targetType, IntPtr player) { - _core.OnPlayerRequestControl(target, targetType, player); + _core.OnPlayerRequestControl(eventPtr, target, targetType, player); } public static void OnPlayerChangeAnimation(IntPtr player, uint oldDict, uint newDict, uint oldName, uint newName) From 54f6a5ee16368e10f817234cf0f81539f6714f8a Mon Sep 17 00:00:00 2001 From: doxoh Date: Thu, 9 Nov 2023 21:14:35 +0100 Subject: [PATCH 15/75] add iplayer::RemoveHeadBlendPaletteColor --- api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs | 9 +++++++++ api/AltV.Net.CApi/Libraries/ClientLibrary.cs | 4 ++-- api/AltV.Net.CApi/Libraries/ServerLibrary.cs | 9 +++++++-- api/AltV.Net.CApi/Libraries/SharedLibrary.cs | 4 ++-- api/AltV.Net/Elements/Entities/IPlayer.cs | 1 + api/AltV.Net/Elements/Entities/Player.cs | 9 +++++++++ runtime | 2 +- 7 files changed, 31 insertions(+), 7 deletions(-) diff --git a/api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs b/api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs index 77ad81af5..2b79ecc6c 100644 --- a/api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs +++ b/api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs @@ -1219,6 +1219,15 @@ public Rgba GetHeadBlendPaletteColor(byte id) } } + public void RemoveHeadBlendPaletteColor() + { + lock (Player) + { + if (!AsyncContext.CheckIfExistsNullable(Player)) return; + Player.RemoveHeadBlendPaletteColor(); + } + } + public void SetHeadBlendData(uint shapeFirstID, uint shapeSecondID, uint shapeThirdID, uint skinFirstID, uint skinSecondID, uint skinThirdID, float shapeMix, float skinMix, float thirdMix) { diff --git a/api/AltV.Net.CApi/Libraries/ClientLibrary.cs b/api/AltV.Net.CApi/Libraries/ClientLibrary.cs index 098dd5d93..7dd552d4f 100644 --- a/api/AltV.Net.CApi/Libraries/ClientLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/ClientLibrary.cs @@ -886,7 +886,7 @@ public unsafe interface IClientLibrary public unsafe class ClientLibrary : IClientLibrary { - public readonly uint Methods = 1739; + public readonly uint Methods = 1740; public delegate* unmanaged[Cdecl] Audio_AddOutput { get; } public delegate* unmanaged[Cdecl] Audio_GetBaseObject { get; } public delegate* unmanaged[Cdecl] Audio_GetCurrentTime { get; } @@ -3512,7 +3512,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public ClientLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 3086495798003042324UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 12441135083740807336UL) Outdated = true; Audio_AddOutput = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 9914412815391408844UL, Audio_AddOutputFallback); Audio_GetBaseObject = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 6330360502401226894UL, Audio_GetBaseObjectFallback); Audio_GetCurrentTime = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 2944324482134975819UL, Audio_GetCurrentTimeFallback); diff --git a/api/AltV.Net.CApi/Libraries/ServerLibrary.cs b/api/AltV.Net.CApi/Libraries/ServerLibrary.cs index 91582424f..f184390cc 100644 --- a/api/AltV.Net.CApi/Libraries/ServerLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/ServerLibrary.cs @@ -223,6 +223,7 @@ public unsafe interface IServerLibrary public delegate* unmanaged[Cdecl] Player_RemoveDecoration { get; } public delegate* unmanaged[Cdecl] Player_RemoveFaceFeature { get; } public delegate* unmanaged[Cdecl] Player_RemoveHeadBlendData { get; } + public delegate* unmanaged[Cdecl] Player_RemoveHeadBlendPaletteColor { get; } public delegate* unmanaged[Cdecl] Player_RemoveHeadOverlay { get; } public delegate* unmanaged[Cdecl] Player_RemoveWeapon { get; } public delegate* unmanaged[Cdecl] Player_RemoveWeaponComponent { get; } @@ -481,7 +482,7 @@ public unsafe interface IServerLibrary public unsafe class ServerLibrary : IServerLibrary { - public readonly uint Methods = 1739; + public readonly uint Methods = 1740; public delegate* unmanaged[Cdecl] BaseObject_DeleteSyncedMetaData { get; } public delegate* unmanaged[Cdecl] BaseObject_SetMultipleSyncedMetaData { get; } public delegate* unmanaged[Cdecl] BaseObject_SetSyncedMetaData { get; } @@ -695,6 +696,7 @@ public unsafe class ServerLibrary : IServerLibrary public delegate* unmanaged[Cdecl] Player_RemoveDecoration { get; } public delegate* unmanaged[Cdecl] Player_RemoveFaceFeature { get; } public delegate* unmanaged[Cdecl] Player_RemoveHeadBlendData { get; } + public delegate* unmanaged[Cdecl] Player_RemoveHeadBlendPaletteColor { get; } public delegate* unmanaged[Cdecl] Player_RemoveHeadOverlay { get; } public delegate* unmanaged[Cdecl] Player_RemoveWeapon { get; } public delegate* unmanaged[Cdecl] Player_RemoveWeaponComponent { get; } @@ -1375,6 +1377,8 @@ public unsafe class ServerLibrary : IServerLibrary private static byte Player_RemoveFaceFeatureFallback(nint _player, byte _index) => throw new Exceptions.OutdatedSdkException("Player_RemoveFaceFeature", "Player_RemoveFaceFeature SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Player_RemoveHeadBlendDataDelegate(nint _player); private static void Player_RemoveHeadBlendDataFallback(nint _player) => throw new Exceptions.OutdatedSdkException("Player_RemoveHeadBlendData", "Player_RemoveHeadBlendData SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Player_RemoveHeadBlendPaletteColorDelegate(nint _player); + private static void Player_RemoveHeadBlendPaletteColorFallback(nint _player) => throw new Exceptions.OutdatedSdkException("Player_RemoveHeadBlendPaletteColor", "Player_RemoveHeadBlendPaletteColor SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate byte Player_RemoveHeadOverlayDelegate(nint _player, byte _overlayID); private static byte Player_RemoveHeadOverlayFallback(nint _player, byte _overlayID) => throw new Exceptions.OutdatedSdkException("Player_RemoveHeadOverlay", "Player_RemoveHeadOverlay SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate byte Player_RemoveWeaponDelegate(nint _player, uint _weapon); @@ -1892,7 +1896,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public ServerLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 3086495798003042324UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 12441135083740807336UL) Outdated = true; BaseObject_DeleteSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8228424877092269355UL, BaseObject_DeleteSyncedMetaDataFallback); BaseObject_SetMultipleSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 1390762125822890831UL, BaseObject_SetMultipleSyncedMetaDataFallback); BaseObject_SetSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8002999088966424231UL, BaseObject_SetSyncedMetaDataFallback); @@ -2106,6 +2110,7 @@ public ServerLibrary(Dictionary funcTable) Player_RemoveDecoration = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 3139723963307924640UL, Player_RemoveDecorationFallback); Player_RemoveFaceFeature = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 1204109734587833282UL, Player_RemoveFaceFeatureFallback); Player_RemoveHeadBlendData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8805714842908729165UL, Player_RemoveHeadBlendDataFallback); + Player_RemoveHeadBlendPaletteColor = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 6835192118570564879UL, Player_RemoveHeadBlendPaletteColorFallback); Player_RemoveHeadOverlay = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 12300710546613769705UL, Player_RemoveHeadOverlayFallback); Player_RemoveWeapon = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 6739305111416325852UL, Player_RemoveWeaponFallback); Player_RemoveWeaponComponent = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 937601034617427157UL, Player_RemoveWeaponComponentFallback); diff --git a/api/AltV.Net.CApi/Libraries/SharedLibrary.cs b/api/AltV.Net.CApi/Libraries/SharedLibrary.cs index dbd8d8233..5dc21f3f7 100644 --- a/api/AltV.Net.CApi/Libraries/SharedLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/SharedLibrary.cs @@ -412,7 +412,7 @@ public unsafe interface ISharedLibrary public unsafe class SharedLibrary : ISharedLibrary { - public readonly uint Methods = 1739; + public readonly uint Methods = 1740; public delegate* unmanaged[Cdecl] Audio_GetID { get; } public delegate* unmanaged[Cdecl] AudioAttachedOutput_GetID { get; } public delegate* unmanaged[Cdecl] AudioFilter_GetID { get; } @@ -1616,7 +1616,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public SharedLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 3086495798003042324UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 12441135083740807336UL) Outdated = true; Audio_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 4464042055475980737UL, Audio_GetIDFallback); AudioAttachedOutput_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 17725794901805112189UL, AudioAttachedOutput_GetIDFallback); AudioFilter_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8824535635529306325UL, AudioFilter_GetIDFallback); diff --git a/api/AltV.Net/Elements/Entities/IPlayer.cs b/api/AltV.Net/Elements/Entities/IPlayer.cs index 1e8ed1744..d14d196a7 100644 --- a/api/AltV.Net/Elements/Entities/IPlayer.cs +++ b/api/AltV.Net/Elements/Entities/IPlayer.cs @@ -411,6 +411,7 @@ void SetDateTime(int day, int month, int year, int hour, /// This entity was removed Rgba GetHeadBlendPaletteColor(byte id); + void RemoveHeadBlendPaletteColor(); /// /// Set Head Blend Data diff --git a/api/AltV.Net/Elements/Entities/Player.cs b/api/AltV.Net/Elements/Entities/Player.cs index 42b8e9620..ef8c7ef07 100644 --- a/api/AltV.Net/Elements/Entities/Player.cs +++ b/api/AltV.Net/Elements/Entities/Player.cs @@ -1565,6 +1565,15 @@ public Rgba GetHeadBlendPaletteColor(byte id) } } + public void RemoveHeadBlendPaletteColor() + { + unsafe + { + CheckIfEntityExists(); + Core.Library.Server.Player_RemoveHeadBlendPaletteColor(PlayerNativePointer); + } + } + public void SetHeadBlendData(uint shapeFirstID, uint shapeSecondID, uint shapeThirdID, uint skinFirstID, uint skinSecondID, uint skinThirdID, float shapeMix, float skinMix, float thirdMix) { unsafe diff --git a/runtime b/runtime index fc55ff653..2814bb785 160000 --- a/runtime +++ b/runtime @@ -1 +1 @@ -Subproject commit fc55ff6532afb06aa13dbc12eb238f247d01ef3d +Subproject commit 2814bb78541bfca2bd67a37a331c6cff016f0d11 From 1d5c36c72a613a6e5e287cfd594ebf9c7c762673 Mon Sep 17 00:00:00 2001 From: duydang2311 <34796192+duydang2311@users.noreply.github.com> Date: Mon, 13 Nov 2023 10:02:09 +0700 Subject: [PATCH 16/75] Fix AsyncPlayer.EmitRPC always returns 0 --- api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs b/api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs index 2b79ecc6c..2be83c6c8 100644 --- a/api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs +++ b/api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs @@ -693,7 +693,7 @@ public ushort EmitRPC(string name, params object[] args) { if (Player.Exists) { - Alt.Core.TriggerClientRPC(Player, eventNamePtr, mValues); + result = Alt.Core.TriggerClientRPC(Player, eventNamePtr, mValues); } } From 1ef672296ea9ec24651c706015b6bf6c88b2a88e Mon Sep 17 00:00:00 2001 From: BluePeer Date: Fri, 17 Nov 2023 20:32:06 +0100 Subject: [PATCH 17/75] Update toc.yml Remove Entry of Removed player before connect event --- docs/articles/toc.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/articles/toc.yml b/docs/articles/toc.yml index 03b00a04f..cfbe825c5 100644 --- a/docs/articles/toc.yml +++ b/docs/articles/toc.yml @@ -83,8 +83,6 @@ href: events/player-events/player-change-vehicle-seat.md - name: PlayerDamage event href: events/player-events/player-damage.md - - name: PlayerBeforeConnect event - href: events/player-events/player-before-connect.md - name: NetOwnerChange event href: events/player-events/netowner-change.md - name: Fire event From 380bc34aa714ccdc84e35f21cd7d344d0572624c Mon Sep 17 00:00:00 2001 From: BluePeer Date: Fri, 17 Nov 2023 20:45:25 +0100 Subject: [PATCH 18/75] Update netowner-change.md correct StartProjectile to NetOwnerChange --- docs/articles/events/player-events/netowner-change.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/articles/events/player-events/netowner-change.md b/docs/articles/events/player-events/netowner-change.md index 69a5d4037..dba4732de 100644 --- a/docs/articles/events/player-events/netowner-change.md +++ b/docs/articles/events/player-events/netowner-change.md @@ -27,7 +27,7 @@ Alt.OnNetOwnerChange += (entity, oldNetOwner, newNetOwner) => { ```csharp public class MyScript : IScript { - [ScriptEvent(ScriptEventType.StartProjectile)] + [ScriptEvent(ScriptEventType.NetOwnerChange)] public void OnNetOwnerChange(IEntity entity, IPlayer oldNetOwner, IPlayer newNetOwner) { // ... From 51b62a0cb645cecb3b655e4d1d8973c13f1b710a Mon Sep 17 00:00:00 2001 From: doxoh Date: Fri, 24 Nov 2023 18:56:55 +0100 Subject: [PATCH 19/75] feat(shared): new textlable methods --- api/AltV.Net.CApi/Libraries/ClientLibrary.cs | 4 +- api/AltV.Net.CApi/Libraries/ServerLibrary.cs | 4 +- api/AltV.Net.CApi/Libraries/SharedLibrary.cs | 64 ++++++++- .../Elements/Data/TextLabelAlignment.cs | 9 ++ .../Elements/Entities/TextLabel.cs | 134 +++++++++++++++++- .../Elements/Interfaces/ITextLabel.cs | 9 +- runtime | 2 +- 7 files changed, 215 insertions(+), 11 deletions(-) create mode 100644 api/AltV.Net.Client/Elements/Data/TextLabelAlignment.cs diff --git a/api/AltV.Net.CApi/Libraries/ClientLibrary.cs b/api/AltV.Net.CApi/Libraries/ClientLibrary.cs index 7dd552d4f..7c3dd9961 100644 --- a/api/AltV.Net.CApi/Libraries/ClientLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/ClientLibrary.cs @@ -886,7 +886,7 @@ public unsafe interface IClientLibrary public unsafe class ClientLibrary : IClientLibrary { - public readonly uint Methods = 1740; + public readonly uint Methods = 1752; public delegate* unmanaged[Cdecl] Audio_AddOutput { get; } public delegate* unmanaged[Cdecl] Audio_GetBaseObject { get; } public delegate* unmanaged[Cdecl] Audio_GetCurrentTime { get; } @@ -3512,7 +3512,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public ClientLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 12441135083740807336UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 13175119521654926275UL) Outdated = true; Audio_AddOutput = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 9914412815391408844UL, Audio_AddOutputFallback); Audio_GetBaseObject = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 6330360502401226894UL, Audio_GetBaseObjectFallback); Audio_GetCurrentTime = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 2944324482134975819UL, Audio_GetCurrentTimeFallback); diff --git a/api/AltV.Net.CApi/Libraries/ServerLibrary.cs b/api/AltV.Net.CApi/Libraries/ServerLibrary.cs index f184390cc..f667ccd05 100644 --- a/api/AltV.Net.CApi/Libraries/ServerLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/ServerLibrary.cs @@ -482,7 +482,7 @@ public unsafe interface IServerLibrary public unsafe class ServerLibrary : IServerLibrary { - public readonly uint Methods = 1740; + public readonly uint Methods = 1752; public delegate* unmanaged[Cdecl] BaseObject_DeleteSyncedMetaData { get; } public delegate* unmanaged[Cdecl] BaseObject_SetMultipleSyncedMetaData { get; } public delegate* unmanaged[Cdecl] BaseObject_SetSyncedMetaData { get; } @@ -1896,7 +1896,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public ServerLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 12441135083740807336UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 13175119521654926275UL) Outdated = true; BaseObject_DeleteSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8228424877092269355UL, BaseObject_DeleteSyncedMetaDataFallback); BaseObject_SetMultipleSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 1390762125822890831UL, BaseObject_SetMultipleSyncedMetaDataFallback); BaseObject_SetSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8002999088966424231UL, BaseObject_SetSyncedMetaDataFallback); diff --git a/api/AltV.Net.CApi/Libraries/SharedLibrary.cs b/api/AltV.Net.CApi/Libraries/SharedLibrary.cs index 5dc21f3f7..ff0d0c27e 100644 --- a/api/AltV.Net.CApi/Libraries/SharedLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/SharedLibrary.cs @@ -369,20 +369,32 @@ public unsafe interface ISharedLibrary public delegate* unmanaged[Cdecl] Resource_SetExport { get; } public delegate* unmanaged[Cdecl] Resource_SetExports { get; } public delegate* unmanaged[Cdecl] RmlDocument_GetID { get; } + public delegate* unmanaged[Cdecl] TextLabel_GetAlign { get; } public delegate* unmanaged[Cdecl] TextLabel_GetColor { get; } + public delegate* unmanaged[Cdecl] TextLabel_GetFont { get; } + public delegate* unmanaged[Cdecl] TextLabel_GetFontSize { get; } public delegate* unmanaged[Cdecl] TextLabel_GetID { get; } + public delegate* unmanaged[Cdecl] TextLabel_GetOutlineColor { get; } + public delegate* unmanaged[Cdecl] TextLabel_GetOutlineWidth { get; } public delegate* unmanaged[Cdecl] TextLabel_GetRotation { get; } public delegate* unmanaged[Cdecl] TextLabel_GetScale { get; } public delegate* unmanaged[Cdecl] TextLabel_GetStreamingDistance { get; } public delegate* unmanaged[Cdecl] TextLabel_GetTarget { get; } + public delegate* unmanaged[Cdecl] TextLabel_GetText { get; } public delegate* unmanaged[Cdecl] TextLabel_GetWorldObject { get; } public delegate* unmanaged[Cdecl] TextLabel_IsFacingCamera { get; } public delegate* unmanaged[Cdecl] TextLabel_IsGlobal { get; } public delegate* unmanaged[Cdecl] TextLabel_IsVisible { get; } + public delegate* unmanaged[Cdecl] TextLabel_SetAlign { get; } public delegate* unmanaged[Cdecl] TextLabel_SetColor { get; } public delegate* unmanaged[Cdecl] TextLabel_SetFaceCamera { get; } + public delegate* unmanaged[Cdecl] TextLabel_SetFont { get; } + public delegate* unmanaged[Cdecl] TextLabel_SetFontSize { get; } + public delegate* unmanaged[Cdecl] TextLabel_SetOutlineColor { get; } + public delegate* unmanaged[Cdecl] TextLabel_SetOutlineWidth { get; } public delegate* unmanaged[Cdecl] TextLabel_SetRotation { get; } public delegate* unmanaged[Cdecl] TextLabel_SetScale { get; } + public delegate* unmanaged[Cdecl] TextLabel_SetText { get; } public delegate* unmanaged[Cdecl] TextLabel_SetVisible { get; } public delegate* unmanaged[Cdecl] Vehicle_GetEntity { get; } public delegate* unmanaged[Cdecl] Vehicle_GetID { get; } @@ -412,7 +424,7 @@ public unsafe interface ISharedLibrary public unsafe class SharedLibrary : ISharedLibrary { - public readonly uint Methods = 1740; + public readonly uint Methods = 1752; public delegate* unmanaged[Cdecl] Audio_GetID { get; } public delegate* unmanaged[Cdecl] AudioAttachedOutput_GetID { get; } public delegate* unmanaged[Cdecl] AudioFilter_GetID { get; } @@ -772,20 +784,32 @@ public unsafe class SharedLibrary : ISharedLibrary public delegate* unmanaged[Cdecl] Resource_SetExport { get; } public delegate* unmanaged[Cdecl] Resource_SetExports { get; } public delegate* unmanaged[Cdecl] RmlDocument_GetID { get; } + public delegate* unmanaged[Cdecl] TextLabel_GetAlign { get; } public delegate* unmanaged[Cdecl] TextLabel_GetColor { get; } + public delegate* unmanaged[Cdecl] TextLabel_GetFont { get; } + public delegate* unmanaged[Cdecl] TextLabel_GetFontSize { get; } public delegate* unmanaged[Cdecl] TextLabel_GetID { get; } + public delegate* unmanaged[Cdecl] TextLabel_GetOutlineColor { get; } + public delegate* unmanaged[Cdecl] TextLabel_GetOutlineWidth { get; } public delegate* unmanaged[Cdecl] TextLabel_GetRotation { get; } public delegate* unmanaged[Cdecl] TextLabel_GetScale { get; } public delegate* unmanaged[Cdecl] TextLabel_GetStreamingDistance { get; } public delegate* unmanaged[Cdecl] TextLabel_GetTarget { get; } + public delegate* unmanaged[Cdecl] TextLabel_GetText { get; } public delegate* unmanaged[Cdecl] TextLabel_GetWorldObject { get; } public delegate* unmanaged[Cdecl] TextLabel_IsFacingCamera { get; } public delegate* unmanaged[Cdecl] TextLabel_IsGlobal { get; } public delegate* unmanaged[Cdecl] TextLabel_IsVisible { get; } + public delegate* unmanaged[Cdecl] TextLabel_SetAlign { get; } public delegate* unmanaged[Cdecl] TextLabel_SetColor { get; } public delegate* unmanaged[Cdecl] TextLabel_SetFaceCamera { get; } + public delegate* unmanaged[Cdecl] TextLabel_SetFont { get; } + public delegate* unmanaged[Cdecl] TextLabel_SetFontSize { get; } + public delegate* unmanaged[Cdecl] TextLabel_SetOutlineColor { get; } + public delegate* unmanaged[Cdecl] TextLabel_SetOutlineWidth { get; } public delegate* unmanaged[Cdecl] TextLabel_SetRotation { get; } public delegate* unmanaged[Cdecl] TextLabel_SetScale { get; } + public delegate* unmanaged[Cdecl] TextLabel_SetText { get; } public delegate* unmanaged[Cdecl] TextLabel_SetVisible { get; } public delegate* unmanaged[Cdecl] Vehicle_GetEntity { get; } public delegate* unmanaged[Cdecl] Vehicle_GetID { get; } @@ -1529,10 +1553,20 @@ public unsafe class SharedLibrary : ISharedLibrary private static void Resource_SetExportsFallback(nint _core, nint _resource, nint[] val, nint[] keys, int _size) => throw new Exceptions.OutdatedSdkException("Resource_SetExports", "Resource_SetExports SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate uint RmlDocument_GetIDDelegate(nint _rmlDocument); private static uint RmlDocument_GetIDFallback(nint _rmlDocument) => throw new Exceptions.OutdatedSdkException("RmlDocument_GetID", "RmlDocument_GetID SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate byte TextLabel_GetAlignDelegate(nint _textLabel); + private static byte TextLabel_GetAlignFallback(nint _textLabel) => throw new Exceptions.OutdatedSdkException("TextLabel_GetAlign", "TextLabel_GetAlign SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void TextLabel_GetColorDelegate(nint _textLabel, Rgba* _color); private static void TextLabel_GetColorFallback(nint _textLabel, Rgba* _color) => throw new Exceptions.OutdatedSdkException("TextLabel_GetColor", "TextLabel_GetColor SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate nint TextLabel_GetFontDelegate(nint _textLabel, int* _size); + private static nint TextLabel_GetFontFallback(nint _textLabel, int* _size) => throw new Exceptions.OutdatedSdkException("TextLabel_GetFont", "TextLabel_GetFont SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate float TextLabel_GetFontSizeDelegate(nint _textLabel); + private static float TextLabel_GetFontSizeFallback(nint _textLabel) => throw new Exceptions.OutdatedSdkException("TextLabel_GetFontSize", "TextLabel_GetFontSize SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate uint TextLabel_GetIDDelegate(nint _textLabel); private static uint TextLabel_GetIDFallback(nint _textLabel) => throw new Exceptions.OutdatedSdkException("TextLabel_GetID", "TextLabel_GetID SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void TextLabel_GetOutlineColorDelegate(nint _textLabel, Rgba* _color); + private static void TextLabel_GetOutlineColorFallback(nint _textLabel, Rgba* _color) => throw new Exceptions.OutdatedSdkException("TextLabel_GetOutlineColor", "TextLabel_GetOutlineColor SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate float TextLabel_GetOutlineWidthDelegate(nint _textLabel); + private static float TextLabel_GetOutlineWidthFallback(nint _textLabel) => throw new Exceptions.OutdatedSdkException("TextLabel_GetOutlineWidth", "TextLabel_GetOutlineWidth SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void TextLabel_GetRotationDelegate(nint _textLabel, Rotation* _rot); private static void TextLabel_GetRotationFallback(nint _textLabel, Rotation* _rot) => throw new Exceptions.OutdatedSdkException("TextLabel_GetRotation", "TextLabel_GetRotation SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate float TextLabel_GetScaleDelegate(nint _textLabel); @@ -1541,6 +1575,8 @@ public unsafe class SharedLibrary : ISharedLibrary private static uint TextLabel_GetStreamingDistanceFallback(nint _textLabel) => throw new Exceptions.OutdatedSdkException("TextLabel_GetStreamingDistance", "TextLabel_GetStreamingDistance SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate nint TextLabel_GetTargetDelegate(nint _textLabel); private static nint TextLabel_GetTargetFallback(nint _textLabel) => throw new Exceptions.OutdatedSdkException("TextLabel_GetTarget", "TextLabel_GetTarget SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate nint TextLabel_GetTextDelegate(nint _textLabel, int* _size); + private static nint TextLabel_GetTextFallback(nint _textLabel, int* _size) => throw new Exceptions.OutdatedSdkException("TextLabel_GetText", "TextLabel_GetText SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate nint TextLabel_GetWorldObjectDelegate(nint _textLabel); private static nint TextLabel_GetWorldObjectFallback(nint _textLabel) => throw new Exceptions.OutdatedSdkException("TextLabel_GetWorldObject", "TextLabel_GetWorldObject SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate byte TextLabel_IsFacingCameraDelegate(nint _textLabel); @@ -1549,14 +1585,26 @@ public unsafe class SharedLibrary : ISharedLibrary private static byte TextLabel_IsGlobalFallback(nint _textLabel) => throw new Exceptions.OutdatedSdkException("TextLabel_IsGlobal", "TextLabel_IsGlobal SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate byte TextLabel_IsVisibleDelegate(nint _textLabel); private static byte TextLabel_IsVisibleFallback(nint _textLabel) => throw new Exceptions.OutdatedSdkException("TextLabel_IsVisible", "TextLabel_IsVisible SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void TextLabel_SetAlignDelegate(nint _textLabel, byte _align); + private static void TextLabel_SetAlignFallback(nint _textLabel, byte _align) => throw new Exceptions.OutdatedSdkException("TextLabel_SetAlign", "TextLabel_SetAlign SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void TextLabel_SetColorDelegate(nint _textLabel, Rgba _color); private static void TextLabel_SetColorFallback(nint _textLabel, Rgba _color) => throw new Exceptions.OutdatedSdkException("TextLabel_SetColor", "TextLabel_SetColor SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void TextLabel_SetFaceCameraDelegate(nint _textLabel, byte _faceCamera); private static void TextLabel_SetFaceCameraFallback(nint _textLabel, byte _faceCamera) => throw new Exceptions.OutdatedSdkException("TextLabel_SetFaceCamera", "TextLabel_SetFaceCamera SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void TextLabel_SetFontDelegate(nint _textLabel, nint _font); + private static void TextLabel_SetFontFallback(nint _textLabel, nint _font) => throw new Exceptions.OutdatedSdkException("TextLabel_SetFont", "TextLabel_SetFont SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void TextLabel_SetFontSizeDelegate(nint _textLabel, float _size); + private static void TextLabel_SetFontSizeFallback(nint _textLabel, float _size) => throw new Exceptions.OutdatedSdkException("TextLabel_SetFontSize", "TextLabel_SetFontSize SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void TextLabel_SetOutlineColorDelegate(nint _textLabel, Rgba _color); + private static void TextLabel_SetOutlineColorFallback(nint _textLabel, Rgba _color) => throw new Exceptions.OutdatedSdkException("TextLabel_SetOutlineColor", "TextLabel_SetOutlineColor SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void TextLabel_SetOutlineWidthDelegate(nint _textLabel, float _width); + private static void TextLabel_SetOutlineWidthFallback(nint _textLabel, float _width) => throw new Exceptions.OutdatedSdkException("TextLabel_SetOutlineWidth", "TextLabel_SetOutlineWidth SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void TextLabel_SetRotationDelegate(nint _textLabel, Rotation _rot); private static void TextLabel_SetRotationFallback(nint _textLabel, Rotation _rot) => throw new Exceptions.OutdatedSdkException("TextLabel_SetRotation", "TextLabel_SetRotation SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void TextLabel_SetScaleDelegate(nint _textLabel, float _scale); private static void TextLabel_SetScaleFallback(nint _textLabel, float _scale) => throw new Exceptions.OutdatedSdkException("TextLabel_SetScale", "TextLabel_SetScale SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void TextLabel_SetTextDelegate(nint _textLabel, nint _text); + private static void TextLabel_SetTextFallback(nint _textLabel, nint _text) => throw new Exceptions.OutdatedSdkException("TextLabel_SetText", "TextLabel_SetText SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void TextLabel_SetVisibleDelegate(nint _textLabel, byte _visible); private static void TextLabel_SetVisibleFallback(nint _textLabel, byte _visible) => throw new Exceptions.OutdatedSdkException("TextLabel_SetVisible", "TextLabel_SetVisible SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate nint Vehicle_GetEntityDelegate(nint _vehicle); @@ -1616,7 +1664,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public SharedLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 12441135083740807336UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 13175119521654926275UL) Outdated = true; Audio_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 4464042055475980737UL, Audio_GetIDFallback); AudioAttachedOutput_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 17725794901805112189UL, AudioAttachedOutput_GetIDFallback); AudioFilter_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8824535635529306325UL, AudioFilter_GetIDFallback); @@ -1976,20 +2024,32 @@ public SharedLibrary(Dictionary funcTable) Resource_SetExport = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 15249221947393767886UL, Resource_SetExportFallback); Resource_SetExports = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 14077927656531124451UL, Resource_SetExportsFallback); RmlDocument_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 4296832302534320657UL, RmlDocument_GetIDFallback); + TextLabel_GetAlign = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 14816944269489448776UL, TextLabel_GetAlignFallback); TextLabel_GetColor = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 71661853310303691UL, TextLabel_GetColorFallback); + TextLabel_GetFont = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 11844719002405795477UL, TextLabel_GetFontFallback); + TextLabel_GetFontSize = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 17712816802687836464UL, TextLabel_GetFontSizeFallback); TextLabel_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 17469426826709697373UL, TextLabel_GetIDFallback); + TextLabel_GetOutlineColor = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 9286889361477653687UL, TextLabel_GetOutlineColorFallback); + TextLabel_GetOutlineWidth = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 15484599558868477690UL, TextLabel_GetOutlineWidthFallback); TextLabel_GetRotation = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 7785535667614932812UL, TextLabel_GetRotationFallback); TextLabel_GetScale = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 13329021670959257864UL, TextLabel_GetScaleFallback); TextLabel_GetStreamingDistance = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 9892232591592550017UL, TextLabel_GetStreamingDistanceFallback); TextLabel_GetTarget = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 6781195795327060290UL, TextLabel_GetTargetFallback); + TextLabel_GetText = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 10288308720161428715UL, TextLabel_GetTextFallback); TextLabel_GetWorldObject = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8297185820527489834UL, TextLabel_GetWorldObjectFallback); TextLabel_IsFacingCamera = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 2012454944172259572UL, TextLabel_IsFacingCameraFallback); TextLabel_IsGlobal = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 17978851917355436422UL, TextLabel_IsGlobalFallback); TextLabel_IsVisible = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 15384695376179962647UL, TextLabel_IsVisibleFallback); + TextLabel_SetAlign = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 4330021893145796095UL, TextLabel_SetAlignFallback); TextLabel_SetColor = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 1694191866473087021UL, TextLabel_SetColorFallback); TextLabel_SetFaceCamera = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 15820914931030469094UL, TextLabel_SetFaceCameraFallback); + TextLabel_SetFont = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 12238568229862830842UL, TextLabel_SetFontFallback); + TextLabel_SetFontSize = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 270826682210756999UL, TextLabel_SetFontSizeFallback); + TextLabel_SetOutlineColor = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 17823771742456553825UL, TextLabel_SetOutlineColorFallback); + TextLabel_SetOutlineWidth = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 12181452542389409441UL, TextLabel_SetOutlineWidthFallback); TextLabel_SetRotation = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 6102843265505169340UL, TextLabel_SetRotationFallback); TextLabel_SetScale = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 3918260719528326415UL, TextLabel_SetScaleFallback); + TextLabel_SetText = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 18001120162521415724UL, TextLabel_SetTextFallback); TextLabel_SetVisible = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 2302278843105157392UL, TextLabel_SetVisibleFallback); Vehicle_GetEntity = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8318093389193375258UL, Vehicle_GetEntityFallback); Vehicle_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 15007201997776333277UL, Vehicle_GetIDFallback); diff --git a/api/AltV.Net.Client/Elements/Data/TextLabelAlignment.cs b/api/AltV.Net.Client/Elements/Data/TextLabelAlignment.cs new file mode 100644 index 000000000..ec7852b90 --- /dev/null +++ b/api/AltV.Net.Client/Elements/Data/TextLabelAlignment.cs @@ -0,0 +1,9 @@ +namespace AltV.Net.Client.Elements.Data; + +public enum TextLabelAlignment : byte +{ + AlignLeft, + AlignRight, + AlignCenter, + AlignJustify +} \ No newline at end of file diff --git a/api/AltV.Net.Client/Elements/Entities/TextLabel.cs b/api/AltV.Net.Client/Elements/Entities/TextLabel.cs index 641149b46..c20371a3e 100644 --- a/api/AltV.Net.Client/Elements/Entities/TextLabel.cs +++ b/api/AltV.Net.Client/Elements/Entities/TextLabel.cs @@ -1,6 +1,9 @@ -using AltV.Net.Client.Elements.Interfaces; +using System.Runtime.InteropServices; +using AltV.Net.Client.Elements.Data; +using AltV.Net.Client.Elements.Interfaces; using AltV.Net.Data; using AltV.Net.Elements.Entities; +using AltV.Net.Shared.Utils; namespace AltV.Net.Client.Elements.Entities; @@ -71,6 +74,131 @@ public Rgba Color } } + public Rgba OutlineColor + { + get + { + unsafe + { + CheckIfEntityExists(); + var color = Rgba.Zero; + Core.Library.Shared.TextLabel_GetOutlineColor(TextLabelNativePointer, &color); + return color; + } + } + set + { + unsafe + { + CheckIfEntityExists(); + Core.Library.Shared.TextLabel_SetOutlineColor(TextLabelNativePointer, value); + } + } + } + + public float OutlineWidth + { + get + { + unsafe + { + return Core.Library.Shared.TextLabel_GetOutlineWidth(TextLabelNativePointer); + } + } + set + { + unsafe + { + Core.Library.Shared.TextLabel_SetOutlineWidth(TextLabelNativePointer, value); + } + } + } + + public float FontSize + { + get + { + unsafe + { + return Core.Library.Shared.TextLabel_GetFontSize(TextLabelNativePointer); + } + } + set + { + unsafe + { + Core.Library.Shared.TextLabel_SetFontSize(TextLabelNativePointer, value); + } + } + } + + public TextLabelAlignment Align + { + get + { + unsafe + { + return (TextLabelAlignment)Core.Library.Shared.TextLabel_GetAlign(TextLabelNativePointer); + } + } + set + { + unsafe + { + Core.Library.Shared.TextLabel_SetAlign(TextLabelNativePointer, (byte)value); + } + } + } + + + public string Text + { + get + { + unsafe + { + CheckIfEntityExistsOrCached(); + var size = 0; + return Core.PtrToStringUtf8AndFree( + Core.Library.Shared.TextLabel_GetText(TextLabelNativePointer, &size), size); + } + } + set + { + unsafe + { + CheckIfEntityExists(); + var valuePtr = MemoryUtils.StringToHGlobalUtf8(value); + Core.Library.Shared.TextLabel_SetText(TextLabelNativePointer, valuePtr); + Marshal.FreeHGlobal(valuePtr); + } + } + } + + public string Font + { + get + { + unsafe + { + CheckIfEntityExistsOrCached(); + var size = 0; + return Core.PtrToStringUtf8AndFree( + Core.Library.Shared.TextLabel_GetFont(TextLabelNativePointer, &size), size); + } + } + set + { + unsafe + { + CheckIfEntityExists(); + var valuePtr = MemoryUtils.StringToHGlobalUtf8(value); + Core.Library.Shared.TextLabel_SetFont(TextLabelNativePointer, valuePtr); + Marshal.FreeHGlobal(valuePtr); + } + } + } + public bool Visible { get @@ -86,7 +214,7 @@ public bool Visible unsafe { CheckIfEntityExists(); - Core.Library.Shared.TextLabel_SetVisible(TextLabelNativePointer, (byte) (value ? 1 : 0)); + Core.Library.Shared.TextLabel_SetVisible(TextLabelNativePointer, (byte)(value ? 1 : 0)); } } } @@ -170,7 +298,7 @@ public bool IsFacingCamera unsafe { CheckIfEntityExists(); - Core.Library.Shared.TextLabel_SetFaceCamera(TextLabelNativePointer, value ? (byte) 1 : (byte) 0); + Core.Library.Shared.TextLabel_SetFaceCamera(TextLabelNativePointer, value ? (byte)1 : (byte)0); } } } diff --git a/api/AltV.Net.Client/Elements/Interfaces/ITextLabel.cs b/api/AltV.Net.Client/Elements/Interfaces/ITextLabel.cs index 57c3d3982..a12f548ae 100644 --- a/api/AltV.Net.Client/Elements/Interfaces/ITextLabel.cs +++ b/api/AltV.Net.Client/Elements/Interfaces/ITextLabel.cs @@ -1,4 +1,5 @@ -using AltV.Net.Data; +using AltV.Net.Client.Elements.Data; +using AltV.Net.Data; namespace AltV.Net.Client.Elements.Interfaces; @@ -10,6 +11,12 @@ public interface ITextLabel : IWorldObject bool IsGlobal { get; } IPlayer? Target { get; } Rgba Color { get; set; } + Rgba OutlineColor { get; set; } + float OutlineWidth { get; set; } + float FontSize { get; set; } + TextLabelAlignment Align { get; set; } + string Text { get; set; } + string Font { get; set; } bool Visible { get; set; } float Scale { get; set; } Rotation Rotation { get; set; } diff --git a/runtime b/runtime index 2814bb785..a69fcd2bb 160000 --- a/runtime +++ b/runtime @@ -1 +1 @@ -Subproject commit 2814bb78541bfca2bd67a37a331c6cff016f0d11 +Subproject commit a69fcd2bbbe8f122eb6b05688bca0cc19aac53d7 From 79c8cba1b0434c16ca3231ad3a34b154ba345c5a Mon Sep 17 00:00:00 2001 From: doxoh Date: Fri, 24 Nov 2023 20:51:06 +0100 Subject: [PATCH 20/75] CI: fix target framework --- .github/workflows/dotnetcore.yml | 4 ++-- .github/workflows/release.yml | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/dotnetcore.yml b/.github/workflows/dotnetcore.yml index ab0ee5e28..f47e3091c 100644 --- a/.github/workflows/dotnetcore.yml +++ b/.github/workflows/dotnetcore.yml @@ -19,7 +19,7 @@ jobs: dotnet-version: 6.0.x - name: Build with dotnet working-directory: ./api - run: dotnet build --configuration Release + run: dotnet build --configuration Release --framework net6.0 build: runs-on: ubuntu-latest @@ -32,4 +32,4 @@ jobs: dotnet-version: 6.0.x - name: Build with dotnet working-directory: ./api - run: dotnet build --configuration Release + run: dotnet build --configuration Release --framework net6.0 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5d5912ee6..c8cbd648c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -106,9 +106,9 @@ jobs: dotnet publish AltV.Net.Client -c Release -f net6.0 dotnet publish AltV.Net.Client.Async -c Release -f net6.0 dotnet publish AltV.Net.ColShape -c Release -f net6.0 - dotnet publish AltV.Net.Sdk.Server -c Release - dotnet publish AltV.Net.Sdk.Client -c Release - dotnet publish AltV.Net.Sdk.Shared -c Release + dotnet publish AltV.Net.Sdk.Server -c Release -f net6.0 + dotnet publish AltV.Net.Sdk.Client -c Release -f net6.0 + dotnet publish AltV.Net.Sdk.Shared -c Release -f net6.0 - run: | mkdir -p ./modules/linux mkdir -p ./modules/windows From 6e1832e94db0df56b5ba60ca7b05c1a1d9530927 Mon Sep 17 00:00:00 2001 From: doxoh Date: Fri, 24 Nov 2023 20:54:59 +0100 Subject: [PATCH 21/75] CI: try next fix --- .github/workflows/dotnetcore.yml | 40 ++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dotnetcore.yml b/.github/workflows/dotnetcore.yml index f47e3091c..c938296de 100644 --- a/.github/workflows/dotnetcore.yml +++ b/.github/workflows/dotnetcore.yml @@ -19,7 +19,25 @@ jobs: dotnet-version: 6.0.x - name: Build with dotnet working-directory: ./api - run: dotnet build --configuration Release --framework net6.0 + run: | + dotnet build AltV.Net.Host -c Release -f net6.0 + dotnet build AltV.Net.Host -c Release -f net6.0 + dotnet build AltV.Net.Shared -c Release -f net6.0 + dotnet build AltV.Net.CApi -c Release -f net6.0 + dotnet build AltV.Net -c Release -f net6.0 + dotnet build AltV.Net -c Debug -f net6.0 + dotnet build AltV.Net.Async -c Release -f net6.0 + dotnet build AltV.Net.Async -c Debug -f net6.0 + dotnet build AltV.Net.Interactions -c Release -f net6.0 + dotnet build AltV.Net.Async.CodeGen -c Release -f netstandard2.0 + dotnet build AltV.Net.Resources.Chat.Api -c Release -f net6.0 + dotnet build AltV.Net.EntitySync.ServerEvent -c Release -f net6.0 + dotnet build AltV.Net.Client -c Release -f net6.0 + dotnet build AltV.Net.Client.Async -c Release -f net6.0 + dotnet build AltV.Net.ColShape -c Release -f net6.0 + dotnet build AltV.Net.Sdk.Server -c Release -f net6.0 + dotnet build AltV.Net.Sdk.Client -c Release -f net6.0 + dotnet build AltV.Net.Sdk.Shared -c Release -f net6.0 build: runs-on: ubuntu-latest @@ -32,4 +50,22 @@ jobs: dotnet-version: 6.0.x - name: Build with dotnet working-directory: ./api - run: dotnet build --configuration Release --framework net6.0 + run: | + dotnet build AltV.Net.Host -c Release -f net6.0 + dotnet build AltV.Net.Host -c Release -f net6.0 + dotnet build AltV.Net.Shared -c Release -f net6.0 + dotnet build AltV.Net.CApi -c Release -f net6.0 + dotnet build AltV.Net -c Release -f net6.0 + dotnet build AltV.Net -c Debug -f net6.0 + dotnet build AltV.Net.Async -c Release -f net6.0 + dotnet build AltV.Net.Async -c Debug -f net6.0 + dotnet build AltV.Net.Interactions -c Release -f net6.0 + dotnet build AltV.Net.Async.CodeGen -c Release -f netstandard2.0 + dotnet build AltV.Net.Resources.Chat.Api -c Release -f net6.0 + dotnet build AltV.Net.EntitySync.ServerEvent -c Release -f net6.0 + dotnet build AltV.Net.Client -c Release -f net6.0 + dotnet build AltV.Net.Client.Async -c Release -f net6.0 + dotnet build AltV.Net.ColShape -c Release -f net6.0 + dotnet build AltV.Net.Sdk.Server -c Release -f net6.0 + dotnet build AltV.Net.Sdk.Client -c Release -f net6.0 + dotnet build AltV.Net.Sdk.Shared -c Release -f net6.0 From 68df3a3cecb0b98a3aee07dc304810dc7a76c82b Mon Sep 17 00:00:00 2001 From: doxoh Date: Sat, 25 Nov 2023 21:59:00 +0100 Subject: [PATCH 22/75] CI: fix build --- api/AltV.Net.Sdk.Client/AltV.Net.Sdk.Client.csproj | 1 - api/AltV.Net.Sdk.Server/AltV.Net.Sdk.Server.csproj | 1 - api/AltV.Net.Sdk.Shared/AltV.Net.Sdk.Shared.csproj | 1 - api/Directory.Build.props | 5 +++++ 4 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 api/Directory.Build.props diff --git a/api/AltV.Net.Sdk.Client/AltV.Net.Sdk.Client.csproj b/api/AltV.Net.Sdk.Client/AltV.Net.Sdk.Client.csproj index 14baede2f..10ae89626 100644 --- a/api/AltV.Net.Sdk.Client/AltV.Net.Sdk.Client.csproj +++ b/api/AltV.Net.Sdk.Client/AltV.Net.Sdk.Client.csproj @@ -14,7 +14,6 @@ icon.png true snupkg - $(BaseArtifactsPath)$(MSBuildProjectName)\ true MSBuildSdk diff --git a/api/AltV.Net.Sdk.Server/AltV.Net.Sdk.Server.csproj b/api/AltV.Net.Sdk.Server/AltV.Net.Sdk.Server.csproj index 127d72064..14de90e94 100644 --- a/api/AltV.Net.Sdk.Server/AltV.Net.Sdk.Server.csproj +++ b/api/AltV.Net.Sdk.Server/AltV.Net.Sdk.Server.csproj @@ -14,7 +14,6 @@ icon.png true snupkg - $(BaseArtifactsPath)$(MSBuildProjectName)\ true MSBuildSdk diff --git a/api/AltV.Net.Sdk.Shared/AltV.Net.Sdk.Shared.csproj b/api/AltV.Net.Sdk.Shared/AltV.Net.Sdk.Shared.csproj index 13b39e1d8..67fe48ff6 100644 --- a/api/AltV.Net.Sdk.Shared/AltV.Net.Sdk.Shared.csproj +++ b/api/AltV.Net.Sdk.Shared/AltV.Net.Sdk.Shared.csproj @@ -14,7 +14,6 @@ icon.png true snupkg - $(BaseArtifactsPath)$(MSBuildProjectName)\ true MSBuildSdk diff --git a/api/Directory.Build.props b/api/Directory.Build.props new file mode 100644 index 000000000..bc210072a --- /dev/null +++ b/api/Directory.Build.props @@ -0,0 +1,5 @@ + + + $(BaseArtifactsPath)$(MSBuildProjectName)\ + + \ No newline at end of file From 40c1dd366941cb5ac29d416f61294f6e6c243689 Mon Sep 17 00:00:00 2001 From: doxoh Date: Sat, 25 Nov 2023 22:17:20 +0100 Subject: [PATCH 23/75] CI: fix build --- api/AltV.Net.Sdk.Generator/Program.cs | 4 ++-- api/Directory.Build.props | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/AltV.Net.Sdk.Generator/Program.cs b/api/AltV.Net.Sdk.Generator/Program.cs index 32f819c57..84bb663e4 100644 --- a/api/AltV.Net.Sdk.Generator/Program.cs +++ b/api/AltV.Net.Sdk.Generator/Program.cs @@ -10,9 +10,9 @@ foreach (var file in files) { Console.WriteLine("Generating code for " + file); - + var content = File.ReadAllText(file); - + var newContent = generatorRegex.Replace(content, (match) => { var indent = match.Groups["indent"]; diff --git a/api/Directory.Build.props b/api/Directory.Build.props index bc210072a..41af8f3b9 100644 --- a/api/Directory.Build.props +++ b/api/Directory.Build.props @@ -1,5 +1,5 @@ - $(BaseArtifactsPath)$(MSBuildProjectName)\ + $(BaseArtifactsPath) \ No newline at end of file From 98469e67873485a95a8f55c5356a443fbb39abe9 Mon Sep 17 00:00:00 2001 From: doxoh Date: Fri, 24 Nov 2023 20:51:06 +0100 Subject: [PATCH 24/75] CI: fix target framework --- .github/workflows/dotnetcore.yml | 4 ++-- .github/workflows/release.yml | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/workflows/dotnetcore.yml b/.github/workflows/dotnetcore.yml index ab0ee5e28..f47e3091c 100644 --- a/.github/workflows/dotnetcore.yml +++ b/.github/workflows/dotnetcore.yml @@ -19,7 +19,7 @@ jobs: dotnet-version: 6.0.x - name: Build with dotnet working-directory: ./api - run: dotnet build --configuration Release + run: dotnet build --configuration Release --framework net6.0 build: runs-on: ubuntu-latest @@ -32,4 +32,4 @@ jobs: dotnet-version: 6.0.x - name: Build with dotnet working-directory: ./api - run: dotnet build --configuration Release + run: dotnet build --configuration Release --framework net6.0 diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 5d5912ee6..c8cbd648c 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -106,9 +106,9 @@ jobs: dotnet publish AltV.Net.Client -c Release -f net6.0 dotnet publish AltV.Net.Client.Async -c Release -f net6.0 dotnet publish AltV.Net.ColShape -c Release -f net6.0 - dotnet publish AltV.Net.Sdk.Server -c Release - dotnet publish AltV.Net.Sdk.Client -c Release - dotnet publish AltV.Net.Sdk.Shared -c Release + dotnet publish AltV.Net.Sdk.Server -c Release -f net6.0 + dotnet publish AltV.Net.Sdk.Client -c Release -f net6.0 + dotnet publish AltV.Net.Sdk.Shared -c Release -f net6.0 - run: | mkdir -p ./modules/linux mkdir -p ./modules/windows From a9c26ddf2ec002a00ed06143d91138a4a94fada5 Mon Sep 17 00:00:00 2001 From: doxoh Date: Fri, 24 Nov 2023 20:54:59 +0100 Subject: [PATCH 25/75] CI: try next fix --- .github/workflows/dotnetcore.yml | 40 ++++++++++++++++++++++++++++++-- 1 file changed, 38 insertions(+), 2 deletions(-) diff --git a/.github/workflows/dotnetcore.yml b/.github/workflows/dotnetcore.yml index f47e3091c..c938296de 100644 --- a/.github/workflows/dotnetcore.yml +++ b/.github/workflows/dotnetcore.yml @@ -19,7 +19,25 @@ jobs: dotnet-version: 6.0.x - name: Build with dotnet working-directory: ./api - run: dotnet build --configuration Release --framework net6.0 + run: | + dotnet build AltV.Net.Host -c Release -f net6.0 + dotnet build AltV.Net.Host -c Release -f net6.0 + dotnet build AltV.Net.Shared -c Release -f net6.0 + dotnet build AltV.Net.CApi -c Release -f net6.0 + dotnet build AltV.Net -c Release -f net6.0 + dotnet build AltV.Net -c Debug -f net6.0 + dotnet build AltV.Net.Async -c Release -f net6.0 + dotnet build AltV.Net.Async -c Debug -f net6.0 + dotnet build AltV.Net.Interactions -c Release -f net6.0 + dotnet build AltV.Net.Async.CodeGen -c Release -f netstandard2.0 + dotnet build AltV.Net.Resources.Chat.Api -c Release -f net6.0 + dotnet build AltV.Net.EntitySync.ServerEvent -c Release -f net6.0 + dotnet build AltV.Net.Client -c Release -f net6.0 + dotnet build AltV.Net.Client.Async -c Release -f net6.0 + dotnet build AltV.Net.ColShape -c Release -f net6.0 + dotnet build AltV.Net.Sdk.Server -c Release -f net6.0 + dotnet build AltV.Net.Sdk.Client -c Release -f net6.0 + dotnet build AltV.Net.Sdk.Shared -c Release -f net6.0 build: runs-on: ubuntu-latest @@ -32,4 +50,22 @@ jobs: dotnet-version: 6.0.x - name: Build with dotnet working-directory: ./api - run: dotnet build --configuration Release --framework net6.0 + run: | + dotnet build AltV.Net.Host -c Release -f net6.0 + dotnet build AltV.Net.Host -c Release -f net6.0 + dotnet build AltV.Net.Shared -c Release -f net6.0 + dotnet build AltV.Net.CApi -c Release -f net6.0 + dotnet build AltV.Net -c Release -f net6.0 + dotnet build AltV.Net -c Debug -f net6.0 + dotnet build AltV.Net.Async -c Release -f net6.0 + dotnet build AltV.Net.Async -c Debug -f net6.0 + dotnet build AltV.Net.Interactions -c Release -f net6.0 + dotnet build AltV.Net.Async.CodeGen -c Release -f netstandard2.0 + dotnet build AltV.Net.Resources.Chat.Api -c Release -f net6.0 + dotnet build AltV.Net.EntitySync.ServerEvent -c Release -f net6.0 + dotnet build AltV.Net.Client -c Release -f net6.0 + dotnet build AltV.Net.Client.Async -c Release -f net6.0 + dotnet build AltV.Net.ColShape -c Release -f net6.0 + dotnet build AltV.Net.Sdk.Server -c Release -f net6.0 + dotnet build AltV.Net.Sdk.Client -c Release -f net6.0 + dotnet build AltV.Net.Sdk.Shared -c Release -f net6.0 From cf5f5a0961dedbc7d10e3083c61f04f986186a34 Mon Sep 17 00:00:00 2001 From: doxoh Date: Sat, 25 Nov 2023 21:59:00 +0100 Subject: [PATCH 26/75] CI: fix build --- api/AltV.Net.Sdk.Client/AltV.Net.Sdk.Client.csproj | 1 - api/AltV.Net.Sdk.Server/AltV.Net.Sdk.Server.csproj | 1 - api/AltV.Net.Sdk.Shared/AltV.Net.Sdk.Shared.csproj | 1 - api/Directory.Build.props | 5 +++++ 4 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 api/Directory.Build.props diff --git a/api/AltV.Net.Sdk.Client/AltV.Net.Sdk.Client.csproj b/api/AltV.Net.Sdk.Client/AltV.Net.Sdk.Client.csproj index 14baede2f..10ae89626 100644 --- a/api/AltV.Net.Sdk.Client/AltV.Net.Sdk.Client.csproj +++ b/api/AltV.Net.Sdk.Client/AltV.Net.Sdk.Client.csproj @@ -14,7 +14,6 @@ icon.png true snupkg - $(BaseArtifactsPath)$(MSBuildProjectName)\ true MSBuildSdk diff --git a/api/AltV.Net.Sdk.Server/AltV.Net.Sdk.Server.csproj b/api/AltV.Net.Sdk.Server/AltV.Net.Sdk.Server.csproj index 127d72064..14de90e94 100644 --- a/api/AltV.Net.Sdk.Server/AltV.Net.Sdk.Server.csproj +++ b/api/AltV.Net.Sdk.Server/AltV.Net.Sdk.Server.csproj @@ -14,7 +14,6 @@ icon.png true snupkg - $(BaseArtifactsPath)$(MSBuildProjectName)\ true MSBuildSdk diff --git a/api/AltV.Net.Sdk.Shared/AltV.Net.Sdk.Shared.csproj b/api/AltV.Net.Sdk.Shared/AltV.Net.Sdk.Shared.csproj index 13b39e1d8..67fe48ff6 100644 --- a/api/AltV.Net.Sdk.Shared/AltV.Net.Sdk.Shared.csproj +++ b/api/AltV.Net.Sdk.Shared/AltV.Net.Sdk.Shared.csproj @@ -14,7 +14,6 @@ icon.png true snupkg - $(BaseArtifactsPath)$(MSBuildProjectName)\ true MSBuildSdk diff --git a/api/Directory.Build.props b/api/Directory.Build.props new file mode 100644 index 000000000..bc210072a --- /dev/null +++ b/api/Directory.Build.props @@ -0,0 +1,5 @@ + + + $(BaseArtifactsPath)$(MSBuildProjectName)\ + + \ No newline at end of file From 3ec4ba9742d289128f16a65108f6a261152d9a21 Mon Sep 17 00:00:00 2001 From: doxoh Date: Sat, 25 Nov 2023 22:17:20 +0100 Subject: [PATCH 27/75] CI: fix build --- api/AltV.Net.Sdk.Generator/Program.cs | 4 ++-- api/Directory.Build.props | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/api/AltV.Net.Sdk.Generator/Program.cs b/api/AltV.Net.Sdk.Generator/Program.cs index 32f819c57..84bb663e4 100644 --- a/api/AltV.Net.Sdk.Generator/Program.cs +++ b/api/AltV.Net.Sdk.Generator/Program.cs @@ -10,9 +10,9 @@ foreach (var file in files) { Console.WriteLine("Generating code for " + file); - + var content = File.ReadAllText(file); - + var newContent = generatorRegex.Replace(content, (match) => { var indent = match.Groups["indent"]; diff --git a/api/Directory.Build.props b/api/Directory.Build.props index bc210072a..41af8f3b9 100644 --- a/api/Directory.Build.props +++ b/api/Directory.Build.props @@ -1,5 +1,5 @@ - $(BaseArtifactsPath)$(MSBuildProjectName)\ + $(BaseArtifactsPath) \ No newline at end of file From 1563a82438b81ed4cbae426186403af8ead7e623 Mon Sep 17 00:00:00 2001 From: Fabian Terhorst Date: Fri, 17 Nov 2023 20:47:49 +0100 Subject: [PATCH 28/75] Merge pull request #826 from duydang2311/fix/incorrect-emit-rpc-answer-id Fix `AsyncPlayer.EmitRPC` always returns 0 --- api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs b/api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs index d338a44de..9d4a68d75 100644 --- a/api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs +++ b/api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs @@ -693,7 +693,7 @@ public ushort EmitRPC(string name, params object[] args) { if (Player.Exists) { - Alt.Core.TriggerClientRPC(Player, eventNamePtr, mValues); + result = Alt.Core.TriggerClientRPC(Player, eventNamePtr, mValues); } } From 6d58dded9de556196ff6ee4612b5c284b52e88fa Mon Sep 17 00:00:00 2001 From: Fabian Terhorst Date: Fri, 17 Nov 2023 20:48:43 +0100 Subject: [PATCH 29/75] Merge pull request #827 from BluePeer/patch-3 Update netowner-change.md --- docs/articles/events/player-events/netowner-change.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/articles/events/player-events/netowner-change.md b/docs/articles/events/player-events/netowner-change.md index 69a5d4037..dba4732de 100644 --- a/docs/articles/events/player-events/netowner-change.md +++ b/docs/articles/events/player-events/netowner-change.md @@ -27,7 +27,7 @@ Alt.OnNetOwnerChange += (entity, oldNetOwner, newNetOwner) => { ```csharp public class MyScript : IScript { - [ScriptEvent(ScriptEventType.StartProjectile)] + [ScriptEvent(ScriptEventType.NetOwnerChange)] public void OnNetOwnerChange(IEntity entity, IPlayer oldNetOwner, IPlayer newNetOwner) { // ... From 0f244652312e8bf787e7bb9c74fe27e967ff27e2 Mon Sep 17 00:00:00 2001 From: Fabian Terhorst Date: Fri, 17 Nov 2023 20:49:14 +0100 Subject: [PATCH 30/75] Merge pull request #822 from Kaiwoknats/patch-1 Update async-entity-factories.md --- docs/articles/getting-started/async-entity-factories.md | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/docs/articles/getting-started/async-entity-factories.md b/docs/articles/getting-started/async-entity-factories.md index 2835c7c33..4a954a756 100644 --- a/docs/articles/getting-started/async-entity-factories.md +++ b/docs/articles/getting-started/async-entity-factories.md @@ -14,7 +14,7 @@ public class MyAsyncPlayer : AsyncPlayer { public bool LoggedIn { get; set; } - public MyAsyncPlayer(ICore core, IntPtr nativePointer, ushort id) : base(core, nativePointer, id) + public MyAsyncPlayer(ICore core, IntPtr nativePointer, uint id) : base(core, nativePointer, id) { LoggedIn = false; } @@ -27,12 +27,12 @@ Thats why you need to create a factory that will create the player for you when ## Step 2, Create the factory In the factory the defined default constructor of the player or vehicle class will be called. -You only need to override the ```IPlayer Create(IntPtr playerPointer, ushort id)``` method and initialize your own class instead of the default one. +You only need to override the ```IPlayer Create(IntPtr playerPointer, uint id)``` method and initialize your own class instead of the default one. ```csharp public class MyAsyncPlayerFactory : IEntityFactory { - public IPlayer Create(ICore core, IntPtr playerPointer, ushort id) + public IPlayer Create(ICore core, IntPtr playerPointer, uint id) { return new MyAsyncPlayer(core, playerPointer, id); } @@ -63,7 +63,7 @@ public class MyAsyncVehicle : AsyncVehicle public int MyData { get; set; } // This constructor is used for creation via entity factory - public MyAsyncVehicle(ICore core, IntPtr nativePointer, ushort id) : base(core, nativePointer, id) + public MyAsyncVehicle(ICore core, IntPtr nativePointer, uint id) : base(core, nativePointer, id) { MyData = 6; } From 457b2f33a3e90b9580a1c96f6450bc782e1f1d92 Mon Sep 17 00:00:00 2001 From: Fabian Terhorst Date: Fri, 17 Nov 2023 20:49:23 +0100 Subject: [PATCH 31/75] Merge pull request #828 from BluePeer/patch-1 Update toc.yml --- docs/articles/toc.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/docs/articles/toc.yml b/docs/articles/toc.yml index 03b00a04f..cfbe825c5 100644 --- a/docs/articles/toc.yml +++ b/docs/articles/toc.yml @@ -83,8 +83,6 @@ href: events/player-events/player-change-vehicle-seat.md - name: PlayerDamage event href: events/player-events/player-damage.md - - name: PlayerBeforeConnect event - href: events/player-events/player-before-connect.md - name: NetOwnerChange event href: events/player-events/netowner-change.md - name: Fire event From 5fd0bf7097789300822dc0fd7f94e388f4b750a9 Mon Sep 17 00:00:00 2001 From: doxoh Date: Sun, 26 Nov 2023 22:42:17 +0100 Subject: [PATCH 32/75] feat: add channel parameter to AddVolumeEffect --- api/AltV.Net.CApi/Libraries/ClientLibrary.cs | 12 ++++++------ api/AltV.Net.CApi/Libraries/ServerLibrary.cs | 2 +- api/AltV.Net.CApi/Libraries/SharedLibrary.cs | 2 +- api/AltV.Net.Client/Elements/Entities/AudioFilter.cs | 4 ++-- .../Elements/Interfaces/IAudioFilter.cs | 2 +- .../ImplicitUsingsGenerator.cs | 3 +++ api/AltV.Net.Sdk.Generator/Program.cs | 5 ++++- runtime | 2 +- 8 files changed, 19 insertions(+), 13 deletions(-) diff --git a/api/AltV.Net.CApi/Libraries/ClientLibrary.cs b/api/AltV.Net.CApi/Libraries/ClientLibrary.cs index 7c3dd9961..b66e4c430 100644 --- a/api/AltV.Net.CApi/Libraries/ClientLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/ClientLibrary.cs @@ -72,7 +72,7 @@ public unsafe interface IClientLibrary public delegate* unmanaged[Cdecl] AudioFilter_AddPhaserEffect { get; } public delegate* unmanaged[Cdecl] AudioFilter_AddPitchshiftEffect { get; } public delegate* unmanaged[Cdecl] AudioFilter_AddRotateEffect { get; } - public delegate* unmanaged[Cdecl] AudioFilter_AddVolumeEffect { get; } + public delegate* unmanaged[Cdecl] AudioFilter_AddVolumeEffect { get; } public delegate* unmanaged[Cdecl] AudioFilter_GetAudCategory { get; } public delegate* unmanaged[Cdecl] AudioFilter_GetBaseObject { get; } public delegate* unmanaged[Cdecl] AudioFilter_GetHash { get; } @@ -949,7 +949,7 @@ public unsafe class ClientLibrary : IClientLibrary public delegate* unmanaged[Cdecl] AudioFilter_AddPhaserEffect { get; } public delegate* unmanaged[Cdecl] AudioFilter_AddPitchshiftEffect { get; } public delegate* unmanaged[Cdecl] AudioFilter_AddRotateEffect { get; } - public delegate* unmanaged[Cdecl] AudioFilter_AddVolumeEffect { get; } + public delegate* unmanaged[Cdecl] AudioFilter_AddVolumeEffect { get; } public delegate* unmanaged[Cdecl] AudioFilter_GetAudCategory { get; } public delegate* unmanaged[Cdecl] AudioFilter_GetBaseObject { get; } public delegate* unmanaged[Cdecl] AudioFilter_GetHash { get; } @@ -1883,8 +1883,8 @@ public unsafe class ClientLibrary : IClientLibrary private static uint AudioFilter_AddPitchshiftEffectFallback(nint _audioFilter, float _pitchShift, float _semitones, long _lFFTsize, long _lOsamp, int _priority) => throw new Exceptions.OutdatedSdkException("AudioFilter_AddPitchshiftEffect", "AudioFilter_AddPitchshiftEffect SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate uint AudioFilter_AddRotateEffectDelegate(nint _audioFilter, float _rate, int _priority); private static uint AudioFilter_AddRotateEffectFallback(nint _audioFilter, float _rate, int _priority) => throw new Exceptions.OutdatedSdkException("AudioFilter_AddRotateEffect", "AudioFilter_AddRotateEffect SDK method is outdated. Please update your module nuget"); - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate uint AudioFilter_AddVolumeEffectDelegate(nint _audioFilter, float _volume, int _priority); - private static uint AudioFilter_AddVolumeEffectFallback(nint _audioFilter, float _volume, int _priority) => throw new Exceptions.OutdatedSdkException("AudioFilter_AddVolumeEffect", "AudioFilter_AddVolumeEffect SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate uint AudioFilter_AddVolumeEffectDelegate(nint _audioFilter, float _volume, int _priority, int _channel); + private static uint AudioFilter_AddVolumeEffectFallback(nint _audioFilter, float _volume, int _priority, int _channel) => throw new Exceptions.OutdatedSdkException("AudioFilter_AddVolumeEffect", "AudioFilter_AddVolumeEffect SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate uint AudioFilter_GetAudCategoryDelegate(nint _audioFilter); private static uint AudioFilter_GetAudCategoryFallback(nint _audioFilter) => throw new Exceptions.OutdatedSdkException("AudioFilter_GetAudCategory", "AudioFilter_GetAudCategory SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate nint AudioFilter_GetBaseObjectDelegate(nint _audioFilter); @@ -3512,7 +3512,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public ClientLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 13175119521654926275UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 15809758987028017478UL) Outdated = true; Audio_AddOutput = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 9914412815391408844UL, Audio_AddOutputFallback); Audio_GetBaseObject = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 6330360502401226894UL, Audio_GetBaseObjectFallback); Audio_GetCurrentTime = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 2944324482134975819UL, Audio_GetCurrentTimeFallback); @@ -3575,7 +3575,7 @@ public ClientLibrary(Dictionary funcTable) AudioFilter_AddPhaserEffect = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 4076092769167870615UL, AudioFilter_AddPhaserEffectFallback); AudioFilter_AddPitchshiftEffect = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 13860375026413797308UL, AudioFilter_AddPitchshiftEffectFallback); AudioFilter_AddRotateEffect = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 3023765297763740660UL, AudioFilter_AddRotateEffectFallback); - AudioFilter_AddVolumeEffect = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 4712013335136464389UL, AudioFilter_AddVolumeEffectFallback); + AudioFilter_AddVolumeEffect = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 734963942086458615UL, AudioFilter_AddVolumeEffectFallback); AudioFilter_GetAudCategory = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 6059317348005410766UL, AudioFilter_GetAudCategoryFallback); AudioFilter_GetBaseObject = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8867334748367703826UL, AudioFilter_GetBaseObjectFallback); AudioFilter_GetHash = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 10116851781453819636UL, AudioFilter_GetHashFallback); diff --git a/api/AltV.Net.CApi/Libraries/ServerLibrary.cs b/api/AltV.Net.CApi/Libraries/ServerLibrary.cs index f667ccd05..aeb183ecb 100644 --- a/api/AltV.Net.CApi/Libraries/ServerLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/ServerLibrary.cs @@ -1896,7 +1896,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public ServerLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 13175119521654926275UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 15809758987028017478UL) Outdated = true; BaseObject_DeleteSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8228424877092269355UL, BaseObject_DeleteSyncedMetaDataFallback); BaseObject_SetMultipleSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 1390762125822890831UL, BaseObject_SetMultipleSyncedMetaDataFallback); BaseObject_SetSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8002999088966424231UL, BaseObject_SetSyncedMetaDataFallback); diff --git a/api/AltV.Net.CApi/Libraries/SharedLibrary.cs b/api/AltV.Net.CApi/Libraries/SharedLibrary.cs index ff0d0c27e..1c36cd2cb 100644 --- a/api/AltV.Net.CApi/Libraries/SharedLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/SharedLibrary.cs @@ -1664,7 +1664,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public SharedLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 13175119521654926275UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 15809758987028017478UL) Outdated = true; Audio_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 4464042055475980737UL, Audio_GetIDFallback); AudioAttachedOutput_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 17725794901805112189UL, AudioAttachedOutput_GetIDFallback); AudioFilter_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8824535635529306325UL, AudioFilter_GetIDFallback); diff --git a/api/AltV.Net.Client/Elements/Entities/AudioFilter.cs b/api/AltV.Net.Client/Elements/Entities/AudioFilter.cs index f9375322d..d206d8b78 100644 --- a/api/AltV.Net.Client/Elements/Entities/AudioFilter.cs +++ b/api/AltV.Net.Client/Elements/Entities/AudioFilter.cs @@ -62,12 +62,12 @@ public uint AddRotateEffect(float fRate, int priority) } } - public uint AddVolumeEffect(float fVolume, int priority) + public uint AddVolumeEffect(float fVolume, int priority, int channel = -1) { unsafe { CheckIfEntityExists(); - return Core.Library.Client.AudioFilter_AddVolumeEffect(AudioFilterNativePointer, fVolume, priority); + return Core.Library.Client.AudioFilter_AddVolumeEffect(AudioFilterNativePointer, fVolume, priority, channel); } } diff --git a/api/AltV.Net.Client/Elements/Interfaces/IAudioFilter.cs b/api/AltV.Net.Client/Elements/Interfaces/IAudioFilter.cs index 358cda146..66e5b7832 100644 --- a/api/AltV.Net.Client/Elements/Interfaces/IAudioFilter.cs +++ b/api/AltV.Net.Client/Elements/Interfaces/IAudioFilter.cs @@ -7,7 +7,7 @@ public interface IAudioFilter : IBaseObject uint AudCategory { get; set; } uint AddRotateEffect(float fRate, int priority); - uint AddVolumeEffect(float fVolume, int priority); + uint AddVolumeEffect(float fVolume, int priority, int channel = -1); uint AddPeakeqEffect(int lBand, float fBandwidth, float fQ, float fCenter, float fGain, int priority); uint AddDampEffect(float fTarget, float fQuiet, float fRate, float fGain, float fDelay, int priority); uint AddAutowahEffect(float fDryMix, float fWetMix, float fFeedback, float fRate, float fRange, float fFreq, int priority); diff --git a/api/AltV.Net.Sdk.Generator/ImplicitUsingsGenerator.cs b/api/AltV.Net.Sdk.Generator/ImplicitUsingsGenerator.cs index b2af87441..44c8f2b4d 100644 --- a/api/AltV.Net.Sdk.Generator/ImplicitUsingsGenerator.cs +++ b/api/AltV.Net.Sdk.Generator/ImplicitUsingsGenerator.cs @@ -1,3 +1,6 @@ +using System.Collections.Generic; +using System.IO; +using System.Linq; using System.Text.RegularExpressions; namespace AltV.Net.Sdk.Generator diff --git a/api/AltV.Net.Sdk.Generator/Program.cs b/api/AltV.Net.Sdk.Generator/Program.cs index 84bb663e4..52134ff7d 100644 --- a/api/AltV.Net.Sdk.Generator/Program.cs +++ b/api/AltV.Net.Sdk.Generator/Program.cs @@ -1,4 +1,7 @@ -using System.Reflection; +using System; +using System.IO; +using System.Linq; +using System.Reflection; using System.Text.RegularExpressions; using AltV.Net.Sdk.Generator; diff --git a/runtime b/runtime index a69fcd2bb..81233eefb 160000 --- a/runtime +++ b/runtime @@ -1 +1 @@ -Subproject commit a69fcd2bbbe8f122eb6b05688bca0cc19aac53d7 +Subproject commit 81233eefb0145f5556fde504f85c886387fdcc85 From c2a4cf969d717b31a7c3d67be93f4a68df929a1d Mon Sep 17 00:00:00 2001 From: doxoh Date: Wed, 29 Nov 2023 19:36:00 +0100 Subject: [PATCH 33/75] feat(client): add pool functions --- api/AltV.Net.CApi/Libraries/ClientLibrary.cs | 19 +++++++- api/AltV.Net.CApi/Libraries/ServerLibrary.cs | 4 +- api/AltV.Net.CApi/Libraries/SharedLibrary.cs | 4 +- api/AltV.Net.Client/Alt.Globals.cs | 4 ++ api/AltV.Net.Client/Core.Globals.cs | 46 ++++++++++++++++++++ api/AltV.Net.Client/ICore.cs | 4 ++ runtime | 2 +- 7 files changed, 76 insertions(+), 7 deletions(-) diff --git a/api/AltV.Net.CApi/Libraries/ClientLibrary.cs b/api/AltV.Net.CApi/Libraries/ClientLibrary.cs index b66e4c430..71b07e0ce 100644 --- a/api/AltV.Net.CApi/Libraries/ClientLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/ClientLibrary.cs @@ -160,6 +160,9 @@ public unsafe interface IClientLibrary public delegate* unmanaged[Cdecl] Core_GetPedBonePos { get; } public delegate* unmanaged[Cdecl] Core_GetPermissionState { get; } public delegate* unmanaged[Cdecl] Core_GetPing { get; } + public delegate* unmanaged[Cdecl] Core_GetPoolCount { get; } + public delegate* unmanaged[Cdecl] Core_GetPoolEntities { get; } + public delegate* unmanaged[Cdecl] Core_GetPoolSize { get; } public delegate* unmanaged[Cdecl] Core_GetScreenResolution { get; } public delegate* unmanaged[Cdecl] Core_GetServerIp { get; } public delegate* unmanaged[Cdecl] Core_GetServerPort { get; } @@ -886,7 +889,7 @@ public unsafe interface IClientLibrary public unsafe class ClientLibrary : IClientLibrary { - public readonly uint Methods = 1752; + public readonly uint Methods = 1755; public delegate* unmanaged[Cdecl] Audio_AddOutput { get; } public delegate* unmanaged[Cdecl] Audio_GetBaseObject { get; } public delegate* unmanaged[Cdecl] Audio_GetCurrentTime { get; } @@ -1037,6 +1040,9 @@ public unsafe class ClientLibrary : IClientLibrary public delegate* unmanaged[Cdecl] Core_GetPedBonePos { get; } public delegate* unmanaged[Cdecl] Core_GetPermissionState { get; } public delegate* unmanaged[Cdecl] Core_GetPing { get; } + public delegate* unmanaged[Cdecl] Core_GetPoolCount { get; } + public delegate* unmanaged[Cdecl] Core_GetPoolEntities { get; } + public delegate* unmanaged[Cdecl] Core_GetPoolSize { get; } public delegate* unmanaged[Cdecl] Core_GetScreenResolution { get; } public delegate* unmanaged[Cdecl] Core_GetServerIp { get; } public delegate* unmanaged[Cdecl] Core_GetServerPort { get; } @@ -2059,6 +2065,12 @@ public unsafe class ClientLibrary : IClientLibrary private static byte Core_GetPermissionStateFallback(nint _core, byte _permission) => throw new Exceptions.OutdatedSdkException("Core_GetPermissionState", "Core_GetPermissionState SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate ushort Core_GetPingDelegate(nint _core); private static ushort Core_GetPingFallback(nint _core) => throw new Exceptions.OutdatedSdkException("Core_GetPing", "Core_GetPing SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate uint Core_GetPoolCountDelegate(nint _core, nint _pool); + private static uint Core_GetPoolCountFallback(nint _core, nint _pool) => throw new Exceptions.OutdatedSdkException("Core_GetPoolCount", "Core_GetPoolCount SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Core_GetPoolEntitiesDelegate(nint _core, nint _pool, nint* _poolEntities, uint* _size); + private static void Core_GetPoolEntitiesFallback(nint _core, nint _pool, nint* _poolEntities, uint* _size) => throw new Exceptions.OutdatedSdkException("Core_GetPoolEntities", "Core_GetPoolEntities SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate uint Core_GetPoolSizeDelegate(nint _core, nint _pool); + private static uint Core_GetPoolSizeFallback(nint _core, nint _pool) => throw new Exceptions.OutdatedSdkException("Core_GetPoolSize", "Core_GetPoolSize SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Core_GetScreenResolutionDelegate(nint _core, Vector2* _out); private static void Core_GetScreenResolutionFallback(nint _core, Vector2* _out) => throw new Exceptions.OutdatedSdkException("Core_GetScreenResolution", "Core_GetScreenResolution SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate nint Core_GetServerIpDelegate(nint _core, int* _size); @@ -3512,7 +3524,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public ClientLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 15809758987028017478UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 554522947139118248UL) Outdated = true; Audio_AddOutput = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 9914412815391408844UL, Audio_AddOutputFallback); Audio_GetBaseObject = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 6330360502401226894UL, Audio_GetBaseObjectFallback); Audio_GetCurrentTime = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 2944324482134975819UL, Audio_GetCurrentTimeFallback); @@ -3663,6 +3675,9 @@ public ClientLibrary(Dictionary funcTable) Core_GetPedBonePos = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 9678094278922411472UL, Core_GetPedBonePosFallback); Core_GetPermissionState = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 6070013237365852957UL, Core_GetPermissionStateFallback); Core_GetPing = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 17183361268059997356UL, Core_GetPingFallback); + Core_GetPoolCount = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 10058355141969516360UL, Core_GetPoolCountFallback); + Core_GetPoolEntities = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 5989408698388544472UL, Core_GetPoolEntitiesFallback); + Core_GetPoolSize = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 3048778071876483320UL, Core_GetPoolSizeFallback); Core_GetScreenResolution = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 16078537130538515891UL, Core_GetScreenResolutionFallback); Core_GetServerIp = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 1389091625205062844UL, Core_GetServerIpFallback); Core_GetServerPort = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 14148467334937601992UL, Core_GetServerPortFallback); diff --git a/api/AltV.Net.CApi/Libraries/ServerLibrary.cs b/api/AltV.Net.CApi/Libraries/ServerLibrary.cs index aeb183ecb..84ad8f657 100644 --- a/api/AltV.Net.CApi/Libraries/ServerLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/ServerLibrary.cs @@ -482,7 +482,7 @@ public unsafe interface IServerLibrary public unsafe class ServerLibrary : IServerLibrary { - public readonly uint Methods = 1752; + public readonly uint Methods = 1755; public delegate* unmanaged[Cdecl] BaseObject_DeleteSyncedMetaData { get; } public delegate* unmanaged[Cdecl] BaseObject_SetMultipleSyncedMetaData { get; } public delegate* unmanaged[Cdecl] BaseObject_SetSyncedMetaData { get; } @@ -1896,7 +1896,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public ServerLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 15809758987028017478UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 554522947139118248UL) Outdated = true; BaseObject_DeleteSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8228424877092269355UL, BaseObject_DeleteSyncedMetaDataFallback); BaseObject_SetMultipleSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 1390762125822890831UL, BaseObject_SetMultipleSyncedMetaDataFallback); BaseObject_SetSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8002999088966424231UL, BaseObject_SetSyncedMetaDataFallback); diff --git a/api/AltV.Net.CApi/Libraries/SharedLibrary.cs b/api/AltV.Net.CApi/Libraries/SharedLibrary.cs index 1c36cd2cb..5cc08ebd5 100644 --- a/api/AltV.Net.CApi/Libraries/SharedLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/SharedLibrary.cs @@ -424,7 +424,7 @@ public unsafe interface ISharedLibrary public unsafe class SharedLibrary : ISharedLibrary { - public readonly uint Methods = 1752; + public readonly uint Methods = 1755; public delegate* unmanaged[Cdecl] Audio_GetID { get; } public delegate* unmanaged[Cdecl] AudioAttachedOutput_GetID { get; } public delegate* unmanaged[Cdecl] AudioFilter_GetID { get; } @@ -1664,7 +1664,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public SharedLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 15809758987028017478UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 554522947139118248UL) Outdated = true; Audio_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 4464042055475980737UL, Audio_GetIDFallback); AudioAttachedOutput_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 17725794901805112189UL, AudioAttachedOutput_GetIDFallback); AudioFilter_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8824535635529306325UL, AudioFilter_GetIDFallback); diff --git a/api/AltV.Net.Client/Alt.Globals.cs b/api/AltV.Net.Client/Alt.Globals.cs index a4cf326b9..dd48c46be 100644 --- a/api/AltV.Net.Client/Alt.Globals.cs +++ b/api/AltV.Net.Client/Alt.Globals.cs @@ -76,6 +76,10 @@ public static partial class Alt public static Task TakeScreenshotGameOnly() => Core.TakeScreenshotGameOnly(); public static void RegisterFont(string path) => Core.RegisterFont(path); + public static uint GetPoolSize(string pool) => Core.GetPoolSize(pool); + public static uint GetPoolCount(string pool) => Core.GetPoolCount(pool); + public static uint[] GetPoolEntities(string pool) => Core.GetPoolEntities(pool); + public static MapZoomData GetMapZoomData(uint id) => Core.GetMapZoomData(id); public static MapZoomData GetMapZoomData(string alias) => Core.GetMapZoomData(alias); public static void ResetAllMapZoomData() => Core.ResetAllMapZoomData(); diff --git a/api/AltV.Net.Client/Core.Globals.cs b/api/AltV.Net.Client/Core.Globals.cs index b29180e46..7f175f151 100644 --- a/api/AltV.Net.Client/Core.Globals.cs +++ b/api/AltV.Net.Client/Core.Globals.cs @@ -539,6 +539,52 @@ public IFont RegisterFont(string path) } } + public uint GetPoolSize(string pool) + { + unsafe + { + var pathPtr = MemoryUtils.StringToHGlobalUtf8(pool); + var result = Library.Client.Core_GetPoolSize(NativePointer, pathPtr); + Marshal.FreeHGlobal(pathPtr); + return result; + } + } + + public uint GetPoolCount(string pool) + { + unsafe + { + var pathPtr = MemoryUtils.StringToHGlobalUtf8(pool); + var result = Library.Client.Core_GetPoolCount(NativePointer, pathPtr); + Marshal.FreeHGlobal(pathPtr); + return result; + } + } + + public uint[] GetPoolEntities(string pool) + { + unsafe + { + uint size = 0; + var entitiesPtr = IntPtr.Zero; + var pathPtr = MemoryUtils.StringToHGlobalUtf8(pool); + Library.Client.Core_GetPoolEntities(NativePointer, pathPtr, &entitiesPtr, &size); + + var uintArray = new UIntArray + { + data = entitiesPtr, + size = size, + capacity = size + }; + + var result = uintArray.ToArray(); + + Library.Shared.FreeUInt32Array(entitiesPtr); + Marshal.FreeHGlobal(pathPtr); + return result; + } + } + public int MsPerGameMinute { get diff --git a/api/AltV.Net.Client/ICore.cs b/api/AltV.Net.Client/ICore.cs index 27478da0d..1c430793a 100644 --- a/api/AltV.Net.Client/ICore.cs +++ b/api/AltV.Net.Client/ICore.cs @@ -212,5 +212,9 @@ ILocalObject CreateLocalObject(uint modelHash, Position position, Rotation rotat IntPtr CreateColShapeSpherePtr(out uint id, Vector3 position, float radius); IColShape CreateColShapeSphere(Vector3 position, float radius); IFont RegisterFont(string path); + + uint GetPoolSize(string pool); + uint GetPoolCount(string pool); + uint[] GetPoolEntities(string pool); } } \ No newline at end of file diff --git a/runtime b/runtime index 81233eefb..fa482da31 160000 --- a/runtime +++ b/runtime @@ -1 +1 @@ -Subproject commit 81233eefb0145f5556fde504f85c886387fdcc85 +Subproject commit fa482da31a3973d45f5267e7029c25be1f23a5f9 From efa4b172462ac987751535cfb67f26bb09b04236 Mon Sep 17 00:00:00 2001 From: Davide Rodo <34485699+PhantomDave@users.noreply.github.com> Date: Wed, 29 Nov 2023 19:42:25 +0100 Subject: [PATCH 34/75] Update vehicle-create.md (#817) Added an info message to explain a dependency on the AltV.Net.Resources.Chat.Api --- docs/articles/getting-started/vehicle-create.md | 1 + 1 file changed, 1 insertion(+) diff --git a/docs/articles/getting-started/vehicle-create.md b/docs/articles/getting-started/vehicle-create.md index 0a9f3a27b..3711442ed 100644 --- a/docs/articles/getting-started/vehicle-create.md +++ b/docs/articles/getting-started/vehicle-create.md @@ -1,5 +1,6 @@ # CreateVehicle This is a little example how to create Vehicles Serverside in C#. +**You need to add the reference to the NuGet Package __AltV.Net.Resources.Chat.Api__** # First Example This example will spawn a Adder near you after you died! From ff9a9a4e2a3fa9dd34e6ad6b4758e04e0cf0268b Mon Sep 17 00:00:00 2001 From: doxoh Date: Wed, 29 Nov 2023 20:00:34 +0100 Subject: [PATCH 35/75] fix(server): Async Answer crash in OnScriptRpc --- api/AltV.Net.Async/AsyncCore.cs | 2 +- api/AltV.Net.Async/AsyncScriptRpcEvent.cs | 52 +++++++++++++++++++ .../Elements/Entities/IScriptRPCEvent.cs | 1 - 3 files changed, 53 insertions(+), 2 deletions(-) create mode 100644 api/AltV.Net.Async/AsyncScriptRpcEvent.cs diff --git a/api/AltV.Net.Async/AsyncCore.cs b/api/AltV.Net.Async/AsyncCore.cs index 454a9c959..a05b54890 100644 --- a/api/AltV.Net.Async/AsyncCore.cs +++ b/api/AltV.Net.Async/AsyncCore.cs @@ -976,7 +976,7 @@ public override void OnScriptRPCEvent(IntPtr eventpointer, IPlayer target, strin Task.Run(async () => { var mValues = MValueConst.CreateFrom(this, args); - var clientScriptRPCEvent = new ScriptRpcEvent(this, eventpointer); + var clientScriptRPCEvent = new AsyncScriptRpcEvent(eventpointer); await ScriptRpcAsyncEventHandler.CallAsync(@delegate => @delegate(clientScriptRPCEvent, target, name, mValues.Select(x => x.ToObject()).ToArray(), answerId)); }); } diff --git a/api/AltV.Net.Async/AsyncScriptRpcEvent.cs b/api/AltV.Net.Async/AsyncScriptRpcEvent.cs new file mode 100644 index 000000000..e4fb459d6 --- /dev/null +++ b/api/AltV.Net.Async/AsyncScriptRpcEvent.cs @@ -0,0 +1,52 @@ +using System; +using System.Runtime.InteropServices; +using AltV.Net.Elements.Args; +using AltV.Net.Shared.Elements.Entities; +using AltV.Net.Shared.Utils; + +namespace AltV.Net.Async; + +public class AsyncScriptRpcEvent : IScriptRPCEvent +{ + public AsyncScriptRpcEvent(IntPtr clientScriptRPCNativePointer) + { + ScriptRPCNativePointer = clientScriptRPCNativePointer; + } + + public IntPtr ScriptRPCNativePointer { get; } + + public bool WillAnswer() + { + unsafe + { + return Alt.Core.Library.Shared.Event_ScriptRPCEvent_WillAnswer(ScriptRPCNativePointer) == 1; + } + } + + public bool Answer(object answer) + { + MValueConstLockedNoRefs.CreateFromObjectLocked(answer, out MValueConst mValue); + bool result; + unsafe + { + result = Alt.Core.Library.Shared.Event_ScriptRPCEvent_Answer(ScriptRPCNativePointer, mValue.nativePointer) == 1; + } + mValue.Dispose(); + + return result; + } + + public bool AnswerWithError(string error) + { + var errorPtr = MemoryUtils.StringToHGlobalUtf8(error); + + bool result; + unsafe + { + result = Alt.Core.Library.Shared.Event_ScriptRPCEvent_AnswerWithError(ScriptRPCNativePointer, errorPtr) == 1; + } + Marshal.FreeHGlobal(errorPtr); + + return result; + } +} \ No newline at end of file diff --git a/api/AltV.Net.Shared/Elements/Entities/IScriptRPCEvent.cs b/api/AltV.Net.Shared/Elements/Entities/IScriptRPCEvent.cs index 0c8b71d1f..090e08051 100644 --- a/api/AltV.Net.Shared/Elements/Entities/IScriptRPCEvent.cs +++ b/api/AltV.Net.Shared/Elements/Entities/IScriptRPCEvent.cs @@ -3,7 +3,6 @@ public interface IScriptRPCEvent { IntPtr ScriptRPCNativePointer { get; } - ISharedCore Core { get; } bool WillAnswer(); bool Answer(object answer); bool AnswerWithError(string error); From 435d4e6d129cbe157979bc6eb7471d3185559c32 Mon Sep 17 00:00:00 2001 From: doxoh Date: Mon, 11 Dec 2023 10:30:31 +0100 Subject: [PATCH 36/75] Updated submodule runtime --- runtime | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime b/runtime index fa482da31..94235ddb1 160000 --- a/runtime +++ b/runtime @@ -1 +1 @@ -Subproject commit fa482da31a3973d45f5267e7029c25be1f23a5f9 +Subproject commit 94235ddb163ef222b7d6700f89123babc9e94f56 From 4bdf602ac67296e49e4659e9c5a8e0c0ec64249f Mon Sep 17 00:00:00 2001 From: doxoh Date: Tue, 12 Dec 2023 11:19:36 +0100 Subject: [PATCH 37/75] chore: bump runtime --- runtime | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime b/runtime index 94235ddb1..455951ca6 160000 --- a/runtime +++ b/runtime @@ -1 +1 @@ -Subproject commit 94235ddb163ef222b7d6700f89123babc9e94f56 +Subproject commit 455951ca624f0d6e403d64f82cd2bb4a833a5603 From 14f36785d5a00bd4a504841e9a52df17d74dcaae Mon Sep 17 00:00:00 2001 From: Alexander Schmid Date: Thu, 14 Dec 2023 02:09:13 +0100 Subject: [PATCH 38/75] Add mp2023_02 / The Chop Shop content --- api/AltV.Net.Shared/Enums/PedModel.cs | 24 +++++++++++++++- api/AltV.Net.Shared/Enums/VehicleModel.cs | 35 ++++++++++++++++++++++- api/AltV.Net.Shared/Enums/WeaponModel.cs | 5 +++- 3 files changed, 61 insertions(+), 3 deletions(-) diff --git a/api/AltV.Net.Shared/Enums/PedModel.cs b/api/AltV.Net.Shared/Enums/PedModel.cs index 12596dbc2..be70d1bd1 100644 --- a/api/AltV.Net.Shared/Enums/PedModel.cs +++ b/api/AltV.Net.Shared/Enums/PedModel.cs @@ -880,6 +880,28 @@ public enum PedModel : uint PernellMossIG = 2239793254, // 0x85808866 RoosterMcCrawIG = 2086307585, // 0x7C5A8701 CCrew02SMM = 3080868068, // 0xB7A250E4 - Juggernaut03UMM = 2680892058 // 0x9FCB2A9A + Juggernaut03UMM = 2680892058, // 0x9FCB2A9A + Mechanic01IG = 482489509, // 0x1CC234A5 + CallGirl02CSB = 779177722, // 0x2E714EFA + MaraGrande01GMM = 2487843240, // 0x944979A8 + CallGirl01CSB = 1613083234, // 0x6025B262 + Vincent4CSB = 2149958315, // 0x8025C2AB + Cop01SMM = 1762753038, // 0x69117A0E + CallGirl02IG = 2450524033, // 0x92100781 + CartelGoons01GMM = 2572894111, // 0x995B3F9F + CCrew03SMM = 3867258530, // 0xE681AEA2 + Vincent4IG = 1764259993, // 0x69287899 + CallGirl01IG = 2872523215, // 0xAB3739CF + Pilot02IG = 183230355, // 0xAEBDF93 + Mechanic02IG = 1590147279, // 0x5EC7B8CF + JamalAmirCSB = 3014899707, // 0xB3B3B7FB + JamalAmirIG = 1011548258, // 0x3C4B0062 + YetiUMM = 2363925622, // 0x8CE6A476 + YusufAmirCSB = 2709440876, // 0xA17EC96C + SubCrew01SMM = 3738560875, // 0xDED5E96B + SubCrewHeadIG = 3801918077, // 0xE29CAA7D + AhronWardIG = 927014855, // 0x37411FC7 + YusufAmirIG = 1608114028, // 0x5FD9DF6C + JaywalkerIG = 1283622549 // 0x4C828695 } } diff --git a/api/AltV.Net.Shared/Enums/VehicleModel.cs b/api/AltV.Net.Shared/Enums/VehicleModel.cs index fbf0cb7bc..c4c7a9e31 100644 --- a/api/AltV.Net.Shared/Enums/VehicleModel.cs +++ b/api/AltV.Net.Shared/Enums/VehicleModel.cs @@ -809,6 +809,39 @@ public enum VehicleModel : uint Conada2 = 2635962482, // [0x9D1D9872] Weaponized Conada (HELI) l35 = 2531292011, // [0x96E0736B] Walton L35 (CAR) Speedo5 = 4250167832, // [0xFD546A18] Speedo Custom (CAR) - Buffalo5 = 165968051 // [0x9E478B3] Buffalo EVX (CAR) + Buffalo5 = 165968051, // [0x9E478B3] Buffalo EVX (CAR) + trailers5 = 2960513480, // [0xB075D9C8] Trailer (TRAILER) + aleutian = 4256087847, // [0xFDAEBF27] Aleutian (CAR) + freight2 = 3852738056, // [0xE5A41E08] Freight Train (TRAIN) + tvtrailer2 = 471034616, // [0x1C136AF8] Trailer (TRAILER) + vivanite = 2922168362, // [0xAE2CC02A] Vivanite (CAR) + baller8 = 3431608412, // [0xCC8A305C] Baller ST-D (CAR) + benson2 = 728350375, // [0x2B69BEA7] Benson (Cluckin' Bell) (CAR) + towtruck4 = 3392937977, // [0xCA3C1FF9] Tow Truck (CAR) + driftremus = 2670883828, // [0x9F3273F4] Remus (CAR) + cavalcade3 = 3265236814, // [0xC29F8F4E] Cavalcade XL (CAR) + boattrailer3 = 1539159908, // [0x5BBDB764] Boat Trailer (TRAILER) + driftfr36 = 2815031719, // [0xA7C9F9A7] FR36 (CAR) + drifteuros = 821121576, // [0x30F15228] Euros (CAR) + dorado = 3526923154, // [0xD2389392] Dorado (CAR) + towtruck3 = 3623402354, // [0xD7F8BB72] Tow Truck (CAR) + terminus = 167522317, // [0x9FC300D] Terminus (CAR) + boattrailer2 = 1835260592, // [0x6D63DAB0] Boat Trailer (TRAILER) + driftyosemite = 2613313775, // [0x9BC400EF] Drift Yosemite (CAR) + police5 = 2620582743, // [0x9C32EB57] Stanier LE Cruiser (CAR) + turismo3 = 4171974011, // [0xF8AB457B] Turismo Omaggio (CAR) + dominator9 = 3853757601, // [0xE5B3ACA1] Dominator GT (CAR) + fr36 = 3829141989, // [0xE43C11E5] FR36 (CAR) + driftjester = 2531693357, // [0x96E6932D] Jester RR (CAR) + impaler6 = 4116524922, // [0xF55D2F7A] Impaler LX (CAR) + impaler5 = 3816328113, // [0xE3788BB1] Impaler SZ (CAR) + polgauntlet = 3061199846, // [0xB67633E6] Gauntlet Interceptor (CAR) + boxville6 = 3452201761, // [0xCDC46B21] Boxville (LSDS) (CAR) + Phantom4 = 4165683409, // [0xF84B48D1] Phantom (CAR) + vigero3 = 372621319, // [0x1635C007] Vigero ZX Convertible (CAR) + driftfuto = 4113404654, // [0xF52D92EE] Futo GTX (CAR) + driftzr350 = 1923534526, // [0x72A6CEBE] ZR350 (CAR) + asterope2 = 3553846961, // [0xD3D366B1] Asterope GZ (CAR) + drifttampa = 2598648200 // [0x9AE43988] Drift Tampa (CAR) } } diff --git a/api/AltV.Net.Shared/Enums/WeaponModel.cs b/api/AltV.Net.Shared/Enums/WeaponModel.cs index 15efa58a2..b7eea083b 100644 --- a/api/AltV.Net.Shared/Enums/WeaponModel.cs +++ b/api/AltV.Net.Shared/Enums/WeaponModel.cs @@ -110,6 +110,9 @@ public enum WeaponModel : uint AcidPackage = 4159824478, Wm29Pistol = 465894841, RailgunXm3 = 4272043364, - TecPistol = 350597077 // Tactical SMG + TecPistol = 350597077, // Tactical SMG + BattleRifle = 1924557585, // [0x72B66B11] Battle Rifle () + SnowLauncher = 62870901, // [0x3BF5575] Snowball Launcher () + HackingDevice = 485882440 // [0x1CF5FA48] Hacking Device () } } From a204e66a88324a42a68c68e7848fa2f101d05a1e Mon Sep 17 00:00:00 2001 From: Alexander Schmid Date: Thu, 14 Dec 2023 01:13:04 +0000 Subject: [PATCH 39/75] Remove () --- api/AltV.Net.Shared/Enums/WeaponModel.cs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/api/AltV.Net.Shared/Enums/WeaponModel.cs b/api/AltV.Net.Shared/Enums/WeaponModel.cs index b7eea083b..b6c700d6f 100644 --- a/api/AltV.Net.Shared/Enums/WeaponModel.cs +++ b/api/AltV.Net.Shared/Enums/WeaponModel.cs @@ -111,8 +111,8 @@ public enum WeaponModel : uint Wm29Pistol = 465894841, RailgunXm3 = 4272043364, TecPistol = 350597077, // Tactical SMG - BattleRifle = 1924557585, // [0x72B66B11] Battle Rifle () - SnowLauncher = 62870901, // [0x3BF5575] Snowball Launcher () - HackingDevice = 485882440 // [0x1CF5FA48] Hacking Device () + BattleRifle = 1924557585, // [0x72B66B11] Battle Rifle + SnowLauncher = 62870901, // [0x3BF5575] Snowball Launcher + HackingDevice = 485882440 // [0x1CF5FA48] Hacking Device } } From 46020e3f5183118de57d26998cce69b1d3952993 Mon Sep 17 00:00:00 2001 From: doxoh Date: Thu, 14 Dec 2023 09:10:19 +0100 Subject: [PATCH 40/75] fix(server): IPlayer.EntityAimingAt --- api/AltV.Net/Elements/Entities/Player.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/api/AltV.Net/Elements/Entities/Player.cs b/api/AltV.Net/Elements/Entities/Player.cs index ef8c7ef07..5c813e750 100644 --- a/api/AltV.Net/Elements/Entities/Player.cs +++ b/api/AltV.Net/Elements/Entities/Player.cs @@ -858,7 +858,9 @@ public IEntity EntityAimingAt var type = BaseObjectType.Undefined; var entityPointer = Core.Library.Shared.Player_GetEntityAimingAt(PlayerNativePointer, &type); if (entityPointer == IntPtr.Zero) return null; - return Alt.Core.PoolManager.Vehicle.Get(entityPointer); + + var entity = (IEntity)Core.PoolManager.Get(entityPointer, type); + return entity; } } } From 37df391fb7de7959debee1f10f74258c8947a308 Mon Sep 17 00:00:00 2001 From: doxoh Date: Mon, 18 Dec 2023 11:51:43 +0100 Subject: [PATCH 41/75] chore: bump runtime --- runtime | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime b/runtime index 455951ca6..c35c7fa2b 160000 --- a/runtime +++ b/runtime @@ -1 +1 @@ -Subproject commit 455951ca624f0d6e403d64f82cd2bb4a833a5603 +Subproject commit c35c7fa2b033ef3433eaf80ccbe2450de9e46910 From f1f4cacaa5ad9eb7f233e3055bee1df06a4adaaa Mon Sep 17 00:00:00 2001 From: doxoh Date: Wed, 20 Dec 2023 12:09:40 +0100 Subject: [PATCH 42/75] fix(server): try async rpc handling --- api/AltV.Net.Async/AsyncCore.cs | 16 ++++++-- api/AltV.Net.Async/AsyncScriptRpcEvent.cs | 40 ++++++------------- .../Elements/Entities/AsyncPlayer.cs | 5 +++ api/AltV.Net.Client/Core.Events.cs | 12 +++++- api/AltV.Net.Client/Core.cs | 5 +++ api/AltV.Net.Mock/MockCore.cs | 2 + .../Elements/Entities/ScriptRpcEvent.cs | 37 ++++++++++++++++- api/AltV.Net.Shared/ISharedCore.cs | 2 + api/AltV.Net.Shared/SharedCore.cs | 4 ++ api/AltV.Net/Core.Events.cs | 16 ++++++-- api/AltV.Net/Core.cs | 5 +++ 11 files changed, 108 insertions(+), 36 deletions(-) diff --git a/api/AltV.Net.Async/AsyncCore.cs b/api/AltV.Net.Async/AsyncCore.cs index a05b54890..de092f464 100644 --- a/api/AltV.Net.Async/AsyncCore.cs +++ b/api/AltV.Net.Async/AsyncCore.cs @@ -968,17 +968,27 @@ public override void OnPlayerStopTalkingEvent(IPlayer player) }); } - public override void OnScriptRPCEvent(IntPtr eventpointer, IPlayer target, string name, IntPtr[] args, ushort answerId) + public override void OnScriptRPCEvent(IntPtr eventpointer, IPlayer target, string name, IntPtr[] args, ushort answerId, bool async) { - base.OnScriptRPCEvent(eventpointer, target, name, args, answerId); + if (!UnansweredServerRpcRequest.Contains(answerId)) + { + UnansweredServerRpcRequest.Add(answerId); + } + base.OnScriptRPCEvent(eventpointer, target, name, args, answerId, true); if (!ScriptRpcAsyncEventHandler.HasEvents()) return; Task.Run(async () => { var mValues = MValueConst.CreateFrom(this, args); - var clientScriptRPCEvent = new AsyncScriptRpcEvent(eventpointer); + var clientScriptRPCEvent = new AsyncScriptRpcEvent(target, answerId); await ScriptRpcAsyncEventHandler.CallAsync(@delegate => @delegate(clientScriptRPCEvent, target, name, mValues.Select(x => x.ToObject()).ToArray(), answerId)); }); + + if (UnansweredServerRpcRequest.Contains(answerId)) + { + target.EmitRPCAnswer(answerId, null, "Answer not handled"); + UnansweredServerRpcRequest.Remove(answerId); + } } public override void OnScriptAnswerRPCEvent(IPlayer target, ushort answerid, IntPtr mValue, string answererror) diff --git a/api/AltV.Net.Async/AsyncScriptRpcEvent.cs b/api/AltV.Net.Async/AsyncScriptRpcEvent.cs index e4fb459d6..aa8c262b9 100644 --- a/api/AltV.Net.Async/AsyncScriptRpcEvent.cs +++ b/api/AltV.Net.Async/AsyncScriptRpcEvent.cs @@ -1,52 +1,36 @@ using System; -using System.Runtime.InteropServices; -using AltV.Net.Elements.Args; +using AltV.Net.Elements.Entities; using AltV.Net.Shared.Elements.Entities; -using AltV.Net.Shared.Utils; namespace AltV.Net.Async; public class AsyncScriptRpcEvent : IScriptRPCEvent { - public AsyncScriptRpcEvent(IntPtr clientScriptRPCNativePointer) + private readonly IPlayer _target; + private readonly ushort _answerId; + + public AsyncScriptRpcEvent(IPlayer target, ushort answerId) { - ScriptRPCNativePointer = clientScriptRPCNativePointer; + _target = target; + _answerId = answerId; } public IntPtr ScriptRPCNativePointer { get; } public bool WillAnswer() { - unsafe - { - return Alt.Core.Library.Shared.Event_ScriptRPCEvent_WillAnswer(ScriptRPCNativePointer) == 1; - } + return true; } public bool Answer(object answer) { - MValueConstLockedNoRefs.CreateFromObjectLocked(answer, out MValueConst mValue); - bool result; - unsafe - { - result = Alt.Core.Library.Shared.Event_ScriptRPCEvent_Answer(ScriptRPCNativePointer, mValue.nativePointer) == 1; - } - mValue.Dispose(); - - return result; + _target.EmitRPCAnswer(_answerId, answer, ""); + return true; } public bool AnswerWithError(string error) { - var errorPtr = MemoryUtils.StringToHGlobalUtf8(error); - - bool result; - unsafe - { - result = Alt.Core.Library.Shared.Event_ScriptRPCEvent_AnswerWithError(ScriptRPCNativePointer, errorPtr) == 1; - } - Marshal.FreeHGlobal(errorPtr); - - return result; + _target.EmitRPCAnswer(_answerId, null, error); + return true; } } \ No newline at end of file diff --git a/api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs b/api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs index 2be83c6c8..b79c55094 100644 --- a/api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs +++ b/api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs @@ -722,6 +722,11 @@ public void EmitRPCAnswer(ushort answerId, object answer, string error) mValue.Dispose(); Marshal.FreeHGlobal(errorPtr); + + if (Core.UnansweredServerRpcRequest.Contains(answerId)) + { + Core.UnansweredServerRpcRequest.Remove(answerId); + } } public void EmitUnreliable(string eventName, params object[] args) diff --git a/api/AltV.Net.Client/Core.Events.cs b/api/AltV.Net.Client/Core.Events.cs index 6be9b255a..10583a98f 100644 --- a/api/AltV.Net.Client/Core.Events.cs +++ b/api/AltV.Net.Client/Core.Events.cs @@ -705,9 +705,19 @@ public void OnScriptRPCAnswer(ushort answerid, IntPtr answer, string answerError public void OnScriptRPC(IntPtr eventpointer, string name, IntPtr[] args, ushort answerid) { + if (!UnansweredClientRpcRequest.Contains(answerid)) + { + UnansweredClientRpcRequest.Add(answerid); + } var mValues = MValueConst.CreateFrom(this, args); - var clientScriptRPCEvent = new ScriptRpcEvent(this, eventpointer); + var clientScriptRPCEvent = new ScriptRpcEvent(this, eventpointer, answerid, true); ScriptRPCHandler.GetEvents().ForEachCatching(fn => fn(clientScriptRPCEvent, name, mValues.Select(x => x.ToObject()).ToArray(), answerid), $"event {nameof(OnScriptRPC)}"); + + if (UnansweredClientRpcRequest.Contains(answerid)) + { + clientScriptRPCEvent.AnswerWithError("Answer not handled"); + UnansweredClientRpcRequest.Remove(answerid); + } } } } \ No newline at end of file diff --git a/api/AltV.Net.Client/Core.cs b/api/AltV.Net.Client/Core.cs index 08fd28a78..71e1bb461 100644 --- a/api/AltV.Net.Client/Core.cs +++ b/api/AltV.Net.Client/Core.cs @@ -828,6 +828,11 @@ public void TriggerServerRPCAnswer(ushort answerId, MValueConst answer, string e Library.Client.Core_TriggerServerRPCAnswer(NativePointer, answerId, answer.nativePointer, errorPtr); Marshal.FreeHGlobal(errorPtr); } + + if (UnansweredClientRpcRequest.Contains(answerId)) + { + UnansweredClientRpcRequest.Remove(answerId); + } } [MethodImpl(MethodImplOptions.AggressiveInlining)] diff --git a/api/AltV.Net.Mock/MockCore.cs b/api/AltV.Net.Mock/MockCore.cs index 102248ff4..dfbd7f32a 100644 --- a/api/AltV.Net.Mock/MockCore.cs +++ b/api/AltV.Net.Mock/MockCore.cs @@ -17,6 +17,8 @@ namespace AltV.Net.Mock { public class MockCore : ICore { + public IList UnansweredServerRpcRequest { get; } + public IList UnansweredClientRpcRequest { get; } ISharedPoolManager ISharedCore.PoolManager => PoolManager; public Dictionary> VehiclePassengers { get; } public IPoolManager PoolManager { get; } diff --git a/api/AltV.Net.Shared/Elements/Entities/ScriptRpcEvent.cs b/api/AltV.Net.Shared/Elements/Entities/ScriptRpcEvent.cs index a66792dff..d46079fc9 100644 --- a/api/AltV.Net.Shared/Elements/Entities/ScriptRpcEvent.cs +++ b/api/AltV.Net.Shared/Elements/Entities/ScriptRpcEvent.cs @@ -6,8 +6,13 @@ namespace AltV.Net.Shared.Elements.Entities; public class ScriptRpcEvent : IScriptRPCEvent { - public ScriptRpcEvent(ISharedCore core, IntPtr clientScriptRPCNativePointer) + private readonly ushort _answerId; + private readonly bool _clientSide; + + public ScriptRpcEvent(ISharedCore core, IntPtr clientScriptRPCNativePointer, ushort answerId, bool clientSide) { + _answerId = answerId; + _clientSide = clientSide; ScriptRPCNativePointer = clientScriptRPCNativePointer; Core = core; } @@ -33,6 +38,21 @@ public bool Answer(object answer) } mValue.Dispose(); + if (_clientSide) + { + if (Core.UnansweredClientRpcRequest.Contains(_answerId)) + { + Core.UnansweredClientRpcRequest.Remove(_answerId); + } + } + else + { + if (Core.UnansweredServerRpcRequest.Contains(_answerId)) + { + Core.UnansweredServerRpcRequest.Remove(_answerId); + } + } + return result; } @@ -47,6 +67,21 @@ public bool AnswerWithError(string error) } Marshal.FreeHGlobal(errorPtr); + if (_clientSide) + { + if (Core.UnansweredClientRpcRequest.Contains(_answerId)) + { + Core.UnansweredClientRpcRequest.Remove(_answerId); + } + } + else + { + if (Core.UnansweredServerRpcRequest.Contains(_answerId)) + { + Core.UnansweredServerRpcRequest.Remove(_answerId); + } + } + return result; } } \ No newline at end of file diff --git a/api/AltV.Net.Shared/ISharedCore.cs b/api/AltV.Net.Shared/ISharedCore.cs index d33b176b8..72ef6d0e8 100644 --- a/api/AltV.Net.Shared/ISharedCore.cs +++ b/api/AltV.Net.Shared/ISharedCore.cs @@ -10,6 +10,8 @@ namespace AltV.Net.Shared { public interface ISharedCore : ICApiCore { + IList UnansweredServerRpcRequest { get; } + IList UnansweredClientRpcRequest { get; } ISharedPoolManager PoolManager { get; } EventStateManager EventStateManager { get; } diff --git a/api/AltV.Net.Shared/SharedCore.cs b/api/AltV.Net.Shared/SharedCore.cs index afc3df13a..f1871d7a1 100644 --- a/api/AltV.Net.Shared/SharedCore.cs +++ b/api/AltV.Net.Shared/SharedCore.cs @@ -29,9 +29,13 @@ public SharedCore(IntPtr nativePointer, ILibrary library) Library = library; MainThread = Thread.CurrentThread; EventStateManager = new EventStateManager(this); + UnansweredServerRpcRequest = new List(); + UnansweredClientRpcRequest = new List(); } public abstract ISharedNativeResource Resource { get; } + public IList UnansweredServerRpcRequest { get; } + public IList UnansweredClientRpcRequest { get; } public abstract ISharedPoolManager PoolManager { get; } public EventStateManager EventStateManager { get; } diff --git a/api/AltV.Net/Core.Events.cs b/api/AltV.Net/Core.Events.cs index cab649017..4b8c3949b 100644 --- a/api/AltV.Net/Core.Events.cs +++ b/api/AltV.Net/Core.Events.cs @@ -2648,13 +2648,17 @@ public void OnScriptRPC(IntPtr eventpointer, IntPtr targetpointer, string name, Marshal.Copy(pointer, args, 0, (int) size); } - OnScriptRPCEvent(eventpointer, target, name, args, answerId); + OnScriptRPCEvent(eventpointer, target, name, args, answerId, false); } - public virtual void OnScriptRPCEvent(IntPtr eventpointer, IPlayer target, string name, IntPtr[] args, ushort answerId) + public virtual void OnScriptRPCEvent(IntPtr eventpointer, IPlayer target, string name, IntPtr[] args, ushort answerId, bool async) { + if (!UnansweredServerRpcRequest.Contains(answerId)) + { + UnansweredServerRpcRequest.Add(answerId); + } var mValues = MValueConst.CreateFrom(this, args); - var clientScriptRPCEvent = new ScriptRpcEvent(this, eventpointer); + var clientScriptRPCEvent = new ScriptRpcEvent(this, eventpointer, answerId, false); foreach (var @delegate in ScriptRpcHandler.GetEvents()) { try @@ -2670,6 +2674,12 @@ public virtual void OnScriptRPCEvent(IntPtr eventpointer, IPlayer target, string Alt.Log("exception at event:" + "OnScriptRPCEvent" + ":" + exception); } } + + if (!async && UnansweredServerRpcRequest.Contains(answerId)) + { + clientScriptRPCEvent.AnswerWithError("Answer not handled"); + UnansweredServerRpcRequest.Remove(answerId); + } } public void OnScriptAnswerRPC(IntPtr targetpointer, ushort answerid, IntPtr answer, string answererror) diff --git a/api/AltV.Net/Core.cs b/api/AltV.Net/Core.cs index a255aa575..a5f922365 100644 --- a/api/AltV.Net/Core.cs +++ b/api/AltV.Net/Core.cs @@ -568,6 +568,11 @@ public void TriggerClientRPCAnswer(IPlayer target, ushort answerId, MValueConst Library.Server.Core_TriggerClientRPCAnswer(NativePointer, target.NativePointer, answerId, answer.nativePointer, errorPtr); } + + if (UnansweredServerRpcRequest.Contains(answerId)) + { + UnansweredServerRpcRequest.Remove(answerId); + } } public void TriggerClientRPCAnswer(IPlayer target, ushort answerId, MValueConst answer, string error) From a498386d3ea90e5e025ec194b7cf4539519a0323 Mon Sep 17 00:00:00 2001 From: doxoh Date: Wed, 20 Dec 2023 17:11:10 +0100 Subject: [PATCH 43/75] fix(server): next try fix on rpc request --- api/AltV.Net.Async/AsyncCore.cs | 8 ++++++++ api/AltV.Net/Core.cs | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/api/AltV.Net.Async/AsyncCore.cs b/api/AltV.Net.Async/AsyncCore.cs index de092f464..9a10a4b36 100644 --- a/api/AltV.Net.Async/AsyncCore.cs +++ b/api/AltV.Net.Async/AsyncCore.cs @@ -976,6 +976,14 @@ public override void OnScriptRPCEvent(IntPtr eventpointer, IPlayer target, strin } base.OnScriptRPCEvent(eventpointer, target, name, args, answerId, true); + if (UnansweredServerRpcRequest.Contains(answerId)) + { + unsafe + { + Library.Shared.Event_ScriptRPCEvent_WillAnswer(eventpointer); + } + } + if (!ScriptRpcAsyncEventHandler.HasEvents()) return; Task.Run(async () => { diff --git a/api/AltV.Net/Core.cs b/api/AltV.Net/Core.cs index a5f922365..b883315ae 100644 --- a/api/AltV.Net/Core.cs +++ b/api/AltV.Net/Core.cs @@ -565,7 +565,7 @@ public void TriggerClientRPCAnswer(IPlayer target, ushort answerId, MValueConst { unsafe { - Library.Server.Core_TriggerClientRPCAnswer(NativePointer, target.NativePointer, answerId, + Library.Server.Core_TriggerClientRPCAnswer(NativePointer, target.PlayerNativePointer, answerId, answer.nativePointer, errorPtr); } From 2ad294587d3fe61b15afede5740a212059c4502c Mon Sep 17 00:00:00 2001 From: doxoh Date: Wed, 20 Dec 2023 17:11:52 +0100 Subject: [PATCH 44/75] refactor(shared): cleanup nativepointer access --- api/AltV.Net.Async/AsyncEntityPool.cs | 6 +++--- .../Elements/Entities/Audio.cs | 1 - .../Elements/Entities/AudioFilter.cs | 1 - .../Elements/Entities/AudioOutput.cs | 2 -- .../Elements/Entities/AudioOutputAttached.cs | 2 -- .../Elements/Entities/AudioOutputFrontend.cs | 1 - .../Elements/Entities/AudioOutputWorld.cs | 2 -- .../Elements/Entities/BaseObject.cs | 1 - api/AltV.Net.Client/Elements/Entities/Blip.cs | 1 - .../Elements/Entities/Checkpoint.cs | 1 - .../Elements/Entities/ColShape.cs | 1 - .../Elements/Entities/Entity.cs | 1 - api/AltV.Net.Client/Elements/Entities/Font.cs | 1 - .../Elements/Entities/HttpClient.cs | 19 +++++++++---------- .../Elements/Entities/LocalObject.cs | 1 - .../Elements/Entities/LocalPed.cs | 1 - .../Elements/Entities/LocalVehicle.cs | 1 - .../Elements/Entities/Marker.cs | 1 - .../Elements/Entities/Object.cs | 1 - api/AltV.Net.Client/Elements/Entities/Ped.cs | 1 - .../Elements/Entities/Player.cs | 1 - .../Elements/Entities/RmlDocument.cs | 1 - .../Elements/Entities/RmlElement.cs | 1 - .../Elements/Entities/TextLabel.cs | 1 - .../Elements/Entities/Vehicle.cs | 1 - .../Elements/Entities/VirtualEntity.cs | 1 - .../Elements/Entities/VirtualEntityGroup.cs | 1 - .../Elements/Entities/WebSocketClient.cs | 1 - .../Elements/Entities/WebView.cs | 1 - .../Elements/Entities/WorldObject.cs | 1 - .../Elements/Pools/EntityPool.cs | 6 +++--- api/AltV.Net/Elements/Entities/Blip.cs | 2 -- api/AltV.Net/Elements/Entities/Checkpoint.cs | 1 - api/AltV.Net/Elements/Entities/ColShape.cs | 1 - .../Elements/Entities/ConnectionInfo.cs | 1 - api/AltV.Net/Elements/Entities/Entity.cs | 1 - api/AltV.Net/Elements/Entities/Marker.cs | 1 - api/AltV.Net/Elements/Entities/Object.cs | 1 - api/AltV.Net/Elements/Entities/Ped.cs | 1 - api/AltV.Net/Elements/Entities/Player.cs | 1 - api/AltV.Net/Elements/Entities/Vehicle.cs | 3 +-- .../Elements/Entities/VirtualEntity.cs | 1 - .../Elements/Entities/VirtualEntityGroup.cs | 1 - .../Elements/Entities/VoiceChannel.cs | 3 +-- api/AltV.Net/Elements/Entities/WorldObject.cs | 1 - api/AltV.Net/Elements/Pools/EntityPool.cs | 6 +++--- 46 files changed, 20 insertions(+), 67 deletions(-) diff --git a/api/AltV.Net.Async/AsyncEntityPool.cs b/api/AltV.Net.Async/AsyncEntityPool.cs index e4c759c6a..fbc929fe0 100644 --- a/api/AltV.Net.Async/AsyncEntityPool.cs +++ b/api/AltV.Net.Async/AsyncEntityPool.cs @@ -76,7 +76,7 @@ public TEntity Create(ICore core, IntPtr entityPointer) public void Add(TEntity entity) { - entities[entity.NativePointer] = entity; + entities[entity.EntityNativePointer] = entity; if (forceAsync && entity is not AsyncEntity) throw new Exception("Tried to add sync entity to async pool. Probably you used \"new Vehicle\" syntax (should be \"new AsyncVehicle\"), or didn't adapt your custom entity class to new Async API."); OnAdd(entity); @@ -84,7 +84,7 @@ public void Add(TEntity entity) public bool Remove(TEntity entity) { - return Remove(entity.NativePointer); + return Remove(entity.EntityNativePointer); } //TODO: what should happen on failure @@ -101,7 +101,7 @@ public bool Remove(IntPtr entityPointer) if (ptr != IntPtr.Zero) { internalEntity.SetCached(ptr); - cache[entity.NativePointer] = new WeakReference(entity); + cache[entity.EntityNativePointer] = new WeakReference(entity); } } } diff --git a/api/AltV.Net.Client/Elements/Entities/Audio.cs b/api/AltV.Net.Client/Elements/Entities/Audio.cs index 524e0570b..bbfa963fe 100644 --- a/api/AltV.Net.Client/Elements/Entities/Audio.cs +++ b/api/AltV.Net.Client/Elements/Entities/Audio.cs @@ -15,7 +15,6 @@ public struct AudioEntity public class Audio : BaseObject, IAudio { public IntPtr AudioNativePointer { get; } - public override IntPtr NativePointer => AudioNativePointer; public static IntPtr GetBaseObjectNativePointer(ICore core, IntPtr audioNativePointer) { diff --git a/api/AltV.Net.Client/Elements/Entities/AudioFilter.cs b/api/AltV.Net.Client/Elements/Entities/AudioFilter.cs index d206d8b78..734b38197 100644 --- a/api/AltV.Net.Client/Elements/Entities/AudioFilter.cs +++ b/api/AltV.Net.Client/Elements/Entities/AudioFilter.cs @@ -19,7 +19,6 @@ public AudioFilter(ICore core, IntPtr audioFilterNativePointer, uint id) : base( } public IntPtr AudioFilterNativePointer { get; } - public override IntPtr NativePointer => AudioFilterNativePointer; public uint Hash { diff --git a/api/AltV.Net.Client/Elements/Entities/AudioOutput.cs b/api/AltV.Net.Client/Elements/Entities/AudioOutput.cs index 2334ba048..74c1a6394 100644 --- a/api/AltV.Net.Client/Elements/Entities/AudioOutput.cs +++ b/api/AltV.Net.Client/Elements/Entities/AudioOutput.cs @@ -24,8 +24,6 @@ public AudioOutput(ICore core, IntPtr audioOutputNativePointer, BaseObjectType t } public IntPtr AudioOutputNativePointer { get; } - public override IntPtr NativePointer => AudioOutputNativePointer; - public float Volume { diff --git a/api/AltV.Net.Client/Elements/Entities/AudioOutputAttached.cs b/api/AltV.Net.Client/Elements/Entities/AudioOutputAttached.cs index 3ecfa4cd1..4d27d369a 100644 --- a/api/AltV.Net.Client/Elements/Entities/AudioOutputAttached.cs +++ b/api/AltV.Net.Client/Elements/Entities/AudioOutputAttached.cs @@ -42,6 +42,4 @@ public IWorldObject Entity } } } - - public override IntPtr NativePointer => AudioOutputAttachedNativePointer; } \ No newline at end of file diff --git a/api/AltV.Net.Client/Elements/Entities/AudioOutputFrontend.cs b/api/AltV.Net.Client/Elements/Entities/AudioOutputFrontend.cs index b239701d5..61af84e16 100644 --- a/api/AltV.Net.Client/Elements/Entities/AudioOutputFrontend.cs +++ b/api/AltV.Net.Client/Elements/Entities/AudioOutputFrontend.cs @@ -19,5 +19,4 @@ public AudioOutputFrontend(ICore core, IntPtr audioOutputFrontendNativePointer, } public IntPtr AudioOutputFrontendNativePointer { get; } - public override IntPtr NativePointer => AudioOutputFrontendNativePointer; } \ No newline at end of file diff --git a/api/AltV.Net.Client/Elements/Entities/AudioOutputWorld.cs b/api/AltV.Net.Client/Elements/Entities/AudioOutputWorld.cs index a76bd1640..202573978 100644 --- a/api/AltV.Net.Client/Elements/Entities/AudioOutputWorld.cs +++ b/api/AltV.Net.Client/Elements/Entities/AudioOutputWorld.cs @@ -40,6 +40,4 @@ public Position Position } } } - - public override IntPtr NativePointer => AudioOutputWorldNativePointer; } \ No newline at end of file diff --git a/api/AltV.Net.Client/Elements/Entities/BaseObject.cs b/api/AltV.Net.Client/Elements/Entities/BaseObject.cs index 3862b4c57..d87cdcf93 100644 --- a/api/AltV.Net.Client/Elements/Entities/BaseObject.cs +++ b/api/AltV.Net.Client/Elements/Entities/BaseObject.cs @@ -10,7 +10,6 @@ namespace AltV.Net.Client.Elements.Entities public class BaseObject : SharedBaseObject, IBaseObject { public override IntPtr BaseObjectNativePointer { get; protected set; } - public override IntPtr NativePointer => BaseObjectNativePointer; public override ICore Core { get; } public override BaseObjectType Type { get; } public uint Id { get; } diff --git a/api/AltV.Net.Client/Elements/Entities/Blip.cs b/api/AltV.Net.Client/Elements/Entities/Blip.cs index be33b37b5..4c0b92f59 100644 --- a/api/AltV.Net.Client/Elements/Entities/Blip.cs +++ b/api/AltV.Net.Client/Elements/Entities/Blip.cs @@ -11,7 +11,6 @@ namespace AltV.Net.Client.Elements.Entities public class Blip : WorldObject, IBlip { public IntPtr BlipNativePointer { get; } - public override IntPtr NativePointer => BlipNativePointer; private static IntPtr GetWorldObjectPointer(ICore core, IntPtr nativePointer) { diff --git a/api/AltV.Net.Client/Elements/Entities/Checkpoint.cs b/api/AltV.Net.Client/Elements/Entities/Checkpoint.cs index 6c0156a59..38494e35b 100644 --- a/api/AltV.Net.Client/Elements/Entities/Checkpoint.cs +++ b/api/AltV.Net.Client/Elements/Entities/Checkpoint.cs @@ -8,7 +8,6 @@ namespace AltV.Net.Client.Elements.Entities public class Checkpoint : ColShape, ICheckpoint { public IntPtr CheckpointNativePointer { get; } - public override IntPtr NativePointer => CheckpointNativePointer; private static IntPtr GetColShapePointer(ICore core, IntPtr nativePointer) { diff --git a/api/AltV.Net.Client/Elements/Entities/ColShape.cs b/api/AltV.Net.Client/Elements/Entities/ColShape.cs index 6ba451602..dae43c7d1 100644 --- a/api/AltV.Net.Client/Elements/Entities/ColShape.cs +++ b/api/AltV.Net.Client/Elements/Entities/ColShape.cs @@ -8,7 +8,6 @@ namespace AltV.Net.Client.Elements.Entities public class ColShape : WorldObject, IColShape { public IntPtr ColShapeNativePointer { get; } - public override IntPtr NativePointer => ColShapeNativePointer; private static IntPtr GetWorldObjectPointer(ICore core, IntPtr nativePointer) { diff --git a/api/AltV.Net.Client/Elements/Entities/Entity.cs b/api/AltV.Net.Client/Elements/Entities/Entity.cs index 11bfc79f1..67941f9e9 100644 --- a/api/AltV.Net.Client/Elements/Entities/Entity.cs +++ b/api/AltV.Net.Client/Elements/Entities/Entity.cs @@ -21,7 +21,6 @@ private static IntPtr GetWorldObjectPointer(ICore core, IntPtr entityPointer) } public IntPtr EntityNativePointer { get; private set; } - public override IntPtr NativePointer => EntityNativePointer; public Entity(ICore core, IntPtr entityPointer, uint id, BaseObjectType type) : base(core, GetWorldObjectPointer(core, entityPointer), type, id) { diff --git a/api/AltV.Net.Client/Elements/Entities/Font.cs b/api/AltV.Net.Client/Elements/Entities/Font.cs index b35fb5966..5908206ac 100644 --- a/api/AltV.Net.Client/Elements/Entities/Font.cs +++ b/api/AltV.Net.Client/Elements/Entities/Font.cs @@ -19,5 +19,4 @@ public Font(ICore core, IntPtr fontNativePointer, uint id) : base(core, GetBaseO } public IntPtr FontNativePointer { get; } - public override IntPtr NativePointer => FontNativePointer; } \ No newline at end of file diff --git a/api/AltV.Net.Client/Elements/Entities/HttpClient.cs b/api/AltV.Net.Client/Elements/Entities/HttpClient.cs index e8ea41e2a..bfea8d0b9 100644 --- a/api/AltV.Net.Client/Elements/Entities/HttpClient.cs +++ b/api/AltV.Net.Client/Elements/Entities/HttpClient.cs @@ -10,7 +10,6 @@ namespace AltV.Net.Client.Elements.Entities public class HttpClient : BaseObject, IHttpClient { public IntPtr HttpClientNativePointer { get; } - public override IntPtr NativePointer => HttpClientNativePointer; private static IntPtr GetBaseObjectNativePointer(ICore core, IntPtr httpClientNativePointer) { @@ -94,7 +93,7 @@ void ResolveTask(int statusCode, string body, IntPtr headerKeys, IntPtr headerVa HttpResponseModuleDelegate resolveTask = ResolveTask; handle = GCHandle.Alloc(resolveTask); var urlPtr = MemoryUtils.StringToHGlobalUtf8(url); - Core.Library.Client.HttpClient_Get(NativePointer, urlPtr, resolveTask); + Core.Library.Client.HttpClient_Get(HttpClientNativePointer, urlPtr, resolveTask); Marshal.FreeHGlobal(urlPtr); } @@ -123,7 +122,7 @@ void ResolveTask(int statusCode, string body, IntPtr headerKeys, IntPtr headerVa HttpResponseModuleDelegate resolveTask = ResolveTask; handle = GCHandle.Alloc(resolveTask); var urlPtr = MemoryUtils.StringToHGlobalUtf8(url); - Core.Library.Client.HttpClient_Head(NativePointer, urlPtr, resolveTask); + Core.Library.Client.HttpClient_Head(HttpClientNativePointer, urlPtr, resolveTask); Marshal.FreeHGlobal(urlPtr); } @@ -153,7 +152,7 @@ void ResolveTask(int statusCode, string body, IntPtr headerKeys, IntPtr headerVa handle = GCHandle.Alloc(resolveTask); var urlPtr = MemoryUtils.StringToHGlobalUtf8(url); var bodyPtr = MemoryUtils.StringToHGlobalUtf8(body); - Core.Library.Client.HttpClient_Connect(NativePointer, urlPtr, bodyPtr, resolveTask); + Core.Library.Client.HttpClient_Connect(HttpClientNativePointer, urlPtr, bodyPtr, resolveTask); Marshal.FreeHGlobal(urlPtr); Marshal.FreeHGlobal(bodyPtr); } @@ -184,7 +183,7 @@ void ResolveTask(int statusCode, string body, IntPtr headerKeys, IntPtr headerVa handle = GCHandle.Alloc(resolveTask); var urlPtr = MemoryUtils.StringToHGlobalUtf8(url); var bodyPtr = MemoryUtils.StringToHGlobalUtf8(body); - Core.Library.Client.HttpClient_Delete(NativePointer, urlPtr, bodyPtr, resolveTask); + Core.Library.Client.HttpClient_Delete(HttpClientNativePointer, urlPtr, bodyPtr, resolveTask); Marshal.FreeHGlobal(urlPtr); Marshal.FreeHGlobal(bodyPtr); } @@ -215,7 +214,7 @@ void ResolveTask(int statusCode, string body, IntPtr headerKeys, IntPtr headerVa handle = GCHandle.Alloc(resolveTask); var urlPtr = MemoryUtils.StringToHGlobalUtf8(url); var bodyPtr = MemoryUtils.StringToHGlobalUtf8(body); - Core.Library.Client.HttpClient_Options(NativePointer, urlPtr, bodyPtr, resolveTask); + Core.Library.Client.HttpClient_Options(HttpClientNativePointer, urlPtr, bodyPtr, resolveTask); Marshal.FreeHGlobal(urlPtr); Marshal.FreeHGlobal(bodyPtr); } @@ -246,7 +245,7 @@ void ResolveTask(int statusCode, string body, IntPtr headerKeys, IntPtr headerVa handle = GCHandle.Alloc(resolveTask); var urlPtr = MemoryUtils.StringToHGlobalUtf8(url); var bodyPtr = MemoryUtils.StringToHGlobalUtf8(body); - Core.Library.Client.HttpClient_Patch(NativePointer, urlPtr, bodyPtr, resolveTask); + Core.Library.Client.HttpClient_Patch(HttpClientNativePointer, urlPtr, bodyPtr, resolveTask); Marshal.FreeHGlobal(urlPtr); Marshal.FreeHGlobal(bodyPtr); } @@ -277,7 +276,7 @@ void ResolveTask(int statusCode, string body, IntPtr headerKeys, IntPtr headerVa handle = GCHandle.Alloc(resolveTask); var urlPtr = MemoryUtils.StringToHGlobalUtf8(url); var bodyPtr = MemoryUtils.StringToHGlobalUtf8(body); - Core.Library.Client.HttpClient_Post(NativePointer, urlPtr, bodyPtr, resolveTask); + Core.Library.Client.HttpClient_Post(HttpClientNativePointer, urlPtr, bodyPtr, resolveTask); Marshal.FreeHGlobal(urlPtr); Marshal.FreeHGlobal(bodyPtr); } @@ -308,7 +307,7 @@ void ResolveTask(int statusCode, string body, IntPtr headerKeys, IntPtr headerVa handle = GCHandle.Alloc(resolveTask); var urlPtr = MemoryUtils.StringToHGlobalUtf8(url); var bodyPtr = MemoryUtils.StringToHGlobalUtf8(body); - Core.Library.Client.HttpClient_Put(NativePointer, urlPtr, bodyPtr, resolveTask); + Core.Library.Client.HttpClient_Put(HttpClientNativePointer, urlPtr, bodyPtr, resolveTask); Marshal.FreeHGlobal(urlPtr); Marshal.FreeHGlobal(bodyPtr); } @@ -339,7 +338,7 @@ void ResolveTask(int statusCode, string body, IntPtr headerKeys, IntPtr headerVa handle = GCHandle.Alloc(resolveTask); var urlPtr = MemoryUtils.StringToHGlobalUtf8(url); var bodyPtr = MemoryUtils.StringToHGlobalUtf8(body); - Core.Library.Client.HttpClient_Trace(NativePointer, urlPtr, bodyPtr, resolveTask); + Core.Library.Client.HttpClient_Trace(HttpClientNativePointer, urlPtr, bodyPtr, resolveTask); Marshal.FreeHGlobal(urlPtr); Marshal.FreeHGlobal(bodyPtr); } diff --git a/api/AltV.Net.Client/Elements/Entities/LocalObject.cs b/api/AltV.Net.Client/Elements/Entities/LocalObject.cs index 6c3ad0cfd..a9f31dffd 100644 --- a/api/AltV.Net.Client/Elements/Entities/LocalObject.cs +++ b/api/AltV.Net.Client/Elements/Entities/LocalObject.cs @@ -16,7 +16,6 @@ private static IntPtr GetObjectPointer(ICore core, IntPtr LocalObjectNativePoint } public IntPtr LocalObjectNativePointer { get; } - public override IntPtr NativePointer => LocalObjectNativePointer; public LocalObject(ICore core, IntPtr objectPointer, uint id) : base(core, GetObjectPointer(core, objectPointer), BaseObjectType.LocalObject, id) { diff --git a/api/AltV.Net.Client/Elements/Entities/LocalPed.cs b/api/AltV.Net.Client/Elements/Entities/LocalPed.cs index 656551c2f..eda432cfc 100644 --- a/api/AltV.Net.Client/Elements/Entities/LocalPed.cs +++ b/api/AltV.Net.Client/Elements/Entities/LocalPed.cs @@ -7,7 +7,6 @@ namespace AltV.Net.Client.Elements.Entities; public class LocalPed : Ped, ILocalPed { public IntPtr LocalPedNativePointer { get; } - public override IntPtr NativePointer => LocalPedNativePointer; private static IntPtr GetPedPointer(ICore core, IntPtr nativePointer) { diff --git a/api/AltV.Net.Client/Elements/Entities/LocalVehicle.cs b/api/AltV.Net.Client/Elements/Entities/LocalVehicle.cs index da9d78d49..baafa7639 100644 --- a/api/AltV.Net.Client/Elements/Entities/LocalVehicle.cs +++ b/api/AltV.Net.Client/Elements/Entities/LocalVehicle.cs @@ -9,7 +9,6 @@ namespace AltV.Net.Client.Elements.Entities; public class LocalVehicle : Vehicle, ILocalVehicle { public IntPtr LocalVehicleNativePointer { get; } - public override IntPtr NativePointer => LocalVehicleNativePointer; private static IntPtr GetVehiclePointer(ICore core, IntPtr nativePointer) { diff --git a/api/AltV.Net.Client/Elements/Entities/Marker.cs b/api/AltV.Net.Client/Elements/Entities/Marker.cs index 324f33199..f17cb579f 100644 --- a/api/AltV.Net.Client/Elements/Entities/Marker.cs +++ b/api/AltV.Net.Client/Elements/Entities/Marker.cs @@ -23,7 +23,6 @@ public Marker(ICore core, IntPtr markerPointer, uint id) : base(core, GetWorldOb } public IntPtr MarkerNativePointer { get; } - public override IntPtr NativePointer => MarkerNativePointer; public bool IsGlobal { diff --git a/api/AltV.Net.Client/Elements/Entities/Object.cs b/api/AltV.Net.Client/Elements/Entities/Object.cs index e99696774..ecee1b82e 100644 --- a/api/AltV.Net.Client/Elements/Entities/Object.cs +++ b/api/AltV.Net.Client/Elements/Entities/Object.cs @@ -7,7 +7,6 @@ namespace AltV.Net.Client.Elements.Entities; public class Object : Entity, IObject { public IntPtr ObjectNativePointer { get; private set; } - public override IntPtr NativePointer => ObjectNativePointer; private static IntPtr GetEntityPointer(ICore core, IntPtr pointer) { diff --git a/api/AltV.Net.Client/Elements/Entities/Ped.cs b/api/AltV.Net.Client/Elements/Entities/Ped.cs index 42f3fedca..c62cdf1b5 100644 --- a/api/AltV.Net.Client/Elements/Entities/Ped.cs +++ b/api/AltV.Net.Client/Elements/Entities/Ped.cs @@ -15,7 +15,6 @@ private static IntPtr GetEntityPointer(ICore core, IntPtr pedNativePointer) } public IntPtr PedNativePointer { get; private set; } - public override IntPtr NativePointer => PedNativePointer; public Ped(ICore core, IntPtr pedNativePointer, uint id) : base(core, GetEntityPointer(core, pedNativePointer), id, BaseObjectType.Ped) { diff --git a/api/AltV.Net.Client/Elements/Entities/Player.cs b/api/AltV.Net.Client/Elements/Entities/Player.cs index 36173b5da..65948d6a3 100644 --- a/api/AltV.Net.Client/Elements/Entities/Player.cs +++ b/api/AltV.Net.Client/Elements/Entities/Player.cs @@ -18,7 +18,6 @@ private static IntPtr GetEntityPointer(ICore core, IntPtr playerNativePointer) } public IntPtr PlayerNativePointer { get; private set; } - public override IntPtr NativePointer => PlayerNativePointer; public Player(ICore core, IntPtr playerPointer, uint id) : base(core, GetEntityPointer(core, playerPointer), id, BaseObjectType.Player) { diff --git a/api/AltV.Net.Client/Elements/Entities/RmlDocument.cs b/api/AltV.Net.Client/Elements/Entities/RmlDocument.cs index 9db98860a..b5385d734 100644 --- a/api/AltV.Net.Client/Elements/Entities/RmlDocument.cs +++ b/api/AltV.Net.Client/Elements/Entities/RmlDocument.cs @@ -16,7 +16,6 @@ private static IntPtr GetRmlElementPointer(ICore core, IntPtr rmlDocumentPointer } public IntPtr RmlDocumentNativePointer { get; } - public override IntPtr NativePointer => RmlDocumentNativePointer; public RmlDocument(ICore core, IntPtr rmlDocumentPointer, uint id) : base(core, GetRmlElementPointer(core, rmlDocumentPointer), BaseObjectType.RmlDocument, id) { diff --git a/api/AltV.Net.Client/Elements/Entities/RmlElement.cs b/api/AltV.Net.Client/Elements/Entities/RmlElement.cs index c7dde5eea..4c60ec533 100644 --- a/api/AltV.Net.Client/Elements/Entities/RmlElement.cs +++ b/api/AltV.Net.Client/Elements/Entities/RmlElement.cs @@ -17,7 +17,6 @@ private static IntPtr GetBaseObjectPointer(ICore core, IntPtr rmlElementPointer) } public IntPtr RmlElementNativePointer { get; } - public override IntPtr NativePointer => RmlElementNativePointer; public RmlElement(ICore core, IntPtr rmlElementPointer, uint id) : base(core, GetBaseObjectPointer(core, rmlElementPointer), BaseObjectType.RmlDocument, id) { diff --git a/api/AltV.Net.Client/Elements/Entities/TextLabel.cs b/api/AltV.Net.Client/Elements/Entities/TextLabel.cs index c20371a3e..bb27629f5 100644 --- a/api/AltV.Net.Client/Elements/Entities/TextLabel.cs +++ b/api/AltV.Net.Client/Elements/Entities/TextLabel.cs @@ -24,7 +24,6 @@ public TextLabel(ICore core, IntPtr worldObjectPointer, uint id) : base(core, } public IntPtr TextLabelNativePointer { get; } - public override IntPtr NativePointer => TextLabelNativePointer; public bool IsGlobal { diff --git a/api/AltV.Net.Client/Elements/Entities/Vehicle.cs b/api/AltV.Net.Client/Elements/Entities/Vehicle.cs index 63a664d84..404b2b9a7 100644 --- a/api/AltV.Net.Client/Elements/Entities/Vehicle.cs +++ b/api/AltV.Net.Client/Elements/Entities/Vehicle.cs @@ -16,7 +16,6 @@ private static IntPtr GetEntityPointer(ICore core, IntPtr vehicleNativePointer) } public IntPtr VehicleNativePointer { get; private set; } - public override IntPtr NativePointer => VehicleNativePointer; public Vehicle(ICore core, IntPtr vehiclePointer, uint id) : base(core, GetEntityPointer(core, vehiclePointer), id, BaseObjectType.Vehicle) { diff --git a/api/AltV.Net.Client/Elements/Entities/VirtualEntity.cs b/api/AltV.Net.Client/Elements/Entities/VirtualEntity.cs index 02e129062..b8076cf51 100644 --- a/api/AltV.Net.Client/Elements/Entities/VirtualEntity.cs +++ b/api/AltV.Net.Client/Elements/Entities/VirtualEntity.cs @@ -11,7 +11,6 @@ namespace AltV.Net.Client.Elements.Entities; public class VirtualEntity : WorldObject, IVirtualEntity { public IntPtr VirtualEntityNativePointer { get; } - public override IntPtr NativePointer => VirtualEntityNativePointer; public static IntPtr GetWorldObjectPointer(ICore core, IntPtr virtualEntityNativePointer) { diff --git a/api/AltV.Net.Client/Elements/Entities/VirtualEntityGroup.cs b/api/AltV.Net.Client/Elements/Entities/VirtualEntityGroup.cs index 238be46b1..933d7c6e0 100644 --- a/api/AltV.Net.Client/Elements/Entities/VirtualEntityGroup.cs +++ b/api/AltV.Net.Client/Elements/Entities/VirtualEntityGroup.cs @@ -7,7 +7,6 @@ public class VirtualEntityGroup : BaseObject, IVirtualEntityGroup { public IntPtr VirtualEntityGroupNativePointer { get; } - public override IntPtr NativePointer => VirtualEntityGroupNativePointer; public static IntPtr GetBaseObjectNativePointer(ICore core, IntPtr virtualEntityGroupNativePointer) { diff --git a/api/AltV.Net.Client/Elements/Entities/WebSocketClient.cs b/api/AltV.Net.Client/Elements/Entities/WebSocketClient.cs index c8a094cf9..1b5c704ef 100644 --- a/api/AltV.Net.Client/Elements/Entities/WebSocketClient.cs +++ b/api/AltV.Net.Client/Elements/Entities/WebSocketClient.cs @@ -9,7 +9,6 @@ namespace AltV.Net.Client.Elements.Entities public class WebSocketClient : BaseObject, IWebSocketClient { public IntPtr WebSocketClientNativePointer { get; } - public override IntPtr NativePointer => WebSocketClientNativePointer; private static IntPtr GetBaseObjectNativePointer(ICore core, IntPtr webSocketClientNativePointer) { diff --git a/api/AltV.Net.Client/Elements/Entities/WebView.cs b/api/AltV.Net.Client/Elements/Entities/WebView.cs index 28b39fe7d..9b5ef89bb 100644 --- a/api/AltV.Net.Client/Elements/Entities/WebView.cs +++ b/api/AltV.Net.Client/Elements/Entities/WebView.cs @@ -20,7 +20,6 @@ private static IntPtr GetBaseObjectPointer(ICore core, IntPtr webViewNativePoint } public IntPtr WebViewNativePointer { get; } - public override IntPtr NativePointer => WebViewNativePointer; public WebView(ICore core, IntPtr webViewNativePointer, uint id) : base(core, GetBaseObjectPointer(core, webViewNativePointer), BaseObjectType.Webview, id) { diff --git a/api/AltV.Net.Client/Elements/Entities/WorldObject.cs b/api/AltV.Net.Client/Elements/Entities/WorldObject.cs index be6fb2add..3fa806352 100644 --- a/api/AltV.Net.Client/Elements/Entities/WorldObject.cs +++ b/api/AltV.Net.Client/Elements/Entities/WorldObject.cs @@ -17,7 +17,6 @@ private static IntPtr GetBaseObjectPointer(ICore core, IntPtr worldObjectPointer } public IntPtr WorldObjectNativePointer { get; private set; } - public override IntPtr NativePointer => WorldObjectNativePointer; public WorldObject(ICore core, IntPtr worldObjectPointer, BaseObjectType type, uint id) : base(core, GetBaseObjectPointer(core, worldObjectPointer), type, id) { diff --git a/api/AltV.Net.Client/Elements/Pools/EntityPool.cs b/api/AltV.Net.Client/Elements/Pools/EntityPool.cs index cd0152bf2..38c98d6d9 100644 --- a/api/AltV.Net.Client/Elements/Pools/EntityPool.cs +++ b/api/AltV.Net.Client/Elements/Pools/EntityPool.cs @@ -34,13 +34,13 @@ public EntityPool(IEntityFactory entityFactory) public void Add(TEntity entity) { - _entities[entity.NativePointer] = entity; + _entities[entity.EntityNativePointer] = entity; OnAdd(entity); } public bool Remove(TEntity entity) { - return Remove(entity.NativePointer); + return Remove(entity.EntityNativePointer); } public bool Remove(IntPtr entityPointer) @@ -56,7 +56,7 @@ public bool Remove(IntPtr entityPointer) if (ptr != IntPtr.Zero) { internalEntity.SetCached(ptr); - cache[entity.NativePointer] = new WeakReference(entity); + cache[entity.EntityNativePointer] = new WeakReference(entity); } } } diff --git a/api/AltV.Net/Elements/Entities/Blip.cs b/api/AltV.Net/Elements/Entities/Blip.cs index 19245f411..db6322c6b 100644 --- a/api/AltV.Net/Elements/Entities/Blip.cs +++ b/api/AltV.Net/Elements/Entities/Blip.cs @@ -43,8 +43,6 @@ public IReadOnlyCollection GetTargets() } } - public override IntPtr NativePointer => BlipNativePointer; - public static uint GetId(IntPtr pedPointer) { unsafe diff --git a/api/AltV.Net/Elements/Entities/Checkpoint.cs b/api/AltV.Net/Elements/Entities/Checkpoint.cs index 89ef57071..41a331d16 100644 --- a/api/AltV.Net/Elements/Entities/Checkpoint.cs +++ b/api/AltV.Net/Elements/Entities/Checkpoint.cs @@ -13,7 +13,6 @@ namespace AltV.Net.Elements.Entities public class Checkpoint : ColShape, ICheckpoint { public IntPtr CheckpointNativePointer { get; } - public override IntPtr NativePointer => CheckpointNativePointer; private static IntPtr GetColShapePointer(ICore core, IntPtr nativePointer) { diff --git a/api/AltV.Net/Elements/Entities/ColShape.cs b/api/AltV.Net/Elements/Entities/ColShape.cs index 83fb4383b..549396a9d 100644 --- a/api/AltV.Net/Elements/Entities/ColShape.cs +++ b/api/AltV.Net/Elements/Entities/ColShape.cs @@ -7,7 +7,6 @@ namespace AltV.Net.Elements.Entities public class ColShape : WorldObject, IColShape { public IntPtr ColShapeNativePointer { get; } - public override IntPtr NativePointer => ColShapeNativePointer; private static IntPtr GetWorldObjectPointer(ICore core, IntPtr nativePointer) { diff --git a/api/AltV.Net/Elements/Entities/ConnectionInfo.cs b/api/AltV.Net/Elements/Entities/ConnectionInfo.cs index df2598e47..81cbc6cfc 100644 --- a/api/AltV.Net/Elements/Entities/ConnectionInfo.cs +++ b/api/AltV.Net/Elements/Entities/ConnectionInfo.cs @@ -13,7 +13,6 @@ public class ConnectionInfo : BaseObject, IConnectionInfo { public IntPtr ConnectionInfoNativePointer { get; } - public override IntPtr NativePointer => ConnectionInfoNativePointer; private static IntPtr GetBaseObjectPointer(ICore core, IntPtr virtualEntityGroupNativePointer) { diff --git a/api/AltV.Net/Elements/Entities/Entity.cs b/api/AltV.Net/Elements/Entities/Entity.cs index 0355bcca5..a47236366 100644 --- a/api/AltV.Net/Elements/Entities/Entity.cs +++ b/api/AltV.Net/Elements/Entities/Entity.cs @@ -14,7 +14,6 @@ namespace AltV.Net.Elements.Entities public abstract class Entity : WorldObject, IEntity { public IntPtr EntityNativePointer { get; private set; } - public override IntPtr NativePointer => EntityNativePointer; private static IntPtr GetWorldObjectNativePointer(ICore core, IntPtr nativePointer) { diff --git a/api/AltV.Net/Elements/Entities/Marker.cs b/api/AltV.Net/Elements/Entities/Marker.cs index bf1f2e9b1..8e47a285c 100644 --- a/api/AltV.Net/Elements/Entities/Marker.cs +++ b/api/AltV.Net/Elements/Entities/Marker.cs @@ -9,7 +9,6 @@ namespace AltV.Net.Elements.Entities; public class Marker : WorldObject, IMarker { public IntPtr MarkerNativePointer { get; } - public override IntPtr NativePointer => MarkerNativePointer; private static IntPtr GetWorldObjectPointer(ICore core, IntPtr nativePointer) { diff --git a/api/AltV.Net/Elements/Entities/Object.cs b/api/AltV.Net/Elements/Entities/Object.cs index c04ed15a8..eb32d5de7 100644 --- a/api/AltV.Net/Elements/Entities/Object.cs +++ b/api/AltV.Net/Elements/Entities/Object.cs @@ -6,7 +6,6 @@ namespace AltV.Net.Elements.Entities; public class Object : Entity, IObject { public IntPtr ObjectNativePointer { get; private set; } - public override IntPtr NativePointer => ObjectNativePointer; private static IntPtr GetEntityPointer(ICore core, IntPtr pointer) { diff --git a/api/AltV.Net/Elements/Entities/Ped.cs b/api/AltV.Net/Elements/Entities/Ped.cs index 4eb3b837a..5edf28545 100644 --- a/api/AltV.Net/Elements/Entities/Ped.cs +++ b/api/AltV.Net/Elements/Entities/Ped.cs @@ -7,7 +7,6 @@ namespace AltV.Net.Elements.Entities; public class Ped : Entity, IPed { public IntPtr PedNativePointer { get; private set; } - public override IntPtr NativePointer => PedNativePointer; private static IntPtr GetEntityPointer(ICore core, IntPtr pedPointer) { diff --git a/api/AltV.Net/Elements/Entities/Player.cs b/api/AltV.Net/Elements/Entities/Player.cs index 5c813e750..b06275db1 100644 --- a/api/AltV.Net/Elements/Entities/Player.cs +++ b/api/AltV.Net/Elements/Entities/Player.cs @@ -16,7 +16,6 @@ namespace AltV.Net.Elements.Entities public class Player : Entity, IPlayer { public IntPtr PlayerNativePointer { get; private set; } - public override IntPtr NativePointer => PlayerNativePointer; private static IntPtr GetEntityPointer(ICore core, IntPtr nativePointer) { diff --git a/api/AltV.Net/Elements/Entities/Vehicle.cs b/api/AltV.Net/Elements/Entities/Vehicle.cs index 99f0a5ec8..7d0d3351d 100644 --- a/api/AltV.Net/Elements/Entities/Vehicle.cs +++ b/api/AltV.Net/Elements/Entities/Vehicle.cs @@ -12,7 +12,6 @@ namespace AltV.Net.Elements.Entities public class Vehicle : Entity, IVehicle { public IntPtr VehicleNativePointer { get; private set; } - public override IntPtr NativePointer => VehicleNativePointer; private static IntPtr GetEntityPointer(ICore core, IntPtr nativePointer) { @@ -1496,7 +1495,7 @@ public void SetTimedExplosion(bool state, IPlayer culprit, uint time) unsafe { CheckIfEntityExists(); - Core.Library.Server.Vehicle_SetTimedExplosion(VehicleNativePointer, state ? (byte) 1 : (byte) 0, culprit.NativePointer, time); + Core.Library.Server.Vehicle_SetTimedExplosion(VehicleNativePointer, state ? (byte) 1 : (byte) 0, culprit.PlayerNativePointer, time); } } diff --git a/api/AltV.Net/Elements/Entities/VirtualEntity.cs b/api/AltV.Net/Elements/Entities/VirtualEntity.cs index 7030f0a66..29f69e612 100644 --- a/api/AltV.Net/Elements/Entities/VirtualEntity.cs +++ b/api/AltV.Net/Elements/Entities/VirtualEntity.cs @@ -13,7 +13,6 @@ namespace AltV.Net.Elements.Entities; public class VirtualEntity : WorldObject, IVirtualEntity { public IntPtr VirtualEntityNativePointer { get; } - public override IntPtr NativePointer => VirtualEntityNativePointer; private static IntPtr GetWorldObjectPointer(ICore core, IntPtr virtualEntityNativePointer) { diff --git a/api/AltV.Net/Elements/Entities/VirtualEntityGroup.cs b/api/AltV.Net/Elements/Entities/VirtualEntityGroup.cs index b9fddda64..be64936c7 100644 --- a/api/AltV.Net/Elements/Entities/VirtualEntityGroup.cs +++ b/api/AltV.Net/Elements/Entities/VirtualEntityGroup.cs @@ -5,7 +5,6 @@ namespace AltV.Net.Elements.Entities; public class VirtualEntityGroup : BaseObject, IVirtualEntityGroup { public IntPtr VirtualEntityGroupNativePointer { get; } - public override IntPtr NativePointer => VirtualEntityGroupNativePointer; private static IntPtr GetBaseObjectPointer(ICore core, IntPtr virtualEntityGroupNativePointer) { diff --git a/api/AltV.Net/Elements/Entities/VoiceChannel.cs b/api/AltV.Net/Elements/Entities/VoiceChannel.cs index d0950811d..50b625816 100644 --- a/api/AltV.Net/Elements/Entities/VoiceChannel.cs +++ b/api/AltV.Net/Elements/Entities/VoiceChannel.cs @@ -10,7 +10,6 @@ namespace AltV.Net.Elements.Entities public class VoiceChannel : BaseObject, IVoiceChannel { public IntPtr VoiceChannelNativePointer { get; } - public override IntPtr NativePointer => VoiceChannelNativePointer; private static IntPtr GetBaseObjectPointer(ICore core, IntPtr nativePointer) { @@ -154,7 +153,7 @@ public IReadOnlyCollection Players { CheckIfCallIsValid(); ulong size = 0; - var ptr = Core.Library.Server.VoiceChannel_GetPlayers(NativePointer, &size); + var ptr = Core.Library.Server.VoiceChannel_GetPlayers(VoiceChannelNativePointer, &size); var data = new IntPtr[size]; Marshal.Copy(ptr, data, 0, (int)size); var arr = data.Select(e => (IPlayer)Core.PoolManager.GetOrCreate(Core, e, BaseObjectType.Player)) diff --git a/api/AltV.Net/Elements/Entities/WorldObject.cs b/api/AltV.Net/Elements/Entities/WorldObject.cs index b33660457..983d3b819 100644 --- a/api/AltV.Net/Elements/Entities/WorldObject.cs +++ b/api/AltV.Net/Elements/Entities/WorldObject.cs @@ -8,7 +8,6 @@ namespace AltV.Net.Elements.Entities public abstract class WorldObject : BaseObject, IWorldObject { public IntPtr WorldObjectNativePointer { get; private set; } - public override IntPtr NativePointer => WorldObjectNativePointer; private static IntPtr GetBaseObjectPointer(ICore core, IntPtr nativePointer) { diff --git a/api/AltV.Net/Elements/Pools/EntityPool.cs b/api/AltV.Net/Elements/Pools/EntityPool.cs index d0f850ede..fe3deb700 100644 --- a/api/AltV.Net/Elements/Pools/EntityPool.cs +++ b/api/AltV.Net/Elements/Pools/EntityPool.cs @@ -37,13 +37,13 @@ public TEntity Create(ICore core, IntPtr entityPointer) public void Add(TEntity entity) { - entities[entity.NativePointer] = entity; + entities[entity.EntityNativePointer] = entity; OnAdd(entity); } public bool Remove(TEntity entity) { - return Remove(entity.NativePointer); + return Remove(entity.EntityNativePointer); } public bool Remove(IntPtr entityPointer) @@ -60,7 +60,7 @@ public bool Remove(IntPtr entityPointer) if (ptr != IntPtr.Zero) { internalEntity.SetCached(ptr); - cache[entity.NativePointer] = new WeakReference(entity); + cache[entity.EntityNativePointer] = new WeakReference(entity); } } } From 1552a522b50dd001e42760e8c57e75433262564b Mon Sep 17 00:00:00 2001 From: doxoh Date: Wed, 20 Dec 2023 22:34:13 +0100 Subject: [PATCH 45/75] Revert "refactor(shared): cleanup nativepointer access" This reverts commit 2ad294587d3fe61b15afede5740a212059c4502c. --- api/AltV.Net.Async/AsyncEntityPool.cs | 6 +++--- .../Elements/Entities/Audio.cs | 1 + .../Elements/Entities/AudioFilter.cs | 1 + .../Elements/Entities/AudioOutput.cs | 2 ++ .../Elements/Entities/AudioOutputAttached.cs | 2 ++ .../Elements/Entities/AudioOutputFrontend.cs | 1 + .../Elements/Entities/AudioOutputWorld.cs | 2 ++ .../Elements/Entities/BaseObject.cs | 1 + api/AltV.Net.Client/Elements/Entities/Blip.cs | 1 + .../Elements/Entities/Checkpoint.cs | 1 + .../Elements/Entities/ColShape.cs | 1 + .../Elements/Entities/Entity.cs | 1 + api/AltV.Net.Client/Elements/Entities/Font.cs | 1 + .../Elements/Entities/HttpClient.cs | 19 ++++++++++--------- .../Elements/Entities/LocalObject.cs | 1 + .../Elements/Entities/LocalPed.cs | 1 + .../Elements/Entities/LocalVehicle.cs | 1 + .../Elements/Entities/Marker.cs | 1 + .../Elements/Entities/Object.cs | 1 + api/AltV.Net.Client/Elements/Entities/Ped.cs | 1 + .../Elements/Entities/Player.cs | 1 + .../Elements/Entities/RmlDocument.cs | 1 + .../Elements/Entities/RmlElement.cs | 1 + .../Elements/Entities/TextLabel.cs | 1 + .../Elements/Entities/Vehicle.cs | 1 + .../Elements/Entities/VirtualEntity.cs | 1 + .../Elements/Entities/VirtualEntityGroup.cs | 1 + .../Elements/Entities/WebSocketClient.cs | 1 + .../Elements/Entities/WebView.cs | 1 + .../Elements/Entities/WorldObject.cs | 1 + .../Elements/Pools/EntityPool.cs | 6 +++--- api/AltV.Net/Elements/Entities/Blip.cs | 2 ++ api/AltV.Net/Elements/Entities/Checkpoint.cs | 1 + api/AltV.Net/Elements/Entities/ColShape.cs | 1 + .../Elements/Entities/ConnectionInfo.cs | 1 + api/AltV.Net/Elements/Entities/Entity.cs | 1 + api/AltV.Net/Elements/Entities/Marker.cs | 1 + api/AltV.Net/Elements/Entities/Object.cs | 1 + api/AltV.Net/Elements/Entities/Ped.cs | 1 + api/AltV.Net/Elements/Entities/Player.cs | 1 + api/AltV.Net/Elements/Entities/Vehicle.cs | 3 ++- .../Elements/Entities/VirtualEntity.cs | 1 + .../Elements/Entities/VirtualEntityGroup.cs | 1 + .../Elements/Entities/VoiceChannel.cs | 3 ++- api/AltV.Net/Elements/Entities/WorldObject.cs | 1 + api/AltV.Net/Elements/Pools/EntityPool.cs | 6 +++--- 46 files changed, 67 insertions(+), 20 deletions(-) diff --git a/api/AltV.Net.Async/AsyncEntityPool.cs b/api/AltV.Net.Async/AsyncEntityPool.cs index fbc929fe0..e4c759c6a 100644 --- a/api/AltV.Net.Async/AsyncEntityPool.cs +++ b/api/AltV.Net.Async/AsyncEntityPool.cs @@ -76,7 +76,7 @@ public TEntity Create(ICore core, IntPtr entityPointer) public void Add(TEntity entity) { - entities[entity.EntityNativePointer] = entity; + entities[entity.NativePointer] = entity; if (forceAsync && entity is not AsyncEntity) throw new Exception("Tried to add sync entity to async pool. Probably you used \"new Vehicle\" syntax (should be \"new AsyncVehicle\"), or didn't adapt your custom entity class to new Async API."); OnAdd(entity); @@ -84,7 +84,7 @@ public void Add(TEntity entity) public bool Remove(TEntity entity) { - return Remove(entity.EntityNativePointer); + return Remove(entity.NativePointer); } //TODO: what should happen on failure @@ -101,7 +101,7 @@ public bool Remove(IntPtr entityPointer) if (ptr != IntPtr.Zero) { internalEntity.SetCached(ptr); - cache[entity.EntityNativePointer] = new WeakReference(entity); + cache[entity.NativePointer] = new WeakReference(entity); } } } diff --git a/api/AltV.Net.Client/Elements/Entities/Audio.cs b/api/AltV.Net.Client/Elements/Entities/Audio.cs index bbfa963fe..524e0570b 100644 --- a/api/AltV.Net.Client/Elements/Entities/Audio.cs +++ b/api/AltV.Net.Client/Elements/Entities/Audio.cs @@ -15,6 +15,7 @@ public struct AudioEntity public class Audio : BaseObject, IAudio { public IntPtr AudioNativePointer { get; } + public override IntPtr NativePointer => AudioNativePointer; public static IntPtr GetBaseObjectNativePointer(ICore core, IntPtr audioNativePointer) { diff --git a/api/AltV.Net.Client/Elements/Entities/AudioFilter.cs b/api/AltV.Net.Client/Elements/Entities/AudioFilter.cs index 734b38197..d206d8b78 100644 --- a/api/AltV.Net.Client/Elements/Entities/AudioFilter.cs +++ b/api/AltV.Net.Client/Elements/Entities/AudioFilter.cs @@ -19,6 +19,7 @@ public AudioFilter(ICore core, IntPtr audioFilterNativePointer, uint id) : base( } public IntPtr AudioFilterNativePointer { get; } + public override IntPtr NativePointer => AudioFilterNativePointer; public uint Hash { diff --git a/api/AltV.Net.Client/Elements/Entities/AudioOutput.cs b/api/AltV.Net.Client/Elements/Entities/AudioOutput.cs index 74c1a6394..2334ba048 100644 --- a/api/AltV.Net.Client/Elements/Entities/AudioOutput.cs +++ b/api/AltV.Net.Client/Elements/Entities/AudioOutput.cs @@ -24,6 +24,8 @@ public AudioOutput(ICore core, IntPtr audioOutputNativePointer, BaseObjectType t } public IntPtr AudioOutputNativePointer { get; } + public override IntPtr NativePointer => AudioOutputNativePointer; + public float Volume { diff --git a/api/AltV.Net.Client/Elements/Entities/AudioOutputAttached.cs b/api/AltV.Net.Client/Elements/Entities/AudioOutputAttached.cs index 4d27d369a..3ecfa4cd1 100644 --- a/api/AltV.Net.Client/Elements/Entities/AudioOutputAttached.cs +++ b/api/AltV.Net.Client/Elements/Entities/AudioOutputAttached.cs @@ -42,4 +42,6 @@ public IWorldObject Entity } } } + + public override IntPtr NativePointer => AudioOutputAttachedNativePointer; } \ No newline at end of file diff --git a/api/AltV.Net.Client/Elements/Entities/AudioOutputFrontend.cs b/api/AltV.Net.Client/Elements/Entities/AudioOutputFrontend.cs index 61af84e16..b239701d5 100644 --- a/api/AltV.Net.Client/Elements/Entities/AudioOutputFrontend.cs +++ b/api/AltV.Net.Client/Elements/Entities/AudioOutputFrontend.cs @@ -19,4 +19,5 @@ public AudioOutputFrontend(ICore core, IntPtr audioOutputFrontendNativePointer, } public IntPtr AudioOutputFrontendNativePointer { get; } + public override IntPtr NativePointer => AudioOutputFrontendNativePointer; } \ No newline at end of file diff --git a/api/AltV.Net.Client/Elements/Entities/AudioOutputWorld.cs b/api/AltV.Net.Client/Elements/Entities/AudioOutputWorld.cs index 202573978..a76bd1640 100644 --- a/api/AltV.Net.Client/Elements/Entities/AudioOutputWorld.cs +++ b/api/AltV.Net.Client/Elements/Entities/AudioOutputWorld.cs @@ -40,4 +40,6 @@ public Position Position } } } + + public override IntPtr NativePointer => AudioOutputWorldNativePointer; } \ No newline at end of file diff --git a/api/AltV.Net.Client/Elements/Entities/BaseObject.cs b/api/AltV.Net.Client/Elements/Entities/BaseObject.cs index d87cdcf93..3862b4c57 100644 --- a/api/AltV.Net.Client/Elements/Entities/BaseObject.cs +++ b/api/AltV.Net.Client/Elements/Entities/BaseObject.cs @@ -10,6 +10,7 @@ namespace AltV.Net.Client.Elements.Entities public class BaseObject : SharedBaseObject, IBaseObject { public override IntPtr BaseObjectNativePointer { get; protected set; } + public override IntPtr NativePointer => BaseObjectNativePointer; public override ICore Core { get; } public override BaseObjectType Type { get; } public uint Id { get; } diff --git a/api/AltV.Net.Client/Elements/Entities/Blip.cs b/api/AltV.Net.Client/Elements/Entities/Blip.cs index 4c0b92f59..be33b37b5 100644 --- a/api/AltV.Net.Client/Elements/Entities/Blip.cs +++ b/api/AltV.Net.Client/Elements/Entities/Blip.cs @@ -11,6 +11,7 @@ namespace AltV.Net.Client.Elements.Entities public class Blip : WorldObject, IBlip { public IntPtr BlipNativePointer { get; } + public override IntPtr NativePointer => BlipNativePointer; private static IntPtr GetWorldObjectPointer(ICore core, IntPtr nativePointer) { diff --git a/api/AltV.Net.Client/Elements/Entities/Checkpoint.cs b/api/AltV.Net.Client/Elements/Entities/Checkpoint.cs index 38494e35b..6c0156a59 100644 --- a/api/AltV.Net.Client/Elements/Entities/Checkpoint.cs +++ b/api/AltV.Net.Client/Elements/Entities/Checkpoint.cs @@ -8,6 +8,7 @@ namespace AltV.Net.Client.Elements.Entities public class Checkpoint : ColShape, ICheckpoint { public IntPtr CheckpointNativePointer { get; } + public override IntPtr NativePointer => CheckpointNativePointer; private static IntPtr GetColShapePointer(ICore core, IntPtr nativePointer) { diff --git a/api/AltV.Net.Client/Elements/Entities/ColShape.cs b/api/AltV.Net.Client/Elements/Entities/ColShape.cs index dae43c7d1..6ba451602 100644 --- a/api/AltV.Net.Client/Elements/Entities/ColShape.cs +++ b/api/AltV.Net.Client/Elements/Entities/ColShape.cs @@ -8,6 +8,7 @@ namespace AltV.Net.Client.Elements.Entities public class ColShape : WorldObject, IColShape { public IntPtr ColShapeNativePointer { get; } + public override IntPtr NativePointer => ColShapeNativePointer; private static IntPtr GetWorldObjectPointer(ICore core, IntPtr nativePointer) { diff --git a/api/AltV.Net.Client/Elements/Entities/Entity.cs b/api/AltV.Net.Client/Elements/Entities/Entity.cs index 67941f9e9..11bfc79f1 100644 --- a/api/AltV.Net.Client/Elements/Entities/Entity.cs +++ b/api/AltV.Net.Client/Elements/Entities/Entity.cs @@ -21,6 +21,7 @@ private static IntPtr GetWorldObjectPointer(ICore core, IntPtr entityPointer) } public IntPtr EntityNativePointer { get; private set; } + public override IntPtr NativePointer => EntityNativePointer; public Entity(ICore core, IntPtr entityPointer, uint id, BaseObjectType type) : base(core, GetWorldObjectPointer(core, entityPointer), type, id) { diff --git a/api/AltV.Net.Client/Elements/Entities/Font.cs b/api/AltV.Net.Client/Elements/Entities/Font.cs index 5908206ac..b35fb5966 100644 --- a/api/AltV.Net.Client/Elements/Entities/Font.cs +++ b/api/AltV.Net.Client/Elements/Entities/Font.cs @@ -19,4 +19,5 @@ public Font(ICore core, IntPtr fontNativePointer, uint id) : base(core, GetBaseO } public IntPtr FontNativePointer { get; } + public override IntPtr NativePointer => FontNativePointer; } \ No newline at end of file diff --git a/api/AltV.Net.Client/Elements/Entities/HttpClient.cs b/api/AltV.Net.Client/Elements/Entities/HttpClient.cs index bfea8d0b9..e8ea41e2a 100644 --- a/api/AltV.Net.Client/Elements/Entities/HttpClient.cs +++ b/api/AltV.Net.Client/Elements/Entities/HttpClient.cs @@ -10,6 +10,7 @@ namespace AltV.Net.Client.Elements.Entities public class HttpClient : BaseObject, IHttpClient { public IntPtr HttpClientNativePointer { get; } + public override IntPtr NativePointer => HttpClientNativePointer; private static IntPtr GetBaseObjectNativePointer(ICore core, IntPtr httpClientNativePointer) { @@ -93,7 +94,7 @@ void ResolveTask(int statusCode, string body, IntPtr headerKeys, IntPtr headerVa HttpResponseModuleDelegate resolveTask = ResolveTask; handle = GCHandle.Alloc(resolveTask); var urlPtr = MemoryUtils.StringToHGlobalUtf8(url); - Core.Library.Client.HttpClient_Get(HttpClientNativePointer, urlPtr, resolveTask); + Core.Library.Client.HttpClient_Get(NativePointer, urlPtr, resolveTask); Marshal.FreeHGlobal(urlPtr); } @@ -122,7 +123,7 @@ void ResolveTask(int statusCode, string body, IntPtr headerKeys, IntPtr headerVa HttpResponseModuleDelegate resolveTask = ResolveTask; handle = GCHandle.Alloc(resolveTask); var urlPtr = MemoryUtils.StringToHGlobalUtf8(url); - Core.Library.Client.HttpClient_Head(HttpClientNativePointer, urlPtr, resolveTask); + Core.Library.Client.HttpClient_Head(NativePointer, urlPtr, resolveTask); Marshal.FreeHGlobal(urlPtr); } @@ -152,7 +153,7 @@ void ResolveTask(int statusCode, string body, IntPtr headerKeys, IntPtr headerVa handle = GCHandle.Alloc(resolveTask); var urlPtr = MemoryUtils.StringToHGlobalUtf8(url); var bodyPtr = MemoryUtils.StringToHGlobalUtf8(body); - Core.Library.Client.HttpClient_Connect(HttpClientNativePointer, urlPtr, bodyPtr, resolveTask); + Core.Library.Client.HttpClient_Connect(NativePointer, urlPtr, bodyPtr, resolveTask); Marshal.FreeHGlobal(urlPtr); Marshal.FreeHGlobal(bodyPtr); } @@ -183,7 +184,7 @@ void ResolveTask(int statusCode, string body, IntPtr headerKeys, IntPtr headerVa handle = GCHandle.Alloc(resolveTask); var urlPtr = MemoryUtils.StringToHGlobalUtf8(url); var bodyPtr = MemoryUtils.StringToHGlobalUtf8(body); - Core.Library.Client.HttpClient_Delete(HttpClientNativePointer, urlPtr, bodyPtr, resolveTask); + Core.Library.Client.HttpClient_Delete(NativePointer, urlPtr, bodyPtr, resolveTask); Marshal.FreeHGlobal(urlPtr); Marshal.FreeHGlobal(bodyPtr); } @@ -214,7 +215,7 @@ void ResolveTask(int statusCode, string body, IntPtr headerKeys, IntPtr headerVa handle = GCHandle.Alloc(resolveTask); var urlPtr = MemoryUtils.StringToHGlobalUtf8(url); var bodyPtr = MemoryUtils.StringToHGlobalUtf8(body); - Core.Library.Client.HttpClient_Options(HttpClientNativePointer, urlPtr, bodyPtr, resolveTask); + Core.Library.Client.HttpClient_Options(NativePointer, urlPtr, bodyPtr, resolveTask); Marshal.FreeHGlobal(urlPtr); Marshal.FreeHGlobal(bodyPtr); } @@ -245,7 +246,7 @@ void ResolveTask(int statusCode, string body, IntPtr headerKeys, IntPtr headerVa handle = GCHandle.Alloc(resolveTask); var urlPtr = MemoryUtils.StringToHGlobalUtf8(url); var bodyPtr = MemoryUtils.StringToHGlobalUtf8(body); - Core.Library.Client.HttpClient_Patch(HttpClientNativePointer, urlPtr, bodyPtr, resolveTask); + Core.Library.Client.HttpClient_Patch(NativePointer, urlPtr, bodyPtr, resolveTask); Marshal.FreeHGlobal(urlPtr); Marshal.FreeHGlobal(bodyPtr); } @@ -276,7 +277,7 @@ void ResolveTask(int statusCode, string body, IntPtr headerKeys, IntPtr headerVa handle = GCHandle.Alloc(resolveTask); var urlPtr = MemoryUtils.StringToHGlobalUtf8(url); var bodyPtr = MemoryUtils.StringToHGlobalUtf8(body); - Core.Library.Client.HttpClient_Post(HttpClientNativePointer, urlPtr, bodyPtr, resolveTask); + Core.Library.Client.HttpClient_Post(NativePointer, urlPtr, bodyPtr, resolveTask); Marshal.FreeHGlobal(urlPtr); Marshal.FreeHGlobal(bodyPtr); } @@ -307,7 +308,7 @@ void ResolveTask(int statusCode, string body, IntPtr headerKeys, IntPtr headerVa handle = GCHandle.Alloc(resolveTask); var urlPtr = MemoryUtils.StringToHGlobalUtf8(url); var bodyPtr = MemoryUtils.StringToHGlobalUtf8(body); - Core.Library.Client.HttpClient_Put(HttpClientNativePointer, urlPtr, bodyPtr, resolveTask); + Core.Library.Client.HttpClient_Put(NativePointer, urlPtr, bodyPtr, resolveTask); Marshal.FreeHGlobal(urlPtr); Marshal.FreeHGlobal(bodyPtr); } @@ -338,7 +339,7 @@ void ResolveTask(int statusCode, string body, IntPtr headerKeys, IntPtr headerVa handle = GCHandle.Alloc(resolveTask); var urlPtr = MemoryUtils.StringToHGlobalUtf8(url); var bodyPtr = MemoryUtils.StringToHGlobalUtf8(body); - Core.Library.Client.HttpClient_Trace(HttpClientNativePointer, urlPtr, bodyPtr, resolveTask); + Core.Library.Client.HttpClient_Trace(NativePointer, urlPtr, bodyPtr, resolveTask); Marshal.FreeHGlobal(urlPtr); Marshal.FreeHGlobal(bodyPtr); } diff --git a/api/AltV.Net.Client/Elements/Entities/LocalObject.cs b/api/AltV.Net.Client/Elements/Entities/LocalObject.cs index a9f31dffd..6c3ad0cfd 100644 --- a/api/AltV.Net.Client/Elements/Entities/LocalObject.cs +++ b/api/AltV.Net.Client/Elements/Entities/LocalObject.cs @@ -16,6 +16,7 @@ private static IntPtr GetObjectPointer(ICore core, IntPtr LocalObjectNativePoint } public IntPtr LocalObjectNativePointer { get; } + public override IntPtr NativePointer => LocalObjectNativePointer; public LocalObject(ICore core, IntPtr objectPointer, uint id) : base(core, GetObjectPointer(core, objectPointer), BaseObjectType.LocalObject, id) { diff --git a/api/AltV.Net.Client/Elements/Entities/LocalPed.cs b/api/AltV.Net.Client/Elements/Entities/LocalPed.cs index eda432cfc..656551c2f 100644 --- a/api/AltV.Net.Client/Elements/Entities/LocalPed.cs +++ b/api/AltV.Net.Client/Elements/Entities/LocalPed.cs @@ -7,6 +7,7 @@ namespace AltV.Net.Client.Elements.Entities; public class LocalPed : Ped, ILocalPed { public IntPtr LocalPedNativePointer { get; } + public override IntPtr NativePointer => LocalPedNativePointer; private static IntPtr GetPedPointer(ICore core, IntPtr nativePointer) { diff --git a/api/AltV.Net.Client/Elements/Entities/LocalVehicle.cs b/api/AltV.Net.Client/Elements/Entities/LocalVehicle.cs index baafa7639..da9d78d49 100644 --- a/api/AltV.Net.Client/Elements/Entities/LocalVehicle.cs +++ b/api/AltV.Net.Client/Elements/Entities/LocalVehicle.cs @@ -9,6 +9,7 @@ namespace AltV.Net.Client.Elements.Entities; public class LocalVehicle : Vehicle, ILocalVehicle { public IntPtr LocalVehicleNativePointer { get; } + public override IntPtr NativePointer => LocalVehicleNativePointer; private static IntPtr GetVehiclePointer(ICore core, IntPtr nativePointer) { diff --git a/api/AltV.Net.Client/Elements/Entities/Marker.cs b/api/AltV.Net.Client/Elements/Entities/Marker.cs index f17cb579f..324f33199 100644 --- a/api/AltV.Net.Client/Elements/Entities/Marker.cs +++ b/api/AltV.Net.Client/Elements/Entities/Marker.cs @@ -23,6 +23,7 @@ public Marker(ICore core, IntPtr markerPointer, uint id) : base(core, GetWorldOb } public IntPtr MarkerNativePointer { get; } + public override IntPtr NativePointer => MarkerNativePointer; public bool IsGlobal { diff --git a/api/AltV.Net.Client/Elements/Entities/Object.cs b/api/AltV.Net.Client/Elements/Entities/Object.cs index ecee1b82e..e99696774 100644 --- a/api/AltV.Net.Client/Elements/Entities/Object.cs +++ b/api/AltV.Net.Client/Elements/Entities/Object.cs @@ -7,6 +7,7 @@ namespace AltV.Net.Client.Elements.Entities; public class Object : Entity, IObject { public IntPtr ObjectNativePointer { get; private set; } + public override IntPtr NativePointer => ObjectNativePointer; private static IntPtr GetEntityPointer(ICore core, IntPtr pointer) { diff --git a/api/AltV.Net.Client/Elements/Entities/Ped.cs b/api/AltV.Net.Client/Elements/Entities/Ped.cs index c62cdf1b5..42f3fedca 100644 --- a/api/AltV.Net.Client/Elements/Entities/Ped.cs +++ b/api/AltV.Net.Client/Elements/Entities/Ped.cs @@ -15,6 +15,7 @@ private static IntPtr GetEntityPointer(ICore core, IntPtr pedNativePointer) } public IntPtr PedNativePointer { get; private set; } + public override IntPtr NativePointer => PedNativePointer; public Ped(ICore core, IntPtr pedNativePointer, uint id) : base(core, GetEntityPointer(core, pedNativePointer), id, BaseObjectType.Ped) { diff --git a/api/AltV.Net.Client/Elements/Entities/Player.cs b/api/AltV.Net.Client/Elements/Entities/Player.cs index 65948d6a3..36173b5da 100644 --- a/api/AltV.Net.Client/Elements/Entities/Player.cs +++ b/api/AltV.Net.Client/Elements/Entities/Player.cs @@ -18,6 +18,7 @@ private static IntPtr GetEntityPointer(ICore core, IntPtr playerNativePointer) } public IntPtr PlayerNativePointer { get; private set; } + public override IntPtr NativePointer => PlayerNativePointer; public Player(ICore core, IntPtr playerPointer, uint id) : base(core, GetEntityPointer(core, playerPointer), id, BaseObjectType.Player) { diff --git a/api/AltV.Net.Client/Elements/Entities/RmlDocument.cs b/api/AltV.Net.Client/Elements/Entities/RmlDocument.cs index b5385d734..9db98860a 100644 --- a/api/AltV.Net.Client/Elements/Entities/RmlDocument.cs +++ b/api/AltV.Net.Client/Elements/Entities/RmlDocument.cs @@ -16,6 +16,7 @@ private static IntPtr GetRmlElementPointer(ICore core, IntPtr rmlDocumentPointer } public IntPtr RmlDocumentNativePointer { get; } + public override IntPtr NativePointer => RmlDocumentNativePointer; public RmlDocument(ICore core, IntPtr rmlDocumentPointer, uint id) : base(core, GetRmlElementPointer(core, rmlDocumentPointer), BaseObjectType.RmlDocument, id) { diff --git a/api/AltV.Net.Client/Elements/Entities/RmlElement.cs b/api/AltV.Net.Client/Elements/Entities/RmlElement.cs index 4c60ec533..c7dde5eea 100644 --- a/api/AltV.Net.Client/Elements/Entities/RmlElement.cs +++ b/api/AltV.Net.Client/Elements/Entities/RmlElement.cs @@ -17,6 +17,7 @@ private static IntPtr GetBaseObjectPointer(ICore core, IntPtr rmlElementPointer) } public IntPtr RmlElementNativePointer { get; } + public override IntPtr NativePointer => RmlElementNativePointer; public RmlElement(ICore core, IntPtr rmlElementPointer, uint id) : base(core, GetBaseObjectPointer(core, rmlElementPointer), BaseObjectType.RmlDocument, id) { diff --git a/api/AltV.Net.Client/Elements/Entities/TextLabel.cs b/api/AltV.Net.Client/Elements/Entities/TextLabel.cs index bb27629f5..c20371a3e 100644 --- a/api/AltV.Net.Client/Elements/Entities/TextLabel.cs +++ b/api/AltV.Net.Client/Elements/Entities/TextLabel.cs @@ -24,6 +24,7 @@ public TextLabel(ICore core, IntPtr worldObjectPointer, uint id) : base(core, } public IntPtr TextLabelNativePointer { get; } + public override IntPtr NativePointer => TextLabelNativePointer; public bool IsGlobal { diff --git a/api/AltV.Net.Client/Elements/Entities/Vehicle.cs b/api/AltV.Net.Client/Elements/Entities/Vehicle.cs index 404b2b9a7..63a664d84 100644 --- a/api/AltV.Net.Client/Elements/Entities/Vehicle.cs +++ b/api/AltV.Net.Client/Elements/Entities/Vehicle.cs @@ -16,6 +16,7 @@ private static IntPtr GetEntityPointer(ICore core, IntPtr vehicleNativePointer) } public IntPtr VehicleNativePointer { get; private set; } + public override IntPtr NativePointer => VehicleNativePointer; public Vehicle(ICore core, IntPtr vehiclePointer, uint id) : base(core, GetEntityPointer(core, vehiclePointer), id, BaseObjectType.Vehicle) { diff --git a/api/AltV.Net.Client/Elements/Entities/VirtualEntity.cs b/api/AltV.Net.Client/Elements/Entities/VirtualEntity.cs index b8076cf51..02e129062 100644 --- a/api/AltV.Net.Client/Elements/Entities/VirtualEntity.cs +++ b/api/AltV.Net.Client/Elements/Entities/VirtualEntity.cs @@ -11,6 +11,7 @@ namespace AltV.Net.Client.Elements.Entities; public class VirtualEntity : WorldObject, IVirtualEntity { public IntPtr VirtualEntityNativePointer { get; } + public override IntPtr NativePointer => VirtualEntityNativePointer; public static IntPtr GetWorldObjectPointer(ICore core, IntPtr virtualEntityNativePointer) { diff --git a/api/AltV.Net.Client/Elements/Entities/VirtualEntityGroup.cs b/api/AltV.Net.Client/Elements/Entities/VirtualEntityGroup.cs index 933d7c6e0..238be46b1 100644 --- a/api/AltV.Net.Client/Elements/Entities/VirtualEntityGroup.cs +++ b/api/AltV.Net.Client/Elements/Entities/VirtualEntityGroup.cs @@ -7,6 +7,7 @@ public class VirtualEntityGroup : BaseObject, IVirtualEntityGroup { public IntPtr VirtualEntityGroupNativePointer { get; } + public override IntPtr NativePointer => VirtualEntityGroupNativePointer; public static IntPtr GetBaseObjectNativePointer(ICore core, IntPtr virtualEntityGroupNativePointer) { diff --git a/api/AltV.Net.Client/Elements/Entities/WebSocketClient.cs b/api/AltV.Net.Client/Elements/Entities/WebSocketClient.cs index 1b5c704ef..c8a094cf9 100644 --- a/api/AltV.Net.Client/Elements/Entities/WebSocketClient.cs +++ b/api/AltV.Net.Client/Elements/Entities/WebSocketClient.cs @@ -9,6 +9,7 @@ namespace AltV.Net.Client.Elements.Entities public class WebSocketClient : BaseObject, IWebSocketClient { public IntPtr WebSocketClientNativePointer { get; } + public override IntPtr NativePointer => WebSocketClientNativePointer; private static IntPtr GetBaseObjectNativePointer(ICore core, IntPtr webSocketClientNativePointer) { diff --git a/api/AltV.Net.Client/Elements/Entities/WebView.cs b/api/AltV.Net.Client/Elements/Entities/WebView.cs index 9b5ef89bb..28b39fe7d 100644 --- a/api/AltV.Net.Client/Elements/Entities/WebView.cs +++ b/api/AltV.Net.Client/Elements/Entities/WebView.cs @@ -20,6 +20,7 @@ private static IntPtr GetBaseObjectPointer(ICore core, IntPtr webViewNativePoint } public IntPtr WebViewNativePointer { get; } + public override IntPtr NativePointer => WebViewNativePointer; public WebView(ICore core, IntPtr webViewNativePointer, uint id) : base(core, GetBaseObjectPointer(core, webViewNativePointer), BaseObjectType.Webview, id) { diff --git a/api/AltV.Net.Client/Elements/Entities/WorldObject.cs b/api/AltV.Net.Client/Elements/Entities/WorldObject.cs index 3fa806352..be6fb2add 100644 --- a/api/AltV.Net.Client/Elements/Entities/WorldObject.cs +++ b/api/AltV.Net.Client/Elements/Entities/WorldObject.cs @@ -17,6 +17,7 @@ private static IntPtr GetBaseObjectPointer(ICore core, IntPtr worldObjectPointer } public IntPtr WorldObjectNativePointer { get; private set; } + public override IntPtr NativePointer => WorldObjectNativePointer; public WorldObject(ICore core, IntPtr worldObjectPointer, BaseObjectType type, uint id) : base(core, GetBaseObjectPointer(core, worldObjectPointer), type, id) { diff --git a/api/AltV.Net.Client/Elements/Pools/EntityPool.cs b/api/AltV.Net.Client/Elements/Pools/EntityPool.cs index 38c98d6d9..cd0152bf2 100644 --- a/api/AltV.Net.Client/Elements/Pools/EntityPool.cs +++ b/api/AltV.Net.Client/Elements/Pools/EntityPool.cs @@ -34,13 +34,13 @@ public EntityPool(IEntityFactory entityFactory) public void Add(TEntity entity) { - _entities[entity.EntityNativePointer] = entity; + _entities[entity.NativePointer] = entity; OnAdd(entity); } public bool Remove(TEntity entity) { - return Remove(entity.EntityNativePointer); + return Remove(entity.NativePointer); } public bool Remove(IntPtr entityPointer) @@ -56,7 +56,7 @@ public bool Remove(IntPtr entityPointer) if (ptr != IntPtr.Zero) { internalEntity.SetCached(ptr); - cache[entity.EntityNativePointer] = new WeakReference(entity); + cache[entity.NativePointer] = new WeakReference(entity); } } } diff --git a/api/AltV.Net/Elements/Entities/Blip.cs b/api/AltV.Net/Elements/Entities/Blip.cs index db6322c6b..19245f411 100644 --- a/api/AltV.Net/Elements/Entities/Blip.cs +++ b/api/AltV.Net/Elements/Entities/Blip.cs @@ -43,6 +43,8 @@ public IReadOnlyCollection GetTargets() } } + public override IntPtr NativePointer => BlipNativePointer; + public static uint GetId(IntPtr pedPointer) { unsafe diff --git a/api/AltV.Net/Elements/Entities/Checkpoint.cs b/api/AltV.Net/Elements/Entities/Checkpoint.cs index 41a331d16..89ef57071 100644 --- a/api/AltV.Net/Elements/Entities/Checkpoint.cs +++ b/api/AltV.Net/Elements/Entities/Checkpoint.cs @@ -13,6 +13,7 @@ namespace AltV.Net.Elements.Entities public class Checkpoint : ColShape, ICheckpoint { public IntPtr CheckpointNativePointer { get; } + public override IntPtr NativePointer => CheckpointNativePointer; private static IntPtr GetColShapePointer(ICore core, IntPtr nativePointer) { diff --git a/api/AltV.Net/Elements/Entities/ColShape.cs b/api/AltV.Net/Elements/Entities/ColShape.cs index 549396a9d..83fb4383b 100644 --- a/api/AltV.Net/Elements/Entities/ColShape.cs +++ b/api/AltV.Net/Elements/Entities/ColShape.cs @@ -7,6 +7,7 @@ namespace AltV.Net.Elements.Entities public class ColShape : WorldObject, IColShape { public IntPtr ColShapeNativePointer { get; } + public override IntPtr NativePointer => ColShapeNativePointer; private static IntPtr GetWorldObjectPointer(ICore core, IntPtr nativePointer) { diff --git a/api/AltV.Net/Elements/Entities/ConnectionInfo.cs b/api/AltV.Net/Elements/Entities/ConnectionInfo.cs index 81cbc6cfc..df2598e47 100644 --- a/api/AltV.Net/Elements/Entities/ConnectionInfo.cs +++ b/api/AltV.Net/Elements/Entities/ConnectionInfo.cs @@ -13,6 +13,7 @@ public class ConnectionInfo : BaseObject, IConnectionInfo { public IntPtr ConnectionInfoNativePointer { get; } + public override IntPtr NativePointer => ConnectionInfoNativePointer; private static IntPtr GetBaseObjectPointer(ICore core, IntPtr virtualEntityGroupNativePointer) { diff --git a/api/AltV.Net/Elements/Entities/Entity.cs b/api/AltV.Net/Elements/Entities/Entity.cs index a47236366..0355bcca5 100644 --- a/api/AltV.Net/Elements/Entities/Entity.cs +++ b/api/AltV.Net/Elements/Entities/Entity.cs @@ -14,6 +14,7 @@ namespace AltV.Net.Elements.Entities public abstract class Entity : WorldObject, IEntity { public IntPtr EntityNativePointer { get; private set; } + public override IntPtr NativePointer => EntityNativePointer; private static IntPtr GetWorldObjectNativePointer(ICore core, IntPtr nativePointer) { diff --git a/api/AltV.Net/Elements/Entities/Marker.cs b/api/AltV.Net/Elements/Entities/Marker.cs index 8e47a285c..bf1f2e9b1 100644 --- a/api/AltV.Net/Elements/Entities/Marker.cs +++ b/api/AltV.Net/Elements/Entities/Marker.cs @@ -9,6 +9,7 @@ namespace AltV.Net.Elements.Entities; public class Marker : WorldObject, IMarker { public IntPtr MarkerNativePointer { get; } + public override IntPtr NativePointer => MarkerNativePointer; private static IntPtr GetWorldObjectPointer(ICore core, IntPtr nativePointer) { diff --git a/api/AltV.Net/Elements/Entities/Object.cs b/api/AltV.Net/Elements/Entities/Object.cs index eb32d5de7..c04ed15a8 100644 --- a/api/AltV.Net/Elements/Entities/Object.cs +++ b/api/AltV.Net/Elements/Entities/Object.cs @@ -6,6 +6,7 @@ namespace AltV.Net.Elements.Entities; public class Object : Entity, IObject { public IntPtr ObjectNativePointer { get; private set; } + public override IntPtr NativePointer => ObjectNativePointer; private static IntPtr GetEntityPointer(ICore core, IntPtr pointer) { diff --git a/api/AltV.Net/Elements/Entities/Ped.cs b/api/AltV.Net/Elements/Entities/Ped.cs index 5edf28545..4eb3b837a 100644 --- a/api/AltV.Net/Elements/Entities/Ped.cs +++ b/api/AltV.Net/Elements/Entities/Ped.cs @@ -7,6 +7,7 @@ namespace AltV.Net.Elements.Entities; public class Ped : Entity, IPed { public IntPtr PedNativePointer { get; private set; } + public override IntPtr NativePointer => PedNativePointer; private static IntPtr GetEntityPointer(ICore core, IntPtr pedPointer) { diff --git a/api/AltV.Net/Elements/Entities/Player.cs b/api/AltV.Net/Elements/Entities/Player.cs index b06275db1..5c813e750 100644 --- a/api/AltV.Net/Elements/Entities/Player.cs +++ b/api/AltV.Net/Elements/Entities/Player.cs @@ -16,6 +16,7 @@ namespace AltV.Net.Elements.Entities public class Player : Entity, IPlayer { public IntPtr PlayerNativePointer { get; private set; } + public override IntPtr NativePointer => PlayerNativePointer; private static IntPtr GetEntityPointer(ICore core, IntPtr nativePointer) { diff --git a/api/AltV.Net/Elements/Entities/Vehicle.cs b/api/AltV.Net/Elements/Entities/Vehicle.cs index 7d0d3351d..99f0a5ec8 100644 --- a/api/AltV.Net/Elements/Entities/Vehicle.cs +++ b/api/AltV.Net/Elements/Entities/Vehicle.cs @@ -12,6 +12,7 @@ namespace AltV.Net.Elements.Entities public class Vehicle : Entity, IVehicle { public IntPtr VehicleNativePointer { get; private set; } + public override IntPtr NativePointer => VehicleNativePointer; private static IntPtr GetEntityPointer(ICore core, IntPtr nativePointer) { @@ -1495,7 +1496,7 @@ public void SetTimedExplosion(bool state, IPlayer culprit, uint time) unsafe { CheckIfEntityExists(); - Core.Library.Server.Vehicle_SetTimedExplosion(VehicleNativePointer, state ? (byte) 1 : (byte) 0, culprit.PlayerNativePointer, time); + Core.Library.Server.Vehicle_SetTimedExplosion(VehicleNativePointer, state ? (byte) 1 : (byte) 0, culprit.NativePointer, time); } } diff --git a/api/AltV.Net/Elements/Entities/VirtualEntity.cs b/api/AltV.Net/Elements/Entities/VirtualEntity.cs index 29f69e612..7030f0a66 100644 --- a/api/AltV.Net/Elements/Entities/VirtualEntity.cs +++ b/api/AltV.Net/Elements/Entities/VirtualEntity.cs @@ -13,6 +13,7 @@ namespace AltV.Net.Elements.Entities; public class VirtualEntity : WorldObject, IVirtualEntity { public IntPtr VirtualEntityNativePointer { get; } + public override IntPtr NativePointer => VirtualEntityNativePointer; private static IntPtr GetWorldObjectPointer(ICore core, IntPtr virtualEntityNativePointer) { diff --git a/api/AltV.Net/Elements/Entities/VirtualEntityGroup.cs b/api/AltV.Net/Elements/Entities/VirtualEntityGroup.cs index be64936c7..b9fddda64 100644 --- a/api/AltV.Net/Elements/Entities/VirtualEntityGroup.cs +++ b/api/AltV.Net/Elements/Entities/VirtualEntityGroup.cs @@ -5,6 +5,7 @@ namespace AltV.Net.Elements.Entities; public class VirtualEntityGroup : BaseObject, IVirtualEntityGroup { public IntPtr VirtualEntityGroupNativePointer { get; } + public override IntPtr NativePointer => VirtualEntityGroupNativePointer; private static IntPtr GetBaseObjectPointer(ICore core, IntPtr virtualEntityGroupNativePointer) { diff --git a/api/AltV.Net/Elements/Entities/VoiceChannel.cs b/api/AltV.Net/Elements/Entities/VoiceChannel.cs index 50b625816..d0950811d 100644 --- a/api/AltV.Net/Elements/Entities/VoiceChannel.cs +++ b/api/AltV.Net/Elements/Entities/VoiceChannel.cs @@ -10,6 +10,7 @@ namespace AltV.Net.Elements.Entities public class VoiceChannel : BaseObject, IVoiceChannel { public IntPtr VoiceChannelNativePointer { get; } + public override IntPtr NativePointer => VoiceChannelNativePointer; private static IntPtr GetBaseObjectPointer(ICore core, IntPtr nativePointer) { @@ -153,7 +154,7 @@ public IReadOnlyCollection Players { CheckIfCallIsValid(); ulong size = 0; - var ptr = Core.Library.Server.VoiceChannel_GetPlayers(VoiceChannelNativePointer, &size); + var ptr = Core.Library.Server.VoiceChannel_GetPlayers(NativePointer, &size); var data = new IntPtr[size]; Marshal.Copy(ptr, data, 0, (int)size); var arr = data.Select(e => (IPlayer)Core.PoolManager.GetOrCreate(Core, e, BaseObjectType.Player)) diff --git a/api/AltV.Net/Elements/Entities/WorldObject.cs b/api/AltV.Net/Elements/Entities/WorldObject.cs index 983d3b819..b33660457 100644 --- a/api/AltV.Net/Elements/Entities/WorldObject.cs +++ b/api/AltV.Net/Elements/Entities/WorldObject.cs @@ -8,6 +8,7 @@ namespace AltV.Net.Elements.Entities public abstract class WorldObject : BaseObject, IWorldObject { public IntPtr WorldObjectNativePointer { get; private set; } + public override IntPtr NativePointer => WorldObjectNativePointer; private static IntPtr GetBaseObjectPointer(ICore core, IntPtr nativePointer) { diff --git a/api/AltV.Net/Elements/Pools/EntityPool.cs b/api/AltV.Net/Elements/Pools/EntityPool.cs index fe3deb700..d0f850ede 100644 --- a/api/AltV.Net/Elements/Pools/EntityPool.cs +++ b/api/AltV.Net/Elements/Pools/EntityPool.cs @@ -37,13 +37,13 @@ public TEntity Create(ICore core, IntPtr entityPointer) public void Add(TEntity entity) { - entities[entity.EntityNativePointer] = entity; + entities[entity.NativePointer] = entity; OnAdd(entity); } public bool Remove(TEntity entity) { - return Remove(entity.EntityNativePointer); + return Remove(entity.NativePointer); } public bool Remove(IntPtr entityPointer) @@ -60,7 +60,7 @@ public bool Remove(IntPtr entityPointer) if (ptr != IntPtr.Zero) { internalEntity.SetCached(ptr); - cache[entity.EntityNativePointer] = new WeakReference(entity); + cache[entity.NativePointer] = new WeakReference(entity); } } } From 5963dfd67edc4643561fb3d8108fb680e4281503 Mon Sep 17 00:00:00 2001 From: doxoh Date: Wed, 20 Dec 2023 22:52:48 +0100 Subject: [PATCH 46/75] chore: bump runtime --- runtime | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime b/runtime index 512be5226..5376b2c0f 160000 --- a/runtime +++ b/runtime @@ -1 +1 @@ -Subproject commit 512be522616414c60ee5fd51cf3bea92aed95f90 +Subproject commit 5376b2c0fb92ec4771a47534331e2e092b4c1bc1 From f3b3897f094481e5105bcea654bed9ba02907c1e Mon Sep 17 00:00:00 2001 From: doxoh Date: Wed, 20 Dec 2023 23:07:49 +0100 Subject: [PATCH 47/75] feat(shared): make baseobject SyncedMetaData obsolete --- api/AltV.Net.Shared/Elements/Entities/ISharedBaseObject.cs | 6 ++++++ api/AltV.Net.Shared/Elements/Entities/SharedBaseObject.cs | 6 ++++++ api/AltV.Net/Elements/Entities/BaseObject.cs | 4 ++++ api/AltV.Net/Elements/Entities/IBaseObject.cs | 4 ++++ 4 files changed, 20 insertions(+) diff --git a/api/AltV.Net.Shared/Elements/Entities/ISharedBaseObject.cs b/api/AltV.Net.Shared/Elements/Entities/ISharedBaseObject.cs index 83f770849..af8d26d36 100644 --- a/api/AltV.Net.Shared/Elements/Entities/ISharedBaseObject.cs +++ b/api/AltV.Net.Shared/Elements/Entities/ISharedBaseObject.cs @@ -137,6 +137,7 @@ public interface ISharedBaseObject : INative /// Synced meta data is accessible across different serverside resources and across all clients. /// /// + [Obsolete] bool HasSyncedMetaData(string key); /// @@ -145,6 +146,7 @@ public interface ISharedBaseObject : INative /// Synced meta data is accessible across different serverside resources and across all clients. /// /// + [Obsolete] bool GetSyncedMetaData(string key, out int result); /// @@ -153,6 +155,7 @@ public interface ISharedBaseObject : INative /// Synced meta data is accessible across different serverside resources and across all clients. /// /// + [Obsolete] bool GetSyncedMetaData(string key, out uint result); /// @@ -161,6 +164,7 @@ public interface ISharedBaseObject : INative /// Synced meta data is accessible across different serverside resources and across all clients. /// /// + [Obsolete] bool GetSyncedMetaData(string key, out float result); /// @@ -169,6 +173,7 @@ public interface ISharedBaseObject : INative /// Synced meta data is accessible across different serverside resources and across all clients. /// /// + [Obsolete] void GetSyncedMetaData(string key, out MValueConst value); /// @@ -180,6 +185,7 @@ public interface ISharedBaseObject : INative /// /// /// This entity was removed + [Obsolete] bool GetSyncedMetaData(string key, out T result); } } \ No newline at end of file diff --git a/api/AltV.Net.Shared/Elements/Entities/SharedBaseObject.cs b/api/AltV.Net.Shared/Elements/Entities/SharedBaseObject.cs index 33de12b95..9656027c0 100644 --- a/api/AltV.Net.Shared/Elements/Entities/SharedBaseObject.cs +++ b/api/AltV.Net.Shared/Elements/Entities/SharedBaseObject.cs @@ -272,6 +272,7 @@ public virtual void SetCached(IntPtr cachedBaseObject) this.Cached = true; } + [Obsolete] public void GetSyncedMetaData(string key, out MValueConst value) { CheckIfEntityExists(); @@ -283,6 +284,7 @@ public void GetSyncedMetaData(string key, out MValueConst value) } } + [Obsolete] public bool GetSyncedMetaData(string key, out T result) { CheckIfEntityExists(); @@ -299,6 +301,7 @@ public bool GetSyncedMetaData(string key, out T result) return true; } + [Obsolete] public bool HasSyncedMetaData(string key) { CheckIfEntityExists(); @@ -311,6 +314,7 @@ public bool HasSyncedMetaData(string key) } } + [Obsolete] public bool GetSyncedMetaData(string key, out int result) { CheckIfEntityExists(); @@ -329,6 +333,7 @@ public bool GetSyncedMetaData(string key, out int result) return true; } + [Obsolete] public bool GetSyncedMetaData(string key, out uint result) { CheckIfEntityExists(); @@ -347,6 +352,7 @@ public bool GetSyncedMetaData(string key, out uint result) return true; } + [Obsolete] public bool GetSyncedMetaData(string key, out float result) { CheckIfEntityExists(); diff --git a/api/AltV.Net/Elements/Entities/BaseObject.cs b/api/AltV.Net/Elements/Entities/BaseObject.cs index c67eb9ac5..fe231075d 100644 --- a/api/AltV.Net/Elements/Entities/BaseObject.cs +++ b/api/AltV.Net/Elements/Entities/BaseObject.cs @@ -57,6 +57,7 @@ public override void CheckIfCallIsValid() { } + [Obsolete] public void SetSyncedMetaData(string key, object value) { CheckIfEntityExists(); @@ -65,6 +66,7 @@ public void SetSyncedMetaData(string key, object value) mValue.Dispose(); } + [Obsolete] public void SetSyncedMetaData(Dictionary metaData) { unsafe @@ -93,6 +95,7 @@ public void SetSyncedMetaData(Dictionary metaData) } } + [Obsolete] public void SetSyncedMetaData(string key, in MValueConst value) { unsafe @@ -103,6 +106,7 @@ public void SetSyncedMetaData(string key, in MValueConst value) } } + [Obsolete] public void DeleteSyncedMetaData(string key) { unsafe diff --git a/api/AltV.Net/Elements/Entities/IBaseObject.cs b/api/AltV.Net/Elements/Entities/IBaseObject.cs index eaf75828f..67a56826c 100644 --- a/api/AltV.Net/Elements/Entities/IBaseObject.cs +++ b/api/AltV.Net/Elements/Entities/IBaseObject.cs @@ -17,8 +17,10 @@ public interface IBaseObject : ISharedBaseObject /// /// /// This entity was removed + [Obsolete] void SetSyncedMetaData(string key, object value); + [Obsolete] void SetSyncedMetaData(Dictionary metaData); /// @@ -27,6 +29,7 @@ public interface IBaseObject : ISharedBaseObject /// Synced meta data is accessible across different serverside resources and across all clients. /// /// + [Obsolete] void SetSyncedMetaData(string key, in MValueConst value); /// @@ -34,6 +37,7 @@ public interface IBaseObject : ISharedBaseObject /// /// Synced meta data is accessible across different serverside resources and across all clients. /// + [Obsolete] void DeleteSyncedMetaData(string key); } } \ No newline at end of file From 41fd5910b5ad3bf5eb76015362d05a71734204d6 Mon Sep 17 00:00:00 2001 From: doxoh Date: Wed, 20 Dec 2023 23:18:01 +0100 Subject: [PATCH 48/75] refactor(shared): remove v15 obsolete methods --- api/AltV.Net.Async/AltAsync.Vehicle.cs | 12 - .../Elements/Entities/AsyncBaseObject.cs | 3 - .../Elements/Entities/AsyncVehicle.cs | 7 - .../Elements/Entities/VehicleBuilder.cs | 466 ------------------ .../Elements/Entities/Audio.cs | 6 - api/AltV.Net.Client/Elements/Entities/Blip.cs | 18 - .../Elements/Entities/WebView.cs | 14 - api/AltV.Net.Example/MyVehicle.cs | 6 - api/AltV.Net.Example/SampleResource.cs | 22 - api/AltV.Net.Mock/MockBlip.cs | 2 +- api/AltV.Net.Mock/MockColShape.cs | 2 +- api/AltV.Net.Mock/MockVoiceChannel.cs | 2 +- .../Elements/Entities/ISharedBaseObject.cs | 3 - .../Elements/Entities/SharedBaseObject.cs | 3 - api/AltV.Net/Alt.Entity.cs | 20 - api/AltV.Net/Alt.VoiceChannel.cs | 3 - api/AltV.Net/Core.cs | 64 --- api/AltV.Net/Elements/Entities/Vehicle.cs | 7 - api/AltV.Net/ICore.cs | 15 - 19 files changed, 3 insertions(+), 672 deletions(-) delete mode 100644 api/AltV.Net.Async/Elements/Entities/VehicleBuilder.cs delete mode 100644 api/AltV.Net/Alt.Entity.cs diff --git a/api/AltV.Net.Async/AltAsync.Vehicle.cs b/api/AltV.Net.Async/AltAsync.Vehicle.cs index d8d9e76b7..cf6eeb493 100644 --- a/api/AltV.Net.Async/AltAsync.Vehicle.cs +++ b/api/AltV.Net.Async/AltAsync.Vehicle.cs @@ -22,18 +22,6 @@ public static Task CreateVehicle(VehicleModel model, Position pos, Rot public static Task CreateVehicle(string model, Position pos, Rotation rot, uint streamingDistance = 0) => CreateVehicle(Alt.Hash(model), pos, rot, streamingDistance); - [Obsolete("Use AltAsync.CreateVehicle or Alt.CreateVehicle instead")] - public static IVehicleBuilder CreateVehicleBuilder(uint model, Position pos, Rotation rot) => - new VehicleBuilder(model, pos, rot); - - [Obsolete("Use AltAsync.CreateVehicle or Alt.CreateVehicle instead")] - public static IVehicleBuilder CreateVehicleBuilder(VehicleModel model, Position pos, Rotation rot) => - new VehicleBuilder((uint) model, pos, rot); - - [Obsolete("Use AltAsync.CreateVehicle or Alt.CreateVehicle instead")] - public static IVehicleBuilder CreateVehicleBuilder(string model, Position pos, Rotation rot) => - new VehicleBuilder(Alt.Hash(model), pos, rot); - [Obsolete("Use async entities instead")] public static Task GetDriverAsync(this IVehicle vehicle) => AltVAsync.Schedule(() => !vehicle.Exists ? null : vehicle.Driver); diff --git a/api/AltV.Net.Async/Elements/Entities/AsyncBaseObject.cs b/api/AltV.Net.Async/Elements/Entities/AsyncBaseObject.cs index 32c61f3f9..004872eeb 100644 --- a/api/AltV.Net.Async/Elements/Entities/AsyncBaseObject.cs +++ b/api/AltV.Net.Async/Elements/Entities/AsyncBaseObject.cs @@ -222,9 +222,6 @@ public void OnDestroy() BaseObject.OnDestroy(); } - [Obsolete("Use Destroy() instead")] - public void Remove() => Destroy(); - public void Destroy() { AsyncContext.RunOnMainThreadBlockingNullable(() => BaseObject.Destroy()); diff --git a/api/AltV.Net.Async/Elements/Entities/AsyncVehicle.cs b/api/AltV.Net.Async/Elements/Entities/AsyncVehicle.cs index f1dc2fb86..59ddf12a3 100644 --- a/api/AltV.Net.Async/Elements/Entities/AsyncVehicle.cs +++ b/api/AltV.Net.Async/Elements/Entities/AsyncVehicle.cs @@ -585,13 +585,6 @@ public AsyncVehicle(ICore core, IntPtr nativePointer, uint id) : this(new Vehicl { } - [Obsolete("Use AltAsync.CreateVehicle instead")] - public AsyncVehicle(ICore core, uint model, Position position, Rotation rotation, uint streamingDistance = 0) : this( - core, core.CreateVehicleEntity(out var id, model, position, rotation, streamingDistance), id) - { - core.PoolManager.Vehicle.Add(this); - } - public byte GetMod(byte category) { lock (Vehicle) diff --git a/api/AltV.Net.Async/Elements/Entities/VehicleBuilder.cs b/api/AltV.Net.Async/Elements/Entities/VehicleBuilder.cs deleted file mode 100644 index be5bf0942..000000000 --- a/api/AltV.Net.Async/Elements/Entities/VehicleBuilder.cs +++ /dev/null @@ -1,466 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; -using System.Threading.Tasks; -using AltV.Net.Data; -using AltV.Net.Elements.Entities; -using AltV.Net.Enums; -using AltV.Net.Native; -using AltV.Net.Shared.Utils; - -namespace AltV.Net.Async.Elements.Entities -{ - [Obsolete("Use Vehicle constructor instead")] - public class VehicleBuilder : IVehicleBuilder - { - private readonly uint model; - - private readonly Position position; - - private readonly Rotation rotation; - - private readonly uint streamingDistance; - - private readonly Dictionary> functions = new Dictionary>(); - - private readonly List memoryToFree = new List(); - - public VehicleBuilder(uint model, Position position, Rotation rotation, uint streamingDistance = 0) - { - this.model = model; - this.position = position; - this.rotation = rotation; - this.streamingDistance = streamingDistance; - } - - public IVehicleBuilder ModKit(byte value) - { - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_SetModKit(ptr, value); - } - }); - return this; - } - - public IVehicleBuilder PrimaryColor(byte value) - { - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_SetPrimaryColor(ptr, value); - } - }); - return this; - } - - public IVehicleBuilder PrimaryColorRgb(Rgba value) - { - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_SetPrimaryColorRGB(ptr, value); - } - }); - return this; - } - - public IVehicleBuilder SecondaryColor(byte value) - { - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_SetSecondaryColor(ptr, value); - } - }); - return this; - } - - public IVehicleBuilder SecondaryColorRgb(Rgba value) - { - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_SetSecondaryColorRGB(ptr, value); - } - }); - return this; - } - - public IVehicleBuilder PearlColor(byte value) - { - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_SetPearlColor(ptr, value); - } - }); - return this; - } - - public IVehicleBuilder WheelColor(byte value) - { - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_SetWheelColor(ptr, value); - } - }); - return this; - } - - public IVehicleBuilder InteriorColor(byte value) - { - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_SetInteriorColor(ptr, value); - } - }); - return this; - } - - public IVehicleBuilder DashboardColor(byte value) - { - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_SetDashboardColor(ptr, value); - } - }); - return this; - } - - public IVehicleBuilder TireSmokeColor(Rgba value) - { - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_SetTireSmokeColor(ptr, value); - } - }); - return this; - } - - public IVehicleBuilder CustomTires(bool value) - { - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_SetCustomTires(ptr, value ? (byte) 1 : (byte) 0); - } - }); - return this; - } - - public IVehicleBuilder SpecialDarkness(byte value) - { - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_SetSpecialDarkness(ptr, value); - } - }); - return this; - } - - public IVehicleBuilder NumberplateIndex(uint value) - { - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_SetNumberplateIndex(ptr, value); - } - }); - return this; - } - - public IVehicleBuilder NumberplateText(string value) - { - var valuePtr = StringToHGlobalUtf8(value); - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_SetNumberplateText(ptr, valuePtr); - Marshal.FreeHGlobal(valuePtr); - } - }); - return this; - } - - public IVehicleBuilder WindowTint(byte value) - { - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_SetWindowTint(ptr, value); - } - }); - return this; - } - - public IVehicleBuilder DirtLevel(byte value) - { - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_SetDirtLevel(ptr, value); - } - }); - return this; - } - - public IVehicleBuilder NeonColor(Rgba value) - { - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_SetNeonColor(ptr, value); - } - }); - return this; - } - - public IVehicleBuilder EngineOn(bool value) - { - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_SetEngineOn(ptr, value ? (byte) 1 : (byte) 0); - } - }); - return this; - } - - public IVehicleBuilder HeadlightColor(byte value) - { - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_SetHeadlightColor(ptr, value); - } - }); - return this; - } - - public IVehicleBuilder SirenActive(bool value) - { - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_SetSirenActive(ptr, value ? (byte) 1 : (byte) 0); - } - }); - return this; - } - - public IVehicleBuilder LockState(VehicleLockState value) - { - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_SetLockState(ptr, (byte) value); - } - }); - return this; - } - - public IVehicleBuilder IsRoofClosed(bool state) - { - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_SetRoofState(ptr, state ? (byte)1: (byte)0); - } - }); - return this; - } - - public IVehicleBuilder State(string value) - { - var valuePtr = StringToHGlobalUtf8(value); - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_LoadGameStateFromBase64(ptr, valuePtr); - Marshal.FreeHGlobal(valuePtr); - } - }); - return this; - } - - public IVehicleBuilder EngineHealth(int value) - { - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_SetEngineHealth(ptr, value); - } - }); - return this; - } - - public IVehicleBuilder PetrolTankHealth(int value) - { - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_SetPetrolTankHealth(ptr, value); - } - }); - return this; - } - - public IVehicleBuilder BodyHealth(uint value) - { - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_SetBodyHealth(ptr, value); - } - }); - return this; - } - - public IVehicleBuilder BodyAdditionalHealth(uint value) - { - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_SetBodyAdditionalHealth(ptr, value); - } - }); - return this; - } - - public IVehicleBuilder HealthData(string value) - { - var valuePtr = StringToHGlobalUtf8(value); - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_LoadHealthDataFromBase64(ptr, valuePtr); - Marshal.FreeHGlobal(valuePtr); - } - }); - return this; - } - - public IVehicleBuilder DamageData(string value) - { - var valuePtr = StringToHGlobalUtf8(value); - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_LoadDamageDataFromBase64(ptr, valuePtr); - Marshal.FreeHGlobal(valuePtr); - } - }); - return this; - } - - public IVehicleBuilder Appearance(string value) - { - var valuePtr = StringToHGlobalUtf8(value); - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_LoadAppearanceDataFromBase64(ptr, valuePtr); - Marshal.FreeHGlobal(valuePtr); - } - }); - return this; - } - - public IVehicleBuilder ScriptData(string value) - { - var valuePtr = StringToHGlobalUtf8(value); - Add(ptr => - { - unsafe - { - Alt.Core.Library.Server.Vehicle_LoadScriptDataFromBase64(ptr, valuePtr); - Marshal.FreeHGlobal(valuePtr); - } - }); - return this; - } - - public async Task Build() - { - var enumerator = functions.Values.GetEnumerator(); - var (vehiclePtr, vehicleId) = await AltAsync.AltVAsync.Schedule(() => - { - unsafe - { - uint id = default; - var ptr = Alt.Core.Library.Server.Core_CreateVehicle(((Core) Alt.Core).NativePointer, model, - position, rotation, streamingDistance, &id); - - while (enumerator.MoveNext()) - { - enumerator.Current(ptr); - } - - return (ptr, id); - } - }); - enumerator.Dispose(); - Dispose(); - return Alt.Core.PoolManager.Vehicle.Create(Alt.Core, vehiclePtr, vehicleId); - } - - // Call Dispose when you don't wanna continue building the vehicle anymore to cleanup memory - public void Dispose() - { - foreach (var ptr in memoryToFree) - { - Marshal.FreeHGlobal(ptr); - } - } - - private void Add(Action action, [CallerMemberName] string memberName = "") - { - functions[memberName] = action; - } - - private IntPtr StringToHGlobalUtf8(string str) - { - var strPtr = MemoryUtils.StringToHGlobalUtf8(str); - memoryToFree.Add(strPtr); - return strPtr; - } - } -} \ No newline at end of file diff --git a/api/AltV.Net.Client/Elements/Entities/Audio.cs b/api/AltV.Net.Client/Elements/Entities/Audio.cs index 524e0570b..7b04af869 100644 --- a/api/AltV.Net.Client/Elements/Entities/Audio.cs +++ b/api/AltV.Net.Client/Elements/Entities/Audio.cs @@ -30,12 +30,6 @@ public Audio(ICore core, IntPtr audioNativePointer, uint id) : base(core, GetBas AudioNativePointer = audioNativePointer; } - [Obsolete("Use Alt.CreateAudio instead")] - public Audio(ICore core, string source, float volume) : this(core, core.CreateAudioPtr(out var id,source, volume), id) - { - core.PoolManager.Audio.Add(this); - } - public bool Looped { get diff --git a/api/AltV.Net.Client/Elements/Entities/Blip.cs b/api/AltV.Net.Client/Elements/Entities/Blip.cs index be33b37b5..73cc8a3eb 100644 --- a/api/AltV.Net.Client/Elements/Entities/Blip.cs +++ b/api/AltV.Net.Client/Elements/Entities/Blip.cs @@ -706,24 +706,6 @@ public Blip(ICore core, IntPtr nativePointer, uint id) : base(core, GetWorldObje BlipNativePointer = nativePointer; } - [Obsolete("Use Alt.CreatePointBlip instead")] - public Blip(ICore core, Position position) : this(core, core.CreatePointBlipPtr(out var id, position), id) - { - core.PoolManager.Blip.Add(this); - } - - [Obsolete("Use Alt.CreateRadiusBlip instead")] - public Blip(ICore core, Position position, float radius) : this(core, core.CreateRadiusBlipPtr(out var id, position, radius), id) - { - core.PoolManager.Blip.Add(this); - } - - [Obsolete("Use Alt.CreateAreaBlip instead")] - public Blip(ICore core, Position position, int width, int height) : this(core, core.CreateAreaBlipPtr(out var id, position, width, height), id) - { - core.PoolManager.Blip.Add(this); - } - public void Fade(uint opacity, uint duration) { unsafe diff --git a/api/AltV.Net.Client/Elements/Entities/WebView.cs b/api/AltV.Net.Client/Elements/Entities/WebView.cs index 28b39fe7d..99803fc87 100644 --- a/api/AltV.Net.Client/Elements/Entities/WebView.cs +++ b/api/AltV.Net.Client/Elements/Entities/WebView.cs @@ -27,20 +27,6 @@ public WebView(ICore core, IntPtr webViewNativePointer, uint id) : base(core, Ge WebViewNativePointer = webViewNativePointer; } - [Obsolete("Use Alt.CreateWebView instead")] - public WebView(ICore core, string url, bool isOverlay = false, Vector2? pos = null, Vector2? size = null) - : this(core, core.CreateWebViewPtr(out var id, url, isOverlay, pos, size), id) - { - core.PoolManager.WebView.Add(this); - } - - [Obsolete("Use Alt.CreateWebView instead")] - public WebView(ICore core, string url, uint propHash, string targetTexture) - : this(core, core.CreateWebViewPtr(out var id,url, propHash, targetTexture), id) - { - core.PoolManager.WebView.Add(this); - } - public bool Focused { get diff --git a/api/AltV.Net.Example/MyVehicle.cs b/api/AltV.Net.Example/MyVehicle.cs index a4198075f..c41490a12 100644 --- a/api/AltV.Net.Example/MyVehicle.cs +++ b/api/AltV.Net.Example/MyVehicle.cs @@ -8,12 +8,6 @@ public class MyVehicle : Vehicle, IMyVehicle { public int MyData { get; set; } - // This constructor is used for creation via constructor - public MyVehicle(uint model, Position position, Rotation rotation) : base(Alt.Core, model, position, rotation) - { - MyData = 7; - } - // This constructor is used for creation via entity factory public MyVehicle(ICore core, IntPtr nativePointer, uint id) : base(core, nativePointer, id) { diff --git a/api/AltV.Net.Example/SampleResource.cs b/api/AltV.Net.Example/SampleResource.cs index ba916b394..96f464595 100644 --- a/api/AltV.Net.Example/SampleResource.cs +++ b/api/AltV.Net.Example/SampleResource.cs @@ -183,16 +183,6 @@ public override void OnStart() var tuple = vehicle.GetPosition(); vehicle.SetPosition(tuple); - - Task.Factory.StartNew(() => - AltAsync.CreateVehicleBuilder(VehicleModel.Apc, new Position(1, 2, 3), new Rotation(1, 2, 3)) - .PrimaryColorRgb(Color.GreenYellow) - .SecondaryColor(24) - .NumberplateText("C#") - .LockState(VehicleLockState.Locked) - .Build() - ); - Alt.Log("ptr:" + vehicle.NativePointer); Alt.Log("number-plate:" + vehicle.NumberplateText + " " + vehicle.NumberplateIndex); @@ -345,18 +335,6 @@ async delegate(string s, string s1, long i1, string[] arg3, object[] arg4, IMyVe Alt.Emit("none-existing-event", new ConvertibleObject()); - // You need to catch this with a exception because its not possible to construct a invalid entity - // Remember not all vehicles you receive from events has to be constructed by this constructor when there got created from different resources ect. - // But when you don't use a entity factory you can validate that by checking if the ivehicle is a imyvehicle - try - { - IMyVehicle unused = - new MyVehicle((uint)VehicleModel.Apc, new Position(1, 1, 1), new Rotation(1, 1, 1)); - } - catch (BaseObjectRemovedException) - { - } - Alt.RegisterEvents(this); Alt.Emit("bla2", "bla"); diff --git a/api/AltV.Net.Mock/MockBlip.cs b/api/AltV.Net.Mock/MockBlip.cs index e991eaf09..2754ffef6 100644 --- a/api/AltV.Net.Mock/MockBlip.cs +++ b/api/AltV.Net.Mock/MockBlip.cs @@ -71,7 +71,7 @@ public void Fade(uint opacity, uint duration) public void Destroy() { - Alt.Core.RemoveBlip(this); + throw new NotImplementedException(); } public bool Visible { get; set; } diff --git a/api/AltV.Net.Mock/MockColShape.cs b/api/AltV.Net.Mock/MockColShape.cs index 8ef4268d9..fddb889dc 100644 --- a/api/AltV.Net.Mock/MockColShape.cs +++ b/api/AltV.Net.Mock/MockColShape.cs @@ -25,7 +25,7 @@ public bool IsEntityIn(IEntity entity) public void Destroy() { - Alt.Core.RemoveColShape(this); + throw new NotImplementedException(); } public bool IsEntityIn(ISharedEntity entity) diff --git a/api/AltV.Net.Mock/MockVoiceChannel.cs b/api/AltV.Net.Mock/MockVoiceChannel.cs index 5227f3077..502dda91c 100644 --- a/api/AltV.Net.Mock/MockVoiceChannel.cs +++ b/api/AltV.Net.Mock/MockVoiceChannel.cs @@ -46,7 +46,7 @@ public bool IsPlayerMuted(IPlayer player) public void Destroy() { - Alt.Core.RemoveVoiceChannel(this); + throw new NotImplementedException(); } public uint Filter { get; set; } diff --git a/api/AltV.Net.Shared/Elements/Entities/ISharedBaseObject.cs b/api/AltV.Net.Shared/Elements/Entities/ISharedBaseObject.cs index af8d26d36..05532721b 100644 --- a/api/AltV.Net.Shared/Elements/Entities/ISharedBaseObject.cs +++ b/api/AltV.Net.Shared/Elements/Entities/ISharedBaseObject.cs @@ -123,9 +123,6 @@ public interface ISharedBaseObject : INative void CheckIfEntityExists(); void CheckIfEntityExistsOrCached(); - [Obsolete("Use Destroy() instead")] - void Remove(); - /// /// Destroy the baseobject /// diff --git a/api/AltV.Net.Shared/Elements/Entities/SharedBaseObject.cs b/api/AltV.Net.Shared/Elements/Entities/SharedBaseObject.cs index 9656027c0..1ce7f006d 100644 --- a/api/AltV.Net.Shared/Elements/Entities/SharedBaseObject.cs +++ b/api/AltV.Net.Shared/Elements/Entities/SharedBaseObject.cs @@ -254,9 +254,6 @@ public override int GetHashCode() return NativePointer.GetHashCode(); } - [Obsolete("Use Destroy() instead")] - public void Remove() => Destroy(); - public void Destroy() { if (!Exists) return; diff --git a/api/AltV.Net/Alt.Entity.cs b/api/AltV.Net/Alt.Entity.cs deleted file mode 100644 index b835b516c..000000000 --- a/api/AltV.Net/Alt.Entity.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using AltV.Net.Elements.Entities; - -namespace AltV.Net -{ - public static partial class Alt - { - [Obsolete("Use vehicle.Destroy() instead")] - public static void RemoveVehicle(IVehicle vehicle) => vehicle.Destroy(); - - [Obsolete("Use blip.Destroy() instead")] - public static void RemoveBlip(IBlip blip) => blip.Destroy(); - - [Obsolete("Use checkpoint.Destroy() instead")] - public static void RemoveCheckpoint(ICheckpoint checkpoint) => checkpoint.Destroy(); - - [Obsolete("Use colShape.Destroy() instead")] - public static void RemoveColShape(IColShape colShape) => colShape.Destroy(); - } -} \ No newline at end of file diff --git a/api/AltV.Net/Alt.VoiceChannel.cs b/api/AltV.Net/Alt.VoiceChannel.cs index 30afa929a..0dbdce07c 100644 --- a/api/AltV.Net/Alt.VoiceChannel.cs +++ b/api/AltV.Net/Alt.VoiceChannel.cs @@ -7,8 +7,5 @@ public partial class Alt { public static IVoiceChannel CreateVoiceChannel(bool spatial, float maxDistance) => Core.CreateVoiceChannel(spatial, maxDistance); - - [Obsolete("Use channel.Destroy() instead")] - public static void RemoveVoiceChannel(IVoiceChannel channel) => Core.RemoveVoiceChannel(channel); } } \ No newline at end of file diff --git a/api/AltV.Net/Core.cs b/api/AltV.Net/Core.cs index b883315ae..06af67ee4 100644 --- a/api/AltV.Net/Core.cs +++ b/api/AltV.Net/Core.cs @@ -801,70 +801,6 @@ public IColShape CreateColShapePolygon(float minZ, float maxZ, Vector2[] points) return PoolManager.ColShape.GetOrCreate(this, ptr, id); } } - - [Obsolete("Use blip.Destroy() instead")] - public void RemoveBlip(IBlip blip) - { - CheckIfCallIsValid(); - if (blip.Exists) - { - unsafe - { - Library.Shared.Core_DestroyBaseObject(NativePointer, blip.BaseObjectNativePointer); - } - } - } - - [Obsolete("Use checkpoint.Destroy() instead")] - public void RemoveCheckpoint(ICheckpoint checkpoint) - { - CheckIfCallIsValid(); - if (checkpoint.Exists) - { - unsafe - { - Library.Server.Core_DestroyCheckpoint(NativePointer, checkpoint.CheckpointNativePointer); - } - } - } - - [Obsolete("Use vehicle.Destroy() instead")] - public void RemoveVehicle(IVehicle vehicle) - { - CheckIfCallIsValid(); - if (vehicle.Exists) - { - unsafe - { - Library.Server.Core_DestroyVehicle(NativePointer, vehicle.VehicleNativePointer); - } - } - } - - [Obsolete("Use channel.Destroy() instead")] - public void RemoveVoiceChannel(IVoiceChannel channel) - { - if (channel.Exists) - { - unsafe - { - Library.Server.Core_DestroyVoiceChannel(NativePointer, channel.VoiceChannelNativePointer); - } - } - } - - [Obsolete("Use colShape.Destroy() instead")] - public void RemoveColShape(IColShape colShape) - { - CheckIfCallIsValid(); - if (colShape.Exists) - { - unsafe - { - Library.Server.Core_DestroyColShape(NativePointer, colShape.ColShapeNativePointer); - } - } - } #endregion public INativeResource GetResource(string name) diff --git a/api/AltV.Net/Elements/Entities/Vehicle.cs b/api/AltV.Net/Elements/Entities/Vehicle.cs index 99f0a5ec8..912f26586 100644 --- a/api/AltV.Net/Elements/Entities/Vehicle.cs +++ b/api/AltV.Net/Elements/Entities/Vehicle.cs @@ -1378,13 +1378,6 @@ public IVehicle AttachedTo } } - [Obsolete("Use Alt.CreateVehicle instead")] - public Vehicle(ICore core, uint model, Position position, Rotation rotation, uint streamingDistance = 0) : this( - core, core.CreateVehicleEntity(out var id, model, position, rotation, streamingDistance), id) - { - core.PoolManager.Vehicle.Add(this); - } - public Vehicle(ICore core, IntPtr nativePointer, uint id) : base(core, GetEntityPointer(core, nativePointer), BaseObjectType.Vehicle, id) { this.VehicleNativePointer = nativePointer; diff --git a/api/AltV.Net/ICore.cs b/api/AltV.Net/ICore.cs index 088a190c6..1bc36b60f 100644 --- a/api/AltV.Net/ICore.cs +++ b/api/AltV.Net/ICore.cs @@ -138,21 +138,6 @@ public interface ICore : ISharedCore IColShape CreateColShapePolygon(float minZ, float maxZ, Vector2[] points); - [Obsolete("Use blip.Destroy() instead")] - void RemoveBlip(IBlip blip); - - [Obsolete("Use checkpoint.Destroy() instead")] - void RemoveCheckpoint(ICheckpoint checkpoint); - - [Obsolete("Use vehicle.Destroy() instead")] - void RemoveVehicle(IVehicle vehicle); - - [Obsolete("Use channel.Destroy() instead")] - void RemoveVoiceChannel(IVoiceChannel channel); - - [Obsolete("Use colShape.Destroy() instead")] - void RemoveColShape(IColShape colShape); - INativeResource GetResource(string name); INativeResource GetResource(IntPtr resourcePointer); From 7f0891f16f96a2d7feff6ad4667e5e2a90157013 Mon Sep 17 00:00:00 2001 From: doxoh Date: Fri, 22 Dec 2023 18:20:27 +0100 Subject: [PATCH 49/75] fix(server): fix call AsyncEntity.SetStreamSyncedMetaData --- api/AltV.Net.Async/Elements/Entities/AsyncEntity.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/AltV.Net.Async/Elements/Entities/AsyncEntity.cs b/api/AltV.Net.Async/Elements/Entities/AsyncEntity.cs index 0bfd3b9af..fce91cc7b 100644 --- a/api/AltV.Net.Async/Elements/Entities/AsyncEntity.cs +++ b/api/AltV.Net.Async/Elements/Entities/AsyncEntity.cs @@ -163,7 +163,7 @@ public void SetStreamSyncedMetaData(string key, in MValueConst value) lock (Entity) { if (!AsyncContext.CheckIfExistsNullable(Entity)) return; - Entity.SetSyncedMetaData(key, in value); + Entity.SetStreamSyncedMetaData(key, in value); } } From 1c7575b8075abd28c8bb2b2630e4a167e650860a Mon Sep 17 00:00:00 2001 From: doxoh Date: Fri, 22 Dec 2023 18:20:27 +0100 Subject: [PATCH 50/75] fix(server): fix call AsyncEntity.SetStreamSyncedMetaData --- api/AltV.Net.Async/Elements/Entities/AsyncEntity.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/AltV.Net.Async/Elements/Entities/AsyncEntity.cs b/api/AltV.Net.Async/Elements/Entities/AsyncEntity.cs index 0bfd3b9af..fce91cc7b 100644 --- a/api/AltV.Net.Async/Elements/Entities/AsyncEntity.cs +++ b/api/AltV.Net.Async/Elements/Entities/AsyncEntity.cs @@ -163,7 +163,7 @@ public void SetStreamSyncedMetaData(string key, in MValueConst value) lock (Entity) { if (!AsyncContext.CheckIfExistsNullable(Entity)) return; - Entity.SetSyncedMetaData(key, in value); + Entity.SetStreamSyncedMetaData(key, in value); } } From ba612d1678d16836ea0570ff8c6422f7aa719609 Mon Sep 17 00:00:00 2001 From: doxoh Date: Mon, 25 Dec 2023 10:31:24 +0100 Subject: [PATCH 51/75] fix(shared): make BaseObject Id gettable --- .../Elements/Entities/AsyncBaseObject.cs | 10 ++++++++++ api/AltV.Net.Client/Elements/Entities/BaseObject.cs | 2 +- .../Elements/Entities/ISharedBaseObject.cs | 1 + .../Elements/Entities/SharedBaseObject.cs | 1 + api/AltV.Net/Elements/Entities/BaseObject.cs | 2 +- 5 files changed, 14 insertions(+), 2 deletions(-) diff --git a/api/AltV.Net.Async/Elements/Entities/AsyncBaseObject.cs b/api/AltV.Net.Async/Elements/Entities/AsyncBaseObject.cs index 004872eeb..084cf8d37 100644 --- a/api/AltV.Net.Async/Elements/Entities/AsyncBaseObject.cs +++ b/api/AltV.Net.Async/Elements/Entities/AsyncBaseObject.cs @@ -16,6 +16,16 @@ public class AsyncBaseObject : IBaseObject, IInternalBaseObject public IntPtr NativePointer => BaseObject.NativePointer; public IntPtr BaseObjectNativePointer => BaseObject.BaseObjectNativePointer; + public uint Id + { + get + { + lock (BaseObject) + { + return BaseObject.Id; + } + } + } public ICore Core => BaseObject.Core; public bool Cached => BaseObject.Cached; ISharedCore ISharedBaseObject.Core => BaseObject.Core; diff --git a/api/AltV.Net.Client/Elements/Entities/BaseObject.cs b/api/AltV.Net.Client/Elements/Entities/BaseObject.cs index 3862b4c57..459d61123 100644 --- a/api/AltV.Net.Client/Elements/Entities/BaseObject.cs +++ b/api/AltV.Net.Client/Elements/Entities/BaseObject.cs @@ -13,7 +13,7 @@ public class BaseObject : SharedBaseObject, IBaseObject public override IntPtr NativePointer => BaseObjectNativePointer; public override ICore Core { get; } public override BaseObjectType Type { get; } - public uint Id { get; } + public override uint Id { get; } public BaseObject(ICore core, IntPtr baseObjectPointer, BaseObjectType type, uint id) { diff --git a/api/AltV.Net.Shared/Elements/Entities/ISharedBaseObject.cs b/api/AltV.Net.Shared/Elements/Entities/ISharedBaseObject.cs index 05532721b..c048dccb0 100644 --- a/api/AltV.Net.Shared/Elements/Entities/ISharedBaseObject.cs +++ b/api/AltV.Net.Shared/Elements/Entities/ISharedBaseObject.cs @@ -9,6 +9,7 @@ public interface ISharedBaseObject : INative { IntPtr BaseObjectNativePointer { get; } BaseObjectType Type { get; } + uint Id { get; } ISharedCore Core { get; } bool Cached { get; } diff --git a/api/AltV.Net.Shared/Elements/Entities/SharedBaseObject.cs b/api/AltV.Net.Shared/Elements/Entities/SharedBaseObject.cs index 1ce7f006d..211218cc8 100644 --- a/api/AltV.Net.Shared/Elements/Entities/SharedBaseObject.cs +++ b/api/AltV.Net.Shared/Elements/Entities/SharedBaseObject.cs @@ -12,6 +12,7 @@ namespace AltV.Net.Shared.Elements.Entities public abstract class SharedBaseObject : ISharedBaseObject, IInternalBaseObject { public abstract IntPtr BaseObjectNativePointer { get; protected set; } + public abstract uint Id { get; } public abstract ISharedCore Core { get; } public virtual IntPtr NativePointer => BaseObjectNativePointer; diff --git a/api/AltV.Net/Elements/Entities/BaseObject.cs b/api/AltV.Net/Elements/Entities/BaseObject.cs index fe231075d..8f5caf1b9 100644 --- a/api/AltV.Net/Elements/Entities/BaseObject.cs +++ b/api/AltV.Net/Elements/Entities/BaseObject.cs @@ -21,7 +21,7 @@ public abstract class BaseObject : SharedBaseObject, IBaseObject, IInternalBaseO public override ICore Core { get; } - public uint Id { get; } + public override uint Id { get; } public override BaseObjectType Type { get; } From 625acfee8e1d39aec8e037d3885a3171f91b0b1c Mon Sep 17 00:00:00 2001 From: doxoh Date: Mon, 25 Dec 2023 10:31:24 +0100 Subject: [PATCH 52/75] fix(shared): make BaseObject Id gettable --- .../Elements/Entities/AsyncBaseObject.cs | 10 ++++++++++ api/AltV.Net.Client/Elements/Entities/BaseObject.cs | 2 +- .../Elements/Entities/ISharedBaseObject.cs | 1 + .../Elements/Entities/SharedBaseObject.cs | 1 + api/AltV.Net/Elements/Entities/BaseObject.cs | 2 +- 5 files changed, 14 insertions(+), 2 deletions(-) diff --git a/api/AltV.Net.Async/Elements/Entities/AsyncBaseObject.cs b/api/AltV.Net.Async/Elements/Entities/AsyncBaseObject.cs index 004872eeb..084cf8d37 100644 --- a/api/AltV.Net.Async/Elements/Entities/AsyncBaseObject.cs +++ b/api/AltV.Net.Async/Elements/Entities/AsyncBaseObject.cs @@ -16,6 +16,16 @@ public class AsyncBaseObject : IBaseObject, IInternalBaseObject public IntPtr NativePointer => BaseObject.NativePointer; public IntPtr BaseObjectNativePointer => BaseObject.BaseObjectNativePointer; + public uint Id + { + get + { + lock (BaseObject) + { + return BaseObject.Id; + } + } + } public ICore Core => BaseObject.Core; public bool Cached => BaseObject.Cached; ISharedCore ISharedBaseObject.Core => BaseObject.Core; diff --git a/api/AltV.Net.Client/Elements/Entities/BaseObject.cs b/api/AltV.Net.Client/Elements/Entities/BaseObject.cs index 3862b4c57..459d61123 100644 --- a/api/AltV.Net.Client/Elements/Entities/BaseObject.cs +++ b/api/AltV.Net.Client/Elements/Entities/BaseObject.cs @@ -13,7 +13,7 @@ public class BaseObject : SharedBaseObject, IBaseObject public override IntPtr NativePointer => BaseObjectNativePointer; public override ICore Core { get; } public override BaseObjectType Type { get; } - public uint Id { get; } + public override uint Id { get; } public BaseObject(ICore core, IntPtr baseObjectPointer, BaseObjectType type, uint id) { diff --git a/api/AltV.Net.Shared/Elements/Entities/ISharedBaseObject.cs b/api/AltV.Net.Shared/Elements/Entities/ISharedBaseObject.cs index 05532721b..c048dccb0 100644 --- a/api/AltV.Net.Shared/Elements/Entities/ISharedBaseObject.cs +++ b/api/AltV.Net.Shared/Elements/Entities/ISharedBaseObject.cs @@ -9,6 +9,7 @@ public interface ISharedBaseObject : INative { IntPtr BaseObjectNativePointer { get; } BaseObjectType Type { get; } + uint Id { get; } ISharedCore Core { get; } bool Cached { get; } diff --git a/api/AltV.Net.Shared/Elements/Entities/SharedBaseObject.cs b/api/AltV.Net.Shared/Elements/Entities/SharedBaseObject.cs index 1ce7f006d..211218cc8 100644 --- a/api/AltV.Net.Shared/Elements/Entities/SharedBaseObject.cs +++ b/api/AltV.Net.Shared/Elements/Entities/SharedBaseObject.cs @@ -12,6 +12,7 @@ namespace AltV.Net.Shared.Elements.Entities public abstract class SharedBaseObject : ISharedBaseObject, IInternalBaseObject { public abstract IntPtr BaseObjectNativePointer { get; protected set; } + public abstract uint Id { get; } public abstract ISharedCore Core { get; } public virtual IntPtr NativePointer => BaseObjectNativePointer; diff --git a/api/AltV.Net/Elements/Entities/BaseObject.cs b/api/AltV.Net/Elements/Entities/BaseObject.cs index fe231075d..8f5caf1b9 100644 --- a/api/AltV.Net/Elements/Entities/BaseObject.cs +++ b/api/AltV.Net/Elements/Entities/BaseObject.cs @@ -21,7 +21,7 @@ public abstract class BaseObject : SharedBaseObject, IBaseObject, IInternalBaseO public override ICore Core { get; } - public uint Id { get; } + public override uint Id { get; } public override BaseObjectType Type { get; } From 68d0ad9af1c007e52c319f4641276351928f9151 Mon Sep 17 00:00:00 2001 From: doxoh Date: Mon, 25 Dec 2023 11:17:58 +0100 Subject: [PATCH 53/75] fix(shared): remove obsolete Id properties --- api/AltV.Net.Async/Elements/Entities/AsyncEntity.cs | 2 -- api/AltV.Net.Client/Elements/Interfaces/ITextLabel.cs | 1 - api/AltV.Net.Shared/Elements/Entities/ISharedEntity.cs | 6 ------ api/AltV.Net.Shared/Elements/Entities/ISharedMarker.cs | 1 - .../Elements/Entities/ISharedVirtualEntity.cs | 1 - .../Elements/Entities/ISharedVirtualEntityGroup.cs | 2 -- 6 files changed, 13 deletions(-) diff --git a/api/AltV.Net.Async/Elements/Entities/AsyncEntity.cs b/api/AltV.Net.Async/Elements/Entities/AsyncEntity.cs index fce91cc7b..f18ee2e58 100644 --- a/api/AltV.Net.Async/Elements/Entities/AsyncEntity.cs +++ b/api/AltV.Net.Async/Elements/Entities/AsyncEntity.cs @@ -15,8 +15,6 @@ public class AsyncEntity : AsyncWorldObject, IEntity protected readonly IEntity Entity; public IntPtr EntityNativePointer => Entity.EntityNativePointer; - public uint Id => Entity.Id; - public IPlayer NetworkOwner { get diff --git a/api/AltV.Net.Client/Elements/Interfaces/ITextLabel.cs b/api/AltV.Net.Client/Elements/Interfaces/ITextLabel.cs index a12f548ae..a05dbf989 100644 --- a/api/AltV.Net.Client/Elements/Interfaces/ITextLabel.cs +++ b/api/AltV.Net.Client/Elements/Interfaces/ITextLabel.cs @@ -7,7 +7,6 @@ public interface ITextLabel : IWorldObject { IntPtr TextLabelNativePointer { get; } - uint Id { get; } bool IsGlobal { get; } IPlayer? Target { get; } Rgba Color { get; set; } diff --git a/api/AltV.Net.Shared/Elements/Entities/ISharedEntity.cs b/api/AltV.Net.Shared/Elements/Entities/ISharedEntity.cs index 0d949b023..1ce5aa718 100644 --- a/api/AltV.Net.Shared/Elements/Entities/ISharedEntity.cs +++ b/api/AltV.Net.Shared/Elements/Entities/ISharedEntity.cs @@ -10,12 +10,6 @@ public interface ISharedEntity : ISharedWorldObject { IntPtr EntityNativePointer { get; } - /// - /// Get the entity id. - /// - /// This entity was removed - uint Id { get; } - bool Exists { get; } /// diff --git a/api/AltV.Net.Shared/Elements/Entities/ISharedMarker.cs b/api/AltV.Net.Shared/Elements/Entities/ISharedMarker.cs index d7ad4e202..75760416b 100644 --- a/api/AltV.Net.Shared/Elements/Entities/ISharedMarker.cs +++ b/api/AltV.Net.Shared/Elements/Entities/ISharedMarker.cs @@ -6,7 +6,6 @@ namespace AltV.Net.Shared.Elements.Entities; public interface ISharedMarker : ISharedWorldObject { IntPtr MarkerNativePointer { get; } - uint Id { get; } bool IsGlobal { get; } ISharedPlayer Target { get; } Rgba Color { get; set; } diff --git a/api/AltV.Net.Shared/Elements/Entities/ISharedVirtualEntity.cs b/api/AltV.Net.Shared/Elements/Entities/ISharedVirtualEntity.cs index a810f3533..91b7a0a49 100644 --- a/api/AltV.Net.Shared/Elements/Entities/ISharedVirtualEntity.cs +++ b/api/AltV.Net.Shared/Elements/Entities/ISharedVirtualEntity.cs @@ -8,7 +8,6 @@ namespace AltV.Net.Shared.Elements.Entities public interface ISharedVirtualEntity : ISharedWorldObject { IntPtr VirtualEntityNativePointer { get; } - uint Id { get; } ISharedVirtualEntityGroup Group { get; } diff --git a/api/AltV.Net.Shared/Elements/Entities/ISharedVirtualEntityGroup.cs b/api/AltV.Net.Shared/Elements/Entities/ISharedVirtualEntityGroup.cs index cd9bb414a..cfee797d2 100644 --- a/api/AltV.Net.Shared/Elements/Entities/ISharedVirtualEntityGroup.cs +++ b/api/AltV.Net.Shared/Elements/Entities/ISharedVirtualEntityGroup.cs @@ -7,8 +7,6 @@ public interface ISharedVirtualEntityGroup : ISharedBaseObject { IntPtr VirtualEntityGroupNativePointer { get; } - uint Id { get; } - uint MaxEntitiesInStream { get; } } } \ No newline at end of file From cac7ddc98787ffb08248b13661decbec4ec7e19c Mon Sep 17 00:00:00 2001 From: doxoh Date: Mon, 25 Dec 2023 11:17:58 +0100 Subject: [PATCH 54/75] fix(shared): remove obsolete Id properties --- api/AltV.Net.Async/Elements/Entities/AsyncEntity.cs | 2 -- api/AltV.Net.Client/Elements/Interfaces/ITextLabel.cs | 1 - api/AltV.Net.Shared/Elements/Entities/ISharedEntity.cs | 6 ------ api/AltV.Net.Shared/Elements/Entities/ISharedMarker.cs | 1 - .../Elements/Entities/ISharedVirtualEntity.cs | 1 - .../Elements/Entities/ISharedVirtualEntityGroup.cs | 2 -- 6 files changed, 13 deletions(-) diff --git a/api/AltV.Net.Async/Elements/Entities/AsyncEntity.cs b/api/AltV.Net.Async/Elements/Entities/AsyncEntity.cs index fce91cc7b..f18ee2e58 100644 --- a/api/AltV.Net.Async/Elements/Entities/AsyncEntity.cs +++ b/api/AltV.Net.Async/Elements/Entities/AsyncEntity.cs @@ -15,8 +15,6 @@ public class AsyncEntity : AsyncWorldObject, IEntity protected readonly IEntity Entity; public IntPtr EntityNativePointer => Entity.EntityNativePointer; - public uint Id => Entity.Id; - public IPlayer NetworkOwner { get diff --git a/api/AltV.Net.Client/Elements/Interfaces/ITextLabel.cs b/api/AltV.Net.Client/Elements/Interfaces/ITextLabel.cs index a12f548ae..a05dbf989 100644 --- a/api/AltV.Net.Client/Elements/Interfaces/ITextLabel.cs +++ b/api/AltV.Net.Client/Elements/Interfaces/ITextLabel.cs @@ -7,7 +7,6 @@ public interface ITextLabel : IWorldObject { IntPtr TextLabelNativePointer { get; } - uint Id { get; } bool IsGlobal { get; } IPlayer? Target { get; } Rgba Color { get; set; } diff --git a/api/AltV.Net.Shared/Elements/Entities/ISharedEntity.cs b/api/AltV.Net.Shared/Elements/Entities/ISharedEntity.cs index 0d949b023..1ce5aa718 100644 --- a/api/AltV.Net.Shared/Elements/Entities/ISharedEntity.cs +++ b/api/AltV.Net.Shared/Elements/Entities/ISharedEntity.cs @@ -10,12 +10,6 @@ public interface ISharedEntity : ISharedWorldObject { IntPtr EntityNativePointer { get; } - /// - /// Get the entity id. - /// - /// This entity was removed - uint Id { get; } - bool Exists { get; } /// diff --git a/api/AltV.Net.Shared/Elements/Entities/ISharedMarker.cs b/api/AltV.Net.Shared/Elements/Entities/ISharedMarker.cs index d7ad4e202..75760416b 100644 --- a/api/AltV.Net.Shared/Elements/Entities/ISharedMarker.cs +++ b/api/AltV.Net.Shared/Elements/Entities/ISharedMarker.cs @@ -6,7 +6,6 @@ namespace AltV.Net.Shared.Elements.Entities; public interface ISharedMarker : ISharedWorldObject { IntPtr MarkerNativePointer { get; } - uint Id { get; } bool IsGlobal { get; } ISharedPlayer Target { get; } Rgba Color { get; set; } diff --git a/api/AltV.Net.Shared/Elements/Entities/ISharedVirtualEntity.cs b/api/AltV.Net.Shared/Elements/Entities/ISharedVirtualEntity.cs index a810f3533..91b7a0a49 100644 --- a/api/AltV.Net.Shared/Elements/Entities/ISharedVirtualEntity.cs +++ b/api/AltV.Net.Shared/Elements/Entities/ISharedVirtualEntity.cs @@ -8,7 +8,6 @@ namespace AltV.Net.Shared.Elements.Entities public interface ISharedVirtualEntity : ISharedWorldObject { IntPtr VirtualEntityNativePointer { get; } - uint Id { get; } ISharedVirtualEntityGroup Group { get; } diff --git a/api/AltV.Net.Shared/Elements/Entities/ISharedVirtualEntityGroup.cs b/api/AltV.Net.Shared/Elements/Entities/ISharedVirtualEntityGroup.cs index cd9bb414a..cfee797d2 100644 --- a/api/AltV.Net.Shared/Elements/Entities/ISharedVirtualEntityGroup.cs +++ b/api/AltV.Net.Shared/Elements/Entities/ISharedVirtualEntityGroup.cs @@ -7,8 +7,6 @@ public interface ISharedVirtualEntityGroup : ISharedBaseObject { IntPtr VirtualEntityGroupNativePointer { get; } - uint Id { get; } - uint MaxEntitiesInStream { get; } } } \ No newline at end of file From cbe509f34156c5f24480ee2fc7159d05d9525131 Mon Sep 17 00:00:00 2001 From: doxoh Date: Mon, 25 Dec 2023 15:11:13 +0100 Subject: [PATCH 55/75] fix(server): START_SYNCED_SCENE event entitiypointer --- runtime | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/runtime b/runtime index c35c7fa2b..eced54003 160000 --- a/runtime +++ b/runtime @@ -1 +1 @@ -Subproject commit c35c7fa2b033ef3433eaf80ccbe2450de9e46910 +Subproject commit eced54003f225b7c20d43028c25ec0c519199e71 From 62609f597067f89565d61227aac36a8881990052 Mon Sep 17 00:00:00 2001 From: doxoh Date: Mon, 25 Dec 2023 16:28:01 +0100 Subject: [PATCH 56/75] refactor(shared): Get*MetaData --- .../Elements/Entities/AsyncBaseObject.cs | 45 ------- .../Elements/Entities/AsyncVirtualEntity.cs | 42 ------ api/AltV.Net.Client/Alt.GlobalMeta.cs | 77 +++-------- .../Elements/Data/LocalStorage.cs | 12 +- .../Elements/Entities/Entity.cs | 74 ++--------- .../Elements/Entities/VirtualEntity.cs | 60 +-------- api/AltV.Net.Client/Interfaces/IClient.cs | 54 -------- api/AltV.Net.EntitySync/Entity.cs | 22 +-- api/AltV.Net.Mock/MockCheckpoint.cs | 15 --- api/AltV.Net.Mock/MockEntity.cs | 10 +- api/AltV.Net.Mock/MockVirtualEntity.cs | 15 --- .../Elements/Entities/ISharedBaseObject.cs | 33 ----- .../Elements/Entities/ISharedEntity.cs | 30 ----- .../Elements/Entities/ISharedVirtualEntity.cs | 31 ----- .../Elements/Entities/SharedBaseObject.cs | 97 ++++---------- api/AltV.Net.Shared/SharedCore.cs | 9 ++ api/AltV.Net/Alt.GlobalMeta.cs | 125 ++---------------- api/AltV.Net/Elements/Entities/Checkpoint.cs | 60 +-------- api/AltV.Net/Elements/Entities/Entity.cs | 58 +------- api/AltV.Net/Elements/Entities/ICheckpoint.cs | 3 - api/AltV.Net/Elements/Entities/IPlayer.cs | 12 +- .../Elements/Entities/VirtualEntity.cs | 60 +-------- 22 files changed, 127 insertions(+), 817 deletions(-) delete mode 100644 api/AltV.Net.Client/Interfaces/IClient.cs diff --git a/api/AltV.Net.Async/Elements/Entities/AsyncBaseObject.cs b/api/AltV.Net.Async/Elements/Entities/AsyncBaseObject.cs index 084cf8d37..ee7f35725 100644 --- a/api/AltV.Net.Async/Elements/Entities/AsyncBaseObject.cs +++ b/api/AltV.Net.Async/Elements/Entities/AsyncBaseObject.cs @@ -95,51 +95,6 @@ public bool GetMetaData(string key, out T result) } } - public bool GetMetaData(string key, out int result) - { - AsyncContext?.RunAll(); - lock (BaseObject) - { - if (!AsyncContext.CheckIfExistsOrCachedNullable(BaseObject)) - { - result = default; - return false; - } - - return BaseObject.GetMetaData(key, out result); - } - } - - public bool GetMetaData(string key, out uint result) - { - AsyncContext?.RunAll(); - lock (BaseObject) - { - if (!AsyncContext.CheckIfExistsOrCachedNullable(BaseObject)) - { - result = default; - return false; - } - - return BaseObject.GetMetaData(key, out result); - } - } - - public bool GetMetaData(string key, out float result) - { - AsyncContext?.RunAll(); - lock (BaseObject) - { - if (!AsyncContext.CheckIfExistsOrCachedNullable(BaseObject)) - { - result = default; - return false; - } - - return BaseObject.GetMetaData(key, out result); - } - } - public void SetMetaData(string key, in MValueConst value) { lock (BaseObject) diff --git a/api/AltV.Net.Async/Elements/Entities/AsyncVirtualEntity.cs b/api/AltV.Net.Async/Elements/Entities/AsyncVirtualEntity.cs index 6ddcb1617..96a1a044e 100644 --- a/api/AltV.Net.Async/Elements/Entities/AsyncVirtualEntity.cs +++ b/api/AltV.Net.Async/Elements/Entities/AsyncVirtualEntity.cs @@ -33,48 +33,6 @@ public bool HasStreamSyncedMetaData(string key) } } - public bool GetStreamSyncedMetaData(string key, out int result) - { - lock (VirtualEntity) - { - if (!AsyncContext.CheckIfExistsNullable(VirtualEntity)) - { - result = default; - return false; - } - - return VirtualEntity.GetStreamSyncedMetaData(key, out result); - } - } - - public bool GetStreamSyncedMetaData(string key, out uint result) - { - lock (VirtualEntity) - { - if (!AsyncContext.CheckIfExistsNullable(VirtualEntity)) - { - result = default; - return false; - } - - return VirtualEntity.GetStreamSyncedMetaData(key, out result); - } - } - - public bool GetStreamSyncedMetaData(string key, out float result) - { - lock (VirtualEntity) - { - if (!AsyncContext.CheckIfExistsNullable(VirtualEntity)) - { - result = default; - return false; - } - - return VirtualEntity.GetStreamSyncedMetaData(key, out result); - } - } - public bool GetStreamSyncedMetaData(string key, out T result) { lock (VirtualEntity) diff --git a/api/AltV.Net.Client/Alt.GlobalMeta.cs b/api/AltV.Net.Client/Alt.GlobalMeta.cs index 642c90799..cdf0e40c3 100644 --- a/api/AltV.Net.Client/Alt.GlobalMeta.cs +++ b/api/AltV.Net.Client/Alt.GlobalMeta.cs @@ -68,84 +68,37 @@ public static bool GetMetaData(string key, out T result) Core.GetMetaData(key, out var mValue); using (mValue) { - if (!(mValue.ToObject() is T cast)) - { - result = default; - return false; - } - - result = cast; - } - - return true; - } - public static bool GetSyncedMetaData(string key, out int result) - { - Core.GetSyncedMetaData(key, out var mValue); - using (mValue) - { - if (mValue.type != MValueConst.Type.Int) + try { - result = default; - return false; + result = (T)Convert.ChangeType(mValue.ToObject(), typeof(T)); + return true; } - - result = (int) mValue.GetInt(); - } - - return true; - } - - public static bool GetSyncedMetaData(string key, out uint result) - { - Core.GetSyncedMetaData(key, out var mValue); - using (mValue) - { - if (mValue.type != MValueConst.Type.Uint) + catch { result = default; return false; } - - result = (uint) mValue.GetUint(); } - - return true; } - public static bool GetSyncedMetaData(string key, out float result) + public static bool GetSyncedMetaData(string key, out T result) { Core.GetSyncedMetaData(key, out var mValue); using (mValue) { - if (mValue.type != MValueConst.Type.Double) + + try { - result = default; - return false; + result = (T)Convert.ChangeType(mValue.ToObject(), typeof(T)); + return true; } - - result = (float) mValue.GetDouble(); - } - - return true; - } - - public static bool GetSyncedMetaData(string key, out T result) - { - Core.GetSyncedMetaData(key, out var mValue); - using (mValue) - { - if (!(mValue.ToObject() is T cast)) + catch { result = default; return false; } - - result = cast; } - - return true; } public static bool GetLocalMetaData(string key, out T result) @@ -153,14 +106,18 @@ public static bool GetLocalMetaData(string key, out T result) Core.GetLocalMetaData(key, out var mValue); using (mValue) { - if (!(mValue.ToObject() is T cast)) + + try + { + result = (T)Convert.ChangeType(mValue.ToObject(), typeof(T)); + return true; + } + catch { result = default; return false; } - result = cast; } - return true; } } } \ No newline at end of file diff --git a/api/AltV.Net.Client/Elements/Data/LocalStorage.cs b/api/AltV.Net.Client/Elements/Data/LocalStorage.cs index aac55c7c4..cc3a0bbf7 100644 --- a/api/AltV.Net.Client/Elements/Data/LocalStorage.cs +++ b/api/AltV.Net.Client/Elements/Data/LocalStorage.cs @@ -162,16 +162,18 @@ public bool Get(string key, out T result) Get(key, out MValueConst mValue); using (mValue) { - if (!(mValue.ToObject() is T cast)) + + try + { + result = (T)Convert.ChangeType(mValue.ToObject(), typeof(T)); + return true; + } + catch { result = default; return false; } - - result = cast; } - - return true; } } diff --git a/api/AltV.Net.Client/Elements/Entities/Entity.cs b/api/AltV.Net.Client/Elements/Entities/Entity.cs index 11bfc79f1..47beb8a48 100644 --- a/api/AltV.Net.Client/Elements/Entities/Entity.cs +++ b/api/AltV.Net.Client/Elements/Entities/Entity.cs @@ -146,16 +146,20 @@ public bool GetStreamSyncedMetaData(string key, out T result) { CheckIfEntityExists(); GetStreamSyncedMetaData(key, out MValueConst mValue); - var obj = mValue.ToObject(); - mValue.Dispose(); - if (!(obj is T cast)) + using (mValue) { - result = default; - return false; - } - result = cast; - return true; + try + { + result = (T)Convert.ChangeType(mValue.ToObject(), typeof(T)); + return true; + } + catch + { + result = default; + return false; + } + } } public bool Frozen @@ -178,60 +182,6 @@ public bool Frozen } } - public bool GetStreamSyncedMetaData(string key, out int result) - { - CheckIfEntityExists(); - GetStreamSyncedMetaData(key, out MValueConst mValue); - using (mValue) - { - if (mValue.type != MValueConst.Type.Int) - { - result = default; - return false; - } - - result = (int) mValue.GetInt(); - } - - return true; - } - - public bool GetStreamSyncedMetaData(string key, out uint result) - { - CheckIfEntityExists(); - GetStreamSyncedMetaData(key, out MValueConst mValue); - using (mValue) - { - if (mValue.type != MValueConst.Type.Uint) - { - result = default; - return false; - } - - result = (uint) mValue.GetUint(); - } - - return true; - } - - public bool GetStreamSyncedMetaData(string key, out float result) - { - CheckIfEntityExists(); - GetStreamSyncedMetaData(key, out MValueConst mValue); - using (mValue) - { - if (mValue.type != MValueConst.Type.Double) - { - result = default; - return false; - } - - result = (float) mValue.GetDouble(); - } - - return true; - } - public override void CheckIfEntityExists() { CheckIfCallIsValid(); diff --git a/api/AltV.Net.Client/Elements/Entities/VirtualEntity.cs b/api/AltV.Net.Client/Elements/Entities/VirtualEntity.cs index 02e129062..ecc28df66 100644 --- a/api/AltV.Net.Client/Elements/Entities/VirtualEntity.cs +++ b/api/AltV.Net.Client/Elements/Entities/VirtualEntity.cs @@ -64,74 +64,24 @@ public bool HasStreamSyncedMetaData(string key) } } - public bool GetStreamSyncedMetaData(string key, out int result) + public bool GetStreamSyncedMetaData(string key, out T result) { CheckIfEntityExists(); GetStreamSyncedMetaData(key, out MValueConst mValue); using (mValue) { - if (mValue.type != MValueConst.Type.Int) - { - result = default; - return false; - } - result = (int) mValue.GetInt(); - } - - return true; - } - - public bool GetStreamSyncedMetaData(string key, out uint result) - { - CheckIfEntityExists(); - GetStreamSyncedMetaData(key, out MValueConst mValue); - using (mValue) - { - if (mValue.type != MValueConst.Type.Uint) + try { - result = default; - return false; + result = (T)Convert.ChangeType(mValue.ToObject(), typeof(T)); + return true; } - - result = (uint) mValue.GetUint(); - } - - return true; - } - - public bool GetStreamSyncedMetaData(string key, out float result) - { - CheckIfEntityExists(); - GetStreamSyncedMetaData(key, out MValueConst mValue); - using (mValue) - { - if (mValue.type != MValueConst.Type.Double) + catch { result = default; return false; } - - result = (float) mValue.GetDouble(); - } - - return true; - } - - public bool GetStreamSyncedMetaData(string key, out T result) - { - CheckIfEntityExists(); - GetStreamSyncedMetaData(key, out MValueConst mValue); - var obj = mValue.ToObject(); - mValue.Dispose(); - if (!(obj is T cast)) - { - result = default; - return false; } - - result = cast; - return true; } public void GetStreamSyncedMetaData(string key, out MValueConst value) diff --git a/api/AltV.Net.Client/Interfaces/IClient.cs b/api/AltV.Net.Client/Interfaces/IClient.cs deleted file mode 100644 index 7b52fc5e1..000000000 --- a/api/AltV.Net.Client/Interfaces/IClient.cs +++ /dev/null @@ -1,54 +0,0 @@ -namespace AltV.Net.Client.Interfaces -{ - public interface IClient - { - - #region Shared - - bool IsDebug { get; } - string Version { get; } - string Branch { get; } - - //MValueNone CreaeMValueNone(); - //MValueNil CreateMValueNil(); - //MValueBool CreateMValueBool(bool val); - //MValueInt CreateMValueInt(int val); - //MValueUInt CreateMValueUInt(uint64_t val); - //MValueDouble CreateMValueDouble(double val); - //MValueString CreateMValueString(String val); - //MValueList CreateMValueList(Size size = 0); - //MValueDict CreateMValueDict(); - //MValueFunction CreateMValueFunction(IntPtr impl); - //MValueVector2 CreateMValueVector2(Vector2 val); - //MValueVector3 CreateMValueVector3(Vector3 val); - //MValueRGBA CreateMValueRGBA(RGBA val); - //MValueByteArray CreateMValueByteArray(byte[] val); - //IResource GetResource(string name); - //IResource GetResource(IntPtr resourcePointer); - //IEntity GetEntityById(int id); - //IEntity[] GetEntities(); - //IPlayer[] GetPlayers(); - //IVehicle[] GetVehicles(); - //IBlip[] GetBlips(); - //MValueConst GetMetaData(string key); - void SetMetaData(string key, object value); - void DeleteMetaData(string key); - bool HasSyncedMetaData(string key); - //MValueConst GetSyncedMetaData(string key); - //IPermission[] GetRequiredPermissions(); - //IPermission[] GetOptionalPermissions(); - void LogInfo(string message); - void LogDebug(string message); - void LogWarning(string message); - void LogError(string message); - void LogColored(string message); - uint Hash(string value); - bool FileExists(string path); - string ReadFile(string path); - void TriggerLocalEvent(string eventName, params object[] args); - bool HasMetaData(string key); - - #endregion - - } -} \ No newline at end of file diff --git a/api/AltV.Net.EntitySync/Entity.cs b/api/AltV.Net.EntitySync/Entity.cs index 829af46ac..bd5adf1fe 100644 --- a/api/AltV.Net.EntitySync/Entity.cs +++ b/api/AltV.Net.EntitySync/Entity.cs @@ -21,7 +21,7 @@ public Vector3 Position } private bool exists = false; - + public bool Exists => exists; private bool positionState = false; @@ -65,13 +65,13 @@ public uint Range public float TempNetOwnerRange { get; set; } = float.MaxValue; public float LastStreamInRange { get; set; } = -1; - + public int StartingXIndex { get; set; } - + public int StoppingXIndex { get; set; } - + public int StartingYIndex { get; set; } - + public int StoppingYIndex { get; set; } private readonly object propertiesMutex = new object(); @@ -168,7 +168,7 @@ public bool TryGetData(string key, out object value) return data.TryGetValue(key, out value); } } - + public ICollection GetDataKeys() { lock (data) @@ -187,14 +187,16 @@ public bool TryGetData(string key, out T value) return false; } - if (!(currValue is T correctValue)) + try + { + value = (T)Convert.ChangeType(currValue, typeof(T)); + return true; + } + catch { value = default; return false; } - - value = correctValue; - return true; } } diff --git a/api/AltV.Net.Mock/MockCheckpoint.cs b/api/AltV.Net.Mock/MockCheckpoint.cs index da30338fd..61adb4ec2 100644 --- a/api/AltV.Net.Mock/MockCheckpoint.cs +++ b/api/AltV.Net.Mock/MockCheckpoint.cs @@ -47,21 +47,6 @@ public bool HasStreamSyncedMetaData(string key) throw new NotImplementedException(); } - public bool GetStreamSyncedMetaData(string key, out int result) - { - throw new NotImplementedException(); - } - - public bool GetStreamSyncedMetaData(string key, out uint result) - { - throw new NotImplementedException(); - } - - public bool GetStreamSyncedMetaData(string key, out float result) - { - throw new NotImplementedException(); - } - public void GetStreamSyncedMetaData(string key, out MValueConst value) { throw new NotImplementedException(); diff --git a/api/AltV.Net.Mock/MockEntity.cs b/api/AltV.Net.Mock/MockEntity.cs index 6e01dc9d4..9bc34a4ba 100644 --- a/api/AltV.Net.Mock/MockEntity.cs +++ b/api/AltV.Net.Mock/MockEntity.cs @@ -59,14 +59,16 @@ public bool GetMetaData(string key, out T result) return false; } - if (!(value.ToObject() is T cast)) + try + { + result = (T)Convert.ChangeType(value.ToObject(), typeof(T)); + return true; + } + catch { result = default; return false; } - - result = cast; - return true; } public void SetData(string key, object value) diff --git a/api/AltV.Net.Mock/MockVirtualEntity.cs b/api/AltV.Net.Mock/MockVirtualEntity.cs index 8fa978152..e44907dc3 100644 --- a/api/AltV.Net.Mock/MockVirtualEntity.cs +++ b/api/AltV.Net.Mock/MockVirtualEntity.cs @@ -21,21 +21,6 @@ public bool HasStreamSyncedMetaData(string key) throw new NotImplementedException(); } - public bool GetStreamSyncedMetaData(string key, out int result) - { - throw new NotImplementedException(); - } - - public bool GetStreamSyncedMetaData(string key, out uint result) - { - throw new NotImplementedException(); - } - - public bool GetStreamSyncedMetaData(string key, out float result) - { - throw new NotImplementedException(); - } - public bool GetStreamSyncedMetaData(string key, out T result) { throw new NotImplementedException(); diff --git a/api/AltV.Net.Shared/Elements/Entities/ISharedBaseObject.cs b/api/AltV.Net.Shared/Elements/Entities/ISharedBaseObject.cs index c048dccb0..d9b7ad971 100644 --- a/api/AltV.Net.Shared/Elements/Entities/ISharedBaseObject.cs +++ b/api/AltV.Net.Shared/Elements/Entities/ISharedBaseObject.cs @@ -68,12 +68,6 @@ public interface ISharedBaseObject : INative /// void DeleteMetaData(string key); - bool GetMetaData(string key, out int result); - - bool GetMetaData(string key, out uint result); - - bool GetMetaData(string key, out float result); - /// /// Sets a value with a given on an entity. /// @@ -138,33 +132,6 @@ public interface ISharedBaseObject : INative [Obsolete] bool HasSyncedMetaData(string key); - /// - /// Gets the synced meta data of an entity. - /// - /// Synced meta data is accessible across different serverside resources and across all clients. - /// - /// - [Obsolete] - bool GetSyncedMetaData(string key, out int result); - - /// - /// Gets the synced meta data of an entity. - /// - /// Synced meta data is accessible across different serverside resources and across all clients. - /// - /// - [Obsolete] - bool GetSyncedMetaData(string key, out uint result); - - /// - /// Gets the synced meta data of an entity. - /// - /// Synced meta data is accessible across different serverside resources and across all clients. - /// - /// - [Obsolete] - bool GetSyncedMetaData(string key, out float result); - /// /// Gets the synced meta data of an entity. /// diff --git a/api/AltV.Net.Shared/Elements/Entities/ISharedEntity.cs b/api/AltV.Net.Shared/Elements/Entities/ISharedEntity.cs index 1ce5aa718..916ef7a53 100644 --- a/api/AltV.Net.Shared/Elements/Entities/ISharedEntity.cs +++ b/api/AltV.Net.Shared/Elements/Entities/ISharedEntity.cs @@ -38,36 +38,6 @@ public interface ISharedEntity : ISharedWorldObject /// bool HasStreamSyncedMetaData(string key); - /// - /// Get synced meta data of the entity. - /// - /// Stream synced meta data is accessible across different serverside resources and across all clients within the streaming range of the clients. - /// - /// - /// - /// This entity was removed - bool GetStreamSyncedMetaData(string key, out int result); - - /// - /// Get synced meta data of the entity. - /// - /// Stream synced meta data is accessible across different serverside resources and across all clients within the streaming range of the clients. - /// - /// - /// - /// This entity was removed - bool GetStreamSyncedMetaData(string key, out uint result); - - /// - /// Get synced meta data of the entity. - /// - /// Stream synced meta data is accessible across different serverside resources and across all clients within the streaming range of the clients. - /// - /// - /// - /// This entity was removed - bool GetStreamSyncedMetaData(string key, out float result); - /// /// Get synced meta data of the entity. /// diff --git a/api/AltV.Net.Shared/Elements/Entities/ISharedVirtualEntity.cs b/api/AltV.Net.Shared/Elements/Entities/ISharedVirtualEntity.cs index 91b7a0a49..00f9d24c0 100644 --- a/api/AltV.Net.Shared/Elements/Entities/ISharedVirtualEntity.cs +++ b/api/AltV.Net.Shared/Elements/Entities/ISharedVirtualEntity.cs @@ -13,37 +13,6 @@ public interface ISharedVirtualEntity : ISharedWorldObject bool HasStreamSyncedMetaData(string key); - - /// - /// Get synced meta data of the entity. - /// - /// Stream synced meta data is accessible across different serverside resources and across all clients within the streaming range of the clients. - /// - /// - /// - /// This entity was removed - bool GetStreamSyncedMetaData(string key, out int result); - - /// - /// Get synced meta data of the entity. - /// - /// Stream synced meta data is accessible across different serverside resources and across all clients within the streaming range of the clients. - /// - /// - /// - /// This entity was removed - bool GetStreamSyncedMetaData(string key, out uint result); - - /// - /// Get synced meta data of the entity. - /// - /// Stream synced meta data is accessible across different serverside resources and across all clients within the streaming range of the clients. - /// - /// - /// - /// This entity was removed - bool GetStreamSyncedMetaData(string key, out float result); - /// /// Get synced meta data of the entity. /// diff --git a/api/AltV.Net.Shared/Elements/Entities/SharedBaseObject.cs b/api/AltV.Net.Shared/Elements/Entities/SharedBaseObject.cs index 211218cc8..24c9cbd14 100644 --- a/api/AltV.Net.Shared/Elements/Entities/SharedBaseObject.cs +++ b/api/AltV.Net.Shared/Elements/Entities/SharedBaseObject.cs @@ -41,14 +41,16 @@ public bool GetData(string key, out T result) return false; } - if (!(value is T cast)) + try + { + result = (T)Convert.ChangeType(value, typeof(T)); + return true; + } + catch { result = default; return false; } - - result = cast; - return true; } @@ -212,16 +214,18 @@ public bool GetMetaData(string key, out T result) GetMetaData(key, out MValueConst mValue); using (mValue) { - if (!(mValue.ToObject() is T cast)) + + try + { + result = (T)Convert.ChangeType(mValue.ToObject(), typeof(T)); + return true; + } + catch { result = default; return false; } - - result = cast; } - - return true; } @@ -284,89 +288,36 @@ public void GetSyncedMetaData(string key, out MValueConst value) [Obsolete] public bool GetSyncedMetaData(string key, out T result) - { - CheckIfEntityExists(); - GetSyncedMetaData(key, out MValueConst mValue); - var obj = mValue.ToObject(); - mValue.Dispose(); - if (!(obj is T cast)) - { - result = default; - return false; - } - - result = cast; - return true; - } - - [Obsolete] - public bool HasSyncedMetaData(string key) - { - CheckIfEntityExists(); - unsafe - { - var stringPtr = MemoryUtils.StringToHGlobalUtf8(key); - var result = Core.Library.Shared.BaseObject_HasSyncedMetaData(BaseObjectNativePointer, stringPtr); - Marshal.FreeHGlobal(stringPtr); - return result == 1; - } - } - - [Obsolete] - public bool GetSyncedMetaData(string key, out int result) { CheckIfEntityExists(); GetSyncedMetaData(key, out MValueConst mValue); using (mValue) { - if (mValue.type != MValueConst.Type.Int) + + try { - result = default; - return false; + result = (T)Convert.ChangeType(mValue.ToObject(), typeof(T)); + return true; } - - result = (int) mValue.GetInt(); - } - - return true; - } - - [Obsolete] - public bool GetSyncedMetaData(string key, out uint result) - { - CheckIfEntityExists(); - GetSyncedMetaData(key, out MValueConst mValue); - using (mValue) - { - if (mValue.type != MValueConst.Type.Uint) + catch { result = default; return false; } - - result = (uint) mValue.GetUint(); } - - return true; } [Obsolete] - public bool GetSyncedMetaData(string key, out float result) + public bool HasSyncedMetaData(string key) { CheckIfEntityExists(); - GetSyncedMetaData(key, out MValueConst mValue); - using (mValue) + unsafe { - if (mValue.type != MValueConst.Type.Double) - { - result = default; - return false; - } - - result = (float) mValue.GetDouble(); + var stringPtr = MemoryUtils.StringToHGlobalUtf8(key); + var result = Core.Library.Shared.BaseObject_HasSyncedMetaData(BaseObjectNativePointer, stringPtr); + Marshal.FreeHGlobal(stringPtr); + return result == 1; } - - return true; } } } \ No newline at end of file diff --git a/api/AltV.Net.Shared/SharedCore.cs b/api/AltV.Net.Shared/SharedCore.cs index f1871d7a1..f36471347 100644 --- a/api/AltV.Net.Shared/SharedCore.cs +++ b/api/AltV.Net.Shared/SharedCore.cs @@ -463,6 +463,15 @@ public void CreateMValue(out MValueConst mValue, object obj) MValueConst[] dictValues; MValueWriter2 writer; + if (obj.GetType() is bool) + { + CreateMValueBool(out mValue, (bool)obj); + } + else if(obj.GetType() is int) + { + + } + switch (obj) { case ISharedBaseObject baseObject: diff --git a/api/AltV.Net/Alt.GlobalMeta.cs b/api/AltV.Net/Alt.GlobalMeta.cs index 96f62ce5d..b485b6a70 100644 --- a/api/AltV.Net/Alt.GlobalMeta.cs +++ b/api/AltV.Net/Alt.GlobalMeta.cs @@ -1,3 +1,4 @@ +using System; using AltV.Net.Elements.Args; namespace AltV.Net @@ -5,151 +6,53 @@ namespace AltV.Net public static partial class Alt { public static void SetMetaData(string key, object value) => Core.SetMetaData(key, value); - + public static bool HasMetaData(string key) => Core.HasMetaData(key); public static void DeleteMetaData(string key) => Core.DeleteMetaData(key); - - public static bool GetMetaData(string key, out int result) - { - Core.GetMetaData(key, out var mValue); - using (mValue) - { - if (mValue.type != MValueConst.Type.Int) - { - result = default; - return false; - } - - result = (int) mValue.GetInt(); - } - return true; - } - - public static bool GetMetaData(string key, out uint result) + public static bool GetMetaData(string key, out T result) { Core.GetMetaData(key, out var mValue); using (mValue) { - if (mValue.type != MValueConst.Type.Uint) - { - result = default; - return false; - } - result = (uint) mValue.GetUint(); - } - - return true; - } - - public static bool GetMetaData(string key, out float result) - { - Core.GetMetaData(key, out var mValue); - using (mValue) - { - if (mValue.type != MValueConst.Type.Double) + try { - result = default; - return false; + result = (T)Convert.ChangeType(mValue.ToObject(), typeof(T)); + return true; } - - result = (float) mValue.GetDouble(); - } - - return true; - } - - public static bool GetMetaData(string key, out T result) - { - Core.GetMetaData(key, out var mValue); - using (mValue) - { - if (!(mValue.ToObject() is T cast)) + catch { result = default; return false; } - - result = cast; } - - return true; } - + public static void SetSyncedMetaData(string key, object value) => Core.SetSyncedMetaData(key, value); - + public static bool HasSyncedMetaData(string key) => Core.HasSyncedMetaData(key); public static void DeleteSyncedMetaData(string key) => Core.DeleteSyncedMetaData(key); - - public static bool GetSyncedMetaData(string key, out int result) - { - Core.GetSyncedMetaData(key, out var mValue); - using (mValue) - { - if (mValue.type != MValueConst.Type.Int) - { - result = default; - return false; - } - - result = (int) mValue.GetInt(); - } - - return true; - } - public static bool GetSyncedMetaData(string key, out uint result) + public static bool GetSyncedMetaData(string key, out T result) { Core.GetSyncedMetaData(key, out var mValue); using (mValue) { - if (mValue.type != MValueConst.Type.Uint) - { - result = default; - return false; - } - - result = (uint) mValue.GetUint(); - } - return true; - } - - public static bool GetSyncedMetaData(string key, out float result) - { - Core.GetSyncedMetaData(key, out var mValue); - using (mValue) - { - if (mValue.type != MValueConst.Type.Double) + try { - result = default; - return false; + result = (T)Convert.ChangeType(mValue.ToObject(), typeof(T)); + return true; } - - result = (float) mValue.GetDouble(); - } - - return true; - } - - public static bool GetSyncedMetaData(string key, out T result) - { - Core.GetSyncedMetaData(key, out var mValue); - using (mValue) - { - if (!(mValue.ToObject() is T cast)) + catch { result = default; return false; } - - result = cast; } - - return true; } } } \ No newline at end of file diff --git a/api/AltV.Net/Elements/Entities/Checkpoint.cs b/api/AltV.Net/Elements/Entities/Checkpoint.cs index 89ef57071..72462469e 100644 --- a/api/AltV.Net/Elements/Entities/Checkpoint.cs +++ b/api/AltV.Net/Elements/Entities/Checkpoint.cs @@ -242,74 +242,24 @@ public bool HasStreamSyncedMetaData(string key) } } - public bool GetStreamSyncedMetaData(string key, out int result) + public bool GetStreamSyncedMetaData(string key, out T result) { CheckIfEntityExists(); GetStreamSyncedMetaData(key, out MValueConst mValue); using (mValue) { - if (mValue.type != MValueConst.Type.Int) - { - result = default; - return false; - } - result = (int)mValue.GetInt(); - } - - return true; - } - - public bool GetStreamSyncedMetaData(string key, out uint result) - { - CheckIfEntityExists(); - GetStreamSyncedMetaData(key, out MValueConst mValue); - using (mValue) - { - if (mValue.type != MValueConst.Type.Uint) + try { - result = default; - return false; + result = (T)Convert.ChangeType(mValue.ToObject(), typeof(T)); + return true; } - - result = (uint)mValue.GetUint(); - } - - return true; - } - - public bool GetStreamSyncedMetaData(string key, out float result) - { - CheckIfEntityExists(); - GetStreamSyncedMetaData(key, out MValueConst mValue); - using (mValue) - { - if (mValue.type != MValueConst.Type.Double) + catch { result = default; return false; } - - result = (float)mValue.GetDouble(); } - - return true; - } - - public bool GetStreamSyncedMetaData(string key, out T result) - { - CheckIfEntityExists(); - GetStreamSyncedMetaData(key, out MValueConst mValue); - var obj = mValue.ToObject(); - mValue.Dispose(); - if (!(obj is T cast)) - { - result = default; - return false; - } - - result = cast; - return true; } public void GetStreamSyncedMetaData(string key, out MValueConst value) diff --git a/api/AltV.Net/Elements/Entities/Entity.cs b/api/AltV.Net/Elements/Entities/Entity.cs index 0355bcca5..b0351a9e2 100644 --- a/api/AltV.Net/Elements/Entities/Entity.cs +++ b/api/AltV.Net/Elements/Entities/Entity.cs @@ -196,73 +196,23 @@ public void SetStreamSyncedMetaData(string key, object value) } public bool GetStreamSyncedMetaData(string key, out T result) - { - CheckIfEntityExistsOrCached(); - GetStreamSyncedMetaData(key, out MValueConst mValue); - var obj = mValue.ToObject(); - mValue.Dispose(); - if (!(obj is T cast)) - { - result = default; - return false; - } - - result = cast; - return true; - } - - public bool GetStreamSyncedMetaData(string key, out int result) { CheckIfEntityExistsOrCached(); GetStreamSyncedMetaData(key, out MValueConst mValue); using (mValue) { - if (mValue.type != MValueConst.Type.Int) - { - result = default; - return false; - } - result = (int)mValue.GetInt(); - } - - return true; - } - - public bool GetStreamSyncedMetaData(string key, out uint result) - { - CheckIfEntityExistsOrCached(); - GetStreamSyncedMetaData(key, out MValueConst mValue); - using (mValue) - { - if (mValue.type != MValueConst.Type.Uint) + try { - result = default; - return false; + result = (T)Convert.ChangeType(mValue.ToObject(), typeof(T)); + return true; } - - result = (uint)mValue.GetUint(); - } - - return true; - } - - public bool GetStreamSyncedMetaData(string key, out float result) - { - CheckIfEntityExistsOrCached(); - GetStreamSyncedMetaData(key, out MValueConst mValue); - using (mValue) - { - if (mValue.type != MValueConst.Type.Double) + catch { result = default; return false; } - - result = (float)mValue.GetDouble(); } - - return true; } public void ResetNetworkOwner() diff --git a/api/AltV.Net/Elements/Entities/ICheckpoint.cs b/api/AltV.Net/Elements/Entities/ICheckpoint.cs index 124429ec1..e4f14f969 100644 --- a/api/AltV.Net/Elements/Entities/ICheckpoint.cs +++ b/api/AltV.Net/Elements/Entities/ICheckpoint.cs @@ -13,9 +13,6 @@ public interface ICheckpoint : ISharedCheckpoint, IColShape void SetStreamSyncedMetaData(string key, in MValueConst value); void DeleteStreamSyncedMetaData(string key); bool HasStreamSyncedMetaData(string key); - bool GetStreamSyncedMetaData(string key, out int result); - bool GetStreamSyncedMetaData(string key, out uint result); - bool GetStreamSyncedMetaData(string key, out float result); void GetStreamSyncedMetaData(string key, out MValueConst value); bool GetStreamSyncedMetaData(string key, out T result); } diff --git a/api/AltV.Net/Elements/Entities/IPlayer.cs b/api/AltV.Net/Elements/Entities/IPlayer.cs index d14d196a7..7624c7830 100644 --- a/api/AltV.Net/Elements/Entities/IPlayer.cs +++ b/api/AltV.Net/Elements/Entities/IPlayer.cs @@ -623,16 +623,18 @@ public static bool GetLocalMetaData(this IPlayer player, string key, out T re player.GetLocalMetaData(key, out MValueConst mValue); using (mValue) { - if (!(mValue.ToObject() is T cast)) + + try + { + result = (T)Convert.ChangeType(mValue.ToObject(), typeof(T)); + return true; + } + catch { result = default; return false; } - - result = cast; } - - return true; } } } \ No newline at end of file diff --git a/api/AltV.Net/Elements/Entities/VirtualEntity.cs b/api/AltV.Net/Elements/Entities/VirtualEntity.cs index 7030f0a66..816f2c6c3 100644 --- a/api/AltV.Net/Elements/Entities/VirtualEntity.cs +++ b/api/AltV.Net/Elements/Entities/VirtualEntity.cs @@ -62,74 +62,24 @@ public bool HasStreamSyncedMetaData(string key) } } - public bool GetStreamSyncedMetaData(string key, out int result) + public bool GetStreamSyncedMetaData(string key, out T result) { CheckIfEntityExists(); GetStreamSyncedMetaData(key, out MValueConst mValue); using (mValue) { - if (mValue.type != MValueConst.Type.Int) - { - result = default; - return false; - } - result = (int) mValue.GetInt(); - } - - return true; - } - - public bool GetStreamSyncedMetaData(string key, out uint result) - { - CheckIfEntityExists(); - GetStreamSyncedMetaData(key, out MValueConst mValue); - using (mValue) - { - if (mValue.type != MValueConst.Type.Uint) + try { - result = default; - return false; + result = (T)Convert.ChangeType(mValue.ToObject(), typeof(T)); + return true; } - - result = (uint) mValue.GetUint(); - } - - return true; - } - - public bool GetStreamSyncedMetaData(string key, out float result) - { - CheckIfEntityExists(); - GetStreamSyncedMetaData(key, out MValueConst mValue); - using (mValue) - { - if (mValue.type != MValueConst.Type.Double) + catch { result = default; return false; } - - result = (float) mValue.GetDouble(); } - - return true; - } - - public bool GetStreamSyncedMetaData(string key, out T result) - { - CheckIfEntityExists(); - GetStreamSyncedMetaData(key, out MValueConst mValue); - var obj = mValue.ToObject(); - mValue.Dispose(); - if (!(obj is T cast)) - { - result = default; - return false; - } - - result = cast; - return true; } public void GetStreamSyncedMetaData(string key, out MValueConst value) From 78e28404e2146d3750d2f7cc7ba0b4283e21f89f Mon Sep 17 00:00:00 2001 From: doxoh Date: Mon, 25 Dec 2023 22:21:37 +0100 Subject: [PATCH 57/75] fix(server): fix OnWeaponDamage response for Registered event --- api/AltV.Net/Alt.RegisterEvents.cs | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/api/AltV.Net/Alt.RegisterEvents.cs b/api/AltV.Net/Alt.RegisterEvents.cs index 7c833e2ad..e38127c8e 100644 --- a/api/AltV.Net/Alt.RegisterEvents.cs +++ b/api/AltV.Net/Alt.RegisterEvents.cs @@ -338,14 +338,9 @@ public static void RegisterEvents(object target) scriptFunction.Set(damage); scriptFunction.Set(shotOffset); scriptFunction.Set(damageOffset); - if (scriptFunction.Call() is uint uintValue) + if (scriptFunction.Call() is WeaponDamageResponse response) { - return uintValue; - } - - if (scriptFunction.Call() is bool boolValue) - { - return boolValue; + return response; } return 0; From ac4fbbf473e02e03e7a65b470d8bce4daced6bd7 Mon Sep 17 00:00:00 2001 From: doxoh Date: Tue, 26 Dec 2023 19:54:20 +0100 Subject: [PATCH 58/75] feat(server): Add VehicleBadge setter --- .../Elements/Entities/AsyncVehicle.cs | 19 +++++++++ api/AltV.Net.CApi.Generator/Program.cs | 33 ++++++++-------- api/AltV.Net.CApi.Generator/TypeRegistry.cs | 2 + .../Data/VehicleBadgePosition.cs | 39 +++++++++++++++++++ api/AltV.Net.CApi/Libraries/ClientLibrary.cs | 5 ++- api/AltV.Net.CApi/Libraries/ServerLibrary.cs | 10 ++++- api/AltV.Net.CApi/Libraries/SharedLibrary.cs | 5 ++- api/AltV.Net/Elements/Entities/IVehicle.cs | 4 ++ api/AltV.Net/Elements/Entities/Vehicle.cs | 14 +++++++ runtime | 2 +- 10 files changed, 110 insertions(+), 23 deletions(-) create mode 100644 api/AltV.Net.CApi/Data/VehicleBadgePosition.cs diff --git a/api/AltV.Net.Async/Elements/Entities/AsyncVehicle.cs b/api/AltV.Net.Async/Elements/Entities/AsyncVehicle.cs index 59ddf12a3..61ee51e9d 100644 --- a/api/AltV.Net.Async/Elements/Entities/AsyncVehicle.cs +++ b/api/AltV.Net.Async/Elements/Entities/AsyncVehicle.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Diagnostics.CodeAnalysis; using System.Numerics; +using AltV.Net.CApi.Data; using AltV.Net.Data; using AltV.Net.Elements.Entities; using AltV.Net.Enums; @@ -1993,6 +1994,24 @@ public List Passengers } } + public void SetBage(string textureDictionary, string texture, VehicleBadgePosition[] vehicleBadgePosition) + { + lock (Vehicle) + { + if (!AsyncContext.CheckIfExistsOrCachedNullable(Vehicle)) return; + Vehicle.SetBage(textureDictionary, texture, vehicleBadgePosition); + } + } + + public void SetBage(uint textureDictionary, uint texture, VehicleBadgePosition[] vehicleBadgePosition) + { + lock (Vehicle) + { + if (!AsyncContext.CheckIfExistsOrCachedNullable(Vehicle)) return; + Vehicle.SetBage(textureDictionary, texture, vehicleBadgePosition); + } + } + [Obsolete("Use new async API instead")] public IVehicle ToAsync(IAsyncContext asyncContext) { diff --git a/api/AltV.Net.CApi.Generator/Program.cs b/api/AltV.Net.CApi.Generator/Program.cs index a1ee8a2d9..f9b55b2b8 100644 --- a/api/AltV.Net.CApi.Generator/Program.cs +++ b/api/AltV.Net.CApi.Generator/Program.cs @@ -15,7 +15,7 @@ private static string GetCMethodDelegateType(CMethod method) var args = string.Join("", method.Params.Select(p => p.Type + ", ")); return $"delegate* unmanaged[Cdecl{noGc}]<{args}{method.ReturnType}>"; } - + private static string GetCMethodArgs(CMethod method) { return string.Join(", ", method.Params.Select(p => p.Type + " " + p.Name)); @@ -23,7 +23,7 @@ private static string GetCMethodArgs(CMethod method) public static void Generate() { - var libOutputPath = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly()!.Location)!, "../../../../AltV.Net.CApi/Libraries"); + var libOutputPath = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly()!.Location)!, "../../../../AltV.Net.CApi/Libraries"); var tableOutputPath = Path.Combine(Path.GetDirectoryName(Assembly.GetEntryAssembly()!.Location)!, "../../../../../runtime/c-api/func_table.cpp"); var tableHashes = new StringBuilder(); @@ -40,31 +40,32 @@ public static void Generate() collisionFound = true; Console.WriteLine("Colliding methods: " + string.Join(",", collision.Select(e => e.Name))); } - + if (collisionFound) throw new Exception("Collision found!"); var capiHash = FnvHash.Generate(string.Join(";", parsedMethods.Select(e => e.Hash))); - + foreach (var group in parsedMethods.OrderBy(e => e.Name).GroupBy(e => e.Target)) { #region C# bindings var target = group.Key.ForceCapitalize(); - + var methods = string.Join("\n", group.Where(e => !e.OnlyManual) .Select(e => $" public {GetCMethodDelegateType(e)} {e.Name} {{ get; }}")); - + // todo add docs link to the exception var fallbacks = string.Join("\n", group.Where(e => !e.OnlyManual) .Select(e => $" [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate {e.ReturnType} {e.Name}Delegate({GetCMethodArgs(e)});\n" + $" private static {e.ReturnType} {e.Name}Fallback({GetCMethodArgs(e)}) => throw new Exceptions.OutdatedSdkException(\"{e.Name}\", \"{e.Name} SDK method is outdated. Please update your module nuget\");")); - + var loads = string.Join("\n", group.Where(e => !e.OnlyManual) .Select(e => $" {e.Name} = ({GetCMethodDelegateType(e)}) GetUnmanagedPtr<{e.Name}Delegate>(funcTable, {e.Hash}UL, {e.Name}Fallback);")); - + var output = new StringBuilder(); output.Append("// ReSharper disable InconsistentNaming\n"); output.Append("using AltV.Net.Data;\n"); + output.Append("using AltV.Net.CApi.Data;\n"); output.Append("using System.Numerics;\n"); output.Append("using System.Runtime.InteropServices;\n"); output.Append("using AltV.Net.Elements.Args;\n"); @@ -100,7 +101,7 @@ public static void Generate() File.WriteAllText(Path.Combine(libOutputPath, $"{target}Library.cs"), output.ToString()); #endregion - + #region Func table if (group.Key != "SHARED") @@ -108,13 +109,13 @@ public static void Generate() tableHashes.Append($" #ifdef ALT_{group.Key}_API\n"); tablePointers.Append($" #ifdef ALT_{group.Key}_API\n"); } - + foreach (var e in group) { tableHashes.Append($" {e.Hash}UL,\n"); tablePointers.Append($" (void*) {e.Name},\n"); } - + if (group.Key != "SHARED") { tableHashes.Append($" #endif\n"); @@ -125,13 +126,13 @@ public static void Generate() var table = new StringBuilder(); table.Append("#include \"func_table.h\"\n\n"); - + table.Append($"inline uint64_t capiHash = {capiHash}UL;\n"); table.Append("inline uint64_t capiHashes[] = {\n"); table.Append(" 0,\n"); table.Append(tableHashes); table.Append("};\n\n"); - + table.Append("inline void* capiPointers[] = {\n"); table.Append(" (void*) &capiHash,\n"); table.Append(tablePointers); @@ -145,10 +146,10 @@ public static void Generate() table.Append(" };\n"); table.Append(" return &data;\n"); table.Append("}"); - + File.WriteAllText(tableOutputPath, table.ToString()); - } - + } + public static void Main() { Generate(); diff --git a/api/AltV.Net.CApi.Generator/TypeRegistry.cs b/api/AltV.Net.CApi.Generator/TypeRegistry.cs index 8c5dfe064..6191fd304 100644 --- a/api/AltV.Net.CApi.Generator/TypeRegistry.cs +++ b/api/AltV.Net.CApi.Generator/TypeRegistry.cs @@ -123,6 +123,8 @@ public static class TypeRegistry { "rotation_t", "Rotation" }, { "alt::Rotation", "Rotation" }, + { "vehicleBadgePosition_t[]", "VehicleBadgePosition[]" }, + { "cloth_t&", "Cloth*" }, { "cloth_t", "Cloth" }, { "dlccloth_t&", "DlcCloth*" }, diff --git a/api/AltV.Net.CApi/Data/VehicleBadgePosition.cs b/api/AltV.Net.CApi/Data/VehicleBadgePosition.cs new file mode 100644 index 000000000..7e84a7aa7 --- /dev/null +++ b/api/AltV.Net.CApi/Data/VehicleBadgePosition.cs @@ -0,0 +1,39 @@ +using System.Numerics; +using System.Runtime.InteropServices; + +namespace AltV.Net.CApi.Data; + +[StructLayout(LayoutKind.Sequential)] +public struct VehicleBadgePosition : IEquatable +{ + public VehicleBadgePosition(bool active, byte alpha, float size, short boneIndex, Vector3 offset, Vector3 direction, Vector3 side) + { + Active = active ? (byte)1 : (byte)0; + Alpha = alpha; + Size = size; + BoneIndex = boneIndex; + Offset = offset; + Direction = direction; + Side = side; + } + + public byte Active { get; set; } = 0; + public byte Alpha { get; set; } = 255; + public float Size { get; set; } = 1f; + public short BoneIndex { get; set; } = 0; + public Vector3 Offset { get; set; } = new(0, 0, 0); + public Vector3 Direction { get; set; } = new(0, 0, 0); + public Vector3 Side { get; set; } = new(0, 0, 0); + + public bool Equals(VehicleBadgePosition other) + { + return Active == other.Active && Alpha == other.Alpha && Size.Equals(other.Size) && BoneIndex == other.BoneIndex && Offset.Equals(other.Offset) && Direction.Equals(other.Direction) && Side.Equals(other.Side); + } + + public override bool Equals(object? obj) + { + return obj is VehicleBadgePosition other && Equals(other); + } + + public override int GetHashCode() => HashCode.Combine(Active.GetHashCode(), Alpha.GetHashCode(), Size.GetHashCode(), BoneIndex.GetHashCode(), Offset.GetHashCode(), Direction.GetHashCode(), Side.GetHashCode()); +} \ No newline at end of file diff --git a/api/AltV.Net.CApi/Libraries/ClientLibrary.cs b/api/AltV.Net.CApi/Libraries/ClientLibrary.cs index 71b07e0ce..9731d4820 100644 --- a/api/AltV.Net.CApi/Libraries/ClientLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/ClientLibrary.cs @@ -1,5 +1,6 @@ // ReSharper disable InconsistentNaming using AltV.Net.Data; +using AltV.Net.CApi.Data; using System.Numerics; using System.Runtime.InteropServices; using AltV.Net.Elements.Args; @@ -889,7 +890,7 @@ public unsafe interface IClientLibrary public unsafe class ClientLibrary : IClientLibrary { - public readonly uint Methods = 1755; + public readonly uint Methods = 1756; public delegate* unmanaged[Cdecl] Audio_AddOutput { get; } public delegate* unmanaged[Cdecl] Audio_GetBaseObject { get; } public delegate* unmanaged[Cdecl] Audio_GetCurrentTime { get; } @@ -3524,7 +3525,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public ClientLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 554522947139118248UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 9602013249028565151UL) Outdated = true; Audio_AddOutput = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 9914412815391408844UL, Audio_AddOutputFallback); Audio_GetBaseObject = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 6330360502401226894UL, Audio_GetBaseObjectFallback); Audio_GetCurrentTime = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 2944324482134975819UL, Audio_GetCurrentTimeFallback); diff --git a/api/AltV.Net.CApi/Libraries/ServerLibrary.cs b/api/AltV.Net.CApi/Libraries/ServerLibrary.cs index 84ad8f657..26f0d0faa 100644 --- a/api/AltV.Net.CApi/Libraries/ServerLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/ServerLibrary.cs @@ -1,5 +1,6 @@ // ReSharper disable InconsistentNaming using AltV.Net.Data; +using AltV.Net.CApi.Data; using System.Numerics; using System.Runtime.InteropServices; using AltV.Net.Elements.Args; @@ -381,6 +382,7 @@ public unsafe interface IServerLibrary public delegate* unmanaged[Cdecl] Vehicle_Repair { get; } public delegate* unmanaged[Cdecl] Vehicle_SetArmoredWindowHealth { get; } public delegate* unmanaged[Cdecl] Vehicle_SetArmoredWindowShootCount { get; } + public delegate* unmanaged[Cdecl] Vehicle_SetBadge { get; } public delegate* unmanaged[Cdecl] Vehicle_SetBoatAnchor { get; } public delegate* unmanaged[Cdecl] Vehicle_SetBodyAdditionalHealth { get; } public delegate* unmanaged[Cdecl] Vehicle_SetBodyHealth { get; } @@ -482,7 +484,7 @@ public unsafe interface IServerLibrary public unsafe class ServerLibrary : IServerLibrary { - public readonly uint Methods = 1755; + public readonly uint Methods = 1756; public delegate* unmanaged[Cdecl] BaseObject_DeleteSyncedMetaData { get; } public delegate* unmanaged[Cdecl] BaseObject_SetMultipleSyncedMetaData { get; } public delegate* unmanaged[Cdecl] BaseObject_SetSyncedMetaData { get; } @@ -854,6 +856,7 @@ public unsafe class ServerLibrary : IServerLibrary public delegate* unmanaged[Cdecl] Vehicle_Repair { get; } public delegate* unmanaged[Cdecl] Vehicle_SetArmoredWindowHealth { get; } public delegate* unmanaged[Cdecl] Vehicle_SetArmoredWindowShootCount { get; } + public delegate* unmanaged[Cdecl] Vehicle_SetBadge { get; } public delegate* unmanaged[Cdecl] Vehicle_SetBoatAnchor { get; } public delegate* unmanaged[Cdecl] Vehicle_SetBodyAdditionalHealth { get; } public delegate* unmanaged[Cdecl] Vehicle_SetBodyHealth { get; } @@ -1693,6 +1696,8 @@ public unsafe class ServerLibrary : IServerLibrary private static void Vehicle_SetArmoredWindowHealthFallback(nint _vehicle, byte _windowId, float _health) => throw new Exceptions.OutdatedSdkException("Vehicle_SetArmoredWindowHealth", "Vehicle_SetArmoredWindowHealth SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Vehicle_SetArmoredWindowShootCountDelegate(nint _vehicle, byte _windowId, byte _count); private static void Vehicle_SetArmoredWindowShootCountFallback(nint _vehicle, byte _windowId, byte _count) => throw new Exceptions.OutdatedSdkException("Vehicle_SetArmoredWindowShootCount", "Vehicle_SetArmoredWindowShootCount SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Vehicle_SetBadgeDelegate(nint _vehicle, uint _textureDictionary, uint _texture, VehicleBadgePosition[] vehicleBadgePosition, ushort _size); + private static void Vehicle_SetBadgeFallback(nint _vehicle, uint _textureDictionary, uint _texture, VehicleBadgePosition[] vehicleBadgePosition, ushort _size) => throw new Exceptions.OutdatedSdkException("Vehicle_SetBadge", "Vehicle_SetBadge SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Vehicle_SetBoatAnchorDelegate(nint _vehicle, byte _state); private static void Vehicle_SetBoatAnchorFallback(nint _vehicle, byte _state) => throw new Exceptions.OutdatedSdkException("Vehicle_SetBoatAnchor", "Vehicle_SetBoatAnchor SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Vehicle_SetBodyAdditionalHealthDelegate(nint _vehicle, uint _health); @@ -1896,7 +1901,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public ServerLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 554522947139118248UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 9602013249028565151UL) Outdated = true; BaseObject_DeleteSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8228424877092269355UL, BaseObject_DeleteSyncedMetaDataFallback); BaseObject_SetMultipleSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 1390762125822890831UL, BaseObject_SetMultipleSyncedMetaDataFallback); BaseObject_SetSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8002999088966424231UL, BaseObject_SetSyncedMetaDataFallback); @@ -2268,6 +2273,7 @@ public ServerLibrary(Dictionary funcTable) Vehicle_Repair = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 277481303661922113UL, Vehicle_RepairFallback); Vehicle_SetArmoredWindowHealth = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 1070345202824576095UL, Vehicle_SetArmoredWindowHealthFallback); Vehicle_SetArmoredWindowShootCount = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 4149223353503655708UL, Vehicle_SetArmoredWindowShootCountFallback); + Vehicle_SetBadge = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 15010482901293452804UL, Vehicle_SetBadgeFallback); Vehicle_SetBoatAnchor = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 16890059088943800731UL, Vehicle_SetBoatAnchorFallback); Vehicle_SetBodyAdditionalHealth = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 5545167983491514394UL, Vehicle_SetBodyAdditionalHealthFallback); Vehicle_SetBodyHealth = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 13734895793996634557UL, Vehicle_SetBodyHealthFallback); diff --git a/api/AltV.Net.CApi/Libraries/SharedLibrary.cs b/api/AltV.Net.CApi/Libraries/SharedLibrary.cs index 5cc08ebd5..a0578a177 100644 --- a/api/AltV.Net.CApi/Libraries/SharedLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/SharedLibrary.cs @@ -1,5 +1,6 @@ // ReSharper disable InconsistentNaming using AltV.Net.Data; +using AltV.Net.CApi.Data; using System.Numerics; using System.Runtime.InteropServices; using AltV.Net.Elements.Args; @@ -424,7 +425,7 @@ public unsafe interface ISharedLibrary public unsafe class SharedLibrary : ISharedLibrary { - public readonly uint Methods = 1755; + public readonly uint Methods = 1756; public delegate* unmanaged[Cdecl] Audio_GetID { get; } public delegate* unmanaged[Cdecl] AudioAttachedOutput_GetID { get; } public delegate* unmanaged[Cdecl] AudioFilter_GetID { get; } @@ -1664,7 +1665,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public SharedLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 554522947139118248UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 9602013249028565151UL) Outdated = true; Audio_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 4464042055475980737UL, Audio_GetIDFallback); AudioAttachedOutput_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 17725794901805112189UL, AudioAttachedOutput_GetIDFallback); AudioFilter_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8824535635529306325UL, AudioFilter_GetIDFallback); diff --git a/api/AltV.Net/Elements/Entities/IVehicle.cs b/api/AltV.Net/Elements/Entities/IVehicle.cs index b0f721704..9c69f2daa 100644 --- a/api/AltV.Net/Elements/Entities/IVehicle.cs +++ b/api/AltV.Net/Elements/Entities/IVehicle.cs @@ -1,6 +1,7 @@ using System; using System.Collections.Generic; using System.Numerics; +using AltV.Net.CApi.Data; using AltV.Net.Data; using AltV.Net.Enums; using AltV.Net.Shared.Elements.Entities; @@ -854,5 +855,8 @@ NumberPlateStyle GetNumberPlateStyleExt() => float BrakeLevel { get; } List Passengers { get; } + + void SetBage(string textureDictionary, string texture, VehicleBadgePosition[] vehicleBadgePosition); + void SetBage(uint textureDictionary, uint texture, VehicleBadgePosition[] vehicleBadgePosition); } } \ No newline at end of file diff --git a/api/AltV.Net/Elements/Entities/Vehicle.cs b/api/AltV.Net/Elements/Entities/Vehicle.cs index 912f26586..64ac60a66 100644 --- a/api/AltV.Net/Elements/Entities/Vehicle.cs +++ b/api/AltV.Net/Elements/Entities/Vehicle.cs @@ -2,6 +2,7 @@ using System.Collections.Generic; using System.Numerics; using System.Runtime.InteropServices; +using AltV.Net.CApi.Data; using AltV.Net.Data; using AltV.Net.Enums; using AltV.Net.Native; @@ -2085,6 +2086,19 @@ public List Passengers } } + public void SetBage(string textureDictionary, string texture, VehicleBadgePosition[] vehicleBadgePosition) + { + SetBage(Alt.Hash(textureDictionary), Alt.Hash(texture), vehicleBadgePosition); + } + + public void SetBage(uint textureDictionary, uint texture, VehicleBadgePosition[] vehicleBadgePosition) + { + unsafe + { + Core.Library.Server.Vehicle_SetBadge(VehicleNativePointer, textureDictionary, texture, vehicleBadgePosition, (ushort)vehicleBadgePosition.Length); + } + } + public override void SetCached(IntPtr cachedVehicle) { this.VehicleNativePointer = cachedVehicle; diff --git a/runtime b/runtime index eced54003..a15f21fe9 160000 --- a/runtime +++ b/runtime @@ -1 +1 @@ -Subproject commit eced54003f225b7c20d43028c25ec0c519199e71 +Subproject commit a15f21fe9323d0587a8b438941d1fb177cdad955 From 02fb2962682791514fc06418987ee79f8dcf6bfa Mon Sep 17 00:00:00 2001 From: doxoh Date: Tue, 26 Dec 2023 20:05:23 +0100 Subject: [PATCH 59/75] feat(server): add exception when more then 4 batch positions setted --- api/AltV.Net/Elements/Entities/IVehicle.cs | 15 +++++++++++++++ api/AltV.Net/Elements/Entities/Vehicle.cs | 5 +++++ 2 files changed, 20 insertions(+) diff --git a/api/AltV.Net/Elements/Entities/IVehicle.cs b/api/AltV.Net/Elements/Entities/IVehicle.cs index 9c69f2daa..3a215a3ea 100644 --- a/api/AltV.Net/Elements/Entities/IVehicle.cs +++ b/api/AltV.Net/Elements/Entities/IVehicle.cs @@ -856,7 +856,22 @@ NumberPlateStyle GetNumberPlateStyleExt() => List Passengers { get; } + /// + /// Set badges to vehicle + /// + /// The hash of textureDictionary + /// The hash of texture + /// The array of badge position. Maximum is 4 + /// When badge postion is more the 4 void SetBage(string textureDictionary, string texture, VehicleBadgePosition[] vehicleBadgePosition); + + /// + /// Set badges to vehicle + /// + /// The hash of textureDictionary + /// The hash of texture + /// The array of badge position. Maximum is 4 + /// When badge postion is more the 4 void SetBage(uint textureDictionary, uint texture, VehicleBadgePosition[] vehicleBadgePosition); } } \ No newline at end of file diff --git a/api/AltV.Net/Elements/Entities/Vehicle.cs b/api/AltV.Net/Elements/Entities/Vehicle.cs index 64ac60a66..4a931c54e 100644 --- a/api/AltV.Net/Elements/Entities/Vehicle.cs +++ b/api/AltV.Net/Elements/Entities/Vehicle.cs @@ -2093,6 +2093,11 @@ public void SetBage(string textureDictionary, string texture, VehicleBadgePositi public void SetBage(uint textureDictionary, uint texture, VehicleBadgePosition[] vehicleBadgePosition) { + if (vehicleBadgePosition.Length > 4) + { + throw new ArgumentOutOfRangeException( + $"{nameof(vehicleBadgePosition)} should be have maximum 4 badge positions"); + } unsafe { Core.Library.Server.Vehicle_SetBadge(VehicleNativePointer, textureDictionary, texture, vehicleBadgePosition, (ushort)vehicleBadgePosition.Length); From 0874ae5cc4482864cf1be446f78d04e094f216e4 Mon Sep 17 00:00:00 2001 From: doxoh Date: Fri, 29 Dec 2023 13:32:03 +0100 Subject: [PATCH 60/75] feat(client): add new voice methods / feat(server): add minor version number to IConnectionInfo & CPlayerConnectDeniedEvent --- api/AltV.Net.Async/AsyncCore.cs | 6 +- .../Elements/Entities/AsyncConnectionInfo.cs | 18 +++- api/AltV.Net.Async/Events/Events.cs | 2 +- api/AltV.Net.CApi/Libraries/ClientLibrary.cs | 49 ++++++++++- api/AltV.Net.CApi/Libraries/ServerLibrary.cs | 19 ++-- api/AltV.Net.CApi/Libraries/SharedLibrary.cs | 4 +- api/AltV.Net.CApi/Native/AltV.Resource.cs | 2 +- api/AltV.Net.Client/Alt.Globals.cs | 12 +++ api/AltV.Net.Client/Core.Globals.cs | 88 +++++++++++++++++++ api/AltV.Net.Client/ICore.cs | 11 +++ api/AltV.Net.Mock/MockConnectionInfo.cs | 3 +- api/AltV.Net/Core.Events.cs | 8 +- .../Elements/Entities/ConnectionInfo.cs | 15 +++- .../Elements/Entities/IConnectionInfo.cs | 3 +- api/AltV.Net/Events/Events.cs | 2 +- api/AltV.Net/ModuleWrapper.cs | 4 +- runtime | 2 +- 17 files changed, 218 insertions(+), 30 deletions(-) diff --git a/api/AltV.Net.Async/AsyncCore.cs b/api/AltV.Net.Async/AsyncCore.cs index 9a10a4b36..84305b97c 100644 --- a/api/AltV.Net.Async/AsyncCore.cs +++ b/api/AltV.Net.Async/AsyncCore.cs @@ -869,14 +869,14 @@ public override void OnGivePedScriptedTaskEvent(IntPtr eventPointer, IPlayer sou } public override void OnPlayerConnectDeniedEvent(PlayerConnectDeniedReason reason, string name, string ip, ulong passwordHash, - bool isDebug, string branch, uint majorVersion, string cdnUrl, long discordId) + bool isDebug, string branch, ushort versionMajor, ushort versionMinor, string cdnUrl, long discordId) { - base.OnPlayerConnectDeniedEvent(reason, name, ip, passwordHash, isDebug, branch, majorVersion, cdnUrl, discordId); + base.OnPlayerConnectDeniedEvent(reason, name, ip, passwordHash, isDebug, branch, versionMajor, versionMinor, cdnUrl, discordId); if (!PlayerConnectDeniedAsyncEventHandler.HasEvents()) return; Task.Run(async () => { - await PlayerConnectDeniedAsyncEventHandler.CallAsync(@delegate => @delegate(reason, name, ip, passwordHash, isDebug, branch, majorVersion, cdnUrl, discordId)); + await PlayerConnectDeniedAsyncEventHandler.CallAsync(@delegate => @delegate(reason, name, ip, passwordHash, isDebug, branch, versionMajor, versionMinor, cdnUrl, discordId)); }); } diff --git a/api/AltV.Net.Async/Elements/Entities/AsyncConnectionInfo.cs b/api/AltV.Net.Async/Elements/Entities/AsyncConnectionInfo.cs index 141fd738f..b5e732b6f 100644 --- a/api/AltV.Net.Async/Elements/Entities/AsyncConnectionInfo.cs +++ b/api/AltV.Net.Async/Elements/Entities/AsyncConnectionInfo.cs @@ -96,17 +96,31 @@ public string Branch } } } - public uint Build + + public ushort VersionMajor + { + get + { + lock (ConnectionInfo) + { + if (!AsyncContext.CheckIfExistsOrCachedNullable(ConnectionInfo)) return default; + return ConnectionInfo.VersionMajor; + } + } + } + + public ushort VersionMinor { get { lock (ConnectionInfo) { if (!AsyncContext.CheckIfExistsOrCachedNullable(ConnectionInfo)) return default; - return ConnectionInfo.Build; + return ConnectionInfo.VersionMinor; } } } + public string CdnUrl { get diff --git a/api/AltV.Net.Async/Events/Events.cs b/api/AltV.Net.Async/Events/Events.cs index 8a2765639..6314681ac 100644 --- a/api/AltV.Net.Async/Events/Events.cs +++ b/api/AltV.Net.Async/Events/Events.cs @@ -14,7 +14,7 @@ namespace AltV.Net.Async.Events public delegate Task PlayerConnectAsyncDelegate(IPlayer player, string reason); public delegate Task PlayerConnectDeniedAsyncDelegate(PlayerConnectDeniedReason reason, string name, string ip, - ulong passwordHash, bool isDebug, string branch, uint majorVersion, string cdnUrl, long discordId); + ulong passwordHash, bool isDebug, string branch, ushort versionMajor, ushort versionMinor, string cdnUrl, long discordId); public delegate Task ResourceEventAsyncDelegate(INativeResource resource); diff --git a/api/AltV.Net.CApi/Libraries/ClientLibrary.cs b/api/AltV.Net.CApi/Libraries/ClientLibrary.cs index 9731d4820..4a1429a01 100644 --- a/api/AltV.Net.CApi/Libraries/ClientLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/ClientLibrary.cs @@ -100,6 +100,7 @@ public unsafe interface IClientLibrary public delegate* unmanaged[Cdecl] Checkpoint_GetGameID { get; } public delegate* unmanaged[Cdecl] Checkpoint_IsStreamedIn { get; } public delegate* unmanaged[Cdecl] Core_AddGXTText { get; } + public delegate* unmanaged[Cdecl] Core_AddVoiceFilter { get; } public delegate* unmanaged[Cdecl] Core_AreGameControlsEnabled { get; } public delegate* unmanaged[Cdecl] Core_AreRmlControlsEnabled { get; } public delegate* unmanaged[Cdecl] Core_AreVoiceControlsEnabled { get; } @@ -182,7 +183,11 @@ public unsafe interface IClientLibrary public delegate* unmanaged[Cdecl] Core_GetTotalPacketsSent { get; } public delegate* unmanaged[Cdecl] Core_GetVoiceActivationKey { get; } public delegate* unmanaged[Cdecl] Core_GetVoiceActivationLevel { get; } + public delegate* unmanaged[Cdecl] Core_GetVoiceFilter { get; } public delegate* unmanaged[Cdecl] Core_GetVoiceInputMuted { get; } + public delegate* unmanaged[Cdecl] Core_GetVoiceNonSpatialVolume { get; } + public delegate* unmanaged[Cdecl] Core_GetVoicePlayers { get; } + public delegate* unmanaged[Cdecl] Core_GetVoiceSpatialVolume { get; } public delegate* unmanaged[Cdecl] Core_GetWeaponObjects { get; } public delegate* unmanaged[Cdecl] Core_GetWebViewCount { get; } public delegate* unmanaged[Cdecl] Core_GetWebViews { get; } @@ -214,6 +219,8 @@ public unsafe interface IClientLibrary public delegate* unmanaged[Cdecl] Core_RegisterFont { get; } public delegate* unmanaged[Cdecl] Core_RemoveGXTText { get; } public delegate* unmanaged[Cdecl] Core_RemoveIpl { get; } + public delegate* unmanaged[Cdecl] Core_RemoveVoiceFilter { get; } + public delegate* unmanaged[Cdecl] Core_RemoveVoicePlayer { get; } public delegate* unmanaged[Cdecl] Core_RequestIpl { get; } public delegate* unmanaged[Cdecl] Core_ResetAllMapZoomData { get; } public delegate* unmanaged[Cdecl] Core_ResetMapZoomData { get; } @@ -240,6 +247,8 @@ public unsafe interface IClientLibrary public delegate* unmanaged[Cdecl] Core_SetStatUInt8 { get; } public delegate* unmanaged[Cdecl] Core_SetVoiceActivationLevel { get; } public delegate* unmanaged[Cdecl] Core_SetVoiceInputMuted { get; } + public delegate* unmanaged[Cdecl] Core_SetVoiceNonSpatialVolume { get; } + public delegate* unmanaged[Cdecl] Core_SetVoiceSpatialVolume { get; } public delegate* unmanaged[Cdecl] Core_SetWatermarkPosition { get; } public delegate* unmanaged[Cdecl] Core_SetWeatherCycle { get; } public delegate* unmanaged[Cdecl] Core_SetWeatherSyncActive { get; } @@ -890,7 +899,7 @@ public unsafe interface IClientLibrary public unsafe class ClientLibrary : IClientLibrary { - public readonly uint Methods = 1756; + public readonly uint Methods = 1766; public delegate* unmanaged[Cdecl] Audio_AddOutput { get; } public delegate* unmanaged[Cdecl] Audio_GetBaseObject { get; } public delegate* unmanaged[Cdecl] Audio_GetCurrentTime { get; } @@ -980,6 +989,7 @@ public unsafe class ClientLibrary : IClientLibrary public delegate* unmanaged[Cdecl] Checkpoint_GetGameID { get; } public delegate* unmanaged[Cdecl] Checkpoint_IsStreamedIn { get; } public delegate* unmanaged[Cdecl] Core_AddGXTText { get; } + public delegate* unmanaged[Cdecl] Core_AddVoiceFilter { get; } public delegate* unmanaged[Cdecl] Core_AreGameControlsEnabled { get; } public delegate* unmanaged[Cdecl] Core_AreRmlControlsEnabled { get; } public delegate* unmanaged[Cdecl] Core_AreVoiceControlsEnabled { get; } @@ -1062,7 +1072,11 @@ public unsafe class ClientLibrary : IClientLibrary public delegate* unmanaged[Cdecl] Core_GetTotalPacketsSent { get; } public delegate* unmanaged[Cdecl] Core_GetVoiceActivationKey { get; } public delegate* unmanaged[Cdecl] Core_GetVoiceActivationLevel { get; } + public delegate* unmanaged[Cdecl] Core_GetVoiceFilter { get; } public delegate* unmanaged[Cdecl] Core_GetVoiceInputMuted { get; } + public delegate* unmanaged[Cdecl] Core_GetVoiceNonSpatialVolume { get; } + public delegate* unmanaged[Cdecl] Core_GetVoicePlayers { get; } + public delegate* unmanaged[Cdecl] Core_GetVoiceSpatialVolume { get; } public delegate* unmanaged[Cdecl] Core_GetWeaponObjects { get; } public delegate* unmanaged[Cdecl] Core_GetWebViewCount { get; } public delegate* unmanaged[Cdecl] Core_GetWebViews { get; } @@ -1094,6 +1108,8 @@ public unsafe class ClientLibrary : IClientLibrary public delegate* unmanaged[Cdecl] Core_RegisterFont { get; } public delegate* unmanaged[Cdecl] Core_RemoveGXTText { get; } public delegate* unmanaged[Cdecl] Core_RemoveIpl { get; } + public delegate* unmanaged[Cdecl] Core_RemoveVoiceFilter { get; } + public delegate* unmanaged[Cdecl] Core_RemoveVoicePlayer { get; } public delegate* unmanaged[Cdecl] Core_RequestIpl { get; } public delegate* unmanaged[Cdecl] Core_ResetAllMapZoomData { get; } public delegate* unmanaged[Cdecl] Core_ResetMapZoomData { get; } @@ -1120,6 +1136,8 @@ public unsafe class ClientLibrary : IClientLibrary public delegate* unmanaged[Cdecl] Core_SetStatUInt8 { get; } public delegate* unmanaged[Cdecl] Core_SetVoiceActivationLevel { get; } public delegate* unmanaged[Cdecl] Core_SetVoiceInputMuted { get; } + public delegate* unmanaged[Cdecl] Core_SetVoiceNonSpatialVolume { get; } + public delegate* unmanaged[Cdecl] Core_SetVoiceSpatialVolume { get; } public delegate* unmanaged[Cdecl] Core_SetWatermarkPosition { get; } public delegate* unmanaged[Cdecl] Core_SetWeatherCycle { get; } public delegate* unmanaged[Cdecl] Core_SetWeatherSyncActive { get; } @@ -1944,6 +1962,8 @@ public unsafe class ClientLibrary : IClientLibrary private static byte Checkpoint_IsStreamedInFallback(nint _checkpoint) => throw new Exceptions.OutdatedSdkException("Checkpoint_IsStreamedIn", "Checkpoint_IsStreamedIn SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Core_AddGXTTextDelegate(nint _core, nint _resource, uint _key, nint _value); private static void Core_AddGXTTextFallback(nint _core, nint _resource, uint _key, nint _value) => throw new Exceptions.OutdatedSdkException("Core_AddGXTText", "Core_AddGXTText SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Core_AddVoiceFilterDelegate(nint _core, uint _playerRemodeId, nint _filter); + private static void Core_AddVoiceFilterFallback(nint _core, uint _playerRemodeId, nint _filter) => throw new Exceptions.OutdatedSdkException("Core_AddVoiceFilter", "Core_AddVoiceFilter SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate byte Core_AreGameControlsEnabledDelegate(nint _core); private static byte Core_AreGameControlsEnabledFallback(nint _core) => throw new Exceptions.OutdatedSdkException("Core_AreGameControlsEnabled", "Core_AreGameControlsEnabled SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate byte Core_AreRmlControlsEnabledDelegate(nint _core); @@ -2108,8 +2128,16 @@ public unsafe class ClientLibrary : IClientLibrary private static uint Core_GetVoiceActivationKeyFallback(nint _core) => throw new Exceptions.OutdatedSdkException("Core_GetVoiceActivationKey", "Core_GetVoiceActivationKey SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate float Core_GetVoiceActivationLevelDelegate(nint _core); private static float Core_GetVoiceActivationLevelFallback(nint _core) => throw new Exceptions.OutdatedSdkException("Core_GetVoiceActivationLevel", "Core_GetVoiceActivationLevel SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate nint Core_GetVoiceFilterDelegate(nint _core, uint _playerRemodeId); + private static nint Core_GetVoiceFilterFallback(nint _core, uint _playerRemodeId) => throw new Exceptions.OutdatedSdkException("Core_GetVoiceFilter", "Core_GetVoiceFilter SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate byte Core_GetVoiceInputMutedDelegate(nint _core); private static byte Core_GetVoiceInputMutedFallback(nint _core) => throw new Exceptions.OutdatedSdkException("Core_GetVoiceInputMuted", "Core_GetVoiceInputMuted SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate float Core_GetVoiceNonSpatialVolumeDelegate(nint _core, uint _playerRemodeId); + private static float Core_GetVoiceNonSpatialVolumeFallback(nint _core, uint _playerRemodeId) => throw new Exceptions.OutdatedSdkException("Core_GetVoiceNonSpatialVolume", "Core_GetVoiceNonSpatialVolume SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Core_GetVoicePlayersDelegate(nint _core, nint* _voicePlayers, uint* _size); + private static void Core_GetVoicePlayersFallback(nint _core, nint* _voicePlayers, uint* _size) => throw new Exceptions.OutdatedSdkException("Core_GetVoicePlayers", "Core_GetVoicePlayers SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate float Core_GetVoiceSpatialVolumeDelegate(nint _core, uint _playerRemodeId); + private static float Core_GetVoiceSpatialVolumeFallback(nint _core, uint _playerRemodeId) => throw new Exceptions.OutdatedSdkException("Core_GetVoiceSpatialVolume", "Core_GetVoiceSpatialVolume SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate nint Core_GetWeaponObjectsDelegate(nint _core, uint* _size); private static nint Core_GetWeaponObjectsFallback(nint _core, uint* _size) => throw new Exceptions.OutdatedSdkException("Core_GetWeaponObjects", "Core_GetWeaponObjects SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate ulong Core_GetWebViewCountDelegate(nint _core); @@ -2172,6 +2200,10 @@ public unsafe class ClientLibrary : IClientLibrary private static void Core_RemoveGXTTextFallback(nint _core, nint _resource, uint _key) => throw new Exceptions.OutdatedSdkException("Core_RemoveGXTText", "Core_RemoveGXTText SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Core_RemoveIplDelegate(nint _core, nint _path); private static void Core_RemoveIplFallback(nint _core, nint _path) => throw new Exceptions.OutdatedSdkException("Core_RemoveIpl", "Core_RemoveIpl SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Core_RemoveVoiceFilterDelegate(nint _core, uint _playerRemodeId); + private static void Core_RemoveVoiceFilterFallback(nint _core, uint _playerRemodeId) => throw new Exceptions.OutdatedSdkException("Core_RemoveVoiceFilter", "Core_RemoveVoiceFilter SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Core_RemoveVoicePlayerDelegate(nint _core, uint _playerRemodeId); + private static void Core_RemoveVoicePlayerFallback(nint _core, uint _playerRemodeId) => throw new Exceptions.OutdatedSdkException("Core_RemoveVoicePlayer", "Core_RemoveVoicePlayer SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Core_RequestIplDelegate(nint _core, nint _path); private static void Core_RequestIplFallback(nint _core, nint _path) => throw new Exceptions.OutdatedSdkException("Core_RequestIpl", "Core_RequestIpl SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Core_ResetAllMapZoomDataDelegate(nint _core); @@ -2224,6 +2256,10 @@ public unsafe class ClientLibrary : IClientLibrary private static byte Core_SetVoiceActivationLevelFallback(nint _core, float _level) => throw new Exceptions.OutdatedSdkException("Core_SetVoiceActivationLevel", "Core_SetVoiceActivationLevel SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Core_SetVoiceInputMutedDelegate(nint _core, byte _value); private static void Core_SetVoiceInputMutedFallback(nint _core, byte _value) => throw new Exceptions.OutdatedSdkException("Core_SetVoiceInputMuted", "Core_SetVoiceInputMuted SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Core_SetVoiceNonSpatialVolumeDelegate(nint _core, uint _playerRemodeId, float _volume); + private static void Core_SetVoiceNonSpatialVolumeFallback(nint _core, uint _playerRemodeId, float _volume) => throw new Exceptions.OutdatedSdkException("Core_SetVoiceNonSpatialVolume", "Core_SetVoiceNonSpatialVolume SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Core_SetVoiceSpatialVolumeDelegate(nint _core, uint _playerRemodeId, float _volume); + private static void Core_SetVoiceSpatialVolumeFallback(nint _core, uint _playerRemodeId, float _volume) => throw new Exceptions.OutdatedSdkException("Core_SetVoiceSpatialVolume", "Core_SetVoiceSpatialVolume SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Core_SetWatermarkPositionDelegate(nint _core, byte _position); private static void Core_SetWatermarkPositionFallback(nint _core, byte _position) => throw new Exceptions.OutdatedSdkException("Core_SetWatermarkPosition", "Core_SetWatermarkPosition SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Core_SetWeatherCycleDelegate(nint _core, byte[] weathers, int _weathersSize, byte[] multipliers, int _multipliersSize); @@ -3525,7 +3561,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public ClientLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 9602013249028565151UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 3200807633316865025UL) Outdated = true; Audio_AddOutput = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 9914412815391408844UL, Audio_AddOutputFallback); Audio_GetBaseObject = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 6330360502401226894UL, Audio_GetBaseObjectFallback); Audio_GetCurrentTime = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 2944324482134975819UL, Audio_GetCurrentTimeFallback); @@ -3615,6 +3651,7 @@ public ClientLibrary(Dictionary funcTable) Checkpoint_GetGameID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 10807368225937279665UL, Checkpoint_GetGameIDFallback); Checkpoint_IsStreamedIn = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 11169437175796680635UL, Checkpoint_IsStreamedInFallback); Core_AddGXTText = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 15861482869617048160UL, Core_AddGXTTextFallback); + Core_AddVoiceFilter = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 16092557757480797995UL, Core_AddVoiceFilterFallback); Core_AreGameControlsEnabled = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 332214446285856938UL, Core_AreGameControlsEnabledFallback); Core_AreRmlControlsEnabled = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 6617672605820539119UL, Core_AreRmlControlsEnabledFallback); Core_AreVoiceControlsEnabled = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 787373906810962396UL, Core_AreVoiceControlsEnabledFallback); @@ -3697,7 +3734,11 @@ public ClientLibrary(Dictionary funcTable) Core_GetTotalPacketsSent = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 16154816553672886942UL, Core_GetTotalPacketsSentFallback); Core_GetVoiceActivationKey = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 2249875648683273533UL, Core_GetVoiceActivationKeyFallback); Core_GetVoiceActivationLevel = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 14311678038566163090UL, Core_GetVoiceActivationLevelFallback); + Core_GetVoiceFilter = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 15381961310249968205UL, Core_GetVoiceFilterFallback); Core_GetVoiceInputMuted = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 14294729290243559040UL, Core_GetVoiceInputMutedFallback); + Core_GetVoiceNonSpatialVolume = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 14180673522110201914UL, Core_GetVoiceNonSpatialVolumeFallback); + Core_GetVoicePlayers = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 759879643372796676UL, Core_GetVoicePlayersFallback); + Core_GetVoiceSpatialVolume = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 10827389293122297015UL, Core_GetVoiceSpatialVolumeFallback); Core_GetWeaponObjects = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 18342201422886872407UL, Core_GetWeaponObjectsFallback); Core_GetWebViewCount = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 5500487167100623739UL, Core_GetWebViewCountFallback); Core_GetWebViews = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8710938014357466262UL, Core_GetWebViewsFallback); @@ -3729,6 +3770,8 @@ public ClientLibrary(Dictionary funcTable) Core_RegisterFont = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 84574382701044016UL, Core_RegisterFontFallback); Core_RemoveGXTText = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 2950682702415179672UL, Core_RemoveGXTTextFallback); Core_RemoveIpl = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 3186817815537256556UL, Core_RemoveIplFallback); + Core_RemoveVoiceFilter = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 4203146524234440953UL, Core_RemoveVoiceFilterFallback); + Core_RemoveVoicePlayer = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 15949102402945152498UL, Core_RemoveVoicePlayerFallback); Core_RequestIpl = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 6993510006268976715UL, Core_RequestIplFallback); Core_ResetAllMapZoomData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 664982279299386907UL, Core_ResetAllMapZoomDataFallback); Core_ResetMapZoomData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 12948735896839739671UL, Core_ResetMapZoomDataFallback); @@ -3755,6 +3798,8 @@ public ClientLibrary(Dictionary funcTable) Core_SetStatUInt8 = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 15051718600062446893UL, Core_SetStatUInt8Fallback); Core_SetVoiceActivationLevel = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 6366517826241888414UL, Core_SetVoiceActivationLevelFallback); Core_SetVoiceInputMuted = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 7814638701493567231UL, Core_SetVoiceInputMutedFallback); + Core_SetVoiceNonSpatialVolume = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8870406345125653689UL, Core_SetVoiceNonSpatialVolumeFallback); + Core_SetVoiceSpatialVolume = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8791822899861925122UL, Core_SetVoiceSpatialVolumeFallback); Core_SetWatermarkPosition = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 7934747004301392615UL, Core_SetWatermarkPositionFallback); Core_SetWeatherCycle = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 16585286735482336540UL, Core_SetWeatherCycleFallback); Core_SetWeatherSyncActive = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 13045279996168078519UL, Core_SetWeatherSyncActiveFallback); diff --git a/api/AltV.Net.CApi/Libraries/ServerLibrary.cs b/api/AltV.Net.CApi/Libraries/ServerLibrary.cs index 26f0d0faa..a537ab09d 100644 --- a/api/AltV.Net.CApi/Libraries/ServerLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/ServerLibrary.cs @@ -31,7 +31,6 @@ public unsafe interface IServerLibrary public delegate* unmanaged[Cdecl] ConnectionInfo_GetAuthToken { get; } public delegate* unmanaged[Cdecl] ConnectionInfo_GetBaseObject { get; } public delegate* unmanaged[Cdecl] ConnectionInfo_GetBranch { get; } - public delegate* unmanaged[Cdecl] ConnectionInfo_GetBuild { get; } public delegate* unmanaged[Cdecl] ConnectionInfo_GetCdnUrl { get; } public delegate* unmanaged[Cdecl] ConnectionInfo_GetCloudAuthResult { get; } public delegate* unmanaged[Cdecl] ConnectionInfo_GetCloudID { get; } @@ -46,6 +45,8 @@ public unsafe interface IServerLibrary public delegate* unmanaged[Cdecl] ConnectionInfo_GetSocialId { get; } public delegate* unmanaged[Cdecl] ConnectionInfo_GetSocialName { get; } public delegate* unmanaged[Cdecl] ConnectionInfo_GetText { get; } + public delegate* unmanaged[Cdecl] ConnectionInfo_GetVersionMajor { get; } + public delegate* unmanaged[Cdecl] ConnectionInfo_GetVersionMinor { get; } public delegate* unmanaged[Cdecl] ConnectionInfo_IsAccepted { get; } public delegate* unmanaged[Cdecl] ConnectionInfo_SetText { get; } public delegate* unmanaged[Cdecl] Core_AddClientConfigKey { get; } @@ -484,7 +485,7 @@ public unsafe interface IServerLibrary public unsafe class ServerLibrary : IServerLibrary { - public readonly uint Methods = 1756; + public readonly uint Methods = 1766; public delegate* unmanaged[Cdecl] BaseObject_DeleteSyncedMetaData { get; } public delegate* unmanaged[Cdecl] BaseObject_SetMultipleSyncedMetaData { get; } public delegate* unmanaged[Cdecl] BaseObject_SetSyncedMetaData { get; } @@ -505,7 +506,6 @@ public unsafe class ServerLibrary : IServerLibrary public delegate* unmanaged[Cdecl] ConnectionInfo_GetAuthToken { get; } public delegate* unmanaged[Cdecl] ConnectionInfo_GetBaseObject { get; } public delegate* unmanaged[Cdecl] ConnectionInfo_GetBranch { get; } - public delegate* unmanaged[Cdecl] ConnectionInfo_GetBuild { get; } public delegate* unmanaged[Cdecl] ConnectionInfo_GetCdnUrl { get; } public delegate* unmanaged[Cdecl] ConnectionInfo_GetCloudAuthResult { get; } public delegate* unmanaged[Cdecl] ConnectionInfo_GetCloudID { get; } @@ -520,6 +520,8 @@ public unsafe class ServerLibrary : IServerLibrary public delegate* unmanaged[Cdecl] ConnectionInfo_GetSocialId { get; } public delegate* unmanaged[Cdecl] ConnectionInfo_GetSocialName { get; } public delegate* unmanaged[Cdecl] ConnectionInfo_GetText { get; } + public delegate* unmanaged[Cdecl] ConnectionInfo_GetVersionMajor { get; } + public delegate* unmanaged[Cdecl] ConnectionInfo_GetVersionMinor { get; } public delegate* unmanaged[Cdecl] ConnectionInfo_IsAccepted { get; } public delegate* unmanaged[Cdecl] ConnectionInfo_SetText { get; } public delegate* unmanaged[Cdecl] Core_AddClientConfigKey { get; } @@ -994,8 +996,6 @@ public unsafe class ServerLibrary : IServerLibrary private static nint ConnectionInfo_GetBaseObjectFallback(IntPtr _connectionInfo) => throw new Exceptions.OutdatedSdkException("ConnectionInfo_GetBaseObject", "ConnectionInfo_GetBaseObject SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate nint ConnectionInfo_GetBranchDelegate(IntPtr _connectionInfo, int* _size); private static nint ConnectionInfo_GetBranchFallback(IntPtr _connectionInfo, int* _size) => throw new Exceptions.OutdatedSdkException("ConnectionInfo_GetBranch", "ConnectionInfo_GetBranch SDK method is outdated. Please update your module nuget"); - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate uint ConnectionInfo_GetBuildDelegate(IntPtr _connectionInfo); - private static uint ConnectionInfo_GetBuildFallback(IntPtr _connectionInfo) => throw new Exceptions.OutdatedSdkException("ConnectionInfo_GetBuild", "ConnectionInfo_GetBuild SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate nint ConnectionInfo_GetCdnUrlDelegate(IntPtr _connectionInfo, int* _size); private static nint ConnectionInfo_GetCdnUrlFallback(IntPtr _connectionInfo, int* _size) => throw new Exceptions.OutdatedSdkException("ConnectionInfo_GetCdnUrl", "ConnectionInfo_GetCdnUrl SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate byte ConnectionInfo_GetCloudAuthResultDelegate(IntPtr _connectionInfo); @@ -1024,6 +1024,10 @@ public unsafe class ServerLibrary : IServerLibrary private static nint ConnectionInfo_GetSocialNameFallback(IntPtr _connectionInfo, int* _size) => throw new Exceptions.OutdatedSdkException("ConnectionInfo_GetSocialName", "ConnectionInfo_GetSocialName SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate nint ConnectionInfo_GetTextDelegate(IntPtr _connectionInfo, int* _size); private static nint ConnectionInfo_GetTextFallback(IntPtr _connectionInfo, int* _size) => throw new Exceptions.OutdatedSdkException("ConnectionInfo_GetText", "ConnectionInfo_GetText SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate ushort ConnectionInfo_GetVersionMajorDelegate(IntPtr _connectionInfo); + private static ushort ConnectionInfo_GetVersionMajorFallback(IntPtr _connectionInfo) => throw new Exceptions.OutdatedSdkException("ConnectionInfo_GetVersionMajor", "ConnectionInfo_GetVersionMajor SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate ushort ConnectionInfo_GetVersionMinorDelegate(IntPtr _connectionInfo); + private static ushort ConnectionInfo_GetVersionMinorFallback(IntPtr _connectionInfo) => throw new Exceptions.OutdatedSdkException("ConnectionInfo_GetVersionMinor", "ConnectionInfo_GetVersionMinor SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate byte ConnectionInfo_IsAcceptedDelegate(IntPtr _connectionInfo); private static byte ConnectionInfo_IsAcceptedFallback(IntPtr _connectionInfo) => throw new Exceptions.OutdatedSdkException("ConnectionInfo_IsAccepted", "ConnectionInfo_IsAccepted SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void ConnectionInfo_SetTextDelegate(IntPtr _connectionInfo, nint _text); @@ -1901,7 +1905,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public ServerLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 9602013249028565151UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 3200807633316865025UL) Outdated = true; BaseObject_DeleteSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8228424877092269355UL, BaseObject_DeleteSyncedMetaDataFallback); BaseObject_SetMultipleSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 1390762125822890831UL, BaseObject_SetMultipleSyncedMetaDataFallback); BaseObject_SetSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8002999088966424231UL, BaseObject_SetSyncedMetaDataFallback); @@ -1922,7 +1926,6 @@ public ServerLibrary(Dictionary funcTable) ConnectionInfo_GetAuthToken = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8194004283135524333UL, ConnectionInfo_GetAuthTokenFallback); ConnectionInfo_GetBaseObject = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 12397496971801767822UL, ConnectionInfo_GetBaseObjectFallback); ConnectionInfo_GetBranch = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 1577439110274874884UL, ConnectionInfo_GetBranchFallback); - ConnectionInfo_GetBuild = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 14204191833155309704UL, ConnectionInfo_GetBuildFallback); ConnectionInfo_GetCdnUrl = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 5988681596904693572UL, ConnectionInfo_GetCdnUrlFallback); ConnectionInfo_GetCloudAuthResult = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 7415605567391116903UL, ConnectionInfo_GetCloudAuthResultFallback); ConnectionInfo_GetCloudID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 7998061229071288348UL, ConnectionInfo_GetCloudIDFallback); @@ -1937,6 +1940,8 @@ public ServerLibrary(Dictionary funcTable) ConnectionInfo_GetSocialId = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 10464338232675126241UL, ConnectionInfo_GetSocialIdFallback); ConnectionInfo_GetSocialName = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 12079559810042444284UL, ConnectionInfo_GetSocialNameFallback); ConnectionInfo_GetText = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 15232547943166326905UL, ConnectionInfo_GetTextFallback); + ConnectionInfo_GetVersionMajor = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 17632900701407653009UL, ConnectionInfo_GetVersionMajorFallback); + ConnectionInfo_GetVersionMinor = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 5117935778920368749UL, ConnectionInfo_GetVersionMinorFallback); ConnectionInfo_IsAccepted = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8806505177995284480UL, ConnectionInfo_IsAcceptedFallback); ConnectionInfo_SetText = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 13680172646316204766UL, ConnectionInfo_SetTextFallback); Core_AddClientConfigKey = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 17282535440709139868UL, Core_AddClientConfigKeyFallback); diff --git a/api/AltV.Net.CApi/Libraries/SharedLibrary.cs b/api/AltV.Net.CApi/Libraries/SharedLibrary.cs index a0578a177..17872eca5 100644 --- a/api/AltV.Net.CApi/Libraries/SharedLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/SharedLibrary.cs @@ -425,7 +425,7 @@ public unsafe interface ISharedLibrary public unsafe class SharedLibrary : ISharedLibrary { - public readonly uint Methods = 1756; + public readonly uint Methods = 1766; public delegate* unmanaged[Cdecl] Audio_GetID { get; } public delegate* unmanaged[Cdecl] AudioAttachedOutput_GetID { get; } public delegate* unmanaged[Cdecl] AudioFilter_GetID { get; } @@ -1665,7 +1665,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public SharedLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 9602013249028565151UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 3200807633316865025UL) Outdated = true; Audio_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 4464042055475980737UL, Audio_GetIDFallback); AudioAttachedOutput_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 17725794901805112189UL, AudioAttachedOutput_GetIDFallback); AudioFilter_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8824535635529306325UL, AudioFilter_GetIDFallback); diff --git a/api/AltV.Net.CApi/Native/AltV.Resource.cs b/api/AltV.Net.CApi/Native/AltV.Resource.cs index 1d64a5db9..f3cf4dac4 100644 --- a/api/AltV.Net.CApi/Native/AltV.Resource.cs +++ b/api/AltV.Net.CApi/Native/AltV.Resource.cs @@ -27,7 +27,7 @@ internal delegate void CheckpointDelegate(IntPtr checkpointPointer, IntPtr entit internal delegate void PlayerConnectDelegate(IntPtr playerPointer, string reason); internal delegate void PlayerConnectDeniedDelegate(PlayerConnectDeniedReason reason, string name, string ip, - ulong passwordHash, byte isDebug, string branch, uint majorVersion, string cdnUrl, long discordId); + ulong passwordHash, byte isDebug, string branch, ushort versionMajor, ushort versionMinor, string cdnUrl, long discordId); internal delegate void ResourceEventDelegate(IntPtr resourcePointer); diff --git a/api/AltV.Net.Client/Alt.Globals.cs b/api/AltV.Net.Client/Alt.Globals.cs index dd48c46be..b81600a85 100644 --- a/api/AltV.Net.Client/Alt.Globals.cs +++ b/api/AltV.Net.Client/Alt.Globals.cs @@ -1,5 +1,6 @@ using System.Numerics; using AltV.Net.Client.Elements.Data; +using AltV.Net.Client.Elements.Interfaces; using AltV.Net.Data; namespace AltV.Net.Client @@ -80,6 +81,17 @@ public static partial class Alt public static uint GetPoolCount(string pool) => Core.GetPoolCount(pool); public static uint[] GetPoolEntities(string pool) => Core.GetPoolEntities(pool); + public static uint[] GetVoicePlayers() => Core.GetVoicePlayers(); + public static void RemoveVoicePlayer(uint playerRemoteId) => Core.RemoveVoicePlayer(playerRemoteId); + public static float GetVoiceSpatialVolume(uint playerRemoteId) => Core.GetVoiceSpatialVolume(playerRemoteId); + public static void SetVoiceSpatialVolume(uint playerRemoteId, float volume) => Core.SetVoiceSpatialVolume(playerRemoteId, volume); + public static float GetVoiceNonSpatialVolume(uint playerRemoteId) => Core.GetVoiceNonSpatialVolume(playerRemoteId); + public static void SetVoiceNonSpatialVolume(uint playerRemoteId, float volume) => Core.SetVoiceNonSpatialVolume(playerRemoteId, volume); + + public static void AddVoiceFilter(uint playerRemoteId, IAudioFilter filter) => Core.AddVoiceFilter(playerRemoteId, filter); + public static void RemoveVoiceFilter(uint playerRemoteId) => Core.RemoveVoiceFilter(playerRemoteId); + public static IAudioFilter GetVoiceFilter(uint playerRemoteId) => Core.GetVoiceFilter(playerRemoteId); + public static MapZoomData GetMapZoomData(uint id) => Core.GetMapZoomData(id); public static MapZoomData GetMapZoomData(string alias) => Core.GetMapZoomData(alias); public static void ResetAllMapZoomData() => Core.ResetAllMapZoomData(); diff --git a/api/AltV.Net.Client/Core.Globals.cs b/api/AltV.Net.Client/Core.Globals.cs index 7f175f151..bf50b5b79 100644 --- a/api/AltV.Net.Client/Core.Globals.cs +++ b/api/AltV.Net.Client/Core.Globals.cs @@ -585,6 +585,94 @@ public uint[] GetPoolEntities(string pool) } } + public uint[] GetVoicePlayers() + { + unsafe + { + uint size = 0; + var voicePlayersPtr = IntPtr.Zero; + Library.Client.Core_GetVoicePlayers(NativePointer, &voicePlayersPtr, &size); + + var uintArray = new UIntArray + { + data = voicePlayersPtr, + size = size, + capacity = size + }; + + var result = uintArray.ToArray(); + + Library.Shared.FreeUInt32Array(voicePlayersPtr); + return result; + } + } + + public void RemoveVoicePlayer(uint playerRemoteId) + { + unsafe + { + Library.Client.Core_RemoveVoicePlayer(NativePointer, playerRemoteId); + } + } + + public float GetVoiceSpatialVolume(uint playerRemoteId) + { + unsafe + { + return Library.Client.Core_GetVoiceSpatialVolume(NativePointer, playerRemoteId); + } + } + + public void SetVoiceSpatialVolume(uint playerRemoteId, float volume) + { + unsafe + { + Library.Client.Core_SetVoiceSpatialVolume(NativePointer, playerRemoteId, volume); + } + } + + public float GetVoiceNonSpatialVolume(uint playerRemoteId) + { + unsafe + { + return Library.Client.Core_GetVoiceNonSpatialVolume(NativePointer, playerRemoteId); + } + } + + public void SetVoiceNonSpatialVolume(uint playerRemoteId, float volume) + { + unsafe + { + Library.Client.Core_SetVoiceNonSpatialVolume(NativePointer, playerRemoteId, volume); + } + } + + public void AddVoiceFilter(uint playerRemoteId, IAudioFilter filter) + { + unsafe + { + Library.Client.Core_AddVoiceFilter(NativePointer, playerRemoteId, filter.AudioFilterNativePointer); + } + } + + public void RemoveVoiceFilter(uint playerRemoteId) + { + unsafe + { + Library.Client.Core_RemoveVoiceFilter(NativePointer, playerRemoteId); + } + } + + public IAudioFilter GetVoiceFilter(uint playerRemoteId) + { + unsafe + { + uint pId = default; + var ptr = Library.Client.Core_GetVoiceFilter(NativePointer, playerRemoteId); + return PoolManager.AudioFilter.GetOrCreate(this, ptr, pId); + } + } + public int MsPerGameMinute { get diff --git a/api/AltV.Net.Client/ICore.cs b/api/AltV.Net.Client/ICore.cs index 1c430793a..cbe4c535d 100644 --- a/api/AltV.Net.Client/ICore.cs +++ b/api/AltV.Net.Client/ICore.cs @@ -216,5 +216,16 @@ ILocalObject CreateLocalObject(uint modelHash, Position position, Rotation rotat uint GetPoolSize(string pool); uint GetPoolCount(string pool); uint[] GetPoolEntities(string pool); + uint[] GetVoicePlayers(); + void RemoveVoicePlayer(uint playerRemoteId); + + float GetVoiceSpatialVolume(uint playerRemoteId); + void SetVoiceSpatialVolume(uint playerRemoteId, float volume); + float GetVoiceNonSpatialVolume(uint playerRemoteId); + void SetVoiceNonSpatialVolume(uint playerRemoteId, float volume); + + void AddVoiceFilter(uint playerRemoteId, IAudioFilter filter); + void RemoveVoiceFilter(uint playerRemoteId); + IAudioFilter GetVoiceFilter(uint playerRemoteId); } } \ No newline at end of file diff --git a/api/AltV.Net.Mock/MockConnectionInfo.cs b/api/AltV.Net.Mock/MockConnectionInfo.cs index 4113ce9fc..b3769f7c5 100644 --- a/api/AltV.Net.Mock/MockConnectionInfo.cs +++ b/api/AltV.Net.Mock/MockConnectionInfo.cs @@ -22,7 +22,8 @@ public MockConnectionInfo(ICore core, IntPtr nativePointer, uint id) : base(core public string AuthToken { get; } public bool IsDebug { get; } public string Branch { get; } - public uint Build { get; } + public ushort VersionMajor { get; } + public ushort VersionMinor { get; } public string CdnUrl { get; } public ulong PasswordHash { get; } public string Ip { get; } diff --git a/api/AltV.Net/Core.Events.cs b/api/AltV.Net/Core.Events.cs index 4b8c3949b..b55ce03b6 100644 --- a/api/AltV.Net/Core.Events.cs +++ b/api/AltV.Net/Core.Events.cs @@ -255,21 +255,21 @@ public virtual void OnPlayerConnectEvent(IPlayer player, string reason) } public void OnPlayerConnectDenied(PlayerConnectDeniedReason reason, string name, string ip, ulong passwordHash, - bool isDebug, string branch, uint majorVersion, string cdnUrl, long discordId) + bool isDebug, string branch, ushort versionMajor, ushort versionMinor, string cdnUrl, long discordId) { - OnPlayerConnectDeniedEvent(reason, name, ip, passwordHash, isDebug, branch, majorVersion, cdnUrl, + OnPlayerConnectDeniedEvent(reason, name, ip, passwordHash, isDebug, branch, versionMajor, versionMinor, cdnUrl, discordId); } public virtual void OnPlayerConnectDeniedEvent(PlayerConnectDeniedReason reason, string name, string ip, - ulong passwordHash, bool isDebug, string branch, uint majorVersion, string cdnUrl, long discordId) + ulong passwordHash, bool isDebug, string branch, ushort versionMajor, ushort versionMinor, string cdnUrl, long discordId) { foreach (var @delegate in PlayerConnectDeniedEventHandler.GetEvents()) { try { - @delegate(reason, name, ip, passwordHash, isDebug, branch, majorVersion, cdnUrl, discordId); + @delegate(reason, name, ip, passwordHash, isDebug, branch, versionMajor, versionMinor, cdnUrl, discordId); } catch (TargetInvocationException exception) { diff --git a/api/AltV.Net/Elements/Entities/ConnectionInfo.cs b/api/AltV.Net/Elements/Entities/ConnectionInfo.cs index df2598e47..701ceb890 100644 --- a/api/AltV.Net/Elements/Entities/ConnectionInfo.cs +++ b/api/AltV.Net/Elements/Entities/ConnectionInfo.cs @@ -120,13 +120,24 @@ public string Branch } } - public uint Build + public ushort VersionMajor { get { unsafe { - return Core.Library.Server.ConnectionInfo_GetBuild(ConnectionInfoNativePointer); + return Core.Library.Server.ConnectionInfo_GetVersionMajor(ConnectionInfoNativePointer); + } + } + } + + public ushort VersionMinor + { + get + { + unsafe + { + return Core.Library.Server.ConnectionInfo_GetVersionMinor(ConnectionInfoNativePointer); } } } diff --git a/api/AltV.Net/Elements/Entities/IConnectionInfo.cs b/api/AltV.Net/Elements/Entities/IConnectionInfo.cs index c539f37c2..bceb3b01a 100644 --- a/api/AltV.Net/Elements/Entities/IConnectionInfo.cs +++ b/api/AltV.Net/Elements/Entities/IConnectionInfo.cs @@ -15,7 +15,8 @@ public interface IConnectionInfo : IBaseObject string AuthToken { get; } bool IsDebug { get; } string Branch { get; } - uint Build { get; } + ushort VersionMajor { get; } + ushort VersionMinor { get; } string CdnUrl { get; } ulong PasswordHash { get; } string Ip { get; } diff --git a/api/AltV.Net/Events/Events.cs b/api/AltV.Net/Events/Events.cs index 84cc5eb2a..85e0245ce 100644 --- a/api/AltV.Net/Events/Events.cs +++ b/api/AltV.Net/Events/Events.cs @@ -14,7 +14,7 @@ namespace AltV.Net.Events public delegate void PlayerConnectDelegate(IPlayer player, string reason); public delegate void PlayerConnectDeniedDelegate(PlayerConnectDeniedReason reason, string name, string ip, - ulong passwordHash, bool isDebug, string branch, uint majorVersion, string cdnUrl, long discordId); + ulong passwordHash, bool isDebug, string branch, ushort versionMajor, ushort versionMinor, string cdnUrl, long discordId); public delegate void ResourceEventDelegate(INativeResource resource); diff --git a/api/AltV.Net/ModuleWrapper.cs b/api/AltV.Net/ModuleWrapper.cs index 1fe63a5e4..0b57cbb32 100644 --- a/api/AltV.Net/ModuleWrapper.cs +++ b/api/AltV.Net/ModuleWrapper.cs @@ -418,9 +418,9 @@ public static void OnPlayerDimensionChange(IntPtr player, int oldDimension, int _core.OnPlayerDimensionChange(player, oldDimension, newDimension); } - public static void OnPlayerConnectDenied(PlayerConnectDeniedReason reason, string name, string ip, ulong passwordHash, byte isDebug, string branch, uint majorVersion, string cdnUrl, long discordId) + public static void OnPlayerConnectDenied(PlayerConnectDeniedReason reason, string name, string ip, ulong passwordHash, byte isDebug, string branch, ushort versionMajor, ushort versionMinor, string cdnUrl, long discordId) { - _core.OnPlayerConnectDenied(reason, name, ip, passwordHash, isDebug == 1, branch, majorVersion, cdnUrl, + _core.OnPlayerConnectDenied(reason, name, ip, passwordHash, isDebug == 1, branch, versionMajor, versionMinor, cdnUrl, discordId); } diff --git a/runtime b/runtime index a15f21fe9..b919200e4 160000 --- a/runtime +++ b/runtime @@ -1 +1 @@ -Subproject commit a15f21fe9323d0587a8b438941d1fb177cdad955 +Subproject commit b919200e4e03d8179d74151bab3ec1a2788684da From 0938408e142b8f8b749b72703c050b593a8e1ab2 Mon Sep 17 00:00:00 2001 From: doxoh Date: Fri, 29 Dec 2023 13:35:11 +0100 Subject: [PATCH 61/75] chore: add new tag build --- .github/workflows/release.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index c8cbd648c..e7ca8d6dc 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -2,7 +2,7 @@ on: push: tags: - '*.*.*' - - '*.*.*-*' + - '*.*.*-*.*' jobs: fetch-nethost-linux: runs-on: ubuntu-22.04 From 632f9ff0a114f07890bf492f104520ef1b3843f5 Mon Sep 17 00:00:00 2001 From: doxoh Date: Tue, 2 Jan 2024 18:41:59 +0100 Subject: [PATCH 62/75] feat(client): Add UpdateClipContext --- api/AltV.Net.CApi/Libraries/ClientLibrary.cs | 9 +++++-- api/AltV.Net.CApi/Libraries/ServerLibrary.cs | 4 +-- api/AltV.Net.CApi/Libraries/SharedLibrary.cs | 4 +-- api/AltV.Net.Client/Alt.Globals.cs | 2 ++ api/AltV.Net.Client/Core.cs | 28 ++++++++++++++++++++ api/AltV.Net.Client/ICore.cs | 2 ++ runtime | 2 +- 7 files changed, 44 insertions(+), 7 deletions(-) diff --git a/api/AltV.Net.CApi/Libraries/ClientLibrary.cs b/api/AltV.Net.CApi/Libraries/ClientLibrary.cs index 4a1429a01..5da713ae2 100644 --- a/api/AltV.Net.CApi/Libraries/ClientLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/ClientLibrary.cs @@ -268,6 +268,7 @@ public unsafe interface IClientLibrary public delegate* unmanaged[Cdecl] Core_TriggerServerRPCEvent { get; } public delegate* unmanaged[Cdecl] Core_TriggerWebViewEvent { get; } public delegate* unmanaged[Cdecl] Core_UnloadYtyp { get; } + public delegate* unmanaged[Cdecl] Core_UpdateClipContext { get; } public delegate* unmanaged[Cdecl] Core_WorldToScreen { get; } public delegate* unmanaged[Cdecl] CustomTexture_GetBaseObject { get; } public delegate* unmanaged[Cdecl] CustomTexture_GetID { get; } @@ -899,7 +900,7 @@ public unsafe interface IClientLibrary public unsafe class ClientLibrary : IClientLibrary { - public readonly uint Methods = 1766; + public readonly uint Methods = 1767; public delegate* unmanaged[Cdecl] Audio_AddOutput { get; } public delegate* unmanaged[Cdecl] Audio_GetBaseObject { get; } public delegate* unmanaged[Cdecl] Audio_GetCurrentTime { get; } @@ -1157,6 +1158,7 @@ public unsafe class ClientLibrary : IClientLibrary public delegate* unmanaged[Cdecl] Core_TriggerServerRPCEvent { get; } public delegate* unmanaged[Cdecl] Core_TriggerWebViewEvent { get; } public delegate* unmanaged[Cdecl] Core_UnloadYtyp { get; } + public delegate* unmanaged[Cdecl] Core_UpdateClipContext { get; } public delegate* unmanaged[Cdecl] Core_WorldToScreen { get; } public delegate* unmanaged[Cdecl] CustomTexture_GetBaseObject { get; } public delegate* unmanaged[Cdecl] CustomTexture_GetID { get; } @@ -2298,6 +2300,8 @@ public unsafe class ClientLibrary : IClientLibrary private static void Core_TriggerWebViewEventFallback(nint _core, nint _webview, nint _event, nint[] args, int _size) => throw new Exceptions.OutdatedSdkException("Core_TriggerWebViewEvent", "Core_TriggerWebViewEvent SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate byte Core_UnloadYtypDelegate(nint _core, nint _path); private static byte Core_UnloadYtypFallback(nint _core, nint _path) => throw new Exceptions.OutdatedSdkException("Core_UnloadYtyp", "Core_UnloadYtyp SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Core_UpdateClipContextDelegate(nint _core, nint[] keys, nint[] values, ulong _size); + private static void Core_UpdateClipContextFallback(nint _core, nint[] keys, nint[] values, ulong _size) => throw new Exceptions.OutdatedSdkException("Core_UpdateClipContext", "Core_UpdateClipContext SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Core_WorldToScreenDelegate(nint _core, Vector3 _in, Vector2* _out); private static void Core_WorldToScreenFallback(nint _core, Vector3 _in, Vector2* _out) => throw new Exceptions.OutdatedSdkException("Core_WorldToScreen", "Core_WorldToScreen SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate nint CustomTexture_GetBaseObjectDelegate(nint _costumTexture); @@ -3561,7 +3565,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public ClientLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 3200807633316865025UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 18144996551249947726UL) Outdated = true; Audio_AddOutput = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 9914412815391408844UL, Audio_AddOutputFallback); Audio_GetBaseObject = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 6330360502401226894UL, Audio_GetBaseObjectFallback); Audio_GetCurrentTime = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 2944324482134975819UL, Audio_GetCurrentTimeFallback); @@ -3819,6 +3823,7 @@ public ClientLibrary(Dictionary funcTable) Core_TriggerServerRPCEvent = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 5920144219377072122UL, Core_TriggerServerRPCEventFallback); Core_TriggerWebViewEvent = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 3268039739443301173UL, Core_TriggerWebViewEventFallback); Core_UnloadYtyp = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 17753040748478874447UL, Core_UnloadYtypFallback); + Core_UpdateClipContext = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 17801058509158105354UL, Core_UpdateClipContextFallback); Core_WorldToScreen = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 5389506501733691988UL, Core_WorldToScreenFallback); CustomTexture_GetBaseObject = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 4168880360490742954UL, CustomTexture_GetBaseObjectFallback); CustomTexture_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 12755828446518747613UL, CustomTexture_GetIDFallback); diff --git a/api/AltV.Net.CApi/Libraries/ServerLibrary.cs b/api/AltV.Net.CApi/Libraries/ServerLibrary.cs index a537ab09d..259f37757 100644 --- a/api/AltV.Net.CApi/Libraries/ServerLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/ServerLibrary.cs @@ -485,7 +485,7 @@ public unsafe interface IServerLibrary public unsafe class ServerLibrary : IServerLibrary { - public readonly uint Methods = 1766; + public readonly uint Methods = 1767; public delegate* unmanaged[Cdecl] BaseObject_DeleteSyncedMetaData { get; } public delegate* unmanaged[Cdecl] BaseObject_SetMultipleSyncedMetaData { get; } public delegate* unmanaged[Cdecl] BaseObject_SetSyncedMetaData { get; } @@ -1905,7 +1905,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public ServerLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 3200807633316865025UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 18144996551249947726UL) Outdated = true; BaseObject_DeleteSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8228424877092269355UL, BaseObject_DeleteSyncedMetaDataFallback); BaseObject_SetMultipleSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 1390762125822890831UL, BaseObject_SetMultipleSyncedMetaDataFallback); BaseObject_SetSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8002999088966424231UL, BaseObject_SetSyncedMetaDataFallback); diff --git a/api/AltV.Net.CApi/Libraries/SharedLibrary.cs b/api/AltV.Net.CApi/Libraries/SharedLibrary.cs index 17872eca5..acd2e57ae 100644 --- a/api/AltV.Net.CApi/Libraries/SharedLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/SharedLibrary.cs @@ -425,7 +425,7 @@ public unsafe interface ISharedLibrary public unsafe class SharedLibrary : ISharedLibrary { - public readonly uint Methods = 1766; + public readonly uint Methods = 1767; public delegate* unmanaged[Cdecl] Audio_GetID { get; } public delegate* unmanaged[Cdecl] AudioAttachedOutput_GetID { get; } public delegate* unmanaged[Cdecl] AudioFilter_GetID { get; } @@ -1665,7 +1665,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public SharedLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 3200807633316865025UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 18144996551249947726UL) Outdated = true; Audio_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 4464042055475980737UL, Audio_GetIDFallback); AudioAttachedOutput_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 17725794901805112189UL, AudioAttachedOutput_GetIDFallback); AudioFilter_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8824535635529306325UL, AudioFilter_GetIDFallback); diff --git a/api/AltV.Net.Client/Alt.Globals.cs b/api/AltV.Net.Client/Alt.Globals.cs index b81600a85..583bf43ed 100644 --- a/api/AltV.Net.Client/Alt.Globals.cs +++ b/api/AltV.Net.Client/Alt.Globals.cs @@ -92,6 +92,8 @@ public static partial class Alt public static void RemoveVoiceFilter(uint playerRemoteId) => Core.RemoveVoiceFilter(playerRemoteId); public static IAudioFilter GetVoiceFilter(uint playerRemoteId) => Core.GetVoiceFilter(playerRemoteId); + public static void UpdateClipContext(Dictionary context) => Core.UpdateClipContext(context); + public static MapZoomData GetMapZoomData(uint id) => Core.GetMapZoomData(id); public static MapZoomData GetMapZoomData(string alias) => Core.GetMapZoomData(alias); public static void ResetAllMapZoomData() => Core.ResetAllMapZoomData(); diff --git a/api/AltV.Net.Client/Core.cs b/api/AltV.Net.Client/Core.cs index 71e1bb461..0f571b97e 100644 --- a/api/AltV.Net.Client/Core.cs +++ b/api/AltV.Net.Client/Core.cs @@ -704,6 +704,34 @@ public IColShape CreateColShapeSphere(Vector3 position, float radius) return PoolManager.ColShape.Create(this, ptr, id); } + public void UpdateClipContext(Dictionary context) + { + unsafe + { + var data = new Dictionary(); + + var keys = new IntPtr[context.Count]; + var values = new IntPtr[context.Count]; + + for (var i = 0; i < context.Count; i++) + { + var keyptr = MemoryUtils.StringToHGlobalUtf8(context.ElementAt(i).Key); + var valueptr = MemoryUtils.StringToHGlobalUtf8(context.ElementAt(i).Value); + keys[i] = keyptr; + values[i] = valueptr; + data.Add(keyptr, valueptr); + } + + Library.Client.Core_UpdateClipContext(NativePointer, keys, values,(uint)data.Count); + + foreach (var dataValue in data) + { + Marshal.FreeHGlobal(dataValue.Key); + Marshal.FreeHGlobal(dataValue.Value); + } + } + } + #endregion #region TriggerServerEvent diff --git a/api/AltV.Net.Client/ICore.cs b/api/AltV.Net.Client/ICore.cs index cbe4c535d..7029d7ec3 100644 --- a/api/AltV.Net.Client/ICore.cs +++ b/api/AltV.Net.Client/ICore.cs @@ -227,5 +227,7 @@ ILocalObject CreateLocalObject(uint modelHash, Position position, Rotation rotat void AddVoiceFilter(uint playerRemoteId, IAudioFilter filter); void RemoveVoiceFilter(uint playerRemoteId); IAudioFilter GetVoiceFilter(uint playerRemoteId); + + void UpdateClipContext(Dictionary context); } } \ No newline at end of file diff --git a/runtime b/runtime index b919200e4..c38f6331f 160000 --- a/runtime +++ b/runtime @@ -1 +1 @@ -Subproject commit b919200e4e03d8179d74151bab3ec1a2788684da +Subproject commit c38f6331f1acf3eaaa73b2ffa9a1c1207a75331b From 0def6e3d40a56b40a102b4097fe7698120126a00 Mon Sep 17 00:00:00 2001 From: doxoh Date: Tue, 2 Jan 2024 21:29:07 +0100 Subject: [PATCH 63/75] fix(shared): change IReadableMValue implementations from struct to class --- .../Elements/Args/MValueObjectReader.cs | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/api/AltV.Net.Shared/Elements/Args/MValueObjectReader.cs b/api/AltV.Net.Shared/Elements/Args/MValueObjectReader.cs index 82178f30d..2ec7d6496 100644 --- a/api/AltV.Net.Shared/Elements/Args/MValueObjectReader.cs +++ b/api/AltV.Net.Shared/Elements/Args/MValueObjectReader.cs @@ -19,7 +19,7 @@ private interface IReadableMValue object Peek(); } - private struct MValueArrayReader : IReadableMValue + private class MValueArrayReader : IReadableMValue { private readonly object[] values; @@ -53,7 +53,7 @@ public object Peek() } } - private struct MValueDictionaryReader : IReadableMValue + private class MValueDictionaryReader : IReadableMValue { private readonly object[] values; @@ -102,14 +102,14 @@ public int GetNameSize() { return names.Length - nameIndex; } - + public object Peek() { return values[index]; } } - private struct MValueStartReader : IReadableMValue + private class MValueStartReader : IReadableMValue { private object obj; @@ -136,7 +136,7 @@ public void SkipValue() obj = null; size = 0; } - + public object Peek() { return obj; @@ -207,7 +207,7 @@ private void CheckObject() throw new InvalidDataException("Not inside a object or array"); } } - + private void CheckArray() { if (!insideObject && readableMValue.Peek().GetType() != typeof(object[])) @@ -352,7 +352,7 @@ public ulong NextULong() return value; } - + public Position NextPosition() { CheckObjectOrArray(); @@ -366,7 +366,7 @@ public Position NextPosition() return value; } - + public Rgba NextRgba() { CheckObjectOrArray(); From 3452634633597c83af84a5ef7e087cbc7b23ba04 Mon Sep 17 00:00:00 2001 From: doxoh Date: Wed, 3 Jan 2024 00:05:44 +0100 Subject: [PATCH 64/75] feat(shared): add count to decoration --- api/AltV.Net/Data/Decoration.cs | 5 ++++- runtime | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/api/AltV.Net/Data/Decoration.cs b/api/AltV.Net/Data/Decoration.cs index 78f700ef0..15ef7935c 100644 --- a/api/AltV.Net/Data/Decoration.cs +++ b/api/AltV.Net/Data/Decoration.cs @@ -7,13 +7,15 @@ internal readonly struct DecorationInternal { private readonly uint Collection; private readonly uint Overlay; + private readonly byte Count; public Decoration ToPublic() { return new Decoration { Collection = Collection, - Overlay = Overlay + Overlay = Overlay, + Count = Count }; } } @@ -22,4 +24,5 @@ public struct Decoration { public uint Collection; public uint Overlay; + public byte Count; } \ No newline at end of file diff --git a/runtime b/runtime index c38f6331f..8a64c6d0a 160000 --- a/runtime +++ b/runtime @@ -1 +1 @@ -Subproject commit c38f6331f1acf3eaaa73b2ffa9a1c1207a75331b +Subproject commit 8a64c6d0a460400f31a3413c6ca83bf925a0b25b From 440904d6345c266535dcc52ae926b72ba0d932cd Mon Sep 17 00:00:00 2001 From: doxoh Date: Wed, 3 Jan 2024 00:13:20 +0100 Subject: [PATCH 65/75] fix(server): fix deallocDecoration callname --- api/AltV.Net.CApi/Libraries/ClientLibrary.cs | 2 +- api/AltV.Net.CApi/Libraries/ServerLibrary.cs | 12 ++++++------ api/AltV.Net.CApi/Libraries/SharedLibrary.cs | 2 +- api/AltV.Net/Elements/Entities/Player.cs | 2 +- runtime | 2 +- 5 files changed, 10 insertions(+), 10 deletions(-) diff --git a/api/AltV.Net.CApi/Libraries/ClientLibrary.cs b/api/AltV.Net.CApi/Libraries/ClientLibrary.cs index 5da713ae2..b1ea92999 100644 --- a/api/AltV.Net.CApi/Libraries/ClientLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/ClientLibrary.cs @@ -3565,7 +3565,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public ClientLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 18144996551249947726UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 13630124142623987997UL) Outdated = true; Audio_AddOutput = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 9914412815391408844UL, Audio_AddOutputFallback); Audio_GetBaseObject = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 6330360502401226894UL, Audio_GetBaseObjectFallback); Audio_GetCurrentTime = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 2944324482134975819UL, Audio_GetCurrentTimeFallback); diff --git a/api/AltV.Net.CApi/Libraries/ServerLibrary.cs b/api/AltV.Net.CApi/Libraries/ServerLibrary.cs index 259f37757..5ef506840 100644 --- a/api/AltV.Net.CApi/Libraries/ServerLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/ServerLibrary.cs @@ -165,7 +165,7 @@ public unsafe interface IServerLibrary public delegate* unmanaged[Cdecl] Player_ClearProps { get; } public delegate* unmanaged[Cdecl] Player_ClearTasks { get; } public delegate* unmanaged[Cdecl] Player_DeallocAmmoFlags { get; } - public delegate* unmanaged[Cdecl] Player_DeallocVehicleModelInfo { get; } + public delegate* unmanaged[Cdecl] Player_DeallocDecoration { get; } public delegate* unmanaged[Cdecl] Player_DeleteLocalMetaData { get; } public delegate* unmanaged[Cdecl] Player_Despawn { get; } public delegate* unmanaged[Cdecl] Player_GetAmmo { get; } @@ -640,7 +640,7 @@ public unsafe class ServerLibrary : IServerLibrary public delegate* unmanaged[Cdecl] Player_ClearProps { get; } public delegate* unmanaged[Cdecl] Player_ClearTasks { get; } public delegate* unmanaged[Cdecl] Player_DeallocAmmoFlags { get; } - public delegate* unmanaged[Cdecl] Player_DeallocVehicleModelInfo { get; } + public delegate* unmanaged[Cdecl] Player_DeallocDecoration { get; } public delegate* unmanaged[Cdecl] Player_DeleteLocalMetaData { get; } public delegate* unmanaged[Cdecl] Player_Despawn { get; } public delegate* unmanaged[Cdecl] Player_GetAmmo { get; } @@ -1264,8 +1264,8 @@ public unsafe class ServerLibrary : IServerLibrary private static void Player_ClearTasksFallback(nint _player) => throw new Exceptions.OutdatedSdkException("Player_ClearTasks", "Player_ClearTasks SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Player_DeallocAmmoFlagsDelegate(nint _ammoFlags); private static void Player_DeallocAmmoFlagsFallback(nint _ammoFlags) => throw new Exceptions.OutdatedSdkException("Player_DeallocAmmoFlags", "Player_DeallocAmmoFlags SDK method is outdated. Please update your module nuget"); - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Player_DeallocVehicleModelInfoDelegate(nint _decoInfo); - private static void Player_DeallocVehicleModelInfoFallback(nint _decoInfo) => throw new Exceptions.OutdatedSdkException("Player_DeallocVehicleModelInfo", "Player_DeallocVehicleModelInfo SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Player_DeallocDecorationDelegate(nint _decoInfo); + private static void Player_DeallocDecorationFallback(nint _decoInfo) => throw new Exceptions.OutdatedSdkException("Player_DeallocDecoration", "Player_DeallocDecoration SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Player_DeleteLocalMetaDataDelegate(nint _player, nint _key); private static void Player_DeleteLocalMetaDataFallback(nint _player, nint _key) => throw new Exceptions.OutdatedSdkException("Player_DeleteLocalMetaData", "Player_DeleteLocalMetaData SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Player_DespawnDelegate(nint _player); @@ -1905,7 +1905,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public ServerLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 18144996551249947726UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 13630124142623987997UL) Outdated = true; BaseObject_DeleteSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8228424877092269355UL, BaseObject_DeleteSyncedMetaDataFallback); BaseObject_SetMultipleSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 1390762125822890831UL, BaseObject_SetMultipleSyncedMetaDataFallback); BaseObject_SetSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8002999088966424231UL, BaseObject_SetSyncedMetaDataFallback); @@ -2060,7 +2060,7 @@ public ServerLibrary(Dictionary funcTable) Player_ClearProps = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 14293729102633233291UL, Player_ClearPropsFallback); Player_ClearTasks = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 2394928316223850939UL, Player_ClearTasksFallback); Player_DeallocAmmoFlags = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 17674808600712417948UL, Player_DeallocAmmoFlagsFallback); - Player_DeallocVehicleModelInfo = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 10260708090721922895UL, Player_DeallocVehicleModelInfoFallback); + Player_DeallocDecoration = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 11055092498025975234UL, Player_DeallocDecorationFallback); Player_DeleteLocalMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 18350138927152444768UL, Player_DeleteLocalMetaDataFallback); Player_Despawn = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 10068978925729858744UL, Player_DespawnFallback); Player_GetAmmo = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 6890209545812653225UL, Player_GetAmmoFallback); diff --git a/api/AltV.Net.CApi/Libraries/SharedLibrary.cs b/api/AltV.Net.CApi/Libraries/SharedLibrary.cs index acd2e57ae..ac99219f9 100644 --- a/api/AltV.Net.CApi/Libraries/SharedLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/SharedLibrary.cs @@ -1665,7 +1665,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public SharedLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 18144996551249947726UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 13630124142623987997UL) Outdated = true; Audio_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 4464042055475980737UL, Audio_GetIDFallback); AudioAttachedOutput_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 17725794901805112189UL, AudioAttachedOutput_GetIDFallback); AudioFilter_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8824535635529306325UL, AudioFilter_GetIDFallback); diff --git a/api/AltV.Net/Elements/Entities/Player.cs b/api/AltV.Net/Elements/Entities/Player.cs index 5c813e750..6e877dcf4 100644 --- a/api/AltV.Net/Elements/Entities/Player.cs +++ b/api/AltV.Net/Elements/Entities/Player.cs @@ -371,7 +371,7 @@ public Decoration[] GetDecorations() var structure = Marshal.PtrToStructure(ptr); decorations[i] = structure.ToPublic(); } - Core.Library.Shared.FreePlayerArray(ptr); + Core.Library.Server.Player_DeallocDecoration(ptr); return decorations; } } diff --git a/runtime b/runtime index 8a64c6d0a..b33791886 160000 --- a/runtime +++ b/runtime @@ -1 +1 @@ -Subproject commit 8a64c6d0a460400f31a3413c6ca83bf925a0b25b +Subproject commit b337918866d3f40fcb54304e39edd35f5d83843c From a8de0d5eaf157b3bada76cc65ebe63992e62b441 Mon Sep 17 00:00:00 2001 From: doxoh Date: Wed, 3 Jan 2024 00:17:43 +0100 Subject: [PATCH 66/75] fix(server): fix more GetDecorationsCall --- api/AltV.Net/Elements/Entities/Player.cs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/api/AltV.Net/Elements/Entities/Player.cs b/api/AltV.Net/Elements/Entities/Player.cs index 6e877dcf4..4e3f5e68c 100644 --- a/api/AltV.Net/Elements/Entities/Player.cs +++ b/api/AltV.Net/Elements/Entities/Player.cs @@ -365,10 +365,9 @@ public Decoration[] GetDecorations() var decorations = new Decoration[size]; var data = new IntPtr[size]; Marshal.Copy(ptr, data, 0, (int) size); - for (ulong i = 0; i < size; i++) { - var structure = Marshal.PtrToStructure(ptr); + var structure = Marshal.PtrToStructure(data[i]); decorations[i] = structure.ToPublic(); } Core.Library.Server.Player_DeallocDecoration(ptr); From b8047ae1676da64d7eacb05f85f171057240a8a7 Mon Sep 17 00:00:00 2001 From: doxoh Date: Wed, 3 Jan 2024 16:49:14 +0100 Subject: [PATCH 67/75] feat(server) add modelhash to vehicle_model_info --- api/AltV.Net/Data/VehicleModelInfo.cs | 3 +++ 1 file changed, 3 insertions(+) diff --git a/api/AltV.Net/Data/VehicleModelInfo.cs b/api/AltV.Net/Data/VehicleModelInfo.cs index 0743c518d..b1e6c6fa2 100644 --- a/api/AltV.Net/Data/VehicleModelInfo.cs +++ b/api/AltV.Net/Data/VehicleModelInfo.cs @@ -30,6 +30,7 @@ public enum VehicleModelType : byte [StructLayout(LayoutKind.Sequential)] internal readonly struct VehicleModelInfoInternal { + private readonly uint ModelHash; [MarshalAs(UnmanagedType.LPStr)] private readonly string Title; @@ -72,6 +73,7 @@ public VehicleModelInfo ToPublic() return new VehicleModelInfo { + ModelHash = ModelHash, Title = Title, Type = Type, WheelsCount = WheelsCount, @@ -95,6 +97,7 @@ public VehicleModelInfo ToPublic() public struct VehicleModelInfo { + public uint ModelHash; public string Title; public VehicleModelType Type; From f9e00c8900e43489219080f05d00b3231bdcad3c Mon Sep 17 00:00:00 2001 From: doxoh Date: Wed, 3 Jan 2024 16:49:21 +0100 Subject: [PATCH 68/75] feat(server): add count param to AddDecoration --- api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs | 4 ++-- api/AltV.Net.CApi/Libraries/ClientLibrary.cs | 2 +- api/AltV.Net.CApi/Libraries/ServerLibrary.cs | 12 ++++++------ api/AltV.Net.CApi/Libraries/SharedLibrary.cs | 2 +- api/AltV.Net/Elements/Entities/IPlayer.cs | 2 +- api/AltV.Net/Elements/Entities/Player.cs | 4 ++-- runtime | 2 +- 7 files changed, 14 insertions(+), 14 deletions(-) diff --git a/api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs b/api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs index b79c55094..ffbe7c38d 100644 --- a/api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs +++ b/api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs @@ -1482,12 +1482,12 @@ public int GetAmmoMax100(uint ammoHash) } } - public void AddDecoration(uint collection, uint overlay) + public void AddDecoration(uint collection, uint overlay, byte count = 1) { lock (Player) { if (!AsyncContext.CheckIfExistsNullable(Player)) return; - Player.AddDecoration(collection, overlay); + Player.AddDecoration(collection, overlay, count); } } diff --git a/api/AltV.Net.CApi/Libraries/ClientLibrary.cs b/api/AltV.Net.CApi/Libraries/ClientLibrary.cs index b1ea92999..7e4ef25a3 100644 --- a/api/AltV.Net.CApi/Libraries/ClientLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/ClientLibrary.cs @@ -3565,7 +3565,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public ClientLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 13630124142623987997UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 16106728582837015091UL) Outdated = true; Audio_AddOutput = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 9914412815391408844UL, Audio_AddOutputFallback); Audio_GetBaseObject = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 6330360502401226894UL, Audio_GetBaseObjectFallback); Audio_GetCurrentTime = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 2944324482134975819UL, Audio_GetCurrentTimeFallback); diff --git a/api/AltV.Net.CApi/Libraries/ServerLibrary.cs b/api/AltV.Net.CApi/Libraries/ServerLibrary.cs index 5ef506840..540556b22 100644 --- a/api/AltV.Net.CApi/Libraries/ServerLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/ServerLibrary.cs @@ -157,7 +157,7 @@ public unsafe interface IServerLibrary public delegate* unmanaged[Cdecl] Ped_SetCurrentWeapon { get; } public delegate* unmanaged[Cdecl] Ped_SetHealth { get; } public delegate* unmanaged[Cdecl] Ped_SetMaxHealth { get; } - public delegate* unmanaged[Cdecl] Player_AddDecoration { get; } + public delegate* unmanaged[Cdecl] Player_AddDecoration { get; } public delegate* unmanaged[Cdecl] Player_AddWeaponComponent { get; } public delegate* unmanaged[Cdecl] Player_ClearBloodDamage { get; } public delegate* unmanaged[Cdecl] Player_ClearClothes { get; } @@ -632,7 +632,7 @@ public unsafe class ServerLibrary : IServerLibrary public delegate* unmanaged[Cdecl] Ped_SetCurrentWeapon { get; } public delegate* unmanaged[Cdecl] Ped_SetHealth { get; } public delegate* unmanaged[Cdecl] Ped_SetMaxHealth { get; } - public delegate* unmanaged[Cdecl] Player_AddDecoration { get; } + public delegate* unmanaged[Cdecl] Player_AddDecoration { get; } public delegate* unmanaged[Cdecl] Player_AddWeaponComponent { get; } public delegate* unmanaged[Cdecl] Player_ClearBloodDamage { get; } public delegate* unmanaged[Cdecl] Player_ClearClothes { get; } @@ -1248,8 +1248,8 @@ public unsafe class ServerLibrary : IServerLibrary private static void Ped_SetHealthFallback(nint _ped, ushort _health) => throw new Exceptions.OutdatedSdkException("Ped_SetHealth", "Ped_SetHealth SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Ped_SetMaxHealthDelegate(nint _ped, ushort _maxHealth); private static void Ped_SetMaxHealthFallback(nint _ped, ushort _maxHealth) => throw new Exceptions.OutdatedSdkException("Ped_SetMaxHealth", "Ped_SetMaxHealth SDK method is outdated. Please update your module nuget"); - [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Player_AddDecorationDelegate(nint _player, uint _collection, uint _overlay); - private static void Player_AddDecorationFallback(nint _player, uint _collection, uint _overlay) => throw new Exceptions.OutdatedSdkException("Player_AddDecoration", "Player_AddDecoration SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Player_AddDecorationDelegate(nint _player, uint _collection, uint _overlay, byte _count); + private static void Player_AddDecorationFallback(nint _player, uint _collection, uint _overlay, byte _count) => throw new Exceptions.OutdatedSdkException("Player_AddDecoration", "Player_AddDecoration SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Player_AddWeaponComponentDelegate(nint _player, uint _weapon, uint _component); private static void Player_AddWeaponComponentFallback(nint _player, uint _weapon, uint _component) => throw new Exceptions.OutdatedSdkException("Player_AddWeaponComponent", "Player_AddWeaponComponent SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Player_ClearBloodDamageDelegate(nint _player); @@ -1905,7 +1905,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public ServerLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 13630124142623987997UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 16106728582837015091UL) Outdated = true; BaseObject_DeleteSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8228424877092269355UL, BaseObject_DeleteSyncedMetaDataFallback); BaseObject_SetMultipleSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 1390762125822890831UL, BaseObject_SetMultipleSyncedMetaDataFallback); BaseObject_SetSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8002999088966424231UL, BaseObject_SetSyncedMetaDataFallback); @@ -2052,7 +2052,7 @@ public ServerLibrary(Dictionary funcTable) Ped_SetCurrentWeapon = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 1890144317981520558UL, Ped_SetCurrentWeaponFallback); Ped_SetHealth = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 15651278310887155719UL, Ped_SetHealthFallback); Ped_SetMaxHealth = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 487582698440451683UL, Ped_SetMaxHealthFallback); - Player_AddDecoration = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 11189476182745634495UL, Player_AddDecorationFallback); + Player_AddDecoration = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 4335399707847968795UL, Player_AddDecorationFallback); Player_AddWeaponComponent = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 9305362021789278268UL, Player_AddWeaponComponentFallback); Player_ClearBloodDamage = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 1935399752104807234UL, Player_ClearBloodDamageFallback); Player_ClearClothes = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 992364219024894490UL, Player_ClearClothesFallback); diff --git a/api/AltV.Net.CApi/Libraries/SharedLibrary.cs b/api/AltV.Net.CApi/Libraries/SharedLibrary.cs index ac99219f9..9c3e0f4b7 100644 --- a/api/AltV.Net.CApi/Libraries/SharedLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/SharedLibrary.cs @@ -1665,7 +1665,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public SharedLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 13630124142623987997UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 16106728582837015091UL) Outdated = true; Audio_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 4464042055475980737UL, Audio_GetIDFallback); AudioAttachedOutput_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 17725794901805112189UL, AudioAttachedOutput_GetIDFallback); AudioFilter_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8824535635529306325UL, AudioFilter_GetIDFallback); diff --git a/api/AltV.Net/Elements/Entities/IPlayer.cs b/api/AltV.Net/Elements/Entities/IPlayer.cs index 7624c7830..abf2b21c2 100644 --- a/api/AltV.Net/Elements/Entities/IPlayer.cs +++ b/api/AltV.Net/Elements/Entities/IPlayer.cs @@ -462,7 +462,7 @@ void PlayAnimation(string animDict, string animName, float blendInSpeed, float b void SetAmmoMax100(uint ammoHash, int ammoMax); int GetAmmoMax100(uint ammoHash); - void AddDecoration(uint collection, uint overlay); + void AddDecoration(uint collection, uint overlay, byte count = 1); void RemoveDecoration(uint collection, uint overlay); void ClearDecorations(); Decoration[] GetDecorations(); diff --git a/api/AltV.Net/Elements/Entities/Player.cs b/api/AltV.Net/Elements/Entities/Player.cs index 4e3f5e68c..8d5d97e28 100644 --- a/api/AltV.Net/Elements/Entities/Player.cs +++ b/api/AltV.Net/Elements/Entities/Player.cs @@ -328,12 +328,12 @@ public int GetAmmoMax100(uint ammoHash) } } - public void AddDecoration(uint collection, uint overlay) + public void AddDecoration(uint collection, uint overlay, byte count = 1) { unsafe { CheckIfEntityExists(); - Core.Library.Server.Player_AddDecoration(PlayerNativePointer, collection, overlay); + Core.Library.Server.Player_AddDecoration(PlayerNativePointer, collection, overlay, count); } } diff --git a/runtime b/runtime index b33791886..810a26d29 160000 --- a/runtime +++ b/runtime @@ -1 +1 @@ -Subproject commit b337918866d3f40fcb54304e39edd35f5d83843c +Subproject commit 810a26d294ce6f98523dcc23c5b0672bc996fc5d From 9f02fd16079a00d120c67405b5840f9196f3ae58 Mon Sep 17 00:00:00 2001 From: doxoh Date: Wed, 3 Jan 2024 20:33:23 +0100 Subject: [PATCH 69/75] fix(shared): getData --- api/AltV.Net.EntitySync/Entity.cs | 6 ++++++ api/AltV.Net.Shared/Elements/Entities/SharedBaseObject.cs | 6 ++++++ 2 files changed, 12 insertions(+) diff --git a/api/AltV.Net.EntitySync/Entity.cs b/api/AltV.Net.EntitySync/Entity.cs index bd5adf1fe..9758d09cc 100644 --- a/api/AltV.Net.EntitySync/Entity.cs +++ b/api/AltV.Net.EntitySync/Entity.cs @@ -194,6 +194,12 @@ public bool TryGetData(string key, out T value) } catch { + if (currValue is T cast) + { + value = cast; + return true; + } + value = default; return false; } diff --git a/api/AltV.Net.Shared/Elements/Entities/SharedBaseObject.cs b/api/AltV.Net.Shared/Elements/Entities/SharedBaseObject.cs index 24c9cbd14..17e305321 100644 --- a/api/AltV.Net.Shared/Elements/Entities/SharedBaseObject.cs +++ b/api/AltV.Net.Shared/Elements/Entities/SharedBaseObject.cs @@ -48,6 +48,12 @@ public bool GetData(string key, out T result) } catch { + if (value is T cast) + { + result = cast; + return true; + } + result = default; return false; } From fbc5090c78af9abd92e64f0513f3fa7cd51fca61 Mon Sep 17 00:00:00 2001 From: doxoh Date: Sun, 7 Jan 2024 18:59:29 +0100 Subject: [PATCH 70/75] feat(client): add debug infos --- api/AltV.Net.CApi.Generator/TypeRegistry.cs | 8 +- api/AltV.Net.CApi/Libraries/ClientLibrary.cs | 9 +- api/AltV.Net.CApi/Libraries/ServerLibrary.cs | 4 +- api/AltV.Net.CApi/Libraries/SharedLibrary.cs | 9 +- api/AltV.Net.Client/Elements/Data/SyncInfo.cs | 125 ++++++++++++++++++ .../Elements/Entities/Entity.cs | 21 +++ .../Elements/Interfaces/IEntity.cs | 4 +- runtime | 2 +- 8 files changed, 167 insertions(+), 15 deletions(-) create mode 100644 api/AltV.Net.Client/Elements/Data/SyncInfo.cs diff --git a/api/AltV.Net.CApi.Generator/TypeRegistry.cs b/api/AltV.Net.CApi.Generator/TypeRegistry.cs index 6191fd304..e4f1778f1 100644 --- a/api/AltV.Net.CApi.Generator/TypeRegistry.cs +++ b/api/AltV.Net.CApi.Generator/TypeRegistry.cs @@ -112,19 +112,15 @@ public static class TypeRegistry { "rgba_t", "Rgba" }, { "rgba_t&", "Rgba*" }, { "std::vector", "UIntArray*" }, - { "alt::Quaternion", "Quaternion" }, { "alt::Quaternion&", "Quaternion*" }, - { "position_t&", "Vector3*" }, { "position_t", "Vector3" }, { "alt::Position", "Vector3" }, { "rotation_t&", "Rotation*" }, { "rotation_t", "Rotation" }, { "alt::Rotation", "Rotation" }, - { "vehicleBadgePosition_t[]", "VehicleBadgePosition[]" }, - { "cloth_t&", "Cloth*" }, { "cloth_t", "Cloth" }, { "dlccloth_t&", "DlcCloth*" }, @@ -170,9 +166,7 @@ public static class TypeRegistry { "const alt::MValueList&", "MValue*" }, //no c# representation for MValue list memory layout yet { "alt::MValueDict&", "MValue*" }, //no c# representation for MValue dictionary memory layout yet { "alt::ICheckpoint*", "nint" }, - { - "alt::MValueFunction&", "MValue*" - }, //no c# representation for MValue function memory layout yet, this is only in commented code and not required + { "alt::MValueFunction&", "MValue*" }, //no c# representation for MValue function memory layout yet, this is only in commented code and not required { "alt::CEvent::Type", "ushort" }, { "alt::CEvent*", "nint" }, { "alt::CCancellableEvent*", "nint" }, diff --git a/api/AltV.Net.CApi/Libraries/ClientLibrary.cs b/api/AltV.Net.CApi/Libraries/ClientLibrary.cs index 7e4ef25a3..40896b389 100644 --- a/api/AltV.Net.CApi/Libraries/ClientLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/ClientLibrary.cs @@ -273,6 +273,7 @@ public unsafe interface IClientLibrary public delegate* unmanaged[Cdecl] CustomTexture_GetBaseObject { get; } public delegate* unmanaged[Cdecl] CustomTexture_GetID { get; } public delegate* unmanaged[Cdecl] Entity_GetScriptID { get; } + public delegate* unmanaged[Cdecl] Entity_GetSyncInfo { get; } public delegate* unmanaged[Cdecl] Event_SetAnyResourceErrorDelegate { get; } public delegate* unmanaged[Cdecl] Event_SetAnyResourceStartDelegate { get; } public delegate* unmanaged[Cdecl] Event_SetAnyResourceStopDelegate { get; } @@ -900,7 +901,7 @@ public unsafe interface IClientLibrary public unsafe class ClientLibrary : IClientLibrary { - public readonly uint Methods = 1767; + public readonly uint Methods = 1769; public delegate* unmanaged[Cdecl] Audio_AddOutput { get; } public delegate* unmanaged[Cdecl] Audio_GetBaseObject { get; } public delegate* unmanaged[Cdecl] Audio_GetCurrentTime { get; } @@ -1163,6 +1164,7 @@ public unsafe class ClientLibrary : IClientLibrary public delegate* unmanaged[Cdecl] CustomTexture_GetBaseObject { get; } public delegate* unmanaged[Cdecl] CustomTexture_GetID { get; } public delegate* unmanaged[Cdecl] Entity_GetScriptID { get; } + public delegate* unmanaged[Cdecl] Entity_GetSyncInfo { get; } public delegate* unmanaged[Cdecl] Event_SetAnyResourceErrorDelegate { get; } public delegate* unmanaged[Cdecl] Event_SetAnyResourceStartDelegate { get; } public delegate* unmanaged[Cdecl] Event_SetAnyResourceStopDelegate { get; } @@ -2310,6 +2312,8 @@ public unsafe class ClientLibrary : IClientLibrary private static uint CustomTexture_GetIDFallback(nint _costumTexture) => throw new Exceptions.OutdatedSdkException("CustomTexture_GetID", "CustomTexture_GetID SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate uint Entity_GetScriptIDDelegate(nint _entity); private static uint Entity_GetScriptIDFallback(nint _entity) => throw new Exceptions.OutdatedSdkException("Entity_GetScriptID", "Entity_GetScriptID SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Entity_GetSyncInfoDelegate(nint _entity, nint* _syncInfo); + private static void Entity_GetSyncInfoFallback(nint _entity, nint* _syncInfo) => throw new Exceptions.OutdatedSdkException("Entity_GetSyncInfo", "Entity_GetSyncInfo SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Event_SetAnyResourceErrorDelegateDelegate(nint _resource, ClientEvents.AnyResourceErrorModuleDelegate _delegate); private static void Event_SetAnyResourceErrorDelegateFallback(nint _resource, ClientEvents.AnyResourceErrorModuleDelegate _delegate) => throw new Exceptions.OutdatedSdkException("Event_SetAnyResourceErrorDelegate", "Event_SetAnyResourceErrorDelegate SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void Event_SetAnyResourceStartDelegateDelegate(nint _resource, ClientEvents.AnyResourceStartModuleDelegate _delegate); @@ -3565,7 +3569,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public ClientLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 16106728582837015091UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 12612033657027659340UL) Outdated = true; Audio_AddOutput = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 9914412815391408844UL, Audio_AddOutputFallback); Audio_GetBaseObject = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 6330360502401226894UL, Audio_GetBaseObjectFallback); Audio_GetCurrentTime = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 2944324482134975819UL, Audio_GetCurrentTimeFallback); @@ -3828,6 +3832,7 @@ public ClientLibrary(Dictionary funcTable) CustomTexture_GetBaseObject = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 4168880360490742954UL, CustomTexture_GetBaseObjectFallback); CustomTexture_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 12755828446518747613UL, CustomTexture_GetIDFallback); Entity_GetScriptID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 11915813456855488252UL, Entity_GetScriptIDFallback); + Entity_GetSyncInfo = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 18237250479106097113UL, Entity_GetSyncInfoFallback); Event_SetAnyResourceErrorDelegate = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 14079997901958077241UL, Event_SetAnyResourceErrorDelegateFallback); Event_SetAnyResourceStartDelegate = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 18259284189737259993UL, Event_SetAnyResourceStartDelegateFallback); Event_SetAnyResourceStopDelegate = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 13707820718504089625UL, Event_SetAnyResourceStopDelegateFallback); diff --git a/api/AltV.Net.CApi/Libraries/ServerLibrary.cs b/api/AltV.Net.CApi/Libraries/ServerLibrary.cs index 540556b22..fd72fe52d 100644 --- a/api/AltV.Net.CApi/Libraries/ServerLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/ServerLibrary.cs @@ -485,7 +485,7 @@ public unsafe interface IServerLibrary public unsafe class ServerLibrary : IServerLibrary { - public readonly uint Methods = 1767; + public readonly uint Methods = 1769; public delegate* unmanaged[Cdecl] BaseObject_DeleteSyncedMetaData { get; } public delegate* unmanaged[Cdecl] BaseObject_SetMultipleSyncedMetaData { get; } public delegate* unmanaged[Cdecl] BaseObject_SetSyncedMetaData { get; } @@ -1905,7 +1905,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public ServerLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 16106728582837015091UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 12612033657027659340UL) Outdated = true; BaseObject_DeleteSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8228424877092269355UL, BaseObject_DeleteSyncedMetaDataFallback); BaseObject_SetMultipleSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 1390762125822890831UL, BaseObject_SetMultipleSyncedMetaDataFallback); BaseObject_SetSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8002999088966424231UL, BaseObject_SetSyncedMetaDataFallback); diff --git a/api/AltV.Net.CApi/Libraries/SharedLibrary.cs b/api/AltV.Net.CApi/Libraries/SharedLibrary.cs index 9c3e0f4b7..e1292af38 100644 --- a/api/AltV.Net.CApi/Libraries/SharedLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/SharedLibrary.cs @@ -247,6 +247,7 @@ public unsafe interface ISharedLibrary public delegate* unmanaged[Cdecl] FreeResourceArray { get; } public delegate* unmanaged[Cdecl] FreeString { get; } public delegate* unmanaged[Cdecl] FreeStringArray { get; } + public delegate* unmanaged[Cdecl] FreeSyncInfo { get; } public delegate* unmanaged[Cdecl] FreeTextLabelArray { get; } public delegate* unmanaged[Cdecl] FreeUInt32Array { get; } public delegate* unmanaged[Cdecl] FreeUInt8Array { get; } @@ -425,7 +426,7 @@ public unsafe interface ISharedLibrary public unsafe class SharedLibrary : ISharedLibrary { - public readonly uint Methods = 1767; + public readonly uint Methods = 1769; public delegate* unmanaged[Cdecl] Audio_GetID { get; } public delegate* unmanaged[Cdecl] AudioAttachedOutput_GetID { get; } public delegate* unmanaged[Cdecl] AudioFilter_GetID { get; } @@ -662,6 +663,7 @@ public unsafe class SharedLibrary : ISharedLibrary public delegate* unmanaged[Cdecl] FreeResourceArray { get; } public delegate* unmanaged[Cdecl] FreeString { get; } public delegate* unmanaged[Cdecl] FreeStringArray { get; } + public delegate* unmanaged[Cdecl] FreeSyncInfo { get; } public delegate* unmanaged[Cdecl] FreeTextLabelArray { get; } public delegate* unmanaged[Cdecl] FreeUInt32Array { get; } public delegate* unmanaged[Cdecl] FreeUInt8Array { get; } @@ -1308,6 +1310,8 @@ public unsafe class SharedLibrary : ISharedLibrary private static void FreeStringFallback(nint _string) => throw new Exceptions.OutdatedSdkException("FreeString", "FreeString SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void FreeStringArrayDelegate(nint _stringArray, uint _size); private static void FreeStringArrayFallback(nint _stringArray, uint _size) => throw new Exceptions.OutdatedSdkException("FreeStringArray", "FreeStringArray SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void FreeSyncInfoDelegate(nint _syncInfo); + private static void FreeSyncInfoFallback(nint _syncInfo) => throw new Exceptions.OutdatedSdkException("FreeSyncInfo", "FreeSyncInfo SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void FreeTextLabelArrayDelegate(nint _textLabelArray); private static void FreeTextLabelArrayFallback(nint _textLabelArray) => throw new Exceptions.OutdatedSdkException("FreeTextLabelArray", "FreeTextLabelArray SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate void FreeUInt32ArrayDelegate(nint _uInt32Array); @@ -1665,7 +1669,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public SharedLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 16106728582837015091UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 12612033657027659340UL) Outdated = true; Audio_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 4464042055475980737UL, Audio_GetIDFallback); AudioAttachedOutput_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 17725794901805112189UL, AudioAttachedOutput_GetIDFallback); AudioFilter_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8824535635529306325UL, AudioFilter_GetIDFallback); @@ -1902,6 +1906,7 @@ public SharedLibrary(Dictionary funcTable) FreeResourceArray = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 7782187912558785270UL, FreeResourceArrayFallback); FreeString = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 10646355260907021718UL, FreeStringFallback); FreeStringArray = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 9817201133426969670UL, FreeStringArrayFallback); + FreeSyncInfo = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 756563802353195975UL, FreeSyncInfoFallback); FreeTextLabelArray = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 247876811202044668UL, FreeTextLabelArrayFallback); FreeUInt32Array = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 2025110884526748511UL, FreeUInt32ArrayFallback); FreeUInt8Array = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 15676846424137302955UL, FreeUInt8ArrayFallback); diff --git a/api/AltV.Net.Client/Elements/Data/SyncInfo.cs b/api/AltV.Net.Client/Elements/Data/SyncInfo.cs new file mode 100644 index 000000000..b1d87b462 --- /dev/null +++ b/api/AltV.Net.Client/Elements/Data/SyncInfo.cs @@ -0,0 +1,125 @@ +using System.Runtime.InteropServices; +using AltV.Net.Data; + +namespace AltV.Net.Client.Elements.Data; + + +[StructLayout(LayoutKind.Sequential)] +internal struct SyncInfoInternal +{ + public byte Active; + public uint ReceivedTick; + public uint FullyReceivedTick; + public uint SendTick; + public uint AckedSendTick; + public ushort PropertyCount; + public byte ComponentCount; + public IntPtr PropertiesUpdateTick; + public IntPtr ComponentPropertyIndex; + + public uint[] GetPropertiesUpdateTick() + { + if (PropertyCount == 0) + { + return Array.Empty(); + } + + var value = ComponentPropertyIndex; + var values = new uint[PropertyCount]; + var buffer = new byte[4]; + + for (var i = 0; i < values.Length; i++) + { + values[i] = UIntArray.ReadUInt32(buffer, value); + value += UIntArray.UInt32Size; + } + + return values; + } + + public uint[] GetComponentPropertyIndex() + { + if (ComponentCount == 0) + { + return Array.Empty(); + } + + var value = ComponentPropertyIndex; + var values = new uint[ComponentCount]; + var buffer = new byte[4]; + + for (var i = 0; i < values.Length; i++) + { + values[i] = UIntArray.ReadUInt32(buffer, value); + value += UIntArray.UInt32Size; + } + + return values; + } + + public SyncInfo ToPublic() + { + return new SyncInfo( + Active, + ReceivedTick, + FullyReceivedTick, + SendTick, + AckedSendTick, + PropertyCount, + ComponentCount, + GetPropertiesUpdateTick(), + GetComponentPropertyIndex()); + } +} + +[StructLayout(LayoutKind.Sequential)] +public struct SyncInfo : IEquatable +{ + public byte Active; + public uint ReceivedTick; + public uint FullyReceivedTick; + public uint SendTick; + public uint AckedSendTick; + public ushort PropertyCount; + public byte ComponentCount; + public uint[] PropertiesUpdateTick; + public uint[] ComponentPropertyIndex; + + public SyncInfo(byte active, uint receivedTick, uint fullyReceivedTick, uint sendTick, uint ackedSendTick, ushort propertyCount, byte componentCount, uint[] propertiesUpdateTick, uint[] componentPropertyIndex) + { + Active = active; + ReceivedTick = receivedTick; + FullyReceivedTick = fullyReceivedTick; + SendTick = sendTick; + AckedSendTick = ackedSendTick; + PropertyCount = propertyCount; + ComponentCount = componentCount; + PropertiesUpdateTick = propertiesUpdateTick; + ComponentPropertyIndex = componentPropertyIndex; + } + + public bool Equals(SyncInfo other) + { + return Active == other.Active && ReceivedTick == other.ReceivedTick && FullyReceivedTick == other.FullyReceivedTick && SendTick == other.SendTick && AckedSendTick == other.AckedSendTick && PropertyCount == other.PropertyCount && ComponentCount == other.ComponentCount && PropertiesUpdateTick.Equals(other.PropertiesUpdateTick) && ComponentPropertyIndex.Equals(other.ComponentPropertyIndex); + } + + public override bool Equals(object obj) + { + return obj is SyncInfo other && Equals(other); + } + + public override int GetHashCode() + { + var hashCode = new HashCode(); + hashCode.Add(Active); + hashCode.Add(ReceivedTick); + hashCode.Add(FullyReceivedTick); + hashCode.Add(SendTick); + hashCode.Add(AckedSendTick); + hashCode.Add(PropertyCount); + hashCode.Add(ComponentCount); + hashCode.Add(PropertiesUpdateTick); + hashCode.Add(ComponentPropertyIndex); + return hashCode.ToHashCode(); + } +} \ No newline at end of file diff --git a/api/AltV.Net.Client/Elements/Entities/Entity.cs b/api/AltV.Net.Client/Elements/Entities/Entity.cs index 47beb8a48..1914158d7 100644 --- a/api/AltV.Net.Client/Elements/Entities/Entity.cs +++ b/api/AltV.Net.Client/Elements/Entities/Entity.cs @@ -1,5 +1,6 @@ using System.Runtime.CompilerServices; using System.Runtime.InteropServices; +using AltV.Net.Client.Elements.Data; using AltV.Net.Client.Elements.Interfaces; using AltV.Net.Data; using AltV.Net.Elements.Args; @@ -67,6 +68,26 @@ public uint ScriptId } } + public SyncInfo SyncInfo + { + get + { + unsafe + { + CheckIfEntityExistsOrCached(); + + var syncInfoPtr = IntPtr.Zero; + Core.Library.Client.Entity_GetSyncInfo(EntityNativePointer, &syncInfoPtr); + + var syncInfo = Marshal.PtrToStructure(syncInfoPtr).ToPublic(); + + Core.Library.Shared.FreeSyncInfo(syncInfoPtr); + + return syncInfo; + } + } + } + public bool Spawned => ScriptId != 0; public Position Position diff --git a/api/AltV.Net.Client/Elements/Interfaces/IEntity.cs b/api/AltV.Net.Client/Elements/Interfaces/IEntity.cs index f6ad0e989..9a6f09976 100644 --- a/api/AltV.Net.Client/Elements/Interfaces/IEntity.cs +++ b/api/AltV.Net.Client/Elements/Interfaces/IEntity.cs @@ -1,4 +1,5 @@ -using AltV.Net.Data; +using AltV.Net.Client.Elements.Data; +using AltV.Net.Data; using AltV.Net.Shared.Elements.Entities; namespace AltV.Net.Client.Elements.Interfaces @@ -7,6 +8,7 @@ public interface IEntity : ISharedEntity, IWorldObject { new IPlayer? NetworkOwner { get; } uint ScriptId { get; } + SyncInfo SyncInfo { get; } bool Spawned { get; } new Position Position { get; set; } diff --git a/runtime b/runtime index 810a26d29..d09904bd7 160000 --- a/runtime +++ b/runtime @@ -1 +1 @@ -Subproject commit 810a26d294ce6f98523dcc23c5b0672bc996fc5d +Subproject commit d09904bd76f4e9e3b01fa567325de9beb93c01e9 From e2160bb97ac4850fff69c77b520014d616d71a1c Mon Sep 17 00:00:00 2001 From: doxoh Date: Tue, 9 Jan 2024 17:51:44 +0100 Subject: [PATCH 71/75] fix(client): parse sync info --- api/AltV.Net.Client/Elements/Data/SyncInfo.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/AltV.Net.Client/Elements/Data/SyncInfo.cs b/api/AltV.Net.Client/Elements/Data/SyncInfo.cs index b1d87b462..775d78ad9 100644 --- a/api/AltV.Net.Client/Elements/Data/SyncInfo.cs +++ b/api/AltV.Net.Client/Elements/Data/SyncInfo.cs @@ -24,7 +24,7 @@ public uint[] GetPropertiesUpdateTick() return Array.Empty(); } - var value = ComponentPropertyIndex; + var value = PropertiesUpdateTick; var values = new uint[PropertyCount]; var buffer = new byte[4]; @@ -45,7 +45,7 @@ public uint[] GetComponentPropertyIndex() } var value = ComponentPropertyIndex; - var values = new uint[ComponentCount]; + var values = new uint[ComponentCount - 1]; var buffer = new byte[4]; for (var i = 0; i < values.Length; i++) From 060b9eaa0c053d2d6d4e1a074b5daa18b34f19fd Mon Sep 17 00:00:00 2001 From: doxoh Date: Tue, 9 Jan 2024 18:16:45 +0100 Subject: [PATCH 72/75] fix(client): parse sync info --- api/AltV.Net.Client/Elements/Data/SyncInfo.cs | 53 ++++++------------- runtime | 2 +- 2 files changed, 16 insertions(+), 39 deletions(-) diff --git a/api/AltV.Net.Client/Elements/Data/SyncInfo.cs b/api/AltV.Net.Client/Elements/Data/SyncInfo.cs index 775d78ad9..ee81ab7df 100644 --- a/api/AltV.Net.Client/Elements/Data/SyncInfo.cs +++ b/api/AltV.Net.Client/Elements/Data/SyncInfo.cs @@ -14,45 +14,26 @@ internal struct SyncInfoInternal public uint AckedSendTick; public ushort PropertyCount; public byte ComponentCount; - public IntPtr PropertiesUpdateTick; - public IntPtr ComponentPropertyIndex; + public IntPtr PropertyUpdateCount; + public IntPtr PropertyUpdateTicks; - public uint[] GetPropertiesUpdateTick() - { - if (PropertyCount == 0) - { - return Array.Empty(); - } - - var value = PropertiesUpdateTick; - var values = new uint[PropertyCount]; - var buffer = new byte[4]; - - for (var i = 0; i < values.Length; i++) - { - values[i] = UIntArray.ReadUInt32(buffer, value); - value += UIntArray.UInt32Size; - } - - return values; - } - - public uint[] GetComponentPropertyIndex() + public uint[][] GetPropertyUpdateTicks() { if (ComponentCount == 0) { - return Array.Empty(); + return default; } - var value = ComponentPropertyIndex; - var values = new uint[ComponentCount - 1]; - var buffer = new byte[4]; + var value = PropertyUpdateTicks; + var values = new uint[ComponentCount][]; + + /*var buffer = new byte[4]; for (var i = 0; i < values.Length; i++) { values[i] = UIntArray.ReadUInt32(buffer, value); value += UIntArray.UInt32Size; - } + }*/ return values; } @@ -67,8 +48,7 @@ public SyncInfo ToPublic() AckedSendTick, PropertyCount, ComponentCount, - GetPropertiesUpdateTick(), - GetComponentPropertyIndex()); + GetPropertyUpdateTicks()); } } @@ -82,10 +62,9 @@ public struct SyncInfo : IEquatable public uint AckedSendTick; public ushort PropertyCount; public byte ComponentCount; - public uint[] PropertiesUpdateTick; - public uint[] ComponentPropertyIndex; + public uint[][] PropertyUpdateTicks; - public SyncInfo(byte active, uint receivedTick, uint fullyReceivedTick, uint sendTick, uint ackedSendTick, ushort propertyCount, byte componentCount, uint[] propertiesUpdateTick, uint[] componentPropertyIndex) + public SyncInfo(byte active, uint receivedTick, uint fullyReceivedTick, uint sendTick, uint ackedSendTick, ushort propertyCount, byte componentCount, uint[][] propertyUpdateTicks) { Active = active; ReceivedTick = receivedTick; @@ -94,13 +73,12 @@ public SyncInfo(byte active, uint receivedTick, uint fullyReceivedTick, uint sen AckedSendTick = ackedSendTick; PropertyCount = propertyCount; ComponentCount = componentCount; - PropertiesUpdateTick = propertiesUpdateTick; - ComponentPropertyIndex = componentPropertyIndex; + PropertyUpdateTicks = propertyUpdateTicks; } public bool Equals(SyncInfo other) { - return Active == other.Active && ReceivedTick == other.ReceivedTick && FullyReceivedTick == other.FullyReceivedTick && SendTick == other.SendTick && AckedSendTick == other.AckedSendTick && PropertyCount == other.PropertyCount && ComponentCount == other.ComponentCount && PropertiesUpdateTick.Equals(other.PropertiesUpdateTick) && ComponentPropertyIndex.Equals(other.ComponentPropertyIndex); + return Active == other.Active && ReceivedTick == other.ReceivedTick && FullyReceivedTick == other.FullyReceivedTick && SendTick == other.SendTick && AckedSendTick == other.AckedSendTick && PropertyCount == other.PropertyCount && ComponentCount == other.ComponentCount && PropertyUpdateTicks.Equals(other.PropertyUpdateTicks); } public override bool Equals(object obj) @@ -118,8 +96,7 @@ public override int GetHashCode() hashCode.Add(AckedSendTick); hashCode.Add(PropertyCount); hashCode.Add(ComponentCount); - hashCode.Add(PropertiesUpdateTick); - hashCode.Add(ComponentPropertyIndex); + hashCode.Add(PropertyUpdateTicks); return hashCode.ToHashCode(); } } \ No newline at end of file diff --git a/runtime b/runtime index d09904bd7..20ef36862 160000 --- a/runtime +++ b/runtime @@ -1 +1 @@ -Subproject commit d09904bd76f4e9e3b01fa567325de9beb93c01e9 +Subproject commit 20ef368627b28b70c5b706f83ba3636af897a0f1 From 1279caecdd08ea38978e643214282d024658635f Mon Sep 17 00:00:00 2001 From: doxoh Date: Tue, 9 Jan 2024 18:42:43 +0100 Subject: [PATCH 73/75] fix(client): sync info PropertyUpdateTicks --- api/AltV.Net.Client/Elements/Data/SyncInfo.cs | 40 ++++++++++++++----- 1 file changed, 31 insertions(+), 9 deletions(-) diff --git a/api/AltV.Net.Client/Elements/Data/SyncInfo.cs b/api/AltV.Net.Client/Elements/Data/SyncInfo.cs index ee81ab7df..04cd69063 100644 --- a/api/AltV.Net.Client/Elements/Data/SyncInfo.cs +++ b/api/AltV.Net.Client/Elements/Data/SyncInfo.cs @@ -17,25 +17,47 @@ internal struct SyncInfoInternal public IntPtr PropertyUpdateCount; public IntPtr PropertyUpdateTicks; - public uint[][] GetPropertyUpdateTicks() + private uint[] GetCompPropertySize() + { + var value = PropertyUpdateCount; + var values = new uint[ComponentCount]; + var buffer = new byte[4]; + + for (var i = 0; i < values.Length; i++) + { + values[i] = UIntArray.ReadUInt32(buffer, value); + value += UIntArray.UInt32Size; + } + + return values; + } + + private uint[][] GetPropertyUpdateTicks() { if (ComponentCount == 0) { return default; } - var value = PropertyUpdateTicks; - var values = new uint[ComponentCount][]; + var compPropertySize = GetCompPropertySize(); - /*var buffer = new byte[4]; + uint[][] result = new uint[ComponentCount][]; - for (var i = 0; i < values.Length; i++) + for (var i = 0; i < ComponentCount; i++) { - values[i] = UIntArray.ReadUInt32(buffer, value); - value += UIntArray.UInt32Size; - }*/ + result[i] = new uint[compPropertySize[i]]; - return values; + for (var j = 0; j < compPropertySize[i]; j++) + { + // Calculate the index in the one-dimensional array + var index = i * (int)compPropertySize[i] + j; + + // Use Marshal to read the value at the specified index + result[i][j] = (uint)Marshal.PtrToStructure(PropertyUpdateTicks + index * sizeof(uint), typeof(uint)); + } + } + + return result; } public SyncInfo ToPublic() From 7b47b8d998925f8acbb715713dbd8c87ac798068 Mon Sep 17 00:00:00 2001 From: doxoh Date: Tue, 9 Jan 2024 22:10:37 +0100 Subject: [PATCH 74/75] refactor(server): code cleanup --- .../Elements/Entities/AsyncPlayer.cs | 117 +++++++++++ .../Elements/Entities/AsyncWorldObject.cs | 27 +++ api/AltV.Net/Elements/Entities/Entity.cs | 2 + api/AltV.Net/Elements/Entities/IPlayer.cs | 186 ++---------------- .../Elements/Entities/IWorldObject.cs | 18 +- api/AltV.Net/Elements/Entities/Player.cs | 99 +++++++++- api/AltV.Net/Elements/Entities/WorldObject.cs | 15 ++ 7 files changed, 279 insertions(+), 185 deletions(-) diff --git a/api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs b/api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs index ffbe7c38d..80054f55a 100644 --- a/api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs +++ b/api/AltV.Net.Async/Elements/Entities/AsyncPlayer.cs @@ -1,10 +1,12 @@ using System; using System.Diagnostics.CodeAnalysis; +using System.Numerics; using System.Runtime.InteropServices; using System.Threading.Tasks; using AltV.Net.Data; using AltV.Net.Elements.Args; using AltV.Net.Elements.Entities; +using AltV.Net.Enums; using AltV.Net.Native; using AltV.Net.Shared.Elements.Entities; using AltV.Net.Shared.Utils; @@ -615,6 +617,15 @@ public void SetWeather(uint weather) } } + public void SetWeather(WeatherType weatherType) + { + lock (Player) + { + if (!AsyncContext.CheckIfExistsNullable(Player)) return; + Player.SetWeather(weatherType); + } + } + public void GiveWeapon(uint weapon, int ammo, bool selectWeapon) { lock (Player) @@ -624,6 +635,15 @@ public void GiveWeapon(uint weapon, int ammo, bool selectWeapon) } } + public void GiveWeapon(WeaponModel weaponModel, int ammo, bool selectWeapon) + { + lock (Player) + { + if (!AsyncContext.CheckIfExistsNullable(Player)) return; + Player.GiveWeapon(weaponModel, ammo, selectWeapon); + } + } + public bool RemoveWeapon(uint weapon) { lock (Player) @@ -633,6 +653,15 @@ public bool RemoveWeapon(uint weapon) } } + public bool RemoveWeapon(WeaponModel weaponModel) + { + lock (Player) + { + if (!AsyncContext.CheckIfExistsNullable(Player)) return false; + return Player.RemoveWeapon(weaponModel); + } + } + public void RemoveAllWeapons(bool removeAllAmmo) { lock (Player) @@ -651,6 +680,15 @@ public bool HasWeapon(uint weapon) } } + public bool HasWeapon(WeaponModel weapon) + { + lock (Player) + { + if (!AsyncContext.CheckIfExistsNullable(Player)) return default; + return Player.HasWeapon(weapon); + } + } + public void Kick(string reason) { lock (Player) @@ -760,6 +798,15 @@ public void AddWeaponComponent(uint weapon, uint weaponComponent) } } + public void AddWeaponComponent(WeaponModel weaponModel, uint weaponComponent) + { + lock (Player) + { + if (!AsyncContext.CheckIfExistsNullable(Player)) return; + Player.AddWeaponComponent(weaponModel, weaponComponent); + } + } + public void RemoveWeaponComponent(uint weapon, uint weaponComponent) { lock (Player) @@ -769,6 +816,15 @@ public void RemoveWeaponComponent(uint weapon, uint weaponComponent) } } + public void RemoveWeaponComponent(WeaponModel weaponModel, uint weaponComponent) + { + lock (Player) + { + if (!AsyncContext.CheckIfExistsNullable(Player)) return; + Player.RemoveWeaponComponent(weaponModel, weaponComponent); + } + } + public bool HasWeaponComponent(uint weapon, uint weaponComponent) { lock (Player) @@ -778,6 +834,15 @@ public bool HasWeaponComponent(uint weapon, uint weaponComponent) } } + public bool HasWeaponComponent(WeaponModel weapon, uint weaponComponent) + { + lock (Player) + { + if (!AsyncContext.CheckIfExistsNullable(Player)) return false; + return Player.HasWeaponComponent(weapon, weaponComponent); + } + } + public void GetCurrentWeaponComponents(out uint[] weaponComponents) { lock (Player) @@ -813,6 +878,15 @@ public void SetWeaponTintIndex(uint weapon, byte tintIndex) } } + public void SetWeaponTintIndex(WeaponModel weaponModel, byte tintIndex) + { + lock (Player) + { + if (!AsyncContext.CheckIfExistsNullable(Player)) return; + Player.SetWeaponTintIndex(weaponModel, tintIndex); + } + } + public byte GetWeaponTintIndex(uint weapon) { lock (Player) @@ -822,6 +896,15 @@ public byte GetWeaponTintIndex(uint weapon) } } + public byte GetWeaponTintIndex(WeaponModel weapon) + { + lock (Player) + { + if (!AsyncContext.CheckIfExistsNullable(Player)) return default; + return Player.GetWeaponTintIndex(weapon); + } + } + public byte GetCurrentWeaponTintIndex() { lock (Player) @@ -1275,6 +1358,31 @@ public void GetLocalMetaData(string key, out MValueConst value) } } + public bool GetLocalMetaData(string key, out T result) + { + lock (Player) + { + if (!AsyncContext.CheckIfExistsNullable(Player)) + { + result = default; + return false; + } + return Player.GetLocalMetaData(key, out result); + } + } + + public void SetLocalMetaData(string key, object value) + { + lock (Player) + { + if (!AsyncContext.CheckIfExistsNullable(Player)) + { + return; + } + Player.SetLocalMetaData(key, value); + } + } + public void SetLocalMetaData(string key, in MValueConst value) { lock (Player) @@ -1571,6 +1679,15 @@ public string BloodDamage } } + public Vector3 GetForwardVector() + { + lock (Player) + { + if (!AsyncContext.CheckIfExistsOrCachedNullable(Player)) return default; + return Player.GetForwardVector(); + } + } + [Obsolete("Use new async API instead")] public IPlayer ToAsync(IAsyncContext asyncContext) { diff --git a/api/AltV.Net.Async/Elements/Entities/AsyncWorldObject.cs b/api/AltV.Net.Async/Elements/Entities/AsyncWorldObject.cs index c4b113680..95305856e 100644 --- a/api/AltV.Net.Async/Elements/Entities/AsyncWorldObject.cs +++ b/api/AltV.Net.Async/Elements/Entities/AsyncWorldObject.cs @@ -53,5 +53,32 @@ public AsyncWorldObject(IWorldObject worldObject, IAsyncContext asyncContext) : { WorldObject = worldObject; } + + public void SetPosition((float X, float Y, float Z) position) + { + lock (WorldObject) + { + if (!AsyncContext.CheckIfExistsOrCachedNullable(WorldObject)) return; + WorldObject.SetPosition(position); + } + } + + public void SetPosition(float x, float y, float z) + { + lock (WorldObject) + { + if (!AsyncContext.CheckIfExistsOrCachedNullable(WorldObject)) return; + WorldObject.SetPosition(x, y, z); + } + } + + public (float X, float Y, float Z) GetPosition() + { + lock (WorldObject) + { + if (!AsyncContext.CheckIfExistsOrCachedNullable(WorldObject)) return default; + return WorldObject.GetPosition(); + } + } } } \ No newline at end of file diff --git a/api/AltV.Net/Elements/Entities/Entity.cs b/api/AltV.Net/Elements/Entities/Entity.cs index b0351a9e2..db06c7f0f 100644 --- a/api/AltV.Net/Elements/Entities/Entity.cs +++ b/api/AltV.Net/Elements/Entities/Entity.cs @@ -145,6 +145,7 @@ public void SetStreamSyncedMetaData(Dictionary metaData) public void SetStreamSyncedMetaData(string key, in MValueConst value) { + CheckIfEntityExists(); unsafe { var stringPtr = MemoryUtils.StringToHGlobalUtf8(key); @@ -155,6 +156,7 @@ public void SetStreamSyncedMetaData(string key, in MValueConst value) public void GetStreamSyncedMetaData(string key, out MValueConst value) { + CheckIfEntityExistsOrCached(); unsafe { var stringPtr = MemoryUtils.StringToHGlobalUtf8(key); diff --git a/api/AltV.Net/Elements/Entities/IPlayer.cs b/api/AltV.Net/Elements/Entities/IPlayer.cs index abf2b21c2..4d460ada8 100644 --- a/api/AltV.Net/Elements/Entities/IPlayer.cs +++ b/api/AltV.Net/Elements/Entities/IPlayer.cs @@ -1,6 +1,5 @@ using System; using System.Numerics; -using System.Threading.Tasks; using AltV.Net.Data; using AltV.Net.Elements.Args; using AltV.Net.Enums; @@ -118,12 +117,16 @@ public interface IPlayer : ISharedPlayer, IEntity void SetDateTime(int day, int month, int year, int hour, int minute, int second); + void SetDateTime(DateTime dateTime); + /// /// Sets the current weather for the player /// /// void SetWeather(uint weather); + void SetWeather(WeatherType weatherType); + /// /// Gives the player a weapon, ammo and if it is active /// @@ -132,18 +135,24 @@ void SetDateTime(int day, int month, int year, int hour, /// True - Places into hand void GiveWeapon(uint weapon, int ammo, bool selectWeapon); + void GiveWeapon(WeaponModel weaponModel, int ammo, bool selectWeapon); + + /// /// Removes the weapon by hash /// /// bool RemoveWeapon(uint weapon); + bool RemoveWeapon(WeaponModel weaponModel); + /// /// Removes all player weapons /// void RemoveAllWeapons(bool removeAllAmmo); bool HasWeapon(uint weapon); + bool HasWeapon(WeaponModel weapon); /// /// Kicks the player with reason @@ -176,6 +185,8 @@ void SetDateTime(int day, int month, int year, int hour, /// Weapon Component hash void AddWeaponComponent(uint weapon, uint weaponComponent); + void AddWeaponComponent(WeaponModel weaponModel, uint weaponComponent); + /// /// Removes a weapon component from a weapon /// @@ -183,6 +194,8 @@ void SetDateTime(int day, int month, int year, int hour, /// Weapon Component hash void RemoveWeaponComponent(uint weapon, uint weaponComponent); + void RemoveWeaponComponent(WeaponModel weaponModel, uint weaponComponent); + /// /// Checks if a weapon has a component /// @@ -190,6 +203,7 @@ void SetDateTime(int day, int month, int year, int hour, /// Weapon Component hash /// bool HasWeaponComponent(uint weapon, uint weaponComponent); + bool HasWeaponComponent(WeaponModel weapon, uint weaponComponent); /// /// Sets the weapon tint to a weapon @@ -198,11 +212,14 @@ void SetDateTime(int day, int month, int year, int hour, /// tintIndex void SetWeaponTintIndex(uint weapon, byte tintIndex); + void SetWeaponTintIndex(WeaponModel weaponModel, byte tintIndex); + /// /// Gets the weapon tint of a weapon /// /// Weapon hash byte GetWeaponTintIndex(uint weapon); + byte GetWeaponTintIndex(WeaponModel weapon); /// /// Returns weapon tint of current weapon @@ -428,7 +445,8 @@ void SetDateTime(int day, int month, int year, int hour, bool SetEyeColor(ushort eyeColor); void GetLocalMetaData(string key, out MValueConst value); - + bool GetLocalMetaData(string key, out T result); + void SetLocalMetaData(string key, object value); void SetLocalMetaData(string key, in MValueConst value); bool HasLocalMetaData(string key); @@ -472,169 +490,7 @@ void PlayAnimation(string animDict, string animName, float blendInSpeed, float b CloudAuthResult CloudAuthResult { get; } string BloodDamage { get; set; } - } - - public static class PlayerExtensions - { - /// - /// Sets the players current Date and Time - /// - /// The player - /// The DateTime object - public static void SetDateTime(this IPlayer player, DateTime dateTime) => player.SetDateTime(dateTime.Day - 1, - dateTime.Month - 1, dateTime.Year, dateTime.Hour, dateTime.Minute, dateTime.Second); - - /// - /// Sets the players current weather - /// - /// The Player - /// The weather type - public static void SetWeather(this IPlayer player, WeatherType weatherType) => - player.SetWeather((uint) weatherType); - - /// - /// Adds a weapon component to model - /// - /// The Player - /// The Weapon - /// The Component - public static void AddWeaponComponent(this IPlayer player, WeaponModel weaponModel, uint weaponComponent) => - player.AddWeaponComponent((uint) weaponModel, weaponComponent); - - /// - /// Removes a weapon component from model - /// - /// The player - /// The weapon - /// The component to be removed - public static void RemoveWeaponComponent(this IPlayer player, WeaponModel weaponModel, uint weaponComponent) => - player.RemoveWeaponComponent((uint) weaponModel, weaponComponent); - - /// - /// Sets the weapon tint to a weapon - /// - /// The player - /// The weapon - /// The tint index - public static void SetWeaponTintIndex(this IPlayer player, WeaponModel weaponModel, byte tintIndex) => - player.SetWeaponTintIndex((uint) weaponModel, tintIndex); - /// - /// Gives player a weapon - /// - /// The player - /// The weapon - /// The amount of ammo - /// If the weapon is selected automatically - public static void GiveWeapon(this IPlayer player, WeaponModel weaponModel, int ammo, bool selectWeapon) => - player.GiveWeapon((uint) weaponModel, ammo, selectWeapon); - - /// - /// Removes the specific weapon from the player - /// - /// The player - /// The weapon to remove - public static void RemoveWeapon(this IPlayer player, WeaponModel weaponModel) => - player.RemoveWeapon((uint) weaponModel); - - /// - /// Returns the forward vector of the player. - /// - /// - /// - public static Vector3 GetForwardVector(this IPlayer player) - { - var z = player.Rotation.Yaw * (Math.PI / 180.0); - var x = player.Rotation.Roll * (Math.PI / 180.0); - var num = Math.Abs(Math.Cos(x)); - - return new Vector3( - (float) (-Math.Sin(z) * num), - (float) (Math.Cos(z) * num), - (float) Math.Sin(x) - ); - } - - public static void SetLocalMetaData(this IPlayer player, string key, object value) - { - player.CheckIfEntityExists(); - Alt.Core.CreateMValue(out var mValue, value); - player.SetLocalMetaData(key, in mValue); - mValue.Dispose(); - } - - public static bool GetLocalMetaData(this IPlayer player, string key, out int result) - { - player.CheckIfEntityExistsOrCached(); - player.GetLocalMetaData(key, out MValueConst mValue); - using (mValue) - { - if (mValue.type != MValueConst.Type.Int) - { - result = default; - return false; - } - - result = (int) mValue.GetInt(); - } - - return true; - } - - public static bool GetLocalMetaData(this IPlayer player, string key, out uint result) - { - player.CheckIfEntityExistsOrCached(); - player.GetLocalMetaData(key, out MValueConst mValue); - using (mValue) - { - if (mValue.type != MValueConst.Type.Uint) - { - result = default; - return false; - } - - result = (uint) mValue.GetUint(); - } - - return true; - } - - public static bool GetLocalMetaData(this IPlayer player, string key, out float result) - { - player.CheckIfEntityExistsOrCached(); - player.GetLocalMetaData(key, out MValueConst mValue); - using (mValue) - { - if (mValue.type != MValueConst.Type.Double) - { - result = default; - return false; - } - - result = (float) mValue.GetDouble(); - } - - return true; - } - - public static bool GetLocalMetaData(this IPlayer player, string key, out T result) - { - player.CheckIfEntityExistsOrCached(); - player.GetLocalMetaData(key, out MValueConst mValue); - using (mValue) - { - - try - { - result = (T)Convert.ChangeType(mValue.ToObject(), typeof(T)); - return true; - } - catch - { - result = default; - return false; - } - } - } + Vector3 GetForwardVector(); } } \ No newline at end of file diff --git a/api/AltV.Net/Elements/Entities/IWorldObject.cs b/api/AltV.Net/Elements/Entities/IWorldObject.cs index d56cb5562..3b70165eb 100644 --- a/api/AltV.Net/Elements/Entities/IWorldObject.cs +++ b/api/AltV.Net/Elements/Entities/IWorldObject.cs @@ -1,25 +1,13 @@ -using System; -using AltV.Net.Data; using AltV.Net.Shared.Elements.Entities; namespace AltV.Net.Elements.Entities { public interface IWorldObject : ISharedWorldObject, IBaseObject { - } - - public static class WorldObjectExtensions - { - public static void SetPosition(this IWorldObject worldObject, (float X, float Y, float Z) position) => - worldObject.Position = new Position(position.X, position.Y, position.Z); + void SetPosition((float X, float Y, float Z) position); - public static void SetPosition(this IWorldObject worldObject, float x, float y, float z) => - worldObject.Position = new Position(x, y, z); + void SetPosition(float x, float y, float z); - public static (float X, float Y, float Z) GetPosition(this IWorldObject worldObject) - { - var position = worldObject.Position; - return (position.X, position.Y, position.Z); - } + (float X, float Y, float Z) GetPosition(); } } \ No newline at end of file diff --git a/api/AltV.Net/Elements/Entities/Player.cs b/api/AltV.Net/Elements/Entities/Player.cs index 8d5d97e28..dee69418d 100644 --- a/api/AltV.Net/Elements/Entities/Player.cs +++ b/api/AltV.Net/Elements/Entities/Player.cs @@ -1,13 +1,9 @@ using System; using System.Numerics; using System.Runtime.InteropServices; -using System.Threading; -using System.Threading.Tasks; -using AltV.Net.CApi.ClientEvents; -using AltV.Net.CApi.ServerEvents; using AltV.Net.Data; using AltV.Net.Elements.Args; -using AltV.Net.Native; +using AltV.Net.Enums; using AltV.Net.Shared.Elements.Entities; using AltV.Net.Shared.Utils; @@ -80,8 +76,29 @@ public string Ip } } + public bool GetLocalMetaData(string key, out T result) + { + CheckIfEntityExistsOrCached(); + GetLocalMetaData(key, out MValueConst mValue); + using (mValue) + { + + try + { + result = (T)Convert.ChangeType(mValue.ToObject(), typeof(T)); + return true; + } + catch + { + result = default; + return false; + } + } + } + public void GetLocalMetaData(string key, out MValueConst value) { + CheckIfEntityExistsOrCached(); unsafe { var stringPtr = MemoryUtils.StringToHGlobalUtf8(key); @@ -90,8 +107,16 @@ public void GetLocalMetaData(string key, out MValueConst value) } } + public void SetLocalMetaData(string key, object value) + { + Alt.Core.CreateMValue(out var mValue, value); + SetLocalMetaData(key, in mValue); + mValue.Dispose(); + } + public void SetLocalMetaData(string key, in MValueConst value) { + CheckIfEntityExistsOrCached(); unsafe { var stringPtr = MemoryUtils.StringToHGlobalUtf8(key); @@ -436,6 +461,19 @@ public string BloodDamage } } + public Vector3 GetForwardVector() + { + var z = Rotation.Yaw * (Math.PI / 180.0); + var x = Rotation.Roll * (Math.PI / 180.0); + var num = Math.Abs(Math.Cos(x)); + + return new Vector3( + (float) (-Math.Sin(z) * num), + (float) (Math.Cos(z) * num), + (float) Math.Sin(x) + ); + } + public bool IsConnected { get @@ -984,6 +1022,12 @@ public void SetDateTime(int day, int month, int year, int hour, int minute, int } } + public void SetDateTime(DateTime dateTime) + { + SetDateTime(dateTime.Day - 1, dateTime.Month - 1, dateTime.Year, dateTime.Hour, dateTime.Minute, + dateTime.Second); + } + public void SetWeather(uint weather) { unsafe @@ -993,6 +1037,11 @@ public void SetWeather(uint weather) } } + public void SetWeather(WeatherType weatherType) + { + SetWeather((uint)weatherType); + } + public void GiveWeapon(uint weapon, int ammo, bool selectWeapon) { unsafe @@ -1002,6 +1051,11 @@ public void GiveWeapon(uint weapon, int ammo, bool selectWeapon) } } + public void GiveWeapon(WeaponModel weaponModel, int ammo, bool selectWeapon) + { + GiveWeapon((uint)weaponModel, ammo, selectWeapon); + } + public bool RemoveWeapon(uint weapon) { unsafe @@ -1011,6 +1065,11 @@ public bool RemoveWeapon(uint weapon) } } + public bool RemoveWeapon(WeaponModel weaponModel) + { + return RemoveWeapon((uint)weaponModel); + } + public void RemoveAllWeapons(bool removeAllAmmo) { unsafe @@ -1029,6 +1088,11 @@ public bool HasWeapon(uint weapon) } } + public bool HasWeapon(WeaponModel weapon) + { + return HasWeapon((uint)weapon); + } + public void AddWeaponComponent(uint weapon, uint weaponComponent) { unsafe @@ -1038,6 +1102,11 @@ public void AddWeaponComponent(uint weapon, uint weaponComponent) } } + public void AddWeaponComponent(WeaponModel weaponModel, uint weaponComponent) + { + AddWeaponComponent((uint)weaponModel, weaponComponent); + } + public void RemoveWeaponComponent(uint weapon, uint weaponComponent) { unsafe @@ -1047,6 +1116,11 @@ public void RemoveWeaponComponent(uint weapon, uint weaponComponent) } } + public void RemoveWeaponComponent(WeaponModel weaponModel, uint weaponComponent) + { + RemoveWeaponComponent((uint)weaponModel, weaponComponent); + } + public bool HasWeaponComponent(uint weapon, uint weaponComponent) { unsafe @@ -1056,6 +1130,11 @@ public bool HasWeaponComponent(uint weapon, uint weaponComponent) } } + public bool HasWeaponComponent(WeaponModel weapon, uint weaponComponent) + { + return HasWeaponComponent((uint)weapon, weaponComponent); + } + public void GetCurrentWeaponComponents(out uint[] weaponComponents) { unsafe @@ -1090,6 +1169,11 @@ public void SetWeaponTintIndex(uint weapon, byte tintIndex) } } + public void SetWeaponTintIndex(WeaponModel weaponModel, byte tintIndex) + { + SetWeaponTintIndex((uint)weaponModel, tintIndex); + } + public byte GetWeaponTintIndex(uint weapon) { unsafe @@ -1099,6 +1183,11 @@ public byte GetWeaponTintIndex(uint weapon) } } + public byte GetWeaponTintIndex(WeaponModel weapon) + { + return GetWeaponTintIndex((uint)weapon); + } + public byte GetCurrentWeaponTintIndex() { unsafe diff --git a/api/AltV.Net/Elements/Entities/WorldObject.cs b/api/AltV.Net/Elements/Entities/WorldObject.cs index b33660457..f4ff2f134 100644 --- a/api/AltV.Net/Elements/Entities/WorldObject.cs +++ b/api/AltV.Net/Elements/Entities/WorldObject.cs @@ -81,5 +81,20 @@ public override void SetCached(IntPtr cachedWorldObject) this.WorldObjectNativePointer = cachedWorldObject; base.SetCached(GetBaseObjectPointer(Core, cachedWorldObject)); } + + public void SetPosition((float X, float Y, float Z) position) + { + Position = new Position(position.X, position.Y, position.Z); + } + + public void SetPosition(float x, float y, float z) + { + Position = new Position(x, y, z); + } + + public (float X, float Y, float Z) GetPosition() + { + return (Position.X, Position.Y, Position.Z); + } } } \ No newline at end of file From 09c0b120675c22da8f67e45aaea8e5231a650200 Mon Sep 17 00:00:00 2001 From: doxoh Date: Fri, 12 Jan 2024 14:43:16 +0100 Subject: [PATCH 75/75] feat(client): server time getter --- api/AltV.Net.CApi/Libraries/ClientLibrary.cs | 9 +++++++-- api/AltV.Net.CApi/Libraries/ServerLibrary.cs | 4 ++-- api/AltV.Net.CApi/Libraries/SharedLibrary.cs | 4 ++-- api/AltV.Net.Client/Alt.Globals.cs | 2 ++ api/AltV.Net.Client/Core.cs | 11 +++++++++++ api/AltV.Net.Client/ICore.cs | 2 ++ runtime | 2 +- 7 files changed, 27 insertions(+), 7 deletions(-) diff --git a/api/AltV.Net.CApi/Libraries/ClientLibrary.cs b/api/AltV.Net.CApi/Libraries/ClientLibrary.cs index 40896b389..87282b950 100644 --- a/api/AltV.Net.CApi/Libraries/ClientLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/ClientLibrary.cs @@ -168,6 +168,7 @@ public unsafe interface IClientLibrary public delegate* unmanaged[Cdecl] Core_GetScreenResolution { get; } public delegate* unmanaged[Cdecl] Core_GetServerIp { get; } public delegate* unmanaged[Cdecl] Core_GetServerPort { get; } + public delegate* unmanaged[Cdecl] Core_GetServerTime { get; } public delegate* unmanaged[Cdecl] Core_GetStatBool { get; } public delegate* unmanaged[Cdecl] Core_GetStatData { get; } public delegate* unmanaged[Cdecl] Core_GetStatFloat { get; } @@ -901,7 +902,7 @@ public unsafe interface IClientLibrary public unsafe class ClientLibrary : IClientLibrary { - public readonly uint Methods = 1769; + public readonly uint Methods = 1770; public delegate* unmanaged[Cdecl] Audio_AddOutput { get; } public delegate* unmanaged[Cdecl] Audio_GetBaseObject { get; } public delegate* unmanaged[Cdecl] Audio_GetCurrentTime { get; } @@ -1059,6 +1060,7 @@ public unsafe class ClientLibrary : IClientLibrary public delegate* unmanaged[Cdecl] Core_GetScreenResolution { get; } public delegate* unmanaged[Cdecl] Core_GetServerIp { get; } public delegate* unmanaged[Cdecl] Core_GetServerPort { get; } + public delegate* unmanaged[Cdecl] Core_GetServerTime { get; } public delegate* unmanaged[Cdecl] Core_GetStatBool { get; } public delegate* unmanaged[Cdecl] Core_GetStatData { get; } public delegate* unmanaged[Cdecl] Core_GetStatFloat { get; } @@ -2102,6 +2104,8 @@ public unsafe class ClientLibrary : IClientLibrary private static nint Core_GetServerIpFallback(nint _core, int* _size) => throw new Exceptions.OutdatedSdkException("Core_GetServerIp", "Core_GetServerIp SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate ushort Core_GetServerPortDelegate(nint _core); private static ushort Core_GetServerPortFallback(nint _core) => throw new Exceptions.OutdatedSdkException("Core_GetServerPort", "Core_GetServerPort SDK method is outdated. Please update your module nuget"); + [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate ulong Core_GetServerTimeDelegate(nint _core); + private static ulong Core_GetServerTimeFallback(nint _core) => throw new Exceptions.OutdatedSdkException("Core_GetServerTime", "Core_GetServerTime SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate byte Core_GetStatBoolDelegate(nint _core, nint _stat); private static byte Core_GetStatBoolFallback(nint _core, nint _stat) => throw new Exceptions.OutdatedSdkException("Core_GetStatBool", "Core_GetStatBool SDK method is outdated. Please update your module nuget"); [UnmanagedFunctionPointer(CallingConvention.Cdecl)] private delegate nint Core_GetStatDataDelegate(nint _core, nint _stat); @@ -3569,7 +3573,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public ClientLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 12612033657027659340UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 18234026019486245283UL) Outdated = true; Audio_AddOutput = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 9914412815391408844UL, Audio_AddOutputFallback); Audio_GetBaseObject = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 6330360502401226894UL, Audio_GetBaseObjectFallback); Audio_GetCurrentTime = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 2944324482134975819UL, Audio_GetCurrentTimeFallback); @@ -3727,6 +3731,7 @@ public ClientLibrary(Dictionary funcTable) Core_GetScreenResolution = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 16078537130538515891UL, Core_GetScreenResolutionFallback); Core_GetServerIp = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 1389091625205062844UL, Core_GetServerIpFallback); Core_GetServerPort = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 14148467334937601992UL, Core_GetServerPortFallback); + Core_GetServerTime = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8910809418132103019UL, Core_GetServerTimeFallback); Core_GetStatBool = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 4132285709171755304UL, Core_GetStatBoolFallback); Core_GetStatData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 311843349031918009UL, Core_GetStatDataFallback); Core_GetStatFloat = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 175428875067811253UL, Core_GetStatFloatFallback); diff --git a/api/AltV.Net.CApi/Libraries/ServerLibrary.cs b/api/AltV.Net.CApi/Libraries/ServerLibrary.cs index fd72fe52d..40111dcaa 100644 --- a/api/AltV.Net.CApi/Libraries/ServerLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/ServerLibrary.cs @@ -485,7 +485,7 @@ public unsafe interface IServerLibrary public unsafe class ServerLibrary : IServerLibrary { - public readonly uint Methods = 1769; + public readonly uint Methods = 1770; public delegate* unmanaged[Cdecl] BaseObject_DeleteSyncedMetaData { get; } public delegate* unmanaged[Cdecl] BaseObject_SetMultipleSyncedMetaData { get; } public delegate* unmanaged[Cdecl] BaseObject_SetSyncedMetaData { get; } @@ -1905,7 +1905,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public ServerLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 12612033657027659340UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 18234026019486245283UL) Outdated = true; BaseObject_DeleteSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8228424877092269355UL, BaseObject_DeleteSyncedMetaDataFallback); BaseObject_SetMultipleSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 1390762125822890831UL, BaseObject_SetMultipleSyncedMetaDataFallback); BaseObject_SetSyncedMetaData = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8002999088966424231UL, BaseObject_SetSyncedMetaDataFallback); diff --git a/api/AltV.Net.CApi/Libraries/SharedLibrary.cs b/api/AltV.Net.CApi/Libraries/SharedLibrary.cs index e1292af38..8e8745ae9 100644 --- a/api/AltV.Net.CApi/Libraries/SharedLibrary.cs +++ b/api/AltV.Net.CApi/Libraries/SharedLibrary.cs @@ -426,7 +426,7 @@ public unsafe interface ISharedLibrary public unsafe class SharedLibrary : ISharedLibrary { - public readonly uint Methods = 1769; + public readonly uint Methods = 1770; public delegate* unmanaged[Cdecl] Audio_GetID { get; } public delegate* unmanaged[Cdecl] AudioAttachedOutput_GetID { get; } public delegate* unmanaged[Cdecl] AudioFilter_GetID { get; } @@ -1669,7 +1669,7 @@ private IntPtr GetUnmanagedPtr(IDictionary funcTable, ulong ha public SharedLibrary(Dictionary funcTable) { if (!funcTable.TryGetValue(0, out var capiHash)) Outdated = true; - else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 12612033657027659340UL) Outdated = true; + else if (capiHash == IntPtr.Zero || *(ulong*)capiHash != 18234026019486245283UL) Outdated = true; Audio_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 4464042055475980737UL, Audio_GetIDFallback); AudioAttachedOutput_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 17725794901805112189UL, AudioAttachedOutput_GetIDFallback); AudioFilter_GetID = (delegate* unmanaged[Cdecl]) GetUnmanagedPtr(funcTable, 8824535635529306325UL, AudioFilter_GetIDFallback); diff --git a/api/AltV.Net.Client/Alt.Globals.cs b/api/AltV.Net.Client/Alt.Globals.cs index 583bf43ed..5da431870 100644 --- a/api/AltV.Net.Client/Alt.Globals.cs +++ b/api/AltV.Net.Client/Alt.Globals.cs @@ -118,5 +118,7 @@ public static partial class Alt public static bool RmlControlsEnabled { get => Core.RmlControlsEnabled; set => Core.RmlControlsEnabled = value; } public static bool VoiceControlsEnabled { get => Core.VoiceControlsEnabled; set => Core.VoiceControlsEnabled = value; } public static int MsPerGameMinute { get => Core.MsPerGameMinute; set => Core.MsPerGameMinute = value; } + + public static ulong ServerTime => Core.ServerTime; } } \ No newline at end of file diff --git a/api/AltV.Net.Client/Core.cs b/api/AltV.Net.Client/Core.cs index 0f571b97e..7e25e6737 100644 --- a/api/AltV.Net.Client/Core.cs +++ b/api/AltV.Net.Client/Core.cs @@ -732,6 +732,17 @@ public void UpdateClipContext(Dictionary context) } } + public ulong ServerTime + { + get + { + unsafe + { + return this.Library.Client.Core_GetServerTime(NativePointer); + } + } + } + #endregion #region TriggerServerEvent diff --git a/api/AltV.Net.Client/ICore.cs b/api/AltV.Net.Client/ICore.cs index 7029d7ec3..277a2303f 100644 --- a/api/AltV.Net.Client/ICore.cs +++ b/api/AltV.Net.Client/ICore.cs @@ -229,5 +229,7 @@ ILocalObject CreateLocalObject(uint modelHash, Position position, Rotation rotat IAudioFilter GetVoiceFilter(uint playerRemoteId); void UpdateClipContext(Dictionary context); + + ulong ServerTime { get; } } } \ No newline at end of file diff --git a/runtime b/runtime index 20ef36862..4201e8b99 160000 --- a/runtime +++ b/runtime @@ -1 +1 @@ -Subproject commit 20ef368627b28b70c5b706f83ba3636af897a0f1 +Subproject commit 4201e8b9979d4726c9e7602b33e1d8214d10c6ca