Skip to content
This repository has been archived by the owner on Nov 10, 2021. It is now read-only.

Commit

Permalink
Added Events
Browse files Browse the repository at this point in the history
  • Loading branch information
erri120 committed May 17, 2020
1 parent 686af06 commit 900a561
Show file tree
Hide file tree
Showing 7 changed files with 102 additions and 8 deletions.
6 changes: 6 additions & 0 deletions AddressLibrary.cs
Original file line number Diff line number Diff line change
Expand Up @@ -62,5 +62,11 @@ public static class AddressLibrary
/// <para>See <see cref="UtilityLibrary.SoulGemType"/> for all return types.</para>
/// </summary>
public static IntPtr GetSoulTypeFunc { get; internal set; }

public static IntPtr SmithingTempering { get; internal set; }
public static IntPtr SmithingCrafting { get; internal set; }
public static IntPtr Enchanting { get; internal set; }
public static IntPtr Disenchanting { get; internal set; }
public static IntPtr Alchemy { get; internal set; }
}
}
12 changes: 12 additions & 0 deletions Events.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
using NetScriptFramework;

namespace UtilityLibrary
{
public static partial class Events
{
/// <summary>
/// Event is raised when tempering Armor.
/// </summary>
public static Event<TemperingEventArgs> OnTempering { get; internal set; }
}
}
64 changes: 64 additions & 0 deletions Events/OnTemperingEvent.cs
Original file line number Diff line number Diff line change
@@ -0,0 +1,64 @@
using System;
using NetScriptFramework;
using NetScriptFramework.SkyrimSE;

namespace UtilityLibrary
{
public partial class Events
{
public class TemperingEventArgs : HookedEventArgs
{
/// <summary>
/// The item that gets tempered
/// </summary>
public TESForm Item { get; internal set; }

/// <summary>
/// The old quality of the item
/// </summary>
public float OldQuality { get; set; }

/// <summary>
/// The new quality of the item
/// </summary>
public float NewQuality { get; set; }

/// <summary>
/// Temper information
/// </summary>
public BGSConstructibleObject TemperForm { get; set; }

/// <summary>
/// XP gained from tempering
/// </summary>
public float XP { get; set; }
}

internal static EventHookParameters<TemperingEventArgs> TemperingEventHookParameters =>
new EventHookParameters<TemperingEventArgs>(AddressLibrary.SmithingTempering, 6, 6, "FF 90 B8 07 00 00",
ctx =>
{
var args = new TemperingEventArgs();
var ptr = Memory.ReadPointer(ctx.BX);
if (ptr != IntPtr.Zero)
{
ptr = Memory.ReadPointer(ptr);
args.Item = MemoryObject.FromAddress<TESForm>(ptr);
}
args.OldQuality = Memory.ReadFloat(ctx.BX + 0x18);
args.NewQuality = Memory.ReadFloat(ctx.BX + 0x1C);
args.TemperForm = MemoryObject.FromAddress<BGSConstructibleObject>(Memory.ReadPointer(ctx.BX + 0x10));
args.XP = ctx.XMM2f;
return args;
}, (ctx, args) =>
{
Memory.WriteFloat(ctx.BX + 0x18, args.OldQuality);
Memory.WriteFloat(ctx.BX + 0x1C, args.NewQuality);
Memory.WritePointer(ctx.BX + 0x10, args.TemperForm.Cast<BGSConstructibleObject>());
ctx.XMM2f = args.XP;
});
}
}
File renamed without changes.
File renamed without changes.
21 changes: 15 additions & 6 deletions Plugin.cs
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
using NetScriptFramework.SkyrimSE;
using NetScriptFramework;

namespace UtilityLibrary
{
Expand All @@ -17,12 +17,21 @@ public class Plugin : NetScriptFramework.Plugin

protected override bool Initialize(bool loadedAny)
{
AddressLibrary.GetEnchantmentFunc = NetScriptFramework.Main.GameInfo.GetAddressOf(14411);
AddressLibrary.GetCurrentGameTimeFunc = NetScriptFramework.Main.GameInfo.GetAddressOf(56475);
AddressLibrary.GetRealHoursPassedFunc = NetScriptFramework.Main.GameInfo.GetAddressOf(54842);
AddressLibrary.GetSoulTypeFunc = NetScriptFramework.Main.GameInfo.GetAddressOf(11561);
AddressLibrary.GetEnchantmentFunc = Main.GameInfo.GetAddressOf(14411);
AddressLibrary.GetCurrentGameTimeFunc = Main.GameInfo.GetAddressOf(56475);
AddressLibrary.GetRealHoursPassedFunc = Main.GameInfo.GetAddressOf(54842);
AddressLibrary.GetSoulTypeFunc = Main.GameInfo.GetAddressOf(11561);

Events.OnMainMenu.Register(e =>
AddressLibrary.SmithingTempering = Main.GameInfo.GetAddressOf(50477, 0x115, 6);//, "FF 90 B8 07 00 00");
/*AddressLibrary.SmithingCrafting = Main.GameInfo.GetAddressOf(50476, 0x91, 6, "FF 90 B8 07 00 00");
AddressLibrary.Enchanting = Main.GameInfo.GetAddressOf(50450, 0x275, 6, "FF 90 B8 07 00 00");
AddressLibrary.Disenchanting = Main.GameInfo.GetAddressOf(50459, 0xBA, 6, "FF 90 B8 07 00 00");
AddressLibrary.Alchemy = Main.GameInfo.GetAddressOf(50449, 0x207, 6, "FF 90 B8 07 00 00");
*/

Events.OnTempering = new EventHook<Events.TemperingEventArgs>(EventHookFlags.None, "smithing.tempering", Events.TemperingEventHookParameters);

NetScriptFramework.SkyrimSE.Events.OnMainMenu.Register(e =>
{
UtilityLibrary.IsInMainMenu = e.Entering;
}, -1);
Expand Down
7 changes: 5 additions & 2 deletions UtilityLibrary.csproj
Original file line number Diff line number Diff line change
Expand Up @@ -71,16 +71,19 @@
</ItemGroup>
<ItemGroup>
<Compile Include="AddressLibrary.cs" />
<Compile Include="Events.cs" />
<Compile Include="Events\OnTemperingEvent.cs" />
<Compile Include="Plugin.cs" />
<Compile Include="Properties\AssemblyInfo.cs" />
<Compile Include="UtilityLibrary.cs" />
<Compile Include="UtilityLibrary\ActorExtensions.cs" />
<Compile Include="UtilityLibrary\ItemEntryExtensions.cs" />
<Compile Include="Extensions\ActorExtensions.cs" />
<Compile Include="Extensions\ItemEntryExtensions.cs" />
<Compile Include="Utils.cs" />
</ItemGroup>
<ItemGroup>
<None Include="packages.config" />
</ItemGroup>
<ItemGroup />
<Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
<PropertyGroup>
<PostBuildEvent>copy "$(TargetDir)$(TargetName)$(TargetExt)" "N:\MO2 for Mod Creation\mods\Utility Library\NetScriptFramework\Plugins"
Expand Down

0 comments on commit 900a561

Please sign in to comment.