[Retail] How to get GameObjectFlags & GameObjectDynamicLowFlags? menu

User Tag List

Results 1 to 14 of 14
  1. #1
    cxmplexwow_'s Avatar Member CoreCoins Purchaser
    Reputation
    1
    Join Date
    Mar 2021
    Posts
    13
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    [Retail] How to get GameObjectFlags & GameObjectDynamicLowFlags?

    For GameObjectDynamicLowFlags:

    Code:
    local dynamicFlags = cxmplex:ObjectDynamicFlags(obj)
                -- local lowbits = bit.band(dynamicFlags, 0xFf)
                --                     local GameObjectDynamicLowFlags = {
                --                         GO_DYNFLAG_LO_HIDE_MODEL = 2, -- Object model is not shown with this flag
                --                         GO_DYNFLAG_LO_ACTIVATE = 4, -- enables interaction with GO
                --                         GO_DYNFLAG_LO_ANIMATE = 8, -- possibly more distinct animation of GO
                --                         GO_DYNFLAG_LO_NO_INTERACT = 16, -- appears to disable interaction (not fully verified)
                --                         GO_DYNFLAG_LO_SPARKLE = 32, -- makes GO sparkle
                --                         GO_DYNFLAG_LO_STOPPED = 64 -- Transport is stopped
                --                     }
    I tried getting the lowbits of the dynamic flags by and'ing it with 0xFF, but the value didnt seem to match any of the masks. Is gameobjectdynamiclowflags somewhere else?

    Does anyone know the field offset for GameObjectFlags or the descriptor offset? Is it a field instead? I'm trying to check game object flags for these masks:

    Code:
                                   --GO_FLAG_IN_USE = 0x00000001, -- disables interaction while animated
                --                 -- GO_FLAG_LOCKED = 0x00000002, -- require key, spell, event, etc to be opened. Makes "Locked" appear in tooltip
                --                 -- GO_FLAG_INTERACT_COND = 0x00000004, -- cannot interact (condition to interact - requires GO_DYNFLAG_LO_ACTIVATE to enable interaction clientside)
                --                 -- GO_FLAG_TRANSPORT = 0x00000008, -- any kind of transport? Object can transport (elevator, boat, car)
                --                 -- GO_FLAG_NOT_SELECTABLE = 0x00000010, -- not selectable even in GM mode
                --                 -- GO_FLAG_NODESPAWN = 0x00000020, -- never despawn, typically for doors, they just change state
                --                 -- GO_FLAG_AI_OBSTACLE = 0x00000040, -- makes the client register the object in something called AIObstacleMgr, unknown what it does
                --                 -- GO_FLAG_FREEZE_ANIMATION = 0x00000080,
                --                 -- -- for object types GAMEOBJECT_TYPE_GARRISON_BUILDING, GAMEOBJECT_TYPE_GARRISON_PLOT and GAMEOBJECT_TYPE_PHASEABLE_MO flag bits 8 to 12 are used as WMOAreaTable::NameSetID
                --                 -- GO_FLAG_DAMAGED = 0x00000200,
                --                 -- GO_FLAG_DESTROYED = 0x00000400,
                --                 -- GO_FLAG_INTERACT_DISTANCE_USES_TEMPLATE_MODEL = 0x00080000, -- client checks interaction distance from model sent in SMSG_QUERY_GAMEOBJECT_RESPONSE instead of GAMEOBJECT_DISPLAYID
                --                 -- GO_FLAG_MAP_OBJECT = 0x00100000 -- pre-7.0 model loading used to be controlled by file extension (wmo vs m2)

    [Retail] How to get GameObjectFlags & GameObjectDynamicLowFlags?
  2. #2
    charles420's Avatar Contributor
    Reputation
    315
    Join Date
    Jun 2009
    Posts
    329
    Thanks G/R
    25/119
    Trade Feedback
    0 (0%)
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)
    GO_FLAG_IN_USE = 0x00000001, //disables interaction while animated
    GO_FLAG_LOCKED = 0x00000002, //require key, spell, event, etc to be opened. Makes "Locked" appear in tooltip
    GO_FLAG_INTERACT_COND = 0x00000004, //cannot interact (condition to interact)
    GO_FLAG_TRANSPORT = 0x00000008, //any kind of transport? Object can transport (elevator, boat, car)
    GO_FLAG_NO_INTERACT = 0x00000010, //players cannot interact with this go
    GO_FLAG_NODESPAWN = 0x00000020, //never despawn, typically for doors, they just change state
    GO_FLAG_TRIGGERED = 0x00000040, //typically, summoned objects. Triggered by spell or other events

    are right


    CGGameObjectData_Flags = CGObjectData.CGObjectDataEnd + 9, // size 1 flags:

    wow classic that is
    Last edited by charles420; 03-09-2021 at 05:11 PM.

  3. #3
    cxmplexwow_'s Avatar Member CoreCoins Purchaser
    Reputation
    1
    Join Date
    Mar 2021
    Posts
    13
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by charles420 View Post
    GO_FLAG_IN_USE = 0x00000001, //disables interaction while animated
    GO_FLAG_LOCKED = 0x00000002, //require key, spell, event, etc to be opened. Makes "Locked" appear in tooltip
    GO_FLAG_INTERACT_COND = 0x00000004, //cannot interact (condition to interact)
    GO_FLAG_TRANSPORT = 0x00000008, //any kind of transport? Object can transport (elevator, boat, car)
    GO_FLAG_NO_INTERACT = 0x00000010, //players cannot interact with this go
    GO_FLAG_NODESPAWN = 0x00000020, //never despawn, typically for doors, they just change state
    GO_FLAG_TRIGGERED = 0x00000040, //typically, summoned objects. Triggered by spell or other events

    are right


    CGGameObjectData_Flags = CGObjectData.CGObjectDataEnd + 9, // size 1 flags:

    wow classic that is
    Oh flags are size 1 for game object? That might have been my issue, I was reading 4 bytes instead of 1. So this is one of those weird uchar structures they have I assume.

    I'm on Slands btw, but I imagine the structure is similar. I saw in the wow constants, enums thread that it's listed as "ushort" (2 bytes). I'll try both once updated for the latest patch.

  4. #4
    Jadd's Avatar 🐸 Premium Seller
    Reputation
    1511
    Join Date
    May 2008
    Posts
    2,432
    Thanks G/R
    81/333
    Trade Feedback
    1 (100%)
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)
    Descriptors as they appear in the client are divided by 4, so they must be multiplied by 4 to get the effective offset. Depending on whose dump you're looking at, it may or may not have had this factored in and you should keep that in mind. IIRC, the flags in the client appear as size 1, and should be read as 4 bytes.

    I also haven't looked at retail for a long time, but I believe that descriptors are no longer included in that client. You'll simply need to reverse the appropriate offset.

  5. #5
    Jadd's Avatar 🐸 Premium Seller
    Reputation
    1511
    Join Date
    May 2008
    Posts
    2,432
    Thanks G/R
    81/333
    Trade Feedback
    1 (100%)
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)
    Btw, gameobject flags and other relevant info can be found here: TrinityCore/SharedDefines.h at master . TrinityCore/TrinityCore . GitHub

  6. #6
    cxmplexwow_'s Avatar Member CoreCoins Purchaser
    Reputation
    1
    Join Date
    Mar 2021
    Posts
    13
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Jadd View Post
    Descriptors as they appear in the client are divided by 4, so they must be multiplied by 4 to get the effective offset. Depending on whose dump you're looking at, it may or may not have had this factored in and you should keep that in mind. IIRC, the flags in the client appear as size 1, and should be read as 4 bytes.

    I also haven't looked at retail for a long time, but I believe that descriptors are no longer included in that client. You'll simply need to reverse the appropriate offset.

    Do you know why there seems to be odd padding?

    Even in your classic dump I noticed this:

    Code:
    x64		0x000000000000001C	CGGameObjectData::createdBy
    x64		0x000000000000002C	CGGameObjectData::guildGUID
    x64		0x000000000000003C	CGGameObjectData::displayID
    x64		0x0000000000000040	CGGameObjectData::flags
    CreatedBy->GuildGUID is a 0x10 difference. Created by is only 8 bytes. Why are there two bytes of padding inserted to equal 10 bytes?

    x64 0x000000000000001C CGGameObjectData::createdBy
    // 2 byte pad
    x64 0x000000000000002C CGGameObjectData::guildGUID
    // 2 byte pad
    x64 0x000000000000003C CGGameObjectData::displayID
    // 0 byte pad
    x64 0x0000000000000040 CGGameObjectData::flags
    // 0 byte pad

    Wouldn't this already be aligned without padding? 8 + 8 + 4 + 4 = 24 byte (i dunno what wow uses, but I assume 4 or 8 byte align)
    Last edited by cxmplexwow_; 03-10-2021 at 12:01 PM.

  7. #7
    cxmplexwow_'s Avatar Member CoreCoins Purchaser
    Reputation
    1
    Join Date
    Mar 2021
    Posts
    13
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Jadd View Post
    Btw, gameobject flags and other relevant info can be found here: TrinityCore/SharedDefines.h at master . TrinityCore/TrinityCore . GitHub
    Yeah I use this already for my flags, that's how I got the ones in the post It doesn't however help with Fields, (it obviously shows you which fields the object has, but not their actual location).

  8. #8
    cxmplexwow_'s Avatar Member CoreCoins Purchaser
    Reputation
    1
    Join Date
    Mar 2021
    Posts
    13
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Jadd View Post
    Descriptors as they appear in the client are divided by 4, so they must be multiplied by 4 to get the effective offset. Depending on whose dump you're looking at, it may or may not have had this factored in and you should keep that in mind. IIRC, the flags in the client appear as size 1, and should be read as 4 bytes.

    I also haven't looked at retail for a long time, but I believe that descriptors are no longer included in that client. You'll simply need to reverse the appropriate offset.
    This is great to know, thank you. I haven't seen this mentioned anywhere lol.

  9. #9
    charles420's Avatar Contributor
    Reputation
    315
    Join Date
    Jun 2009
    Posts
    329
    Thanks G/R
    25/119
    Trade Feedback
    0 (0%)
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)
    Code:
    
                StorageField = 0x10,
    
            public IntPtr storage
            {
                get { return ProcessMemory.Read<IntPtr>(BaseAddress + (int)Pointers.ObjectManager.StorageField); }
            }
    
            public T GetValue<T>(Enum index) where T : struct
            {
                return ProcessMemory.Read<T>(storage + Convert.ToInt32(index) * 4);
            }
    
            public void SetValue<T>(Enum index, T val) where T : struct
            {
                ProcessMemory.Write<T>(storage + Convert.ToInt32(index) * 4, val);
            }


    Code:
    using System;
    
    namespace LazyLib.Manager.Wow
    {
        enum CGObjectData
        {
            CGObjectData_Guid = 0, // size 4
            CGObjectData_EntryID = 4, // size 1
            CGObjectData_DynamicFlags = 5, // size 1
            CGObjectData_Scale = 6, // size 1
            CGObjectDataEnd = 7
        };
    
        enum CGItemData
        {
            CGItemData_Owner = CGObjectData.CGObjectDataEnd + 0, // size 4 flags: MIRROR_ALL
            CGItemData_ContainedIn = CGObjectData.CGObjectDataEnd + 4, // size 4 flags: MIRROR_ALL
            CGItemData_Creator = CGObjectData.CGObjectDataEnd + 8, // size 4 flags: MIRROR_ALL
            CGItemData_GiftCreator = CGObjectData.CGObjectDataEnd + 12, // size 4 flags: MIRROR_ALL
            CGItemData_StackCount = CGObjectData.CGObjectDataEnd + 16, // size 1 flags: MIRROR_OWNER
            CGItemData_Expiration = CGObjectData.CGObjectDataEnd + 17, // size 1 flags: MIRROR_OWNER
            CGItemData_SpellCharges = CGObjectData.CGObjectDataEnd + 18, // size 5 flags: MIRROR_OWNER
            CGItemData_DynamicFlags = CGObjectData.CGObjectDataEnd + 23, // size 1 flags: MIRROR_ALL
            CGItemData_Enchantment = CGObjectData.CGObjectDataEnd + 24, // size 39 flags: MIRROR_ALL
            CGItemData_PropertySeed = CGObjectData.CGObjectDataEnd + 63, // size 1 flags: MIRROR_ALL
            CGItemData_RandomPropertiesID = CGObjectData.CGObjectDataEnd + 64, // size 1 flags: MIRROR_ALL
            CGItemData_Durability = CGObjectData.CGObjectDataEnd + 65, // size 1 flags: MIRROR_OWNER
            CGItemData_MaxDurability = CGObjectData.CGObjectDataEnd + 66, // size 1 flags: MIRROR_OWNER
            CGItemData_CreatePlayedTime = CGObjectData.CGObjectDataEnd + 67, // size 1 flags: MIRROR_ALL
            CGItemData_ModifiersMask = CGObjectData.CGObjectDataEnd + 68, // size 1 flags: MIRROR_OWNER
            CGItemData_Context = CGObjectData.CGObjectDataEnd + 69, // size 1 flags: MIRROR_ALL
            CGItemData_ArtifactXP = CGObjectData.CGObjectDataEnd + 70, // size 2 flags: MIRROR_OWNER
            CGItemData_ItemAppearanceModID = CGObjectData.CGObjectDataEnd + 72, // size 1 flags: MIRROR_OWNER
            CGItemDataEnd = CGObjectData.CGObjectDataEnd + 73
        };
    
        enum CGContainerData
        {
            CGContainerData_Slots = CGItemData.CGItemDataEnd + 0, // size 144 flags: MIRROR_ALL
            CGContainerData_NumSlots = CGItemData.CGItemDataEnd + 144, // size 1 flags: MIRROR_ALL
            CGContainerDataEnd = CGItemData.CGItemDataEnd + 145
        };
    
        enum CGUnitData
        {
            CGUnitData_Charm = CGObjectData.CGObjectDataEnd + 0, // size 4 flags: MIRROR_ALL
            CGUnitData_Summon = CGObjectData.CGObjectDataEnd + 4, // size 4 flags: MIRROR_ALL
            CGUnitData_Critter = CGObjectData.CGObjectDataEnd + 8, // size 4 flags: MIRROR_SELF
            CGUnitData_CharmedBy = CGObjectData.CGObjectDataEnd + 12, // size 4 flags: MIRROR_ALL
            CGUnitData_SummonedBy = CGObjectData.CGObjectDataEnd + 16, // size 4 flags: MIRROR_ALL
            CGUnitData_CreatedBy = CGObjectData.CGObjectDataEnd + 20, // size 4 flags: MIRROR_ALL
            CGUnitData_DemonCreator = CGObjectData.CGObjectDataEnd + 24, // size 4 flags: MIRROR_ALL
            CGUnitData_LookAtControllerTarget = CGObjectData.CGObjectDataEnd + 28, // size 4 flags: MIRROR_ALL
            CGUnitData_Target = CGObjectData.CGObjectDataEnd + 32, // size 4 flags: MIRROR_ALL
            CGUnitData_BattlePetCompanionGUID = CGObjectData.CGObjectDataEnd + 36, // size 4 flags: MIRROR_ALL
            CGUnitData_BattlePetDBID = CGObjectData.CGObjectDataEnd + 40, // size 2 flags: MIRROR_ALL
            CGUnitData_ChannelData = CGObjectData.CGObjectDataEnd + 42, // size 2 flags: 
            CGUnitData_SummonedByHomeRealm = CGObjectData.CGObjectDataEnd + 44, // size 1 flags: MIRROR_ALL
            CGUnitData_Sex = CGObjectData.CGObjectDataEnd + 45, // size 1 flags: MIRROR_ALL
            CGUnitData_DisplayPower = CGObjectData.CGObjectDataEnd + 46, // size 1 flags: MIRROR_ALL
            CGUnitData_OverrideDisplayPowerID = CGObjectData.CGObjectDataEnd + 47, // size 1 flags: MIRROR_ALL
            CGUnitData_Health = CGObjectData.CGObjectDataEnd + 48, // size 2 flags: MIRROR_VIEWER_DEPENDENT
            CGUnitData_Power = CGObjectData.CGObjectDataEnd + 50, // size 6 flags: 
            CGUnitData_MaxHealth = CGObjectData.CGObjectDataEnd + 56, // size 2 flags: MIRROR_VIEWER_DEPENDENT
            CGUnitData_MaxPower = CGObjectData.CGObjectDataEnd + 58, // size 6 flags: MIRROR_ALL
            CGUnitData_ModPowerRegen = CGObjectData.CGObjectDataEnd + 64, // size 6 flags: 
            CGUnitData_Level = CGObjectData.CGObjectDataEnd + 70, // size 1 flags: MIRROR_ALL
            CGUnitData_EffectiveLevel = CGObjectData.CGObjectDataEnd + 71, // size 1 flags: MIRROR_ALL
            CGUnitData_ContentTuningID = CGObjectData.CGObjectDataEnd + 72, // size 1 flags: MIRROR_ALL
            CGUnitData_ScalingLevelMin = CGObjectData.CGObjectDataEnd + 73, // size 1 flags: MIRROR_ALL
            CGUnitData_ScalingLevelMax = CGObjectData.CGObjectDataEnd + 74, // size 1 flags: MIRROR_ALL
            CGUnitData_ScalingLevelDelta = CGObjectData.CGObjectDataEnd + 75, // size 1 flags: MIRROR_ALL
            CGUnitData_ScalingFactionGroup = CGObjectData.CGObjectDataEnd + 76, // size 1 flags: MIRROR_ALL
            CGUnitData_ScalingHealthItemLevelCurveID = CGObjectData.CGObjectDataEnd + 77, // size 1 flags: MIRROR_ALL
            CGUnitData_ScalingDamageItemLevelCurveID = CGObjectData.CGObjectDataEnd + 78, // size 1 flags: MIRROR_ALL
            CGUnitData_FactionTemplate = CGObjectData.CGObjectDataEnd + 79, // size 1 flags: MIRROR_ALL
            CGUnitData_VirtualItems = CGObjectData.CGObjectDataEnd + 80, // size 6 flags: MIRROR_ALL
            CGUnitData_Flags = CGObjectData.CGObjectDataEnd + 86, // size 1 flags: 
            CGUnitData_Flags2 = CGObjectData.CGObjectDataEnd + 87, // size 1 flags: 
            CGUnitData_Flags3 = CGObjectData.CGObjectDataEnd + 88, // size 1 flags: 
            CGUnitData_AuraState = CGObjectData.CGObjectDataEnd + 89, // size 1 flags: MIRROR_ALL
            CGUnitData_AttackRoundBaseTime = CGObjectData.CGObjectDataEnd + 90, // size 2 flags: MIRROR_ALL
            CGUnitData_RangedAttackRoundBaseTime = CGObjectData.CGObjectDataEnd + 92, // size 1 flags: MIRROR_SELF
            CGUnitData_BoundingRadius = CGObjectData.CGObjectDataEnd + 93, // size 1 flags: MIRROR_ALL
            CGUnitData_CombatReach = CGObjectData.CGObjectDataEnd + 94, // size 1 flags: MIRROR_ALL
            CGUnitData_DisplayID = CGObjectData.CGObjectDataEnd + 95, // size 1 flags: 
            CGUnitData_DisplayScale = CGObjectData.CGObjectDataEnd + 96, // size 1 flags: 
            CGUnitData_NativeDisplayID = CGObjectData.CGObjectDataEnd + 97, // size 1 flags: 
            CGUnitData_NativeXDisplayScale = CGObjectData.CGObjectDataEnd + 98, // size 1 flags: 
            CGUnitData_MountDisplayID = CGObjectData.CGObjectDataEnd + 99, // size 1 flags: 
            CGUnitData_MinDamage = CGObjectData.CGObjectDataEnd + 100, // size 1 flags: 
            CGUnitData_MaxDamage = CGObjectData.CGObjectDataEnd + 101, // size 1 flags: 
            CGUnitData_MinOffHandDamage = CGObjectData.CGObjectDataEnd + 102, // size 1 flags: 
            CGUnitData_MaxOffHandDamage = CGObjectData.CGObjectDataEnd + 103, // size 1 flags: 
            CGUnitData_AnimTier = CGObjectData.CGObjectDataEnd + 104, // size 1 flags: MIRROR_ALL
            CGUnitData_PetNumber = CGObjectData.CGObjectDataEnd + 105, // size 1 flags: MIRROR_ALL
            CGUnitData_PetNameTimestamp = CGObjectData.CGObjectDataEnd + 106, // size 1 flags: MIRROR_ALL
            CGUnitData_PetExperience = CGObjectData.CGObjectDataEnd + 107, // size 1 flags: MIRROR_OWNER
            CGUnitData_PetNextLevelExperience = CGObjectData.CGObjectDataEnd + 108, // size 1 flags: MIRROR_OWNER
            CGUnitData_ModCastingSpeed = CGObjectData.CGObjectDataEnd + 109, // size 1 flags: MIRROR_ALL
            CGUnitData_ModSpellHaste = CGObjectData.CGObjectDataEnd + 110, // size 1 flags: MIRROR_ALL
            CGUnitData_ModHaste = CGObjectData.CGObjectDataEnd + 111, // size 1 flags: MIRROR_ALL
            CGUnitData_ModRangedHaste = CGObjectData.CGObjectDataEnd + 112, // size 1 flags: MIRROR_ALL
            CGUnitData_ModHasteRegen = CGObjectData.CGObjectDataEnd + 113, // size 1 flags: MIRROR_ALL
            CGUnitData_ModTimeRate = CGObjectData.CGObjectDataEnd + 114, // size 1 flags: MIRROR_ALL
            CGUnitData_CreatedBySpell = CGObjectData.CGObjectDataEnd + 115, // size 1 flags: MIRROR_ALL
            CGUnitData_NpcFlags = CGObjectData.CGObjectDataEnd + 116, // size 2 flags: 
            CGUnitData_EmoteState = CGObjectData.CGObjectDataEnd + 118, // size 1 flags: MIRROR_ALL
            CGUnitData_TrainingPointsTotal = CGObjectData.CGObjectDataEnd + 119, // size 1 flags: MIRROR_OWNER
            CGUnitData_Stats = CGObjectData.CGObjectDataEnd + 120, // size 5 flags: 
            CGUnitData_StatPosBuff = CGObjectData.CGObjectDataEnd + 125, // size 5 flags: 
            CGUnitData_StatNegBuff = CGObjectData.CGObjectDataEnd + 130, // size 5 flags: 
            CGUnitData_Resistances = CGObjectData.CGObjectDataEnd + 135, // size 7 flags: 
            CGUnitData_ResistanceBuffModsPositive = CGObjectData.CGObjectDataEnd + 142, // size 7 flags: 
            CGUnitData_ResistanceBuffModsNegative = CGObjectData.CGObjectDataEnd + 149, // size 7 flags: 
            CGUnitData_BaseMana = CGObjectData.CGObjectDataEnd + 156, // size 1 flags: MIRROR_ALL
            CGUnitData_BaseHealth = CGObjectData.CGObjectDataEnd + 157, // size 1 flags: 
            CGUnitData_ShapeshiftForm = CGObjectData.CGObjectDataEnd + 158, // size 1 flags: MIRROR_ALL
            CGUnitData_AttackPower = CGObjectData.CGObjectDataEnd + 159, // size 1 flags: 
            CGUnitData_AttackPowerModPos = CGObjectData.CGObjectDataEnd + 160, // size 1 flags: 
            CGUnitData_AttackPowerModNeg = CGObjectData.CGObjectDataEnd + 161, // size 1 flags: 
            CGUnitData_AttackPowerMultiplier = CGObjectData.CGObjectDataEnd + 162, // size 1 flags: 
            CGUnitData_RangedAttackPower = CGObjectData.CGObjectDataEnd + 163, // size 1 flags: 
            CGUnitData_RangedAttackPowerModPos = CGObjectData.CGObjectDataEnd + 164, // size 1 flags: 
            CGUnitData_RangedAttackPowerModNeg = CGObjectData.CGObjectDataEnd + 165, // size 1 flags: 
            CGUnitData_RangedAttackPowerMultiplier = CGObjectData.CGObjectDataEnd + 166, // size 1 flags: 
            CGUnitData_MainHandWeaponAttackPower = CGObjectData.CGObjectDataEnd + 167, // size 1 flags: 
            CGUnitData_OffHandWeaponAttackPower = CGObjectData.CGObjectDataEnd + 168, // size 1 flags: 
            CGUnitData_RangedWeaponAttackPower = CGObjectData.CGObjectDataEnd + 169, // size 1 flags: 
            CGUnitData_SetAttackSpeedAura = CGObjectData.CGObjectDataEnd + 170, // size 1 flags: 
            CGUnitData_Lifesteal = CGObjectData.CGObjectDataEnd + 171, // size 1 flags: 
            CGUnitData_MinRangedDamage = CGObjectData.CGObjectDataEnd + 172, // size 1 flags: 
            CGUnitData_MaxRangedDamage = CGObjectData.CGObjectDataEnd + 173, // size 1 flags: 
            CGUnitData_PowerCostModifier = CGObjectData.CGObjectDataEnd + 174, // size 7 flags: 
            CGUnitData_PowerCostMultiplier = CGObjectData.CGObjectDataEnd + 181, // size 7 flags: 
            CGUnitData_MaxHealthModifier = CGObjectData.CGObjectDataEnd + 188, // size 1 flags: 
            CGUnitData_HoverHeight = CGObjectData.CGObjectDataEnd + 189, // size 1 flags: MIRROR_ALL
            CGUnitData_MinItemLevelCutoff = CGObjectData.CGObjectDataEnd + 190, // size 1 flags: MIRROR_ALL
            CGUnitData_MinItemLevel = CGObjectData.CGObjectDataEnd + 191, // size 1 flags: MIRROR_ALL
            CGUnitData_MaxItemLevel = CGObjectData.CGObjectDataEnd + 192, // size 1 flags: MIRROR_ALL
            CGUnitData_WildBattlePetLevel = CGObjectData.CGObjectDataEnd + 193, // size 1 flags: MIRROR_ALL
            CGUnitData_BattlePetCompanionNameTimestamp = CGObjectData.CGObjectDataEnd + 194, // size 1 flags: MIRROR_ALL
            CGUnitData_InteractSpellID = CGObjectData.CGObjectDataEnd + 195, // size 1 flags: MIRROR_ALL
            CGUnitData_StateSpellVisualID = CGObjectData.CGObjectDataEnd + 196, // size 1 flags: 
            CGUnitData_StateAnimID = CGObjectData.CGObjectDataEnd + 197, // size 1 flags: 
            CGUnitData_StateAnimKitID = CGObjectData.CGObjectDataEnd + 198, // size 1 flags: 
            CGUnitData_StateWorldEffectID = CGObjectData.CGObjectDataEnd + 199, // size 4 flags: 
            CGUnitData_ScaleDuration = CGObjectData.CGObjectDataEnd + 203, // size 1 flags: MIRROR_ALL
            CGUnitData_LooksLikeMountID = CGObjectData.CGObjectDataEnd + 204, // size 1 flags: MIRROR_ALL
            CGUnitData_LooksLikeCreatureID = CGObjectData.CGObjectDataEnd + 205, // size 1 flags: MIRROR_ALL
            CGUnitData_LookAtControllerID = CGObjectData.CGObjectDataEnd + 206, // size 1 flags: MIRROR_ALL
            CGUnitData_GuildGUID = CGObjectData.CGObjectDataEnd + 207, // size 4 flags: MIRROR_ALL
            CGUnitDataEnd = CGObjectData.CGObjectDataEnd + 211
        };
    
        enum CGPlayerData
        {
            CGPlayerData_DuelArbiter = CGUnitData.CGUnitDataEnd + 0, // size 4 flags: MIRROR_ALL
            CGPlayerData_WowAccount = CGUnitData.CGUnitDataEnd + 4, // size 4 flags: MIRROR_ALL
            CGPlayerData_LootTargetGUID = CGUnitData.CGUnitDataEnd + 8, // size 4 flags: MIRROR_ALL
            CGPlayerData_PlayerFlags = CGUnitData.CGUnitDataEnd + 12, // size 1 flags: MIRROR_ALL
            CGPlayerData_PlayerFlagsEx = CGUnitData.CGUnitDataEnd + 13, // size 1 flags: MIRROR_ALL
            CGPlayerData_GuildRankID = CGUnitData.CGUnitDataEnd + 14, // size 1 flags: MIRROR_ALL
            CGPlayerData_GuildDeleteDate = CGUnitData.CGUnitDataEnd + 15, // size 1 flags: MIRROR_ALL
            CGPlayerData_GuildLevel = CGUnitData.CGUnitDataEnd + 16, // size 1 flags: MIRROR_ALL
            CGPlayerData_HairColorID = CGUnitData.CGUnitDataEnd + 17, // size 1 flags: MIRROR_ALL
            CGPlayerData_CustomDisplayOption = CGUnitData.CGUnitDataEnd + 18, // size 1 flags: MIRROR_ALL
            CGPlayerData_Inebriation = CGUnitData.CGUnitDataEnd + 19, // size 1 flags: MIRROR_ALL
            CGPlayerData_PvpRank = CGUnitData.CGUnitDataEnd + 20, // size 1 flags: MIRROR_ALL
            CGPlayerData_DuelTeam = CGUnitData.CGUnitDataEnd + 21, // size 1 flags: MIRROR_ALL
            CGPlayerData_GuildTimeStamp = CGUnitData.CGUnitDataEnd + 22, // size 1 flags: MIRROR_ALL
            CGPlayerData_QuestLog = CGUnitData.CGUnitDataEnd + 23, // size 320 flags: MIRROR_PARTY
            CGPlayerData_VisibleItems = CGUnitData.CGUnitDataEnd + 343, // size 38 flags: MIRROR_ALL
            CGPlayerData_PlayerTitle = CGUnitData.CGUnitDataEnd + 381, // size 1 flags: MIRROR_ALL
            CGPlayerData_FakeInebriation = CGUnitData.CGUnitDataEnd + 382, // size 1 flags: MIRROR_ALL
            CGPlayerData_VirtualPlayerRealm = CGUnitData.CGUnitDataEnd + 383, // size 1 flags: MIRROR_ALL
            CGPlayerData_CurrentSpecID = CGUnitData.CGUnitDataEnd + 384, // size 1 flags: MIRROR_ALL
            CGPlayerData_TaxiMountAnimKitID = CGUnitData.CGUnitDataEnd + 385, // size 1 flags: MIRROR_ALL
            CGPlayerData_AvgItemLevel = CGUnitData.CGUnitDataEnd + 386, // size 4 flags: MIRROR_ALL
            CGPlayerData_CurrentBattlePetBreedQuality = CGUnitData.CGUnitDataEnd + 390, // size 1 flags: MIRROR_ALL
            CGPlayerData_HonorLevel = CGUnitData.CGUnitDataEnd + 391, // size 1 flags: MIRROR_ALL
            CGPlayerDataEnd = CGUnitData.CGUnitDataEnd + 392
        };
    
        enum CGActivePlayerData
        {
            CGActivePlayerData_InvSlots = CGPlayerData.CGPlayerDataEnd + 0, // size 368 flags: MIRROR_ALL
            CGActivePlayerData_FarsightObject = CGPlayerData.CGPlayerDataEnd + 368, // size 4 flags: MIRROR_ALL
            CGActivePlayerData_ComboTarget = CGPlayerData.CGPlayerDataEnd + 372, // size 4 flags: MIRROR_ALL
            CGActivePlayerData_SummonedBattlePetGUID = CGPlayerData.CGPlayerDataEnd + 376, // size 4 flags: MIRROR_ALL
            CGActivePlayerData_KnownTitles = CGPlayerData.CGPlayerDataEnd + 380, // size 12 flags: MIRROR_ALL
            CGActivePlayerData_Coinage = CGPlayerData.CGPlayerDataEnd + 392, // size 2 flags: MIRROR_ALL
            CGActivePlayerData_XP = CGPlayerData.CGPlayerDataEnd + 394, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_NextLevelXP = CGPlayerData.CGPlayerDataEnd + 395, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_TrialXP = CGPlayerData.CGPlayerDataEnd + 396, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_Skill = CGPlayerData.CGPlayerDataEnd + 397, // size 896 flags: MIRROR_ALL
            CGActivePlayerData_CharacterPoints = CGPlayerData.CGPlayerDataEnd + 1293, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_MaxTalentTiers = CGPlayerData.CGPlayerDataEnd + 1294, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_TrackCreatureMask = CGPlayerData.CGPlayerDataEnd + 1295, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_TrackResourceMask = CGPlayerData.CGPlayerDataEnd + 1296, // size 2 flags: MIRROR_ALL
            CGActivePlayerData_MainhandExpertise = CGPlayerData.CGPlayerDataEnd + 1298, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_OffhandExpertise = CGPlayerData.CGPlayerDataEnd + 1299, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_RangedExpertise = CGPlayerData.CGPlayerDataEnd + 1300, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_CombatRatingExpertise = CGPlayerData.CGPlayerDataEnd + 1301, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_BlockPercentage = CGPlayerData.CGPlayerDataEnd + 1302, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_DodgePercentage = CGPlayerData.CGPlayerDataEnd + 1303, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_DodgePercentageFromAttribute = CGPlayerData.CGPlayerDataEnd + 1304, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_ParryPercentage = CGPlayerData.CGPlayerDataEnd + 1305, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_ParryPercentageFromAttribute = CGPlayerData.CGPlayerDataEnd + 1306, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_CritPercentage = CGPlayerData.CGPlayerDataEnd + 1307, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_RangedCritPercentage = CGPlayerData.CGPlayerDataEnd + 1308, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_OffhandCritPercentage = CGPlayerData.CGPlayerDataEnd + 1309, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_SpellCritPercentage = CGPlayerData.CGPlayerDataEnd + 1310, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_ShieldBlock = CGPlayerData.CGPlayerDataEnd + 1311, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_Mastery = CGPlayerData.CGPlayerDataEnd + 1312, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_Speed = CGPlayerData.CGPlayerDataEnd + 1313, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_Avoidance = CGPlayerData.CGPlayerDataEnd + 1314, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_Sturdiness = CGPlayerData.CGPlayerDataEnd + 1315, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_Versatility = CGPlayerData.CGPlayerDataEnd + 1316, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_VersatilityBonus = CGPlayerData.CGPlayerDataEnd + 1317, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_PvpPowerDamage = CGPlayerData.CGPlayerDataEnd + 1318, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_PvpPowerHealing = CGPlayerData.CGPlayerDataEnd + 1319, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_ExploredZones = CGPlayerData.CGPlayerDataEnd + 1320, // size 320 flags: MIRROR_ALL
            CGActivePlayerData_RestInfo = CGPlayerData.CGPlayerDataEnd + 1640, // size 4 flags: MIRROR_ALL
            CGActivePlayerData_ModDamageDonePos = CGPlayerData.CGPlayerDataEnd + 1644, // size 7 flags: MIRROR_ALL
            CGActivePlayerData_ModDamageDoneNeg = CGPlayerData.CGPlayerDataEnd + 1651, // size 7 flags: MIRROR_ALL
            CGActivePlayerData_ModDamageDonePercent = CGPlayerData.CGPlayerDataEnd + 1658, // size 7 flags: MIRROR_ALL
            CGActivePlayerData_ModHealingDonePos = CGPlayerData.CGPlayerDataEnd + 1665, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_ModHealingPercent = CGPlayerData.CGPlayerDataEnd + 1666, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_ModHealingDonePercent = CGPlayerData.CGPlayerDataEnd + 1667, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_ModPeriodicHealingDonePercent = CGPlayerData.CGPlayerDataEnd + 1668, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_WeaponDmgMultipliers = CGPlayerData.CGPlayerDataEnd + 1669, // size 3 flags: MIRROR_ALL
            CGActivePlayerData_WeaponAtkSpeedMultipliers = CGPlayerData.CGPlayerDataEnd + 1672, // size 3 flags: MIRROR_ALL
            CGActivePlayerData_ModSpellPowerPercent = CGPlayerData.CGPlayerDataEnd + 1675, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_ModResiliencePercent = CGPlayerData.CGPlayerDataEnd + 1676, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_OverrideSpellPowerByAPPercent = CGPlayerData.CGPlayerDataEnd + 1677, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_OverrideAPBySpellPowerPercent = CGPlayerData.CGPlayerDataEnd + 1678, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_ModTargetResistance = CGPlayerData.CGPlayerDataEnd + 1679, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_ModTargetPhysicalResistance = CGPlayerData.CGPlayerDataEnd + 1680, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_LocalFlags = CGPlayerData.CGPlayerDataEnd + 1681, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_PvpMedals = CGPlayerData.CGPlayerDataEnd + 1682, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_BuybackPrice = CGPlayerData.CGPlayerDataEnd + 1683, // size 12 flags: MIRROR_ALL
            CGActivePlayerData_BuybackTimestamp = CGPlayerData.CGPlayerDataEnd + 1695, // size 12 flags: MIRROR_ALL
            CGActivePlayerData_SessionDishonorableKills = CGPlayerData.CGPlayerDataEnd + 1707, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_YesterdayDishonorableKills = CGPlayerData.CGPlayerDataEnd + 1708, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_LastWeekDishonorableKills = CGPlayerData.CGPlayerDataEnd + 1709, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_ThisWeekDishonorableKills = CGPlayerData.CGPlayerDataEnd + 1710, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_ThisWeekContribution = CGPlayerData.CGPlayerDataEnd + 1711, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_LifetimeHonorableKills = CGPlayerData.CGPlayerDataEnd + 1712, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_LifetimeDishonorableKills = CGPlayerData.CGPlayerDataEnd + 1713, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_YesterdayContribution = CGPlayerData.CGPlayerDataEnd + 1714, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_LastWeekContribution = CGPlayerData.CGPlayerDataEnd + 1715, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_LastWeekRank = CGPlayerData.CGPlayerDataEnd + 1716, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_WatchedFactionIndex = CGPlayerData.CGPlayerDataEnd + 1717, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_CombatRatings = CGPlayerData.CGPlayerDataEnd + 1718, // size 32 flags: MIRROR_ALL
            CGActivePlayerData_PvpInfo = CGPlayerData.CGPlayerDataEnd + 1750, // size 54 flags: MIRROR_ALL
            CGActivePlayerData_MaxLevel = CGPlayerData.CGPlayerDataEnd + 1804, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_ScalingPlayerLevelDelta = CGPlayerData.CGPlayerDataEnd + 1805, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_MaxCreatureScalingLevel = CGPlayerData.CGPlayerDataEnd + 1806, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_NoReagentCostMask = CGPlayerData.CGPlayerDataEnd + 1807, // size 4 flags: MIRROR_ALL
            CGActivePlayerData_PetSpellPower = CGPlayerData.CGPlayerDataEnd + 1811, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_ProfessionSkillLine = CGPlayerData.CGPlayerDataEnd + 1812, // size 2 flags: MIRROR_ALL
            CGActivePlayerData_UiHitModifier = CGPlayerData.CGPlayerDataEnd + 1814, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_UiSpellHitModifier = CGPlayerData.CGPlayerDataEnd + 1815, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_HomeRealmTimeOffset = CGPlayerData.CGPlayerDataEnd + 1816, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_ModPetHaste = CGPlayerData.CGPlayerDataEnd + 1817, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_NumBackpackSlots = CGPlayerData.CGPlayerDataEnd + 1818, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_OverrideSpellsID = CGPlayerData.CGPlayerDataEnd + 1819, // size 1 flags: 
            CGActivePlayerData_LfgBonusFactionID = CGPlayerData.CGPlayerDataEnd + 1820, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_LootSpecID = CGPlayerData.CGPlayerDataEnd + 1821, // size 1 flags: MIRROR_ALL
            CGActivePlayerData_OverrideZonePVPType = CGPlayerData.CGPlayerDataEnd + 1822, // size 1 flags: 
            CGActivePlayerData_BagSlotFlags = CGPlayerData.CGPlayerDataEnd + 1823, // size 4 flags: MIRROR_ALL
            CGActivePlayerData_BankBagSlotFlags = CGPlayerData.CGPlayerDataEnd + 1827, // size 6 flags: MIRROR_ALL
            CGActivePlayerData_PvpRankProgress = CGPlayerData.CGPlayerDataEnd + 1833, // size 1 flags: MIRROR_ALL
            CGActivePlayerDataEnd = CGPlayerData.CGPlayerDataEnd + 1834
        };
    
        enum CGGameObjectData
        {
            CGGameObjectData_CreatedBy = CGObjectData.CGObjectDataEnd + 0, // size 4 flags: MIRROR_ALL
            CGGameObjectData_GuildGUID = CGObjectData.CGObjectDataEnd + 4, // size 4 flags: MIRROR_ALL
            CGGameObjectData_DisplayID = CGObjectData.CGObjectDataEnd + 8, // size 1 flags: 
            CGGameObjectData_Flags = CGObjectData.CGObjectDataEnd + 9, // size 1 flags: 
            CGGameObjectData_ParentRotation = CGObjectData.CGObjectDataEnd + 10, // size 4 flags: MIRROR_ALL
            CGGameObjectData_FactionTemplate = CGObjectData.CGObjectDataEnd + 14, // size 1 flags: MIRROR_ALL
            CGGameObjectData_Level = CGObjectData.CGObjectDataEnd + 15, // size 1 flags: MIRROR_ALL
            CGGameObjectData_PercentHealth = CGObjectData.CGObjectDataEnd + 16, // size 1 flags: 
            CGGameObjectData_SpellVisualID = CGObjectData.CGObjectDataEnd + 17, // size 1 flags: 
            CGGameObjectData_StateSpellVisualID = CGObjectData.CGObjectDataEnd + 18, // size 1 flags: 
            CGGameObjectData_SpawnTrackingStateAnimID = CGObjectData.CGObjectDataEnd + 19, // size 1 flags: 
            CGGameObjectData_SpawnTrackingStateAnimKitID = CGObjectData.CGObjectDataEnd + 20, // size 1 flags: 
            CGGameObjectData_StateWorldEffectID = CGObjectData.CGObjectDataEnd + 21, // size 4 flags: 
            CGGameObjectData_CustomParam = CGObjectData.CGObjectDataEnd + 25, // size 1 flags: 
            CGGameObjectDataEnd = CGObjectData.CGObjectDataEnd + 26
        };
    
        enum CGDynamicObjectData
        {
            CGDynamicObjectData_Caster = CGObjectData.CGObjectDataEnd + 0, // size 4 flags: MIRROR_ALL
            CGDynamicObjectData_Type = CGObjectData.CGObjectDataEnd + 4, // size 1 flags: MIRROR_ALL
            CGDynamicObjectData_SpellXSpellVisualID = CGObjectData.CGObjectDataEnd + 5, // size 1 flags: MIRROR_ALL
            CGDynamicObjectData_SpellID = CGObjectData.CGObjectDataEnd + 6, // size 1 flags: MIRROR_ALL
            CGDynamicObjectData_Radius = CGObjectData.CGObjectDataEnd + 7, // size 1 flags: MIRROR_ALL
            CGDynamicObjectData_CastTime = CGObjectData.CGObjectDataEnd + 8, // size 1 flags: MIRROR_ALL
            CGDynamicObjectDataEnd = CGObjectData.CGObjectDataEnd + 9
        };
    
        enum CGCorpseData
        {
            CGCorpseData_Owner = CGObjectData.CGObjectDataEnd + 0, // size 4 flags: MIRROR_ALL
            CGCorpseData_PartyGUID = CGObjectData.CGObjectDataEnd + 4, // size 4 flags: MIRROR_ALL
            CGCorpseData_GuildGUID = CGObjectData.CGObjectDataEnd + 8, // size 4 flags: MIRROR_ALL
            CGCorpseData_DisplayID = CGObjectData.CGObjectDataEnd + 12, // size 1 flags: MIRROR_ALL
            CGCorpseData_Items = CGObjectData.CGObjectDataEnd + 13, // size 19 flags: MIRROR_ALL
            CGCorpseData_SkinID = CGObjectData.CGObjectDataEnd + 32, // size 1 flags: MIRROR_ALL
            CGCorpseData_FacialHairStyleID = CGObjectData.CGObjectDataEnd + 33, // size 1 flags: MIRROR_ALL
            CGCorpseData_Flags = CGObjectData.CGObjectDataEnd + 34, // size 1 flags: MIRROR_ALL
            CGCorpseData_DynamicFlags = CGObjectData.CGObjectDataEnd + 35, // size 1 flags: MIRROR_VIEWER_DEPENDENT
            CGCorpseData_FactionTemplate = CGObjectData.CGObjectDataEnd + 36, // size 1 flags: MIRROR_ALL
            CGCorpseData_CustomDisplayOption = CGObjectData.CGObjectDataEnd + 37, // size 1 flags: MIRROR_ALL
            CGCorpseDataEnd = CGObjectData.CGObjectDataEnd + 38
        };
    
        enum CGAreaTriggerData
        {
            CGAreaTriggerData_OverrideScaleCurve = CGObjectData.CGObjectDataEnd + 0, // size 7 flags: 
            CGAreaTriggerData_ExtraScaleCurve = CGObjectData.CGObjectDataEnd + 7, // size 7 flags: 
            CGAreaTriggerData_Caster = CGObjectData.CGObjectDataEnd + 14, // size 4 flags: MIRROR_ALL
            CGAreaTriggerData_Duration = CGObjectData.CGObjectDataEnd + 18, // size 1 flags: MIRROR_ALL
            CGAreaTriggerData_TimeToTarget = CGObjectData.CGObjectDataEnd + 19, // size 1 flags: 
            CGAreaTriggerData_TimeToTargetScale = CGObjectData.CGObjectDataEnd + 20, // size 1 flags: 
            CGAreaTriggerData_TimeToTargetExtraScale = CGObjectData.CGObjectDataEnd + 21, // size 1 flags: 
            CGAreaTriggerData_SpellID = CGObjectData.CGObjectDataEnd + 22, // size 1 flags: MIRROR_ALL
            CGAreaTriggerData_SpellForVisuals = CGObjectData.CGObjectDataEnd + 23, // size 1 flags: MIRROR_ALL
            CGAreaTriggerData_SpellXSpellVisualID = CGObjectData.CGObjectDataEnd + 24, // size 1 flags: MIRROR_ALL
            CGAreaTriggerData_BoundsRadius2D = CGObjectData.CGObjectDataEnd + 25, // size 1 flags: 
            CGAreaTriggerData_DecalPropertiesID = CGObjectData.CGObjectDataEnd + 26, // size 1 flags: MIRROR_ALL
            CGAreaTriggerData_CreatingEffectGUID = CGObjectData.CGObjectDataEnd + 27, // size 4 flags: MIRROR_ALL
            CGAreaTriggerDataEnd = CGObjectData.CGObjectDataEnd + 31
        };
    
        enum CGSceneObjectData
        {
            CGSceneObjectData_ScriptPackageID = CGObjectData.CGObjectDataEnd + 0, // size 1 flags: MIRROR_ALL
            CGSceneObjectData_RndSeedVal = CGObjectData.CGObjectDataEnd + 1, // size 1 flags: MIRROR_ALL
            CGSceneObjectData_CreatedBy = CGObjectData.CGObjectDataEnd + 2, // size 4 flags: MIRROR_ALL
            CGSceneObjectData_SceneType = CGObjectData.CGObjectDataEnd + 6, // size 1 flags: MIRROR_ALL
            CGSceneObjectDataEnd = CGObjectData.CGObjectDataEnd + 7
        };
    
        enum CGConversationData
        {
            CGConversationData_LastLineEndTime = CGObjectData.CGObjectDataEnd + 0, // size 1 flags: MIRROR_VIEWER_DEPENDENT
            CGConversationDataEnd = CGObjectData.CGObjectDataEnd + 1
        };
    
    }

    then read like

    Code:
            public enum GameObjectFlags
            {
                GO_FLAG_IN_USE = 0x00000001, //disables interaction while animated
                GO_FLAG_LOCKED = 0x00000002, //require key, spell, event, etc to be opened. Makes "Locked" appear in tooltip
                GO_FLAG_INTERACT_COND = 0x00000004, //cannot interact (condition to interact)
                GO_FLAG_TRANSPORT = 0x00000008, //any kind of transport? Object can transport (elevator, boat, car)
                GO_FLAG_NO_INTERACT = 0x00000010, //players cannot interact with this go
                GO_FLAG_NODESPAWN = 0x00000020, //never despawn, typically for doors, they just change state
                GO_FLAG_TRIGGERED = 0x00000040, //typically, summoned objects. Triggered by spell or other events
            };
    
            public GameObjectFlags GOFlags
            {
                get
                {
                    try
                    {
                        return GetValue<GameObjectFlags>(CGGameObjectData.CGGameObjectData_Flags);
                    }
                    catch (Exception e)
                    {
                        Logging.Write("GameObjectFields > Flags: " + e);
                    }
                    return 0;
                }
            }
    Last edited by charles420; 03-10-2021 at 06:18 PM.

  10. Thanks 34D (1 members gave Thanks to charles420 for this useful post)
  11. #10
    cxmplexwow_'s Avatar Member CoreCoins Purchaser
    Reputation
    1
    Join Date
    Mar 2021
    Posts
    13
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by charles420 View Post
    snip
    Thanks, useful for me

  12. #11
    cxmplexwow_'s Avatar Member CoreCoins Purchaser
    Reputation
    1
    Join Date
    Mar 2021
    Posts
    13
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by charles420 View Post
    Code:
     enum CGGameObjectData
        {
            CGGameObjectData_CreatedBy = CGObjectData.CGObjectDataEnd + 0, // size 4 flags: MIRROR_ALL
            CGGameObjectData_GuildGUID = CGObjectData.CGObjectDataEnd + 4, // size 4 flags: MIRROR_ALL
            CGGameObjectData_DisplayID = CGObjectData.CGObjectDataEnd + 8, // size 1 flags: 
            CGGameObjectData_Flags = CGObjectData.CGObjectDataEnd + 9, // size 1 flags: 
            CGGameObjectData_ParentRotation = CGObjectData.CGObjectDataEnd + 10, // size 4 flags: MIRROR_ALL
            CGGameObjectData_FactionTemplate = CGObjectData.CGObjectDataEnd + 14, // size 1 flags: MIRROR_ALL
            CGGameObjectData_Level = CGObjectData.CGObjectDataEnd + 15, // size 1 flags: MIRROR_ALL
            CGGameObjectData_PercentHealth = CGObjectData.CGObjectDataEnd + 16, // size 1 flags: 
            CGGameObjectData_SpellVisualID = CGObjectData.CGObjectDataEnd + 17, // size 1 flags: 
            CGGameObjectData_StateSpellVisualID = CGObjectData.CGObjectDataEnd + 18, // size 1 flags: 
            CGGameObjectData_SpawnTrackingStateAnimID = CGObjectData.CGObjectDataEnd + 19, // size 1 flags: 
            CGGameObjectData_SpawnTrackingStateAnimKitID = CGObjectData.CGObjectDataEnd + 20, // size 1 flags: 
            CGGameObjectData_StateWorldEffectID = CGObjectData.CGObjectDataEnd + 21, // size 4 flags: 
            CGGameObjectData_CustomParam = CGObjectData.CGObjectDataEnd + 25, // size 1 flags: 
            CGGameObjectDataEnd = CGObjectData.CGObjectDataEnd + 26
        };
    Thanks, useful for me
    Last edited by cxmplexwow_; 03-10-2021 at 08:16 PM.

  13. #12
    charles420's Avatar Contributor
    Reputation
    315
    Join Date
    Jun 2009
    Posts
    329
    Thanks G/R
    25/119
    Trade Feedback
    0 (0%)
    Mentioned
    10 Post(s)
    Tagged
    0 Thread(s)
    Glad could help

  14. #13
    oiramario's Avatar Established Member
    Reputation
    85
    Join Date
    Mar 2021
    Posts
    133
    Thanks G/R
    36/51
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Code:
    class eCGGameObjectTypeId(IntEnum):
        Door = 0
        Button = 1
        Questgiver = 2
        Chest = 3 # Herbs, Minerals, Chests
        Binder = 4
        Generic = 5
        Trap = 6
        Chair = 7
        SpellFocus = 8
        Text = 9
        Goober = 10
        TransportElevator = 11
        AreaDamage = 12
        Camera = 13
        Mapobject = 14
        MoTransportShip = 15
        DuelFlag = 16
        FishingNode = 17
        Ritual = 18
        Mailbox = 19
        DONOTUSE1 = 20
        GuardPost = 21
        SpellCaster = 22
        MeetingStone = 23
        FlagStand = 24
        FishingHole = 25
        FlagDrop = 26
        DONOTUSE2 = 27
        DONOTUSE3 = 28
        ControlZone = 29
        AuraGenerator = 30
        DungeonDifficulty = 31
        BarberChair = 32
        DestructibleBuilding = 33
        GuildBank = 34
        Trapdoor = 35
        Newflag = 36
        Newflagdrop = 37
        GarrisonBuilding = 38
        GarrisonPlot = 39
        ClientCreature = 40
        ClientItem = 41
        CapturePoint = 42
        PhaseableMO = 43
        GarrisonMonument = 44
        GarrisonShipment = 45
        GarrisonMonumentPlaque = 46
        NUM_GAMEOBJECT_TYPE = 47
    
    
    class eCGGameObjectState(IntEnum):
        # Show in world as used and not reset. (Closed door open)
        Active = 0
        # Show in world as read. (Closed door close)
        Ready = 1
        # Show in world as used in alt way and not reset (closed door open by cannon fire)
        ActiveAlternative = 2

    Code:
    class CGGameObject(CGObject):
        # PercentHealth = char GAMEOBJECT_BYTES_1[4] = 
        # { 
        #      byte PercentHealth -> (255 = 0xFF = 100%)
        #      byte Unknown
        #      byte TypeId        -> eCGGameObjectTypeId
        #      byte State         -> eCGGameObjectState
        # }
        def TypeId(self):
            ret = Memory().ReadUInt32(GetDescriptorOffset(eCGGameObjectData.PercentHealth), self.DescriptorFields())
            ret = ((ret >> 8) & 0xFF)
            return eCGGameObjectTypeId(ret)
    
    
        def State(self):
            ret = Memory().ReadUInt32(GetDescriptorOffset(eCGGameObjectData.PercentHealth), self.DescriptorFields())
            return eCGGameObjectState(ret)
    
    
        def PercentHealth(self):
            ret = Memory().ReadUInt32(GetDescriptorOffset(eCGGameObjectData.PercentHealth), self.DescriptorFields())
            ret = ((ret >> 24) & 0xFF)
            return ret

  15. Thanks InnerSilence, klumpen (2 members gave Thanks to oiramario for this useful post)
  16. #14
    klumpen's Avatar Active Member
    Reputation
    18
    Join Date
    Apr 2007
    Posts
    69
    Thanks G/R
    31/12
    Trade Feedback
    2 (100%)
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by oiramario View Post
    Code:
    class eCGGameObjectTypeId(IntEnum):
        Door = 0
        Button = 1
        Questgiver = 2
        Chest = 3 # Herbs, Minerals, Chests
        Binder = 4
        ....
    
    class CGGameObject(CGObject):
        # PercentHealth = char GAMEOBJECT_BYTES_1[4] = 
        # { 
        #      byte PercentHealth -> (255 = 0xFF = 100%)
        #      byte Unknown
        #      byte TypeId        -> eCGGameObjectTypeId
        #      byte State         -> eCGGameObjectState
        # }
        def TypeId(self):
            ret = Memory().ReadUInt32(GetDescriptorOffset(eCGGameObjectData.PercentHealth), self.DescriptorFields())
            ret = ((ret >> 8) & 0xFF)
            return eCGGameObjectTypeId(ret)
    Sorry for the necrobump, but I couldn't find a more recent resource on the topic. You wouldn't happen to know if the above holds true in WoTLK Classic? Aside from the Descriptors, that doesn't seem to be a thing anymore (or so I'm told).

Similar Threads

  1. How to get to Emerald Dream on retail 3.3.2-3.3.5 [OUT DATED]
    By shorstuff910mc in forum World of Warcraft General
    Replies: 39
    Last Post: 08-22-2012, 05:38 AM
  2. How to get to the outlands on a live blizzard server
    By Matt in forum World of Warcraft Exploits
    Replies: 4
    Last Post: 06-16-2006, 05:27 PM
  3. How to get on the roof top in CH
    By Matt in forum World of Warcraft Exploits
    Replies: 6
    Last Post: 06-15-2006, 08:55 AM
  4. How to get behind Orgrimmar (pics)
    By Matt in forum World of Warcraft Guides
    Replies: 16
    Last Post: 05-03-2006, 01:33 AM
  5. How to get rid of 1.10 patch?
    By Bossman4 in forum World of Warcraft General
    Replies: 1
    Last Post: 05-02-2006, 01:36 AM
All times are GMT -5. The time now is 09:35 PM. Powered by vBulletin® Version 4.2.3
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved. User Alert System provided by Advanced User Tagging (Pro) - vBulletin Mods & Addons Copyright © 2024 DragonByte Technologies Ltd.
Digital Point modules: Sphinx-based search