[AutoIt] Diablo 3 Click To Move, Interaction, Actor Indexing. menu

User Tag List

Page 4 of 6 FirstFirst 123456 LastLast
Results 46 to 60 of 85
  1. #46
    dan934's Avatar Banned
    Reputation
    33
    Join Date
    Jun 2009
    Posts
    80
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by rannox View Post
    Anyone kind enough to point me in the right direction of where how I would get the rest of the actor pointers in CE from 0x15A0BEC? Or at least tell me if this assumption is wrong... 0x15A0BEC is just an address, and the same as 015A0BEC ...
    You need to follow the pointer chain for the Actors

    In CE - (0x15A0BEC, 0x8B0, 0x148,0) would give you the address of the first Actor. from there you need to mine through all the data.

    take a look at Blizzhackers • View topic - Diablo III Offsets, Globals, Funcs, Structs, Classes, etc. - 2nd post under structures. and you'll find all the info you need.

    [AutoIt] Diablo 3 Click To Move, Interaction, Actor Indexing.
  2. #47
    Deject3d's Avatar Member
    Reputation
    1
    Join Date
    Jul 2009
    Posts
    31
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by UnknOwned View Post
    hmm, never really had problems with it, but thanks for the headsup. Ill try to see what can cause this.

    But you had not at any time since you launched D3 had any other players in one of your games?
    And did you manually check the interaction fuction that the snowpower and GUID was the same as the one you used?
    I just re-checked in a 100% single player game. Still no pick up

    here's the full method:

    Code:
    	public void interactGUID(long guid) {
    		int snoPower = 0x7545;
    
    		System.out.println("Attempting interaction with guid: " + guid);
    
    		int myOffset = getCharacterOffset();
    
    		int clickToMove = baseHack.readMemory(myOffset + Addresses.ObjectManagerActorLinkToCTM.a, 4).getInt(0);
    
    		int clickToMoveCurX = clickToMove + Addresses.CurrentXOffset.a;
    		int clickToMoveCurY = clickToMove + Addresses.CurrentYOffset.a;
    		int clickToMoveCurZ = clickToMove + Addresses.CurrentZOffset.a;
    		int clickToMoveToX = clickToMove + Addresses.MoveToXOffset.a;
    		int clickToMoveToY = clickToMove + Addresses.MoveToYOffset.a;
    		int clickToMoveToZ = clickToMove + Addresses.MoveToZOffset.a;
    
    		float myPosX = baseHack.readMemory(clickToMoveCurX, 4).getFloat(0);
    		float myPosY = baseHack.readMemory(clickToMoveCurY, 4).getFloat(0);
    		float myPosZ = baseHack.readMemory(clickToMoveCurZ, 4).getFloat(0);
    
    		int clickToMoveToggle = clickToMove + Addresses.ToggleMove.a;
    		int clickToMoveFix = clickToMove + Addresses.FixSpeed.a;
    
    
    		baseHack.writeMemory(interactE+Addresses.InteractOffsetUNK1.a, 0x777c);
    		baseHack.writeMemory(interactE+Addresses.InteractOffsetUNK2.a, 0x1);
    		baseHack.writeMemory(interactE+Addresses.InteractOffsetUNK3.a, snoPower);
    		baseHack.writeMemory(interactE+Addresses.InteractOffsetUNK4.a, snoPower);
    		baseHack.writeMemory(interactE+Addresses.InteractOffsetMouseState.a, 0x1);
    		baseHack.writeMemory(interactE+Addresses.InteractOffsetGUID.a, guid);
    
    		
    		baseHack.writeMemory(clickToMoveToX, myPosX+1);
    		baseHack.writeMemory(clickToMoveToY, myPosY);
    		baseHack.writeMemory(clickToMoveToZ, myPosZ);
    		baseHack.writeMemory(clickToMoveToggle, 1);
    		baseHack.writeMemory(clickToMoveFix, 69736);
    		
    
    		
    		int temp = baseHack.readMemory(interactE+Addresses.InteractOffsetUNK2.a, 4).getInt(0);
    		System.out.println("value of interactE+Addresses.InteractOffsetUNK2.a = " + temp);
    		while(temp != 1) {
    			temp = baseHack.readMemory(interactE+Addresses.InteractOffsetUNK2.a, 4).getInt(0);
    			System.out.println("value of interactE+Addresses.InteractOffsetUNK2.a (inside loop) = " + temp);
    			try{Thread.sleep(10);}catch(Exception e){}
    		}
    	}
    with these offsets / addresses:

    Code:
    public enum Addresses {
    	ObjectManager(0x15A0BEC),
    	ObjectManagerActorOffsetA(0x8b0),
    	ObjectManagerActorCount(0x108),
    	ObjectManagerActorOffsetB(0x148),
    	ObjectManagerActorLinkToCTM(0x380),
    	ObjectManagerStructSize(0x428),
    	
    	Interact(0x01580A14),
    	InteractOffsetA(0xa8),
    	InteractOffsetB(0x58),
    	InteractOffsetUNK1(0x7f20),
    	InteractOffsetUNK2(0x7f44),
    	InteractOffsetUNK3(0x7f7c),
    	InteractOffsetUNK4(0x7f80),
    	InteractOffsetMouseState(0x7f84),
    	InteractOffsetGUID(0x7f88),
    	
    	FixSpeed(0x20),
    	ToggleMove(0x34),
    	CurrentXOffset(0xa8),
    	CurrentYOffset(0xac),
    	CurrentZOffset(0xb0),
    	MoveToXOffset(0x40),
    	MoveToYOffset(0x44),
    	MoveToZOffset(0x48),
    	CurrentX(0xa8),
    	CurrentY(0xac),
    	CurrentZ(0xb0),
    	RotationOffset(0x170);
    
    	int a;
    	Addresses(int a){this.a = a;}
    }
    where

    Code:
    int temp = baseHack.readMemory(interactE+Addresses.InteractOffsetUNK2.a, 4).getInt(0);
    never seems to return a correct looking value - just random ints.

    for example, if I drop a potion and run the code, my character successfully walks to the item, but i receive output similar to the following:

    Code:
    Current position: 161.933197, 62.344814, 0.100000
    moving to:
    Name: healthPotion_Mythic-150
    	GUID: 2025783363
    	[160.754944, 62.345436, 1.000000]
    	[2, -1, 2016804892]
    Attempting interaction with guid: 2025783363
    value of interactE+Addresses.InteractOffsetUNK2.a = 442
    value of interactE+Addresses.InteractOffsetUNK2.a (inside loop) = 446
    value of interactE+Addresses.InteractOffsetUNK2.a (inside loop) = 450
    value of interactE+Addresses.InteractOffsetUNK2.a (inside loop) = 454
    value of interactE+Addresses.InteractOffsetUNK2.a (inside loop) = 458
    value of interactE+Addresses.InteractOffsetUNK2.a (inside loop) = 462
    where the while loop runs infinitely.

    This seems to me like i'm potentially reading / writing incorrect addresses. It seems to match the code you've posted; was something updated in the 1.3 patch?
    Last edited by Deject3d; 06-25-2012 at 01:26 AM.

  3. #48
    rannox's Avatar Private
    Reputation
    1
    Join Date
    Mar 2010
    Posts
    12
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Change Interact to 0x15A0BD4

  4. #49
    Thrillseeker's Avatar Member
    Reputation
    4
    Join Date
    Feb 2007
    Posts
    95
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    If I interact with something, like a corpse or a gate, is there a way to check if I already have interacted with it?

    In other words can I check if something would still be marked blueish ingame?

  5. #50
    UnknOwned's Avatar Legendary
    Reputation
    713
    Join Date
    Nov 2006
    Posts
    583
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Thrillseeker View Post
    If I interact with something, like a corpse or a gate, is there a way to check if I already have interacted with it?

    In other words can I check if something would still be marked blueish ingame?
    Working on a update right now, with things like player and monster health and other atributes. That should solve your problem.

  6. #51
    pollock974's Avatar Private
    Reputation
    1
    Join Date
    Jun 2012
    Posts
    7
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    There seems to be something up with the object list. You can add up to 3 to $_Count and still get valid data. It is probably not a problem, the ones that get cut off seem to just be UI elements (at least from where i am testing). However i am wondering why. If $_itrObjectManagerCount is incorrect why is it incorrect? What is it leaving out? Is it always safe to add 3 to the count? Do you sometimes need to add 4 or more? The code below will show what i am talking about. Maybe i messed something up cherry picking from the OP but i dont think i did.

    *EDIT* - in my current test i am getting 107 from count yet i can increase count to 153ish, which is what i was getting earlier. Nothing changed but me getting DC due to inactivity and re-entering the game. I exited D3 completely and restarted and now $_Count is correct. I am going to note to check this next time i get DC'd, it seems count got off then.

    Code:
    #include <array.au3>
    #include <nomadmemory.au3>
    
    Opt("WinTitleMatchMode", -1)
    SetPrivilege("SeDebugPrivilege", 1)
    Global $ProcessID = WinGetProcess("Diablo III","")
    Global $d3 = _MemoryOpen($ProcessID)
    If @Error Then
       MsgBox(4096, "ERROR", "Failed to open memory for process;" & $ProcessID)
    	Exit
    EndIf
    _IterateOffsets()
    $array = _GetObjectList()
    _ArrayDisplay($array)
    
    Func _GetObjectList()
    	$_CurOffset = $_itrObjectManagerD
    	$_Count = _MemoryRead($_itrObjectManagerCount, $d3, 'int')
    	Dim $OBJ[1][9], $skip
    	For $i = 0 To $_Count + 3  ;!!!!!!HERE!!!!!
    		$OBJ[$i][0] = _MemoryRead($_CurOffset+0x4,   $d3, 'ptr')
    		$OBJ[$i][1] = _MemoryRead($_CurOffset+0x8,   $d3, 'char[64]')
    		$OBJ[$i][2] = _MemoryRead($_CurOffset+0xB0,  $d3, 'float')
    		$OBJ[$i][3] = _MemoryRead($_CurOffset+0xB4,  $d3, 'float')
    		$OBJ[$i][4] = _MemoryRead($_CurOffset+0xB8,  $d3, 'float')
    		$_CurOffset = $_CurOffset + $_ActorStructSize
    		ReDim $OBJ[UBound($OBJ) + 1][9]
    	Next
    	ReDim $OBJ[UBound($OBJ) - 1][9]
    	Return $OBJ
    EndFunc
    
    Func _IterateOffsets()
    	Global $ofs_ObjectManager =              0x15A0BEC
    	Global $ofs__ActorOffsetA =              0x8B0
    	Global $ofs__ActorOffsetB =              0x148
    	Global $ofs__ActorCount =                0x108
    	Global $ofs__ActorLinkToCTM =            0x380
    	Global $_ActorStructSize =               0x428
    	Global $_itrObjectManagerA  = _MemoryRead($ofs_ObjectManager, $d3, 'ptr')
    	Global $_itrObjectManagerB  = _MemoryRead($_itrObjectManagerA+$ofs__ActorOffsetA, $d3, 'ptr')
    	Global $_itrObjectManagerC  = _MemoryRead($_itrObjectManagerB+$ofs__ActorOffsetB, $d3, 'ptr')
    	Global $_itrObjectManagerD  = _MemoryRead($_itrObjectManagerC, $d3, 'ptr')
    	Global $_itrObjectManagerE  = _MemoryRead($_itrObjectManagerD, $d3, 'ptr')
    	Global $_itrObjectManagerCount  = $_itrObjectManagerB+$ofs__ActorCount
    EndFunc
    Last edited by pollock974; 06-25-2012 at 07:11 PM.

  7. #52
    chfxs's Avatar Member
    Reputation
    1
    Join Date
    Jul 2011
    Posts
    3
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    where is the health address?

  8. #53
    UnknOwned's Avatar Legendary
    Reputation
    713
    Join Date
    Nov 2006
    Posts
    583
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by pollock974 View Post
    There seems to be something up with the object list. You can add up to 3 to $_Count and still get valid data. It is probably not a problem, the ones that get cut off seem to just be UI elements (at least from where i am testing). However i am wondering why. If $_itrObjectManagerCount is incorrect why is it incorrect? What is it leaving out? Is it always safe to add 3 to the count? Do you sometimes need to add 4 or more? The code below will show what i am talking about. Maybe i messed something up cherry picking from the OP but i dont think i did.

    *EDIT* - in my current test i am getting 107 from count yet i can increase count to 153ish, which is what i was getting earlier. Nothing changed but me getting DC due to inactivity and re-entering the game. I exited D3 completely and restarted and now $_Count is correct. I am going to note to check this next time i get DC'd, it seems count got off then.

    Code:
    #include <array.au3>
    #include <nomadmemory.au3>
    
    Opt("WinTitleMatchMode", -1)
    SetPrivilege("SeDebugPrivilege", 1)
    Global $ProcessID = WinGetProcess("Diablo III","")
    Global $d3 = _MemoryOpen($ProcessID)
    If @Error Then
       MsgBox(4096, "ERROR", "Failed to open memory for process;" & $ProcessID)
        Exit
    EndIf
    _IterateOffsets()
    $array = _GetObjectList()
    _ArrayDisplay($array)
    
    Func _GetObjectList()
        $_CurOffset = $_itrObjectManagerD
        $_Count = _MemoryRead($_itrObjectManagerCount, $d3, 'int')
        Dim $OBJ[1][9], $skip
        For $i = 0 To $_Count + 3  ;!!!!!!HERE!!!!!
            $OBJ[$i][0] = _MemoryRead($_CurOffset+0x4,   $d3, 'ptr')
            $OBJ[$i][1] = _MemoryRead($_CurOffset+0x8,   $d3, 'char[64]')
            $OBJ[$i][2] = _MemoryRead($_CurOffset+0xB0,  $d3, 'float')
            $OBJ[$i][3] = _MemoryRead($_CurOffset+0xB4,  $d3, 'float')
            $OBJ[$i][4] = _MemoryRead($_CurOffset+0xB8,  $d3, 'float')
            $_CurOffset = $_CurOffset + $_ActorStructSize
            ReDim $OBJ[UBound($OBJ) + 1][9]
        Next
        ReDim $OBJ[UBound($OBJ) - 1][9]
        Return $OBJ
    EndFunc
    
    Func _IterateOffsets()
        Global $ofs_ObjectManager =              0x15A0BEC
        Global $ofs__ActorOffsetA =              0x8B0
        Global $ofs__ActorOffsetB =              0x148
        Global $ofs__ActorCount =                0x108
        Global $ofs__ActorLinkToCTM =            0x380
        Global $_ActorStructSize =               0x428
        Global $_itrObjectManagerA  = _MemoryRead($ofs_ObjectManager, $d3, 'ptr')
        Global $_itrObjectManagerB  = _MemoryRead($_itrObjectManagerA+$ofs__ActorOffsetA, $d3, 'ptr')
        Global $_itrObjectManagerC  = _MemoryRead($_itrObjectManagerB+$ofs__ActorOffsetB, $d3, 'ptr')
        Global $_itrObjectManagerD  = _MemoryRead($_itrObjectManagerC, $d3, 'ptr')
        Global $_itrObjectManagerE  = _MemoryRead($_itrObjectManagerD, $d3, 'ptr')
        Global $_itrObjectManagerCount  = $_itrObjectManagerB+$ofs__ActorCount
    EndFunc
    I have no idea why you wanted to index those elements.
    I didn't need them

    Originally Posted by chfxs View Post
    where is the health address?
    Health and stuff is comming in the next update (within the next 2 days), Belfigor posted a adress earlier but i would not recommend using it is not 100% accurate.




    On a side note.
    Anyone have some data on the bitmasks in the .acr files?

  9. #54
    pollock974's Avatar Private
    Reputation
    1
    Join Date
    Jun 2012
    Posts
    7
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by UnknOwned View Post
    I have no idea why you wanted to index those elements.
    I didn't need them
    You didnt index the name/x/y/z in the obj manager? I found the issue anyway and will try to replicate it when i get the chance and find out exactly what caused it. It may have just been a quirk, but it persisted until i restarted D3. I suspect its because i DC'd due to "inactivity" several times.

  10. #55
    Deject3d's Avatar Member
    Reputation
    1
    Join Date
    Jul 2009
    Posts
    31
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by rannox View Post
    Change Interact to 0x15A0BD4
    ;P working, thanks.

  11. #56
    picknicker's Avatar Member
    Reputation
    1
    Join Date
    Nov 2008
    Posts
    2
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by chfxs View Post
    where is the health address?
    Hi!

    First post, I know, I just wanted to show how I found the health value as float in % (0-1) from the Object Manager.
    Step1: Find the Object named "HealthBall_liquid-<Number>"
    Step2: HP are on offset 0x408.

    Below is the code I added to the IterateObjectList function, it works like a charm:

    Code:
    if StringInStr ( $_NAME, "HealthBall_liquid") then
        $MyHP = _MemoryRead($_CurOffset + 0x408, $d3, 'float')
        _log("MyHP: " & $MyHP)
    endif
    I assume this works as well for other objects which show resources like e.g. fury, I haven't tried is though.

    Now what I'm really interested in is how to tell friend from foe and how to determine what is loot (in which quality) and is it reachable or not. Very much looking forward to the OP update.
    Last edited by picknicker; 06-26-2012 at 02:05 AM.

  12. #57
    Thrillseeker's Avatar Member
    Reputation
    4
    Join Date
    Feb 2007
    Posts
    95
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    How are you guys coping with the randomness of the GUIDs and names of actors? Everytime an actor vanishes from the view and comes back it has a new name and GUID. Or am I doing something wrong?

  13. #58
    chfxs's Avatar Member
    Reputation
    1
    Join Date
    Jul 2011
    Posts
    3
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    The address is 0

  14. #59
    lsh's Avatar Private
    Reputation
    1
    Join Date
    Jun 2012
    Posts
    2
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    im is 0 too......

  15. #60
    UnknOwned's Avatar Legendary
    Reputation
    713
    Join Date
    Nov 2006
    Posts
    583
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    1 Post(s)
    Tagged
    0 Thread(s)
    Please don't PM me for request for the update. Its done when its done.
    But you can get a little sneak-peak.

    I'm doing a lot of cross referencing in the new version. It now pulls data from the diablo 3 data files directly from memory giving much more detailed information about the world around you. For example you can now do a request to only see monsters nearby you, and get information like race, type, localized name etc:
    Locating Nearby Monsters... TYPE RACE LEVEL HP_CUR HP_MAX LOCALIZED NAME PROX - Pastebin.com
    There is obviously a ton more data to get but haven't had the time to figure what is what.

