~ruther/NosSmooth.Local

303fcf241897ecbf8e0ec1a2612f92d179c1dce1 — Rutherther 2 years ago 05dfa40
chore: update dependencies
28 files changed, 96 insertions(+), 100 deletions(-)

M src/Core/NosSmooth.LocalBinding/Extensions/MemoryExtensions.cs
M src/Core/NosSmooth.LocalBinding/NosBindingManager.cs
M src/Core/NosSmooth.LocalBinding/NosBrowserManager.cs
M src/Core/NosSmooth.LocalBinding/NosSmooth.LocalBinding.csproj
M src/Core/NosSmooth.LocalBinding/Objects/NetworkBinding.cs
M src/Core/NosSmooth.LocalBinding/Objects/NostaleStringA.cs
M src/Core/NosSmooth.LocalBinding/Objects/PetManagerBinding.cs
M src/Core/NosSmooth.LocalBinding/Objects/PlayerManagerBinding.cs
M src/Core/NosSmooth.LocalBinding/Objects/UnitManagerBinding.cs
M src/Core/NosSmooth.LocalBinding/Structs/ControlManager.cs
M src/Core/NosSmooth.LocalBinding/Structs/MapBaseObj.cs
M src/Core/NosSmooth.LocalBinding/Structs/MapNpcObj.cs
M src/Core/NosSmooth.LocalBinding/Structs/MapPlayerObj.cs
M src/Core/NosSmooth.LocalBinding/Structs/NostaleList.cs
M src/Core/NosSmooth.LocalBinding/Structs/NostaleObject.cs
M src/Core/NosSmooth.LocalBinding/Structs/PetManager.cs
M src/Core/NosSmooth.LocalBinding/Structs/PetManagerList.cs
M src/Core/NosSmooth.LocalBinding/Structs/PlayerManager.cs
M src/Core/NosSmooth.LocalBinding/Structs/SceneManager.cs
M src/Core/NosSmooth.LocalClient/NosSmooth.LocalClient.csproj
M src/Inject/NosSmooth.Injector.CLI/NosSmooth.Injector.CLI.csproj
M src/Inject/NosSmooth.Injector/ManagedMemoryAllocation.cs
M src/Inject/NosSmooth.Injector/NosInjector.cs
M src/Inject/NosSmooth.Injector/NosSmooth.Injector.csproj
M src/Samples/External/ExternalBrowser/ExternalBrowser.csproj
M src/Samples/LowLevel/InterceptNameChanger/InterceptNameChanger.csproj
M src/Samples/LowLevel/SimpleChat/SimpleChat.csproj
M src/Samples/LowLevel/WalkCommands/WalkCommands.csproj
M src/Core/NosSmooth.LocalBinding/Extensions/MemoryExtensions.cs => src/Core/NosSmooth.LocalBinding/Extensions/MemoryExtensions.cs +3 -3
@@ 20,14 20,14 @@ public static class MemoryExtensions
    /// <param name="staticAddress">The static address to follow offsets from.</param>
    /// <param name="offsets">The offsets, first offset is the 0-th element.</param>
    /// <returns>A final address.</returns>
    public static IntPtr FollowStaticAddressOffsets(this IMemory memory, int staticAddress, int[] offsets)
    public static nuint FollowStaticAddressOffsets(this IMemory memory, int staticAddress, int[] offsets)
    {
        int address = staticAddress;
        foreach (var offset in offsets)
        {
            memory.SafeRead((IntPtr)(address + offset), out address);
            memory.SafeRead((nuint)(address + offset), out address);
        }

        return (IntPtr)address;
        return (nuint)address;
    }
}
\ No newline at end of file

