Jump to content

wutisgoingon

Elite+
  • Content Count

    15
  • Joined

  • Last visited

Posts posted by wutisgoingon


  1. I found a proper aura setup:

    Reduced Mana (lvl 11) -> Hatred -> Grace OR Determination

    Reduced Mana at level 11 allows you to run both auras.

    Blood Magic linked to Leap Slam so you don't use any mana

    We have enough defense with talents to run Hated which is a huge damage boost

    Use Grace if you have iron reflexes and if it gives more physical reduction, otherwise use Determination.


  2. New passive skill tree (for Scion start):

    http://www.pathofexile.com/passive-skil ... L8xf4K_o8=

    Scion seems like a very solid start with lots of life/resist nodes as well as berserking nearby, but you could still make duelist/marauder work if you want. Note there are several, good sword talents that are selected, only take those if you use a sword obviously.


  3. When farming Merc City of Sarn how do you guys deal with the bear trapper?

    I feel like he might shit all over my bot.

    Edit* Just got to act 3 cruel on my level 47 leap slammer duelist, I feel like its hard for me to do atm. Even with 75 all resist. My life is 1500, 58% DR with grace up.

    I started having mana problems with leap slam so i went to 4 link Leap Slam/BM/AddedFire/LifeonHit and I feel like I take to much damage now. Farming Chamber of Sins in A2 Cruel to hopefully get a few levels.

    Any tips? I s my gear maybe not good enough?

    for city of sarn, you don't need resists. you should focus on life and armor. High armor is the best defense against perpetus. Life regen talents are really strong also, you should not need life on hit support gem, and instead use melee physical damage. killing faster = more survivability as well. Improving your gear though is the easiest thing to do to bot safely.


  4. This used to be an overview of my Leap Slam bot who was comfortably doing Merc Docks on Onslaught. Now it can be used as a guide to botting a leap slammer in Nemesis.

    NEW 1.0 TALENT TREE (SCION START)

    http://www.pathofexile.com/passive-skil ... L8xf4K_o8=

    Scion seems like a very solid start with lots of life/resist nodes as well as berserking nearby, but you could still make duelist/marauder work if you want. Note there are several, good sword talents that are selected, only take those if you use a sword obviously.

    GEAR - (currently I don't have much IIQ) Update-go for a Koam's Primacy

    All of my gear has been acquired using currency found by botting city of sarn. I also crafted a lot of the 20% quantity jewelry myself because it's hard to find good ones for trade

    The weapon I bought for 3 exalts because it has a perfect roll. I see others go for around 2 exalts. These are onslaught prices by the way. If you've been botting for awhile in city of sarn, this should be easily affordable and definitely worth it. You will also have to 4 or 5 link it.

    Posted Image

    This helm I bought using the poe index mostly for the necessary cold resist that I was lacking for Docks. When searching the index, quantity was the absolute priority followed by life and then cold/fire resists

    Posted Image

    This chest was 2 chaos from the index. This is the only piece of gear that you are free from the restriction of needing quantity. So you must try to get high armor/evasion, high life, and at least some resists.

    Posted Image

    Perfect sadimas provide the most quantity you can get on gloves. I paid about 4 chaos. If you can't get these go for some life/resist/quantity armor based rares

    Posted Image

    Perfect quantity Perandus Blazon--can't get quantity on anything else. Also has necessary fire resist and all attributes. A perfect 12% is worth 3-5 chaos. Other options are Meginord's or a rare, but this build attempts to maximize quantity while still surviving onslaught merc docks.

    I paid a small premium for these 2 perfect uniques, but the % IQ go along way if you're doing a lot of botting

    Posted Image

    There are two options for boots. I found that for running docks, you need run speed because it spends a lot of time searching the empty grid. So I found a very nice pair with 30% move speed and 20% quantity. They also have 45% fire resist to easily replace my 30% quantity Goldwyrm Nubuck boots. I paid 5 chaos for these boots, which I plan on exalting soon, and the Goldwyrm's are 7 chaos for 30%. In my talent tree you will see 'Celerity' for 8% movement speed and 2x mana reservations so that I can run haste (more movement speed).

    Posted ImagePosted Image

    For my jewelry, I bought an itemlevel 77 sapphire ring and altered it until I got a 20% quantity affix. The second mod doesn't matter that much because 20% quantity is so rare. You can then regal it for another chance at max life. I ended up exalting Golem Loop until I filled up all the slots (with peer pressure from my friends) and got some pretty decent rolls.

    I also crafted the ilvl77 amulet. It isn't that good, but I value 20% quantity a lot. I don't think it's quite exalt worthy but it's tempting.

    And I bought Skull Nail from the index for around 5 chaos.

    Posted Image

    GEMS - updated for Nemesis

    My current setup: Leap Slam->Blood Magic->Endurance Charge on Melee Stun->Melee Physical OR Added Fire

    *Endurance Charge on Melee Stun could be swapped for more damage if you have 'Cast on damage taken' linked with enduring cry (see below).

    *Once you have a 5-link, you could use Item Rarity

    Note: Item Quantity does not exist in Nemesis. Another thing that is helpful is linking 'Endurance Charge on Melee Stun' to leap slam. You will have 3 charges up for 15% physical reduction pretty much ALL the time. If you get talents for extra endurance charges, you can get 5 charges for 25% reduction. This could replace Item Quantity (because you can't get it on Nemesis)

    Updated Aura Setup:

    Reduced Mana (at least lvl 11) -> Hatred -> Grace OR Determination

    *Reduced Mana at level 11 allows you to run both auras

    *Blood Magic linked to Leap Slam so you don't use any mana

    *We have enough defense with talents to run Hated which is a huge damage boost

    *Use Grace if you have iron reflexes and if it gives more physical reduction, otherwise use Determination

    More Gem Options

    Additionally, have the bot link the following:

    'Cast when damage taken' -> Curse of your choice(perhaps Vulnerability/Enfeeble) -> Molten Shell -> Enduring Cry

    It will cast all of these when taking 400 damage or so. This is too good to be true.

    FLASKS - outdated script

    First of all, I use PoE_AutoFlasks.ahk for flasks and chickening. This means I set my bot config flask settings to 0. I setup my autoflask so that it will spam three 'Seething' flasks when needed and 2 granites when needed. With this setup, my bot is pretty much a god. I find it imperative to have Seething flasks so that you can face tank LMP dogs and keep your health capped off. The following is my autoflask script utilizing 'OverrideFlaskDuration': **You must use 3 'Seething' prefix flasks in your 1-2-3 slots for this to work**

    SetBatchLines, -1

    DetectHiddenWindows, On

    cliname=Path of Exile

    cliexe=Client.exe

    trayNotifications:=true ;display tray notifications about script actions : drinking potions, autoquitting

    autoPotionsWatchdogPeriod:=100 ;milliseconds, decrease this value to have script recheck life/mana/flasks availability more often/increase chances of getting saved from death in time

    lagCompensation:=50

    autoQuitMode:=1 ; default autoQuit method : 0 =winKill, 1 = exit to login screen

    autoQuitPauseBeforeClick:=100

    autoQuitSoftToleranceBeforeKill:=2000 ; try to quit to loginscreen at most milliseconds before killing game window(in case we can't quit by clicking menu option for some reason)

    PlayerConfig:={}

    PlayerConfig["Default"]:={minLifeRatioToDrink: 0.8, minManaRatioToDrink: 0, minManaToDrink: 0, minLifeRatioToPopGranite: 0.85, minLifeRatioToQuit: 0.35} ; disableAutoPotions:true, minLifeRatioToQuit:, minNShieldRatioToQuit: , HasZealotsOath: false, }

    PlayerConfig["Default"].FlaskConfig:=[]

    PlayerConfig["Default"].FlaskConfig[1]:={Hotkey:"{1 Down 1 UP}", OverrideFlaskDuration:0} ; ,OverrideFlaskDuration:0, instantRecoveryOnLowLife:true, } ;specify override recovery time in deciseconds, e.g. 7 seconds = 70

    PlayerConfig["Default"].FlaskConfig[2]:={Hotkey:"{2 Down 2 UP}", OverrideFlaskDuration:0}

    PlayerConfig["Default"].FlaskConfig[3]:={Hotkey:"{3 Down 3 UP}", OverrideFlaskDuration:0}

    PlayerConfig["Default"].FlaskConfig[4]:={Hotkey:"{4 Down 4 UP}"}

    PlayerConfig["Default"].FlaskConfig[5]:={Hotkey:"{5 Down 5 UP}"}

    PlayerConfig["YourHardcorePlayerName"]:={minLifeRatioToDrink: 0.7, minManaRatioToDrink: 0.35, minManaToDrink: 70, minLifeRatioToQuit: 0.4}

    PlayerConfig["YourHardcorePlayerName"].FlaskConfig:=[]

    PlayerConfig["YourHardcorePlayerName"].FlaskConfig[1]:={Hotkey:"{1 Down 1 UP}"}

    PlayerConfig["YourHardcorePlayerName"].FlaskConfig[2]:={Hotkey:"{2 Down 2 UP}"}

    PlayerConfig["YourHardcorePlayerName"].FlaskConfig[3]:={Hotkey:"{3 Down 3 UP}"}

    PlayerConfig["YourHardcorePlayerName"].FlaskConfig[4]:={Hotkey:"{4 Down 4 UP}"}

    PlayerConfig["YourHardcorePlayerName"].FlaskConfig[5]:={Hotkey:"{5 Down 5 UP}"}

    autoPotionsState:=true

    WindowQueuedFlaskEffects:=[] ;keyed by "%hwnd%%CurrPid%", hpQueueEndtime, manaQueueEndtime

    baseMgrPtr:=0x71E008 ; 0.11.3b delete for script to try to auto-scan for it in newer versions, scan takes 4-5 seconds

    basePtrAoBArray:=[0x6A,0xFF,0x68,"?","?","?","?",0x50,0x64,"?","?","?","?","?","?",0xA1,"?","?","?","?",0x81,0xEC,"?","?","?","?",0x53,0x55,0x56,0x57,0x33,0xFF,0x3B,0xC7]

    basePtrAobOffset:=0x10

    WindowBasicsCache:=[] ; keyed by "%hwnd%%CurrPid%", entries are objects with properties processHandle, moduleBase, moduleSize, baseFramePtr

    #Include AutoHotkeyMemoryLib.ahk

    Loop

    {

    AutoPotions()

    }

    GetWindowBasics(hwnd, byref mB="", byref pH="", byref mS="")

    {

    global WindowBasicsCache

    global cliexe

    WinGet, CurrPid, PID, ahk_id %hwnd%

    k="%hwnd%%CurrPid%"

    mB:=WindowBasicsCache[k].mBase

    mS:=WindowBasicsCache[k].mSize

    if mB=

    {

    WindowBasicsCache[k]:=Object()

    GetModuleInfo(cliexe, CurrPid, mB, mS)

    if (mB="" || mS="")

    {

    MsgBox, Failed to obtain moduleBase or moduleSize for PID %CurrPid%, script will now terminate

    ExitApp

    }

    WindowBasicsCache[k].mBase:=mB

    WindowBasicsCache[k].mSize:=mS

    }

    pH:=WindowBasicsCache[k].ProcessHandle

    if pH=

    {

    pH:=GetProcessHandle(CurrPid)

    if (pH="" || pH=-1)

    {

    MsgBox, Invalid process handle obtained for PID %CurrPid%, script will now terminate

    ExitApp

    }

    WindowBasicsCache[k].ProcessHandle:=pH

    }

    }

    ScanBaseMgrPtr(mBase,pH,moduleSize)

    {

    global basePtrAoBArray

    global basePtrAobOffset

    global baseMgrPtr

    aobResult:=AobScan(pH,mBase,moduleSize,basePtrAoBArray)

    if aobResult

    {

    SetFormat, IntegerFast, hex

    baseMgrPtr:=ReadMemUInt(pH,mBase+aobResult+basePtrAobOffset)-mBase

    MsgBox, PoE Base ptr found with AoB Scan baseMgrPtr = %baseMgrPtr%, save this value to script for quick startup

    SetFormat, IntegerFast, dec

    }

    else

    {

    MsgBox, baseMgrPtr not found with AoBScan, script will now terminate

    ExitApp

    }

    }

    GetFrameBase(hwnd)

    {

    global baseMgrPtr

    global WindowBasicsCache

    WinGet, CurrPid, PID, ahk_id %hwnd%

    k="%hwnd%%CurrPid%"

    fB:=WindowBasicsCache[k].fBase

    if fB=

    {

    GetWindowBasics(hwnd, mBase, pH, mSize)

    if baseMgrPtr=

    {

    ScanBaseMgrPtr(mBase, pH, mSize)

    }

    fB:=GetMultilevelPointer(pH,[mBase+baseMgrPtr,4,0x7C,0x94])

    WindowBasicsCache[k].fBase:=fB

    }

    return fB

    }

    GetUiBase(hwnd)

    {

    global baseMgrPtr

    GetWindowBasics(hwnd, mBase, pH, mSize)

    if baseMgrPtr=

    {

    ScanBaseMgrPtr(mBase, pH, mSize)

    }

    FrameBase:=GetFrameBase(hwnd)

    if (FrameBase="" || FrameBase=0)

    return

    uiBase:=GetMultilevelPointer(pH,[FrameBase+0x38,0x78,0xA4,0x50])

    return uiBase

    }

    ReadClientResolution(hwnd, ByRef w, ByRef h)

    {

    GetWindowBasics(hwnd,mBase,pH)

    if (mBase!=0 && pH && pH!=-1)

    {

    FrameBase:=GetFrameBase(hwnd)

    w:=ReadMemUInt(pH,FrameBase+0x1340)

    h:=ReadMemUInt(pH,FrameBase+0x1344)

    return true

    }

    }

    ReadPlayerStats(hwnd, byRef PlayerStats)

    {

    GetWindowBasics(hwnd, mBase, pH)

    fBase:=GetFrameBase(hwnd)

    PlayerBase:=GetMultilevelPointer(pH,[fBase+0xb4,0x59C])

    PlayerMain:=ReadMemUInt(pH,PlayerBase+4)

    PlayerStatsOffset:=ReadMemUInt(pH,PlayerMain+0xC)

    PlayerStats.MaxHP:=ReadMemUInt(pH,PlayerStatsOffset+0x50)

    PlayerStats.CurrHP:=ReadMemUInt(pH,PlayerStatsOffset+0x54)

    PlayerStats.ReservedHPFlat:=ReadMemUInt(pH,PlayerStatsOffset+0x5C)

    PlayerStats.ReservedHPPercent:=ReadMemUInt(pH,PlayerStatsOffset+0x60)

    PlayerStats.MaxMana:=ReadMemUInt(pH,PlayerStatsOffset+0x74)

    PlayerStats.ReservedManaFlat:=ReadMemUInt(pH,PlayerStatsOffset+0x80)

    PlayerStats.ReservedManaPercent:=ReadMemUInt(pH,PlayerStatsOffset+0x84)

    PlayerStats.CurrMana:=ReadMemUInt(pH,PlayerStatsOffset+0x78)

    PlayerStats.MaxNShield:=ReadMemUInt(pH,PlayerStatsOffset+0x98)

    PlayerStats.CurrNShield:=ReadMemUInt(pH,PlayerStatsOffset+0x9C)

    if (ReadMemUInt(pH, ReadMemUInt(pH,PlayerMain+0x14)+0x24)

    PlayerStats.Name:=ReadMemStr(pH, ReadMemUint(pH,PlayerMain+0x14)+0x10,100,"UTF-16") ;immediate name in component

    else

    PlayerStats.Name:=ReadMemStr(pH, GetMultilevelPointer(pH,[PlayerMain+0x14,0x10]),100,"UTF-16") ; otherwise pointer to name is stored

    }

    ReadFlasksData(hwnd, byRef FlasksData)

    {

    GetWindowBasics(hwnd, mBase, pH)

    UiBase:=GetUiBase(hwnd)

    if (!UiBase) ;not InGame

    return

    FlaskInvBase:=GetMultilevelPointer(pH,[uiBase+0x8d0,0x8e8,0x28])

    Loop, 5

    {

    currFlaskPtr:=ReadMemUInt(pH,FlaskInvBase+(A_Index-1)*4)

    if (currFlaskPtr!=0) ; there's a flask in said slot

    {

    FlasksData[A_Index]:={}

    FlaskChargesPtr:=GetMultilevelPointer(ph,[currFlaskPtr,4,0x1C,4,4,0xC])

    FlasksData[A_Index].ChargesCurrent:=ReadMemUInt(pH,FlaskChargesPtr+0xC)

    FlasksData[A_Index].ChargesPerUse:=ReadMemUInt(pH,ReadMemUInt(pH,FlaskChargesPtr+8)+0xC)

    if (FlasksData[A_Index].ChargesCurrent

    continue

    FlaskMetadataPtr:=GetMultilevelPointer(ph,[currFlaskPtr,0,8])

    FlaskMetadataStr:=ReadMemStr(ph,FlaskMetadataPtr,70,"UTF-16")

    FlaskTypeStr:=SubStr(FlaskMetadataStr,23)

    FlasksData[A_Index].type:=FlaskTypeStr

    FlaskLocalstatsPtr:=GetMultilevelPointer(ph,[currFlaskPtr,4,0x18,0x20,0xC])

    if InStr(FlaskTypeStr, "Life")

    {

    FlasksData[A_Index].HPRegAmount:=ReadMemUInt(pH,FlaskLocalstatsPtr+4)

    FlasksData[A_Index].EffectDuration:=ReadMemUInt(pH,FlaskLocalstatsPtr+0xC)

    }

    if InStr(FlaskTypeStr, "Mana")

    {

    FlasksData[A_Index].ManaRegAmount:=ReadMemUInt(pH,FlaskLocalstatsPtr+4)

    FlasksData[A_Index].EffectDuration:=ReadMemUInt(pH,FlaskLocalstatsPtr+0xC)

    }

    if InStr(FlaskTypeStr, "Hybrid")

    {

    FlasksData[A_Index].HPRegAmount:=ReadMemUInt(pH,FlaskLocalstatsPtr+4)

    FlasksData[A_Index].ManaRegAmount:=ReadMemUInt(pH,FlaskLocalstatsPtr+0xC)

    FlasksData[A_Index].EffectDuration:=ReadMemUInt(pH,FlaskLocalstatsPtr+0x14)

    }

    if InStr(FlaskTypeStr, "FlaskUtility")

    {

    FlasksData[A_Index].EffectDuration:=ReadMemUInt(pH,FlaskLocalstatsPtr+0x4)

    }

    }

    }

    }

    IsInGame(hwnd)

    {

    if (hwnd=0 || hwnd="")

    return false

    GetWindowBasics(hwnd,mBase,pH)

    if (mBase="" || mBase=0 || pH="" || pH=-1)

    return false

    fBase:=GetFrameBase(hwnd)

    if (fBase="" || fBase=0)

    return false

    localConnection:=ReadMemUInt(pH,fBase+0xb8)

    if (localConnection=0 || localConnection="")

    return false

    else

    return true

    }

    SetGameStateMenu(hwnd)

    {

    if (hwnd=0 || hwnd="")

    return false

    GetWindowBasics(hwnd,mBase,pH)

    if (mBase="" || mBase=0 || pH="" || pH=-1)

    return false

    fBase:=GetFrameBase(hwnd)

    if (fBase="" || fBase=0)

    return false

    localConnection:=ReadMemUInt(pH,fBase+0xb8)

    if (localConnection!="" && localConnection!=0)

    {

    WriteMemUInt(pH,localConnection+0x1d78,1)

    }

    }

    ReadCursorScreenPosition(hwnd,ByRef cX, ByRef cY)

    {

    GetWindowBasics(hwnd,mBase,pH)

    if (mBase!=0 && pH && pH!=-1)

    {

    FrameBase:=GetFrameBase(hwnd)

    cX:=ReadMemSInt(pH,FrameBase+0x155c)

    cY:=ReadMemSInt(pH,FrameBase+0x1560)

    return true

    }

    }

    ScreenToClient(hwnd, ByRef x, ByRef y)

    {

    VarSetCapacity(pt, 8)

    NumPut(x, pt, 0)

    NumPut(y, pt, 4)

    DllCall("ScreenToClient", "uint", hwnd, "uint", &pt)

    x := NumGet(pt, 0, "int")

    y := NumGet(pt, 4, "int")

    VarSetCapacity(pt, 0)

    }

    GetClientCoords(byRef mx, byRef my)

    {

    hwnd:=WinActive("A")

    CoordMode, Mouse, Screen

    MouseGetPos, mx, my

    ScreenToClient(hwnd,mx,my) ;get mouse pos relative to window client rect

    }

    GetFractionalCoords(ByRef fX, ByRef fY)

    {

    hwnd:=WinActive("A")

    if (!IsInGame(hwnd))

    GetClientCoords(mx,my)

    else

    ReadCursorScreenPosition(hwnd,mx,my)

    ReadClientResolution(hwnd,w,h)

    fX:=mx/w

    fY:=my/h

    }

    GetClientCoordsFromFractional(hwnd, fX,fY, ByRef cX, ByRef cY)

    {

    ReadClientResolution(hwnd,w,h)

    cX:=fX*w

    cY:=fY*h

    }

    QuitToLoginScreen(hwnd)

    {

    if (!IsInGame(hwnd))

    {

    return

    }

    SetGameStateMenu(hwnd)

    }

    GetMaxChargesFlaskOfType(ByRef FlasksData,TypeStr)

    {

    currMaxCharges:=0

    Loop, 5

    if (InStr(FlasksData[A_Index].type,TypeStr))

    {

    if FlasksData[A_Index].ChargesCurrent>currMaxCharges

    {

    currMaxI:=A_Index

    currMaxCharges:=FlasksData[A_Index].ChargesCurrent

    }

    }

    return currMaxI

    }

    AutoPotions()

    {

    global autoPotionsWatchdogPeriod

    global lagCompensation

    global PlayerConfig

    global WindowQueuedFlaskEffects

    global cliname

    global cliexe

    global trayNotifications

    global autoQuitMode

    if (autoPotionsState!=true)

    return

    WinGet, WinID, List, %cliname%

    Loop, %WinID%

    {

    WinGet, ProcModuleName, ProcessName, % "ahk_id" WinID%A_Index%

    If(ProcModuleName!=cliexe) ; got a window with title "Path of Exile" but exe is not Client.exe, perhaps we have browser window open with PoE site, ignore it

    continue

    if (!IsInGame(WinID%A_Index%)) ;not ingame

    continue

    if (WinID%A_Index%=WinActive("A"))

    ThisID:=WinActive("A")

    PlayerStats:={}

    ReadPlayerStats(WinID%A_Index%, PlayerStats)

    if (PlayerStats.MaxHP

    continue

    if (PlayerConfig.HasKey(PlayerStats.Name))

    CurrentConfig:=PlayerConfig[PlayerStats.Name]

    else

    CurrentConfig:=PlayerConfig["Default"]

    if PlayerStats.MaxNShield>0

    {

    currNShieldRatio:=PlayerStats.CurrNShield/PlayerStats.MaxNShield

    }

    if (PlayerStats.MaxHP>1)

    {

    currLifeRatio:=PlayerStats.CurrHP/(PlayerStats.MaxHP-PlayerStats.ReservedHPFlat-PlayerStats.MaxHP*PlayerStats.ReservedHPPercent/100)

    }

    if CurrentConfig.HasZealotsOath

    {

    currLifeRatio:=currNShieldRatio

    }

    if (PlayerStats.MaxMana>0)

    {

    currManaRatio:=PlayerStats.CurrMana/(PlayerStats.MaxMana-PlayerStats.ReservedManaFlat-PlayerStats.MaxMana*PlayerStats.ReservedManaPercent/100)

    }

    if (currLifeRatio

    {

    if (autoQuitMode=0)

    {

    TrayTip, PoE autoPotions AutoQuit by closing window, specified min life reached, %A_Space% , 2

    WinKill, % "ahk_id" WinID%A_Index%

    }

    else if (autoQuitMode=1)

    {

    QuitToLoginScreen(WinID%A_Index%)

    }

    autoQuit:=1

    continue

    }

    if (CurrentConfig.disableAutoPotions)

    continue

    FlasksData:=[]

    ReadFlasksData(WinID%A_Index%,FlasksData)

    WinGet, CurrPID, PID, % "ahk_id" WinID%A_Index%

    hwnd:=WinID%A_Index%

    k="%hwnd%%CurrPid%"

    if (!WindowQueuedFlaskEffects.HasKey(k))

    {

    WindowQueuedFlaskEffects[k]:={}

    }

    if (currLifeRatio

    if ((!WindowQueuedFlaskEffects[k].HasKey("graniteQueueEndtime")) || (A_TickCount>=(WindowQueuedFlaskEffects[k].graniteQueueEndtime-lagCompensation)))

    {

    flaskNum:=GetMaxChargesFlaskOfType(FlasksData,"FlaskUtility5") ; granite flask

    if (flaskNum!="")

    {

    if CurrentConfig.FlaskConfig[flaskNum].HasKey("OverrideFlaskDuration")

    EffectDuration:=CurrentConfig.FlaskConfig[flaskNum].OverrideFlaskDuration

    else

    EffectDuration:=FlasksData[flaskNum].EffectDuration

    WindowQueuedFlaskEffects[k].graniteQueueEndtime:=A_TickCount+EffectDuration*100

    if (trayNotifications)

    {

    pname:=PlayerStats.Name

    TrayTip, PoE autoPotions popping Granite flask %flaskNum% on %pname%, %A_Space% , 2

    }

    hKey:=CurrentConfig.FlaskConfig[flaskNum].Hotkey

    ControlSend,,%hkey%, % "ahk_id" hwnd

    break

    }

    }

    if (currLifeRatio=1)

    WindowQueuedFlaskEffects[k].hpQueueEndtime:=A_TickCount

    if (currManaRatio=1)

    WindowQueuedFlaskEffects[k].ManaQueueEndtime:=A_TickCount

    if (currLifeRatio

    if ((!WindowQueuedFlaskEffects[k].HasKey("hpQueueEndtime")) || (A_TickCount>=(WindowQueuedFlaskEffects[k].hpQueueEndtime-lagCompensation)))

    {

    tflaskNum1:=GetMaxChargesFlaskOfType(FlasksData,"FlaskLife")

    tflaskNum2:=GetMaxChargesFlaskOfType(FlasksData,"FlaskHybrid")

    if ((tflaskNum1!=) && (tflaskNum2!=))

    flaskNum:=(FlasksData[tflaskNum1].ChargesCurrent>FlasksData[tflaskNum2].ChargesCurrent) ? tflaskNum1 : tflaskNum2

    else

    {

    if (tflaskNum1!="")

    flaskNum:=tflaskNum1

    if (tflaskNum2!="")

    flaskNum:=tflaskNum2

    }

    if (flaskNum!="")

    {

    if CurrentConfig.FlaskConfig[flaskNum].HasKey("OverrideFlaskDuration")

    EffectDuration:=CurrentConfig.FlaskConfig[flaskNum].OverrideFlaskDuration

    else

    EffectDuration:=FlasksData[flaskNum].EffectDuration

    if ((CurrentConfig.FlaskConfig[flaskNum].instantRecoveryOnLowLife) && ((PlayerStats.CurrHP/PlayerStats.MaxHP)

    EffectDuration:=lagCompensation

    WindowQueuedFlaskEffects[k].hpQueueEndtime:=A_TickCount+EffectDuration*100

    if (FlasksData[flaskNum].HasKey("ManaRegAmount")) ; hybrid flask

    WindowQueuedFlaskEffects[k].ManaQueueEndtime:=A_TickCount+EffectDuration*100

    if (trayNotifications)

    {

    pname:=PlayerStats.Name

    TrayTip, PoE autoPotions sipping HP flask %flaskNum% on %pname%, %A_Space% , 2

    }

    hKey:=CurrentConfig.FlaskConfig[flaskNum].Hotkey

    ControlSend,,%hkey%, % "ahk_id" hwnd

    break

    }

    }

    if (PlayerStats.MaxMana>0 && (currManaRatio

    if ((!WindowQueuedFlaskEffects[k].HasKey("ManaQueueEndtime")) || (A_TickCount>=(WindowQueuedFlaskEffects[k].ManaQueueEndtime-lagCompensation)))

    {

    tflaskNum1:=GetMaxChargesFlaskOfType(FlasksData,"FlaskMana")

    tflaskNum2:=GetMaxChargesFlaskOfType(FlasksData,"FlaskHybrid")

    if ((tflaskNum1!=) && (tflaskNum2!=))

    flaskNum:=(FlasksData[tflaskNum1].ChargesCurrent>FlasksData[tflaskNum2].ChargesCurrent) ? tflaskNum1 : tflaskNum2

    else

    {

    if (tflaskNum1!="")

    flaskNum:=tflaskNum1

    if (tflaskNum2!="")

    flaskNum:=tflaskNum2

    }

    if (flaskNum!="")

    {

    if CurrentConfig.FlaskConfig[flaskNum].HasKey("OverrideFlaskDuration")

    {

    EffectDuration:=CurrentConfig.FlaskConfig[flaskNum].OverrideFlaskDuration

    }

    else

    EffectDuration:=FlasksData[flaskNum].EffectDuration

    if ((CurrentConfig.FlaskConfig[flaskNum].instantRecoveryOnLowLife) && ((PlayerStats.CurrHP/PlayerStats.MaxHP)

    EffectDuration:=lagCompensation

    WindowQueuedFlaskEffects[k].ManaQueueEndtime:=A_TickCount+EffectDuration*100

    if (FlasksData[flaskNum].HasKey("HPRegAmount")) ; hybrid flask

    WindowQueuedFlaskEffects[k].hpQueueEndtime:=A_TickCount+EffectDuration*100

    hKey:=CurrentConfig.FlaskConfig[flaskNum].Hotkey

    if (trayNotifications)

    {

    pname:=PlayerStats.Name

    TrayTip, PoE autoPotions sipping mana flask %flaskNum% on %pname%, %A_Space% , 2

    }

    ControlSend,,%hkey%, % "ahk_id" hwnd

    break

    }

    }

    }

    if ((autoQuit=1) && (ThisID!="") && (ThisID!=WinActive("A")))

    WinActivate, % "ahk_id" ThisID

    Sleep, %autoPotionsWatchdogPeriod%

    }

    F1::

    global autoPotionsState

    global trayNotifications

    autoPotionsState:=not autoPotionsState

    if (trayNotifications)

    {

    if (autoPotionsState=true)

    TrayTip, PoE autoPotions is on, %A_Space% , 2

    else

    TrayTip, PoE autoPotions is off, %A_Space% , 2

    }

    return

    F2::

    GetClientCoords(mx,my)

    GetFractionalCoords(fx,fy)

    msgbox, mx=%mx% my=%my% fx=%fx% fy=%fy%

    return

    F4::

    QuitToLoginScreen(WinActive("A"))

    return

    KEY BINDS

    ·Auras on QWERT

    ·Leap Slam on left click with a 200 max range

    ·Move Only on right click with 600 max range

    I found this to be the optimal setup

    IN SUMMARY

    To run docks, you must have capped fire/cold. 81% is what you should aim for with elemental adaptation and a level 20 purity

    I focused part of my build on run speed. I think its worth sacrificing a little bit of quantity for it because there's a lot of running in docks.

    The flask setup is extremely important. With my PoE_AutoFlask script and 3 seething potions w/ 2 granites, I never even log out with 3.1k hp.

    • Upvote 1
×
×
  • Create New...