WOTLKC Build: 46368 menu

User Tag List

Page 2 of 4 FirstFirst 1234 LastLast
Results 16 to 30 of 56
  1. #16
    Hrap's Avatar Member
    Reputation
    12
    Join Date
    Oct 2018
    Posts
    111
    Thanks G/R
    12/4
    Trade Feedback
    0 (0%)
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Aigewen View Post
    Hi Razzue, How to read other players' names? I read other threads and you mentioned it should be read in the name cache. Is it the address [Base + Object_Manager.Names]. I read this address and find it is a pointer to other pointers but I can't find any names.

    I'm also interested in this question, I think it has something to do with the GUID

    this is how it was done on 3,3,5
    Code:
    char* PlayerObject::GetName()
    {
    	char* Wname[12];
    	unsigned long mask, base_, offset, current, shortGUID, testGUID;
    	mask = WowMemory->ReadUint(nameStore + nameMask);
    	base_ = WowMemory->ReadUint(nameStore + nameBase);
    	shortGUID = this->GetGuid() & 0xffffffff;
    	offset = 12 * (mask & shortGUID);
    	current = WowMemory->ReadUint(base_ + offset + 8);
    	offset = WowMemory->ReadUint(base_ + offset);
    		if ((current & 0x1) == 0x1) { return "error1"; }
    	testGUID = WowMemory->ReadUint(current);
    
    	while (testGUID != shortGUID)
    	{
    		current = WowMemory->ReadUint(current + offset + 4);
    
    		if ((current & 0x1) == 0x1) { return "error1"; }
    		testGUID = WowMemory->ReadUint(current);
    	}
    	return encode(WowMemory->ReadCStr(current + nameString,12),12);
    }
    I think it's something like this too
    I would like to understand how to do this in the current version

    WOTLKC Build: 46368
  2. #17
    Razzue's Avatar Contributor Avid Ailurophile

    CoreCoins Purchaser Authenticator enabled
    Reputation
    379
    Join Date
    Jun 2017
    Posts
    588
    Thanks G/R
    186/268
    Trade Feedback
    2 (100%)
    Mentioned
    14 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Hrap View Post
    Compiled your project, thank you very much, everything works
    I will try to compile the dumper now
    You shouldn't need to compile namreebs unpacker, if you check out the release tags there should be pre-compiled versions that still work fine

    For Nam's unpacker all you gotta do is drop wow's .exe onto the unpackers .exe, and wait for it to work it's magic

    As for player name cache, it's actually very similar to reading the object manager externally (though again, I'm sure there's a few ways to go about it)
    "May all your bacon burn"

  3. #18
    Hrap's Avatar Member
    Reputation
    12
    Join Date
    Oct 2018
    Posts
    111
    Thanks G/R
    12/4
    Trade Feedback
    0 (0%)
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    Thanks I found the compiled version, I will test it, everything turned out to be much easier than I expected, thanks a lot

  4. #19
    tommingc's Avatar Active Member
    Reputation
    18
    Join Date
    Nov 2022
    Posts
    19
    Thanks G/R
    8/2
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    @Razzue, thanks for the continuous post of the offsets!


    @Hrap Just FYI, I'm using a tough way to do this(under c#), Really do not suggest creating a thread for every name call. I believe there is an easier way to do this, but as I just started, I will leave it as this for now until some bro tells me a better way.


    //replace 0xCC with address of the allocated memory cave
    byte[] asm =
    {
    0x49, 0xC7, 0xC1, 0x00, 0x00, 0x00, 0x00, //"mov r9, 0x0"
    0x49, 0xC7, 0xC0, 0x01, 0x00, 0x00, 0x00, //"mov r8, 0x01"
    0x48, 0xC7, 0xC2, 0x04, 0x00, 0x00, 0x00, //mov rdx, 0x04
    0x48, 0xB9, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, //mov rcx, objptr
    0x48, 0xB8, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, //mov rax, ((ulong)BaseAddress + (ulong) namecall address //first dword after this one 48 8D 54 24 68 45 33 C9 ?? 89 ?? 24 68 44 8B C0 48 8B CE E8
    0x48, 0x83, 0xEC, 0x28, //sub rsp, 0x28
    0xFF, 0xD0, //call rax
    0x48, 0x83, 0xC4, 0x28, //add rsp, 0x28
    0x48, 0xA3, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, 0xCC, //mov [0xcccccccccccccccc], rax //get return value
    0xC3 //ret
    };
    Last edited by tommingc; 11-04-2022 at 04:08 AM.

  5. #20
    Razzue's Avatar Contributor Avid Ailurophile

    CoreCoins Purchaser Authenticator enabled
    Reputation
    379
    Join Date
    Jun 2017
    Posts
    588
    Thanks G/R
    186/268
    Trade Feedback
    2 (100%)
    Mentioned
    14 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by tommingc View Post
    ~~
    Originally Posted by Aigewen View Post
    ~~
    Originally Posted by Hrap View Post
    ~~
    Code:
    public ConcurrentDictionary<GUID, string> _playerNames = new();
    public string PlayerName(GUID input) 
        => _playerNames.TryGetValue(input, out var value) ? value : "Unknown";
    public async Task UpdateNames()
    {
        await Task.Factory.StartNew(() =>
        {
            var address = Game.Address + Offset;
            var maximum = Memory.Read<int>(address + 0x38);
    
    
            var pointerArray = Memory.ReadArray<IntPtr>(Memory.Read<IntPtr>(address + 0x10), maximum);
            if (pointerArray is { Length: <= 0 }) return;
    
    
            for (var i = 0; i < pointerArray.Length; i++)
            {
                var pointer = pointerArray[i];
                do
                {
                    var guid = Memory.Read<GUID>(pointer + 0x8);
                    var name = Memory.ReadString(pointer + 0x19, null, 20);
                    if (!guid.IsEmpty() && !string.IsNullOrEmpty(name))
                        _playerNames.AddOrUpdate(guid, name, (k, v) => v = name);
    
    
                    pointer = Memory.Read<IntPtr>(pointer + 0x0);
                } while (pointer.ToInt64() != 0);
            }
        });
    }
    Last edited by Razzue; 11-04-2022 at 09:05 AM.
    "May all your bacon burn"

  6. Thanks tommingc (1 members gave Thanks to Razzue for this useful post)
  7. #21
    Aigewen's Avatar Member
    Reputation
    1
    Join Date
    May 2022
    Posts
    10
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Razzue View Post
    Code:
    public ConcurrentDictionary<GUID, string> _playerNames = new();
    public string PlayerName(GUID input) 
        => _playerNames.TryGetValue(input, out var value) ? value : "Unknown";
    public async Task UpdateNames()
    {
        await Task.Factory.StartNew(() =>
        {
            var address = GameOverlay.Address + Offset;
            var maximum = Memory.Read<int>(address + 0x38);
    
    
            var pointerArray = Memory.ReadArray<IntPtr>(Memory.Read<IntPtr>(address + 0x10), maximum);
            if (pointerArray is { Length: <= 0 }) return;
    
    
            for (var i = 0; i < pointerArray.Length; i++)
            {
                var pointer = pointerArray[i];
                do
                {
                    var guid = Memory.Read<GUID>(pointer + 0x8);
                    var name = Memory.ReadString(pointer + 0x19, null, 20);
                    if (!guid.IsEmpty() && !string.IsNullOrEmpty(name))
                        _playerNames.AddOrUpdate(guid, name, (k, v) => v = name);
    
    
                    pointer = Memory.Read<IntPtr>(pointer + 0x0);
                } while (pointer.ToInt64() != 0);
            }
        });
    }
    Fantastic!! Thanks, Razzue.

  8. #22
    Hrap's Avatar Member
    Reputation
    12
    Join Date
    Oct 2018
    Posts
    111
    Thanks G/R
    12/4
    Trade Feedback
    0 (0%)
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    Thanks a lot , Razzue.

  9. #23
    Hrap's Avatar Member
    Reputation
    12
    Join Date
    Oct 2018
    Posts
    111
    Thanks G/R
    12/4
    Trade Feedback
    0 (0%)
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    Greetings, Razzue
    Such a question, what are the possible options for clicking on an object?
    For example, while fishing, in what way is it possible to click on the float
    Perhaps you, as a more experienced one, have already encountered this

  10. #24
    Hrap's Avatar Member
    Reputation
    12
    Join Date
    Oct 2018
    Posts
    111
    Thanks G/R
    12/4
    Trade Feedback
    0 (0%)
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    I believe it can be calculated.
    Let's say I know the position and tilt of the camera and the position of the float object, I think, given the perspective, it is possible to calculate which point on the screen to click to get into the game on the float

    But it's quite difficult, it seems to me, maybe there is an easier way, because the game calculates all this?

  11. #25
    tayl's Avatar Member
    Reputation
    6
    Join Date
    Aug 2020
    Posts
    17
    Thanks G/R
    3/5
    Trade Feedback
    2 (100%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Hrap View Post
    I believe it can be calculated.
    Let's say I know the position and tilt of the camera and the position of the float object, I think, given the perspective, it is possible to calculate which point on the screen to click to get into the game on the float

    But it's quite difficult, it seems to me, maybe there is an easier way, because the game calculates all this?
    Just use OpenGL or DirectX WorldToScreen, you can easily find how to do it in google.
    here's how i do it with dx
    Code:
       var proj = Matrix.PerspectiveFovRH(Fov * 0.6f, aspect, nearClip, farClip);
                var eye = new SharpDX.Vector3(cameraPos.X, cameraPos.Y, cameraPos.Z);
                var lookAt = new SharpDX.Vector3(cameraPos.X + m[0, 0], cameraPos.Y + m[0, 1], cameraPos.Z + m[0, 2]);
                var up = new SharpDX.Vector3(0f, 0f, 1f);
                var View = Matrix.LookAtRH(eye, lookAt, up);
                var inPos = new SharpDX.Vector3(pos.X, pos.Y, pos.Z);
                var outValue = SharpDX.Vector3.Project(inPos, bounds.X, bounds.Y, bounds.Width, bounds.Height, 
                    nearClip, farClip, Matrix.Identity * View * proj);
                if (!bounds.Contains((int)outValue.X, (int)outValue.Y))
                {
                    return System.Numerics.Vector2.Zero;
                }
                return new System.Numerics.Vector2(outValue.X, outValue.Y);

  12. #26
    Hrap's Avatar Member
    Reputation
    12
    Join Date
    Oct 2018
    Posts
    111
    Thanks G/R
    12/4
    Trade Feedback
    0 (0%)
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by tayl View Post
    Just use OpenGL or DirectX WorldToScreen, you can easily find how to do it in google.
    here's how i do it with dx
    Code:
       var proj = Matrix.PerspectiveFovRH(Fov * 0.6f, aspect, nearClip, farClip);
                var eye = new SharpDX.Vector3(cameraPos.X, cameraPos.Y, cameraPos.Z);
                var lookAt = new SharpDX.Vector3(cameraPos.X + m[0, 0], cameraPos.Y + m[0, 1], cameraPos.Z + m[0, 2]);
                var up = new SharpDX.Vector3(0f, 0f, 1f);
                var View = Matrix.LookAtRH(eye, lookAt, up);
                var inPos = new SharpDX.Vector3(pos.X, pos.Y, pos.Z);
                var outValue = SharpDX.Vector3.Project(inPos, bounds.X, bounds.Y, bounds.Width, bounds.Height, 
                    nearClip, farClip, Matrix.Identity * View * proj);
                if (!bounds.Contains((int)outValue.X, (int)outValue.Y))
                {
                    return System.Numerics.Vector2.Zero;
                }
                return new System.Numerics.Vector2(outValue.X, outValue.Y);
    Thanks,
    Will this work from external applications without intercepting Directx functions?

  13. #27
    Razzue's Avatar Contributor Avid Ailurophile

    CoreCoins Purchaser Authenticator enabled
    Reputation
    379
    Join Date
    Jun 2017
    Posts
    588
    Thanks G/R
    186/268
    Trade Feedback
    2 (100%)
    Mentioned
    14 Post(s)
    Tagged
    0 Thread(s)
    Why click? Just write a unit/objects guid to your mouse over GUID, then send the key bound to interact with mouse over, ezpz
    "May all your bacon burn"

  14. #28
    Hrap's Avatar Member
    Reputation
    12
    Join Date
    Oct 2018
    Posts
    111
    Thanks G/R
    12/4
    Trade Feedback
    0 (0%)
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    As an option)

    But a couple of questions arise
    How safe it is to write to the game's memory.
    And is there a game memory protection against such actions?
    Last edited by Hrap; 11-12-2022 at 07:26 AM.

  15. #29
    tommingc's Avatar Active Member
    Reputation
    18
    Join Date
    Nov 2022
    Posts
    19
    Thanks G/R
    8/2
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    or you can also createremotethread to do the interact action, but it still requires writeprocessmemory..

  16. #30
    Hrap's Avatar Member
    Reputation
    12
    Join Date
    Oct 2018
    Posts
    111
    Thanks G/R
    12/4
    Trade Feedback
    0 (0%)
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    the fact is that I want to avoid writing to the process memory as much as possible

    Previously, for the exact rotation of the player, I recorded the angle of rotation I needed in Player.position.rotation
    and this once led to a ban (though on a private server)
    now I do everything by sending keystrokes.
    It's not as accurate, but it works.

Page 2 of 4 FirstFirst 1234 LastLast

Similar Threads

  1. WOTLKC Build: 46158
    By Razzue in forum WoW Memory Editing
    Replies: 39
    Last Post: 12-05-2022, 05:58 PM
  2. WOTLKC Build: 45942
    By Razzue in forum WoW Memory Editing
    Replies: 27
    Last Post: 10-13-2022, 06:01 AM
  3. WOTLKC Build: 45704
    By Razzue in forum WoW Memory Editing
    Replies: 5
    Last Post: 09-30-2022, 12:18 AM
  4. WOTLKC Build: 45613
    By Razzue in forum WoW Memory Editing
    Replies: 1
    Last Post: 09-16-2022, 02:52 PM
  5. WOTLKC Build: 45572
    By Razzue in forum WoW Memory Editing
    Replies: 1
    Last Post: 09-14-2022, 11:37 AM
All times are GMT -5. The time now is 05:03 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