M src/Core/NosSmooth.LocalBinding/NosBindingManager.cs => src/Core/NosSmooth.LocalBinding/NosBindingManager.cs +1 -1
@@ 350,7 350,7 @@ public class NosBindingManager : IDisposable
        bool enableHook = true
    )
    {
        var walkFunctionAddress = Scanner.CompiledFindPattern(pattern);
        var walkFunctionAddress = Scanner.FindPattern(pattern);
        if (!walkFunctionAddress.Found)
        {
            return new BindingNotFoundError(pattern, "PetManagerBinding.PetWalk");

M src/Core/NosSmooth.LocalBinding/NosBrowserManager.cs => src/Core/NosSmooth.LocalBinding/NosBrowserManager.cs +1 -1
@@ 136,7 136,7 @@ public class NosBrowserManager
        get
        {
            var player = PlayerManager.Player;
            return player.Address != IntPtr.Zero;
            return player.Address != nuint.Zero;
        }
    }


M src/Core/NosSmooth.LocalBinding/NosSmooth.LocalBinding.csproj => src/Core/NosSmooth.LocalBinding/NosSmooth.LocalBinding.csproj +2 -2
@@ 10,8 10,8 @@
    <ItemGroup>
      <PackageReference Include="Microsoft.Extensions.Configuration.Abstractions" Version="7.0.0" />
      <PackageReference Include="Microsoft.Extensions.Options" Version="7.0.0" />
      <PackageReference Include="Reloaded.Hooks" Version="3.5.1" />
      <PackageReference Include="Reloaded.Memory.Sigscan" Version="1.2.1" />
      <PackageReference Include="Reloaded.Hooks" Version="4.2.1" />
      <PackageReference Include="Reloaded.Memory.Sigscan" Version="3.1.6" />
      <PackageReference Include="Remora.Results" Version="7.2.3" />
    </ItemGroup>


M src/Core/NosSmooth.LocalBinding/Objects/NetworkBinding.cs => src/Core/NosSmooth.LocalBinding/Objects/NetworkBinding.cs +14 -14
@@ 25,7 25,7 @@ public class NetworkBinding
        FunctionAttribute.Register.eax,
        FunctionAttribute.StackCleanup.Callee
    )]
    private delegate void PacketSendDelegate(IntPtr packetObject, IntPtr packetString);
    private delegate void PacketSendDelegate(nuint packetObject, nuint packetString);

    [Function
    (


@@ 33,7 33,7 @@ public class NetworkBinding
        FunctionAttribute.Register.eax,
        FunctionAttribute.StackCleanup.Callee
    )]
    private delegate void PacketReceiveDelegate(IntPtr packetObject, IntPtr packetString);
    private delegate void PacketReceiveDelegate(nuint packetObject, nuint packetString);

    /// <summary>
    /// Create the network binding with finding the network object and functions.


