public unsafe void Run(MemoryReader reader, IpcChannel channel) { var o = reader.FindOffset(_patterns).Cast <int?>().FirstOrDefault(); if (o == null) { channel.LogError("Could not find game message name function"); return; } var func = reader.GetDelegate <GetMessageNameFunc>((int)o); var list = new List <Tuple <ushort, string> >(); for (ushort i = 0; i < ushort.MaxValue; i++) { string s; if ((s = Marshal.PtrToStringAnsi(func(i))) != string.Empty) { list.Add(Tuple.Create(i, s)); } } channel.LogBasic("Found {0} opcodes", list.Count); channel.GameMessages = list; }
public void Run(MemoryReader reader, IpcChannel channel) { var o = reader.FindOffset(_pattern).Cast <int?>().FirstOrDefault(); if (o == null) { channel.LogError("Could not find system message table"); return; } var count = reader.ReadUInt32((int)o + _pattern.TakeWhile(x => x != null).Count()); var func = reader.GetDelegate <GetMessageNameFunc>((int)o); var list = new List <Tuple <ushort, string> >(); for (ushort i = 0; i < count; i++) { list.Add(Tuple.Create(i, Marshal.PtrToStringUni(func(i)))); } channel.LogBasic("Found {0} system messages", list.Count); channel.SystemMessages = list; }