Retail 10.1.0.49365. Where did they shift UnitOrigin and UnitAngle? menu

User Tag List

Page 1 of 2 12 LastLast
Results 1 to 15 of 20
  1. #1
    Kovrizha's Avatar Active Member
    Reputation
    18
    Join Date
    Oct 2013
    Posts
    160
    Thanks G/R
    19/10
    Trade Feedback
    44 (100%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Retail 10.1.0.49365. Where did they shift UnitOrigin and UnitAngle?

    There is no problem with everything else. Nothing unusual.
    But what the heck is happened with UnitOrigin and UnitAngle?
    I cant locate them anymore.
    Code:
    CameraStruct = 0x3BED8F8
    CameraOffset = 0x3930
    CharacterSelection = 0x37DAFD0
    CorpseOrigin = 0x3C5A8A4
    IsTexting = 0x3BDE2EC-0x8
    LoadingScreen = 0x3E19698
    MerchantFrameGuid = 0x398E4E8+0x2A8
    MouseGuid = 0x3E196A0
    ObjectList = 0x3CE3D60
    ObjectFirst = 0x120
    ObjectNext = 0x18
    ObjectCount = 0x10
    PlayerGuid = 0x38FC728
    ZoneId = 0x3E199DC
    MapId = 0x3789818
    Logon = 0x3C5BFF8
    
    Guid = 0x8
    Type = 0x0
    Id = 0x88
    DynamicFlags = 0x8C
    StackCount = 0x190
    Durability = 0x19C
    MaxDurability = 0x1A0
    Slots = 0x460
    NumSlots = 0x458
    DisplayId = 0x190
    TypeId = 0x201
    ObjectOrigin = 0xB8
    UnitOrigin = ???
    UnitAngle = ???
    MountDisplayID = 0x1F8
    Casting = 0x363
    StandState = 0x1958
    Target = 0x1890
    Health = 0x18D8
    MaxHealth = 0x18E0
    Level = 0x18E8
    Race = 0x18CC
    Flags = 0x1910
    VisFlags = 0x195A
    ShapeshiftForm = 0x199B
    Spec = 0x1ECC
    QuestFirst = 0x1FA0
    Money = 0x4FF0
    Bags = 0x6768
    BackpackSlots = 0x67B8

    Retail 10.1.0.49365. Where did they shift UnitOrigin and UnitAngle?
  2. #2
    scizzydo's Avatar Contributor
    Reputation
    134
    Join Date
    Oct 2019
    Posts
    96
    Thanks G/R
    5/54
    Trade Feedback
    0 (0%)
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)
    0xA8 appears to be a pointer to the movement struct which contained all that before at 0xB0. So rather the old obj->origin->x out would be obj->ptr->origin->x (At least what I found, but I only dumped 10.1.0.49190). You can see this in the GetUnitSpeed function, it reads 0xA8 after getting the object pointer, then passing it to the function which gets the run speed:
    Code:
    sub_141BF2620   proc near
        mov     rax, [rcx+8]
        movss   xmm0, dword ptr [rax+1B0h]
        retn
    sub_141BF2620   endp
    EDIT:
    Loading latest 10.1 in IDA now, but loaded my tool and printed my player pointer to look at it in Reclass.NET, and the movement struct is at 0xB0 still, and my facing still at 0x30. I noticed that the speeds are shifted down to represent what was shown above. Your other offsets you have though don't match what I see. Waiting for IDA to finish up and reflect on all I use.

    EDIT 2:
    Looking at the binary for the latest PTR, your offsets are off by 0x10, movement is still at 0xB0 which has your yaw/position/speeds, type is at 0x10 (0x0 is your object vtables, 0x8 is the pointer to the display struct where you can get stuff like scale), GUID is at 0x18, Dynamic Flags at 0x9C (see UnitIsTapDenied), etc. Not sure how you got all of those, unless it was the EnumVisibleObjects where you see there is 2x, one that passes the object pointer into the callback, and one that passes the object GUID into the callback (-0x28 and 0x10 accordingly)
    Last edited by scizzydo; 05-01-2023 at 06:46 PM.

  3. Thanks Kovrizha (1 members gave Thanks to scizzydo for this useful post)
  4. #3
    Kovrizha's Avatar Active Member
    Reputation
    18
    Join Date
    Oct 2013
    Posts
    160
    Thanks G/R
    19/10
    Trade Feedback
    44 (100%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by scizzydo View Post
    Not sure how you got all of those, unless it was the EnumVisibleObjects where you see there is 2x, one that passes the object pointer into the callback, and one that passes the object GUID into the callback (-0x28 and 0x10 accordingly)
    Scizzydo, it seems, you are right. For years I used EnumVisibleObjects to traverse trough objest list:
    Code:
    //simplified version
    vCurMgr = MemoryReadInt(BinAddress + ObjectList, 8);
    vFirstObject = MemoryReadInt(vCurMgr + ObjectFirst, 8);
    vObjectCount = MemoryReadInt(vCurMgr + ObjectCount, 8);
    vAddress = vFirstObject;
    vObject = vAddress - ObjectNext;
    for (i = 0; i < vObjectCount; i++)
    {
    	vType = MemoryReadInt(vObject + 0x0, 2);
    	vGuid = MemoryRead(vObject + 0x8, 16);
    	vObjectZYX = MemoryRead(vObject + 0xB8, 12);
    	//...
    	vAddress = MemoryReadInt(vAddress, 8);
    	vObject = vAddress - ObjectNext;
    }
    But now they cleaned movement data from that.
    Are your ObjectFirst/ObjectNext the same?
    Code:
    ObjectFirst = 0x120
    ObjectNext = 0x18
    ObjectCount = 0x10

  5. #4
    scizzydo's Avatar Contributor
    Reputation
    134
    Join Date
    Oct 2019
    Posts
    96
    Thanks G/R
    5/54
    Trade Feedback
    0 (0%)
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)
    This is what I do:
    Code:
    if (pCurMgr && in_game && pCurMgr->ObjectCount) {
        auto pCurrent = pCurMgr->pFirst;
        while (true) {
            if (!pCurrent)
                break;
            auto pObj = reinterpret_cast<WoWObject*>(reinterpret_cast<uintptr_t>(pCurrent) - 0x28);
            // Doing stuff here
            pCurrent = pCurrent->pNext;
            if (pCurrent == pCurMgr->pFirst)
                break;
            }
        }
    }
    Code:
    struct CurMgr {
    	uint64_t ArraySize;				//0x0000
    	uintptr_t* ArrayBase;			//0x0008
    	uint64_t ObjectCount;			//0x0010
    	char pad_0018[8];				//0x0018
    	uint64_t ArraySize2;			//0x0020
    	void* Array2Base;				//0x0028
    	uint64_t ObjectsToFree;			//0x0030
    	uint64_t pad_0038[29];			//0x0038
    	CurMgrEntry* pFirst;			//0x0120
    	char pad_0128[24];				//0x0128
    	WoWGUID SomethingGUID;			//0x0140
    	WoWGUID ActivePlayerGUID;		//0x0150
    	uint32_t MapID;					//0x0160
    	char pad_0164[12];				//0x0164
    	void* pMovementGlobals;			//0x0170
    };
    I haven't confirmed the movement globals with 10.1 though, and honestly that struct is mostly from way older code, just updated for the count, first, activeplayer and mapid. The CurMgrEntry ptr is also at 0x28 of the WoWObject struct. Movement is still a pointer at 0xB0 from the base, and yaw is at 0x30 of that (where it was before 10.1)
    Last edited by scizzydo; 05-02-2023 at 10:34 AM.

  6. Thanks Kovrizha, gdfsxwy (2 members gave Thanks to scizzydo for this useful post)
  7. #5
    gdfsxwy's Avatar Active Member
    Reputation
    15
    Join Date
    Apr 2010
    Posts
    26
    Thanks G/R
    16/8
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    10.1 MovementFlags : *(DWORD64*)(obj + 0xA8+0x0+0x108
    10.1 X,Y,Z: *(DWORD64*)(obj + 0xA8+0x0+0x20
    10.1 UnitName: 0x128,0xF8

    10.1 ObjName:?
    Where are they?
    Please help me or tell me the method.
    thank!
    Last edited by gdfsxwy; 05-03-2023 at 03:44 AM.

  8. #6
    Mr.Sergey's Avatar Contributor
    Reputation
    113
    Join Date
    Apr 2009
    Posts
    195
    Thanks G/R
    5/21
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by gdfsxwy View Post
    10.1 ObjName:?
    Where are they?
    Please help me or tell me the method.
    thank!
    ReadUtf8String(ReadInt64(ReadInt64(ObjectBase + 0x108) + 0xE0)) - for gameobject
    ReadUtf8String(ReadInt64(ReadInt64(ObjectBase + 0x128) + 0xF8)) - for unit

  9. Thanks gdfsxwy, evil2 (2 members gave Thanks to Mr.Sergey for this useful post)
  10. #7
    gdfsxwy's Avatar Active Member
    Reputation
    15
    Join Date
    Apr 2010
    Posts
    26
    Thanks G/R
    16/8
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    You're right.

    My incorrect gameobject X, Y, Z caused me to not find the Name.

    It seems to change to * (DWORD64 *) (obj+0xE0)+0xB0

  11. #8
    Watermi's Avatar Member
    Reputation
    1
    Join Date
    May 2023
    Posts
    2
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    anyone knows CGPlayer_C__ClickToMove ?
    signature can't find 48 83 EC ? 48 83 B9 ? ? ? ? ? 7E 62 4C 8B 81 ? ? ?

  12. #9
    Tirthankara's Avatar Active Member
    Reputation
    18
    Join Date
    Jun 2017
    Posts
    47
    Thanks G/R
    4/16
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    - 10.0.0.46549
    Here's a new pattern

    Code:
    48 89 5C 24 ?? 57 48 83 EC 40 33 DB 48 39 99 ?? ?? ?? ?? 7E 6B
    
    reinterpret_cast<bool(__fastcall*)(uintptr_t*, Vector3*)>(m_base + Data.OfsMoveToVector3)(t, &Data.VStartX);
    where
    uintptr_t* t = GtPlayerPtr(); // GET_UNIT_FROM_NAME  //  new pattern  - E8 ?? ?? ?? ?? 48 85 C0 74 63 44 8B 80 ?? ?? ?? ?? 48
    if I'm not mistaken. But it only triggers once, and that's it. They must have changed something in the function - I haven't looked into it yet, I don't have time
    Last edited by Tirthankara; 05-03-2023 at 10:08 AM.

  13. #10
    scizzydo's Avatar Contributor
    Reputation
    134
    Join Date
    Oct 2019
    Posts
    96
    Thanks G/R
    5/54
    Trade Feedback
    0 (0%)
    Mentioned
    2 Post(s)
    Tagged
    0 Thread(s)
    ClickToMove is behind a ret check now (or at least the CGPlayer_C::ClickToMove always was, and the one that calls it (MoveToVector3 or w/e) used to not be, but is now also

  14. #11
    Tirthankara's Avatar Active Member
    Reputation
    18
    Join Date
    Jun 2017
    Posts
    47
    Thanks G/R
    4/16
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    I see why there was an error when I called - thank you

  15. #12
    Watermi's Avatar Member
    Reputation
    1
    Join Date
    May 2023
    Posts
    2
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by scizzydo View Post
    ClickToMove is behind a ret check now (or at least the CGPlayer_C::ClickToMove always was, and the one that calls it (MoveToVector3 or w/e) used to not be, but is now also
    how to actually spoof the op codes and return address. I could probably work out the expected parameters but i'm still relatively new to reversing / game hacking and i still a bit beyond my skill level. Thank you bro

  16. #13
    sendeos23's Avatar Active Member

    Reputation
    16
    Join Date
    Oct 2009
    Posts
    65
    Thanks G/R
    22/10
    Trade Feedback
    3 (100%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    * nothing to see here *

  17. #14
    sendeos23's Avatar Active Member

    Reputation
    16
    Join Date
    Oct 2009
    Posts
    65
    Thanks G/R
    22/10
    Trade Feedback
    3 (100%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Watermi View Post
    how to actually spoof the op codes and return address. I could probably work out the expected parameters but i'm still relatively new to reversing / game hacking and i still a bit beyond my skill level. Thank you bro
    google "x64-return-address-spoofing-source-explanation" - but in all seriousness you will need to bring your assembly / reverse knowledge up to a level to understand what is actually being done if you want to have any chance on getting this working - impossible to "spoon" this one

  18. #15
    helloworld1024's Avatar Member
    Reputation
    1
    Join Date
    Mar 2023
    Posts
    7
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Your offsets seems to be off by 0x10
    By the way can you tell me the sigs of
    CorpseOrigin = 0x3C5A8A4
    LoadingScreen = 0x3E19698
    Last edited by helloworld1024; 05-05-2023 at 01:06 AM.

Page 1 of 2 12 LastLast

Similar Threads

  1. Where are they???
    By Troh in forum Community Chat
    Replies: 9
    Last Post: 07-05-2007, 04:33 PM
  2. Where did the Hex Files go?
    By Karakanz in forum WoW ME Questions and Requests
    Replies: 2
    Last Post: 04-06-2007, 06:41 PM
  3. WoW packets.. where are they?
    By Stretch in forum World of Warcraft General
    Replies: 0
    Last Post: 01-28-2007, 01:54 PM
  4. where did it go?
    By oscdrumz in forum World of Warcraft General
    Replies: 8
    Last Post: 07-02-2006, 05:20 PM
All times are GMT -5. The time now is 01:00 AM. 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