@@ 44,19 44,19 @@ public class NetworkBinding
    public static Result<NetworkBinding> Create(NosBindingManager bindingManager, NetworkBindingOptions options)
    {
        var process = Process.GetCurrentProcess();
        var networkObjectAddress = bindingManager.Scanner.CompiledFindPattern(options.NetworkObjectPattern);
        var networkObjectAddress = bindingManager.Scanner.FindPattern(options.NetworkObjectPattern);
        if (!networkObjectAddress.Found)
        {
            return new BindingNotFoundError(options.NetworkObjectPattern, "NetworkBinding");
        }

        var packetSendAddress = bindingManager.Scanner.CompiledFindPattern(options.SendFunctionPattern);
        var packetSendAddress = bindingManager.Scanner.FindPattern(options.SendFunctionPattern);
        if (!packetSendAddress.Found)
        {
            return new BindingNotFoundError(options.SendFunctionPattern, "NetworkBinding.SendPacket");
        }

        var packetReceiveAddress = bindingManager.Scanner.CompiledFindPattern(options.ReceiveFunctionPattern);
        var packetReceiveAddress = bindingManager.Scanner.FindPattern(options.ReceiveFunctionPattern);
        if (!packetReceiveAddress.Found)
        {
            return new BindingNotFoundError(options.ReceiveFunctionPattern, "NetworkBinding.ReceivePacket");


@@ 73,7 73,7 @@ public class NetworkBinding
        var binding = new NetworkBinding
        (
            bindingManager,
            (IntPtr)(networkObjectAddress.Offset + (int)process.MainModule!.BaseAddress + 0x01),
            (nuint)(networkObjectAddress.Offset + (int)process.MainModule!.BaseAddress + 0x01),
            sendWrapper,
            receiveWrapper
        );


@@ 98,7 98,7 @@ public class NetworkBinding
    }

    private readonly NosBindingManager _bindingManager;
    private readonly IntPtr _networkManagerAddress;
    private readonly nuint _networkManagerAddress;
    private IHook<PacketSendDelegate>? _sendHook;
    private IHook<PacketReceiveDelegate>? _receiveHook;
    private PacketSendDelegate _originalSend;


@@ 107,7 107,7 @@ public class NetworkBinding
    private NetworkBinding
    (
        NosBindingManager bindingManager,
        IntPtr networkManagerAddress,
        nuint networkManagerAddress,
        PacketSendDelegate originalSend,
        PacketReceiveDelegate originalReceive
    )


@@ 185,9 185,9 @@ public class NetworkBinding
        return Result.FromSuccess();
    }

    private IntPtr GetManagerAddress(bool third)
    private nuint GetManagerAddress(bool third)
    {
        IntPtr networkManager = _networkManagerAddress;
        nuint networkManager = _networkManagerAddress;
        _bindingManager.Memory.Read(networkManager, out networkManager);
        _bindingManager.Memory.Read(networkManager, out networkManager);
        _bindingManager.Memory.Read(networkManager, out networkManager);


@@ 200,9 200,9 @@ public class NetworkBinding
        return networkManager;
    }

    private void SendPacketDetour(IntPtr packetObject, IntPtr packetString)
    private void SendPacketDetour(nuint packetObject, nuint packetString)
    {
        var packet = Marshal.PtrToStringAnsi(packetString);
        var packet = Marshal.PtrToStringAnsi((IntPtr)packetString);
        if (packet is null)
        { // ?
            _originalSend(packetObject, packetString);


@@ 219,9 219,9 @@ public class NetworkBinding

    private bool _receivedCancel = false;

    private void ReceivePacketDetour(IntPtr packetObject, IntPtr packetString)
    private void ReceivePacketDetour(nuint packetObject, nuint packetString)
    {
        var packet = Marshal.PtrToStringAnsi(packetString);
        var packet = Marshal.PtrToStringAnsi((IntPtr)packetString);
        if (packet is null)
        { // ?
            _originalReceive(packetObject, packetString);

M src/Core/NosSmooth.LocalBinding/Objects/NostaleStringA.cs => src/Core/NosSmooth.LocalBinding/Objects/NostaleStringA.cs +6 -8
@@ 15,7 15,7 @@ namespace NosSmooth.LocalBinding.Objects;
public class NostaleStringA : IDisposable
{
    private readonly IMemory _memory;
    private IntPtr _pointer;
    private nuint _pointer;

    /// <summary>
    /// Create an instance of <see cref="NostaleStringA"/>.


@@ 30,16 30,14 @@ public class NostaleStringA : IDisposable
        memory.SafeWrite(allocated, 1);
        memory.SafeWrite(allocated + 4, data.Length);
        memory.SafeWriteRaw(allocated + 8, bytes);
        memory.SafeWrite(allocated + 8 + data.Length, 0);

        memory.SafeWrite(allocated + 8 + (nuint)data.Length, 0);
        return new NostaleStringA(memory, allocated);
    }

    private NostaleStringA(IMemory memory, IntPtr pointer)
    private NostaleStringA(IMemory memory, nuint pointer)
    {
        _memory = memory;
        _pointer = pointer;

    }

    /// <summary>


@@ 53,13 51,13 @@ public class NostaleStringA : IDisposable
    /// <summary>
    /// Gets whether the string is still allocated.
    /// </summary>
    public bool Allocated => _pointer != IntPtr.Zero;
    public bool Allocated => _pointer != nuint.Zero;

    /// <summary>
    /// Get the pointer to the string.
    /// </summary>
    /// <returns>A pointer to the string to pass to NosTale.</returns>
    public IntPtr Get()
    public nuint Get()
    {
        return _pointer + 0x08;
    }


@@ 72,7 70,7 @@ public class NostaleStringA : IDisposable
        if (Allocated)
        {
            _memory.Free(_pointer);
            _pointer = IntPtr.Zero;
            _pointer = nuint.Zero;
        }
    }


M src/Core/NosSmooth.LocalBinding/Objects/PetManagerBinding.cs => src/Core/NosSmooth.LocalBinding/Objects/PetManagerBinding.cs +2 -2
@@ 56,7 56,7 @@ public class PetManagerBinding
    )]
    private delegate bool PetWalkDelegate
    (
        IntPtr petManagerPtr,
        nuint petManagerPtr,
        uint position,
        short unknown0 = 0,
        int unknown1 = 1,


@@ 122,7 122,7 @@ public class PetManagerBinding

    private bool PetWalkDetour
    (
        IntPtr petManagerPtr,
        nuint petManagerPtr,
        uint position,
        short unknown0 = 0,
        int unknown1 = 1,

M src/Core/NosSmooth.LocalBinding/Objects/PlayerManagerBinding.cs => src/Core/NosSmooth.LocalBinding/Objects/PlayerManagerBinding.cs +13 -13
@@ 25,7 25,7 @@ public class PlayerManagerBinding
        FunctionAttribute.Register.eax,
        FunctionAttribute.StackCleanup.Callee
    )]
    private delegate bool WalkDelegate(IntPtr playerManagerPtr, int position, short unknown0 = 0, int unknown1 = 1);
    private delegate bool WalkDelegate(nuint playerManagerPtr, int position, short unknown0 = 0, int unknown1 = 1);

    [Function
    (


@@ 35,8 35,8 @@ public class PlayerManagerBinding
    )]
    private delegate bool FollowEntityDelegate
    (
        IntPtr playerManagerPtr,
        IntPtr entityPtr,
        nuint playerManagerPtr,
        nuint entityPtr,
        int unknown1 = 0,
        int unknown2 = 1
    );


@@ 47,7 47,7 @@ public class PlayerManagerBinding
        FunctionAttribute.Register.eax,
        FunctionAttribute.StackCleanup.Callee
    )]
    private delegate void UnfollowEntityDelegate(IntPtr playerManagerPtr, int unknown = 0);
    private delegate void UnfollowEntityDelegate(nuint playerManagerPtr, int unknown = 0);

    /// <summary>
    /// Create the network binding with finding the network object and functions.


