Initial commit: Complete open-source Decal rebuild

All 5 phases of the open-source Decal rebuild:

Phase 1: 14 decompiled .NET projects (Interop.*, Adapter, FileService, DecalUtil)
Phase 2: 10 native DLLs rewritten as C# COM servers with matching GUIDs
  - DecalDat, DHS, SpellFilter, DecalInput, DecalNet, DecalFilters
  - Decal.Core, DecalControls, DecalRender, D3DService
Phase 3: C++ shims for Inject.DLL (D3D9 hooking) and LauncherHook.DLL
Phase 4: DenAgent WinForms tray application
Phase 5: WiX installer and build script

25 C# projects building with 0 errors.
Native C++ projects require VS 2022 + Windows SDK (x86).

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
erik 2026-02-08 18:27:56 +01:00
commit d1442e3747
1382 changed files with 170725 additions and 0 deletions

View file

@ -0,0 +1,5 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<AssemblyName>Decal.Interop.SpellFilter</AssemblyName>
</PropertyGroup>
</Project>

View file

@ -0,0 +1,10 @@
using System.Runtime.InteropServices;
namespace Decal.Interop.SpellFilter;
[ComImport]
[CoClass(typeof(ComponentClass))]
[Guid("4818142F-B10C-4EC5-A794-8A87E1ABAF09")]
public interface Component : IComponent
{
}

View file

@ -0,0 +1,125 @@
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;
namespace Decal.Interop.SpellFilter;
[ComImport]
[ClassInterface(ClassInterfaceType.None)]
[Guid("20425F2F-54FF-4EAE-9538-36699E3DFB56")]
[SuppressUnmanagedCodeSecurity]
[TypeLibType(2)]
public class ComponentClass : IComponent, Component
{
[DispId(1)]
public virtual extern int ComponentID
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(1)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(1)]
[param: In]
set;
}
[DispId(2)]
public virtual extern string Name
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(2)]
[return: MarshalAs(UnmanagedType.BStr)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(2)]
[param: In]
[param: MarshalAs(UnmanagedType.BStr)]
set;
}
[DispId(3)]
public virtual extern int Icon
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(3)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(3)]
[param: In]
set;
}
[DispId(4)]
public virtual extern int Type
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(4)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(4)]
[param: In]
set;
}
[DispId(5)]
public virtual extern int Animation
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(5)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(5)]
[param: In]
set;
}
[DispId(6)]
public virtual extern float Charge
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(6)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(6)]
[param: In]
set;
}
[DispId(7)]
public virtual extern string PowerWord
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(7)]
[return: MarshalAs(UnmanagedType.BStr)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(7)]
[param: In]
[param: MarshalAs(UnmanagedType.BStr)]
set;
}
[DispId(8)]
public virtual extern int BurnRate
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(8)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(8)]
[param: In]
set;
}
[DispId(9)]
public virtual extern int Dummy1
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(9)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(9)]
[param: In]
set;
}
}

View file

@ -0,0 +1,124 @@
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;
namespace Decal.Interop.SpellFilter;
[ComImport]
[TypeLibType(4160)]
[Guid("4818142F-B10C-4EC5-A794-8A87E1ABAF09")]
[SuppressUnmanagedCodeSecurity]
public interface IComponent
{
[DispId(1)]
int ComponentID
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(1)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(1)]
[param: In]
set;
}
[DispId(2)]
string Name
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(2)]
[return: MarshalAs(UnmanagedType.BStr)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(2)]
[param: In]
[param: MarshalAs(UnmanagedType.BStr)]
set;
}
[DispId(3)]
int Icon
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(3)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(3)]
[param: In]
set;
}
[DispId(4)]
int Type
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(4)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(4)]
[param: In]
set;
}
[DispId(5)]
int Animation
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(5)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(5)]
[param: In]
set;
}
[DispId(6)]
float Charge
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(6)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(6)]
[param: In]
set;
}
[DispId(7)]
string PowerWord
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(7)]
[return: MarshalAs(UnmanagedType.BStr)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(7)]
[param: In]
[param: MarshalAs(UnmanagedType.BStr)]
set;
}
[DispId(8)]
int BurnRate
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(8)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(8)]
[param: In]
set;
}
[DispId(9)]
int Dummy1
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(9)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(9)]
[param: In]
set;
}
}

View file

