diff --git a/Glamourer.GameData/CharacterEquipExtensions.cs b/Glamourer.GameData/CharacterEquipExtensions.cs index e53fa1d..99be2d8 100644 --- a/Glamourer.GameData/CharacterEquipExtensions.cs +++ b/Glamourer.GameData/CharacterEquipExtensions.cs @@ -12,75 +12,73 @@ public static class WriteExtensions { private static unsafe void Write(IntPtr characterPtr, EquipSlot slot, SetId? id, WeaponType? type, ushort? variant, StainId? stain) { - void WriteWeapon(int offset) + void WriteWeapon(WeaponModelId* address) { - var address = (byte*)characterPtr + offset; if (id.HasValue) - *(ushort*)address = (ushort)id.Value; + address->Id = (ushort)id.Value; if (type.HasValue) - *(ushort*)(address + 2) = (ushort)type.Value; + address->Type = (ushort)type.Value; if (variant.HasValue) - *(ushort*)(address + 4) = variant.Value; + address->Variant = variant.Value; if (*(ushort*)address == 0) - *(address + 6) = 0; + address->Stain = 0; else if (stain.HasValue) - *(address + 6) = (byte)stain.Value; + address->Stain = (byte)stain.Value; } - void WriteEquip(int offset) + void WriteEquip(EquipmentModelId* address) { - var address = (byte*)characterPtr + offset; if (id.HasValue) - *(ushort*)address = (ushort)id.Value; + address->Id = (ushort)id.Value; if (variant < byte.MaxValue) - *(address + 2) = (byte)variant.Value; + address->Variant = (byte)variant.Value; if (stain.HasValue) - *(address + 3) = (byte)stain.Value; + address->Stain = (byte)stain.Value; } - var drawDataOffset = (int) Marshal.OffsetOf(nameof(Character.DrawData)); + var ptr = (Character*)characterPtr; switch (slot) { case EquipSlot.MainHand: - WriteWeapon(drawDataOffset + (int)Marshal.OffsetOf(nameof(DrawDataContainer.MainHandModel))); + WriteWeapon(&ptr->DrawData.MainHandModel); break; case EquipSlot.OffHand: - WriteWeapon(drawDataOffset + (int)Marshal.OffsetOf(nameof(DrawDataContainer.OffHandModel))); + WriteWeapon(&ptr->DrawData.OffHandModel); break; case EquipSlot.Head: - WriteEquip(drawDataOffset + (int)Marshal.OffsetOf(nameof(DrawDataContainer.Head))); + WriteEquip(&ptr->DrawData.Head); break; case EquipSlot.Body: - WriteEquip(drawDataOffset + (int)Marshal.OffsetOf(nameof(DrawDataContainer.Top))); + WriteEquip(&ptr->DrawData.Top); break; case EquipSlot.Hands: - WriteEquip(drawDataOffset + (int)Marshal.OffsetOf(nameof(DrawDataContainer.Arms))); + WriteEquip(&ptr->DrawData.Arms); break; case EquipSlot.Legs: - WriteEquip(drawDataOffset + (int)Marshal.OffsetOf(nameof(DrawDataContainer.Legs))); + WriteEquip(&ptr->DrawData.Legs); break; case EquipSlot.Feet: - WriteEquip(drawDataOffset + (int)Marshal.OffsetOf(nameof(DrawDataContainer.Feet))); + WriteEquip(&ptr->DrawData.Feet); break; case EquipSlot.Ears: - WriteEquip(drawDataOffset + (int)Marshal.OffsetOf(nameof(DrawDataContainer.Ear))); + WriteEquip(&ptr->DrawData.Ear); break; case EquipSlot.Neck: - WriteEquip(drawDataOffset + (int)Marshal.OffsetOf(nameof(DrawDataContainer.Neck))); + WriteEquip(&ptr->DrawData.Neck); break; case EquipSlot.Wrists: - WriteEquip(drawDataOffset + (int)Marshal.OffsetOf(nameof(DrawDataContainer.Wrist))); + WriteEquip(&ptr->DrawData.Wrist); break; case EquipSlot.RFinger: - WriteEquip(drawDataOffset + (int)Marshal.OffsetOf(nameof(DrawDataContainer.RFinger))); + WriteEquip(&ptr->DrawData.RFinger); break; case EquipSlot.LFinger: - WriteEquip(drawDataOffset + (int)Marshal.OffsetOf(nameof(DrawDataContainer.LFinger))); + WriteEquip(&ptr->DrawData.LFinger); break; default: throw new InvalidEnumArgumentException(); } diff --git a/Glamourer.zip b/Glamourer.zip index 02b288c..a917ab3 100644 Binary files a/Glamourer.zip and b/Glamourer.zip differ diff --git a/Glamourer/Glamourer.csproj b/Glamourer/Glamourer.csproj index 869ba3e..fce6944 100644 --- a/Glamourer/Glamourer.csproj +++ b/Glamourer/Glamourer.csproj @@ -5,8 +5,8 @@ x64 Glamourer Glamourer - 0.1.2.0 - 0.1.2.0 + 0.1.2.1 + 0.1.2.1 SoftOtter Glamourer Copyright © 2020 diff --git a/Glamourer/Glamourer.json b/Glamourer/Glamourer.json index 5a2232e..f98733e 100644 --- a/Glamourer/Glamourer.json +++ b/Glamourer/Glamourer.json @@ -5,7 +5,7 @@ "Description": "Adds functionality to change and store appearance of players, customization and equip. Requires Penumbra to be installed and activated to work. Can also add preview options to the Changed Items tab for Penumbra.", "Tags": [ "Appearance", "Glamour", "Race", "Outfit", "Armor", "Clothes", "Skins", "Customization", "Design", "Character" ], "InternalName": "Glamourer", - "AssemblyVersion": "0.1.2.0", + "AssemblyVersion": "0.1.2.1", "RepoUrl": "https://github.com/Ottermandias/Glamourer", "ApplicableVersion": "any", "DalamudApiLevel": 8, diff --git a/repo.json b/repo.json index 102e0e2..68bd2be 100644 --- a/repo.json +++ b/repo.json @@ -6,8 +6,8 @@ "Description": "Adds functionality to change and store appearance of players, customization and equip. Requires Penumbra to be installed and activated to work. Can also add preview options to the Changed Items tab for Penumbra.", "Tags": [ "Appearance", "Glamour", "Race", "Outfit", "Armor", "Clothes", "Skins", "Customization", "Design", "Character" ], "InternalName": "Glamourer", - "AssemblyVersion": "0.1.2.0", - "TestingAssemblyVersion": "0.1.2.0", + "AssemblyVersion": "0.1.2.1", + "TestingAssemblyVersion": "0.1.2.1", "RepoUrl": "https://github.com/Ottermandias/Glamourer", "ApplicableVersion": "any", "DalamudApiLevel": 8,