Page 4 of 6 FirstFirst 123456 LastLast

Similar Threads

  1. Interact problems with Click to move
    By natt_ in forum WoW Memory Editing
    Replies: 3
    Last Post: 09-28-2014, 02:12 PM
  2. [Release] [AutoIt] Diablo 3 Click To Move, Interaction, Actor Handling. (Version 2)
    By UnknOwned in forum Diablo 3 Memory Editing
    Replies: 301
    Last Post: 09-30-2012, 07:52 PM
  3. [Diablo 3] Click to move?
    By diablothree in forum Diablo 3 Memory Editing
    Replies: 3
    Last Post: 01-14-2012, 04:29 AM
  4. Click to move?
    By ashleyww in forum WoW Memory Editing
    Replies: 32
    Last Post: 07-18-2009, 08:48 PM
  5. Click to Move Problem
    By Rival-Fr in forum WoW Memory Editing
    Replies: 5
    Last Post: 07-03-2009, 09:27 AM
All times are GMT -5. The time now is 05:31 AM. Powered by vBulletin® Version 4.2.3
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved. User Alert System provided by Advanced User Tagging (Pro) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.
Google Authenticator verification provided by Two-Factor Authentication (Free) - vBulletin Mods & Addons Copyright © 2025 DragonByte Technologies Ltd.
Digital Point modules: Sphinx-based search