Item level? menu

User Tag List

Thread: Item level?

Results 1 to 9 of 9
  1. #1
    xzidez's Avatar Member
    Reputation
    12
    Join Date
    Dec 2007
    Posts
    135
    Thanks G/R
    1/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)

    Item level?

    Is there anyone out here who have managed to get the Item Level?
    Any hints / pointers would be greatly appreciated.

    the D3Item object contains nothing that seems to be the level..
    neither does the D3Attributes ...
    And I cant find anything inside the SNO for the items (which is where I would place my bets if I havent looked here already.. )

    Thanks

    Item level?
  2. #2
    botserver's Avatar Member
    Reputation
    6
    Join Date
    Jun 2012
    Posts
    9
    Thanks G/R
    1/1
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by xzidez View Post
    Is there anyone out here who have managed to get the Item Level?
    Any hints / pointers would be greatly appreciated.

    the D3Item object contains nothing that seems to be the level..
    neither does the D3Attributes ...
    And I cant find anything inside the SNO for the items (which is where I would place my bets if I havent looked here already.. )

    Thanks

    Here my script

    Code:
    $lista = IterateBackpack()
    _ArrayDisplay( $lista, "IterateBackpack" )
    
    
    Func IterateBackpack()
    	$mpqinfo = IndexSNO( 0x1548FB8 )
    	$armorOffs = 0
    	$weaponOffs = 0
    	$otherOffs = 0
    	for $j = 0 TO UBound($mpqinfo) - 1
    		If($mpqinfo[$j][1] = 19750) Then $armorOffs = $mpqinfo[$j][0]
    		If($mpqinfo[$j][1] = 19754) Then $weaponOffs = $mpqinfo[$j][0]
    		If($mpqinfo[$j][1] = 19753) Then $otherOffs = $mpqinfo[$j][0]
    	Next
    
    	Local $armorItems = GetLevels($armorOffs)
    	Local $weaponItems = GetLevels($weaponOffs)
    	Local $otherItems = GetLevels($otherOffs)
    	__ArrayConcatenate( $armorItems, $weaponItems )
    	__ArrayConcatenate( $armorItems, $otherItems )
    	
    	$_Count = _MemoryRead($_LocalActor_Count, $d3, 'int')
    	$CurrentOffset = $_LocalActor_3
    	Local $bagitems[$_Count + 1][13]
    	$total = 0
    	For $i = 0 To $_Count
    		$itemLoc        = _MemoryRead($CurrentOffset + 0x114, $d3, 'int')
    		If $itemLoc <> 0 Then
    			$CurrentOffset = $CurrentOffset + $ofs_LocalActor_StrucSize			
    			ContinueLoop
    		EndIf
    
    		$bagitems[$total][0]  = _MemoryRead($CurrentOffset, $d3, 'ptr')										;Id ACD
    		$bagitems[$total][1]  = $CurrentOffset																;Offset
    		$bagitems[$total][2]  = _MemoryRead($CurrentOffset + 0x4, $d3, 'char[64]')							;Name
    		$bagitems[$total][3]  = $itemLoc																	;Item Location
    		$bagitems[$total][4]  = StashPosX( _MemoryRead($CurrentOffset + 0x118, $d3, 'int') )				;Bagpack X
    		$bagitems[$total][5]  = StashPosY( _MemoryRead($CurrentOffset + 0x11C, $d3, 'int') )				;Bagpack Y
    		$bagitems[$total][6]  = _MemoryRead($CurrentOffset + 0xB4, $d3, 'ptr')								;Id GameBalance
    		$bagitems[$total][7]  = _MemoryRead($CurrentOffset + 0x120, $d3, 'ptr')								;Id Attrib
    		$bagitems[$total][8]  = 0																			;Ilvl
    		$bagitems[$total][9]  = IterateActorAtribs($bagitems[$total][0], $Atrib_Item_Quality_Level)			;QualityLevel
    		$bagitems[$total][10] = Round( IterateActorAtribs($bagitems[$total][0], $Atrib_Magic_Find) * 100 )	;MagicFind
    		$bagitems[$total][11] = _MemoryRead($CurrentOffset + 0x164, $d3, 'int' ) > 0						;Identified
    		$bagitems[$total][12] = Round( IterateActorAtribs($bagitems[$total][0], $Atrib_Gold_Find) * 100 )	;GoldFind
    		
    		For $j = 0 To UBound($armorItems) - 1
    			If $armorItems[$j][0] = $bagitems[$total][6] Then
    				$bagitems[$total][8] = $armorItems[$j][1]
    				ExitLoop
    			EndIf
    		Next
    		
    		$total += 1
    		$CurrentOffset = $CurrentOffset + $ofs_LocalActor_StrucSize
    	Next
    	If $total = 0 Then Return False
    	ReDim $bagitems[$total][13]
    	Return $bagitems
    EndFunc
    
    func IndexSNO($_offset,$_displayInfo = 0)
    	local $CurrentSnoOffset = 0x0
    	$_MainOffset = 	_MemoryRead($_offset, $d3, 'ptr')
    	$_Pointer = 	_MemoryRead($_MainOffset + 0x3c, $d3, 'ptr')
    	$_SnoCount = 	_MemoryRead($_Pointer + 0x10C, $d3, 'ptr')
    	if $_SnoCount >= 256 Then
    		$ignoreSNOcount = 1
    		$_SnoCount = 4056
    	Else
    		$ignoreSNOcount = 0
    	EndIf
    	$_SnoIndex = _MemoryRead($_Pointer + 0x148, $d3, 'ptr')
    	$_SNOName =  _MemoryRead($_Pointer, $d3, 'char[64]')
    	$TempWindex = $_SnoIndex +0xC
    	if $_displayInfo = 1 then ConsoleWrite("-----* Indexing "&$_SNOName& " *-----"&@crlf)
    	dim $_OutPut[$_SnoCount+1][2]
    	for $i = 1 to $_SnoCount step + 1
    		$_CurSnoOffset = _MemoryRead($TempWindex, $d3, 'ptr')
    		$_CurSnoID = _MemoryRead($_CurSnoOffset, $d3, 'ptr')
    		if $ignoreSNOcount = 1 and $_CurSnoOffset = 0x00000000 and $_CurSnoID = 0x00000000 then ExitLoop
    		if $ignoreSNOcount = 1 then $CurIndex = $i
    		$_OutPut[$i][0] = $_CurSnoOffset
    		$_OutPut[$i][1] = $_CurSnoID	
    		if $_displayInfo = 1 then ConsoleWrite($i & " Offset: " & $_CurSnoOffset & " SNOid: " & $_CurSnoID &@crlf)
    		$TempWindex = $TempWindex + 0x10
    	Next
    	if $ignoreSNOcount = 1 then redim $_OutPut[$CurIndex][2]
    	return $_OutPut
    EndFunc
    
    
    Func GetLevels($offset)
    	if $offset <> 0 Then
    		$ofs = $offset + 0x218;
    		$read = _MemoryRead($ofs, $d3, 'int')
    		while $read = 0
    			$ofs += 0x4
    			$read = _MemoryRead($ofs, $d3, 'int')
    		WEnd
    		$size =  _MemoryRead($ofs+0x4, $d3, 'int')
    		$size -= 0x5F0
    		$ofs = $offset + _MemoryRead($ofs, $d3, 'int')
    		$nr = $size/0x5F0
    		Local $snoItems[$nr+1][10]
    		$j = 0
    		for $i = 0 To $size Step 0x5F0
    			$ofs_address = $ofs+$i
    			$snoItems[$j][0] = _MemoryRead($ofs_address, $d3, 'ptr')
    			$snoItems[$j][1] = _MemoryRead($ofs_address+0x114, $d3, 'int') ;ilvl
    			$j += 1
    		Next
    	EndIf
    	return $snoItems
    EndFunc
    
    Func __ArrayConcatenate(ByRef $avArrayTarget, Const ByRef $avArraySource)
        If Not IsArray($avArrayTarget) Then Return SetError(1, 1, -1); $avArrayTarget is not an array
        If Not IsArray($avArraySource) Then Return SetError(1, 2, -1); $avArraySource is not an array
        
        Local $iUBoundTarget0 = UBound($avArrayTarget, 0), $iUBoundSource0 = UBound($avArraySource, 0)
        If $iUBoundTarget0 <> $iUBoundSource0 Then Return SetError(1, 3, -1); 1D/2D dimensionality did not match
        If $iUBoundTarget0 > 2 Then Return SetError(1, 4, -1); At least one array was 3D or more
        
        Local $iUBoundTarget1 = UBound($avArrayTarget, 1), $iUBoundSource1 = UBound($avArraySource, 1)
        
        Local $iNewSize = $iUBoundTarget1 + $iUBoundSource1
        If $iUBoundTarget0 = 1 Then
           ; 1D arrays
            ReDim $avArrayTarget[$iNewSize]
            For $i = 0 To $iUBoundSource1 - 1
                $avArrayTarget[$iUBoundTarget1 + $i] = $avArraySource[$i]
            Next
        Else
           ; 2D arrays
            Local $iUBoundTarget2 = UBound($avArrayTarget, 2), $iUBoundSource2 = UBound($avArraySource, 2)
            If $iUBoundSource2 > $iUBoundTarget2 Then Return SetError(1, 5, -1); 2D boundry of source too large for target
            ReDim $avArrayTarget[$iNewSize][$iUBoundTarget2]
            For $r = 0 To $iUBoundSource1 - 1
                For $c = 0 To $iUBoundSource2 - 1
                    $avArrayTarget[$iUBoundTarget1 + $r][$c] = $avArraySource[$r][$c]
                Next
            Next
        EndIf
        
        Return $iNewSize - 1
    EndFunc
    
    Func StashPosX( $_x )
       If $resolutionX = 1920 Then Return 1434 + ( $_X * 48 )
       Return 0
    EndFunc
    
    Func StashPosY( $_y )
       If $resolutionY = 1080 Then Return 609 + ( $_y * 48 )
       Return 0
    EndFunc
    Last edited by botserver; 08-22-2012 at 12:11 PM.

  3. #3

  4. #4
    xzidez's Avatar Member
    Reputation
    12
    Join Date
    Dec 2007
    Posts
    135
    Thanks G/R
    1/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    wow, so much autoit o.O
    Cant believe I missed that other thread. Thanks a bouch guys.

  5. #5
    xzidez's Avatar Member
    Reputation
    12
    Join Date
    Dec 2007
    Posts
    135
    Thanks G/R
    1/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    For those who are inprocess this can be retrieved with the function at 0x84A8C0.
    and for usage..
    Code:
               int a1 = 2;
               int a3 = 1;
               Ptr = GetAcd(ref a1, ref AcdId, ref a3);
    AcdId is the id found at D3Item + 0xB4
    You will get a pointer to the Acd record. at +0x114 you will find the itemlevel.
    When you are done with whatever you want to do dont forget to decrease the refcounter (this function calls GetSnoRecord).

    this function found at 0x8A2F90.
    and is used like this
    Code:
                int i = (int)Ptr;
                int gameBalanceData = Marshal.ReadInt32(new IntPtr(0x1548FB8));
                DecreaseRefCounter(snoTable, ref i);

    If I got some namings wrong please tell me

  6. #6
    Ascher's Avatar Member
    Reputation
    1
    Join Date
    Aug 2012
    Posts
    7
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Thanks, it worked for me.

    How to get snoTable for DecreaseRefCounter ?

    I'm use like this
    int a1 = 2;
    int a3 = 1;
    Ptr = GetAcd(ref a1, ref AcdId, ref a3);//Ptr to sno record
    int level = Marshal.ReadInt32(Ptr +0x114);//Item level

    int i = (int)Ptr;
    DecreaseRefCounter(snoTable, ref i);

  7. #7
    ValvePro's Avatar Sergeant
    Reputation
    18
    Join Date
    Jun 2012
    Posts
    62
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Here is the func. which returns the ItemLevel 0x84E160

  8. #8
    Ascher's Avatar Member
    Reputation
    1
    Join Date
    Aug 2012
    Posts
    7
    Thanks G/R
    0/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by ValvePro View Post
    Here is the func. which returns the ItemLevel 0x84E160
    wow, thanks man. I look this function in IDA and now I understand how to use

  9. #9
    xzidez's Avatar Member
    Reputation
    12
    Join Date
    Dec 2007
    Posts
    135
    Thanks G/R
    1/0
    Trade Feedback
    0 (0%)
    Mentioned
    0 Post(s)
    Tagged
    0 Thread(s)
    Originally Posted by Ascher View Post
    Thanks, it worked for me.

    How to get snoTable for DecreaseRefCounter ?

    I'm use like this
    int a1 = 2;
    int a3 = 1;
    Ptr = GetAcd(ref a1, ref AcdId, ref a3);//Ptr to sno record
    int level = Marshal.ReadInt32(Ptr +0x114);//Item level

    int i = (int)Ptr;
    DecreaseRefCounter(snoTable, ref i);
    Unfortunately I reverse this ones with each patch

    Valves function to get itemlevel wont need this I suppose. So if itemlevel is the only thing you want, go with this one

Similar Threads

  1. [Tool]Item level viewer (1.12/1.13c)
    By VX2 in forum Diablo 2
    Replies: 6
    Last Post: 05-06-2011, 08:27 PM
  2. [How-To] Extremely helpful tip for reaching the heroic item level cap. This allows you to que!
    By everground in forum World of Warcraft Guides
    Replies: 7
    Last Post: 12-10-2010, 09:25 PM
  3. Get level 245 item level in lvl 70
    By smusen in forum World of Warcraft Exploits
    Replies: 38
    Last Post: 01-10-2010, 10:05 AM
  4. Getting around the item level stats on Flame Leviathan.(Demolisher)
    By Ranam in forum World of Warcraft Exploits
    Replies: 21
    Last Post: 07-14-2009, 12:19 AM
  5. [HELP] Item Level
    By zavon in forum WoW EMU Questions & Requests
    Replies: 2
    Last Post: 10-12-2008, 11:13 PM
All times are GMT -5. The time now is 06:02 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