@@ 60,19 60,19 @@ public class PlayerManagerBinding
    {
        var process = Process.GetCurrentProcess();

        var walkFunctionAddress = bindingManager.Scanner.CompiledFindPattern(options.WalkFunctionPattern);
        var walkFunctionAddress = bindingManager.Scanner.FindPattern(options.WalkFunctionPattern);
        if (!walkFunctionAddress.Found)
        {
            return new BindingNotFoundError(options.WalkFunctionPattern, "CharacterBinding.Walk");
        }

        var followEntityAddress = bindingManager.Scanner.CompiledFindPattern(options.FollowEntityPattern);
        var followEntityAddress = bindingManager.Scanner.FindPattern(options.FollowEntityPattern);
        if (!followEntityAddress.Found)
        {
            return new BindingNotFoundError(options.FollowEntityPattern, "CharacterBinding.FollowEntity");
        }

        var unfollowEntityAddress = bindingManager.Scanner.CompiledFindPattern(options.UnfollowEntityPattern);
        var unfollowEntityAddress = bindingManager.Scanner.FindPattern(options.UnfollowEntityPattern);
        if (!unfollowEntityAddress.Found)
        {
            return new BindingNotFoundError(options.UnfollowEntityPattern, "CharacterBinding.UnfollowEntity");


@@ 200,7 200,7 @@ public class PlayerManagerBinding
        }
    }

    private bool WalkDetour(IntPtr characterObject, int position, short unknown0, int unknown1)
    private bool WalkDetour(nuint characterObject, int position, short unknown0, int unknown1)
    {
        var result = WalkCall?.Invoke((ushort)(position & 0xFFFF), (ushort)((position >> 16) & 0xFFFF));
        if (result ?? true)


@@ 217,14 217,14 @@ public class PlayerManagerBinding
    /// <param name="entity">The entity.</param>
    /// <returns>A result that may or may not have succeeded.</returns>
    public Result FollowEntity(MapBaseObj? entity)
        => FollowEntity(entity?.Address ?? IntPtr.Zero);
        => FollowEntity(entity?.Address ?? nuint.Zero);

    /// <summary>
    /// Follow the entity.
    /// </summary>
    /// <param name="entityAddress">The entity address.</param>
    /// <returns>A result that may or may not have succeeded.</returns>
    public Result FollowEntity(IntPtr entityAddress)
    public Result FollowEntity(nuint entityAddress)
    {
        try
        {


@@ 258,8 258,8 @@ public class PlayerManagerBinding

    private bool FollowEntityDetour
    (
        IntPtr playerManagerPtr,
        IntPtr entityPtr,
        nuint playerManagerPtr,
        nuint entityPtr,
        int unknown1,
        int unknown2
    )


@@ 273,7 273,7 @@ public class PlayerManagerBinding
        return false;
    }

    private void UnfollowEntityDetour(IntPtr playerManagerPtr, int unknown)
    private void UnfollowEntityDetour(nuint playerManagerPtr, int unknown)
    {
        var result = FollowEntityCall?.Invoke(null);
        if (result ?? true)

M src/Core/NosSmooth.LocalBinding/Objects/UnitManagerBinding.cs => src/Core/NosSmooth.LocalBinding/Objects/UnitManagerBinding.cs +8 -9
@@ 14,7 14,6 @@ using Reloaded.Hooks.Definitions;
using Reloaded.Hooks.Definitions.X86;
using Reloaded.Memory.Buffers.Internal.Kernel32;
using Remora.Results;
using SharpDisasm.Udis86;

namespace NosSmooth.LocalBinding.Objects;



@@ 32,7 31,7 @@ public class UnitManagerBinding
        FunctionAttribute.Register.eax,
        FunctionAttribute.StackCleanup.Callee
    )]
    private delegate int FocusEntityDelegate(IntPtr unitManagerPtr, IntPtr entityPtr);
    private delegate int FocusEntityDelegate(nuint unitManagerPtr, nuint entityPtr);

    /// <summary>
    /// Create the scene manager binding.


@@ 45,13 44,13 @@ public class UnitManagerBinding
    {
        var process = Process.GetCurrentProcess();

        var unitManagerStaticAddress = bindingManager.Scanner.CompiledFindPattern(bindingOptions.UnitManagerPattern);
        var unitManagerStaticAddress = bindingManager.Scanner.FindPattern(bindingOptions.UnitManagerPattern);
        if (!unitManagerStaticAddress.Found)
        {
            return new BindingNotFoundError(bindingOptions.UnitManagerPattern, "UnitManagerBinding.UnitManager");
        }

        var focusEntityAddress = bindingManager.Scanner.CompiledFindPattern(bindingOptions.FocusEntityPattern);
        var focusEntityAddress = bindingManager.Scanner.FindPattern(bindingOptions.FocusEntityPattern);
        if (!focusEntityAddress.Found)
        {
            return new BindingNotFoundError(bindingOptions.FocusEntityPattern, "UnitManagerBinding.FocusEntity");


@@ 104,7 103,7 @@ public class UnitManagerBinding
    /// <summary>
    /// Gets the address of unit manager.
    /// </summary>
    public IntPtr Address => _bindingManager.Memory.FollowStaticAddressOffsets
    public nuint Address => _bindingManager.Memory.FollowStaticAddressOffsets
        (_staticUnitManagerAddress, _unitManagerOffsets);

    /// <summary>


@@ 121,14 120,14 @@ public class UnitManagerBinding
    /// <param name="entity">The entity.</param>
    /// <returns>A result that may or may not have succeeded.</returns>
    public Result FocusEntity(MapBaseObj? entity)
        => FocusEntity(entity?.Address ?? IntPtr.Zero);
        => FocusEntity(entity?.Address ?? nuint.Zero);

    /// <summary>
    /// Focus the entity.
    /// </summary>
    /// <param name="entityAddress">The entity address.</param>
    /// <returns>A result that may or may not have succeeded.</returns>
    public Result FocusEntity(IntPtr entityAddress)
    public Result FocusEntity(nuint entityAddress)
    {
        try
        {


@@ 142,10 141,10 @@ public class UnitManagerBinding
        return Result.FromSuccess();
    }

    private int FocusEntityDetour(IntPtr unitManagerPtr, IntPtr entityId)
    private int FocusEntityDetour(nuint unitManagerPtr, nuint entityId)
    {
        MapBaseObj? obj = null;
        if (entityId != IntPtr.Zero)
        if (entityId != nuint.Zero)
        {
            obj = new MapBaseObj(_bindingManager.Memory, entityId);
        }

M src/Core/NosSmooth.LocalBinding/Structs/ControlManager.cs => src/Core/NosSmooth.LocalBinding/Structs/ControlManager.cs +1 -1
@@ 18,7 18,7 @@ public abstract class ControlManager : NostaleObject
    /// </summary>
    /// <param name="memory">The memory.</param>
    /// <param name="address">The address of the manager.</param>
    protected ControlManager(IMemory memory, IntPtr address)
    protected ControlManager(IMemory memory, nuint address)
        : base(memory, address)
    {
    }

M src/Core/NosSmooth.LocalBinding/Structs/MapBaseObj.cs => src/Core/NosSmooth.LocalBinding/Structs/MapBaseObj.cs +1 -1
@@ 25,7 25,7 @@ public class MapBaseObj : NostaleObject
    /// </summary>
    /// <param name="memory">The memory.</param>
    /// <param name="mapObjPointer">The map object pointer.</param>
    public MapBaseObj(IMemory memory, IntPtr mapObjPointer)
    public MapBaseObj(IMemory memory, nuint mapObjPointer)
        : base(memory, mapObjPointer)
    {
    }

M src/Core/NosSmooth.LocalBinding/Structs/MapNpcObj.cs => src/Core/NosSmooth.LocalBinding/Structs/MapNpcObj.cs +1 -1
@@ 18,7 18,7 @@ public class MapNpcObj : MapBaseObj
    /// </summary>
    /// <param name="memory">The memory.</param>
    /// <param name="mapObjPointer">The pointer to the object.</param>
    public MapNpcObj(IMemory memory, IntPtr mapObjPointer)
    public MapNpcObj(IMemory memory, nuint mapObjPointer)
        : base(memory, mapObjPointer)
    {
    }

M src/Core/NosSmooth.LocalBinding/Structs/MapPlayerObj.cs => src/Core/NosSmooth.LocalBinding/Structs/MapPlayerObj.cs +3 -3
@@ 22,7 22,7 @@ public class MapPlayerObj : MapBaseObj
    /// </summary>
    /// <param name="memory">The memory.</param>
    /// <param name="mapObjPointer">The player object pointer.</param>
    public MapPlayerObj(IMemory memory, IntPtr mapObjPointer)
    public MapPlayerObj(IMemory memory, nuint mapObjPointer)
        : base(memory, mapObjPointer)
    {
        _memory = memory;


@@ 36,9 36,9 @@ public class MapPlayerObj : MapBaseObj
        get
        {
            _memory.SafeRead(Address + 0x1EC, out int nameAddress);
            _memory.SafeRead((IntPtr)nameAddress - 4, out int nameLength);
            _memory.SafeRead((nuint)nameAddress - 4, out int nameLength);
            byte[] data = new byte[nameLength];
            _memory.SafeReadRaw((IntPtr)nameAddress, out data, nameLength);
            _memory.SafeReadRaw((nuint)nameAddress, out data, nameLength);
            return Encoding.ASCII.GetString(data);
        }
    }

M src/Core/NosSmooth.LocalBinding/Structs/NostaleList.cs => src/Core/NosSmooth.LocalBinding/Structs/NostaleList.cs +4 -4
@@ 24,7 24,7 @@ public class NostaleList<T> : IEnumerable<T>
    /// </summary>
    /// <param name="memory">The memory.</param>
    /// <param name="objListPointer">The object list pointer.</param>
    public NostaleList(IMemory memory, IntPtr objListPointer)
    public NostaleList(IMemory memory, nuint objListPointer)
    {
        _memory = memory;
        Address = objListPointer;


@@ 33,7 33,7 @@ public class NostaleList<T> : IEnumerable<T>
    /// <summary>
    /// Gets the address.
    /// </summary>
    protected IntPtr Address { get; }
    protected nuint Address { get; }

    /// <summary>
    /// Gets the element at the given index.


@@ 50,12 50,12 @@ public class NostaleList<T> : IEnumerable<T>
            }

            _memory.SafeRead(Address + 0x04, out int arrayAddress);
            _memory.SafeRead((IntPtr)arrayAddress + (0x04 * index), out int objectAddress);
            _memory.SafeRead((nuint)arrayAddress + (nuint)(0x04 * index), out int objectAddress);

            return new T
            {
                Memory = _memory,
                Address = (IntPtr)objectAddress
                Address = (nuint)objectAddress
            };
        }
    }

M src/Core/NosSmooth.LocalBinding/Structs/NostaleObject.cs => src/Core/NosSmooth.LocalBinding/Structs/NostaleObject.cs +2 -2
@@ 25,7 25,7 @@ public abstract class NostaleObject
    /// </summary>
    /// <param name="memory">The memory.</param>
    /// <param name="address">The address in the memory.</param>
    protected NostaleObject(IMemory memory, IntPtr address)
    protected NostaleObject(IMemory memory, nuint address)
    {
        Memory = memory;
        Address = address;


@@ 39,5 39,5 @@ public abstract class NostaleObject
    /// <summary>
    /// Gets the address of the object.
    /// </summary>
    public virtual IntPtr Address { get; internal set; } = IntPtr.Zero;
    public virtual nuint Address { get; internal set; } = nuint.Zero;
}
\ No newline at end of file

M src/Core/NosSmooth.LocalBinding/Structs/PetManager.cs => src/Core/NosSmooth.LocalBinding/Structs/PetManager.cs +3 -3
@@ 20,7 20,7 @@ public class PetManager : ControlManager
    /// Initializes a new instance of the <see cref="PetManager"/> class.
    /// </summary>
    public PetManager()
        : base(null!, IntPtr.Zero)
        : base(null!, nuint.Zero)
    {
    }



@@ 29,7 29,7 @@ public class PetManager : ControlManager
    /// </summary>
    /// <param name="memory">The memory.</param>
    /// <param name="petManagerAddress">The pet manager address.</param>
    public PetManager(IMemory memory, IntPtr petManagerAddress)
    public PetManager(IMemory memory, nuint petManagerAddress)
        : base(memory, petManagerAddress)
    {
    }


@@ 42,7 42,7 @@ public class PetManager : ControlManager
        get
        {
            Memory.SafeRead(Address + 0x7C, out int playerAddress);
            return new MapNpcObj(Memory, (IntPtr)playerAddress);
            return new MapNpcObj(Memory, (nuint)playerAddress);
        }
    }


M src/Core/NosSmooth.LocalBinding/Structs/PetManagerList.cs => src/Core/NosSmooth.LocalBinding/Structs/PetManagerList.cs +1 -2
@@ 9,7 9,6 @@ using NosSmooth.LocalBinding.Extensions;
using NosSmooth.LocalBinding.Options;
using Reloaded.Memory.Sources;
using Remora.Results;
using SharpDisasm.Udis86;

namespace NosSmooth.LocalBinding.Structs;



@@ 26,7 25,7 @@ public class PetManagerList : NostaleList<PetManager>
    /// <returns>The player manager or an error.</returns>
    public static Result<PetManagerList> Create(NosBrowserManager nosBrowserManager, PetManagerOptions options)
    {
        var characterObjectAddress = nosBrowserManager.Scanner.CompiledFindPattern(options.PetManagerListPattern);
        var characterObjectAddress = nosBrowserManager.Scanner.FindPattern(options.PetManagerListPattern);
        if (!characterObjectAddress.Found)
        {
            return new BindingNotFoundError(options.PetManagerListPattern, "PetManagerList");

M src/Core/NosSmooth.LocalBinding/Structs/PlayerManager.cs => src/Core/NosSmooth.LocalBinding/Structs/PlayerManager.cs +4 -4
@@ 26,7 26,7 @@ public class PlayerManager : ControlManager
    /// <returns>The player manager or an error.</returns>
    public static Result<PlayerManager> Create(NosBrowserManager nosBrowserManager, PlayerManagerOptions options)
    {
        var characterObjectAddress = nosBrowserManager.Scanner.CompiledFindPattern(options.PlayerManagerPattern);
        var characterObjectAddress = nosBrowserManager.Scanner.FindPattern(options.PlayerManagerPattern);
        if (!characterObjectAddress.Found)
        {
            return new BindingNotFoundError(options.PlayerManagerPattern, "PlayerManager");


@@ 52,7 52,7 @@ public class PlayerManager : ControlManager
    /// <param name="staticPlayerManagerAddress">The pointer to the beginning of the player manager structure.</param>
    /// <param name="playerManagerOffsets">The offsets to get the player manager address from the static one.</param>
    public PlayerManager(IMemory memory, int staticPlayerManagerAddress, int[] playerManagerOffsets)
        : base(memory, IntPtr.Zero)
        : base(memory, nuint.Zero)
    {
        _memory = memory;
        _staticPlayerManagerAddress = staticPlayerManagerAddress;


@@ 62,7 62,7 @@ public class PlayerManager : ControlManager
    /// <summary>
    /// Gets the address to the player manager.
    /// </summary>
    public override IntPtr Address => _memory.FollowStaticAddressOffsets
    public override nuint Address => _memory.FollowStaticAddressOffsets
        (_staticPlayerManagerAddress, _playerManagerOffsets);

    /// <summary>


@@ 73,7 73,7 @@ public class PlayerManager : ControlManager
        get
        {
            _memory.SafeRead(Address + 0x20, out int playerAddress);
            return new MapPlayerObj(_memory, (IntPtr)playerAddress);
            return new MapPlayerObj(_memory, (nuint)playerAddress);
        }
    }


M src/Core/NosSmooth.LocalBinding/Structs/SceneManager.cs => src/Core/NosSmooth.LocalBinding/Structs/SceneManager.cs +6 -6
@@ 25,7 25,7 @@ public class SceneManager
    /// <returns>The player manager or an error.</returns>
    public static Result<SceneManager> Create(NosBrowserManager nosBrowserManager, SceneManagerOptions options)
    {
        var characterObjectAddress = nosBrowserManager.Scanner.CompiledFindPattern(options.SceneManagerObjectPattern);
        var characterObjectAddress = nosBrowserManager.Scanner.FindPattern(options.SceneManagerObjectPattern);
        if (!characterObjectAddress.Found)
        {
            return new BindingNotFoundError(options.SceneManagerObjectPattern, "SceneManager");


@@ 60,7 60,7 @@ public class SceneManager
    /// <summary>
    /// Gets the address of the scene manager.
    /// </summary>
    public IntPtr Address => _memory.FollowStaticAddressOffsets(_staticSceneManagerAddress, _sceneManagerOffsets);
    public nuint Address => _memory.FollowStaticAddressOffsets(_staticSceneManagerAddress, _sceneManagerOffsets);

    /// <summary>
    /// Gets the player list.


@@ 90,7 90,7 @@ public class SceneManager
        get
        {
            var ptr = ReadPtr(Address + 0x48);
            if (ptr == IntPtr.Zero)
            if (ptr == nuint.Zero)
            {
                return null;
            }


@@ 102,7 102,7 @@ public class SceneManager
    /// <summary>
    /// Gets the lock on target marked address.
    /// </summary>
    public IntPtr LockOnTargetMarkedAddress
    public nuint LockOnTargetMarkedAddress
    {
        get
        {


@@ 113,10 113,10 @@ public class SceneManager
        }
    }

    private IntPtr ReadPtr(IntPtr ptr)
    private nuint ReadPtr(nuint ptr)
    {
        _memory.Read(ptr, out int read);
        return (IntPtr)read;
        return (nuint)read;
    }

    /// <summary>

M src/Core/NosSmooth.LocalClient/NosSmooth.LocalClient.csproj => src/Core/NosSmooth.LocalClient/NosSmooth.LocalClient.csproj +3 -3
@@ 12,10 12,10 @@
    </ItemGroup>

    <ItemGroup>
      <PackageReference Include="NosSmooth.Core" Version="1.2.1" />
      <PackageReference Include="NosSmooth.Core" Version="3.0.0" />
      <PackageReference Include="Microsoft.Extensions.Logging" Version="7.0.0" />
      <PackageReference Include="Reloaded.Hooks" Version="3.5.1" />
      <PackageReference Include="Reloaded.Memory.Sigscan" Version="1.2.1" />
      <PackageReference Include="Reloaded.Hooks" Version="4.2.1" />
      <PackageReference Include="Reloaded.Memory.Sigscan" Version="3.1.6" />
    </ItemGroup>

</Project>

M src/Inject/NosSmooth.Injector.CLI/NosSmooth.Injector.CLI.csproj => src/Inject/NosSmooth.Injector.CLI/NosSmooth.Injector.CLI.csproj +1 -1
@@ 10,7 10,7 @@

  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.DependencyInjection" Version="7.0.0" />
    <PackageReference Include="Remora.Commands" Version="8.0.0" />
    <PackageReference Include="Remora.Commands" Version="10.0.3" />
  </ItemGroup>

  <ItemGroup>

M src/Inject/NosSmooth.Injector/ManagedMemoryAllocation.cs => src/Inject/NosSmooth.Injector/ManagedMemoryAllocation.cs +4 -4
@@ 21,7 21,7 @@ internal class ManagedMemoryAllocation : IDisposable
    /// </summary>
    /// <param name="memory">The memory with allocation.</param>
    /// <param name="pointer">The pointer to allocated memory.</param>
    public ManagedMemoryAllocation(IMemory memory, IntPtr pointer)
    public ManagedMemoryAllocation(IMemory memory, nuint pointer)
    {
        Pointer = pointer;
        _memory = memory;


@@ 31,17 31,17 @@ internal class ManagedMemoryAllocation : IDisposable
    /// <summary>
    /// The allocated pointer number.
    /// </summary>
    public IntPtr Pointer { get; private set; }
    public nuint Pointer { get; private set; }

    /// <summary>
    /// Whether the memory is currently allocated.
    /// </summary>
    public bool Allocated => Pointer != IntPtr.Zero;
    public bool Allocated => Pointer != nuint.Zero;

    /// <inheritdoc />
    public void Dispose()
    {
        _memory.Free(Pointer);
        Pointer = IntPtr.Zero;
        Pointer = nuint.Zero;
    }
}
\ No newline at end of file

M src/Inject/NosSmooth.Injector/NosInjector.cs => src/Inject/NosSmooth.Injector/NosInjector.cs +2 -2
@@ 164,12 164,12 @@ public class NosInjector
    {
        var bytes = Encoding.Unicode.GetBytes(str);
        var allocated = memory.Allocate(bytes.Length + 1);
        if (allocated == IntPtr.Zero)
        if (allocated == nuint.Zero)
        {
            return new ManagedMemoryAllocation(memory, allocated);
        }

        memory.SafeWriteRaw(allocated + bytes.Length, new byte[] { 0 });
        memory.SafeWriteRaw(allocated + (nuint)bytes.Length, new byte[] { 0 });
        memory.SafeWriteRaw(allocated, bytes);
        return new ManagedMemoryAllocation(memory, allocated);
    }

M src/Inject/NosSmooth.Injector/NosSmooth.Injector.csproj => src/Inject/NosSmooth.Injector/NosSmooth.Injector.csproj +2 -2
@@ 7,8 7,8 @@
  </PropertyGroup>

  <ItemGroup>
    <PackageReference Include="Microsoft.Extensions.Options" Version="6.0.0" />
    <PackageReference Include="Reloaded.Injector" Version="1.2.4" />
    <PackageReference Include="Microsoft.Extensions.Options" Version="7.0.0" />
    <PackageReference Include="Reloaded.Injector" Version="1.2.5" />
    <PackageReference Include="Remora.Results" Version="7.2.3" />
  </ItemGroup>


M src/Samples/External/ExternalBrowser/ExternalBrowser.csproj => src/Samples/External/ExternalBrowser/ExternalBrowser.csproj +1 -1
@@ 12,7 12,7 @@
    </ItemGroup>

    <ItemGroup>
      <PackageReference Include="NosSmooth.Core" Version="1.2.1" />
      <PackageReference Include="NosSmooth.Core" Version="3.0.0" />
    </ItemGroup>

</Project>

M src/Samples/LowLevel/InterceptNameChanger/InterceptNameChanger.csproj => src/Samples/LowLevel/InterceptNameChanger/InterceptNameChanger.csproj +2 -2
@@ 10,14 10,14 @@
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Fody" Version="6.6.0">
    <PackageReference Include="Fody" Version="6.6.4">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="7.0.0" />
    <PackageReference Include="Microsoft.Extensions.Logging" Version="7.0.0" />
    <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="7.0.0" />
    <PackageReference Include="NosSmooth.Core" Version="1.2.1" />
    <PackageReference Include="NosSmooth.Core" Version="3.0.0" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\..\..\Core\NosSmooth.LocalClient\NosSmooth.LocalClient.csproj" />

M src/Samples/LowLevel/SimpleChat/SimpleChat.csproj => src/Samples/LowLevel/SimpleChat/SimpleChat.csproj +2 -2
@@ 11,14 11,14 @@
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Fody" Version="6.6.0">
    <PackageReference Include="Fody" Version="6.6.4">
      <PrivateAssets>all</PrivateAssets>
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Microsoft.Extensions.DependencyInjection.Abstractions" Version="7.0.0" />
    <PackageReference Include="Microsoft.Extensions.Logging" Version="7.0.0" />
    <PackageReference Include="Microsoft.Extensions.Logging.Console" Version="7.0.0" />
    <PackageReference Include="NosSmooth.Core" Version="1.2.1" />
    <PackageReference Include="NosSmooth.Core" Version="3.0.0" />
  </ItemGroup>
  <ItemGroup>
    <ProjectReference Include="..\..\..\Core\NosSmooth.LocalClient\NosSmooth.LocalClient.csproj" />

M src/Samples/LowLevel/WalkCommands/WalkCommands.csproj => src/Samples/LowLevel/WalkCommands/WalkCommands.csproj +3 -3
@@ 18,7 18,7 @@
      <IncludeAssets>runtime; build; native; contentfiles; analyzers; buildtransitive</IncludeAssets>
    </PackageReference>
    <PackageReference Include="Fody">
      <Version>6.6.0</Version>
      <Version>6.6.4</Version>
      <PrivateAssets>all</PrivateAssets>
    </PackageReference>
    <PackageReference Include="Microsoft.Extensions.DependencyInjection">


@@ 34,10 34,10 @@
      <Version>2.0.0</Version>
    </PackageReference>
    <PackageReference Include="NosSmooth.Data.NOSFiles">
      <Version>2.0.1</Version>
      <Version>2.0.2</Version>
    </PackageReference>
    <PackageReference Include="NosSmooth.Extensions.Pathfinding">
      <Version>1.0.0</Version>
      <Version>1.1.0</Version>
    </PackageReference>
    <PackageReference Include="Remora.Results">
      <Version>7.2.3</Version>

Do not follow this link