11using System ;
2+ using System . Collections . Generic ;
23using System . Drawing ;
4+ using System . Text ;
35using ReClassNET ;
6+ using ReClassNET . Extensions ;
47using ReClassNET . Memory ;
58using ReClassNET . Nodes ;
69using ReClassNET . Plugins ;
7- using ReClassNET . Util ;
810
911namespace FrostbitePlugin
1012{
@@ -14,11 +16,6 @@ public class FrostbitePluginExt : Plugin
1416
1517 internal static Settings Settings ;
1618
17- private INodeInfoReader reader ;
18- 19- private WeakPtrNodeConverter converter ;
20- private WeakPtrCodeGenerator generator ;
21- 2219 public override Image Icon => Properties . Resources . logo_frostbite ;
2320
2421 public override bool Initialize ( IPluginHost host )
@@ -34,33 +31,38 @@ public override bool Initialize(IPluginHost host)
3431
3532 Settings = host . Settings ;
3633
37- // Register the InfoReader
38- reader = new FrostBiteNodeInfoReader ( ) ;
39- host . RegisterNodeInfoReader ( reader ) ;
40- 41- // Register the WeakPtr node
42- converter = new WeakPtrNodeConverter ( ) ;
43- generator = new WeakPtrCodeGenerator ( ) ;
44- host . RegisterNodeType ( typeof ( WeakPtrNode ) , "Frostbite WeakPtr" , Icon , converter , generator ) ;
45- 4634 return true ;
4735 }
4836
4937 public override void Terminate ( )
5038 {
51- host . DeregisterNodeType ( typeof ( WeakPtrNode ) , converter , generator ) ;
39+ host = null ;
40+ }
41+ 42+ public override IReadOnlyList < INodeInfoReader > GetNodeInfoReaders ( )
43+ {
44+ // Register the InfoReader
5245
53- host . DeregisterNodeInfoReader ( reader ) ;
46+ return new [ ] { new FrostBiteNodeInfoReader ( ) } ;
47+ }
5448
55- host = null ;
49+ public override CustomNodeTypes GetCustomNodeTypes ( )
50+ {
51+ // Register the WeakPtr node
52+ 53+ return new CustomNodeTypes
54+ {
55+ CodeGenerator = new WeakPtrCodeGenerator ( ) ,
56+ Serializer = new WeakPtrNodeConverter ( ) ,
57+ NodeTypes = new [ ] { typeof ( WeakPtrNode ) }
58+ } ;
5659 }
5760 }
5861
59- 6062 /// <summary>A custom node info reader which outputs Frostbite type infos.</summary>
6163 public class FrostBiteNodeInfoReader : INodeInfoReader
6264 {
63- public string ReadNodeInfo ( BaseNode node , IntPtr nodeAddress , IntPtr nodeValue , MemoryBuffer memory )
65+ public string ReadNodeInfo ( BaseHexCommentNode node , IntPtr nodeAddress , IntPtr nodeValue , MemoryBuffer memory )
6466 {
6567 // 1. try the direct value
6668 var info = ReadPtrInfo ( nodeValue , memory ) ;
@@ -70,7 +72,7 @@ public string ReadNodeInfo(BaseNode node, IntPtr nodeAddress, IntPtr nodeValue,
7072 }
7173
7274 // 2. try indirect pointer
73- var indirectPtr = memory . Process . ReadRemoteObject < IntPtr > ( nodeValue ) ;
75+ var indirectPtr = memory . Process . ReadRemoteIntPtr ( nodeValue ) ;
7476 if ( indirectPtr . MayBeValid ( ) )
7577 {
7678 info = ReadPtrInfo ( indirectPtr , memory ) ;
@@ -83,7 +85,7 @@ public string ReadNodeInfo(BaseNode node, IntPtr nodeAddress, IntPtr nodeValue,
8385 var weakTempPtr = indirectPtr - IntPtr . Size ;
8486 if ( weakTempPtr . MayBeValid ( ) )
8587 {
86- var weakPtr = memory . Process . ReadRemoteObject < IntPtr > ( weakTempPtr ) ;
88+ var weakPtr = memory . Process . ReadRemoteIntPtr ( weakTempPtr ) ;
8789 if ( weakPtr . MayBeValid ( ) )
8890 {
8991 info = ReadPtrInfo ( weakPtr , memory ) ;
@@ -100,24 +102,24 @@ public string ReadNodeInfo(BaseNode node, IntPtr nodeAddress, IntPtr nodeValue,
100102
101103 private static string ReadPtrInfo ( IntPtr value , MemoryBuffer memory )
102104 {
103- var getTypeFnPtr = memory . Process . ReadRemoteObject < IntPtr > ( value ) ;
105+ var getTypeFnPtr = memory . Process . ReadRemoteIntPtr ( value ) ;
104106 if ( getTypeFnPtr . MayBeValid ( ) )
105107 {
106108#if RECLASSNET64
107- var offset = memory . Process . ReadRemoteObject < int > ( getTypeFnPtr + 3 ) ;
109+ var offset = memory . Process . ReadRemoteInt32 ( getTypeFnPtr + 3 ) ;
108110 var typeInfoPtr = getTypeFnPtr + offset + 7 ;
109111#else
110- var typeInfoPtr = memory . Process . ReadRemoteObject < IntPtr > ( getTypeFnPtr + 1 ) ;
112+ var typeInfoPtr = memory . Process . ReadRemoteIntPtr ( getTypeFnPtr + 1 ) ;
111113#endif
112114 if ( typeInfoPtr . MayBeValid ( ) )
113115 {
114- var typeInfoDataPtr = memory . Process . ReadRemoteObject < IntPtr > ( typeInfoPtr ) ;
116+ var typeInfoDataPtr = memory . Process . ReadRemoteIntPtr ( typeInfoPtr ) ;
115117 if ( typeInfoDataPtr . MayBeValid ( ) )
116118 {
117- var namePtr = memory . Process . ReadRemoteObject < IntPtr > ( typeInfoDataPtr ) ;
119+ var namePtr = memory . Process . ReadRemoteIntPtr ( typeInfoDataPtr ) ;
118120 if ( namePtr . MayBeValid ( ) )
119121 {
120- var info = memory . Process . ReadRemoteUTF8StringUntilFirstNullCharacter ( namePtr , 64 ) ;
122+ var info = memory . Process . ReadRemoteStringUntilFirstNullCharacter ( Encoding . UTF8 , namePtr , 64 ) ;
121123 if ( info . Length > 0 && info [ 0 ] . IsPrintable ( ) )
122124 {
123125 return info ;
0 commit comments