@ -0,0 +1,463 @@
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;
namespace Decal.Interop.SpellFilter;
[ComImport]
[TypeLibType(4160)]
[SuppressUnmanagedCodeSecurity]
[Guid("B445A795-77B4-4069-9129-BB2A97651CFA")]
public interface ISpell
{
[DispId(1)]
int SpellID
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(1)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(1)]
[param: In]
set;
}
[DispId(2)]
string Name
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(2)]
[return: MarshalAs(UnmanagedType.BStr)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(2)]
[param: In]
[param: MarshalAs(UnmanagedType.BStr)]
set;
}
[DispId(3)]
string Description
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(3)]
[return: MarshalAs(UnmanagedType.BStr)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(3)]
[param: In]
[param: MarshalAs(UnmanagedType.BStr)]
set;
}
[DispId(4)]
int SpellSchool
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(4)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(4)]
[param: In]
set;
}
[DispId(5)]
int Icon
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(5)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(5)]
[param: In]
set;
}
[DispId(6)]
int Effect
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(6)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(6)]
[param: In]
set;
}
[DispId(7)]
int Flags
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(7)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(7)]
[param: In]
set;
}
[DispId(8)]
int ManaCost
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(8)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(8)]
[param: In]
set;
}
[DispId(9)]
int Difficulty
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(9)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(9)]
[param: In]
set;
}
[DispId(10)]
float Economy
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(10)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(10)]
[param: In]
set;
}
[DispId(11)]
int SpellVersion
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(11)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(11)]
[param: In]
set;
}
[DispId(12)]
int SpellType
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(12)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(12)]
[param: In]
set;
}
[DispId(13)]
double Duration
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(13)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(13)]
[param: In]
set;
}
[DispId(14)]
bool Researchable
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(14)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(14)]
[param: In]
set;
}
[DispId(15)]
int Component
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(15)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(15)]
[TypeLibFunc(64)]
[param: In]
set;
}
[DispId(16)]
int Misc
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[TypeLibFunc(64)]
[DispId(16)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(16)]
[TypeLibFunc(64)]
[param: In]
set;
}
[DispId(17)]
float FUnknown1
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(17)]
[TypeLibFunc(64)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(17)]
[TypeLibFunc(64)]
[param: In]
set;
}
[DispId(18)]
float FUnknown2
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[TypeLibFunc(64)]
[DispId(18)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(18)]
[TypeLibFunc(64)]
[param: In]
set;
}
[DispId(19)]
float FUnknown3
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[TypeLibFunc(64)]
[DispId(19)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(19)]
[TypeLibFunc(64)]
[param: In]
set;
}
[DispId(20)]
int LUnknown1
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(20)]
[TypeLibFunc(64)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(20)]
[TypeLibFunc(64)]
[param: In]
set;
}
[DispId(21)]
int LUnknown2
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(21)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(21)]
[param: In]
set;
}
[DispId(22)]
int LUnknown3
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(22)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(22)]
[param: In]
set;
}
[DispId(23)]
int ComponentCount
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(23)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(23)]
[param: In]
set;
}
[DispId(24)]
int LUnknown4
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[TypeLibFunc(64)]
[DispId(24)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(24)]
[TypeLibFunc(64)]
[param: In]
set;
}
[DispId(25)]
int LUnknown5
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[TypeLibFunc(64)]
[DispId(25)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(25)]
[TypeLibFunc(64)]
[param: In]
set;
}
[DispId(26)]
int LUnknown6
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(26)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(26)]
[param: In]
set;
}
[DispId(27)]
int TargetMask
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(27)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(27)]
[param: In]
set;
}
[DispId(28)]
float RangeBase
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(28)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(28)]
[param: In]
set;
}
[DispId(29)]
float RangeModifier
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(29)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(29)]
[param: In]
set;
}
[DispId(30)]
float Speed
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(30)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(30)]
[param: In]
set;
}
[DispId(31)]
int ID2
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(31)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(31)]
[param: In]
set;
}
[DispId(32)]
int SortOrder
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(32)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(32)]
[param: In]
set;
}
[DispId(33)]
int Misc2
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(33)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(33)]
[param: In]
set;
}
[DispId(34)]
int EffectOnCaster
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(34)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(34)]
[param: In]
set;
}
[DispId(35)]
int EffectOnTarget
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(35)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(35)]
[param: In]
set;
}
[DispId(36)]
double DurationUnk
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(36)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(36)]
[param: In]
set;
}
}

View file

