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 arr = Enumerable.Range(0, ushort.MaxValue).Select(x => Tuple.Create((ushort)x, Marshal.PtrToStringAnsi(func(x)))).Where(x => x.Item2 != string.Empty).ToArray(); channel.LogBasic("Found {0} game messages", arr.Length); channel.WriteGameMessages(arr); }
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.Read <uint>((int)o + _pattern.TakeWhile(x => x != null).Count()); var func = reader.GetDelegate <GetMessageNameFunc>((int)o); var arr = Enumerable.Range(0, (int)count).Select(x => (ushort)x).Select( x => Tuple.Create(x, Marshal.PtrToStringUni(func(x)))).ToArray(); channel.LogBasic("Found {0} system messages", arr.Length); channel.WriteSystemMessages(arr); }