[Fonction] Ne Pas Identifier
-
Ce sujet est fermé
#21
Lokiro
-
- Bannis
-
- 911 messages
Fragger
- Location :Quebec
- Hobbies :GMS Hacks/Bots
Posté 22 January 2013 - 03:20
#22
diablow
-
- Bannis
-
- 64 messages
Débutant lvl 2
Posté 22 January 2013 - 18:22
#region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_UseX64=n
#AutoIt3Wrapper_Res_requestedExecutionLevel=asInvoker
#endregion ;**** Directives created by AutoIt3Wrapper_GUI ****
;;================================================================================
;;================================================================================
;; Diablo 3 Au3 ToolKit
;; Based on Unkn0wned, voxatu & the RE community works
;;
;; By Opkllhibus, Leo11173
;;================================================================================
;;================================================================================
;;================================================================================
;; PRE FUNCTIONS
;;================================================================================
;;--------------------------------------------------------------------------------
;; Make sure you are running as admin
;;--------------------------------------------------------------------------------
$_debug = 1
#RequireAdmin
$Admin = IsAdmin()
If $Admin <> 1 Then
MsgBox(0x30, "ERROR", "This program require administrative rights you fool!")
Exit
EndIf
Global $hDll = DllOpen("ntdll.dll")
Func _HighPrecisionSleep($iMicroSeconds)
Local $hStruct
$hStruct = DllStructCreate("int64 time;")
DllStructSetData($hStruct, "time", -1 * ($iMicroSeconds * 10))
DllCall($hDll, "dword", "ZwDelayExecution", "int", 0, "ptr", DllStructGetPtr($hStruct))
EndFunc ;==>_HighPrecisionSleep
;;--------------------------------------------------------------------------------
;; Includes
;;--------------------------------------------------------------------------------
#include "lib\NomadMemory.au3" ;THIS IS EXTERNAL, GET IT AT THE AUTOIT WEBSITE
#include <math.au3>
#include <String.au3>
#include <Array.au3>
#include "lib\constants.au3"
;;--------------------------------------------------------------------------------
;; Initialize MouseCoords
;;--------------------------------------------------------------------------------
Opt("MouseCoordMode", 2) ;1=absolute, 0=relative, 2=client
Opt("MouseClickDownDelay", Random(90, 105))
Opt("SendKeyDownDelay", Random(90, 105))
;;--------------------------------------------------------------------------------
;; Open the process
;;--------------------------------------------------------------------------------
Opt("WinTitleMatchMode", -1)
SetPrivilege("SeDebugPrivilege", 1)
Global $ProcessID = WinGetProcess("[CLASS:D3 Main Window Class]", "")
Local $d3 = _MemoryOpen($ProcessID)
If @error Then
WinSetOnTop("[CLASS:D3 Main Window Class]", "", 0)
MsgBox(4096, "ERROR", "Failed to open memory for process;" & $ProcessID)
Exit
EndIf
;OffsetList()
;;================================================================================
;; FUNCTIONS
;;================================================================================
Func _logind3()
WinActivate("[CLASS:D3 Main Window Class]")
_log("Login")
Sleep(20)
Send($d3pass)
Sleep(2000)
Send("{ENTER}")
Sleep(Random(5000, 6000, 1))
EndFunc ;==>_logind3
Func CheckWindowD3()
If WinExists("[CLASS:D3 Main Window Class]") Then
WinActivate("[CLASS:D3 Main Window Class]")
WinSetOnTop("[CLASS:D3 Main Window Class]", "", 1)
Sleep(300)
Else
MsgBox(0,Default,"Fenêtre Diablo III absente.")
Terminate()
EndIf
Global $sized3 = WinGetClientSize("[CLASS:D3 Main Window Class]")
If $sized3[0] <> 800 Or $sized3[1] <> 600 Then
WinSetOnTop("[CLASS:D3 Main Window Class]", "", 0)
MsgBox(0,Default, "Erreur Dimension : Il faut être en 800 x 600 et non pas en " & $sized3[0] & " x " & $sized3[1] & ".")
Terminate()
Else
_log("Setting Window Diablo III OK",1)
EndIf
EndFunc ;==>CheckWindowD3
;;--------------------------------------------------------------------------------
; Function: FindActor()
; Description: Check if an actor is present or not
;
; Note(s): Return 1 if found in range or 0 if absent
;;--------------------------------------------------------------------------------
Func FindActor($name, $maxRange = 400)
Local $index, $offset, $count, $item[10], $find = 0
startIterateObjectsList($index, $offset, $count)
While iterateObjectsList($index, $offset, $count, $item)
If StringInStr($item[1], $name) And $item[9] < $maxRange Then
$find = 1
Return 1
ExitLoop
EndIf
WEnd
If $find = 0 Then SetError(1)
Return 0
EndFunc ;==>FindActor
;;--------------------------------------------------------------------------------
; Function: checkuiitemvisible()
; Description: search a value in the object manager
;;--------------------------------------------------------------------------------
Func checkuiitemvisible($valuetocheckfor, $visibility)
$ptr1 = _memoryread($ofs_objectmanager, $d3, "ptr")
$ptr2 = _memoryread($ptr1 + 2364, $d3, "ptr")
$ptr3 = _memoryread($ptr2 + 0, $d3, "ptr")
$ofs_uielements = _memoryread($ptr3 + 8, $d3, "ptr")
$uielementcount = _memoryread($ptr3 + 64, $d3, "int")
$counter = 0
While ($counter < $uielementcount)
$counter += 1
$uielemepointer = _memoryread($ofs_uielements + $counter * 4, $d3, "ptr")
While ($uielemepointer <> 0)
$npnt = _memoryread($uielemepointer + 528, $d3, "ptr")
$name = BinaryToString(_memoryread($npnt + 56, $d3, "byte[256]"), 4)
$visible = _memoryread($npnt + 40, $d3, "int")
If ($visible = $visibility) Then
$foundvalue = StringInStr($name, $valuetocheckfor)
If ($foundvalue >= 1) Then
Return True
EndIf
EndIf
$uielemepointer = _memoryread($uielemepointer, $d3, "ptr")
WEnd
WEnd
Return False
EndFunc ;==>checkuiitemvisible
Func listuiitemvisible()
;output kinda buggy but does the job
;use for dev only
$ptr1 = _memoryread($ofs_objectmanager, $d3, "ptr")
$ptr2 = _memoryread($ptr1 + 2364, $d3, "ptr")
$ptr3 = _memoryread($ptr2 + 0, $d3, "ptr")
$ofs_uielements = _memoryread($ptr3 + 8, $d3, "ptr")
$uielementcount = _memoryread($ptr3 + 64, $d3, "int")
$counter = 0
While ($counter < $uielementcount)
$counter += 1
$uielemepointer = _memoryread($ofs_uielements + $counter * 4, $d3, "ptr")
While ($uielemepointer <> 0)
$npnt = _memoryread($uielemepointer + 528, $d3, "ptr")
$name = BinaryToString(_memoryread($npnt + 56, $d3, "byte[256]"), 4)
$uitextptr = _memoryread($npnt + 0xAE0, $d3, "ptr")
$uitext = BinaryToString(_memoryread($uitextptr, $d3, "byte[1024]"), 4)
$visible = _memoryread($npnt + 40, $d3, "int")
If ($visible = 1) Then
ConsoleWrite(@CRLF & "count aka bucket: " & $counter & " " & $uitext)
ConsoleWrite(@CRLF & "count aka bucket: " & $counter & " " & $name)
EndIf
$uielemepointer = _memoryread($uielemepointer, $d3, "ptr")
WEnd
WEnd
EndFunc ;==>listuiitemvisible
Func fastcheckuiitemvisible($valuetocheckfor, $visibility, $bucket)
$ptr1 = _memoryread($ofs_objectmanager, $d3, "ptr")
$ptr2 = _memoryread($ptr1 + 2364, $d3, "ptr")
$ptr3 = _memoryread($ptr2 + 0, $d3, "ptr")
$ofs_uielements = _memoryread($ptr3 + 8, $d3, "ptr")
$uielementpointer = _memoryread($ofs_uielements + 4 * $bucket, $d3, "ptr")
While $uielementpointer <> 0
$npnt = _memoryread($uielementpointer + 528, $d3, "ptr")
$name = BinaryToString(_memoryread($npnt + 56, $d3, "byte[256]"), 4)
If StringInStr($name, $valuetocheckfor) Then
If _memoryread($npnt + 40, $d3, "int") = $visibility Then
Return True
Else
Return False
EndIf
EndIf
$uielementpointer = _memoryread($uielementpointer, $d3, "ptr")
WEnd
Return False
EndFunc ;==>fastcheckuiitemvisible
;;--------------------------------------------------------------------------------
; Function: fastCheckuiValue()
; Description: Get value of an UI element
;
; Note(s): Return checked UI value or return Fasle
;;--------------------------------------------------------------------------------
func fastCheckuiValue($valuetocheckfor, $visibility, $bucket)
$ptr1 = _memoryread($ofs_objectmanager, $d3, "ptr")
$ptr2 = _memoryread($ptr1 + 2364, $d3, "ptr")
$ptr3 = _memoryread($ptr2 + 0, $d3, "ptr")
$ofs_uielements = _memoryread($ptr3 + 8, $d3, "ptr")
$uielementpointer = _memoryread($ofs_uielements + 4 * $bucket, $d3, "ptr")
While $uielementpointer <> 0
$npnt = _memoryread($uielementpointer + 528, $d3, "ptr")
$name = BinaryToString(_memoryread($npnt + 56, $d3, "byte[1024]"), 4)
If StringInStr($name, $valuetocheckfor) Then
If _memoryread($npnt + 40, $d3, "int") = $visibility Then
$uitextptr = _memoryread($npnt + 0xAE0, $d3, "ptr")
$uitext = BinaryToString(_memoryread($uitextptr, $d3, "byte[1024]"),4)
; ConsoleWrite(@CRLF & $uitext)
Return $uitext
Else
_log($valuetocheckfor & " is invisible")
Return False
EndIf
EndIf
$uielementpointer = _memoryread($uielementpointer, $d3, "ptr")
WEnd
_log($valuetocheckfor & " not found")
Return False
Endfunc ;==>fastCheckuiValue
Func _playerdead()
$playerdeadlookfor = "NormalLayer.deathmenu_dialog"
$return = fastcheckuiitemvisible($playerdeadlookfor, 1, 969)
If ($return And $DeathCountToggle) Then
$Death += 1
$Die2FastCount += 1
$DeathCountToggle = False
EndIf
Return $return
EndFunc ;==>_playerdead
Func _inmenu()
$lobbylookfor = "Menu.PlayGameButton"
Return fastcheckuiitemvisible($lobbylookfor, 1, 654)
EndFunc ;==>_inmenu
Func _checkdisconnect()
$disclookfor = "Root.TopLayer.BattleNetModalNotifications_main.ModalNotification.Buttons.ButtonList.OkButton"
Return fastcheckuiitemvisible($disclookfor, 1, 1073)
EndFunc ;==>_checkdisconnect
Func _checkRepair()
$replookfor = "Root.NormalLayer.DurabilityIndicator"
Return fastcheckuiitemvisible($replookfor, 1, 239)
EndFunc ;==>_checkRepair
Func _onloginscreen()
$loginlookfor = "Root.NormalLayer.BattleNetLogin_main.LayoutRoot"
Return fastcheckuiitemvisible($loginlookfor, 1, 174)
EndFunc ;==>_onloginscreen
Func _escmenu()
$escmenuelookfor = "Root.TopLayer.gamemenu_dialog.gamemenu_bkgrnd.ButtonStackContainer.button_leaveGame"
Return fastcheckuiitemvisible($escmenuelookfor, 1, 1447)
EndFunc ;==>_escmenu
Func _ingame()
$gamelookfor = "game_progressBar_healthBall"
Return fastcheckuiitemvisible($gamelookfor, 1, 237)
EndFunc ;==>_ingame
Func _checkWPopen()
$checkWPopenlookfor = "Root.NormalLayer.waypoints_dialog_mainPage"
Return fastcheckuiitemvisible($checkWPopenlookfor, 1, 1398)
EndFunc ;==>_checkWPopen
Func _checkVendoropen()
$checkVendorOpenlookfor = "Root.NormalLayer.shop_dialog_mainPage"
Return fastcheckuiitemvisible($checkVendorOpenlookfor, 1, 1814)
EndFunc ;==>_checkVendoropen
Func _checkStashopen()
$_checkStashopenlookfor = "Root.NormalLayer.stash_dialog_mainPage"
Return fastcheckuiitemvisible($_checkStashopenlookfor, 1, 1291)
EndFunc ;==>_checkStashopen
Func _checkInventoryopen()
$_checkInventoryopenlookfor = "Root.NormalLayer.inventory_dialog_mainPage"
Return fastcheckuiitemvisible($_checkInventoryopenlookfor, 1, 1622)
EndFunc ;==>_checkInventoryopen
Func _townportal()
_log("Town Portal")
If _playerdead() = False Then
Sleep(200)
Send("t")
Sleep(Random(8000, 8500, 1))
Else
_log("No TP Cuz Your dead allready
EndIf
EndFunc ;==>_townportal
;;--------------------------------------------------------------------------------
; Function: IsInArea($area)
; Description: Check where we are
;
;;--------------------------------------------------------------------------------
Func IsInArea($area)
$area = GetLevelAreaId()
ConsoleWrite("Area " & $area & @CRLF)
Return $area = GetLevelAreaId()
EndFunc ;==>IsInArea
Func GetLevelAreaId()
;Return _MemoryRead(_MemoryRead(0x17E05A4, $d3, "int") + 0x40, $d3, "int")
Return _MemoryRead(_MemoryRead(0x17E3F14, $d3, "int") + 0x40, $d3, "int")
EndFunc ;==>GetLevelAreaId
Func LevelAreaConstants()
Global $A1_C6_SpiderCave_01_Entrance = 0xE3A6
Global $A1_C6_SpiderCave_01_Main = 0x132EC
Global $A1_C6_SpiderCave_01_Queen = 0xF506
Global $A1_Dun_Crypt_Dev_Hell = 0x36581
Global $A1_Fields_Cave_SwordOfJustice_Level01 = 0x1D455
Global $A1_Fields_Den = 0x21045
Global $A1_Fields_Den_Level02 = 0x2F6b8
Global $A1_Fields_RandomDRLG_CaveA_Level01 = 0x141C4
Global $A1_Fields_RandomDRLG_CaveA_Level02 = 0x141C5
Global $A1_Fields_RandomDRLG_ScavengerDenA_Level01 = 0x13D0D
Global $A1_Fields_RandomDRLG_ScavengerDenA_Level02 = 0x13D17
Global $A1_Fields_Vendor_Tinker_Exterior = 0x2bC0C
Global $A1_Highlands_RandomDRLG_GoatmanCaveA_Level01 = 0x14286
Global $A1_Highlands_RandomDRLG_GoatmanCaveA_Level02 = 0x14287
Global $A1_Highlands_RandomDRLG_WestTower_Level01 = 0x14196
Global $A1_Highlands_RandomDRLG_WestTower_Level02 = 0x14197
Global $A1_Random_Level01 = 0x33A17
Global $A1_trDun_Blacksmith_Cellar = 0x144A6
Global $A1_trDun_ButchersLair_02 = 0x16301
Global $A1_trDun_Cain_Intro = 0xED2A
Global $A1_trDun_Cave_Highlands_Random01_VendorRescue = 0x21310
Global $A1_trdun_Cave_Nephalem_01 = 0xEBEC
Global $A1_trdun_Cave_Nephalem_02 = 0xEBED
Global $A1_trdun_Cave_Nephalem_03 = 0xEBEE
Global $A1_trDun_Cave_Old_Ruins_Random01 = 0x278AC
Global $A1_trDun_CrownRoom = 0x18FDA
Global $A1_trDun_Crypt_Event_Tower_Of_Power = 0x138F4
Global $A1_trDun_Crypt_Flooded_Memories_Level01 = 0x18F9c
Global $A1_trDun_Crypt_Flooded_Memories_Level02 = 0x287A6
Global $A1_trdun_Crypt_Special_00 = 0x25BDC
Global $A1_trdun_Crypt_Special_01 = 0xECB9
Global $A1_trDun_Event_JarOfSouls = 0x2371E
Global $A1_trDun_FalseSecretPassage_01 = 0x14540
Global $A1_trDun_FalseSecretPassage_02 = 0x14541
Global $A1_trDun_FalseSecretPassage_03 = 0x14542
Global $A1_trDun_Jail_Level01 = 0x171d0
Global $A1_trDun_Jail_Level01_Cells = 0x1783D
Global $A1_trDun_Leoric01 = 0x4D3E
Global $A1_trDun_Leoric02 = 0x4D3F
Global $A1_trDun_Leoric03 = 0x4D40
Global $A1_trDun_Level01 = 0x4D44
Global $A1_trDun_Level04 = 0x4D47
Global $A1_trDun_Level05_Templar = 0x15763
Global $A1_trDun_Level06 = 0x4D49
Global $A1_trDun_Level07B = 0x4D4B
Global $A1_trDun_Level07D = 0x4D4D
Global $A1_trDun_Tyrael_Level09 = 0x1CAA3
Global $A1_trDun_TyraelJail = 0x24447
Global $A1_trOut_AdriasCellar = 0xF5F8
Global $A1_trOUT_AdriasHut = 0x4DD9
Global $A1_trOut_BatesFarmCellar = 0x248A5
Global $A1_trOUT_Church = 0x4DDD
Global $A1_trOut_Fields_Vendor_Curios = 0x1A3B7
Global $A1_trOut_Fields_Vendor_Curios_Exterior = 0x2BE7B
Global $A1_trOUT_FishingVillage = 0x4DDF
Global $A1_trOUT_FishingVillageHeights = 0x1FB03
Global $A1_trOut_ForlornFarm = 0x20B72
Global $A1_trOUT_Graveyard = 0x4DE2
Global $A1_trOUT_Highlands = 0x4DE4
Global $A1_trOUT_Highlands_Bridge = 0x16DC0
Global $A1_trOut_Highlands_DunExterior_A = 0x15718
Global $A1_trOUT_Highlands_ServantHouse_Cellar_Vendor = 0x29CD1
Global $A1_trOUT_Highlands_Sub240_GoatmanGraveyard = 0x1F95F
Global $A1_trOUT_Highlands2 = 0x4DE5
Global $A1_trOUT_Highlands3 = 0x4AF
Global $A1_trOut_Leoric_Manor_Int = 0x189F6
Global $A1_trOUT_LeoricsManor = 0x4DE7
Global $A1_trOut_MysticWagon = 0x20F08
Global $A1_trOUT_NewTristram = 0x4DEB
Global $A1_trOUT_NewTristram_AttackArea = 0x316CE
Global $A1_trOUT_NewTristramOverlook = 0x26186
Global $A1_trOut_Old_Tristram = 0x163FD
Global $A1_trOut_Old_Tristram_Road = 0x164BC
Global $A1_trOut_Old_Tristram_Road_Cath = 0x18BE7
Global $A1_trOut_OldTristram_Cellar = 0x1A22B
Global $A1_trOut_OldTristram_Cellar_1 = 0x1A104
Global $A1_trOut_OldTristram_Cellar_2 = 0x1A105
Global $A1_trOut_OldTristram_Cellar_3 = 0x19322
Global $A1_trOut_oldTristram_TreeCave = 0x19C87
Global $A1_trOut_Scoundrel_Event_Old_Mill_2 = 0x35556
Global $A1_trOut_TownAttack_ChapelCellar = 0x1D43E
Global $A1_trOut_Tristram_CainsHouse = 0x1FC73
Global $A1_trOut_Tristram_Inn = 0x1AB91
Global $A1_trOut_Tristram_LeahsRoom = 0x15349
Global $A1_trOut_TristramFields_A = 0x4DF0
Global $A1_trOut_TristramFields_B = 0x4DF1
Global $A1_trOut_TristramFields_ExitA = 0xF085
Global $A1_trOut_TristramFields_Forsaken_Grounds = 0x2BD6F
Global $A1_trOut_TristramFields_Secluded_Grove = 0x2BD6E
Global $A1_trOut_TristramWilderness = 0x4DF2
Global $A1_trOut_TristramWilderness_SubScenes = 0x236AA
Global $A1_trOut_Vendor_Tinker_Room = 0x19821
Global $A1_trOut_Wilderness_BurialGrounds = 0x11C08
Global $A1_trOut_Wilderness_CorpseHouse = 0x30ADF
Global $A1_trOut_Wilderness_Sub80_FamilyTree = 0x236A1
Global $A2_Belial_Room_01 = 0xED55
Global $A2_Belial_Room_Intro = 0x13D1A
Global $A2_c1Dun_Swr_Caldeum_01 = 0x4D4F
Global $A2_c2dun_Zolt_TreasureHunter = 0x4D53
Global $A2_c3Dun_Aqd_Oasis_Level01 = 0xE069
Global $A2_cadun_Zolt_Timed01_Level01 = 0x4D52
Global $A2_cadun_Zolt_Timed01_Level02 = 0x29108
Global $A2_Caldeum = 0x19234
Global $A2_Caldeum_Uprising = 0x33613
Global $A2_caOut_Alcarnus_RandomCellar_1 = 0x245A7
Global $A2_caOut_Alcarnus_RandomCellar_2 = 0x245A8
Global $A2_caOut_Alcarnus_RandomCellar_3 = 0x245A9
Global $A2_caOUT_Boneyard_01 = 0xD24A
Global $A2_caOUT_Borderlands_Khamsin_Mine = 0xEE8A
Global $A2_caOUT_BorderlandsKhamsin = 0xF8B2
Global $A2_caOut_Cellar_Alcarnus_Main = 0x2FAC4
Global $A2_caOut_CT_RefugeeCamp = 0xD811
Global $A2_caOut_CT_RefugeeCamp_Gates = 0x318FD
Global $A2_caOut_CT_RefugeeCamp_Hub = 0x2917A
Global $A2_caOut_Hub_Inn = 0x2AA00
Global $A2_caOut_Interior_C_DogBite = 0x2D7BB
Global $A2_caOut_Interior_H_RockWorm = 0x232F5
Global $A2_caOut_Mine_Abandoned_Cellar = 0x4D81
Global $A2_caOut_Oasis = 0xE051
Global $A2_caOut_Oasis_Exit = 0x2ACE2
Global $A2_caOut_Oasis_Exit_A = 0x2AD07
Global $A2_caOut_Oasis_Rakanishu = 0x33BDD
Global $A2_caOut_Oasis_RandomCellar_1 = 0x27099
Global $A2_caOut_Oasis_RandomCellar_2 = 0x2709A
Global $A2_caOut_Oasis_RandomCellar_3 = 0x2709B
Global $A2_caOut_Oasis_RandomCellar_4 = 0x27bE7
Global $A2_caOut_Oasis1_Water = 0xE664
Global $A2_caOut_Oasis2 = 0xE058
Global $A2_caOut_OasisCellars = 0x1B100
Global $A2_caOUT_StingingWinds = 0x4D7F
Global $A2_caOUT_StingingWinds_Alcarnus_Tier1 = 0x4D71
Global $A2_caOUT_StingingWinds_Alcarnus_Tier2 = 0x4D72
Global $A2_caOUT_StingingWinds_Bridge = 0x29886
Global $A2_caOUT_StingingWinds_Canyon = 0x4D7C
Global $A2_caOUT_StingingWinds_FallenCamp01 = 0x288EF
Global $A2_caOUT_StingingWinds_PostBridge = 0x4D7E
Global $A2_caOUT_StingingWinds_PreAlcarnus = 0x4D7B
Global $A2_caOUT_StingingWinds_PreBridge = 0x4D7D
Global $A2_caOut_Stranded2 = 0x1DA4A
Global $A2_caOut_ZakarwaMerchantCellar = 0x1BEBB
Global $A2_Cave_Random01 = 0x26F64
Global $A2_Cave_Random01_Level02 = 0x35E85
Global $A2_CultistCellarEast = 0x19218
Global $A2_CultistCellarWest = 0x19214
Global $A2_dun_Aqd_Control_A = 0xF9F3
Global $A2_dun_Aqd_Control_B = 0xF9F4
Global $A2_dun_Aqd_Oasis_RandomFacePuzzle_Large = 0x26B82
Global $A2_dun_Aqd_Oasis_RandomFacePuzzle_Small = 0x26AB0
Global $A2_dun_Aqd_Special_01 = 0xF520
Global $A2_dun_Aqd_Special_A = 0xF53A
Global $A2_dun_Aqd_Special_B = 0xF53C
Global $A2_Dun_Aqd_Swr_to_Oasis_Level01 = 0x23D96
Global $A2_dun_Cave_BloodVial_01 = 0x31F55
Global $A2_dun_Cave_BloodVial_02 = 0x31F83
Global $A2_dun_Oasis_Cave_MapDungeon = 0x29616
Global $A2_dun_Oasis_Cave_MapDungeon_Level02 = 0x2F6bF
Global $A2_dun_PortalRoulette_A = 0x1B37F
Global $A2_Dun_Swr_Adria_Level01 = 0xE47E
Global $A2_Dun_Swr_Caldeum_Sewers_01 = 0x1B205
Global $A2_dun_Zolt_Blood02_Level01_Part1 = 0x1E12E
Global $A2_dun_Zolt_Blood02_Level01_Part2 = 0x25872
Global $A2_Dun_Zolt_BossFight_Level04 = 0xEB22
Global $A2_dun_Zolt_Head_Random01 = 0xF0C0
Global $A2_Dun_Zolt_Level01 = 0x4D55
Global $A2_Dun_Zolt_Level02 = 0x4D56
Global $A2_Dun_Zolt_Level03 = 0x4D57
Global $A2_Dun_Zolt_Lobby = 0x4D58
Global $A2_Dun_Zolt_LobbyCenter = 0x2AFBA
Global $A2_Dun_Zolt_Random_Level01 = 0x4D59
Global $A2_Dun_Zolt_Random_Level02 = 0x36571
Global $A2_dun_Zolt_Random_PortalRoulette_02 = 0x2FDCF
Global $A2_Dun_Zolt_ShadowRealm_Level01 = 0x13AD0
Global $A2_Event_DyingManMine = 0x2270B
Global $A2_Event_PriceOfMercy_Cellar = 0x2FD9E
Global $A2_Rockworm_Cellar_Cave = 0x2FE81
Global $A2_trDun_Boneyard_Spider_Cave_01 = 0x1B437
Global $A2_trDun_Boneyard_Spider_Cave_02 = 0x35758
Global $A2_trDun_Boneyard_Worm_Cave_01 = 0x1B433
Global $A2_trDun_Boneyard_Worm_Cave_02 = 0x35759
Global $A2_trDun_Cave_Oasis_Random01 = 0xF46F
Global $A2_trDun_Cave_Oasis_Random01_Level02 = 0x2F6C2
Global $A2_trDun_Cave_Oasis_Random02 = 0xF46E
Global $A2_trDun_Cave_Oasis_Random02_Level02 = 0x27551
Global $A2_dun_Aqd_Oasis_Level00 = 0x2F0B6
Global $A2_dun_Aqd_Oasis_Level01 = 0x2F0B1
Global $A3_AzmodanFight = 0x1B39C
Global $A3_Battlefield_A = 0x1B7A4
Global $A3_Battlefield_B = 0x1B7B5
Global $A3_Battlefield_C = 0x1B7C4
Global $A3_Bridge_01 = 0x10F80
Global $A3_Bridge_Choke_A = 0x25DA8
Global $A3_Dun_Battlefield_Gate = 0x25C14
Global $A3_dun_Bridge_Interior_Random01 = 0x224ad
Global $A3_dun_Bridge_Interior_Random02 = 0x32270
Global $A3_Dun_Crater_Level_01 = 0x15040
Global $A3_Dun_Crater_Level_02 = 0x1d209
Global $A3_Dun_Crater_Level_03 = 0x1d20a
Global $A3_dun_Crater_ST_Level01 = 0x13b97
Global $A3_dun_Crater_ST_Level01B = 0x1d365
Global $A3_dun_Crater_ST_Level02 = 0x13b98
Global $A3_dun_Crater_ST_Level02B = 0x2200a
Global $A3_dun_Crater_ST_Level04 = 0x14cd2
Global $A3_dun_Crater_ST_Level04B = 0x1d368
Global $A3_dun_IceCaves_Random_01 = 0x2e3a1
Global $A3_dun_IceCaves_Random_01_Level_02 = 0x36206
Global $A3_dun_IceCaves_Timed_01 = 0x2ea66
Global $A3_dun_IceCaves_Timed_01_Level_02 = 0x36207
Global $A3_Dun_Keep_Hub = 0x16b11
Global $A3_Dun_Keep_Hub_Inn = 0x2d38c
Global $A3_Dun_Keep_Level03 = 0x126ac
Global $A3_Dun_Keep_Level04 = 0x16baf
Global $A3_Dun_Keep_Level05 = 0x21500
Global $A3_Dun_Keep_Random_01 = 0x2aa4a
Global $A3_Dun_Keep_Random_01_Level_02 = 0x36238
Global $A3_Dun_Keep_Random_02 = 0x2c7f2
Global $A3_Dun_Keep_Random_02_Level_02 = 0x36239
Global $A3_Dun_Keep_Random_03 = 0x2c802
Global $A3_Dun_Keep_Random_03_Level_02 = 0x3623a
Global $A3_Dun_Keep_Random_04 = 0x2c8e6
Global $A3_Dun_Keep_Random_04_Level_02 = 0x36241
Global $A3_Dun_Keep_Random_Cellar_01 = 0x35ee9
Global $A3_Dun_Keep_Random_Cellar_02 = 0x35ee8
Global $A3_Dun_Keep_Random_Cellar_03 = 0x303f7
Global $A3_Dun_Keep_TheBreach_Level04 = 0x3558f
Global $A3_dun_rmpt_Level01 = 0x16b20
Global $A3_dun_rmpt_Level02 = 0x16bf5
Global $A3_Gluttony_Boss = 0x1b280
Global $A3_dun_Hub_Adria_Tower = 0x31222
Global $A3_dun_hub_AdriaTower_Intro_01 = 0x3253e
Global $A4_dun_Diablo_Arena = 0x1abfb
Global $A4_dun_Diablo_Arena_Phase3 = 0x348c3
Global $A4_dun_Garden_of_Hope_01 = 0x1abca
Global $A4_dun_Garden_of_Hope_02 = 0x1abcc
Global $A4_dun_Garden3_SpireEntrance = 0x1d44a
Global $A4_dun_Heaven_1000_Monsters_Fight = 0x1aa5d
Global $A4_dun_Heaven_1000_Monsters_Fight_Entrance = 0x2f169
Global $A4_dun_Hell_Portal_01 = 0x1abd6
Global $A4_dun_Hell_Portal_02 = 0x1abdb
Global $A4_Dun_Keep_Hub = 0x301ed
Global $A4_dun_LibraryOfFate = 0x23120
Global $A4_dun_Spire_00 = 0x307a4
Global $A4_dun_Spire_01 = 0x1abe2
Global $A4_dun_Spire_02 = 0x1abe4
Global $A4_dun_Spire_03 = 0x1abe6
Global $A4_dun_Spire_04 = 0x33728
Global $A4_dun_Spire_SigilRoom_A = 0x313c4
Global $A4_dun_Spire_SigilRoom_B = 0x2ae7a
Global $A4_dun_Spire_SigilRoom_C = 0x313c6
Global $A4_dun_Spire_SigilRoom_D = 0x313c7
Global $A4_dun_Diablo_ShadowRealm_01 = 0x25845
Global $A4_dun_spire_DiabloEntrance = 0x3227a
Global $A4_dun_spire_exterior = 0x34964
Global $Axe_Bad_Data = 0x4d60
Global $PvP_Maze_01 = 0x4da2
Global $PvP_Octogon_01 = 0x4da3
Global $PvP_Pillar_01 = 0x4da4
Global $PvP_Stairs_01 = 0x4da5
Global $PvP_Test_BlueTeam = 0x4da6
Global $PvP_Test_Neutral = 0x4da7
Global $PvP_Test_RedTeam = 0x4da8
Global $PvPArena = 0x4d9c
EndFunc ;==>LevelAreaConstants
;;--------------------------------------------------------------------------------
;; Find which Act we are in
;;--------------------------------------------------------------------------------
Func GetAct()
If $Act = 0 Then
$arealist = FileRead("lib\area.txt")
$area = GetLevelAreaId()
_log(" We are in map : " & $area)
Local $pattern = "([\w'-]{5,80})\t\W\t" & $area
$asResult = StringRegExp($arealist, $pattern, 1)
If @error == 0 Then
Global $MyArea = $asResult[0]
If StringInStr($MyArea, "a1") Then
$Act = 1
ElseIf StringInStr($MyArea, "a2") Then
$Act = 2
ElseIf StringInStr($MyArea, "a3") Then
$Act = 3
ElseIf StringInStr($MyArea, "a4") Then
$Act = 4
EndIf
; _log("We are in map : " & $area &" " & $asResult[0])
;set our vendor aaccording to the act we are in as we know it.
Switch $Act
Case 1
Global $RepairVendor = "UniqueVendor_miner_InTown"
Case 2
Global $RepairVendor = "UniqueVendor_Peddler_InTown" ; act 2 fillette
Case 3
Global $RepairVendor = "UniqueVendor_Collector_InTown" ; act 3
Case 4
Global $RepairVendor = "UniqueVendor_Collector_InTown" ; act 3
EndSwitch
_log("Our Current Act is : " & $Act & " ---> So our vendor is : " & $RepairVendor)
EndIf
EndIf
EndFunc ;==>GetAct
;;--------------------------------------------------------------------------------
;; Adapt repair tab aaccording to MP act and diff
;;--------------------------------------------------------------------------------
Func GetRepairTab()
GetMonsterPow2()
GetDifficulty()
GetAct()
If $MP > 0 And $GameDifficulty = 4 Then
Switch $Act
Case 1
Global $RepairTab = 1
Case 2 To 4
Global $RepairTab = 2
EndSwitch
Else
Switch $Act
Case 1
Global $RepairTab = 2
Case 2 To 4
Global $RepairTab = 3
EndSwitch
EndIf
_log("RepairTab : " & $RepairTab & " ---> MP : " & $MP & " GameDiff : " & $GameDifficulty)
EndFunc ;==>GetRepairTab
;;--------------------------------------------------------------------------------
;; Find MP MF handicap
;; Get MF handicap and deduce game MP from it
;;
;;--------------------------------------------------------------------------------
Func GetMonsterPow()
$MfCap = (IterateActorAtribs($_MyGuid, $Atrib_Magic_Find_Handicap) * 10)
$MP = Round($MfCap, 0)
_log("Power monster : " & $MP)
EndFunc ;==>GetMonsterPow
;;--------------------------------------------------------------------------------
;; Find MonsterPower
;; Get it Via UI element
;;
;;--------------------------------------------------------------------------------
Func GetMonsterPow2()
$GetMonsterPow2 = fastCheckuiValue('Root.NormalLayer.minimap_dialog_backgroundScreen.minimap_dialog_pve.clock', 1, 28)
$asMpResult = StringRegExp($GetMonsterPow2, '(\()([0-9]{1,2})(\))',1)
If @error == 0 Then
$MP = Number($asMpResult[1])
Else
$MP = 0
Endif
_log("Power monster : " & $MP)
;_log("Power monster : " & $GetMonsterPow2)
EndFunc ;==>GetMonsterPow
;;--------------------------------------------------------------------------------
;; Find Difficulty from vendor
;; Get vendor Level and deduce game difficulty from it
;; $GameDifficulty = not yet determined, 1 = Norm, 2 = Nm, 3 = Hell, 4 = Inferno
;;--------------------------------------------------------------------------------
Func GetDifficulty()
If $GameDifficulty = 0 Then
Local $index, $offset, $count, $item[4]
startIterateLocalActor($index, $offset, $count)
While iterateLocalActorList($index, $offset, $count, $item)
If StringInStr($item[1], $RepairVendor) Then
Global $npclevel = IterateActorAtribs($item[0], $Atrib_Level)
Switch $npclevel
Case 1 To 59
Global $GameDifficulty = 1
Case 60 To 70
Global $GameDifficulty = 4
EndSwitch
ExitLoop
EndIf
WEnd
_log("Game Difficulty is : " & $GameDifficulty)
EndIf
EndFunc ;==>GetDifficulty
;;--------------------------------------------------------------------------------
; Function: TownStateCheck()
; Description: Check if we are in town or not by comparing distance from stash
;
;;--------------------------------------------------------------------------------
Func _intown()
If $_debug Then _log("-----Checking if In Town------")
$town = findActor('Player_Shared_Stash', 448)
If Not @error Then
_log("We are in town ")
Return True
Else
_log("We are NOT in town ")
Return False
EndIf
EndFunc ;==>_intown
;==>TownStateCheck
;;--------------------------------------------------------------------------------
;; Getting Backpack Item Info
;;--------------------------------------------------------------------------------
Func IterateBackpack($bag = 0, $rlvl = 0)
;$bag = 0 for backpack and 15 for stash
;$rlvl = 1 for actual level requirement of item and 0 for base required level
$ptr1 = _memoryread($ofs_objectmanager, $d3, "ptr")
$ptr2 = _memoryread($ptr1 + 0x868, $d3, "ptr")
$ptr3 = _memoryread($ptr2 + 0x0, $d3, "ptr")
$_Count = _memoryread($ptr3 + 0x108, $d3, "int")
$CurrentOffset = _memoryread(_memoryread($ptr3 + 0x148, $d3, "ptr") + 0x0, $d3, "ptr");$_LocalActor_3
Local $__ACDACTOR[$_Count + 1][9]
_log(" IterateBackpack 1 ")
For $i = 0 To $_Count
$__ACDACTOR[$i][0] = _MemoryRead($CurrentOffset, $d3, 'ptr')
$__ACDACTOR[$i][1] = _MemoryRead($CurrentOffset + 0x4, $d3, 'char[64]')
$__ACDACTOR[$i][2] = _MemoryRead($CurrentOffset + 0x114, $d3, 'int')
$__ACDACTOR[$i][3] = _MemoryRead($CurrentOffset + 0x118, $d3, 'int')
$__ACDACTOR[$i][4] = _MemoryRead($CurrentOffset + 0x11C, $d3, 'int')
$__ACDACTOR[$i][5] = 0
$__ACDACTOR[$i][6] = _MemoryRead($CurrentOffset + $ofs_LocalActor_atribGUID, $d3, 'ptr')
$__ACDACTOR[$i][7] = $CurrentOffset
$__ACDACTOR[$i][8] = _MemoryRead($CurrentOffset + 0xB4, $d3, 'int')
$CurrentOffset = $CurrentOffset + $ofs_LocalActor_StrucSize
Next
_log(" IterateBackpack2 ")
For $i = $_Count To 0 Step -1
If $__ACDACTOR[$i][2] <> $bag Then
_ArrayDelete($__ACDACTOR, $i)
_log(" IterateBackpack3 ")
Else
_log(" IterateBackpack 4 ")
$__ACDACTOR[$i][5] = GetPackItemLevel($__ACDACTOR[$i][6], $Atrib_Requirement)
_log(" IterateBackpack 4-1 ")
If $rlvl Then
_log(" IterateBackpack 4-2 ")
$lvlReduce = GetPackItemLevel($__ACDACTOR[$i][6], $Atrib_Item_Level_Requirement_Reduction)
If $lvlReduce Then $__ACDACTOR[$i][5] = $__ACDACTOR[$i][5] - $lvlReduce
_log(" IterateBackpack 4-3 ")
EndIf
_log(" IterateBackpack 4-4 ")
EndIf
_log(" IterateBackpack 4-5 ")
Next
_log(" IterateBackpack 4-6 ")
_log(" IterateBackpack 5 ")
Return $__ACDACTOR
EndFunc ;==>IterateBackpack
;;--------------------------------------------------------------------------------
; Function: GetPackItemLevel($ACD, $_REQ)
;;--------------------------------------------------------------------------------
Func GetPackItemLevel($ACD, $_REQ)
;IterateLocalActor()
;$ACDIndex = _ArraySearch($__ACTOR, "0x" & Hex($_guid), 0, 0, 0, 1, 1, 1) ;this bitch is slow as hell
If $ACD = -1 Then Return False
$_Count = _MemoryRead($_ActorAtrib_Count, $d3, 'int')
If $_Count>500 Then
_log("Attention la valeur de Count était de " & $_Count)
$_Count=500
EndIf
$CurrentOffset = $_ActorAtrib_4
Dim $ACTORatrib
For $i = 0 To $_Count
$ACTORatrib = _MemoryRead($CurrentOffset, $d3, 'ptr')
If $ACTORatrib = $ACD Then
$test = _MemoryRead($CurrentOffset + 0x10, $d3, 'ptr')
$CurretOffset = $test
For $i = 0 To 825
$data = _MemoryRead($CurretOffset, $d3, 'ptr')
$CurretOffset = $CurretOffset + 0x4
If $data <> 0x0 Then
$AtribData = _MemoryRead($data + 0x4, $d3, 'ptr')
If StringLeft($AtribData, 7) = "0x0003B" Then
;ConsoleWrite("Debug :" &$data+0x4 & " : " & _MemoryRead($data+0x4, $d3, 'int') &@crlf) ;FOR DEBUGGING
If "0x" & StringRight($AtribData, 3) = $_REQ[0] Then
Return _MemoryRead($data + 0x8, $d3, $_REQ[1])
EndIf
EndIf
If StringLeft($AtribData, 7) = "0xFFFFF" Then
;ConsoleWrite("Debug :" &$data+0x4 & " : " & _MemoryRead($data+0x4, $d3, 'int') &@crlf) ;FOR DEBUGGING
If "0x" & StringRight($AtribData, 3) = $_REQ[0] Then
Return _MemoryRead($data + 0x8, $d3, $_REQ[1])
EndIf
EndIf
EndIf
Next
Return False
EndIf
$CurrentOffset = $CurrentOffset + $ofs_ActorAtrib_StrucSize
Next
Return False
EndFunc ;==>GetPackItemLevel
;;--------------------------------------------------------------------------------
;; Getting Backpack Item Info, extended to show some more info
;; $bag = 0 for backpack and 15 for stash
;;--------------------------------------------------------------------------------
Func IterateBackpackExtendedWithLvl($bag = 0)
$list = IndexSNO($gameBalance)
$armorOffs = 0
$weaponOffs = 0
$otherOffs = 0
For $j = 0 To UBound($list) - 1
;19750 = armor, 19754 = weapon, 1953 = other
If ($list[$j][1] = 19750) Then
$armorOffs = $list[$j][0]
EndIf
If ($list[$j][1] = 19754) Then
$weaponOffs = $list[$j][0]
EndIf
If ($list[$j][1] = 19753) Then
$otherOffs = $list[$j][0]
EndIf
Next
Local $armorItems = GetLevels($armorOffs)
Local $weaponItems = GetLevels($weaponOffs)
Local $otherItems = GetLevels($otherOffs)
Local $data = IterateBackpack($bag)
Local $armorItemsWithLvl = MapItemWithLvl($data, $armorItems, 8)
Local $weaponItemsWithLvl = MapItemWithLvl($data, $weaponItems, 8)
Local $otherItemsWithLvl = MapItemWithLvl($data, $otherItems, 8)
Local $allItems[UBound($armorItemsWithLvl, 1)][UBound($armorItemsWithLvl, 2)]
For $i = 0 To UBound($allItems) - 1 Step 1
If $armorItemsWithLvl[$i][9] <> "" Then
;copy from $armorItemsWithLvl to all items
For $j = 0 To UBound($armorItemsWithLvl, 2) - 1 Step 1
$allItems[$i][$j] = $armorItemsWithLvl[$i][$j]
Next
ElseIf $weaponItemsWithLvl[$i][9] <> "" Then
;copy from $weaponItemsWithLvl to all items
For $j = 0 To UBound($weaponItemsWithLvl, 2) - 1 Step 1
$allItems[$i][$j] = $weaponItemsWithLvl[$i][$j]
Next
ElseIf $otherItemsWithLvl[$i][9] <> "" Then
;copy from $otherItemsWithLvl to all items
For $j = 0 To UBound($otherItemsWithLvl, 2) - 1 Step 1
$allItems[$i][$j] = $otherItemsWithLvl[$i][$j]
Next
EndIf
Next
Return $allItems
EndFunc ;==>IterateBackpackExtendedWithLvl
;;--------------------------------------------------------------------------------
;; Maps snos containg a lvl to the item with that snoid
;;--------------------------------------------------------------------------------
Func MapItemWithLvl($items, $snowithlvl, $indexForBGID)
Local $newItems = $items
ReDim $newItems[UBound($items, 1)][UBound($items, 2) + UBound($snowithlvl, 2) + 9] ;add size for some new variables
For $i = 0 To UBound($items) - 1 Step 1
For $j = 0 To UBound($snowithlvl) - 1 Step 1
If $snowithlvl[$j][0] = $items[$i][$indexForBGID] Then
$newItems[$i][$indexForBGID + 1] = $snowithlvl[$j][1] ;ilvl
$newItems[$i][$indexForBGID + 2] = $snowithlvl[$j][2] ;min dmg
$newItems[$i][$indexForBGID + 3] = $snowithlvl[$j][3] ;;max dmg
$newItems[$i][$indexForBGID + 4] = $snowithlvl[$j][4] ;;min armor
$newItems[$i][$indexForBGID + 5] = $snowithlvl[$j][5] ;max armor
$newItems[$i][$indexForBGID + 6] = $snowithlvl[$j][6] ;min dmg modifier
$newItems[$i][$indexForBGID + 7] = $snowithlvl[$j][7] ;max dmg modifier
$newItems[$i][$indexForBGID + 8] = $snowithlvl[$j][8] ;gold
$newItems[$i][$indexForBGID + 9] = $snowithlvl[$j][9] ;weapon speed
;;some extra attributes
$newItems[$i][$indexForBGID + 10] = IterateActorAtribs($newItems[$i][0], $Atrib_Item_Quality_Level) ;quality lvl
$newItems[$i][$indexForBGID + 11] = IterateActorAtribs($newItems[$i][0], $Atrib_Strength_Item) ;str
$newItems[$i][$indexForBGID + 12] = IterateActorAtribs($newItems[$i][0], $Atrib_Vitality_Item) ;vit
$newItems[$i][$indexForBGID + 12] = IterateActorAtribs($newItems[$i][0], $Atrib_Intelligence_Item) ;int
$newItems[$i][$indexForBGID + 13] = IterateActorAtribs($newItems[$i][0], $Atrib_Dexterity_Item) ;dex
$newItems[$i][$indexForBGID + 15] = IterateActorAtribs($newItems[$i][0], $Atrib_Resistance_All) ;all res
$newItems[$i][$indexForBGID + 16] = Round(IterateActorAtribs($newItems[$i][0], $Atrib_Gold_Find) * 100) ;gf in %
$newItems[$i][$indexForBGID + 17] = Round(IterateActorAtribs($newItems[$i][0], $Atrib_Magic_Find) * 100) ;mf in %
$newItems[$i][$indexForBGID + 18] = Round(IterateActorAtribs($newItems[$i][0], $Atrib_Hitpoints_Max_Percent_Bonus_Item) * 100) ;life %
$newItems[$i][$indexForBGID + 19] = _MemoryRead($newItems[$i][7] + 0x164, $d3, 'int') > 0 ;0ffset + 164 ;true=unid, false=identified
ExitLoop
EndIf
Next
Next
Return $newItems
EndFunc ;==>MapItemWithLvl
;;--------------------------------------------------------------------------------
;; Gets levels from Gamebalance file, returns a list with snoid and lvl
;;--------------------------------------------------------------------------------
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') ;lvl
$snoItems[$j][2] = _MemoryRead($ofs_address + 0x1C8, $d3, 'float') ;min dmg
$snoItems[$j][3] = $snoItems[$j][2] + _MemoryRead($ofs_address + 0x1CC, $d3, 'float') ;max dmg
$snoItems[$j][4] = _MemoryRead($ofs_address + 0x224, $d3, 'float') ;min armor
$snoItems[$j][5] = $snoItems[$j][4] + _MemoryRead($ofs_address + 0x228, $d3, 'float') ;max armor
$snoItems[$j][6] = _MemoryRead($ofs_address + 0x32C, $d3, 'float') ;min dmg modifier
$snoItems[$j][7] = $snoItems[$j][4] + _MemoryRead($ofs_address + 0x330, $d3, 'float') ;max dmg modifier
$snoItems[$j][8] = _MemoryRead($ofs_address + 0x12C, $d3, 'int') ;gold price
$snoItems[$j][9] = _MemoryRead($ofs_address + 0x2D4, $d3, 'float') ;wpn speed
$j += 1
Next
EndIf
Return $snoItems
EndFunc ;==>GetLevels
Func array_affix()
local $ii=0
Local $index, $offset, $count, $item[10],$affix[200][5]
Startiterateobjectslist($index, $offset, $count)
While iterateObjectsList($index, $offset, $count, $item)
If $item[0] <> "" And $item[0] <> 0xFFFFFFFF Then
;checkForSpell()
If StringInStr($item[1],"petsweep") or StringInStr($item[1],"deathexplosion") or StringInStr($item[1],"creepMobArm") or StringInStr($item[1],"icecluster") or StringInStr($item[1],"deathstart") or StringInStr($item[1],"spore") or StringInStr($item[1],"arcaneenchanted") or StringInStr($item[1],"desecrator") or StringInStr($item[1],"plagued") or StringInStr($item[1],"poison") or StringInStr($item[1],"molten") Then
$affix[$ii][0] = $ii
$affix[$ii][1] = $item[1]
$affix[$ii][2] = $item[2]
$affix[$ii][3] = $item[3]
$affix[$ii][4] = $item[4]
$ii=$ii+1
EndIf
endif
wend
endfunc ;array_affix
Func maffmove()
local $ii=0
Local $index, $offset, $count, $item[10],$affix[200][5]
Local $mypos = getcurrentpos()
Local $myposs
Local $maff = timerinit()
Local $ord = 1
Local $abs = 1
Startiterateobjectslist($index, $offset, $count)
While iterateObjectsList($index, $offset, $count, $item)
If $item[0] <> "" And $item[0] <> 0xFFFFFFFF Then
;checkForSpell()
if getdistance($item[2], $item[3], $item[4]) < 13 then
If StringInStr($item[1],"petsweep") or StringInStr($item[1],"deathexplosion") or StringInStr($item[1],"creepMobArm") or StringInStr($item[1],"icecluster") or StringInStr($item[1],"deathstart") or StringInStr($item[1],"spore") or StringInStr($item[1],"arcaneenchanted") or StringInStr($item[1],"desecrator") or StringInStr($item[1],"plagued") or StringInStr($item[1],"poison") or StringInStr($item[1],"molten") Then
;_log("affixe évitée : " & $item[1])
;_log('affix repéré : ' & $item[1])
for $aa=0 to $ii
$aa=$aa+1
next
If $mypos[1]-$item[3]<0 Then
$ord = -1
Endif
If $mypos[0]-$item[2]<0 Then
$abs = -1
Endif
checkforpotion()
;Pour les personnages à distance retirer les points virgules des trois prochaines lignes
If send('{SHIFTUP}') = 0 Then
send('{SHIFTUP}')
Endif
mouseup('left')
mousedown('middle')
While getdistance($item[2], $item[3], $item[4]) < 13 and _playerdead()=false
$distance_test= getdistance(_MemoryRead($offset + 0xB0, $d3, 'float'), _MemoryRead($offset + 0xB4, $d3, 'float'), _MemoryRead($offset + 0xB8, $d3, 'float'))
If timerdiff($maff)>500 and getdistance($mypos[0],$mypos[1],$mypos[2])<4 Then
_log('blocked in affix')
checkforpotion()
checkforspell()
mouseclick("left")
Exitloop
Else
$mypos = getcurrentpos()
Endif
checkforpotion()
$myposs = getcurrentpos()
for $aa=0 to $ii
if $myposs[0]+(4*$abs) <> $affix[$aa][2] then
$x_move_aff=$myposs[0]+(4*$abs)
$aa=$ii
Elseif $myposs[0]+(10*$abs) <> $affix[$aa][2] then
$x_move_aff=$myposs[0]+(10*$abs)
$aa=$ii
Elseif $myposs[0]+(20*$abs) <> $affix[$aa][2] then
$x_move_aff=$myposs[0]+(20*$abs)
$aa=$ii
Elseif $myposs[0]-(10*$abs) <> $affix[$aa][2] then
$x_move_aff=$myposs[0]-(10*$abs)
$aa=$ii
Elseif $myposs[0]-(20*$abs) <> $affix[$aa][2] then
$x_move_aff=$myposs[0]-(20*$abs)
$aa=$ii
Else
$x_move_aff=$myposs[0]+(4*$abs)+(30*$abs)
EndIf
next
for $aa=0 to $ii
if $myposs[1]+(4*$abs) <> $affix[$aa][3] then
$y_move_aff=$myposs[1]+(4*$abs)
$aa=$ii
Elseif $myposs[1]+(10*$abs) <> $affix[$aa][3] then
$y_move_aff=$myposs[1]+(10*$abs)
$aa=$ii
Elseif $myposs[1]+(20*$abs) <> $affix[$aa][3] then
$y_move_aff=$myposs[1]+(20*$abs)
$aa=$ii
Elseif $myposs[1]-(10*$abs) <> $affix[$aa][3] then
$y_move_aff=$myposs[1]-(10*$abs)
$aa=$ii
Elseif $myposs[1]-(20*$abs) <> $affix[$aa][3] then
$y_move_aff=$myposs[1]-(20*$abs)
$aa=$ii
Else
$y_move_aff=$myposs[1]+(4*$abs)+(30*$abs)
EndIf
next
for $aa=0 to $ii
if $myposs[2]+(4*$abs) <> $affix[$aa][4] then
$z_move_aff=$myposs[2]+(4*$abs)
$aa=$ii
Elseif $myposs[2]+(10*$abs) <> $affix[$aa][4] then
$z_move_aff=$myposs[2]+(10*$abs)
$aa=$ii
Elseif $myposs[2]+(20*$abs) <> $affix[$aa][4] then
$z_move_aff=$myposs[2]+(20*$abs)
$aa=$ii
Elseif $myposs[2]-(10*$abs) <> $affix[$aa][4] then
$z_move_aff=$myposs[2]-(10*$abs)
$aa=$ii
Elseif $myposs[2]-(20*$abs) <> $affix[$aa][4] then
$z_move_aff=$myposs[2]-(20*$abs)
$aa=$ii
Else
$z_move_aff=$myposs[2]+(4*$abs)+(30*$abs)
EndIf
$aa=$aa+1
next
$Coords = FromD3toScreenCoords($x_move_aff,$y_move_aff,$z_move_aff)
mousemove($Coords[0], $Coords[1], 40)
mouseup('middle')
checkforspell()
mouseclick("left")
Wend
;send('{SHIFTDOWN}')
mouseclick("left")
Endif
Endif
EndIf
WEnd
EndFunc ;maffmove
Func FilterBackpack()
Local $__ACDACTOR = IterateBackpack(0)
_log(" FilterBackpack ==> IterateBackpack")
Local $iMax = UBound($__ACDACTOR)
_log(" FilterBackpack ==> 1 ")
If $iMax > 0 Then
Local $return[$iMax][3]
_log(" FilterBackpack ==> 2 ")
Send("{SPACE}") ; make sure we close everything
Send("i") ; open the inventory
sleep(100)
For $i = 0 To $iMax - 1
; Loop each item in the backpack
If _MemoryRead($__ACDACTOR[$i][7] + 0x164, $d3, 'int') > 0 and $Unidentified = "False" Then
_log(" FilterBackpack ==> 3 ID ing")
; this item is unid, lets identify it
; Send("{SPACE}") ; make sure we close everything
; Send("i") ; open the inventory
; Sleep(150)
InventoryMove($__ACDACTOR[$i][3], $__ACDACTOR[$i][4])
If IterateActorAtribs($__ACDACTOR[$i][0], $Atrib_Item_Quality_Level) > 8 and $Unidentified = "False" Then
Sleep(Random(500, 800))
MouseClick("Right")
Sleep(Random(4000, 4500))
Else
Sleep(Random(500, 800))
MouseClick("Right")
Sleep(Random(1000, 1500))
EndIf
;Send("{SPACE}") ; make sure we close everything
ElseIf $Unidentified = "True" Then
Send("{SPACE}") ; make sure we close everything
EndIf
_log(" FilterBackpack ==> 5")
$itemDestination = CheckItem($__ACDACTOR[$i][0], $__ACDACTOR[$i][1])
$return[$i][0] = $__ACDACTOR[$i][3] ;col
$return[$i][1] = $__ACDACTOR[$i][4] ;row
$return[$i][2] = $itemDestination ;row
_log(" FilterBackpack ==> 5 end")
Next
_log(" FilterBackpack ==> 6")
Send("{SPACE}") ; make sure we close everything
Return $return
EndIf
_log(" FilterBackpack ==> 7")
Return False
; After using this function, you can loop the return array and make inventorymove
; InventoryMove($return[$i][0], $return[$i][1])
EndFunc ;==>FilterBackpack
;;================================================================================
; Function: CheckItem
; Description: This will check a single item and tell if we keep it or not
; This function will be the core of the item filtering
;
; Return: Trash
; Stash
; Salvage
; Inventory
;==================================================================================
Func CheckItem($_GUID, $_NAME)
; _log("guid: "&$_GUID &" name: "& $_NAME & " qual: "&IterateActorAtribs($_GUID, $Atrib_Item_Quality_Level))
If checkFromList($Potions, $_NAME) Then
_log($_NAME & " ==> It's a pot")
Return "Inventory"
ElseIf checkFromList($grabList, $_NAME) Then
_log($_NAME & " ==> It's in the grablist")
Return "Stash"
ElseIf (IterateActorAtribs($_GUID, $Atrib_Item_Quality_Level) >= $QualityLevel) Then ; filter the magic and higher
_log($_NAME & " ==> It's the quality level >" & $QualityLevel)
Return "Stash"
ElseIf (IterateActorAtribs($_GUID, $Atrib_Item_Quality_Level) >= 6) And checkFromList($rareList, $_NAME) Then ; filter the magic and higher
_log($_NAME & " ==> It's a rare in our list ")
Return "Stash"
EndIf
Return "Trash"
EndFunc ;==>CheckItem
Func InventoryMove($col = 0, $row = 0)
$Coords = UiRatio(530 + ($col * 27), 338 + ($row * 27))
MouseMove($Coords[0], $Coords[1], 5)
EndFunc ;==>InventoryMove
;;--------------------------------------------------------------------------------
;; Stop()
;;--------------------------------------------------------------------------------
Func Stop()
Exit
EndFunc ;==>Stop
;;================================================================================
; Function: LocateMyToon
; Note(s): This function is used by the OffsetList to
; get the current player data.
;==================================================================================
Func LocateMyToon()
If _ingame() Then
sleep(1000)
If $_debug Then _log("Looking for local player")
$_CurOffset = 0
$_CurOffset = $_itrObjectManagerD
$_Count = _MemoryRead($_itrObjectManagerCount, $d3, 'int')
For $i = 0 To $_Count Step +1
$_GUID = _MemoryRead($_CurOffset + 0x4, $d3, 'ptr')
$_SNO = _MemoryRead($_CurOffset + 0x88, $d3, 'ptr')
$_NAME = _MemoryRead($_CurOffset + 0x8, $d3, 'char[64]')
;ConsoleWrite("Value : " & $_NAME & @CRLF)
;_log($_NAME)
If $_SNO = 0x126D Or $_SNO = 0x126D Or $_SNO = 0x1271 Or $_SNO = 0x1990 Or $_SNO = 0x197E Or $_SNO = 0xCE5 Or $_SNO = 0xCD5 Or $_SNO = 0x123D2 Or $_SNO = 0x125C7 Or $_SNO = 0x1951 Or $_SNO = 0x1955 Then
Global $_Myoffset = $_CurOffset
If $_debug Then _log("My toon located at: " & $_Myoffset & ", GUID: " & $_GUID & ", SNO: " & $_SNO &", NAME: " & $_NAME & @CRLF)
;If $_GUID = 0xFFFFFFFF Then
; _log("offsetlist failed")
; Return False
;EndIf
Global $_MyGuid = $_GUID
setChararacter($_NAME)
Return True
ExitLoop
EndIf
$_CurOffset = $_CurOffset + $_ObjmanagerStrucSize
Next
Return False
Endif
EndFunc ;==>LocateMyToon
;;================================================================================
; Function: IterateLocalActor
; Note(s): Iterates through all the local actors.
; Used by IterateActorAtribs
; This is bad use of variables, should be fixed!
;==================================================================================
Func IterateLocalActor()
$ptr1 = _memoryread($ofs_objectmanager, $d3, "ptr")
$ptr2 = _memoryread($ptr1 + 0x868, $d3, "ptr")
$ptr3 = _memoryread($ptr2 + 0x0, $d3, "ptr")
$_Count = _memoryread($ptr3 + 0x108, $d3, "int")
$CurrentOffset = _memoryread(_memoryread($ptr3 + 0x148, $d3, "ptr") + 0x0, $d3, "ptr");$_LocalActor_3
Global $__ACTOR[$_Count + 1][4]
For $i = 0 To $_Count
$__ACTOR[$i][1] = _MemoryRead($CurrentOffset, $d3, 'ptr')
$__ACTOR[$i][2] = _MemoryRead($CurrentOffset + 0x4, $d3, 'char[64]')
$__ACTOR[$i][3] = _MemoryRead($CurrentOffset + $ofs_LocalActor_atribGUID, $d3, 'ptr')
;_log($__ACTOR[$i][1] & " : " & $__ACTOR[$i][2] & " : " & $__ACTOR[$i][3])
$CurrentOffset = $CurrentOffset + $ofs_LocalActor_StrucSize
Next
EndFunc ;==>IterateLocalActor
Func startIterateLocalActor(ByRef $index, ByRef $offset, ByRef $count)
$ptr1 = _memoryread($ofs_objectmanager, $d3, "ptr")
$ptr2 = _memoryread($ptr1 + 0x868, $d3, "ptr")
$ptr3 = _memoryread($ptr2 + 0x0, $d3, "ptr")
$count = _memoryread($ptr3 + 0x108, $d3, "int")
$index = 0
$offset = _memoryread(_memoryread($ptr3 + 0x148, $d3, "ptr") + 0x0, $d3, "ptr")
EndFunc ;==>startIterateLocalActor
Func iterateLocalActorList(ByRef $index, ByRef $offset, ByRef $count, ByRef $item)
While 1
If $index > $count Then Return False
$index += 1
$item[0] = _MemoryRead($offset, $d3, 'ptr') ; $_ACTOR_ATRIB_GUID
$item[1] = _MemoryRead($offset + 0x4, $d3, 'char[64]') ; $_ACTOR_ATRIB_DATA
$item[2] = _MemoryRead($offset + $ofs_LocalActor_atribGUID, $d3, 'ptr') ; $_ACTOR_ATRIB
$item[3] = $offset ; Item Offset
$offset = $offset + $ofs_LocalActor_StrucSize
Return True
WEnd
EndFunc ;==>iterateLocalActorList
;;================================================================================
; Function: IterateActorAtribs($_GUID,$_REQ)
; Description: Read the requested attribute data from a actor defined by GUID
; Parameter(s): $_GUID - The GUID of the object you want the data from
; $_REQ - The data you want to request (the variable)
;
; Note(s): You can find a list of all the $_REQ variables in the Constants() function
; It should be noted that i have not checked them all through
; so the type ("float" or "int") might be wrong.
; This function will always return "false" if the requested atribute does not exsist
;==================================================================================
Func IterateActorAtribs($_GUID, $_REQ)
Local $index, $offset, $count, $item[4]
startIterateLocalActor($index, $offset, $count)
While iterateLocalActorList($index, $offset, $count, $item)
If $item[0] = "0x" & Hex($_GUID) Then
If $_REQ[1] = 'float' Then
Return GetAttributeFloat($item[2], $_REQ[0])
Else
Return GetAttributeInt($item[2], $_REQ[0])
EndIf
ExitLoop
EndIf
WEnd
Return False
;~ IterateLocalActor()
;~ $ACDIndex = _ArraySearch($__ACTOR, "0x" & Hex($_GUID), 0, 0, 0, 1, 1, 1) ;this bitch is slow as hell
;~ If $ACDIndex = -1 Then Return False ;FIX
;~ If $_REQ[1] = 'float' Then
;~ Return $AttribInterop.GetAttributeFloat($__ACTOR[$ACDIndex][3], $_REQ[0])
;~ Else
;~ Return $AttribInterop.GetAttributeInt($__ACTOR[$ACDIndex][3], $_REQ[0])
;~ EndIf
;~ Return False
EndFunc ;==>IterateActorAtribs
;;================================================================================
; Function: LinkActors
; Description: Read and index data from the specified offset
; Parameter(s): $_offset - The offset linking to the file def
; be in hex format (0x00000000).
; $_displayInfo - Setting this to 1 will make the function spit
; out the results while running
; Note(s): This function is used to index data from the MPQ files that
; that have been loaded into memory.
; Im not sure why the count doesnt go beyond 256.
; So for the time being if the count goes beyond 256 the size
; is set to a specified count and then the array will be scaled
; after when data will stop being available.
;==================================================================================
Func LinkActors($OBject, $_displayInfo = 0)
Global $OBject_Mem_Actor = $OBject
Global $Object_File_Actor = IndexSNO($ofs_ActorDef, 0)
Global $Object_File_Monster = IndexSNO($ofs_MonsterDef, 0)
Dim $__outputdata[UBound($OBject_Mem_Actor, 1) - 1][2]
For $i = 0 To UBound($OBject_Mem_Actor, 1) - 1
If $OBject_Mem_Actor[$i][9] <> -1 Then
$ItemIndex = _ArraySearch($Object_File_Actor, $OBject_Mem_Actor[$i][9], 0, 0, 0, 1, 1, 1)
If $ItemIndex > 0 Then
$MonsterID = _MemoryRead($Object_File_Actor[$ItemIndex][0] + 0x6c, $d3, 'ptr')
$ItemIndex = _ArraySearch($Object_File_Monster, $MonsterID, 0, 0, 0, 1, 1, 1)
If $ItemIndex > 0 Then
$Type = _MemoryRead($Object_File_Monster[$ItemIndex][0] + $_ofs_FileMonster_MonsterType, $d3, 'int')
$MonsterType = $_Const_MonsterType[$Type + 1]
$Race = _MemoryRead($Object_File_Monster[$ItemIndex][0] + $_ofs_FileMonster_MonsterRace, $d3, 'int')
$MonsterRace = $_Const_MonsterRace[$Race + 1]
$LevelNormal = _MemoryRead($Object_File_Monster[$ItemIndex][0] + $_ofs_FileMonster_LevelNormal, $d3, 'int') ;//Here are some data you can use if you want,
$LevelNightmare = _MemoryRead($Object_File_Monster[$ItemIndex][0] + $_ofs_FileMonster_LevelNightmare, $d3, 'int') ;//...it gives info about levels based on dificulty
$LevelHell = _MemoryRead($Object_File_Monster[$ItemIndex][0] + $_ofs_FileMonster_LevelHell, $d3, 'int')
$LevelInferno = _MemoryRead($Object_File_Monster[$ItemIndex][0] + $_ofs_FileMonster_LevelInferno, $d3, 'int')
$OBject_Mem_Actor[$i][11] = $Type
$OBject_Mem_Actor[$i][12] = $Race
;if $_displayInfo = 1 Then ConsoleWrite($i & " " & $Object_File_Actor[$ItemIndex][0] & @tab & " " &$MonsterType &@tab & " " & $MonsterRace &@tab & " Level Normal:" & $LevelNormal &@tab & " " & $StringListDB[$Name][1] &" " & @TAB &$OBject_Mem_Actor[$i][2] &@crlf)
EndIf
EndIf
EndIf
Next
Return $OBject_Mem_Actor
EndFunc ;==>LinkActors
;;================================================================================
; Function: IndexSNO($_offset[,$_displayInfo = 0])
; Description: Read and index data from the specified offset
; Parameter(s): $_offset - The offset linking to the file def
; be in hex format (0x00000000).
; $_displayInfo - Setting this to 1 will make the function spit
; out the results while running
; Note(s): This function is used to index data from the MPQ files that
; that have been loaded into memory.
; Im not sure why the count doesnt go beyond 256.
; So for the time being if the count goes beyond 256 the size
; is set to a specified count and then the array will be scaled
; after when data will stop being available.
;==================================================================================
Func IndexSNO($_offset, $_displayInfo = 0)
Local $CurrentSnoOffset = 0x0
$_MainOffset = _MemoryRead($_offset, $d3, 'ptr')
$_Pointer = _MemoryRead($_MainOffset + $_defptr, $d3, 'ptr')
$_SnoCount = _MemoryRead($_Pointer + $_defcount, $d3, 'ptr') ;//Doesnt seem to go beyond 256 for some wierd reason
If $_SnoCount >= 256 Then ;//So incase it goes beyond...
$ignoreSNOcount = 1 ;//This enables a redim after the for loop
$_SnoCount = 4056 ;//We put a limit to avoid overflow here
Else
$ignoreSNOcount = 0
EndIf
$_SnoIndex = _MemoryRead($_Pointer + $_deflink, $d3, 'ptr') ;//Moving from the static into the index
$_SNOName = _MemoryRead($_Pointer, $d3, 'char[64]') ;//Usually something like "Something" + Def
$TempWindex = $_SnoIndex + 0xC ;//The header is 0xC in size
If $_displayInfo = 1 Then ConsoleWrite("-----* Indexing " & $_SNOName & " *-----" & @CRLF)
Dim $_OutPut[$_SnoCount + 1][2] ;//Setting the size of the output array
For $i = 1 To $_SnoCount Step +1 ;//Iterating through all the elements
$_CurSnoOffset = _MemoryRead($TempWindex, $d3, 'ptr') ;//Getting the offset for the item
$_CurSnoID = _MemoryRead($_CurSnoOffset, $d3, 'ptr') ;//Going into the item and grapping the GUID which is located at 0x0
If $ignoreSNOcount = 1 And $_CurSnoOffset = 0x00000000 And $_CurSnoID = 0x00000000 Then ExitLoop ;//Untill i find a way to get the real count we do this instead.
If $ignoreSNOcount = 1 Then $CurIndex = $i
$_OutPut[$i][0] = $_CurSnoOffset ;//Poping the data into the output array
$_OutPut[$i][1] = $_CurSnoID
If $_displayInfo = 1 Then ConsoleWrite($i & " Offset: " & $_CurSnoOffset & " SNOid: " & $_CurSnoID & @CRLF)
$TempWindex = $TempWindex + 0x10 ;//Next item is located 0x10 later
Next
If $ignoreSNOcount = 1 Then ReDim $_OutPut[$CurIndex][2] ;//Here we do the resizing of the array, to minimize memory footprint!?.
Return $_OutPut
EndFunc ;==>IndexSNO
;;================================================================================
; Function: IndexStringList($_offset)
; Description: Read and index data from the specified offset
; Parameter(s): $_offset - The offset linking to the file def
; be in hex format (0x00000000).
; $_displayInfo - Setting this to 1 will make the function spit
; out the results while running
;
; Note(s): This function is made specificly to index string lists.
; This is usefull for getting real localized names from the
; proxy names you get from the objectmanager strucs.
; i have only test this on monster names but it should work for all.
;==================================================================================
Func IndexStringList($_offset, $_displayInfo = 0)
$_offset_FileMonster_StrucSize = 0x50
$_StringCount = _MemoryRead($_offset + 0xc, $d3, 'int')
$_CurrentOffset = $_offset + 0x28
Dim $_OutPut[$_StringCount][2]
For $i = 0 To $_StringCount - 1
$_OutPut[$i][0] = _MemoryRead(_MemoryRead($_CurrentOffset, $d3, 'int'), $d3, 'char[32]') ;Proxy Name, like "Priest_Male_B_NoLook"
$_OutPut[$i][1] = _MemoryRead(_MemoryRead($_CurrentOffset + 0x10, $d3, 'int'), $d3, 'char[34]') ;Localized name, like "Brother Malachi the Healer"
Assign("__" & $_OutPut[$i][0], $_OutPut[$i][1], 2)
$_CurrentOffset = $_CurrentOffset + $_offset_FileMonster_StrucSize
If $_displayInfo = 1 Then ConsoleWrite($_CurrentOffset & " ProxyName: " & $_OutPut[$i][0] & @TAB & " LocalizedName: " & $_OutPut[$i][1] & @CRLF)
Next
Return $_OutPut
EndFunc ;==>IndexStringList
;;--------------------------------------------------------------------------------
;; OffsetList()
;;--------------------------------------------------------------------------------
Func offsetlist()
_log("offsetlist")
;//FILE DEFS
Global $ofs_MonsterDef = 0x18CBE70 ;1.0.6 0x15DBE00 ;0x015DCE00 ;0x15DBE00
Global $ofs_StringListDef = 0x0158C240 ;0x015E8808 ;0x015E9808
Global $ofs_ActorDef = 0x18C6AD8 ;1.0.6 0x15EC108 ;0x015ED108 ;0x15EC108
Global $_defptr = 0x10
Global $_defcount = 0x10C
Global $_deflink = 0x148
Global $_ofs_FileMonster_StrucSize = 0x50
Global $_ofs_FileActor_LinkToMonster = 0x6C
Global $_ofs_FileMonster_MonsterType = 0x18
Global $_ofs_FileMonster_MonsterRace = 0x1C
Global $_ofs_FileMonster_LevelNormal = 0x44
Global $_ofs_FileMonster_LevelNightmare = 0x48
Global $_ofs_FileMonster_LevelHell = 0x4c
Global $_ofs_FileMonster_LevelInferno = 0x50
;//GET ACTORATRIB
Global $ofs_ActorAtrib_Base = 0x1544E54 ;0x15A1EA4 ;0x015A2EA4;0x015A1EA4
Global $ofs_ActorAtrib_ofs1 = 0x390
Global $ofs_ActorAtrib_ofs2 = 0x2E8
Global $ofs_ActorAtrib_ofs3 = 0x148
Global $ofs_ActorAtrib_Count = 0x108 ; 0x0 0x0
Global $ofs_ActorAtrib_Indexing_ofs1 = 0x10
Global $ofs_ActorAtrib_Indexing_ofs2 = 0x8
Global $ofs_ActorAtrib_Indexing_ofs3 = 0x250
Global $ofs_ActorAtrib_StrucSize = 0x180
Global $ofs_LocalPlayer_HPBARB = 0x34
Global $ofs_LocalPlayer_HPWIZ = 0x38
;//GET LOCAL ACTOR STRUC
Global $ofs_LocalActor_ofs1 = 0x378 ;instead of $ofs_ActorAtrib_ofs2
Global $ofs_LocalActor_ofs2 = 0x148
Global $ofs_LocalActor_Count = 0x108
Global $ofs_LocalActor_atribGUID = 0x120
Global $ofs_LocalActor_StrucSize = 0x2D0 ; 0x0 0x0
;//OBJECT MANAGER
Global $ofs_objectmanager = 0x1873414 ;0x0186FA3C ;0x1543B9C ;0x15A0BEC ;0x015A1BEC;0x15A0BEC
Global $ofs__ObjmanagerActorOffsetA = 0x8C8 ;0x8b0
Global $ofs__ObjmanagerActorCount = 0x108
Global $ofs__ObjmanagerActorOffsetB = 0x148
Global $ofs__ObjmanagerActorLinkToCTM = 0x384
Global $_ObjmanagerStrucSize = 0x42C ;0x428
;//CameraDef
Global $VIewStatic = 0x015A0BEC
Global $DebugFlags = $VIewStatic + 0x20
Global $vftableSubA = _MemoryRead($VIewStatic, $d3, 'ptr')
Global $vftableSubA = _MemoryRead($vftableSubA + 0x928, $d3, 'ptr')
Global $ViewOffset = $vftableSubA
Global $Ofs_CameraRotationA = $ViewOffset + 0x4
Global $Ofs_CameraRotationB = $ViewOffset + 0x8
Global $Ofs_CameraRotationC = $ViewOffset + 0xC
Global $Ofs_CameraRotationD = $ViewOffset + 0x10
Global $Ofs_CameraPosX = $ViewOffset + 0x14
Global $Ofs_CameraPosY = $ViewOffset + 0x18
Global $Ofs_CameraPosZ = $ViewOffset + 0x1C
Global $Ofs_CameraFOV = $ViewOffset + 0x30
Global $Ofs_CameraFOVB = $ViewOffset + 0x30
Global $ofs_InteractBase = 0x1543B84 ;0x15A0BD4 ;0x015A1BD4;0x15A0BD4
Global $ofs__InteractOffsetA = 0xA8
Global $ofs__InteractOffsetB = 0x58
Global $ofs__InteractOffsetUNK1 = 0x7F20 ;Set to 777c
Global $ofs__InteractOffsetUNK2 = 0x7F44 ;Set to 1 for NPC interaction
Global $ofs__InteractOffsetUNK3 = 0x7F7C ;Set to 7546 for NPC interaction, 7545 for loot interaction
Global $ofs__InteractOffsetUNK4 = 0x7F80 ;Set to 7546 for NPC interaction, 7545 for loot interaction
Global $ofs__InteractOffsetMousestate = 0x7F84 ;Mouse state 1 = clicked, 2 = mouse down
Global $ofs__InteractOffsetGUID = 0x7F88 ;Set to the GUID of the actor you want to interact with
$FixSpeed = 0x20 ;69736
$ToggleMove = 0x34
$MoveToXoffset = 0x40
$MoveToYoffset = 0x44
$MoveToZoffset = 0x48
$CurrentX = 0xA8
$CurrentY = 0xAc
$CurrentZ = 0xb0
$RotationOffset = 0x174
Global $_ActorAtrib_Base = _MemoryRead($ofs_ActorAtrib_Base, $d3, 'ptr')
Global $_ActorAtrib_1 = _MemoryRead($_ActorAtrib_Base + $ofs_ActorAtrib_ofs1, $d3, 'ptr')
Global $_ActorAtrib_2 = _MemoryRead($_ActorAtrib_1 + $ofs_ActorAtrib_ofs2, $d3, 'ptr')
Global $_ActorAtrib_3 = _MemoryRead($_ActorAtrib_2 + $ofs_ActorAtrib_ofs3, $d3, 'ptr')
Global $_ActorAtrib_4 = _MemoryRead($_ActorAtrib_3, $d3, 'ptr')
Global $_ActorAtrib_Count = $_ActorAtrib_2 + $ofs_ActorAtrib_Count
Global $_LocalActor_1 = _MemoryRead($_ActorAtrib_1 + $ofs_LocalActor_ofs1, $d3, 'ptr')
Global $_LocalActor_2 = _MemoryRead($_LocalActor_1 + $ofs_LocalActor_ofs2, $d3, 'ptr')
Global $_LocalActor_3 = _MemoryRead($_LocalActor_2, $d3, 'ptr')
Global $_LocalActor_Count = $_LocalActor_1 + $ofs_LocalActor_Count
Global $_itrObjectManagerA = _MemoryRead($ofs_objectmanager, $d3, 'ptr')
Global $_itrObjectManagerB = _MemoryRead($_itrObjectManagerA + $ofs__ObjmanagerActorOffsetA, $d3, 'ptr')
Global $_itrObjectManagerCount = $_itrObjectManagerB + $ofs__ObjmanagerActorCount
Global $_itrObjectManagerC = _MemoryRead($_itrObjectManagerB + $ofs__ObjmanagerActorOffsetB, $d3, 'ptr')
Global $_itrObjectManagerD = _MemoryRead($_itrObjectManagerC, $d3, 'ptr')
Global $_itrObjectManagerE = _MemoryRead($_itrObjectManagerD, $d3, 'ptr')
Global $_itrInteractA = _MemoryRead($ofs_InteractBase, $d3, 'ptr')
Global $_itrInteractB = _MemoryRead($_itrInteractA, $d3, 'ptr')
Global $_itrInteractC = _MemoryRead($_itrInteractB, $d3, 'ptr')
Global $_itrInteractD = _MemoryRead($_itrInteractC + $ofs__InteractOffsetA, $d3, 'ptr')
Global $_itrInteractE = $_itrInteractD + $ofs__InteractOffsetB
;IterateObjectList(0)
;Global $Object_File_StringList = IndexSNO($ofs_StringListDef, 0) ;//THIS LIST IS HUGE, NO NEED TO DO IT MORE OFTEN THAN ONCE =)
;$index = _ArraySearch($Object_File_StringList, Hex($_MonsterNameStringListID), 0, 0, 0, 1, 1, 1)
;If $index = -1 Then
; _log("index equal ")
;Return False
;EndIf
;Global $StringListDB = IndexStringList($Object_File_StringList[$index][0]) ;$StringListDB is debricated in this code
;$index = _ArraySearch($Object_File_StringList, Hex($_GizmoNameStringListID), 0, 0, 0, 1, 1, 1)
;If $index > -1 Then
; IndexStringList($Object_File_StringList[$index][0])
;EndIf
If LocateMyToon() Then
Global $ClickToMoveMain = _MemoryRead($_Myoffset + $ofs__ObjmanagerActorLinkToCTM, $d3, 'ptr')
Global $ClickToMoveRotation = $ClickToMoveMain + $RotationOffset
Global $ClickToMoveCurX = $ClickToMoveMain + $CurrentX
Global $ClickToMoveCurY = $ClickToMoveMain + $CurrentY
Global $ClickToMoveCurZ = $ClickToMoveMain + $CurrentZ
Global $ClickToMoveToX = $ClickToMoveMain + $MoveToXoffset
Global $ClickToMoveToY = $ClickToMoveMain + $MoveToYoffset
Global $ClickToMoveToZ = $ClickToMoveMain + $MoveToZoffset
Global $ClickToMoveToggle = $ClickToMoveMain + $ToggleMove
Global $ClickToMoveFix = $ClickToMoveMain + $FixSpeed
Return True
Else
Return False
EndIf
EndFunc ;==>offsetlist
;;--------------------------------------------------------------------------------
;; IterateAllObjectList()
;; Description: Iterate object even if they dont have guid, also provide true names
;;--------------------------------------------------------------------------------
Func IterateAllObjectList($_displayInfo)
If $_displayInfo = 1 Then ConsoleWrite("-----Iterating through Actors------" & @CRLF)
If $_displayInfo = 1 Then ConsoleWrite("First Actor located at: " & $_itrObjectManagerD & @CRLF)
$_CurOffset = $_itrObjectManagerD
$_Count = _MemoryRead($_itrObjectManagerCount, $d3, 'int')
Dim $OBJ[$_Count + 1][10]
If $_displayInfo = 1 Then ConsoleWrite("Number of Actors : " & $_Count & @CRLF)
For $i = 0 To $_Count Step +1
$_GUID = _MemoryRead($_CurOffset + 0x4, $d3, 'ptr')
$_NAME = _MemoryRead($_CurOffset + 0x8, $d3, 'char[64]')
$_POS_X = _MemoryRead($_CurOffset + 0xB0, $d3, 'float')
$_POS_Y = _MemoryRead($_CurOffset + 0xB4, $d3, 'float')
$_POS_Z = _MemoryRead($_CurOffset + 0xB8, $d3, 'float')
$_DATA = _MemoryRead($_CurOffset + 0x200, $d3, 'int')
$_DATA2 = _MemoryRead($_CurOffset + 0x1D0, $d3, 'int')
$_DATA3 = _MemoryRead($_CurOffset + 0x1C4, $d3, 'int')
$CurrentLoc = GetCurrentPos()
$xd = $_POS_X - $CurrentLoc[0]
$yd = $_POS_Y - $CurrentLoc[1]
$zd = $_POS_Z - $CurrentLoc[2]
$Distance = Sqrt($xd * $xd + $yd * $yd + $zd * $zd)
$OBJ[$i][0] = $i
$OBJ[$i][1] = $_GUID
$OBJ[$i][2] = $_NAME
$OBJ[$i][3] = $_POS_X
$OBJ[$i][4] = $_POS_Y
$OBJ[$i][5] = $_POS_Z
$OBJ[$i][6] = $_DATA
$OBJ[$i][7] = $_DATA2
$OBJ[$i][8] = $Distance
$OBJ[$i][9] = $_CurOffset
If $_displayInfo = 1 Then ConsoleWrite($i & @TAB & " : " & $_CurOffset & " " & $_GUID & " : " & $_DATA & " " & $_DATA2 & " " & @TAB & $_POS_X & " " & $_POS_Y & " " & $_POS_Z & " Dist: " & $Distance & @TAB & $_NAME & " data3: " & $_DATA3 & @CRLF)
;if $_displayINFO = 1 then ConsoleWrite($i & @TAB&" : " & $_POS_X & @TAB& $_POS_Y & @TAB & $_POS_Z & @TAB& $_NAME & @crlf)
$_CurOffset = $_CurOffset + $_ObjmanagerStrucSize
Next
Return $OBJ
EndFunc ;==>IterateAllObjectList
;;--------------------------------------------------------------------------------
;; IterateObjectList()
;;--------------------------------------------------------------------------------
Func IterateObjectList($_displayInfo = 0)
; Local $mesureobj = TimerInit() ;;;;;;;;;;;;;;
If $_displayInfo = 1 Then ConsoleWrite("-----Iterating through Actors------" & @CRLF)
If $_displayInfo = 1 Then ConsoleWrite("First Actor located at: " & $_itrObjectManagerD & @CRLF)
$_CurOffset = $_itrObjectManagerD
$_Count = _MemoryRead($_itrObjectManagerCount, $d3, 'int')
Dim $OBJ[$_Count + 1][13]
If $_displayInfo = 1 Then ConsoleWrite("Number of Actors : " & $_Count & @CRLF)
;$init = TimerInit()
For $i = 0 To $_Count Step +1
$_GUID = _MemoryRead($_CurOffset + 0x4, $d3, 'ptr')
If $_GUID = 0xffffffff Then ;no need to go through objects without a GUID!
$_PROXY_NAME = -1
$_REAL_NAME = -1
$_ACTORLINK = -1
$_POS_X = -1
$_POS_Y = -1
$_POS_Z = -1
$_DATA = -1
$_DATA2 = -1
Else
$_PROXY_NAME = _MemoryRead($_CurOffset + 0x8, $d3, 'char[64]')
$TmpString = StringSplit($_PROXY_NAME, "-")
If IsDeclared("__" & $TmpString[1]) Then
$_REAL_NAME = Eval("__" & $TmpString[1])
Else
$_REAL_NAME = $_PROXY_NAME
EndIf
$_ACTORLINK = _MemoryRead($_CurOffset + 0x88, $d3, 'ptr')
$_POS_X = _MemoryRead($_CurOffset + 0xB0, $d3, 'float')
$_POS_Y = _MemoryRead($_CurOffset + 0xB4, $d3, 'float')
$_POS_Z = _MemoryRead($_CurOffset + 0xB8, $d3, 'float')
$_DATA = _MemoryRead($_CurOffset + 0x200, $d3, 'int')
$_DATA2 = _MemoryRead($_CurOffset + 0x1D0, $d3, 'int')
If $_displayInfo = 1 Then ConsoleWrite($i & @TAB & " : " & $_CurOffset & " " & $_GUID & " " & $_ACTORLINK & " : " & $_DATA & " " & $_DATA2 & " " & @TAB & $_POS_X & " " & $_POS_Y & " " & $_POS_Z & @TAB & $_REAL_NAME & @CRLF)
EndIf
;Im too lazy to do this but the following code needs cleanup and restructure more than anything.
;You want to include all the data into this one structure rather than having it at multiple locations
;and the useless things should be removed.
$CurrentLoc = GetCurrentPos()
$xd = $_POS_X - $CurrentLoc[0]
$yd = $_POS_Y - $CurrentLoc[1]
$zd = $_POS_Z - $CurrentLoc[2]
$Distance = Sqrt($xd * $xd + $yd * $yd + $zd * $zd)
$OBJ[$i][0] = $_CurOffset
$OBJ[$i][1] = $_GUID
$OBJ[$i][2] = $_PROXY_NAME
$OBJ[$i][3] = $_POS_X
$OBJ[$i][4] = $_POS_Y
$OBJ[$i][5] = $_POS_Z
$OBJ[$i][6] = $_DATA
$OBJ[$i][7] = $_DATA2
$OBJ[$i][8] = $Distance
$OBJ[$i][9] = $_ACTORLINK
$OBJ[$i][10] = $_REAL_NAME
$OBJ[$i][11] = -1
$OBJ[$i][12] = -1
$_CurOffset = $_CurOffset + $_ObjmanagerStrucSize
Next
;$OBJv2 = LinkActors($OBJ) ;//Would be a waste to do this in the main operation so we add more data to the object here after the main operation.
IterateLocalActor()
; Local $difmesureobj = TimerDiff($mesureobj) ;;;;;;;;;;;;;
;ConsoleWrite("Mesure iterOBJ :" & $difmesureobj &@crlf) ;FOR DEBUGGING;;;;;;;;;;;;
Return $OBJ
EndFunc ;==>IterateObjectList
;;--------------------------------------------------------------------------------
;; Function to iterate all objects()
;;--------------------------------------------------------------------------------
Func startIterateObjectsList(ByRef $index, ByRef $offset, ByRef $count)
$count = _MemoryRead($_itrObjectManagerCount, $d3, 'int')
$index = 0
$offset = $_itrObjectManagerD
EndFunc ;==>startIterateObjectsList
Func iterateObjectsList(ByRef $index, ByRef $offset, ByRef $count, ByRef $item)
While 1
If $index > $count Then Return False
$index += 1
$item[0] = _MemoryRead($offset + 0x4, $d3, 'ptr') ; GUID
$item[1] = _MemoryRead($offset + 0x8, $d3, 'char[64]') ; Name
$item[2] = _MemoryRead($offset + 0xB0, $d3, 'float') ; PosX
$item[3] = _MemoryRead($offset + 0xB4, $d3, 'float') ; PosY
$item[4] = _MemoryRead($offset + 0xB8, $d3, 'float') ; PosZ
$item[5] = _MemoryRead($offset + 0x200, $d3, 'int') ; Data1
$item[6] = _MemoryRead($offset + 0x1D0, $d3, 'int') ; Data2
$item[7] = _MemoryRead($offset + 0x1C4, $d3, 'int') ; Data3
$item[8] = $offset ; Current Offset
$item[9] = getDistance($item[2], $item[3], $item[4]) ; Distance
$offset = $offset + $_ObjmanagerStrucSize
Return True
WEnd
EndFunc ;==>iterateObjectsList
;;--------------------------------------------------------------------------------
;; FromD3toScreenCoords()
;;--------------------------------------------------------------------------------
Func FromD3toScreenCoords($_x, $_y, $_z)
Dim $return[2]
$size = WinGetClientSize("[CLASS:D3 Main Window Class]")
$resolutionX = $size[0]
$resolutionY = $size[1]
$aspectChange = ($resolutionX / $resolutionY) / (800 / 600)
$CurrentLoc = GetCurrentPos()
$xd = $_x - $CurrentLoc[0]
$yd = $_y - $CurrentLoc[1]
$zd = $_z - $CurrentLoc[2]
$w = -0.515 * $xd + - 0.514 * $yd + - 0.686 * $zd + 97.985
$X = (-1.682 * $xd + 1.683 * $yd + 0 * $zd + 7.045E-3) / $w
$Y = (-1.54 * $xd + - 1.539 * $yd + 2.307 * $zd + 6.161) / $w
$Z = (-0.515 * $xd + - 0.514 * $yd + - 0.686 * $zd + 97.002) / $w
$X /= $aspectChange
While Abs($X) >= 1 Or Abs($Y) >= 0.7 Or $Z <= 0
; specified point is not on screen
$xd = $xd / 2
$yd = $yd / 2
$zd = $zd / 2
$w = -0.515 * $xd + - 0.514 * $yd + - 0.686 * $zd + 97.985
$X = (-1.682 * $xd + 1.683 * $yd + 0 * $zd + 7.045E-3) / $w
$Y = (-1.54 * $xd + - 1.539 * $yd + 2.307 * $zd + 6.161) / $w
$Z = (-0.515 * $xd + - 0.514 * $yd + - 0.686 * $zd + 97.002) / $w
$X /= $aspectChange
WEnd
$return[0] = ($X + 1) / 2 * $resolutionX
$return[1] = (1 - $Y) / 2 * $resolutionY
If $return[0] > 790 Then
$return[0] = 790
ElseIf $return[0] < 40 Then ;car on a pas l'envie de cliquer dans les icone du chat
$return[0] = 40
EndIf
If $return[1] > 540 Then ;car on a pas l'envie de cliquer dans la bare des skills
$return[1] = 540
ElseIf $return[1] < 10 Then
$return[1] = 10
EndIf
Return $return
EndFunc ;==>FromD3toScreenCoords
;;--------------------------------------------------------------------------------
;; UiRatio()
;;--------------------------------------------------------------------------------
Func UiRatio($_x, $_y)
Dim $return[2]
$size = WinGetClientSize("[CLASS:D3 Main Window Class]")
$return[0] = $size[1] * ($_x / 600)
$return[1] = $size[1] * ($_y / 600)
Return $return
EndFunc ;==>UiRatio
;;--------------------------------------------------------------------------------
;; GetCurrentPos()
;;--------------------------------------------------------------------------------
Func GetCurrentPos()
; Local $mesurepos = TimerInit() ;;;;;;;;;;;;;;
Dim $return[3]
$return[0] = _MemoryRead($_Myoffset + 0x0A0, $d3, 'float')
$return[1] = _MemoryRead($_Myoffset + 0x0A4, $d3, 'float')
$return[2] = _MemoryRead($_Myoffset + 0x0A8, $d3, 'float')
; Local $difmesurepos = TimerDiff($mesurepos) ;;;;;;;;;;;;;
;ConsoleWrite("Mesure getcurrentpos :" & $difmesurepos &@crlf) ;FOR DEBUGGING;;;;;;;;;;;;
Return $return
EndFunc ;==>GetCurrentPos
Func MoveToPos($_x, $_y, $_z, $_a, $m_range)
Local $TimeOut = TimerInit()
$grabtimeout = 0
$killtimeout = 0
If _playerdead() Or $GameOverTime = True Or $GameFailed = 1 Or $SkippedMove > 6 Then
$GameFailed = 1
Return
EndIf
Local $toggletry = 0
Global $lastwp_x = $_x
Global $lastwp_y = $_y
Global $lastwp_z = $_z
If $_a = 1 Then Attack($a_range, $monsterList)
$Coords = FromD3toScreenCoords($_x, $_y, $_z)
MouseMove($Coords[0], $Coords[1], 3)
$LastCP = GetCurrentPos()
MouseDown("middle")
Sleep(10)
While 1
GameOverTime()
If $GameOverTime = True Then
ExitLoop
EndIf
$CurrentLoc = GetCurrentPos()
$xd = $lastwp_x - $CurrentLoc[0]
$yd = $lastwp_y - $CurrentLoc[1]
$zd = $lastwp_z - $CurrentLoc[2]
$Distance = Sqrt($xd * $xd + $yd * $yd + $zd * $zd)
If $Distance < $m_range Then ExitLoop
;If _MemoryRead($ClickToMoveToggle, $d3, 'float') = 0 Then ExitLoop
Local $angle = 1
Local $Radius = 25
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
While _MemoryRead($ClickToMoveToggle, $d3, 'float') = 0
;_log("Togglemove : " & _MemoryRead($ClickToMoveToggle, $d3, 'float'))
$Coords = FromD3toScreenCoords($_x, $_y, $_z)
$angle += $Step
$Radius += 45
;MouseMove($Coords[0] - (Cos($angle) * $Radius), $Coords[1] - (Sin($angle) * $Radius), 3)
; ci desssous du dirty code pour eviter de cliquer n'importe ou hos de la fenetre du jeu
$Coords[0] = $Coords[0] - (Cos($angle) * $Radius)
$Coords[1] = $Coords[1] - (Sin($angle) * $Radius)
If $Coords[0] > 790 Then
$Coords[0] = 790
ElseIf $Coords[0] < 40 Then ;car on a pas l'envie de cliquer dans les icone du chat
$Coords[0] = 40
EndIf
If $Coords[1] > 540 Then ;car on a pas l'envie de cliquer dans la bare des skills
$Coords[1] = 540
ElseIf $Coords[1] < 10 Then
$Coords[1] = 10
EndIf
MouseMove($Coords[0], $Coords[1], 3)
$toggletry += 1
;_log("Tryin move :" & " x:" & $_x & " y:" & $_y & "coords: " & $Coords[0] & "-" & $Coords[1] & " angle: " & $angle & " Toggle try: " & $toggletry)
If _playerdead_revive() Then
ExitLoop 2
EndIf
If $angle >= 2.0 * $PI Or $toggletry > 9 Or _playerdead() Then
$SkippedMove += 1
_log("Toggle try: " & $toggletry & " Movement Skipped : " & $SkippedMove)
ExitLoop 2 ; le 2 signifie que l'on quitte 2 loop
EndIf
Sleep(10)
WEnd
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
Sleep(10)
$Coords = FromD3toScreenCoords($lastwp_x, $lastwp_y, $lastwp_z)
;ConsoleWrite("currentloc: " & $_Myoffset & " - "&$CurrentLoc[0] & " : " & $CurrentLoc[1] & " : " & $CurrentLoc[2] &@CRLF)
;ConsoleWrite("distance/m range: " & $Distance & " : " & $m_range & @CRLF)
If $_a = 1 And GetDistance($LastCP[0], $LastCP[1], $LastCP[2]) >= $a_range / 2 Then
MouseUp("middle")
$LastCP = GetCurrentPos()
If $_a = 1 Then Attack($a_range, $monsterList)
;ConsoleWrite("Last check: " & $Distance & @CRLF)
;MouseMove($Coords[0], $Coords[1], 3)
$Coords_RndX = Random($coords[0] - 20, $coords[0] + 20)
$Coords_RndY = Random($coords[1] - 20, $coords[1] + 10)
if $Coords_RndX < 40 Then
$Coords_RndX = 40
Elseif $Coords_RndX > 790 Then
$Coords_RndX = 790
EndIf
if $Coords_RndY < 10 Then
$Coords_RndY = 10
Elseif $Coords_RndY > 540 Then
$Coords_RndY = 540
EndIf
MouseMove($Coords_RndX, $Coords_RndY, 3) ;little randomisation
MouseDown("middle")
EndIf
MouseMove($Coords[0], $Coords[1], 3)
If TimerDiff($TimeOut) > 75000 Then
_log("MoveToPos Timed out ! ! ! ")
If _checkdisconnect() Then
$GameFailed = 1
EndIf
ExitLoop
EndIf
WEnd
MouseUp("middle")
;;
;Sleep(100)
EndFunc ;==>MoveToPos
;;--------------------------------------------------------------------------------
;; Interact()
;;--------------------------------------------------------------------------------
Func Interact($_x, $_y, $_z)
; MoveToPos($_x, $_y, $_z, 0, 25)
$Coords = FromD3toScreenCoords($_x, $_y, $_z)
MouseClick("left", $Coords[0], $Coords[1], 1, 6)
;While _MemoryRead($_itrInteractE + $ofs__InteractOffsetUNK2, $d3, 'int') = 1
; Sleep(50)
;WEnd
EndFunc ;==>Interact
;;--------------------------------------------------------------------------------
;; Approach() Approach a NPC without left clicking
;;--------------------------------------------------------------------------------
Func Approach($_x, $_y, $_z)
; MoveToPos($_x, $_y, $_z, 0, 25)
;While _MemoryRead($_itrInteractE + $ofs__InteractOffsetUNK2, $d3, 'int') = 1
; Sleep(50)
;WEnd
EndFunc ;==>Approach
;;--------------------------------------------------------------------------------
;; InteractByActorName()
;;--------------------------------------------------------------------------------
Func InteractByActorName($a_name, $dist = 300)
Local $index, $offset, $count, $item[10], $foundobject = 0
Local $maxtry = 0
startIterateObjectsList($index, $offset, $count)
if _playerdead() = False Then
While iterateObjectsList($index, $offset, $count, $item)
If StringInStr($item[1], $a_name) And $item[9] < $dist Then
_log($item[1] & " distance : " & $item[9])
While getDistance($item[2], $item[3], $item[4]) > 40 And $maxtry <= 15
$Coords = FromD3toScreenCoords($item[2], $item[3], $item[4])
MouseClick("middle", $Coords[0], $Coords[1], 1, 10)
$maxtry += 1
_log('interactbyactor: click x : ' & $Coords[0] & " y : " & $Coords[1])
Sleep(800)
WEnd
Sleep(800)
Interact($item[2], $item[3], $item[4])
$foundobject = 1
Sleep(100)
ExitLoop
EndIf
WEnd
EndIf
Return $foundobject
EndFunc ;==>InteractByActorName
;;--------------------------------------------------------------------------------
;; GetLifep()
;;--------------------------------------------------------------------------------
Func GetLifep()
Local $index, $offset, $count, $item[10], $foundobject = 0
startIterateObjectsList($index, $offset, $count)
While iterateObjectsList($index, $offset, $count, $item)
If StringInStr($item[1], "HealthBall_liquid") Then
Return _MemoryRead($item[8] + 0x40C, $d3, 'float')
EndIf
WEnd
EndFunc ;==>GetLifep
;;--------------------------------------------------------------------------------
;; Attack()
;;--------------------------------------------------------------------------------
Func Attack($range, $monsterList)
; _log("Grabtimeout : " & $grabtimeout & " killtimeout: "& $killtimeout)
; _log('If _playerdead() or ($gamefailed = 1)')
If _playerdead_revive() Then
Return
EndIf
If _playerdead() Or ($GameFailed = 1) Then
$GameFailed = 1
_log("Return Cuz : If _playerdead or gamefailed ")
Return
EndIf
Local $IgnoreList = ""
While 1
If _playerdead_revive() Then
ExitLoop
EndIf
If $GameFailed = 0 Then
$foundobject = 0
Local $index, $offset, $count, $item[10]
startIterateObjectsList($index, $offset, $count)
While iterateObjectsList($index, $offset, $count, $item)
If $item[0] <> "" And $item[0] <> 0xFFFFFFFF And $item[9] < $g_range And StringInStr($IgnoreList, $item[8]) == 0 And StringInStr($IgnoreItemList, $item[1]) = 0 and checkfromlist($shrinebanlist, $item[8]) = 0 Then
If stringInStr($item[1],"shrine") and $TakeShrines = "True" Then
If IterateActorAtribs($item[0], $Atrib_gizmo_state) <> 1 Then
If shrine($item[1], $item[8], $item[0]) = false Then
$shrinebanlist = $shrinebanlist &"|"& $item[8]
Endif
Endif
Endif
If checkfromlist($BanmonsterList, $item[1]) = 0 And checkFromList($monsterList, $item[1]) And $item[6] <> -1 And $item[9] < $range Or checkFromList($SpecialmonsterList, $item[1]) And $item[9] < $range Then
; we have a monster
If IterateActorAtribs($item[0], $Atrib_Hitpoints_Cur) > 0 And IterateActorAtribs($item[0], $Atrib_Invulnerable) = 0 Then
$foundobject = 1
If KillMob($item[1], $item[8], $item[0]) = False Then
_log('ignoring ' & $item[1])
$IgnoreList = $IgnoreList & $item[8]
;_log("Grabtimeout : " & $grabtimeout & " killtimeout: "& $killtimeout)
If $killtimeout > 2 Or $grabtimeout > 2 Then
_log("_checkdisconnect Cuz :If $killtimeout > 2 or $grabtimeout > 2 Then")
If _checkdisconnect() Or _playerdead() Then
$GameFailed = 1
EndIf
EndIf
EndIf
Else
_log('ignoring ' & $item[1])
$IgnoreList = $IgnoreList & $item[8]
;_log("Grabtimeout : " & $grabtimeout & " killtimeout: "& $killtimeout)
If $killtimeout > 2 Or $grabtimeout > 2 Then
If _checkdisconnect() Or _playerdead() Then
$GameFailed = 1
EndIf
EndIf
EndIf
;ElseIf $item[5] <> 0 And $item[6] = 5 Then 1,05 test
ElseIf ($item[5] = 2 And $item[6] = -1) or (StringInStr($item[1], "orb") and StringInStr($item[1], "unique")) Then ;1,04
; we have a loot
$grabit = False
If _MemoryRead($item[8] + 0x4, $d3, 'ptr') <> 0xFFFFFFFF Then
ConsoleWrite("Checking " & $item[1] & @CRLF)
$itemDestination = CheckItem($item[0], $item[1])
If $itemDestination == "Stash" Or $itemDestination == "Salvage" Or ($itemDestination == "Inventory" and $takepot = True) Then
; this loot is interesting
$foundobject = 1
If Grabit($item[1], $item[8]) = False Then
_log('ignoring ' & $item[1])
$IgnoreList = $IgnoreList & $item[8]
;_log("Grabtimeout : " & $grabtimeout & " killtimeout: "& $killtimeout)
If $killtimeout > 2 Or $grabtimeout > 2 Then
If _checkdisconnect() Or _playerdead() Then
_log('_checkdisconnect A or player D')
$GameFailed = 1
EndIf
EndIf
EndIf
Else
If checkFromList($monsterList, $item[1]) = False Then
$IgnoreItemList = $IgnoreItemList & $item[1] & "-"
;_log('ignoring ' & $item[8] & " : " & $item[1] & " :::::" &$IgnoreItemList)
EndIf
EndIf
EndIf
EndIf
EndIf
WEnd
If $foundobject = 0 Then
ExitLoop
EndIf
Else
_log("$gamefailed = 1 ExitLoop or player dead")
ExitLoop
EndIf
WEnd
EndFunc ;==>Attack
;;--------------------------------------------------------------------------------
;; KillMob()
;;--------------------------------------------------------------------------------
Func KillMob($name, $offset, $guid)
$return = True
$begin = TimerInit()
;Local $IgnorePoint = 9000 ; Been remplaced by a_time in settings.ini <-- If something is not grabbed/killed in this time we give it up
$Coords = FromD3toScreenCoords(_MemoryRead($offset + 0xB0, $d3, 'float'), _MemoryRead($offset + 0xB4, $d3, 'float'), _MemoryRead($offset + 0xB8, $d3, 'float'))
MouseMove($Coords[0], $Coords[1], 3)
;Send("{SHIFTDOWN}")
MouseDown("left")
;loop the attack until the mob is dead
_log("Attacking : " & $name) ;FOR
While IterateActorAtribs($guid, $Atrib_Hitpoints_Cur) > 0
array_affix()
maffmove()
If _playerdead_revive() then
$return = False
ExitLoop
EndIf
$Coords = FromD3toScreenCoords(_MemoryRead($offset + 0xB0, $d3, 'float'), _MemoryRead($offset + 0xB4, $d3, 'float'), _MemoryRead($offset + 0xB8, $d3, 'float'))
MouseMove($Coords[0], $Coords[1], 3)
MouseDown("left")
checkForSpell()
;Sleep(10)
If TimerDiff($begin) > $a_time Then
$killtimeout += 1
; after this time, the mob should be dead, otherwise he is probly unkillable
$return = False
ExitLoop
EndIf
WEnd
MouseUp("left")
;Send("{SHIFTUP}")
Return $return
EndFunc ;==>KillMob
;;--------------------------------------------------------------------------------
;; Grabit()
;;--------------------------------------------------------------------------------
Func Grabit($name, $offset)
local $OriginalOffsetValue = _MemoryRead($offset + 0x4, $d3, 'ptr')
$begin = TimerInit()
Dim $CoordVerif[3]
; Local $IgnorePoint = 7500; Remplaced by var g_time <-- If something is not grabbed/killed in this time we give it up
ConsoleWrite("Grabbing :" & ($name) & @CRLF) ;FOR DEBUGGING
If (StringInStr($name, "gold")) Then
$CoordVerif[0] = _MemoryRead($offset + 0xB0, $d3, 'float')
$CoordVerif[1] = _MemoryRead($offset + 0xB4, $d3, 'float')
$CoordVerif[2] = _MemoryRead($offset + 0xB8, $d3, 'float')
$Coords = FromD3toScreenCoords($CoordVerif[0],$CoordVerif[1],$CoordVerif[2])
MouseClick("middle", $Coords[0], $Coords[1], 1, 5)
Else
Interact($CoordVerif[0],$CoordVerif[1],$CoordVerif[2])
EndIf
While _MemoryRead($offset + 0x4, $d3, 'ptr') = $OriginalOffsetValue
if _MemoryRead($offset + 0x4, $d3, 'ptr') = 0xFFFFFFFF then
exitloop
endif
If _playerdead_revive() then
$return = False
ExitLoop
EndIf
If TimerDiff($begin) > $g_time Then
$grabtimeout += 1
; After this time we should already had the item
Return False
EndIf
If (StringInStr($name, "gold")) Then
$Coords = FromD3toScreenCoords(_MemoryRead($offset + 0xB0, $d3, 'float'), _MemoryRead($offset + 0xB4, $d3, 'float'), _MemoryRead($offset + 0xB8, $d3, 'float'))
;Check if the coord X y z havn't changed.
If ($CoordVerif[0] <> _MemoryRead($offset + 0xB0, $d3, 'float') Or $CoordVerif[1] <> _MemoryRead($offset + 0xB4, $d3, 'float') Or $CoordVerif[2] <> _MemoryRead($offset + 0xB8, $d3, 'float')) Then
_log("Fake GOLD")
Return False
Else
MouseClick("middle", $Coords[0], $Coords[1], 1, 5)
EndIf
Else
Interact(_MemoryRead($offset + 0xB0, $d3, 'float'), _MemoryRead($offset + 0xB4, $d3, 'float'), _MemoryRead($offset + 0xB8, $d3, 'float'))
EndIf
Sleep(50)
WEnd
Return True
EndFunc ;==>Grabit
;;--------------------------------------------------------------------------------
;; checkForPotion()
;;--------------------------------------------------------------------------------
Func checkForPotion()
$life = GetLifep()
$diff = TimerDiff($timeforpotion)
If $life < $LifeForPotion / 100 And $diff > 1500 Then
Send("q")
$timeforpotion = TimerInit()
EndIf
EndFunc ;==>checkForPotion
;;--------------------------------------------------------------------------------
;; checkFromList()
;;--------------------------------------------------------------------------------
Func checkFromList($list, $compare, $delimiter = '|')
Local $arrayList = StringSplit($list, $delimiter)
For $i = 1 To $arrayList[0]
If StringInStr($compare, $arrayList[$i]) Then
Return 1
EndIf
Next
Return 0
EndFunc ;==>checkFromList
;;--------------------------------------------------------------------------------
;; SkipDialog()
;;--------------------------------------------------------------------------------
Func SkipDialog($_Count)
For $i = 1 To $_Count
Send("{SPACE}")
Sleep(100)
Next
EndFunc ;==>SkipDialog
;;--------------------------------------------------------------------------------
;; TakeWP()
;;--------------------------------------------------------------------------------
Func TakeWP($tarChapter, $tarNum, $curChapter, $curNum)
If $GameFailed = 0 Then
Local $Waypoint
While Not offsetlist()
Sleep(10)
WEnd
If FindActor("waypoint_arrival_ribbonGeo", 80) Then
$Waypoint = "waypoint_arrival_ribbonGeo"
ElseIf FindActor("waypoint_neutral_ringGlow", 80) Then
$Waypoint = "waypoint_neutral_ringGlow"
ElseIf FindActor("Waypoint_Town", 80) Then
$Waypoint = "Waypoint_Town"
Else
$Waypoint = "waypoint"
EndIf
InteractByActorName($Waypoint)
Sleep(350)
Local $wptry = 0
While _checkWPopen() = False And _playerdead() = False
If $wptry <= 6 Then
_log('Fail to open wp')
$wptry = $wptry + 1
InteractByActorName($Waypoint)
EndIf
If $wptry > 6 Then
$GameFailed = 1
_log('Failed to open wp after 6 try')
ExitLoop
EndIf
WEnd
If $tarChapter <> $curChapter Or ($tarChapter = $curChapter And $tarChapter < $curChapter) Then
For $i = 0 To $tarChapter - 1
$coord = UiRatio(35, 100 + ($i * 12.5))
MouseClick("left", $coord[0], $coord[1], 1, 3) ; Close chapters
Next
$coord = UiRatio(145, 100 + ($tarChapter * 12.5) + 23 + ($tarNum * 32))
MouseClick("left", $coord[0], $coord[1], 1, 3) ; Click wp
EndIf
If $tarChapter = $curChapter And $tarChapter > $curChapter Then
For $i = 0 To $tarChapter - 1
$coord = UiRatio(35, 100 + ($i * 12.5))
MouseClick("left", $coord[0], $coord[1], 1, 3) ; Close chapters
Next
$coord = UiRatio(145, 100 + ($tarChapter * 12.5) + 23 + 12 + ($tarNum * 32))
MouseClick("left", $coord[0], $coord[1], 1, 3) ; Click wp
EndIf
Sleep(1500)
While Not offsetlist()
Sleep(10)
WEnd
$SkippedMove = 0 ;reset ouur skipped move count cuz we should be in brand new area
EndIf
EndFunc ;==>TakeWP
;;--------------------------------------------------------------------------------
;; _resumegame()
;;--------------------------------------------------------------------------------
Func _resumegame()
_log("Resume Game")
Sleep(Random(500, 1000, 1))
_randomclick(106, 233)
Sleep(4000)
EndFunc ;==>_resumegame
;;--------------------------------------------------------------------------------
;; _leavegame()
;;--------------------------------------------------------------------------------
Func _leavegame()
If _ingame() Then
_log("Leave Game")
Send("{SPACE}") ; to make sure everything is closed
Send("{ESCAPE}")
Sleep(Random(200, 300, 1))
While _escmenu() = False
Send("{ESCAPE}")
Sleep(Random(200, 300, 1))
WEnd
_randomclick(420, 323)
Sleep(Random(500, 1000, 1))
EndIf
EndFunc ;==>_leavegame
;;--------------------------------------------------------------------------------
;; Repair()
;;--------------------------------------------------------------------------------
Func Repair()
InteractByActorName($RepairVendor)
Sleep(700)
Local $vendortry = 0
While _checkVendoropen() = False
If $vendortry <= 4 Then
_log('Fail to open vendor')
$vendortry = $vendortry + 1
InteractByActorName($RepairVendor)
EndIf
If $vendortry > 4 Then
Send("{PRINTSCREEN}")
Sleep(200)
_log('Failed to open Vendor after 4 try')
WinSetOnTop("[CLASS:D3 Main Window Class]", "", 0)
MsgBox(0, "Impossible d'ouvrir le vendeur :", "SVP, veuillez reporter ce problème sur le forum. Erreur : v001 ")
Terminate()
ExitLoop
EndIf
WEnd
GetRepairTab()
$coord = UiRatio(290, 130 + ($RepairTab * 70))
MouseClick("left", $coord[0], $coord[1], 1, 3) ; Repair tab
Sleep(100)
$coord = UiRatio(150, 330)
MouseClick("left", $coord[0], $coord[1], 1, 3) ; Repair Button
Sleep(100)
Send("{SPACE}")
EndFunc ;==>Repair
;;================================================================================
; Function: GetDistance($_x,$_y,$_z)
; Description: Check distance between you and a desired position.
; Parameter(s): $_x,$_y and $_z - the target position
;
; Note(s): Returns a distance in float
;==================================================================================
Func GetDistance($_x, $_y, $_z)
$CurrentLoc = GetCurrentPos()
$xd = $_x - $CurrentLoc[0]
$yd = $_y - $CurrentLoc[1]
$zd = $_z - $CurrentLoc[2]
$Distance = Sqrt($xd * $xd + $yd * $yd + $zd * $zd)
Return $Distance
EndFunc ;==>GetDistance
;;================================================================================
; Function: GetDistance($_x,$_y,$_z)
; Description: Check distance between you and a desired position.
; Parameter(s): $_x,$_y and $_z - the target position
;
; Note(s): Returns a distance in float
;==================================================================================
Func GetMyStats()
Local $index, $offset, $count, $item[4]
startIterateLocalActor($index, $offset, $count)
While iterateLocalActorList($index, $offset, $count, $item)
If StringInStr($item[2], "GoldCoin-") Then
_log("Current GOLD: " & IterateActorAtribs($item[1], $Atrib_ItemStackQuantityLo))
ExitLoop
EndIf
WEnd
_log("Power Disabled: " & IterateActorAtribs($_MyGuid, $Atrib_Magic_Find_Handicap))
_log("Difficulty: " & IterateActorAtribs($_MyGuid, $Atrib_Difficulty))
_log("Act: " & IterateActorAtribs($_MyGuid, $Atrib_Act))
_log("Current Level: " & IterateActorAtribs($_MyGuid, $Atrib_Level))
_log("Strength: " & IterateActorAtribs($_MyGuid, $Atrib_Strength_Total))
_log("Dexterity: " & IterateActorAtribs($_MyGuid, $Atrib_Dexterity_Total))
_log("Inteligence: " & IterateActorAtribs($_MyGuid, $Atrib_Intelligence_Total))
_log("Vitality: " & IterateActorAtribs($_MyGuid, $Atrib_Vitality_Total))
_log("Gold find: " & IterateActorAtribs($_MyGuid, $Atrib_Gold_Find))
_log("Magic find: " & IterateActorAtribs($_MyGuid, $Atrib_Magic_Find))
_log("Pickup Radius : " & IterateActorAtribs($_MyGuid, $Atrib_Gold_PickUp_Radius))
_log("Movement speed : " & IterateActorAtribs($_MyGuid, $Atrib_Movement_Scalar_Capped_Total))
EndFunc ;==>GetMyStats
Func GameOverTime()
Global $timedifmaxgamelength = TimerDiff($timermaxgamelength)
If $timedifmaxgamelength > $maxgamelength Then
_log('game over time !')
Global $GameOverTime = True
EndIf
EndFunc ;==>GameOverTime
Func Terminate()
if $checkx64=1 then
MouseUp("middle")
MouseUp("left")
Send("{SHIFTUP}")
Exit 0
else
WinSetOnTop("[CLASS:D3 Main Window Class]","",0)
If Not FileExists(@ScriptDir & ".\stats") Then
DirCreate(@ScriptDir & ".\stats")
EndIf
$file = FileOpen(@ScriptDir & ".\stats\" & $fichierstat, 1)
FileWriteLine($file, $DebugMessage)
FileClose($file)
MouseUp("middle")
MouseUp("left")
Send("{SHIFTUP}")
Exit 0
endif
EndFunc ;==>Terminate
Func TogglePause()
$Paused = Not $Paused
If $Paused Then
WinSetOnTop("[CLASS:D3 Main Window Class]", "",0)
While $Paused
Sleep(100)
TrayTip("", 'Script is "Paused"', 5)
WEnd
EndIf
CheckWindowD3()
EndFunc ;==>TogglePause
Func _log($text, $write = 0)
$texte_write = @MDAY & "/" & @MON & "/" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " | " & $text
if $write == 1 Then
$file = FileOpen(@ScriptDir & "\log\" & $fichierlog, 1)
If $file= -1 Then
_log("Log file error, cant be open")
Else
FileWrite($file, $texte_write & @CRLF)
EndIF
FileClose($file)
EndIF
ConsoleWrite(@MDAY & "/" & @MON & "/" & @YEAR & " " & @HOUR & ":" & @MIN & ":" & @SEC & " | " & $text & @CRLF)
EndFunc ;==>_log
Func RandSleep($min = 5, $max = 45, $chance = 3)
$randNum = Round(Random(1, 100))
If $randNum <= $chance Then
$sleepTime = Random($min * 1000, $max * 1000)
_log("Sleeping " & $sleepTime & "ms")
For $c = 0 To 10
Sleep($sleepTime / 10)
Next
EndIf
EndFunc ;==>RandSleep
Func _randomclick($X, $Y, $button = "left")
$coord = UiRatio($X, $Y)
MouseClick($button, Random($coord[0] - 3, $coord[0] + 3), Random($coord[1] - 3, $coord[1] + 3))
EndFunc ;==>_randomclick
;;--------------------------------------------------------------------------------
;;############# Speels by Xoum
;;--------------------------------------------------------------------------------
;--------------------------------------------------------------------------------
;; setChararacter()
;;--------------------------------------------------------------------------------
Func setChararacter($nameChar)
$splitName = StringSplit($nameChar, "_")
$nameCharacter = $splitName[1]
_log($nameCharacter)
EndFunc ;==>setChararacter
;;--------------------------------------------------------------------------------
;; Getfury()
;;--------------------------------------------------------------------------------
Func GetFury()
Local $index, $offset, $count, $item[10], $foundobject = 0
startIterateObjectsList($index, $offset, $count)
While iterateObjectsList($index, $offset, $count, $item)
If StringInStr($item[1], "furyBall_liquid") Then
Return _MemoryRead($item[8] + 0x40C, $d3, 'float')
EndIf
WEnd
EndFunc ;==>GetFury
;;
;--------------------------------------------------------------------------------
;; Gethatred()
;;--------------------------------------------------------------------------------
Func GetHatred()
Local $index, $offset, $count, $item[10], $foundobject = 0
startIterateObjectsList($index, $offset, $count)
While iterateObjectsList($index, $offset, $count, $item)
If StringInStr($item[1], "hatred") Then
Return _MemoryRead($item[8] + 0x40C, $d3, 'float')
EndIf
WEnd
EndFunc ;==>GetHatred
;;
;--------------------------------------------------------------------------------
;; Getdisc()
;;--------------------------------------------------------------------------------
Func GetDisc()
Local $index, $offset, $count, $item[10], $foundobject = 0
startIterateObjectsList($index, $offset, $count)
While iterateObjectsList($index, $offset, $count, $item)
If StringInStr($item[1], "discipline") Then
Return _MemoryRead($item[8] + 0x40C, $d3, 'float')
EndIf
WEnd
EndFunc ;==>GetDisc
;;
;--------------------------------------------------------------------------------
;; Getspirit()
;;--------------------------------------------------------------------------------
Func GetSpirit()
Local $index, $offset, $count, $item[10], $foundobject = 0
startIterateObjectsList($index, $offset, $count)
While iterateObjectsList($index, $offset, $count, $item)
If StringInStr($item[1], "Monk_Spirit") Then
Return _MemoryRead($item[8] + 0x40C, $d3, 'float')
EndIf
WEnd
EndFunc ;==>GetSpirit
;;
;--------------------------------------------------------------------------------
;; Getmana()
;;--------------------------------------------------------------------------------
Func GetMana()
Local $index, $offset, $count, $item[10], $foundobject = 0
startIterateObjectsList($index, $offset, $count)
While iterateObjectsList($index, $offset, $count, $item)
If StringInStr($item[1], "mana") Then
Return _MemoryRead($item[8] + 0x40C, $d3, 'float')
EndIf
WEnd
EndFunc ;==>GetMana
;;
;--------------------------------------------------------------------------------
;; Getarcane()
;;--------------------------------------------------------------------------------
Func GetArcane()
Local $index, $offset, $count, $item[10], $foundobject = 0
startIterateObjectsList($index, $offset, $count)
While iterateObjectsList($index, $offset, $count, $item)
If StringInStr($item[1], "instability") Then
Return _MemoryRead($item[8] + 0x40C, $d3, 'float')
EndIf
WEnd
EndFunc ;==>GetArcane
;;--------------------------------------------------------------------------------
;; checkForSpell()
;;--------------------------------------------------------------------------------
Func checkForSpell()
checkForPotion()
;Local $mesurepot = TimerInit() ;;;;;;;;;;;;;;
Local $source
Local $MaximumSource
Switch $nameCharacter
Case "DemonHunter"
$discipline = GetDisc()
$hatred = GetHatred()
$life = GetLifep()
$diffRightClick = TimerDiff($timeforRightclick)
If $RightClickSpell = "True" And $life <= $LifeForRightClickSpell / 100 And $diffRightClick > $RightClickSpellDelay Then
If $RightClickSpellEnergy <> "" Then
If $RightClickSpellEnergy = "hatred" Then
If $hatred > $RightClickSpellEnergyNeeds / $MaximumHatred Then
MouseClick("right")
$timeforRightclick = TimerInit()
EndIf
Else
If $discipline > $RightClickSpellEnergyNeeds / $MaximumDiscipline Then
MouseClick("right")
$timeforRightclick = TimerInit()
EndIf
EndIf
Else
MouseClick("right")
$timeforRightclick = TimerInit()
EndIf
EndIf
$discipline = GetDisc()
$hatred = GetHatred()
$life = GetLifep()
$diffSpell1 = TimerDiff($timeforSpell1)
If $Spell1Activated = "True" And $life <= $LifeForSpell1 / 100 And $diffSpell1 > $DefayForSpell1 Then
If $EnergySpell1 <> "" Then
If $EnergySpell1 = "hatred" Then
If $hatred > $EnergyNeedsSpell1 / $MaximumHatred Then
Send($KeyForSpell1)
$timeforSpell1 = TimerInit()
EndIf
Else
If $discipline > $EnergyNeedsSpell1 / $MaximumDiscipline Then
Send($KeyForSpell1)
$timeforSpell1 = TimerInit()
EndIf
EndIf
Else
Send($KeyForSpell1)
$timeforSpell1 = TimerInit()
EndIf
EndIf
$discipline = GetDisc()
$hatred = GetHatred()
$life = GetLifep()
$diffSpell2 = TimerDiff($timeforSpell2)
If $Spell2Activated = "True" And $life <= $LifeForSpell2 / 100 And $diffSpell2 > $DefayForSpell2 Then
If $EnergySpell2 <> "" Then
If $EnergySpell2 = "hatred" Then
If $hatred > $EnergyNeedsSpell2 / $MaximumHatred Then
Send($KeyForSpell2)
$timeforSpell2 = TimerInit()
EndIf
Else
If $discipline > $EnergyNeedsSpell2 / $MaximumDiscipline Then
Send($KeyForSpell2)
$timeforSpell2 = TimerInit()
EndIf
EndIf
Else
Send($KeyForSpell2)
$timeforSpell2 = TimerInit()
EndIf
EndIf
$discipline = GetDisc()
$hatred = GetHatred()
$life = GetLifep()
$diffSpell3 = TimerDiff($timeforSpell3)
If $Spell3Activated = "True" And $life <= $LifeForSpell3 / 100 And $diffSpell3 > $DefayForSpell3 Then
If $EnergySpell3 <> "" Then
If $EnergySpell3 = "hatred" Then
If $hatred > $EnergyNeedsSpell3 / $MaximumHatred Then
Send($KeyForSpell3)
$timeforSpell3 = TimerInit()
EndIf
Else
If $discipline > $EnergyNeedsSpell3 / $MaximumDiscipline Then
Send($KeyForSpell3)
$timeforSpell3 = TimerInit()
EndIf
EndIf
Else
Send($KeyForSpell3)
$timeforSpell3 = TimerInit()
EndIf
EndIf
$discipline = GetDisc()
$hatred = GetHatred()
$life = GetLifep()
$diffSpell4 = TimerDiff($timeforSpell4)
If $Spell4Activated = "True" And $life <= $LifeForSpell4 / 100 And $diffSpell4 > $DefayForSpell4 Then
If $EnergySpell4 <> "" Then
If $EnergySpell4 = "hatred" Then
If $hatred > $EnergyNeedsSpell4 / $MaximumHatred Then
Send($KeyForSpell4)
$timeforSpell4 = TimerInit()
EndIf
Else
If $discipline > $EnergyNeedsSpell4 / $MaximumDiscipline Then
Send($KeyForSpell4)
$timeforSpell4 = TimerInit()
EndIf
EndIf
Else
Send($KeyForSpell4)
$timeforSpell4 = TimerInit()
EndIf
EndIf
Case "Monk"
$MaximumSource = $MaximumSpirit
actionForSpell($MaximumSource)
Case "Barbarian"
$MaximumSource = $MaximumFury
actionForSpell($MaximumSource)
Case "wizard"
$MaximumSource = $MaximumArcane
actionForSpell($MaximumSource)
Case "WitchDoctor"
$MaximumSource = $MaximumMana
actionForSpell($MaximumSource)
EndSwitch
EndFunc ;==>checkForSpell
Func actionForSpell($MaximumSource)
$life = GetLifep()
Switch $nameCharacter
Case "Monk"
$source = GetSpirit()
Case "Barbarian"
$source = GetFury()
Case "wizard"
$source = GetArcane()
Case "WitchDoctor"
$source = GetMana()
EndSwitch
$diffRightClick = TimerDiff($timeforRightclick)
If $RightClickSpell = "True" And $life <= $LifeForRightClickSpell / 100 And $diffRightClick > $RightClickSpellDelay Then
If $RightClickSpellEnergy <> "" Then
If $source > $RightClickSpellEnergyNeeds / $MaximumSource Then
MouseClick("right")
$timeforRightclick = TimerInit()
EndIf
Else
MouseClick("right")
$timeforRightclick = TimerInit()
EndIf
EndIf
$life = GetLifep()
Switch $nameCharacter
Case "Monk"
$source = GetSpirit()
Case "Barbarian"
$source = GetFury()
Case "wizard"
$source = GetArcane()
Case "WitchDoctor"
$source = GetMana()
EndSwitch
$diffSpell1 = TimerDiff($timeforSpell1)
If $Spell1Activated = "True" And $life <= $LifeForSpell1 / 100 And $diffSpell1 > $DefayForSpell1 Then
If $EnergySpell1 <> "" Then
If $source > $EnergyNeedsSpell1 / $MaximumSource Then
Send($KeyForSpell1)
$timeforSpell1 = TimerInit()
EndIf
Else
Send($KeyForSpell1)
$timeforSpell1 = TimerInit()
EndIf
EndIf
$life = GetLifep()
Switch $nameCharacter
Case "Monk"
$source = GetSpirit()
Case "Barbarian"
$source = GetFury()
Case "wizard"
$source = GetArcane()
Case "WitchDoctor"
$source = GetMana()
EndSwitch
$diffSpell2 = TimerDiff($timeforSpell2)
If $Spell2Activated = "True" And $life <= $LifeForSpell2 / 100 And $diffSpell2 > $DefayForSpell2 Then
If $EnergySpell2 <> "" Then
If $source > $EnergyNeedsSpell2 / $MaximumSource Then
Send($KeyForSpell2)
$timeforSpell2 = TimerInit()
EndIf
Else
Send($KeyForSpell2)
$timeforSpell2 = TimerInit()
EndIf
EndIf
$life = GetLifep()
Switch $nameCharacter
Case "Monk"
$source = GetSpirit()
Case "Barbarian"
$source = GetFury()
Case "wizard"
$source = GetArcane()
Case "WitchDoctor"
$source = GetMana()
EndSwitch
$diffSpell3 = TimerDiff($timeforSpell3)
If $Spell3Activated = "True" And $life <= $LifeForSpell3 / 100 And $diffSpell3 > $DefayForSpell3 Then
If $EnergySpell3 <> "" Then
If $source > $EnergyNeedsSpell3 / $MaximumSource Then
Send($KeyForSpell3)
$timeforSpell3 = TimerInit()
EndIf
Else
Send($KeyForSpell3)
$timeforSpell3 = TimerInit()
EndIf
EndIf
$life = GetLifep()
Switch $nameCharacter
Case "Monk"
$source = GetSpirit()
Case "Barbarian"
$source = GetFury()
Case "wizard"
$source = GetArcane()
Case "WitchDoctor"
$source = GetMana()
EndSwitch
$diffSpell4 = TimerDiff($timeforSpell4)
If $Spell4Activated = "True" And $life <= $LifeForSpell4 / 100 And $diffSpell4 > $DefayForSpell4 Then
If $EnergySpell4 <> "" Then
If $source > $EnergyNeedsSpell4 / $MaximumSource Then
Send($KeyForSpell4)
$timeforSpell4 = TimerInit()
EndIf
Else
Send($KeyForSpell4)
$timeforSpell4 = TimerInit()
EndIf
EndIf
EndFunc ;==>actionForSpell
;;--------------------------------------------------------------------------------
;;############# Stats by YoPens
;;--------------------------------------------------------------------------------
func FormatNumber($StringToFormat)
local $StringFormatted = ""
local $ArrayStringToFormat = stringsplit($StringToFormat,"")
local $counterForSeparator = 1
for $i = $ArrayStringToFormat[0] to 1 step -1
if $counterForSeparator = 3 Then
$StringFormatted = " " & $ArrayStringToFormat[$i] & $StringFormatted
$counterForSeparator = 0
Else
$StringFormatted = $ArrayStringToFormat[$i] & $StringFormatted
EndIf
$counterForSeparator += 1
Next
return $StringFormatted
endfunc
Func StatsDisplay()
Local $index, $offset, $count, $item[4]
startIterateLocalActor($index, $offset, $count)
While iterateLocalActorList($index, $offset, $count, $item)
If StringInStr($item[1], "GoldCoin-") Then
$GOLD = IterateActorAtribs($item[0], $Atrib_ItemStackQuantityLo)
ExitLoop
EndIf
WEnd
If $Totalruns = 1 Then
$GOLDINI = $GOLD
$begin_timer_stat = TimerInit()
$GF = Ceiling(IterateActorAtribs($_MyGuid, $Atrib_Gold_Find) * 100)
$MF = Ceiling(IterateActorAtribs($_MyGuid, $Atrib_Magic_Find) * 100)
$PR = IterateActorAtribs($_MyGuid, $Atrib_Gold_PickUp_Radius)
$MS = (IterateActorAtribs($_MyGuid, $Atrib_Movement_Scalar_Capped_Total) - 1) * 100
Else
$GOLDInthepocket = $GOLD - $GOLDINI
$GOLDMOY = $GOLDInthepocket / ($Totalruns - 1)
$dif_timer_stat = TimerDiff($begin_timer_stat)
$GOLDMOYbyH = $GOLDInthepocket * 3600000 / $dif_timer_stat
EndIf
;stat XP
;Xp nécessaire pour passer un niveau de paragon
If $Totalruns = 1 Then
Global $level[102]
$level[1] = 7200000
$level[2] = 8640000
$level[3] = 10080000
$level[4] = 11520000
$level[5] = 12960000
$level[6] = 14400000
$level[7] = 15840000
$level[8] = 17280000
$level[9] = 18720000
$level[10] = 20160000
$level[11] = 21600000
$level[12] = 23040000
$level[13] = 24480000
$level[14] = 25920000
$level[15] = 27360000
$level[16] = 28800000
$level[17] = 30240000
$level[18] = 31680000
$level[19] = 33120000
$level[20] = 34560000
$level[21] = 36000000
$level[22] = 37440000
$level[23] = 38880000
$level[24] = 40320000
$level[25] = 41760000
$level[26] = 43200000
$level[27] = 44640000
$level[28] = 46080000
$level[29] = 47520000
$level[30] = 48960000
$level[31] = 50400000
$level[32] = 51840000
$level[33] = 53280000
$level[34] = 54720000
$level[35] = 56160000
$level[36] = 57600000
$level[37] = 59040000
$level[38] = 60480000
$level[39] = 61920000
$level[40] = 63360000
$level[41] = 64800000
$level[42] = 66240000
$level[43] = 67680000
$level[44] = 69120000
$level[45] = 70560000
$level[46] = 72000000
$level[47] = 73440000
$level[48] = 74880000
$level[49] = 76320000
$level[50] = 77760000
$level[51] = 79200000
$level[52] = 80640000
$level[53] = 82080000
$level[54] = 83520000
$level[55] = 84960000
$level[56] = 86400000
$level[57] = 87840000
$level[58] = 89280000
$level[59] = 90720000
$level[60] = 92160000
$level[61] = 95040000
$level[62] = 97920000
$level[63] = 100800000
$level[64] = 103680000
$level[65] = 106560000
$level[66] = 109440000
$level[67] = 112320000
$level[68] = 115200000
$level[69] = 118080000
$level[70] = 120960000
$level[71] = 126000000
$level[72] = 131040000
$level[73] = 136080000
$level[74] = 141120000
$level[75] = 146160000
$level[76] = 151200000
$level[77] = 156240000
$level[78] = 161280000
$level[79] = 166320000
$level[80] = 171360000
$level[81] = 177840000
$level[82] = 184320000
$level[83] = 190800000
$level[84] = 197280000
$level[85] = 203760000
$level[86] = 210240000
$level[87] = 216720000
$level[88] = 223200000
$level[89] = 229680000
$level[90] = 236160000
$level[91] = 244800000
$level[92] = 253440000
$level[93] = 262080000
$level[94] = 270720000
$level[95] = 279360000
$level[96] = 288000000
$level[97] = 296640000
$level[98] = 305280000
$level[99] = 313920000
$level[100] = 322560000
$level[101]=0
EndIf
If $Totalruns = 1 Then
$NiveauParagon = IterateActorAtribs($_MyGuid, $Atrib_Alt_Level)
$ExperienceNextLevel = IterateActorAtribs($_MyGuid, $Atrib_Alt_Experience_Next)
$Expencours = $level[$NiveauParagon + 1] - $ExperienceNextLevel
$Xp_Run = 0
$Xp_Total = 0
$Xp_Moy_Run = 0
$Xp_Moy_Hrs = 0
$time_Xp = 0
_format_time($time_Xp)
Else
;calcul de l'xp du run
If $NiveauParagon = IterateActorAtribs($_MyGuid, $Atrib_Alt_Level) Then; verification de level up (égalité => pas de level up
$Xp_Run = ($level[IterateActorAtribs($_MyGuid, $Atrib_Alt_Level) + 1] - IterateActorAtribs($_MyGuid, $Atrib_Alt_Experience_Next)) - $Expencours;experience run n - experience run n-1
EndIf
$Expencours = $level[IterateActorAtribs($_MyGuid, $Atrib_Alt_Level) + 1] - IterateActorAtribs($_MyGuid, $Atrib_Alt_Experience_Next)
If $NiveauParagon <> IterateActorAtribs($_MyGuid, $Atrib_Alt_Level) Then
$Xp_Run = $ExperienceNextLevel + $Expencours
EndIf
$Xp_Total = $Xp_Total + $Xp_Run
$Xp_Moy_Run = $Xp_Total / ($Totalruns - 1)
$Xp_Moy_Hrs = $Xp_Total * 3600000 / $dif_timer_stat
$NiveauParagon = IterateActorAtribs($_MyGuid, $Atrib_Alt_Level)
$ExperienceNextLevel = IterateActorAtribs($_MyGuid, $Atrib_Alt_Experience_Next)
;calcul temps avant prochain niveau
$Xp_Moy_Sec = $Xp_Total * 1000 / $dif_timer_stat
$time_Xp = Int($ExperienceNextLevel / $Xp_Moy_Sec) * 1000
_format_time($time_Xp)
$time_Xp = $dif_timer_stat_formater
EndIf
;########
_format_time($dif_timer_stat)
$timer_stat_total = $dif_timer_stat_formater
If $Totalruns = 1 Then
$timer_stat_run_moyen = 0
;Lv_stat=lv
;Xp_next_stat=Xp_next
;Xprun=0
;Xptotal=0
;Xpmoyen=0
Else
$dif_timer_stat_moyen = $dif_timer_stat / ($Totalruns - 1)
_format_time($dif_timer_stat_moyen)
$timer_stat_run_moyen = $dif_timer_stat_formater
EndIf
$DebugMessage = "Nombre de Runs : " & $Totalruns & @CRLF
$DebugMessage = $DebugMessage & "Nombre de Mort : " & $Death & @CRLF
$DebugMessage = $DebugMessage & "Nombre de resurrection: " & $Res_compt & @CRLF
$DebugMessage = $DebugMessage & "Nombre de Réparation/Vente : " & $RepairORsell & @CRLF
$DebugMessage = $DebugMessage & "Nombre d'objet stocké dans le Coffre : " & $ItemToStash & @CRLF
$DebugMessage = $DebugMessage & "Nombre d'objet Vendu : " & $ItemToSell & @CRLF
$DebugMessage = $DebugMessage & "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" & @CRLF
$DebugMessage = $DebugMessage & "GOLD Obtenu : " & formatNumber(Ceiling($GOLDInthepocket)) & @CRLF
$DebugMessage = $DebugMessage & "GOLD Moyen par run : " & formatNumber(Ceiling($GOLDMOY)) & @CRLF
$DebugMessage = $DebugMessage & "GOLD Moyen par heure : " & formatNumber(Ceiling($GOLDMOYbyH)) & @CRLF
;stats XP
$DebugMessage = $DebugMessage & "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" & @CRLF
If ($Xp_Total < 1000000) Then ;afficher en "K"
$DebugMessage = $DebugMessage & "XP Obtenu : " & Int($Xp_Total / 1000) & " K" & @CRLF
EndIf
If ($Xp_Total > 999999) Then ;afficher en "M"
$DebugMessage = $DebugMessage & "XP Obtenu : " & Int($Xp_Total / 1000) / 1000 & " M" & @CRLF
EndIf
If ($Xp_Moy_Run < 1000000) Then ;afficher en "K"
$DebugMessage = $DebugMessage & "XP Moyen par run : " & Int($Xp_Moy_Run / 1000) & " K" & @CRLF
EndIf
If ($Xp_Moy_Run > 999999) Then ;afficher en "M"
$DebugMessage = $DebugMessage & "XP Moyen par run : " & Int($Xp_Moy_Run / 1000) / 1000 & " M" & @CRLF
EndIf
If ($Xp_Moy_Hrs < 1000000) Then ;afficher en "K"
$DebugMessage = $DebugMessage & "XP Moyen par heure : " & Int($Xp_Moy_Hrs / 1000) & " K" & @CRLF
EndIf
If ($Xp_Moy_Hrs > 999999) Then ;afficher en "M"
$DebugMessage = $DebugMessage & "XP Moyen par heure : " & Int($Xp_Moy_Hrs / 1000) / 1000 & " M" & @CRLF
EndIf
;$DebugMessage = $DebugMessage & "temps avant prochain niveau : " $ExperienceNextLevel/ & " M" & @CRLF
$DebugMessage = $DebugMessage & "temps avant prochain niveau : " & $time_Xp & @CRLF
$DebugMessage = $DebugMessage & "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" & @CRLF
;$DebugMessage = $DebugMessage & "XP Moyen par heure : " & $Xp_Moy_Hrs & @CRLF
;$DebugMessage = $DebugMessage & "XP avant prochain niveau : " & int($ExperienceNextLevel/1000)/1000 &" M" & @CRLF
;$DebugMessage = $DebugMessage & "niveau paragon actuel : " & $NiveauParagon & @CRLF
;$DebugMessage = $DebugMessage & "#################################"& @CRLF
;$DebugMessage = $DebugMessage & "test 1 : " & $level[$NiveauParagon+1] & @CRLF
;$DebugMessage = $DebugMessage & "exp en cours : " & int($Expencours/1000)/1000 &" M" &@CRLF
;$DebugMessage = $DebugMessage & "Xp_Run : " & int($Xp_Run/1000)/1000 &" M" &@CRLF
;$DebugMessage = $DebugMessage & "#################################"& @CRLF
;#########
$DebugMessage = $DebugMessage & "Durée Total : " & $timer_stat_total & @CRLF
$DebugMessage = $DebugMessage & "Durée moyenne d'un run: " & $timer_stat_run_moyen & @CRLF
$DebugMessage = $DebugMessage & "Nombre de déconnections : " & $disconnectcount & @CRLF
$DebugMessage = $DebugMessage & "~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~" & @CRLF
$DebugMessage = $DebugMessage & "Statistique du Personnage : " & @CRLF
$DebugMessage = $DebugMessage & "Gold Find (Hors Paragon & Compagnon) : " & $GF & " %" & @CRLF
$DebugMessage = $DebugMessage & "Magic Find (Hors Paragon & Compagnon) : " & $MF & " %" & @CRLF
$DebugMessage = $DebugMessage & "PickUp Radius: " & $PR & @CRLF
$DebugMessage = $DebugMessage & "Movement Speed: " & $MS & " %" & @CRLF
$MESSAGE = $DebugMessage
ToolTip($MESSAGE, $DebugX, $DebugY)
$Totalruns = $Totalruns + 1 ;compte le nombre de run
EndFunc ;==>StatsDisplay
;;--------------------------------------------------------------------------------
;;############# END ########### of Stats by YoPens
;;--------------------------------------------------------------------------------
Func _format_time($time_milisecond)
Local $seconde_arrondi
Local $minute
Local $seconde
Local $heure
If ($time_milisecond < 60000) Then
$dif_timer_stat_formater = Round(($time_milisecond / 1000), 2) & " secondes"
ElseIf (($time_milisecond >= 60000) And ($time_milisecond < 3600000)) Then
$seconde_arrondi = Int($time_milisecond / 1000)
$minute = Int($seconde_arrondi / 60)
$seconde = Round((($time_milisecond / 1000) - $minute * 60), 0)
$dif_timer_stat_formater = $minute & " min " & $seconde & " sec"
Else
$seconde_arrondi = Int($time_milisecond / 1000)
$heure = Int($seconde_arrondi / 3600)
$minute = Int((($seconde_arrondi - $heure * 3600) / 60))
$seconde = Round((($time_milisecond / 1000) - $heure * 3600 - $minute * 60), 0)
$dif_timer_stat_formater = $heure & "h " & $minute & "m " & $seconde & "s"
EndIf
Return $dif_timer_stat_formater
EndFunc ;==>_format_time
;;--------------------------------------------------------------------------------
; Function: EmergencyStopCheck()
; Description: Check for dangerous behavior and stop bot if needed to prevent problems
;
; Note(s):
;;--------------------------------------------------------------------------------
Func EmergencyStopCheck()
If $Die2FastCount > 6 Then
WinSetOnTop("[CLASS:D3 Main Window Class]", "", 0)
MsgBox(4096, "Arret d'urgence", "Nombre de mort : " & $Death)
Terminate()
EndIf
If $NeedRepairCount > 4 Then
WinSetOnTop("[CLASS:D3 Main Window Class]", "", 0)
MsgBox(4096, "Arret d'urgence", "Nombre de tentatives de repair a la suite : " & $NeedRepairCount)
Terminate()
EndIf
EndFunc ;==>EmergencyStopCheck
;;--------------------------------------------------------------------------------
; Function: enoughtPotions()
; Description: Read amount of pot in inv. Compare with Potionstock and set takepot to true of false.
;
;
;;--------------------------------------------------------------------------------
Func enoughtPotions()
Local $potinstock = Number(fastCheckuiValue('Root.NormalLayer.game_dialog_backgroundScreenPC.game_potion.text', 1, 875))
If $potinstock > $PotionStock Then
_log("I have more than " & $PotionStock & " potions. I will not take more until next check " & "("&$potinstock&")")
$takepot = False
Else
_log("I have less than " & $PotionStock & " potions. I will grab them until next check " & "pot:" & "("&$potinstock&")")
$takepot = True
Endif
EndFunc ;==>enoughtPotions
;;--------------------------------------------------------------------------------
; Function: Shrine()
; Description: Take Bonus shrine
;;--------------------------------------------------------------------------------
Func shrine($name, $offset, $guid)
Local $begin=timerinit()
While iterateactoratribs($guid, $Atrib_gizmo_state) <> 1 and _playerdead()= false
If getdistance(_MemoryRead($offset + 0xB0, $d3, 'float'), _MemoryRead($offset + 0xB4, $d3, 'float'), _MemoryRead($offset + 0xB8, $d3, 'float')) >= 8 Then
If timerdiff($begin)>4000 Then
_log('shrine is banned because time out')
Return false
ExitLoop
Else
$Coords = FromD3toScreenCoords(_MemoryRead($offset + 0xB0, $d3, 'float'), _MemoryRead($offset + 0xB4, $d3, 'float'), _MemoryRead($offset + 0xB8, $d3, 'float'))
MouseMove($Coords[0], $Coords[1], 3)
Endif
Endif
Interact(_MemoryRead($offset + 0xB0, $d3, 'float'), _MemoryRead($offset + 0xB4, $d3, 'float'), _MemoryRead($offset + 0xB8, $d3, 'float'))
Wend
Endfunc ;shrine
;;--------------------------------------------------------------------------------
; Function: Die2Fast()
; Description: Cette fonction est appelée toute les 20 min.
;
; Note(s): Permet de detecter un nombre de mort a la suite trop important
;;--------------------------------------------------------------------------------
Func Die2Fast()
$Die2FastCount = 0
EndFunc ;==>Die2Fast
;;--------------------------------------------------------------------------------
; Functions: mesurestart() mesureend()
; Description: Mesurer...
;;--------------------------------------------------------------------------------
Func mesureStart()
Global $mesuredebug = TimerInit() ;;;;;;;;;;;;;;
$init = TimerInit()
EndFunc ;==>mesureStart
Func mesureEnd($nom)
Local $difmesuredebug = TimerDiff($mesuredebug) ;;;;;;;;;;;;;
ConsoleWrite("Mesure " & $nom & " : " & $difmesuredebug & @CRLF) ;FOR DEBUGGING;;;;;;;;;;;;
EndFunc ;==>mesureEnd
;;--------------------------------------------------------------------------------
; Functions: Attrib STUFF
; Description: Read Atrib without dll
;;--------------------------------------------------------------------------------
Func GetFAG($idAttrib)
$c = _memoryread($ofs_objectmanager, $d3, "ptr")
$c1 = _memoryread($c + 0x85c, $d3, "ptr")
$c2 = _memoryread($c1 + 0x70, $d3, "ptr")
$id = BitAND($idAttrib, 0xFFFF)
$bitShift = _memoryread($c2 + 0x18C, $d3, "int")
$group1 = _memoryread(_memoryread($c2 + 0x148, $d3, "ptr"), $d3, "int")
$group2 = 4 * BitShift($id, $bitShift)
$group3 = BitShift(1, -$bitShift) - 1
$group4 = 0x180 * BitAND($id, $group3)
Return $group2 + $group4 + $group1
EndFunc
Func GetAttributeOfs($idAttrib, $attrib)
$FAG = GetFAG($idAttrib)
$temp1 = _memoryread(_memoryread($FAG + 0x10, $d3, "ptr") + 8, $d3, "int")
$temp2 = _memoryread(_memoryread($FAG + 0x10, $d3, "ptr") + 0x418, $d3, "int")
$temp3 = BitXOR($attrib, BitShift($attrib, 16))
$temp4 = 4 * BitAND($temp2, $temp3)
$attribEntry = _memoryread($temp1 + $temp4, $d3, "int")
If $attribEntry <> 0 Then
While _memoryread($attribEntry + 4, $d3, "int") <> $attrib
$attribEntry = _memoryread($attribEntry, $d3, "int")
if $attribEntry == 0 Then
Return -1
EndIf
WEnd
Return $attribEntry + 8
EndIf
Return -1
EndFunc
Func GetAttributeInt($idAttrib, $attrib)
Return _memoryread(GetAttributeOfs($idAttrib, BitOR($attrib, 0xFFFFF000)), $d3, "int")
EndFunc
Func GetAttributeFloat($idAttrib, $attrib)
Return _memoryread(GetAttributeOfs($idAttrib, BitOR($attrib, 0xFFFFF000)), $d3, "float")
EndFunc
Func IsPowerReady($idAttrib, $idPower)
Return _memoryread(GetAttributeOfs($idAttrib, BitOR(0x12B, BitShift($idPower, -12))), $d3, "int") <= 0
EndFunc
Func IsBuffActive($idAttrib, $idPower)
Return _memoryread(GetAttributeOfs($idAttrib, BitOR(0x202, BitShift($idPower, -12))), $d3, "int") == 1
EndFunc
Func Repair_DuringRun()
unbuff()
_log("Need repair in run")
$PortBack = False
$NeedRepairCount += 1
While Not _intown()
Attack($a_range, $monsterList)
Sleep(500)
$currentloc = getcurrentpos()
MoveToPos($currentloc[0] + 5, $currentloc[1] + 5, $currentloc[2], 0, 6)
If _playerdead() = False Then
_townportal()
Else
Return False
ExitLoop
EndIf
$PortBack = True
WEnd
While Not offsetlist()
Sleep(10)
WEnd
Sleep(Random(500, 1000))
Repair()
Sleep(Random(100, 200))
Send("{SPACE}")
Sleep(Random(100, 200))
If $PortBack Then
InteractByActorName('hearthPortal')
Sleep(Random(500, 1000))
While Not offsetlist()
Sleep(10)
WEnd
EndIf
buffinit()
EndFunc
Func SafePortBack()
$Curentarea=GetLevelAreaId()
_log('cur area :' & $Curentarea)
;Go to center according to act
Switch $Act
Case 1 ; act 1
MoveToPos(2922.02783203125, 2791.189453125, 24.0453262329102,0,25)
MoveToPos(2945.61547851563, 2800.7109375, 24.0453319549561,0,25)
MoveToPos(2973.68774414063, 2800.90869140625, 24.0453262329102,0,25)
Case 2 ; act 2
;mtp a definir
Case 3 ; act 3
MoveToPos(427.152893066406, 345.048858642578, 0.10000141710043,0,25)
MoveToPos(400.490386962891, 380.362884521484, 0.332595944404602,0,25)
MoveToPos(390.630401611328, 399.380554199219, 0.55376011133194,0,25)
Case 4 ; act 4
MoveToPos(427.152893066406, 345.048858642578, 0.10000141710043,0,25)
MoveToPos(400.490386962891, 380.362884521484, 0.332595944404602,0,25)
MoveToPos(390.630401611328, 399.380554199219, 0.55376011133194,0,25)
EndSwitch
InteractByActorName('hearthPortal')
$Newarea=GetLevelAreaId()
local $areatry = 0
While $Newarea = $Curentarea and $areatry <= 10
$Newarea=GetLevelAreaId()
sleep(500)
$areatry = $areatry + 1
Wend
If $Newarea <> $Curentarea Then
_log('succesfully teleported back : ' & $Curentarea & ":"& $Newarea)
While Not offsetlist()
Sleep(10)
WEnd
Else
_log('We failed to teleport back')
EndIf
EndFunc ;==> SafePortBack
Func GetACDOffsetByACDGUID($guid)
$ptr1 = _memoryread($ofs_objectmanager, $d3, "ptr")
$ptr2 = _memoryread($ptr1 + 0x868, $d3, "ptr")
$ptr3 = _memoryread($ptr2 + 0x0, $d3, "int")
$index = BitAND($Guid, 0xFFFF)
$bitshift = _memoryread($ptr3 + 0x18C, $d3, "int")
$group1 = 4 * BitShift($index, $bitshift)
$group2 = BitShift(1, -$bitshift) - 1
$group3 = _memoryread(_memoryread($ptr3 + 0x148, $d3, "int"), $d3, "int")
$group4 = 0x2D0 * BitAND($index, $group2)
Return $group3 + $group1 + $group4
EndFunc
Func DetectElite($guid)
Return _MemoryRead(GetACDOffsetByACDGUID($Guid) + 0xB8, $d3, 'int')
EndFunc
mon setting dans LIB
#AutoIt3Wrapper_UseX64=n
#cs ----------------------------------------------------------------------------
AutoIt Version: 3.3.8.1
Script Function:
Setup the settings file if it don't exist, overwise, setup de globals
#ce ----------------------------------------------------------------------------
Global $profilFile = "settings.ini"
Global $a_range = Round(Random(55, 60))
Global $g_range = Round(Random(100, 120))
Global $a_time = 9000
Global $g_time = 7500
Global $SpecialmonsterList = "Goblin|brickhouse_|woodwraith_"
Global $monsterList = "Beast_B|Goatman_M|Goatman_R|WitherMoth|Beast_A|Scavenger|zombie|Corpulent|Skeleton|QuillDemon|FleshPitFlyer|Succubus|Scorpion|azmodanBodyguard|succubus|ThousandPounder|Fallen|GoatMutant|demonFlyer_B|creepMob|Triune_|TriuneVesselActivated_|TriuneVessel|Triune_Summonable_|ConductorProxyMaster|sandWasp|TriuneCultist|SandShark|Lacuni"
Global $BanmonsterList = "Skeleton_Archer_A_Unique_Ring_|Skeleton_A_Unique_Ring_|WD_ZombieDog|WD_wallOfZombies|DH_Companion"
Global $grabList = "GoldCoin|GoldMedium|GoldSmall|GoldLarge|healthPotion_Mythic|Lore_Book_Flippy|Amethyst|Ruby|Topaz|Emerald|Tome|Book|Plan|BlacksmithsTome|"
Global $rareList = "Amulet_|Ring_"
Global $Potions = "healthPotion_Mythic"
Global $repairafterxxgames = Round(Random(6, 10))
Global $maxgamelength = 560000
Global $d3pass = ""
Global $PreBuff1 = ""
Global $ToucheBuff1 = ""
Global $delaiBuff1 = ""
Global $PreBuff2 = ""
Global $ToucheBuff2 = ""
Global $delaiBuff2 = ""
Global $PreBuff3 = ""
Global $ToucheBuff3 = ""
Global $delaiBuff3 = ""
Global $PreBuff4 = ""
Global $ToucheBuff4 = ""
Global $delaiBuff4 = ""
Global $QualityLevel = 9
Global $LifeForPotion = 50
Global $takepot = True
Global $PotionStock = 100
Global $TakeShrines = "false"
Global $MaximumHatred= 125
Global $MaximumDiscipline= 25
Global $MaximumSpirit= 100
Global $MaximumFury= 100
Global $MaximumArcane= 100
Global $MaximumMana= 100
Global $RightClickSpell= "false"
Global $LifeForRightClickSpell= ""
Global $RightClickSpellDelay= ""
Global $RightClickSpellEnergy = ""
Global $RightClickSpellEnergyNeeds = ""
Global $Spell1Activated= "false"
Global $LifeForSpell1= ""
Global $DefayForSpell1= ""
Global $EnergySpell1= ""
Global $EnergyNeedsSpell1= ""
Global $KeyForSpell1= ""
Global $Spell2Activated= "false"
Global $LifeForSpell2= ""
Global $DefayForSpell2= ""
Global $EnergySpell2= ""
Global $EnergyNeedsSpell2= ""
Global $KeyForSpell2= ""
Global $Spell3Activated= "false"
Global $LifeForSpell3= ""
Global $DefayForSpell3= ""
Global $EnergySpell3= ""
Global $EnergyNeedsSpell3= ""
Global $KeyForSpell3= ""
Global $Spell4Activated= "false"
Global $LifeForSpell4= ""
Global $DefayForSpell4= ""
Global $EnergySpell4= ""
Global $EnergyNeedsSpell4= ""
Global $KeyForSpell4= ""
;Global $Act = "3"
Global $Devmode = "true"
Global $UsePath= "false"
Global $ResActivated= "false"
Global $ResLife="0"
Global $Res_compt=0
Global $nb_die_t = 0
Global $rdn_die_t = 0
GlobaL $Unidentified = "false"
Global $File_Sequence = "sequence\sequence.txt"
If Not FileExists($profilFile) Then
writeConfigs()
EndIf
loadConfigs()
Func writeConfigs($profilFile = "settings.ini", $creation = 0)
IniWrite($profilFile,"Run info","Unidentified", $Unidentified)
IniWrite($profilFile,"Run info","SequenceFile", $File_Sequence)
IniWrite($profilFile,"Run info","UsePath", $UsePath)
IniWrite($profilFile,"Run info","ResActivated", $ResActivated)
IniWrite($profilFile,"Run info","Reslife", $ResLife)
IniWrite($profilFile,"Account info","pass", 0)
IniWrite($profilFile,"Run info","monsterList", $monsterList)
IniWrite($profilFile,"Run info","specialmonsterList", $SpecialmonsterList)
IniWrite($profilFile,"Run info","grabList", $grabList)
IniWrite($profilFile,"Run info","QualiteItem", $QualityLevel)
IniWrite($profilFile,"Run info","rareList", $rareList)
IniWrite($profilFile,"Run info","attackRange", $a_range)
IniWrite($profilFile,"Run info","grabRange", $g_range)
IniWrite($profilFile,"Run info","attacktimeout", $a_time)
IniWrite($profilFile,"Run info","grabtimeout", $g_time)
IniWrite($profilFile,"Run info","repairafterxxgames", $repairafterxxgames)
IniWrite($profilFile,"Run info","maxgamelength", $maxgamelength)
IniWrite($profilFile,"Run info","Potions", $Potions)
IniWrite($profilFile,"Run info","PreBuff1", $PreBuff1)
IniWrite($profilFile,"Run info","ToucheBuff1", $ToucheBuff1)
IniWrite($profilFile,"Run info","delaiBuff1", $delaiBuff1)
IniWrite($profilFile,"Run info","PreBuff2", $PreBuff2)
IniWrite($profilFile,"Run info","ToucheBuff2", $ToucheBuff2)
IniWrite($profilFile,"Run info","delaiBuff2", $delaiBuff2)
IniWrite($profilFile,"Run info","PreBuff3", $PreBuff3)
IniWrite($profilFile,"Run info","ToucheBuff3", $ToucheBuff3)
IniWrite($profilFile,"Run info","delaiBuff3", $delaiBuff3)
IniWrite($profilFile,"Run info","PreBuff4", $PreBuff4)
IniWrite($profilFile,"Run info","ToucheBuff4", $ToucheBuff4)
IniWrite($profilFile,"Run info","delaiBuff4", $delaiBuff4)
IniWrite($profilFile,"Run info","LifeForPotion", $LifeForPotion)
IniWrite($profilFile,"Run info","PotionStock", $PotionStock)
IniWrite($profilFile,"Run info","TakeShrines", $TakeShrines)
IniWrite($profilFile,"Run info","MaximumHatred", $MaximumHatred)
IniWrite($profilFile,"Run info","MaximumDiscipline", $MaximumDiscipline)
IniWrite($profilFile,"Run info","MaximumSpirit", $MaximumSpirit)
IniWrite($profilFile,"Run info","MaximumFury", $MaximumFury)
IniWrite($profilFile,"Run info","MaximumArcane", $MaximumArcane)
IniWrite($profilFile,"Run info","MaximumMana", $MaximumMana)
IniWrite($profilFile,"Run info","RightClickSpell", $RightClickSpell)
IniWrite($profilFile,"Run info","LifeForRightClickSpell", $LifeForRightClickSpell)
IniWrite($profilFile,"Run info","RightClickSpellDelay", $RightClickSpellDelay)
IniWrite($profilFile,"Run info","RightClickSpellEnergy", $RightClickSpellEnergy)
IniWrite($profilFile,"Run info","RightClickSpellEnergyNeeds", $RightClickSpellEnergyNeeds)
IniWrite($profilFile,"Run info","Spell1Activated", $Spell1Activated)
IniWrite($profilFile,"Run info","LifeForSpell1", $LifeForSpell1)
IniWrite($profilFile,"Run info","DefayForSpell1", $DefayForSpell1)
IniWrite($profilFile,"Run info","EnergySpell1", $EnergySpell1)
IniWrite($profilFile,"Run info","EnergyNeedsSpell1", $EnergyNeedsSpell1)
IniWrite($profilFile,"Run info","Spell2Activated", $Spell2Activated)
IniWrite($profilFile,"Run info","LifeForSpell2", $LifeForSpell2)
IniWrite($profilFile,"Run info","DefayForSpell2", $DefayForSpell2)
IniWrite($profilFile,"Run info","EnergySpell2", $EnergySpell2)
IniWrite($profilFile,"Run info","EnergyNeedsSpell2", $EnergyNeedsSpell2)
IniWrite($profilFile,"Run info","Spell3Activated", $Spell3Activated)
IniWrite($profilFile,"Run info","LifeForSpell3", $LifeForSpell3)
IniWrite($profilFile,"Run info","DefayForSpell3", $DefayForSpell3)
IniWrite($profilFile,"Run info","EnergySpell3", $EnergySpell3)
IniWrite($profilFile,"Run info","EnergyNeedsSpell3", $EnergyNeedsSpell3)
IniWrite($profilFile,"Run info","Spell4Activated", $Spell4Activated)
IniWrite($profilFile,"Run info","LifeForSpell4", $LifeForSpell4)
IniWrite($profilFile,"Run info","DefayForSpell4", $DefayForSpell4)
IniWrite($profilFile,"Run info","EnergySpell4", $EnergySpell4)
IniWrite($profilFile,"Run info","EnergyNeedsSpell4", $EnergyNeedsSpell4)
IniWrite($profilFile,"Run info","KeyForSpell1", $KeyForSpell1)
IniWrite($profilFile,"Run info","KeyForSpell2", $KeyForSpell2)
IniWrite($profilFile,"Run info","KeyForSpell3", $KeyForSpell3)
IniWrite($profilFile,"Run info","KeyForSpell4", $KeyForSpell4)
;IniWrite($profilFile,"Run info","Act", $Act)
IniWrite($profilFile,"Run info","Devmode", $Devmode)
EndFunc
Func loadConfigs($profilFile = "settings.ini", $creation = 0)
;; windows informations
;$winName = IniRead($profilFile,"windows info","winName","Diablo III")
;$gamePath = IniRead($profilFile,"windows info","gameExecFullPath",0)
;; Account info
$d3pass = IniRead($profilFile, "Account info", "pass", 0)
;; Run info
$Unidentified = IniRead($profilFile, "Run info", "Unidentified", $Unidentified)
$monsterList = IniRead($profilFile, "Run info", "monsterList", $monsterList)
$SpecialmonsterList = IniRead($profilFile, "Run info", "SpecialmonsterList", $SpecialmonsterList)
$grabList = IniRead($profilFile, "Run info", "grabList", $grabList)
$QualityLevel = IniRead($profilFile,"Run info","QualiteItem", $QualityLevel)
$rareList = IniRead($profilFile,"Run info","rareList", $rareList)
$a_range = IniRead($profilFile, "Run info", "attackRange", $a_range)
$g_range = IniRead($profilFile, "Run info", "grabRange", $g_range)
$a_time = IniRead($profilFile,"Run info","attacktimeout", $a_time)
$g_time = IniRead($profilFile,"Run info","grabtimeout", $g_time)
$repairafterxxgames = IniRead($profilFile, "Run info", "repairafterxxgames", $repairafterxxgames)
$maxgamelength = IniRead($profilFile, "Run info", "maxgamelength", $maxgamelength)
$Potions = IniRead($profilFile, "Run info", "Potions", $Potions)
$PreBuff1 = IniRead($profilFile, "Run info", "PreBuff1", $PreBuff1)
$ToucheBuff1 = IniRead($profilFile, "Run info", "ToucheBuff1", $ToucheBuff1)
$delaiBuff1 = IniRead($profilFile, "Run info", "delaiBuff1", $delaiBuff1)
$PreBuff2 = IniRead($profilFile, "Run info", "PreBuff2", $PreBuff2)
$ToucheBuff2 = IniRead($profilFile, "Run info", "ToucheBuff2", $ToucheBuff2)
$delaiBuff2 = IniRead($profilFile, "Run info", "delaiBuff2", $delaiBuff2)
$PreBuff3 = IniRead($profilFile, "Run info", "PreBuff3", $PreBuff3)
$ToucheBuff3 = IniRead($profilFile, "Run info", "ToucheBuff3", $ToucheBuff3)
$delaiBuff3 = IniRead($profilFile, "Run info", "delaiBuff3", $delaiBuff3)
$PreBuff4 = IniRead($profilFile, "Run info", "PreBuff4", $PreBuff4)
$ToucheBuff4 = IniRead($profilFile, "Run info", "ToucheBuff4", $ToucheBuff4)
$delaiBuff4 = IniRead($profilFile, "Run info", "delaiBuff4", $delaiBuff4)
$LifeForPotion = IniRead($profilFile,"Run info","LifeForPotion", $LifeForPotion)
$PotionStock = IniRead($profilFile, "Run info", "PotionStock", $PotionStock)
$TakeShrines = IniRead($profilFile, "Run info", "TakeShrines", $TakeShrines)
$RightClickSpell = IniRead($profilFile,"Run info","RightClickSpell", $RightClickSpell)
$LifeForRightClickSpell = IniRead($profilFile,"Run info","LifeForRightClickSpell", $LifeForRightClickSpell)
$RightClickSpellDelay = IniRead($profilFile,"Run info","RightClickSpellDelay", $RightClickSpellDelay)
$RightClickSpellEnergy = IniRead($profilFile,"Run info","RightClickSpellEnergy", $RightClickSpellEnergy)
$RightClickSpellEnergyNeeds = IniRead($profilFile,"Run info","RightClickSpellEnergyNeeds", $RightClickSpellEnergyNeeds)
$Spell1Activated = IniRead($profilFile,"Run info","Spell1Activated", $Spell1Activated)
$LifeForSpell1 = IniRead($profilFile,"Run info","LifeForSpell1", $LifeForSpell1)
$DefayForSpell1 = IniRead($profilFile,"Run info","DefayForSpell1", $DefayForSpell1)
$EnergySpell1 = IniRead($profilFile,"Run info","EnergySpell1", $EnergySpell1)
$EnergyNeedsSpell1 = IniRead($profilFile,"Run info","EnergyNeedsSpell1", $EnergyNeedsSpell1)
$Spell2Activated = IniRead($profilFile,"Run info","Spell2Activated", $Spell2Activated)
$LifeForSpell2 = IniRead($profilFile,"Run info","LifeForSpell2", $LifeForSpell2)
$DefayForSpell2 = IniRead($profilFile,"Run info","DefayForSpell2", $DefayForSpell2)
$EnergySpell2 = IniRead($profilFile,"Run info","EnergySpell2", $EnergySpell2)
$EnergyNeedsSpell2 = IniRead($profilFile,"Run info","EnergyNeedsSpell2", $EnergyNeedsSpell2)
$Spell3Activated = IniRead($profilFile,"Run info","Spell3Activated", $Spell3Activated)
$LifeForSpell3 = IniRead($profilFile,"Run info","LifeForSpell3", $LifeForSpell3)
$DefayForSpell3 = IniRead($profilFile,"Run info","DefayForSpell3", $DefayForSpell3)
$EnergySpell3 = IniRead($profilFile,"Run info","EnergySpell3", $EnergySpell3)
$EnergyNeedsSpell3 = IniRead($profilFile,"Run info","EnergyNeedsSpell3", $EnergyNeedsSpell3)
$Spell4Activated = IniRead($profilFile,"Run info","Spell4Activated", $Spell4Activated)
$LifeForSpell4 = IniRead($profilFile,"Run info","LifeForSpell4", $LifeForSpell4)
$DefayForSpell4 = IniRead($profilFile,"Run info","DefayForSpell4", $DefayForSpell4)
$EnergySpell4 = IniRead($profilFile,"Run info","EnergySpell4", $EnergySpell4)
$EnergyNeedsSpell4 = IniRead($profilFile,"Run info","EnergyNeedsSpell4", $EnergyNeedsSpell4)
$KeyForSpell1 = IniRead($profilFile,"Run info","KeyForSpell1", $KeyForSpell1)
$KeyForSpell2 = IniRead($profilFile,"Run info","KeyForSpell2", $KeyForSpell2)
$KeyForSpell3 = IniRead($profilFile,"Run info","KeyForSpell3", $KeyForSpell3)
$KeyForSpell4 = IniRead($profilFile,"Run info","KeyForSpell4", $KeyForSpell4)
$MaximumHatred = IniRead($profilFile,"Run info","MaximumHatred", $MaximumHatred)
$MaximumDiscipline = IniRead($profilFile,"Run info","MaximumDiscipline", $MaximumDiscipline)
$MaximumSpirit = IniRead($profilFile,"Run info","MaximumSpirit", $MaximumSpirit)
$MaximumFury = IniRead($profilFile,"Run info","MaximumFury", $MaximumFury)
$MaximumArcane = IniRead($profilFile,"Run info","MaximumArcane", $MaximumArcane)
$MaximumMana = IniRead($profilFile,"Run info","MaximumMana", $MaximumMana)
$UsePath = StringLower(IniRead($profilFile, "Run info", "UsePath", $UsePath))
$ResActivated = StringLower(IniRead($profilFile,"Run info","ResActivated", $ResActivated))
$ResLife = IniRead($profilFile,"Run info","ResLife", $ResLife)
$File_Sequence = IniRead($profilFile, "Run info", "SequenceFile", $File_sequence)
;$Act = IniRead($profilFile,"Run info","Act", $Act)
$Devmode = IniRead($profilFile,"Run info","Devmode", $Devmode)
If $RightClickSpellEnergy <> "" AND $RightClickSpellEnergy <> "discipline" AND $RightClickSpellEnergy <> "hatred" AND $RightClickSpellEnergy <> "spirit" AND $RightClickSpellEnergy <> "arcane" AND $RightClickSpellEnergy <> "mana" AND $RightClickSpellEnergy <> "fury" Then
MsgBox(0, "Erreur non de variable", "La variable '$RightClickSpellEnergy' initialisé dans le setting.ini est mal écrite")
Terminate()
EndIf
If $EnergySpell1 <> "" AND $EnergySpell1 <> "discipline" AND $EnergySpell1 <> "hatred" AND $EnergySpell1 <> "spirit" AND $EnergySpell1 <> "arcane" AND $EnergySpell1 <> "mana" AND $EnergySpell1 <> "fury" Then
MsgBox(0, "Erreur non de variable", "La variable '$EnergySpell1' initialisé dans le setting.ini est mal écrite")
Terminate()
EndIf
If $EnergySpell2 <> "" AND $EnergySpell2 <> "discipline" AND $EnergySpell2 <> "hatred" AND $EnergySpell2 <> "spirit" AND $EnergySpell2 <> "arcane" AND $EnergySpell2 <> "mana" AND $EnergySpell2 <> "fury" Then
MsgBox(0, "Erreur non de variable", "La variable '$EnergySpell2' initialisé dans le setting.ini est mal écrite")
Terminate()
EndIf
If $EnergySpell3 <> "" AND $EnergySpell3 <> "discipline" AND $EnergySpell3 <> "hatred" AND $EnergySpell3 <> "spirit" AND $EnergySpell3 <> "arcane" AND $EnergySpell3 <> "mana" AND $EnergySpell3 <> "fury" Then
MsgBox(0, "Erreur non de variable", "La variable '$EnergySpell3' initialisé dans le setting.ini est mal écrite")
Terminate()
EndIf
If $EnergySpell4 <> "" AND $EnergySpell4 <> "discipline" AND $EnergySpell4 <> "hatred" AND $EnergySpell4 <> "spirit" AND $EnergySpell4 <> "arcane" AND $EnergySpell4 <> "mana" AND $EnergySpell4 <> "fury" Then
MsgBox(0, "Erreur non de variable", "La variable '$EnergySpell4' initialisé dans le setting.ini est mal écrite")
Terminate()
EndIf
EndFunc ;==>loadConfigs
c'est correct ?
#23
Lokiro
-
- Bannis
-
- 911 messages
Fragger
- Location :Quebec
- Hobbies :GMS Hacks/Bots
Posté 22 January 2013 - 19:53
Une erreur de majuscule peut ne rien faire marcher
Sinon utilise tu la version de base ou une version de bulabou ou autre ?
#24
diablow
-
- Bannis
-
- 64 messages
Débutant lvl 2
Posté 22 January 2013 - 20:13
je test un run pour voir si c'est bon
J'utilise la version de base et toi?
edit : ça fonctionne toujours pas, c'est fou????
Unidentified=True
j'ai mis ça dans le setting.ini normalement ça identifie pas
faut recompiler le exe?
#25
Lokiro
-
- Bannis
-
- 911 messages
Fragger
- Location :Quebec
- Hobbies :GMS Hacks/Bots
Posté 22 January 2013 - 22:15
#26
diablow
-
- Bannis
-
- 64 messages
Débutant lvl 2
Posté 22 January 2013 - 23:07
#27
Lokiro
-
- Bannis
-
- 911 messages
Fragger
- Location :Quebec
- Hobbies :GMS Hacks/Bots
Posté 22 January 2013 - 23:29
Jsuis passé par le au3 en installaut autoit, et run x86 et jai ouvert avec main.au3 et il ouvre les anneaux quand meme... chelou bon tant pis j'attendrais qu'une version sorte avec ta superbe fonction
Envoi moi ton setting.au3 et ton toolkit je vais tester avec et te dire tout suite ou est l'erreur ou le probleme
#28
diablow
-
- Bannis
-
- 64 messages
Débutant lvl 2
Posté 23 January 2013 - 01:08
ça identfie rien comme je le souhaite, et ça met bien dans le coffre
sauf que desfois le bot ramasse les épée, et donc il les identifie pas et il essaie de vendre au marchand mais il peut pas vu qu'ils sont non id donc au bout d'un moment inventaire full , ya une solution facile ou pas? peut etre en bas du code je crois
edit :
peut etre ici
ElseIf (IterateActorAtribs($_GUID, $Atrib_Item_Quality_Level) >= 6) And checkFromList($rareList, $_NAME) Then ; filter the magic and higher
_log($_NAME & " ==> It's a rare in our list ")
Return "Stash"
EndIf
$rarelist c'est la variable dans le setting.ini
ou faudrait faire
si c'est anneau ou amu je fais rien
si c'est un légendaire je fais rien
sinon je identifie
mouse right
sleep
enfin jconnais pas trop bien autoit
edit :
jai fait ça , je sais pas si ça correspond bien
If IterateActorAtribs($__ACDACTOR[$i][0], $Atrib_Item_Quality_Level) > 8 Then
Sleep(Random(500, 800))
Sleep(Random(4000, 4500))
Elseif IterateActorAtribs($__ACDACTOR[$i][0], $Atrib_Item_Quality_Level) >= 6 And checkFromList($rareList, $_NAME) Then ; filter the magic and higher
Sleep(Random(500, 800))
Sleep(Random(1000, 1500))
Else
Sleep(Random(500, 800))
MouseClick("Right")
Sleep(Random(1000, 1500))
EndIf
;Send("{SPACE}") ; make sure we close everything
EndIf
j'ai laissé les sleep juste pour voir ou se place la souris et si il identifie ou pas, si c'est bon je les enleverais
#29
Lokiro
-
- Bannis
-
- 911 messages
Fragger
- Location :Quebec
- Hobbies :GMS Hacks/Bots
Posté 23 January 2013 - 01:51
Oui j'utilise la version de base mais avec quelque propre modif, sinon je tes demander tes 2 fichier pour que je puise voir ou se situe l'erreur pcq sa semble être que chez toi que sa fais ceci
ps: ce que tu vien de faire n'aboutie a rien ta ligne ramène vers un sleep.
#30
kickbar
-
- Membre
-
- 539 messages
Devlopette
- Hobbies :Informatiques, jeux vidéo, botting !!!! ;D
Posté 23 January 2013 - 05:19
dans lig/setting.au3 ajouter
Global $Unidentified = "false" IniWrite($profilFile,"Run info","Unidentified", $Unidentified) $Unidentified = IniRead($profilFile, "Run info", "Unidentified", $Unidentified)
dans settings.ini ajouter
Unidentified=True ; ==>True pour ne pas identifier les items, ; ==>False pour autoriser l'identification
Dans la fonction Filterbackpack remplacer
If _MemoryRead($__ACDACTOR[$i][7] + 0x164, $d3, 'int') > 0 Then
If _MemoryRead($__ACDACTOR[$i][7] + 0x164, $d3, 'int') > 0 AND (CheckItem($__ACDACTOR[$i][0], $__ACDACTOR[$i][1]) <> "Stash" OR $Unidentified = "False" ) Then
voila ce qu'il faut faire pour que seul les items que l'on est censé conserver ne soit pas identifié, on identifie le reste et on vend comme d'habitude !
ps : pas tester le if avec ton $Unidentified = "False", moi j'use en dure ac direct CheckItem($__ACDACTOR[$i][0], $__ACDACTOR[$i][1]) <> "Stash", donc a confirmer !
reps : Attention cette fonctionnalité, n'est pas compatible (ne fonctionnera pas) avec la fonction de tri de Taz
#31
Lokiro
-
- Bannis
-
- 911 messages
Fragger
- Location :Quebec
- Hobbies :GMS Hacks/Bots
Posté 23 January 2013 - 05:23
Met a jour ton post stp
dans lig/setting.au3 ajouterGlobal $Unidentified = "false" IniWrite($profilFile,"Run info","Unidentified", $Unidentified) $Unidentified = IniRead($profilFile, "Run info", "Unidentified", $Unidentified)
dans settings.ini ajouterUnidentified=True ; ==>True pour ne pas identifier les items, ; ==>False pour autoriser l'identification
Dans la fonction Filterbackpack remplacerIf _MemoryRead($__ACDACTOR[$i][7] + 0x164, $d3, 'int') > 0 ThenIf _MemoryRead($__ACDACTOR[$i][7] + 0x164, $d3, 'int') > 0 AND (CheckItem($__ACDACTOR[$i][0], $__ACDACTOR[$i][1]) <> "Stash" AND $Unidentified = "False" ) Then
voila ce qu'il faut faire pour que seul les items que l'on est censé conserver ne soit pas identifié, on identifie le reste et on vend comme d'habitude !
ps : pas tester le if avec ton $Unidentified = "False", moi j'use en dure ac direct CheckItem($__ACDACTOR[$i][0], $__ACDACTOR[$i][1]) <> "Stash", donc a confirmer !
reps : Attention cette fonctionnalité, n'est pas compatible (ne fonctionnera pas) avec la fonction de tri de Taz
Merci de ton aide je met a jours
EDIT: Code mis a jours, veuillez faire les changements dans le votre.
#32
kickbar
-
- Membre
-
- 539 messages
Devlopette
- Hobbies :Informatiques, jeux vidéo, botting !!!! ;D
Posté 23 January 2013 - 05:32
ps : pas tester le if avec ton $Unidentified = "False", moi j'use en dure ac direct CheckItem($__ACDACTOR[$i][0], $__ACDACTOR[$i][1]) <> "Stash", donc a confirmer !
Pense a vérifier quand même que mon ( OR $Unidentified = "False" ) soit cohérent, je viens de me réveiller, il se peut donc que ce ne soit pas correct, même si en toute logique sa a l'air d’être correct ^^ (au debut j'avais mis -> AND $Unidentified = "False" )
Je ne peux actuellement plus tester car les serveurs EU sont en maintenance :/
#33
Lokiro
-
- Bannis
-
- 911 messages
Fragger
- Location :Quebec
- Hobbies :GMS Hacks/Bots
Posté 23 January 2013 - 05:35
np
ps : pas tester le if avec ton $Unidentified = "False", moi j'use en dure ac direct CheckItem($__ACDACTOR[$i][0], $__ACDACTOR[$i][1]) <> "Stash", donc a confirmer !
Pense a vérifier quand même que mon ( OR $Unidentified = "False" ) soit cohérent, je viens de me réveiller, il se peut donc que ce ne soit pas correct, même si en toute logique sa a l'air d’être correct ^^ (au debut j'avais mis -> AND $Unidentified = "False" )
Je ne peux actuellement plus tester car les serveurs EU sont en maintenance :/
même chose pour moi, je vais donc aller tester sur le US
#34
kickbar
-
- Membre
-
- 539 messages
Devlopette
- Hobbies :Informatiques, jeux vidéo, botting !!!! ;D
Posté 23 January 2013 - 05:41
c'est pas
If _MemoryRead($__ACDACTOR[$i][7] + 0x164, $d3, 'int') > 0 AND (CheckItem($__ACDACTOR[$i][0], $__ACDACTOR[$i][1]) <> "Stash" AND $Unidentified = "False" ) Then
mais plutôt
If _MemoryRead($__ACDACTOR[$i][7] + 0x164, $d3, 'int') > 0 AND (CheckItem($__ACDACTOR[$i][0], $__ACDACTOR[$i][1]) <> "Stash" OR $Unidentified = "False" ) Then
j'ai edité mon post après que tu l'ai lus, c'est pour sa ^^
et pour que cela fonctionne bien il te faut repartir sur un code propre, je vois qu'il reste :
If IterateActorAtribs($__ACDACTOR[$i][0], $Atrib_Item_Quality_Level) > 8 and $Unidentified = "False" Then
ce n'est pas correct ^^
voila la fonction compléte pour que tu puisses nettoyer ton code des précédentes modifs que tu as pus faire :
Func FilterBackpack()
Local $__ACDACTOR = IterateBackpack(0)
;_log(" FilterBackpack ==> IterateBackpack")
Local $iMax = UBound($__ACDACTOR)
;_log(" FilterBackpack ==> 1 ")
If $iMax > 0 Then
Local $return[$iMax][3]
;_log(" FilterBackpack ==> 2 ")
Send("{SPACE}") ; make sure we close everything
Send("i") ; open the inventory
Sleep(100)
For $i = 0 To $iMax - 1
; Loop each item in the backpack
;_log( "log name -> " & $__ACDACTOR[$i][1] & " value du checkitems : " & CheckItem($__ACDACTOR[$i][0], $__ACDACTOR[$i][1]) )
If _MemoryRead($__ACDACTOR[$i][7] + 0x164, $d3, 'int') > 0 AND (CheckItem($__ACDACTOR[$i][0], $__ACDACTOR[$i][1]) <> "Stash" OR $Unidentified = "False" ) Then
InventoryMove($__ACDACTOR[$i][3], $__ACDACTOR[$i][4])
If IterateActorAtribs($__ACDACTOR[$i][0], $Atrib_Item_Quality_Level) > 8 Then
Sleep(Random(500, 800))
MouseClick("Right")
Sleep(Random(4000, 4500))
Else
Sleep(Random(500, 800))
MouseClick("Right")
Sleep(Random(1000, 1500))
EndIf
EndIf
$itemDestination = CheckItem($__ACDACTOR[$i][0], $__ACDACTOR[$i][1])
$return[$i][0] = $__ACDACTOR[$i][3] ;col
$return[$i][1] = $__ACDACTOR[$i][4] ;row
$return[$i][2] = $itemDestination ;row
;_log(" FilterBackpack ==> 5 end")
Next
;_log(" FilterBackpack ==> 6")
Send("{SPACE}") ; make sure we close everything
Return $return
EndIf
;_log(" FilterBackpack ==> 7")
Return False
; After using this function, you can loop the return array and make inventorymove
; InventoryMove($return[$i][0], $return[$i][1])
EndFunc ;==>FilterBackpack
Pour faire simple, met ton bot en mode Dev=true
dans le main.au3 cherche la fonction testing(), supprime ce qu'elle contient et ajoute un appelle a la fonction FilterBackpack(), lance le bot appuie sur F1, et regarde ce qui se passe
#35
Lokiro
-
- Bannis
-
- 911 messages
Fragger
- Location :Quebec
- Hobbies :GMS Hacks/Bots
Posté 23 January 2013 - 05:42
Dac merci du conseil je trouvais sa long le laisser faire le run entier xD
Bon en faite il n'identifie plus tout court maintenant, il stash directement, je crois savoir de ou vien le probleme
#36
kickbar
-
- Membre
-
- 539 messages
Devlopette
- Hobbies :Informatiques, jeux vidéo, botting !!!! ;D
Posté 23 January 2013 - 06:13
#37
Lokiro
-
- Bannis
-
- 911 messages
Fragger
- Location :Quebec
- Hobbies :GMS Hacks/Bots
Posté 23 January 2013 - 06:19
Bon donc je dois etre mal reveiller, je testerai lorsque le serveur EU seront up
eu ouais la je bloque carrement peut importe il ne fais plus rien il stash tout identifier ou non
#38
kickbar
-
- Membre
-
- 539 messages
Devlopette
- Hobbies :Informatiques, jeux vidéo, botting !!!! ;D
Posté 23 January 2013 - 06:32
SI C'EST UN OBJET NON IDENTIFIER - ET - (SI C'EST UN ITEM POUR VENDRE - OU - SI TA VARIABLE EST EGALE A FALSE)
On identifie
SINON
On identifie pas
FIN DU IF
sa nous donne SI 1 ET (0 OU 0) on identifie
1 represente un objet non identifié
le 1er 0 représente l'état de l'objet 0=vendre; 1=stash
le 2éme 0 représente l’état de ta variable 0=false; 1=true
Si c'est un item pour vendre et que ta variable est a false on identifie (1 ET (0 OU 0) ) -> on passe le if
Si c'est un item pour stash et que ta variable est a false on identifie (1 ET (1 OU 0)) -> on passe le if
Si c'est un item pour vendre et que ta variable est a true on identifie (1 ET (0 OU 1) ) -> on passe le if
Si c'est un item pour stash et que ta varible est a true on identifie pas (1 ET (1 OU 1) ) -> on passe pas le if, donc en toute logique le seul cas de figure ou on identifie pas l'item (pour stash avec ta variable a true)
en théorie sa me parait être correct :/ ^^
#39
Lokiro
-
- Bannis
-
- 911 messages
Fragger
- Location :Quebec
- Hobbies :GMS Hacks/Bots
Posté 23 January 2013 - 06:39
non mais la logique du truc c'est
SI C'EST UN OBJET NON IDENTIFIER - ET - (SI C'EST UN ITEM POUR VENDRE - OU - SI TA VARIABLE EST EGALE A FALSE)
On identifie
SINON
On identifie pas
FIN DU IF
sa nous donne SI 1 ET (0 OU 0) on identifie
1 represente un objet non identifié
le 1er 0 représente l'état de l'objet 0=vendre; 1=stash
le 2éme 0 représente l’état de ta variable 0=false; 1=true
Si c'est un item pour vendre et que ta variable est a false on identifie (1 ET (0 OU 0) ) -> on passe le if
Si c'est un item pour stash et que ta variable est a false on identifie (1 ET (1 OU 0)) -> on passe le if
Si c'est un item pour vendre et que ta variable est a true on identifie (1 ET (0 OU 1) ) -> on passe le if
Si c'est un item pour stash et que ta varible est a true on identifie pas (1 ET (1 OU 1) ) -> on passe pas le if, donc en toute logique le seul cas de figure ou on identifie pas l'item (pour stash avec ta variable a true)
en théorie sa me parait être correct :/ ^^
je met pas en doute ta parole et ton experience je te dit juste que la tout bugg il ne fais absolument plus rien:S
#40
kickbar
-
- Membre
-
- 539 messages
Devlopette
- Hobbies :Informatiques, jeux vidéo, botting !!!! ;D
Posté 23 January 2013 - 06:45
les serveurs sont reup laisse moi 15 minutes je test





