コード例 #1
0
ファイル: GameMessageScanner.cs プロジェクト: Kuzaki/alkahest
        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;
        }
コード例 #2
0
        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;
        }