@ -0,0 +1,73 @@
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;
namespace Decal.Interop.SpellFilter;
[ComImport]
[TypeLibType(4160)]
[SuppressUnmanagedCodeSecurity]
[Guid("BCB57D92-7FCD-477C-B078-C45D205435AC")]
public interface ISpells
{
[DispId(1)]
Spell SpellByID
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(1)]
[return: MarshalAs(UnmanagedType.Interface)]
get;
}
[DispId(2)]
Spell SpellByName
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(2)]
[return: MarshalAs(UnmanagedType.Interface)]
get;
}
[DispId(3)]
bool SpellKnown
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(3)]
get;
}
[DispId(4)]
int LastSpellID
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(4)]
get;
}
[DispId(5)]
string Server
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(5)]
[return: MarshalAs(UnmanagedType.BStr)]
get;
}
[DispId(6)]
Component ComponentByID
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(6)]
[return: MarshalAs(UnmanagedType.Interface)]
get;
}
[DispId(7)]
Component ComponentByName
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(7)]
[return: MarshalAs(UnmanagedType.Interface)]
get;
}
}

View file

@ -0,0 +1,10 @@
using System.Runtime.InteropServices;
namespace Decal.Interop.SpellFilter;
[ComImport]
[Guid("B445A795-77B4-4069-9129-BB2A97651CFA")]
[CoClass(typeof(SpellClass))]
public interface Spell : ISpell
{
}

View file

@ -0,0 +1,464 @@
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;
namespace Decal.Interop.SpellFilter;
[ComImport]
[SuppressUnmanagedCodeSecurity]
[ClassInterface(ClassInterfaceType.None)]
[Guid("3040368A-B77A-4FE1-B8CC-D77FA3F36A6D")]
[TypeLibType(2)]
public class SpellClass : ISpell, Spell
{
[DispId(1)]
public virtual extern int SpellID
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(1)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(1)]
[param: In]
set;
}
[DispId(2)]
public virtual extern string Name
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(2)]
[return: MarshalAs(UnmanagedType.BStr)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(2)]
[param: In]
[param: MarshalAs(UnmanagedType.BStr)]
set;
}
[DispId(3)]
public virtual extern string Description
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(3)]
[return: MarshalAs(UnmanagedType.BStr)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(3)]
[param: In]
[param: MarshalAs(UnmanagedType.BStr)]
set;
}
[DispId(4)]
public virtual extern int SpellSchool
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(4)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(4)]
[param: In]
set;
}
[DispId(5)]
public virtual extern int Icon
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(5)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(5)]
[param: In]
set;
}
[DispId(6)]
public virtual extern int Effect
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(6)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(6)]
[param: In]
set;
}
[DispId(7)]
public virtual extern int Flags
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(7)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(7)]
[param: In]
set;
}
[DispId(8)]
public virtual extern int ManaCost
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(8)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(8)]
[param: In]
set;
}
[DispId(9)]
public virtual extern int Difficulty
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(9)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(9)]
[param: In]
set;
}
[DispId(10)]
public virtual extern float Economy
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(10)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(10)]
[param: In]
set;
}
[DispId(11)]
public virtual extern int SpellVersion
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(11)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(11)]
[param: In]
set;
}
[DispId(12)]
public virtual extern int SpellType
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(12)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(12)]
[param: In]
set;
}
[DispId(13)]
public virtual extern double Duration
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(13)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(13)]
[param: In]
set;
}
[DispId(14)]
public virtual extern bool Researchable
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(14)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(14)]
[param: In]
set;
}
[DispId(15)]
public virtual extern int Component
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(15)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(15)]
[TypeLibFunc(64)]
[param: In]
set;
}
[DispId(16)]
public virtual extern int Misc
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(16)]
[TypeLibFunc(64)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[TypeLibFunc(64)]
[DispId(16)]
[param: In]
set;
}
[DispId(17)]
public virtual extern float FUnknown1
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[TypeLibFunc(64)]
[DispId(17)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(17)]
[TypeLibFunc(64)]
[param: In]
set;
}
[DispId(18)]
public virtual extern float FUnknown2
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[TypeLibFunc(64)]
[DispId(18)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(18)]
[TypeLibFunc(64)]
[param: In]
set;
}
[DispId(19)]
public virtual extern float FUnknown3
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[TypeLibFunc(64)]
[DispId(19)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(19)]
[TypeLibFunc(64)]
[param: In]
set;
}
[DispId(20)]
public virtual extern int LUnknown1
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[TypeLibFunc(64)]
[DispId(20)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[TypeLibFunc(64)]
[DispId(20)]
[param: In]
set;
}
[DispId(21)]
public virtual extern int LUnknown2
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(21)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(21)]
[param: In]
set;
}
[DispId(22)]
public virtual extern int LUnknown3
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(22)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(22)]
[param: In]
set;
}
[DispId(23)]
public virtual extern int ComponentCount
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(23)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(23)]
[param: In]
set;
}
[DispId(24)]
public virtual extern int LUnknown4
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(24)]
[TypeLibFunc(64)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(24)]
[TypeLibFunc(64)]
[param: In]
set;
}
[DispId(25)]
public virtual extern int LUnknown5
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[TypeLibFunc(64)]
[DispId(25)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(25)]
[TypeLibFunc(64)]
[param: In]
set;
}
[DispId(26)]
public virtual extern int LUnknown6
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(26)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(26)]
[param: In]
set;
}
[DispId(27)]
public virtual extern int TargetMask
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(27)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(27)]
[param: In]
set;
}
[DispId(28)]
public virtual extern float RangeBase
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(28)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(28)]
[param: In]
set;
}
[DispId(29)]
public virtual extern float RangeModifier
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(29)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(29)]
[param: In]
set;
}
[DispId(30)]
public virtual extern float Speed
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(30)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(30)]
[param: In]
set;
}
[DispId(31)]
public virtual extern int ID2
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(31)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(31)]
[param: In]
set;
}
[DispId(32)]
public virtual extern int SortOrder
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(32)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(32)]
[param: In]
set;
}
[DispId(33)]
public virtual extern int Misc2
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(33)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(33)]
[param: In]
set;
}
[DispId(34)]
public virtual extern int EffectOnCaster
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(34)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(34)]
[param: In]
set;
}
[DispId(35)]
public virtual extern int EffectOnTarget
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(35)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(35)]
[param: In]
set;
}
[DispId(36)]
public virtual extern double DurationUnk
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(36)]
get;
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(36)]
[param: In]
set;
}
}

