Object Manager traversal (WoW classic) menu

User Tag List

Page 1 of 3 123 LastLast
Results 1 to 15 of 35
  1. #1
    Reghero's Avatar Member
    Reputation
    5
    Join Date
    Jun 2017
    Posts
    26
    Thanks G/R
    19/4
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Object Manager traversal (WoW classic)

    Hopefully this should just be a silly mistake I've made with either my offset math or a misunderstanding of the way that objects are traversed in the object manager.

    I have a simple object manager so far:

    Code:
    using Process.NET;
    using Process.NET.Memory;
    using System;
    
    namespace WoWTestConsole
    {
        public class ObjectManager
        {
            private const int ObjManager = 0x2CFF7E8;
            private const int localGuidOffset = 0x58;                                           // offset from the object manager to the local guid
            private const int firstObjectOffset = 0x18;                                          // offset from the object manager to the first object
            private const int nextObjectOffset = 0x70;
            private readonly IPointer basePointer;
            private readonly IProcess process;
            private int objManagerAddress;
            private uint localGuid;
    
            public ObjectManager(IProcess process)
            {
                this.process = process;
                this.basePointer = process[process.ModuleFactory.MainModule.BaseAddress];
                this.objManagerAddress = this.basePointer.Read<int>(ObjManager);
                //this.localGuid = this.basePointer.Read<uint>((int)(objManagerAddress + localGuidOffset));
            }
    
            public void Pulse()
    
            {
                var CurrentObject = new WowObject(this.basePointer, this.basePointer.Read<int>(ObjManager+firstObjectOffset));
    
                while (CurrentObject.BaseAddress != 0 && CurrentObject.BaseAddress % 2 == 0)
                {
                    Console.WriteLine($"Type: {CurrentObject.Type} X: {CurrentObject.XPosition} Y: {CurrentObject.YPosition} Z: {CurrentObject.ZPosition}");
                    CurrentObject.BaseAddress = this.basePointer.Read<int>(CurrentObject.BaseAddress + nextObjectOffset);
                }
            }
        }
    }
    Called by a simple console application:

    Code:
    using Process.NET;
    using Process.NET.Memory;
    using System;
    
    namespace WoWTestConsole
    {
        class Program 
        {
            const int ReleaseDate = 0x24D4508;
    
            static void Main(string[] args)
            {
                var process = new ProcessSharp("WoWClassic", MemoryType.Remote);
                process.Memory = new ExternalProcessMemory(process.Handle);
                var stringDate = process[process.ModuleFactory.MainModule.BaseAddress].Read<char>(ReleaseDate, 10);
                var inGame = process[process.ModuleFactory.MainModule.BaseAddress].Read<bool>(0x2EEC584);
                var objManager = new ObjectManager(process);
                objManager.Pulse();
    
                Console.ReadLine();
            }
        }
    }

    I'm using Process.NET to do the memory reading abstraction and I have managed to successfully grab some offsets via IDA (in this case in game and release date). As far as I can see the object manager is located at 0x2CFF7E8:

    idadump.PNG

    When I run my code, it looks like I'm not really getting any object data back. I don't get a second iteration on my while loop and I see the following in the debugger:

    debugcapture.png

    These ads disappear when you log in.

  2. #2
    Jadd's Avatar 🐸 Premium Seller
    Reputation
    1479
    Join Date
    May 2008
    Posts
    2,413
    Thanks G/R
    79/306
    Trade Feedback
    0 (0%)
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    You're reading pointers as int (32 bit). Use IntPtr (64 bit).

  3. #3
    Reghero's Avatar Member
    Reputation
    5
    Join Date
    Jun 2017
    Posts
    26
    Thanks G/R
    19/4
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Jadd View Post
    You're reading pointers as int (32 bit). Use IntPtr (64 bit).
    Thanks for the response, appreciate it.

    Feeling like I'm pretty close at this point, I've got the loop iterating what seems like a plausible amount of times (>70 in Elwynn) but unfortunately the properties aren't getting filled correctly. I imagine this is either a problem with my offsets for the unit struct or I've got confused again on the addresses that need to be read.

    My understanding at a high level to get the data I need:

    • Query base address + object manager offset
    • Query object manager address (retrieved from previous step) + first item offset
    • Each individual entity needs to query current address (object manager + first item in the first pass then current item address + next item offset after the initial iteration)
    • Finally each property needs to query item base address + property offset


    So my object manager looks like this now:

    Code:
    using Process.NET;
    using System;
    
    namespace WoWTestConsole
    {
        public class ObjectManager
        {
            private const int ObjManager = 0x2CFF7E8;
            private const int firstObjectOffset = 0x18;                                          
            private const int nextObjectOffset = 0x70;
            private readonly IProcess process;
            private IntPtr objManagerAddress;
    
            public ObjectManager(IProcess process)
            {
                this.process = process;
                var basePointer = process[process.ModuleFactory.MainModule.BaseAddress];
                // Step one: read the address of the object manager
                this.objManagerAddress = basePointer.Read<IntPtr>(ObjManager);
            }
    
            public void Pulse()
            {
                var count = 1;
                // Step two: Read the first object by using object manager address (Retrieved in step one) added to the first object offset
                var CurrentObject = new WowObject(this.process, this.process[objManagerAddress].Read<IntPtr>(firstObjectOffset));
                // Step four: Each WowObject needs to query its base address + property offset to fill related information
                Console.WriteLine($"GUID: {CurrentObject.Guid} Type: {CurrentObject.Type} X: {CurrentObject.XPosition} Y: {CurrentObject.YPosition} Z: {CurrentObject.ZPosition}");
    
                while (CurrentObject.BaseAddress.ToInt64() != 0 && CurrentObject.BaseAddress.ToInt64() % 2 == 0)
                {
                    ++count;
                    Console.WriteLine($"GUID: {CurrentObject.Guid} Type: {CurrentObject.Type} X: {CurrentObject.XPosition} Y: {CurrentObject.YPosition} Z: {CurrentObject.ZPosition}");
                    // Step four: Each iteration indicates another object in the list, update the existing WowObject with the new 'base' address which populates the object
                    CurrentObject.BaseAddress = this.process[CurrentObject.BaseAddress].Read<IntPtr>(nextObjectOffset);
                }
    
                Console.WriteLine($"Total: {count}");
            }
        }
    }
    And my WowObject, shamelessly adapted from this great tutorial https://www.ownedcore.com/forums/wor...e-objects.html ([Guide-kind of] How I handle objects.):


    Code:
    using Process.NET;
    using Process.NET.Memory;
    using System;
    
    namespace WoWTestConsole
    {
        class WowObject
        {
            protected const int GuidOffset = 0x68,
                TypeOffset = 0x20,
                XPositionOffset = 0x1600,
                YPositionOffset = 0x1604,
                ZPositionOffset = 0x1608,
                RotationOffset = 0x1610,
                DescriptorFieldsOffset = 0x10;
            protected IntPtr baseAddress;
            private IProcess wowProcess;
    
            public WowObject(IProcess wowProcess, IntPtr baseAddress)
            {
                this.wowProcess = wowProcess;
                this.baseAddress = baseAddress;
            }
    
            public IntPtr BaseAddress
            {
                get { return baseAddress; }
                set { baseAddress = value; }
            }
            public uint DescriptorFields
            {
                get { return this.wowProcess.Memory.Read<uint>(this.baseAddress + DescriptorFieldsOffset); }
            }
            public int Type
            {
                get { return this.wowProcess.Memory.Read<int>(this.baseAddress + TypeOffset); }
            }
            public virtual ulong Guid
            {
                get { return this.wowProcess.Memory.Read<ulong>(this.baseAddress + GuidOffset); }
                set { return; }
            }
            public virtual float XPosition
            {
                get { return this.wowProcess.Memory.Read<float>(this.baseAddress + XPositionOffset); }
            }
            public virtual float YPosition
            {
                get { return this.wowProcess.Memory.Read<float>(this.baseAddress + YPositionOffset); }
            }
            public virtual float ZPosition
            {
                get { return this.wowProcess.Memory.Read<float>(this.baseAddress + ZPositionOffset); }
            }
            public float Rotation
            {
                get { return this.wowProcess.Memory.Read<float>(this.baseAddress + RotationOffset); }
            }
        }
    }
    Console output:

    Code:
    GUID: 3129079270912 Type: 544145665 X: 0 Y: 0 Z: 0
    GUID: 3129079270912 Type: 544145665 X: 0 Y: 0 Z: 0
    GUID: 3130144080104 Type: 1180631297 X: 0 Y: 0 Z: 0
    GUID: 3130144082996 Type: 1229717761 X: 0 Y: 0 Z: 0
    GUID: 3130144085888 Type: 1413677313 X: 0 Y: 0 Z: 0
    GUID: 3130144088780 Type: 1330053377 X: 0 Y: 0 Z: 0
    GUID: 3130144091672 Type: 1112342785 X: 0 Y: 0 Z: 0
    GUID: 3130144094564 Type: 1514733825 X: 0 Y: 0 Z: 0
    GUID: 3130144097456 Type: 1112080641 X: 1.649503E-33 Y: 1.788452E+22 Z: 1.16214E+27
    GUID: 3130144100348 Type: 1285 X: 82.9845 Y: 3.492662 Z: 0
    GUID: 3130145849720 Type: 771 X: 82.2425 Y: 2.555234 Z: 0
    GUID: 3129267769720 Type: 771 X: 83.26364 Y: 1.972222 Z: 0
    GUID: 3129267830376 Type: 771 X: 88.32117 Y: 2.983842 Z: 0
    GUID: 3129267891032 Type: 771 X: 81.84907 Y: 4.39823 Z: 0
    GUID: 3129267951688 Type: 771 X: 81.84907 Y: 3.316126 Z: 0
    GUID: 3129268012344 Type: -1868168445 X: 83.20594 Y: 0.8900492 Z: 0
    GUID: 3129268073000 Type: -597228797 X: 88.6332 Y: 1.452222 Z: 0
    GUID: 3129268133656 Type: 771 X: 81.83276 Y: 2.740167 Z: 0
    GUID: 3129268194312 Type: 771 X: 81.84091 Y: 3.787364 Z: 0
    GUID: 3129268254968 Type: 771 X: 83.58013 Y: 2.739166 Z: 0
    GUID: 3129268315624 Type: 771 X: 81.45264 Y: 0.1633872 Z: 0
    GUID: 3129268376280 Type: 771 X: 87.31973 Y: 3.250553 Z: 0
    GUID: 3129268436936 Type: -1868168445 X: 80.84894 Y: 0 Z: 0
    GUID: 3129268497592 Type: -561052925 X: 89.14816 Y: 5.823835 Z: 0
    GUID: 3129268558248 Type: 771 X: 88.86063 Y: 2.247523 Z: 0
    GUID: 3129268618904 Type: 1542 X: -8884.085 Y: -157.2881 Z: 81.92499
    GUID: 3130493170056 Type: 771 X: 85.37989 Y: 3.987371 Z: 0
    GUID: 3129268679560 Type: 771 X: 91.50175 Y: 2.276261 Z: 0
    GUID: 3129265672536 Type: 1157628675 X: 91.80282 Y: 2.90218 Z: 0
    GUID: 3129265733192 Type: 771 X: 82.02228 Y: 2.042035 Z: 0
    GUID: 3129265793848 Type: 771 X: 84.36111 Y: 4.43652 Z: 0
    GUID: 3129265854504 Type: -1868167674 X: -8913.951 Y: -183.9127 Z: 81.92499
    GUID: 3130493171528 Type: 771 X: 85.39066 Y: 0.9184512 Z: 0
    GUID: 3129265915160 Type: -539687418 X: -8891.97 Y: -163.2046 Z: 113.1208
    GUID: 3130493173000 Type: 1684931331 X: 77.70555 Y: 0.816177 Z: 0
    GUID: 3129265975816 Type: 1542 X: -8913.908 Y: -192.0233 Z: 89.15115
    GUID: 3130493174472 Type: -1868167674 X: -8906.356 Y: -184.1671 Z: 113.1208
    GUID: 3130493175944 Type: 771 X: 84.06469 Y: 1.935534 Z: 0
    GUID: 3129266036472 Type: -64765 X: 86.87924 Y: 0.6806 Z: 0
    GUID: 3129266097128 Type: 771 X: 94.32477 Y: 2.146964 Z: 0
    GUID: 3129266157784 Type: -536148474 X: -8876.56 Y: -172.6524 Z: 89.28945
    GUID: 3130493177416 Type: 771 X: 94.88192 Y: 1.429082 Z: 0
    GUID: 3129266218440 Type: 1542 X: -8875.456 Y: -173.8214 Z: 81.94212
    GUID: 3130493178888 Type: 771 X: 80.6498 Y: 6.26312 Z: 0
    GUID: 3129266279096 Type: 771 X: 80.58879 Y: 2.792527 Z: 0
    GUID: 3129266339752 Type: -16776445 X: 80.71272 Y: 3.347431 Z: 0
    GUID: 3129266400408 Type: 771 X: 83.6847 Y: 3.651536 Z: 0
    GUID: 3129266461064 Type: -1868167674 X: -8900.188 Y: -197.7894 Z: 89.15115
    GUID: 3130493180360 Type: 771 X: 86.62246 Y: 3.450835 Z: 0
    GUID: 3129266521720 Type: 771 X: 113.1574 Y: 0.8726646 Z: 0
    GUID: 3129266582376 Type: 771 X: 80.59946 Y: 2.268928 Z: 0
    GUID: 3129268818312 Type: 771 X: 80.51304 Y: 2.268928 Z: 0
    GUID: 3129268878968 Type: 771 X: 76.70776 Y: 1.773282 Z: 0
    GUID: 3129268939624 Type: 771 X: 83.96982 Y: 2.293123 Z: 0
    GUID: 3129269000280 Type: 771 X: 80.20529 Y: 0.9599311 Z: 0
    GUID: 3129269060936 Type: 1542 X: -1.411658E+07 Y: -1.410786E+07 Z: -9999859
    GUID: 3130493181832 Type: -1868168445 X: 75.36667 Y: 2.505967 Z: 0
    GUID: 3129269121592 Type: -595000573 X: 82.22149 Y: 1.151079 Z: 0
    GUID: 3129269182248 Type: 1542 X: -8921.529 Y: -210.1752 Z: 89.16023
    GUID: 3130493183304 Type: -1868167674 X: -8884.241 Y: -189.2897 Z: 81.94212
    GUID: 3130493184776 Type: -597948922 X: -8766.506 Y: 402.7055 Z: 103.8665
    GUID: 3130493186248 Type: 771 X: 83.06024 Y: 3.500892 Z: 0
    GUID: 3129269242904 Type: 1542 X: -6.569183E-29 Y: 1.020145E-42 Z: 0
    GUID: 3130493187720 Type: -1868167674 X: 7.006492E-45 Y: 3.447194E-43 Z: -6.569183E-29
    GUID: 3130493189192 Type: 771 X: 82.12551 Y: 6.056293 Z: 0
    GUID: 3129269303560 Type: 1542 X: -6.569183E-29 Y: 1.020145E-42 Z: -4.223856E+19
    Total: 66

  4. #4
    Razzue's Avatar Contributor
    CoreCoins Purchaser
    Reputation
    83
    Join Date
    Jun 2017
    Posts
    314
    Thanks G/R
    73/69
    Trade Feedback
    1 (100%)
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)
    Seems to work alright for me..
    Code:
    if (c.Attach())
                    {
                        Console.WriteLine($"Module Base: 0x{Client.BaseModule}");
                        var currentManager = (Client.BaseModule + 0x2CFF7E8).Read<IntPtr>();
                        Console.WriteLine($"CurMgr: 0x{currentManager.ToString("X")}");
    
                        if (currentManager.NotZero())
                        {
                            var currentObj_base = (currentManager + 0x1B8).Read<IntPtr>();
                            Console.WriteLine($"First Obj: 0x{currentObj_base.ToString("X")}");
    
                            var nextObj_base = (currentObj_base + 0x70).Read<IntPtr>();
                            Console.WriteLine($"Next Obj: 0x{nextObj_base.ToString("X")}");
    
                            var counter = 0;
                            while (nextObj_base.ToInt64() % 2 == 0 && nextObj_base != IntPtr.Zero)
                            {
                                Console.WriteLine($"Counter: {counter} | " +
                                                  $"GUID: 0x{(nextObj_base + 0x58).Read<_guid>().high.ToString("X")} | " +
                                                  $"Type: {(nextObj_base + 0x20).Read<byte>()}");
    
                                if ((nextObj_base + 0x20).Read<byte>() == 5)
                                {
                                    var X = (nextObj_base + 0x1600).Read<float>();
                                    var Y = (nextObj_base + (0x1600 + 0x4)).Read<float>();
                                    var Z = (nextObj_base + (0x1600 + 0x8)).Read<float>();
                                    Console.WriteLine($"Pointer: {(nextObj_base + 0x70).Read<IntPtr>().ToString("X")} |" +
                                                      $" 0x{nextObj_base.ToString("X")} | {X} : {Y} : {Z}");
                                }
                                counter++;
                                nextObj_base = (nextObj_base + 0x70).Read<IntPtr>();
                            }
                        }
                    }
    Code:
    Module Base: 0x140701457907712
    CurMgr: 0x1E7B24DE480
    First Obj: 0x1E7E8B06098
    Next Obj: 0x1E7E8B0554C
    Counter: 0 | GUID: 0x4494F241 | Type: 1
    Counter: 1 | GUID: 0x4494F243 | Type: 1
    Counter: 2 | GUID: 0x4494F244 | Type: 1
    Counter: 3 | GUID: 0x4494F247 | Type: 1
    Counter: 4 | GUID: 0x4494F249 | Type: 1
    Counter: 5 | GUID: 0x4494F24B | Type: 1
    Counter: 6 | GUID: 0x4494F251 | Type: 1
    Counter: 7 | GUID: 0x4494F254 | Type: 1
    Counter: 8 | GUID: 0x4494F257 | Type: 1
    Counter: 9 | GUID: 0x4494F258 | Type: 1
    Counter: 10 | GUID: 0x4494F259 | Type: 1
    Counter: 11 | GUID: 0x4494F25A | Type: 1
    Counter: 12 | GUID: 0x4494F25B | Type: 1
    Counter: 13 | GUID: 0x4494F25C | Type: 1
    Counter: 14 | GUID: 0x449586E0 | Type: 1
    Counter: 15 | GUID: 0x449586E1 | Type: 1
    Counter: 16 | GUID: 0x4494F25D | Type: 2
    Counter: 17 | GUID: 0x45818A26 | Type: 1
    Counter: 18 | GUID: 0x4494F25E | Type: 2
    Counter: 19 | GUID: 0x4494F260 | Type: 2
    Counter: 20 | GUID: 0x4494F261 | Type: 2
    Counter: 21 | GUID: 0x55FBAA6E | Type: 1
    Counter: 22 | GUID: 0x534A2BEB | Type: 1
    Counter: 23 | GUID: 0x4580B3E4 | Type: 1
    Counter: 24 | GUID: 0x458111DB | Type: 1
    Counter: 25 | GUID: 0x458182D9 | Type: 1
    Counter: 26 | GUID: 0x4581F2DF | Type: 1
    Counter: 27 | GUID: 0x45822267 | Type: 1
    Counter: 28 | GUID: 0x4494F262 | Type: 1
    Counter: 29 | GUID: 0x449586D4 | Type: 1
    Counter: 30 | GUID: 0x449586D6 | Type: 1
    Counter: 31 | GUID: 0x53414093 | Type: 1
    Counter: 32 | GUID: 0x449586D8 | Type: 1
    Counter: 33 | GUID: 0x5344476C | Type: 1
    Counter: 34 | GUID: 0x5344B590 | Type: 1
    Counter: 35 | GUID: 0x4768F666 | Type: 1
    Counter: 36 | GUID: 0x2717734 | Type: 5
    Pointer: 1E7B74F7CC0 | 0x1E7E8C9E110 | 89.53474 : 4.785393 : -1.23099
    Counter: 37 | GUID: 0x46BD7D | Type: 3
    Counter: 38 | GUID: 0x4579D268 | Type: 1
    Counter: 39 | GUID: 0x457CB01D | Type: 1
    Counter: 40 | GUID: 0x528984 | Type: 3
    Counter: 41 | GUID: 0x3528984 | Type: 3
    Counter: 42 | GUID: 0x528980 | Type: 3
    Counter: 43 | GUID: 0x528973 | Type: 6
    Counter: 44 | GUID: 0x1D28985 | Type: 3
    Counter: 45 | GUID: 0x1528983 | Type: 3
    Counter: 46 | GUID: 0xD28985 | Type: 3
    Counter: 47 | GUID: 0x528973 | Type: 6
    Counter: 48 | GUID: 0x2D28987 | Type: 3
    Counter: 49 | GUID: 0xD28987 | Type: 3
    Counter: 50 | GUID: 0x528976 | Type: 6
    Counter: 51 | GUID: 0x2D28985 | Type: 3
    Counter: 52 | GUID: 0x528985 | Type: 3
    Counter: 53 | GUID: 0x528983 | Type: 3
    Counter: 54 | GUID: 0xD28980 | Type: 3
    Counter: 55 | GUID: 0xD28984 | Type: 3
    Counter: 56 | GUID: 0x528984 | Type: 3
    Counter: 57 | GUID: 0x528980 | Type: 3
    Counter: 58 | GUID: 0x528985 | Type: 3
    Counter: 59 | GUID: 0x528976 | Type: 6
    Counter: 60 | GUID: 0x528976 | Type: 6
    Counter: 61 | GUID: 0x528976 | Type: 6
    Counter: 62 | GUID: 0x3528987 | Type: 3
    Counter: 63 | GUID: 0x528986 | Type: 3
    Counter: 64 | GUID: 0x528986 | Type: 3
    Counter: 65 | GUID: 0x1528984 | Type: 3
    Counter: 66 | GUID: 0x1D28984 | Type: 3
    Counter: 67 | GUID: 0x2528987 | Type: 3
    Counter: 68 | GUID: 0x1528985 | Type: 3
    Counter: 69 | GUID: 0x528980 | Type: 3
    Counter: 70 | GUID: 0x52FB34 | Type: 3
    Counter: 71 | GUID: 0xD2FB34 | Type: 3
    Counter: 72 | GUID: 0x528973 | Type: 6
    Counter: 73 | GUID: 0x528973 | Type: 6
    Counter: 74 | GUID: 0x528976 | Type: 6
    Counter: 75 | GUID: 0x2D28980 | Type: 3
    Counter: 76 | GUID: 0x528976 | Type: 6
    Counter: 77 | GUID: 0x528976 | Type: 6
    Counter: 78 | GUID: 0x528976 | Type: 6
    Counter: 79 | GUID: 0x528980 | Type: 3
    Counter: 80 | GUID: 0x528976 | Type: 6
    Counter: 81 | GUID: 0x528983 | Type: 3
    Counter: 82 | GUID: 0x528980 | Type: 3
    Counter: 83 | GUID: 0x528976 | Type: 6
    Counter: 84 | GUID: 0x528985 | Type: 3
    Counter: 85 | GUID: 0x528980 | Type: 6
    Counter: 86 | GUID: 0x2528984 | Type: 3
    Counter: 87 | GUID: 0x528980 | Type: 3
    Counter: 88 | GUID: 0x2D28984 | Type: 3
    Counter: 89 | GUID: 0x528976 | Type: 6
    Counter: 90 | GUID: 0x528983 | Type: 3
    Counter: 91 | GUID: 0x528986 | Type: 3
    Counter: 92 | GUID: 0xD28986 | Type: 3
    Counter: 93 | GUID: 0x528976 | Type: 6
    Counter: 94 | GUID: 0x528976 | Type: 6
    Counter: 95 | GUID: 0x2528983 | Type: 3
    Counter: 96 | GUID: 0x528976 | Type: 6
    Counter: 97 | GUID: 0x528980 | Type: 3
    Counter: 98 | GUID: 0x528980 | Type: 3
    Counter: 99 | GUID: 0x1D28983 | Type: 3
    Counter: 100 | GUID: 0x528985 | Type: 3
    Counter: 101 | GUID: 0x2528986 | Type: 3
    Counter: 102 | GUID: 0x528980 | Type: 3
    Counter: 103 | GUID: 0x528973 | Type: 6
    Counter: 104 | GUID: 0x2528980 | Type: 3
    Counter: 105 | GUID: 0x528976 | Type: 6
    Counter: 106 | GUID: 0x528976 | Type: 6
    Counter: 107 | GUID: 0x528986 | Type: 3
    Counter: 108 | GUID: 0x528976 | Type: 6
    Counter: 109 | GUID: 0x528976 | Type: 6
    Counter: 110 | GUID: 0x528973 | Type: 6
    Counter: 111 | GUID: 0x4528980 | Type: 3
    Counter: 112 | GUID: 0x4D28980 | Type: 3
    Counter: 113 | GUID: 0x1D28986 | Type: 3
    Counter: 114 | GUID: 0x1528983 | Type: 3
    Counter: 115 | GUID: 0x3D28984 | Type: 3
    Counter: 116 | GUID: 0x528973 | Type: 6
    Counter: 117 | GUID: 0x528986 | Type: 3
    Counter: 118 | GUID: 0x3528983 | Type: 3
    Counter: 119 | GUID: 0x528987 | Type: 3
    Counter: 120 | GUID: 0x528985 | Type: 3
    Counter: 121 | GUID: 0x528984 | Type: 3
    Counter: 122 | GUID: 0x53D19C | Type: 3
    Counter: 123 | GUID: 0xD28983 | Type: 3
    Counter: 124 | GUID: 0x528983 | Type: 3
    Counter: 125 | GUID: 0xD28985 | Type: 3
    Counter: 126 | GUID: 0x22EF2AA | Type: 4

  5. Thanks Reghero (1 members gave Thanks to Razzue for this useful post)
  6. #5
    scimmy's Avatar Active Member Authenticator enabled
    Reputation
    44
    Join Date
    Jul 2020
    Posts
    36
    Thanks G/R
    1/25
    Trade Feedback
    0 (0%)
    Mentioned
    3 Post(s)
    Tagged
    0 Thread(s)
    Looks like your offsets are a bit off too. For example your code shows GUID at offset 0x68, even though its 0x58 on TBCC right now. I believe your type offset is correct, but I can't say about position or rotation as I'm calling vtable functions to get that data.

  7. Thanks Reghero (1 members gave Thanks to scimmy for this useful post)
  8. #6
    charles420's Avatar Contributor
    Reputation
    279
    Join Date
    Jun 2009
    Posts
    264
    Thanks G/R
    15/88
    Trade Feedback
    0 (0%)
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)
    Code:
    
    
            /// <summary>
            /// ObjectManager
            /// </summary>
            internal enum ObjectManager
            {
                CurMgrPointer = 0x2CFF7E8,
                LocalPlayerGUID = 0x2BD9B40,
                TargetGUID = 0x2AEA090,
                PetGUID = 0x0,
                StorageField = 0x10 ,
                ObjectType = 0x20 ,
                NextObject = 0x70 ,
                FirstObject = 0x18 ,
                LocalGUID = 0x58 ,
            }
    
    
            /// <summary>
            /// WowObject 
            /// </summary>
            internal enum WowObject
            {
                X =  0x1600,
                Y =  X + 0x4,
                Z =  X + 0x8,
                RotationOffset =  X + 0x10,
                Pitch =  X + 0x14,
                GameObjectX =  0x1B0,
                GameObjectY =  GameObjectX + 0x4,
                GameObjectZ =  GameObjectX + 0x8,
                GameObjectRotation =  GameObjectX + 0x10,
                TransportGUID =  0x15F0,
            }

  9. Thanks Razzue, Reghero (2 members gave Thanks to charles420 for this useful post)
  10. #7
    Reghero's Avatar Member
    Reputation
    5
    Join Date
    Jun 2017
    Posts
    26
    Thanks G/R
    19/4
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Thanks for the responses.

    I do get the feeling I haven't quite hit the mark on the offsets or perhaps my additions are wrong somewhere. I'm fairly confident that my actual code to loop the gameobjects is OK as I have run from Elwynn to Stormwind and I went from looping 70 objects to around 200 or so. This to me feels like a good indication that that area is OK.

    I spent most of last night scouring the forums for examples from the old days (2.4.3) to see what the object structs look like and I can't seem to find anything wrong with the proposed offsets.

    Currently I'm getting a funny issue of having my guid match with a GameObject:

    wowgameobject.png

    Code:
    using Process.NET;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using WoWTestConsole.Models;
    
    namespace WoWTestConsole
    {
        public class ObjectManager
        {
            private const int ObjManager = 0x2CFF7E8;
            private const int firstObjectOffset = 0x18;                                          
            private const int nextObjectOffset = 0x70;
            private readonly IProcess process;
            private IntPtr objManagerAddress;
            private Guid localGuid;
    
            public ObjectManager(IProcess process)
            {
                this.process = process;
                var basePointer = process[process.ModuleFactory.MainModule.BaseAddress];
                // Step one: read the address of the object manager
                this.objManagerAddress = basePointer.Read<IntPtr>(ObjManager);
                this.localGuid = basePointer.Read<Guid>(0x2BD9B40);
                Console.WriteLine($"My guid {this.localGuid}");
                Console.WriteLine($"CurMgr: 0x{objManagerAddress.ToString("X")}");
            }
    
            public void Pulse()
            {
                var count = 0;
                // Step two: Read the first object by using object manager address (Retrieved in step one) added to the first object offset
                var CurrentObject = new WowObject(this.process, this.process[objManagerAddress].Read<IntPtr>(firstObjectOffset));
                // Step four: Each WowObject needs to query its base address + property offset to fill related information
                Console.WriteLine($"GUID: {CurrentObject.Guid} Type: {CurrentObject.Type} X: {CurrentObject.XPosition} Y: {CurrentObject.YPosition} Z: {CurrentObject.ZPosition}");
                var players = new List<PlayerObject>();
                var npcs = new List<NpcObject>();
                while (CurrentObject.BaseAddress.ToInt64() != 0 && CurrentObject.BaseAddress.ToInt64() % 2 == 0)
                {
                    if (CurrentObject.Guid == this.localGuid)
                    {
                        // This appears to match my guid with an game item??
                        Console.WriteLine("Match");
                    }
    
                    ++count;
                    //Console.WriteLine($"Base: 0x{CurrentObject.BaseAddress.ToString("X")} | Descriptors: 0x{CurrentObject.DescriptorFields.ToString("X")} Type: {CurrentObject.Type} X: {CurrentObject.XPosition} Y: {CurrentObject.YPosition} Z: {CurrentObject.ZPosition}");
                    // Step four: Each iteration indicates another object in the list, update the existing WowObject with the new 'base' address which populates the object
                    if (CurrentObject.Type == ObjectType.Unit)  // a npc
                    {
                        var npc = new NpcObject(this.process, CurrentObject.BaseAddress);
                        Console.WriteLine($"NPC - Name: {npc.Name} Health: {npc.CurrentHealth} Mana: {npc.CurrentMana} Level: {npc.Level}");
                        npcs.Add(npc);
                    }
                    if (CurrentObject.Type == ObjectType.Player) // a player
                    {
                        var player = new PlayerObject(this.process, CurrentObject.BaseAddress);
                        Console.WriteLine($"Player - Guid: {player.Guid} Health: {player.CurrentHealth} Mana: {player.CurrentMana} Level: {player.Level}");
                        players.Add(player);
                    }
    
                    CurrentObject.BaseAddress = this.process[CurrentObject.BaseAddress].Read<IntPtr>(nextObjectOffset);
                }
    
                //Step five: let's try and find ourself in the local player list
                var localPlayer = players.Where(x => x.Guid == this.localGuid).FirstOrDefault();
                var myMana = npcs.Where(x => x.CurrentMana == 190);
                Console.WriteLine($"Total: {count}");
                Console.ReadLine();
            }
        }
    }
    Code:
    using Process.NET;
    using Process.NET.Memory;
    using System;
    using WoWTestConsole.Models;
    
    namespace WoWTestConsole
    {
        class WowObject
        {
            protected const int GuidOffset = 0x58,
                TypeOffset = 0x20,
                XPositionOffset = 0x1600,
                YPositionOffset = XPositionOffset + 0x4,
                ZPositionOffset = XPositionOffset + 0x8,
                RotationOffset = XPositionOffset + 0x10,
                DescriptorFieldsOffset = 0x10;
            protected IntPtr baseAddress;
            protected IProcess wowProcess;
    
            public WowObject(IProcess wowProcess, IntPtr baseAddress)
            {
                this.wowProcess = wowProcess;
                this.baseAddress = baseAddress;
    
            }
    
            public IntPtr BaseAddress
            {
                get { return baseAddress; }
                set { baseAddress = value; }
            }
            public IntPtr DescriptorFields
            {
                get { return this.wowProcess.Memory.Read<IntPtr>(this.baseAddress + DescriptorFieldsOffset); }
            }
            public ObjectType Type
            {
                get { return (ObjectType)this.wowProcess.Memory.Read<byte>(this.baseAddress + TypeOffset); }
            }
            public virtual Guid Guid
            {
                get { return this.wowProcess.Memory.Read<Guid>(this.baseAddress + GuidOffset); }
                set { return; }
            }
            public virtual float XPosition
            {
                get { return this.wowProcess.Memory.Read<float>(this.baseAddress + XPositionOffset); }
            }
            public virtual float YPosition
            {
                get { return this.wowProcess.Memory.Read<float>(this.baseAddress + YPositionOffset); }
            }
            public virtual float ZPosition
            {
                get { return this.wowProcess.Memory.Read<float>(this.baseAddress + ZPositionOffset); }
            }
            public float Rotation
            {
                get { return this.wowProcess.Memory.Read<float>(this.baseAddress + RotationOffset); }
            }
        }
    }
    Code:
    using Process.NET;
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;
    
    namespace WoWTestConsole.Models
    {
        class CreatureObject : WowObject
        {
            protected const int LevelOffset = 0x134,
                CurrentHealthOffset = 0xDC,
                MaxHealthOffset = 0xFC,
                CurrentManaOffset = 0xE4,
                MaxManaOffset = 0x104,
                TargetGuidOffset = 0x9C;
    
            public CreatureObject(IProcess wowProcess, IntPtr baseAddress)
                : base(wowProcess, baseAddress)
            { 
            }
    
            public float Pitch
            {
                get { return this.wowProcess.Memory.Read<float>(this.wowProcess.Memory.Read<IntPtr>(baseAddress + 0x17B8) + 0xE0); }
            }
            public ulong TargetGuid
            {
                get { return this.wowProcess.Memory.Read<ulong>(DescriptorFields + TargetGuidOffset); }
            }
            public int Level
            {
                get { return this.wowProcess.Memory.Read<int>(DescriptorFields + LevelOffset); }
            }
            public int CurrentHealth
            {
                get { return this.wowProcess.Memory.Read<int>(DescriptorFields + CurrentHealthOffset); }
            }
            public int MaxHealth
            {
                get { return this.wowProcess.Memory.Read<int>(DescriptorFields + MaxHealthOffset); }
            }
            public int CurrentMana
            {
                get { return this.wowProcess.Memory.Read<int>(DescriptorFields + CurrentManaOffset); }
            }
            public int MaxMana
            {
                get { return this.wowProcess.Memory.Read<int>(DescriptorFields + MaxManaOffset); }
            }
            public int HealthPercent
            {
                get
                {
                    double percentage = CurrentHealth / MaxHealth;
                    percentage = percentage * 100;
                    return (int)Math.Round(percentage);
                }
            }
        }
    }
    Code:
    enum ObjectType : int
        {
            Object = 0,
            Item = 1,
            Container = 2,
            Unit = 3,
            Player = 4,
            GameObject = 5,
            DynamicObject = 6,
            Corpse = 7,
            AreaTrigger = 8,
            SceneObject = 9,
            NumClientObjectTypes = 0xA
        }
    As a side point, it's pretty amazing reading through some of the early 2009 onwards content in this forum, I've spent the majority of the last few evenings trying to work through this and it's incredibly addictive!

    Charles420 - if you read this, would you be able to point me in the direction of any reading content to reverse the PlayerGUID? I was actually searching the forum last night trying to figure that out but most posts are just providing the GUID rather than explaining how it is actually retrieved.

  11. #8
    charles420's Avatar Contributor
    Reputation
    279
    Join Date
    Jun 2009
    Posts
    264
    Thanks G/R
    15/88
    Trade Feedback
    0 (0%)
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)
    dont mind the uint128 theres a guid class that gives more info off the guid you can use to im guessing that you are

    Code:
    for your object manager class 
     
    LocalGUID = ProcessMemory.Read<UInt128>(ProcessMemory.BaseAddress + (int)Pointers.ObjectManager.LocalPlayerGUID); // aka LocalPlayerGUID = 0x2BD9B40,
    
    or 
    
     //LocalGUID = ProcessMemory.Read<UInt128>(CurrentManager + (int)Pointers.ObjectManager.LocalGUID);     //        LocalGUID = 0x58 ,
    
    
    
    then for your wowobject 
    
    
    
            public virtual UInt128 GUID
            {
                get
                {
                    if (this.IsValid)
                    {
                        return GetValue<UInt128>(CGObjectData.CGObjectData_Guid); 
                    }
                    return ulong.MinValue;
                }
            }
    
    then in your loop to compare if (currentObject.GUID == LocalGUID)

  12. #9
    Razzue's Avatar Contributor
    CoreCoins Purchaser
    Reputation
    83
    Join Date
    Jun 2017
    Posts
    314
    Thanks G/R
    73/69
    Trade Feedback
    1 (100%)
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)
    just chucking this out there (Forgive the "bad code" if you think it is so xD)
    First... I use different object enums, not sure if it's actually correct but... "seems" to work alright?
    Code:
    enum class TypeId : uint8_t
    {
        CGObject = 0,
        CGItem = 1,
        CGContainer = 2,
        CGUnit = 3,
        CGPlayer = 4,
        CGActivePlayer = 5,
        CGGameObject = 6,
        CGDynamicObject = 7,
        CGCorpse = 8,
        CGAreaTrigger = 9,
        CGSceneObject = 10,
        CGConversation = 11,
        AIGroup = 12,
        Scenario = 13,
        Loot = 14,
        Invalid = 15// 17
    };
    To get player object I use a quick call:
    Code:
     public static IntPtr PlayerBase()
            {
                var ObjManager = V.Read<IntPtr>(V.ObjectManager);
                if (ObjManager == IntPtr.Zero) return IntPtr.Zero;
    
                var CurrentObj_Base = V.Read<IntPtr>(ObjManager + 0x18);
                var NextObject_Base = V.Read<IntPtr>(CurrentObj_Base + 0x70);
    
                var _PlayerGUID = V.Read<int>(V.PlayerGUID);
                if (NextObject_Base == IntPtr.Zero) return IntPtr.Zero;
    
                while (NextObject_Base.ToInt64() % 2 == 0 && NextObject_Base != IntPtr.Zero)
                {
                    var WowObj = V.Read<WowObject>(NextObject_Base);
                    if (WowObj.GUID.high == _PlayerGUID) return NextObject_Base;
                    NextObject_Base = V.Read<IntPtr>(NextObject_Base + 0x70);
                }
    
                return IntPtr.Zero;
            }
    And a couple explicit structs to read to (not sure if obj location fields are right, was from vanilla classic)
    Code:
    [StructLayout(LayoutKind.Explicit)]
        public struct WowObject
        {
            [FieldOffset(0x20)]
            public byte Type;
    
            [FieldOffset(0x58)]
            public _guid GUID;
    
            [FieldOffset(0x1600)]
            public float LocX;
    
            [FieldOffset(0x1604)]
            public float LocY;
    
            [FieldOffset(0x1608)]
            public float LocZ;
    
            [FieldOffset(0x1601)]
            public float Rotation;
    
            [FieldOffset(0x1614)]
            public float Pitch;
    
            [FieldOffset(0x1B0)]
            public float ObjLocX;
    
            [FieldOffset(0x1B4)]
            public float ObjLocY;
    
            [FieldOffset(0x1B8)]
            public float ObjLocZ;
        }
    
        [StructLayout(LayoutKind.Sequential)]
        public struct _guid
        {
            public readonly int high;
            public readonly int low;
        }
    Sorry for wall of text

    I'm also curious on how we go about getting some of the extra offsets Charles posts up xD (if he'd be willing to share that tidbit, IDA is NOT my forte, heh)

  13. #10
    charles420's Avatar Contributor
    Reputation
    279
    Join Date
    Jun 2009
    Posts
    264
    Thanks G/R
    15/88
    Trade Feedback
    0 (0%)
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)
    not sure exactly what offsets your looking for but

    all rebased rip welp was a patch as im doing this kek

    for objectmanager
    0x12C9E50
    u can search any string
    .rdata:0000000002528350 aObjectManagerL db 'Object manager list status: (use gmvision to see server onlys)',0
    .rdata:0000000002528350 ; DATA XREF: CCommand_ObjUsage:loc_12C9F9B↑o
    .rdata:000000000252838F align 10h
    .rdata:0000000002528390 aActiveObjectsU db ' Active objects: %u (%u visible)',0
    .rdata:0000000002528390 ; DATA XREF: CCommand_ObjUsage+15F↑o
    .rdata:00000000025283B7 align 8
    .rdata:00000000025283B8 aUnitsUGameobjs db ' Units: %u, GameObjs: %u Items: %u, Other: %u',0
    .rdata:00000000025283B8 ; DATA XREF: CCommand_ObjUsage+175↑o
    .rdata:00000000025283F1 align 8
    .rdata:00000000025283F8 aObjectsWaiting db ' Objects waiting to be freed: %u objects',0
    .rdata:00000000025283F8 ; DATA XREF: CCommand_ObjUsage+19B↑o

    Code:
    signed __int64 CCommand_ObjUsage()
    {
      int v0; // er14
      int v1; // ebp
      int v2; // er15
      int v3; // ebx
      int v4; // edi
      int v5; // esi
      __int64 v6; // rax
      BOOL v7; // edx
      __int64 v8; // rcx
      __int64 v9; // rax
      BOOL v10; // edx
      __int64 v11; // rcx
      unsigned int v12; // edx
      __int64 v13; // rdx
      __int64 v14; // rax
      BOOL v15; // edx
      __int64 v16; // rcx
      __int64 v17; // rdx
    
      v0 = 0;
      v1 = 0;
      v2 = 0;
      v3 = 0;
      v4 = 0;
      v5 = 0;
      v6 = *(CurMgrPointer + 0x1B8);
      v7 = v6 & 1 || !v6;
      v8 = 0i64;
      if ( !v7 )
        v8 = *(CurMgrPointer + 0x1B8);
      while ( !(v8 & 1) && v8 )
      {
        ++v0;
        v8 = *(*(CurMgrPointer + 0x1A8) + v8 + 8);
      }
      v9 = *(CurMgrPointer + 0x18);
      v10 = v9 & 1 || !v9;
      v11 = 0i64;
      if ( !v10 )
        v11 = *(CurMgrPointer + 0x18); 
      while ( !(v11 & 1) && v11 )
      {
        ++v1;
        v12 = dword_25100A0[*(v11 + 0x20)]; 
        if ( v12 & 6 )
        {
          ++v3;
        }
        else if ( (v12 >> 3) & 1 )
        {
          ++v4;
        }
        else if ( (v12 >> 6) & 1 )
        {
          ++v5;
        }
        v13 = *(*(CurMgrPointer + 8) + v11 + 8);
        if ( v13 & 1 || !v13 )
          v11 = 0i64;
        else
          v11 = *(*(CurMgrPointer + 8) + v11 + 8);
      }
      v14 = *(CurMgrPointer + 0x68);
      v15 = v14 & 1 || !v14;
      v16 = 0i64;
      if ( !v15 )
        v16 = *(CurMgrPointer + 0x68);
      while ( !(v16 & 1) && v16 )
      {
        ++v2;
        v17 = *(*(CurMgrPointer + 0x58) + v16 + 8);
        if ( v17 & 1 || !v17 )
          v16 = 0i64;
        else
          v16 = *(*(CurMgrPointer + 0x58) + v16 + 8);
      }
      sub_577CE0(7i64, "Object manager list status: (use gmvision to see server onlys)", CurMgrPointer, dword_25100A0);
      ConsoleWriteA(7i64, "    Active objects:    %u (%u visible)");
      ConsoleWriteA(7i64, "    Units: %u,   GameObjs: %u    Items: %u,    Other: %u");
      ConsoleWriteA(7i64, "    Objects waiting to be freed: %u objects");
      return 1i64;
    Last edited by charles420; 4 Weeks Ago at 02:59 PM.

  14. #11
    Reghero's Avatar Member
    Reputation
    5
    Join Date
    Jun 2017
    Posts
    26
    Thanks G/R
    19/4
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    I was just about to send through an example of what I was seeing and I noticed the patch too

    Objectmanager isn't too hard to find, it was more the PlayerGUID etc. Do you locate those through IDA as well?

  15. #12
    charles420's Avatar Contributor
    Reputation
    279
    Join Date
    Jun 2009
    Posts
    264
    Thanks G/R
    15/88
    Trade Feedback
    0 (0%)
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)
    ya i find everything in ida worst case i compare old versions i have labeled i have a script that dumps most offsets for me besides a few patterns broke i take that back i have a mod version of reclass i use to find struts like playername cach etc i was working on a list of all my offsets with a list of how to find each one in ida since alot of people spam me asking

  16. #13
    Reghero's Avatar Member
    Reputation
    5
    Join Date
    Jun 2017
    Posts
    26
    Thanks G/R
    19/4
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    So I have the new object manager offset at:

    Code:
    private const int ObjManager = 0x2D297C8;
            private const int firstObjectOffset = 0x18;                                          
            private const int nextObjectOffset = 0x70;
    I can only get a value at 0x68:

    Code:
    this.objManagerAddress = basePointer.Read<IntPtr>(ObjManager);
    this.localGuid = this.process[objManagerAddress].Read<ulong>(0x68);
    
    My guid: 3024378824124
    CurMgr: 0x2C030E56BD0
    0x58 gets me an odd value:

    Code:
    this.objManagerAddress = basePointer.Read<IntPtr>(ObjManager);
    this.localGuid = this.process[objManagerAddress].Read<ulong>(0x58);
    
    My guid: 56
    CurMgr: 0x2C030E56BD0

  17. #14
    charles420's Avatar Contributor
    Reputation
    279
    Join Date
    Jun 2009
    Posts
    264
    Thanks G/R
    15/88
    Trade Feedback
    0 (0%)
    Mentioned
    4 Post(s)
    Tagged
    0 Thread(s)
    read your guid as LocalGUID = ProcessMemory.Read<UInt128>(ProcessMemory.BaseAddress + (int)Pointers.ObjectManager.LocalPlayerGUID); // aka LocalPlayerGUID = 0x2BD9B40, well old offset
    ill toss new one in a sec after ida rebases
    and its not a ulong but a 128 unless you use the guid class what is recommend but im lazy
    Last edited by charles420; 4 Weeks Ago at 03:30 PM.

  18. #15
    Reghero's Avatar Member
    Reputation
    5
    Join Date
    Jun 2017
    Posts
    26
    Thanks G/R
    19/4
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by charles420 View Post
    read your guid as LocalGUID = ProcessMemory.Read<UInt128>(ProcessMemory.BaseAddress + (int)Pointers.ObjectManager.LocalPlayerGUID); // aka LocalPlayerGUID = 0x2BD9B40, well old offset
    ill toss new one in a sec after ida rebases
    and its not a ulong but a 128
    Sorry for the quick fire questions, feel free to point me to any documentation if I've missed something.

    Code:
    My guid: 8590069516
    CurMgr: 0x2C030E56BD0
    GUID: 4611686028273371393 Type: Item X: 0 Y: 0 Z: 0
    GUID: 4611686028273371393 | Type: Item
    GUID: 4611686028273371392 | Type: Item
    GUID: 4611686028273371388 | Type: Item
    GUID: 4611686028273371389 | Type: Item
    GUID: 4611686028273371390 | Type: Item
    GUID: 4611686028273371391 | Type: Item
    GUID: 4611686028273371394 | Type: Item
    GUID: 4611686028273371395 | Type: Item
    GUID: 56879180 | Type: GameObject
    GUID: 51150555 | Type: Player
    GUID: 71468261214603 | Type: Unit
    GUID: 71468261214603 | Type: Unit
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468328323468 | Type: Unit
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 47646550 | Type: Player
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214603 | Type: Unit
    GUID: 71468261214602 | Type: Unit
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 55275084 | Type: Player
    GUID: 71468261214603 | Type: Unit
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214603 | Type: Unit
    GUID: 43048800 | Type: Player
    GUID: 55000767 | Type: Player
    GUID: 52614667 | Type: Player
    GUID: 53274165 | Type: Player
    GUID: 52883938 | Type: Player
    GUID: 10934656028122927 | Type: Unit
    GUID: 53485442 | Type: Player
    GUID: 42035981 | Type: Player
    GUID: 54897784 | Type: Player
    GUID: 71468261214602 | Type: Unit
    GUID: 71468320096371 | Type: Unit
    GUID: 56093372 | Type: Player
    GUID: 71468261214604 | Type: Unit
    GUID: 71468261214602 | Type: Unit
    GUID: 71468261214602 | Type: Unit
    GUID: 71468311707763 | Type: Unit
    GUID: 53880813 | Type: Player
    GUID: 71468261214604 | Type: Unit
    GUID: 71468261214603 | Type: Unit
    GUID: 71468261214602 | Type: Unit
    GUID: 71468286541939 | Type: DynamicObject
    GUID: 71468286541939 | Type: DynamicObject
    GUID: 71468261214602 | Type: Unit
    GUID: 52010314 | Type: Player
    GUID: 56789411 | Type: Player
    GUID: 71468261214602 | Type: Unit
    GUID: 52913671 | Type: Player
    GUID: 48341714 | Type: Player
    GUID: 71468261214604 | Type: Unit
    GUID: 71468261214602 | Type: Unit
    GUID: 71468261214596 | Type: DynamicObject
    GUID: 71468261214604 | Type: Unit
    GUID: 71468261214597 | Type: DynamicObject
    GUID: 71468261214603 | Type: Unit
    GUID: 56114213 | Type: Player
    GUID: 71468303157643 | Type: DynamicObject
    GUID: 71468269764723 | Type: DynamicObject
    GUID: 71468269764723 | Type: DynamicObject
    GUID: 71468261214602 | Type: Unit
    GUID: 71468261214602 | Type: Unit
    GUID: 71468261448635 | Type: Unit
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214602 | Type: Unit
    GUID: 71468261214596 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468278153331 | Type: Unit
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 55148391 | Type: Player
    GUID: 71468286541939 | Type: Unit
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 54718421 | Type: Player
    GUID: 25657690 | Type: Player
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214603 | Type: Unit
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 53527602 | Type: Player
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214602 | Type: Unit
    GUID: 71468261214604 | Type: Unit
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214602 | Type: Unit
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214604 | Type: Unit
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 114447998566886 | Type: Unit
    GUID: 13803163 | Type: Player
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214604 | Type: Unit
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468319934860 | Type: Unit
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214602 | Type: Unit
    GUID: 71468261214604 | Type: Unit
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214602 | Type: Unit
    GUID: 71468261214602 | Type: Unit
    GUID: 71468261214604 | Type: Unit
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214602 | Type: Unit
    GUID: 71468261214602 | Type: Unit
    GUID: 71468261214604 | Type: Unit
    GUID: 71468269603212 | Type: Unit
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214602 | Type: Unit
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468277991819 | Type: Unit
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214604 | Type: Unit
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468294769036 | Type: Unit
    GUID: 71468303157644 | Type: Unit
    GUID: 71468336712076 | Type: Unit
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261366386 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214603 | Type: Unit
    GUID: 71468261214603 | Type: Unit
    GUID: 71468261214598 | Type: DynamicObject
    GUID: 71468261214604 | Type: DynamicObject
    GUID: 22600195 | Type: Player
    GUID: 50679253 | Type: Player
    GUID: 24368643 | Type: Player
    GUID: 86870013642492 | Type: Unit
    GUID: 55843311 | Type: Player
    GUID: 41003865 | Type: Player
    GUID: 50281207 | Type: Player
    GUID: 49661560 | Type: Player
    GUID: 56169181 | Type: Player
    GUID: 32616445 | Type: Player
    GUID: 56127130 | Type: Player
    GUID: 49124595 | Type: Player
    GUID: 52387617 | Type: Player
    GUID: 51496826 | Type: Player
    GUID: 71468261456280 | Type: Unit
    GUID: 80320188628794 | Type: Unit
    GUID: 53089837 | Type: Player
    GUID: 52876114 | Type: Player
    GUID: 71468261456458 | Type: Unit
    GUID: 54846532 | Type: Player
    GUID: 42686883 | Type: Player
    GUID: 40088445 | Type: Player
    GUID: 51582940 | Type: Player
    GUID: 71472555998591 | Type: Unit
    GUID: 56761152 | Type: Player
    GUID: 40134870 | Type: Player
    GUID: 38550997 | Type: Player
    GUID: 53703869 | Type: Player
    GUID: 55701834 | Type: Player
    GUID: 827 | Type: Player
    GUID: 51606662 | Type: Player
    GUID: 56503263 | Type: Player
    GUID: 56861453 | Type: Player
    GUID: 71468261456230 | Type: Unit
    GUID: 53780363 | Type: Player
    GUID: 53596936 | Type: Player
    GUID: 97869424755724 | Type: Unit
    GUID: 55394662 | Type: Player
    GUID: 32872220 | Type: Player
    GUID: 44379781 | Type: Player
    GUID: 45600289 | Type: Player
    GUID: 55164044 | Type: Player
    GUID: 55931975 | Type: Player
    GUID: 53901805 | Type: Player
    GUID: 51198640 | Type: Player
    GUID: 55548272 | Type: Player
    GUID: 56904064 | Type: Player
    GUID: 55197915 | Type: Player
    GUID: 30546906 | Type: Player
    GUID: 37500488 | Type: Player
    GUID: 56297388 | Type: Player
    GUID: 54670561 | Type: Player
    GUID: 1485856 | Type: Player
    GUID: 5981209 | Type: Player
    GUID: 41531522 | Type: Player
    GUID: 102392025386147 | Type: Unit
    GUID: 54114206 | Type: Player
    GUID: 29146718 | Type: Player
    GUID: 52995336 | Type: Player
    GUID: 56263534 | Type: Player
    GUID: 71472555984871 | Type: Unit
    GUID: 52551275 | Type: Player
    GUID: 54601790 | Type: Player
    GUID: 71468328484979 | Type: Unit
    GUID: 71468336873587 | Type: Unit
    GUID: 49060197 | Type: Player
    GUID: 51859817 | Type: Player
    GUID: 54962529 | Type: Player
    GUID: 56385317 | Type: Player
    GUID: 30113082 | Type: Player
    GUID: 22172685 | Type: Player
    GUID: 32609549 | Type: Player
    GUID: 71476850701509 | Type: Unit
    GUID: 28987167 | Type: Player
    GUID: 39252030 | Type: Player
    GUID: 56931208 | Type: Player
    GUID: 53726737 | Type: Player
    GUID: 55097255 | Type: Player
    GUID: 37693555 | Type: Player
    GUID: 47569410 | Type: Player
    GUID: 50718327 | Type: Player
    GUID: 71468261456890 | Type: DynamicObject
    GUID: 71468294769035 | Type: Unit
    GUID: 51677501 | Type: Player
    GUID: 56004343 | Type: Player
    GUID: 56649354 | Type: Player
    GUID: 39949345 | Type: Player
    GUID: 43805511 | Type: Player
    GUID: 53624028 | Type: Player
    GUID: 71476850486353 | Type: Unit
    GUID: 56898110 | Type: Player
    GUID: 54687201 | Type: Player
    GUID: 71468261214603 | Type: Unit
    GUID: 27867611 | Type: Player
    GUID: 51284486 | Type: Player
    GUID: 53468577 | Type: Player
    GUID: 52033488 | Type: Player
    GUID: 24046727 | Type: Player
    GUID: 50000263 | Type: Player
    GUID: 71498325051580 | Type: Unit
    GUID: 38419783 | Type: Player
    GUID: 55583079 | Type: Player
    GUID: 55660707 | Type: Player
    Total: 256
    I'm not in the object list

    Code is the same as previously linked in the thread. ObjectBaseAddress + 0x58

Page 1 of 3 123 LastLast

Similar Threads

  1. [Source] WPF Wow Object manager
    By [email protected]^^@! in forum WoW Memory Editing
    Replies: 11
    Last Post: 01-26-2010, 04:13 PM
  2. [WoW][3.2.0] Better Object Managment
    By Apoc in forum WoW Memory Editing
    Replies: 43
    Last Post: 01-01-2010, 07:23 AM
  3. WoW(classic) OST in BC
    By faisal_o in forum World of Warcraft General
    Replies: 5
    Last Post: 10-13-2007, 10:36 AM
  4. WoW Object Manager ?
    By discorly in forum WoW ME Questions and Requests
    Replies: 4
    Last Post: 07-28-2007, 06:34 PM
All times are GMT -5. The time now is 11:43 PM. Powered by vBulletin® Version 4.2.3
Copyright © 2021 vBulletin Solutions, Inc. All rights reserved. User Alert System provided by Advanced User Tagging (Pro) - vBulletin Mods & Addons Copyright © 2021 DragonByte Technologies Ltd.
Digital Point modules: Sphinx-based search