View file

@ -0,0 +1,10 @@
using System.Runtime.InteropServices;
namespace Decal.Interop.SpellFilter;
[ComImport]
[Guid("BCB57D92-7FCD-477C-B078-C45D205435AC")]
[CoClass(typeof(SpellsClass))]
public interface Spells : ISpells, _ISpellsEvents_Event
{
}

View file

@ -0,0 +1,81 @@
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;
namespace Decal.Interop.SpellFilter;
[ComImport]
[SuppressUnmanagedCodeSecurity]
[ClassInterface(ClassInterfaceType.None)]
[TypeLibType(2)]
[ComSourceInterfaces("Decal.Interop.SpellFilter._ISpellsEvents\0\0")]
[Guid("C2D43735-BE7E-4829-AF73-F2E7E820EB16")]
public class SpellsClass : ISpells, Spells, _ISpellsEvents_Event
{
[DispId(1)]
public virtual extern Spell SpellByID
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(1)]
[return: MarshalAs(UnmanagedType.Interface)]
get;
}
[DispId(2)]
public virtual extern Spell SpellByName
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(2)]
[return: MarshalAs(UnmanagedType.Interface)]
get;
}
[DispId(3)]
public virtual extern bool SpellKnown
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(3)]
get;
}
[DispId(4)]
public virtual extern int LastSpellID
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(4)]
get;
}
[DispId(5)]
public virtual extern string Server
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(5)]
[return: MarshalAs(UnmanagedType.BStr)]
get;
}
[DispId(6)]
public virtual extern Component ComponentByID
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(6)]
[return: MarshalAs(UnmanagedType.Interface)]
get;
}
[DispId(7)]
public virtual extern Component ComponentByName
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(7)]
[return: MarshalAs(UnmanagedType.Interface)]
get;
}
public virtual extern event _ISpellsEvents_LoginEventHandler Login;
public virtual extern event _ISpellsEvents_Spellbook_AddEventHandler Spellbook_Add;
public virtual extern event _ISpellsEvents_Spellbook_DeleteEventHandler Spellbook_Delete;
}

View file

@ -0,0 +1,25 @@
using System.Runtime.CompilerServices;
using System.Runtime.InteropServices;
using System.Security;
namespace Decal.Interop.SpellFilter;
[ComImport]
[TypeLibType(4096)]
[Guid("76A6E2FA-30DA-4442-A75F-D3013B044E63")]
[SuppressUnmanagedCodeSecurity]
[InterfaceType(2)]
public interface _ISpellsEvents
{
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(1)]
void Login([In] int CharacterID);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(2)]
void Spellbook_Add(int SpellAdded);
[MethodImpl(MethodImplOptions.InternalCall, MethodCodeType = MethodCodeType.Runtime)]
[DispId(3)]
void Spellbook_Delete(int SpellDeleted);
}

View file

@ -0,0 +1,14 @@
using System.Runtime.InteropServices;
namespace Decal.Interop.SpellFilter;
[TypeLibType(16)]
[ComVisible(false)]
public interface _ISpellsEvents_Event
{
event _ISpellsEvents_LoginEventHandler Login;
event _ISpellsEvents_Spellbook_AddEventHandler Spellbook_Add;
event _ISpellsEvents_Spellbook_DeleteEventHandler Spellbook_Delete;
}

View file

@ -0,0 +1,306 @@
using System;
using System.Collections;
using System.Runtime.InteropServices;
using System.Runtime.InteropServices.ComTypes;
using System.Threading;
namespace Decal.Interop.SpellFilter;
internal sealed class _ISpellsEvents_EventProvider : _ISpellsEvents_Event, IDisposable
{
private IConnectionPointContainer m_ConnectionPointContainer;
private ArrayList m_aEventSinkHelpers;
private IConnectionPoint m_ConnectionPoint;
private void Init()
{
IConnectionPoint ppCP = null;
Guid riid = new Guid(new byte[16]
{
250, 226, 166, 118, 218, 48, 66, 68, 167, 95,
211, 1, 59, 4, 78, 99
});
m_ConnectionPointContainer.FindConnectionPoint(ref riid, out ppCP);
m_ConnectionPoint = ppCP;
m_aEventSinkHelpers = new ArrayList();
}
event _ISpellsEvents_LoginEventHandler _ISpellsEvents_Event.Login
{
add
{
bool lockTaken = default(bool);
try
{
Monitor.Enter(this, ref lockTaken);
if (m_ConnectionPoint == null)
{
Init();
}
_ISpellsEvents_SinkHelper iSpellsEvents_SinkHelper = new _ISpellsEvents_SinkHelper();
int pdwCookie = 0;
m_ConnectionPoint.Advise(iSpellsEvents_SinkHelper, out pdwCookie);
iSpellsEvents_SinkHelper.m_dwCookie = pdwCookie;
iSpellsEvents_SinkHelper.m_LoginDelegate = value;
m_aEventSinkHelpers.Add(iSpellsEvents_SinkHelper);
}
finally
{
if (lockTaken)
{
Monitor.Exit(this);
}
}
}
remove
{
bool lockTaken = default(bool);
try
{
Monitor.Enter(this, ref lockTaken);
if (m_aEventSinkHelpers == null)
{
return;
}
int count = m_aEventSinkHelpers.Count;
int num = 0;
if (0 >= count)
{
return;
}
do
{
_ISpellsEvents_SinkHelper iSpellsEvents_SinkHelper = (_ISpellsEvents_SinkHelper)m_aEventSinkHelpers[num];
if (iSpellsEvents_SinkHelper.m_LoginDelegate != null && ((iSpellsEvents_SinkHelper.m_LoginDelegate.Equals(value) ? 1u : 0u) & 0xFFu) != 0)
{
m_aEventSinkHelpers.RemoveAt(num);
m_ConnectionPoint.Unadvise(iSpellsEvents_SinkHelper.m_dwCookie);
if (count <= 1)
{
Marshal.ReleaseComObject(m_ConnectionPoint);
m_ConnectionPoint = null;
m_aEventSinkHelpers = null;
}
break;
}
num++;
}
while (num < count);
}
finally
{
if (lockTaken)
{
Monitor.Exit(this);
}
}
}
}
event _ISpellsEvents_Spellbook_AddEventHandler _ISpellsEvents_Event.Spellbook_Add
{
add
{
bool lockTaken = default(bool);
try
{
Monitor.Enter(this, ref lockTaken);
if (m_ConnectionPoint == null)
{
Init();
}
_ISpellsEvents_SinkHelper iSpellsEvents_SinkHelper = new _ISpellsEvents_SinkHelper();
int pdwCookie = 0;
m_ConnectionPoint.Advise(iSpellsEvents_SinkHelper, out pdwCookie);
iSpellsEvents_SinkHelper.m_dwCookie = pdwCookie;
iSpellsEvents_SinkHelper.m_Spellbook_AddDelegate = value;
m_aEventSinkHelpers.Add(iSpellsEvents_SinkHelper);
}
finally
{
if (lockTaken)
{
Monitor.Exit(this);
}
}
}
remove
{
bool lockTaken = default(bool);
try
{
Monitor.Enter(this, ref lockTaken);
if (m_aEventSinkHelpers == null)
{
return;
}
int count = m_aEventSinkHelpers.Count;
int num = 0;
if (0 >= count)
{
return;
}
do
{
_ISpellsEvents_SinkHelper iSpellsEvents_SinkHelper = (_ISpellsEvents_SinkHelper)m_aEventSinkHelpers[num];
if (iSpellsEvents_SinkHelper.m_Spellbook_AddDelegate != null && ((iSpellsEvents_SinkHelper.m_Spellbook_AddDelegate.Equals(value) ? 1u : 0u) & 0xFFu) != 0)
{
m_aEventSinkHelpers.RemoveAt(num);
m_ConnectionPoint.Unadvise(iSpellsEvents_SinkHelper.m_dwCookie);
if (count <= 1)
{
Marshal.ReleaseComObject(m_ConnectionPoint);
m_ConnectionPoint = null;
m_aEventSinkHelpers = null;
}
break;
}
num++;
}
while (num < count);
}
finally
{
if (lockTaken)
{
Monitor.Exit(this);
}
}
}
}
event _ISpellsEvents_Spellbook_DeleteEventHandler _ISpellsEvents_Event.Spellbook_Delete
{
add
{
bool lockTaken = default(bool);
try
{
Monitor.Enter(this, ref lockTaken);
if (m_ConnectionPoint == null)
{
Init();
}
_ISpellsEvents_SinkHelper iSpellsEvents_SinkHelper = new _ISpellsEvents_SinkHelper();
int pdwCookie = 0;
m_ConnectionPoint.Advise(iSpellsEvents_SinkHelper, out pdwCookie);
iSpellsEvents_SinkHelper.m_dwCookie = pdwCookie;
iSpellsEvents_SinkHelper.m_Spellbook_DeleteDelegate = value;
m_aEventSinkHelpers.Add(iSpellsEvents_SinkHelper);
}
finally
{
if (lockTaken)
{
Monitor.Exit(this);
}
}
}
remove
{
bool lockTaken = default(bool);
try
{
Monitor.Enter(this, ref lockTaken);
if (m_aEventSinkHelpers == null)
{
return;
}
int count = m_aEventSinkHelpers.Count;
int num = 0;
if (0 >= count)
{
return;
}
do
{
_ISpellsEvents_SinkHelper iSpellsEvents_SinkHelper = (_ISpellsEvents_SinkHelper)m_aEventSinkHelpers[num];
if (iSpellsEvents_SinkHelper.m_Spellbook_DeleteDelegate != null && ((iSpellsEvents_SinkHelper.m_Spellbook_DeleteDelegate.Equals(value) ? 1u : 0u) & 0xFFu) != 0)
{
m_aEventSinkHelpers.RemoveAt(num);
m_ConnectionPoint.Unadvise(iSpellsEvents_SinkHelper.m_dwCookie);
if (count <= 1)
{
Marshal.ReleaseComObject(m_ConnectionPoint);
m_ConnectionPoint = null;
m_aEventSinkHelpers = null;
}
break;
}
num++;
}
while (num < count);
}
finally
{
if (lockTaken)
{
Monitor.Exit(this);
}
}
}
}
public _ISpellsEvents_EventProvider(object P_0)
{
//Error decoding local variables: Signature type sequence must have at least one element.
m_ConnectionPointContainer = (IConnectionPointContainer)P_0;
}
public void Finalize()
{
bool lockTaken = default(bool);
try
{
Monitor.Enter(this, ref lockTaken);
if (m_ConnectionPoint == null)
{
return;
}
int count = m_aEventSinkHelpers.Count;
int num = 0;
if (0 < count)
{
do
{
_ISpellsEvents_SinkHelper iSpellsEvents_SinkHelper = (_ISpellsEvents_SinkHelper)m_aEventSinkHelpers[num];
m_ConnectionPoint.Unadvise(iSpellsEvents_SinkHelper.m_dwCookie);
num++;
}
while (num < count);
}
Marshal.ReleaseComObject(m_ConnectionPoint);
}
catch (Exception)
{
}
finally
{
if (lockTaken)
{
Monitor.Exit(this);
}
}
}
public void Dispose()
{
//Error decoding local variables: Signature type sequence must have at least one element.
Finalize();
GC.SuppressFinalize(this);
}
}

View file

@ -0,0 +1,6 @@
using System.Runtime.InteropServices;
namespace Decal.Interop.SpellFilter;
[ComVisible(false)]
public delegate void _ISpellsEvents_LoginEventHandler([In] int CharacterID);

View file

@ -0,0 +1,52 @@
using System.Runtime.InteropServices;
namespace Decal.Interop.SpellFilter;
[TypeLibType(TypeLibTypeFlags.FHidden)]
[ClassInterface(ClassInterfaceType.None)]
public sealed class _ISpellsEvents_SinkHelper : _ISpellsEvents
{
public _ISpellsEvents_LoginEventHandler m_LoginDelegate;
public _ISpellsEvents_Spellbook_AddEventHandler m_Spellbook_AddDelegate;
public _ISpellsEvents_Spellbook_DeleteEventHandler m_Spellbook_DeleteDelegate;
public int m_dwCookie;
public void Login(int P_0)
{
//Error decoding local variables: Signature type sequence must have at least one element.
if (m_LoginDelegate != null)
{
m_LoginDelegate(P_0);
}
}
public void Spellbook_Add(int P_0)
{
//Error decoding local variables: Signature type sequence must have at least one element.
if (m_Spellbook_AddDelegate != null)
{
m_Spellbook_AddDelegate(P_0);
}
}
public void Spellbook_Delete(int P_0)
{
//Error decoding local variables: Signature type sequence must have at least one element.
if (m_Spellbook_DeleteDelegate != null)
{
m_Spellbook_DeleteDelegate(P_0);
}
}
internal _ISpellsEvents_SinkHelper()
{
//Error decoding local variables: Signature type sequence must have at least one element.
m_dwCookie = 0;
m_LoginDelegate = null;
m_Spellbook_AddDelegate = null;
m_Spellbook_DeleteDelegate = null;
}
}

View file

@ -0,0 +1,6 @@
using System.Runtime.InteropServices;
namespace Decal.Interop.SpellFilter;
[ComVisible(false)]
public delegate void _ISpellsEvents_Spellbook_AddEventHandler(int SpellAdded);

View file

@ -0,0 +1,6 @@
using System.Runtime.InteropServices;
namespace Decal.Interop.SpellFilter;
[ComVisible(false)]
public delegate void _ISpellsEvents_Spellbook_DeleteEventHandler(int SpellDeleted);

View file

@ -0,0 +1,158 @@
namespace Decal.Interop.SpellFilter;
public enum eComponent
{
eLeadScarab = 1,
eIronScarab = 2,
eCopperScarab = 3,
eSilverScarab = 4,
eGoldScarab = 5,
ePyrealScarab = 6,
eHyssop = 7,
eMandrake = 8,
eSaffron = 9,
eDamiana = 10,
eMugwort = 11,
eBistort = 12,
eWormwood = 13,
eGinseng = 14,
eHawthorn = 15,
eAmaranth = 16,
eVervain = 17,
eMyrrh = 18,
eEyebright = 19,
eFrankincense = 20,
eDragonsblood = 21,
eHenbane = 22,
eComfrey = 23,
eYarrow = 24,
ePowderedAgate = 25,
ePowderedAmber = 26,
ePowderedAzurite = 27,
ePowderedBloodstone = 28,
ePowderedCarnelian = 29,
ePowderedHematite = 30,
ePowderedLapisLazuli = 31,
ePowderedMalachite = 32,
ePowderedMoonstone = 33,
ePowderedOnyx = 34,
ePowderedQuartz = 35,
ePowderedTurquoise = 36,
eBrimstone = 37,
eCadmia = 38,
eCinnabar = 39,
eCobalt = 40,
eColcothar = 41,
eGypsum = 42,
eQuicksilver = 43,
eRealgar = 44,
eStibnite = 45,
eTurpeth = 46,
eVerdigris = 47,
eVitriol = 48,
ePoplarTalisman = 49,
eBlackthornTalisman = 50,
eYewTalisman = 51,
eHemlockTalisman = 52,
eAlderTalisman = 53,
eEbonyTalisman = 54,
eBirchTalisman = 55,
eOakTalisman = 56,
eAshwoodTalisman = 57,
eElderTalisman = 58,
eHazelTalisman = 59,
eRowanTalisman = 60,
eWillowTalisman = 61,
eCedarTalisman = 62,
eRedTaper = 63,
ePinkTaper = 64,
eOrangeTaper = 65,
eYellowTaper = 66,
eGreenTaper = 67,
eTurquoiseTaper = 68,
eBlueTaper = 69,
eIndigoTaper = 70,
eVioletTaper = 71,
eWhiteTaper = 72,
eBrownTaper = 73,
eGreyTaper = 74,
eDiamondScarab = 110,
eChorizite = 111,
ePlatinumScarab = 112,
eLeadScarabPea = 113,
eIronScarabPea = 114,
eCopperScarabPea = 115,
eSilverScarabPea = 116,
eGoldScarabPea = 117,
ePyrealScarabPea = 118,
eHyssopPea = 119,
eMandrakePea = 120,
eSaffronPea = 121,
eDamianaPea = 122,
eMugwortPea = 123,
eBistortPea = 124,
eWormwoodPea = 125,
eGinsengPea = 126,
eHawthornPea = 127,
eAmaranthPea = 128,
eVervainPea = 129,
eMyrrhPea = 130,
eEyebrightPea = 131,
eFrankincensePea = 132,
eDragonsbloodPea = 133,
eHenbanePea = 134,
eComfreyPea = 135,
eYarrowPea = 136,
ePowderedAgatePea = 137,
ePowderedAmberPea = 138,
ePowderedAzuritePea = 139,
ePowderedBloodstonePea = 140,
ePowderedCarnelianPea = 141,
ePowderedHematitePea = 142,
ePowderedLapisLazuliPea = 143,
ePowderedMalachitePea = 144,
ePowderedMoonstonePea = 145,
ePowderedOnyxPea = 146,
ePowderedQuartzPea = 147,
ePowderedTurquoisePea = 148,
eBrimstonePea = 149,
eCadmiaPea = 150,
eCinnabarPea = 151,
eCobaltPea = 152,
eColcotharPea = 153,
eGypsumPea = 154,
eQuicksilverPea = 155,
eRealgarPea = 156,
eStibnitePea = 157,
eTurpethPea = 158,
eVerdigrisPea = 159,
eVitriolPea = 160,
ePoplarTalismanPea = 161,
eBlackthornTalismanPea = 162,
eYewTalismanPea = 163,
eHemlockTalismanPea = 164,
eAlderTalismanPea = 165,
eEbonyTalismanPea = 166,
eBirchTalismanPea = 167,
eOakTalismanPea = 168,
eAshwoodTalismanPea = 169,
eElderTalismanPea = 170,
eHazelTalismanPea = 171,
eRowanTalismanPea = 172,
eWillowTalismanPea = 173,
eCedarTalismanPea = 174,
eRedTaperPea = 175,
ePinkTaperPea = 176,
eOrangeTaperPea = 177,
eYellowTaperPea = 178,
eGreenTaperPea = 179,
eTurquoiseTaperPea = 180,
eBlueTaperPea = 181,
eIndigoTaperPea = 182,
eVioletTaperPea = 183,
eWhiteTaperPea = 184,
eBrownTaperPea = 185,
eGreyTaperPea = 186,
eMooJuice = 187,
ePrismaticTaper = 188
}

View file

@ -0,0 +1,12 @@
namespace Decal.Interop.SpellFilter;
public enum eComponentType
{
eScarab,
eHerb,
ePowder,
ePotion,
eTalisman,
eTaper,
ePea
}

View file

@ -0,0 +1,19 @@
namespace Decal.Interop.SpellFilter;
public enum eSpellType
{
eModifyAttribute = 1,
eWar,
eModifyVital,
eTransferVital,
eTie,
eRecall,
eSummon,
eSpecialRecall,
eDispel,
eLifebolt,
eFellowModifyVital,
eFellowModifyAttribute,
eFellowRecall,
eFellowDispell
}

View file

@ -0,0 +1,10 @@
using System.Reflection;
using System.Runtime.InteropServices;
using System.Security;
[assembly: ImportedFromTypeLib("SpellFilter")]
[assembly: PrimaryInteropAssembly(2, 0)]
[assembly: SecurityRules(SecurityRuleSet.Level2)]
[assembly: Guid("8c94b9f9-e992-46e7-96d7-4564a08a21bb")]
[assembly: TypeLibVersion(2, 0)]
[assembly: AssemblyVersion("2.9.8.3")]