Автоматизация рутины в Path of Exile

Теперь, когда вы познакомились с автохоткеем, вернёмся обратно к Path of Exile. Поиграв в ПоЕ недельку-другую, я стал замечать, что очень многие действия повторяются. А всё, что повторяется, нужно автоматизировать!

В первую очередь, это торговля. Как торгует простой человек?

/trade 1
$WTS [item]
/trade 2
$WTS [item]
/trade 3
$WTS [item]
...

И так на 10-15 каналов. Утомительно. И я написал простенький скрипт для торговли в пое:

F10::
    Gosub, Timer_Spam
    return

Timer_Spam:
    num := 1
    Loop, 15
    {
        SendInput {Enter}/trade %num%{Enter}
        Sleep 1500
        SendInput {Enter}{Up}{Up}{Enter}
        Sleep 1500
        num := num + 1
    }
    SendInput {Enter}/trade 0{Enter}
    return

Теперь достаточно было отправить в любой трейд чат своё сообщение $WTB Orb of Regret = 1 chaos each, нажать F10 и немного подождать. На каждые 2-3 сообщения lol good luck buying it this cheap retard!!!, я получал инвайт my HO, трейд.

Торговый скрипт очень сильно повысил моё качество жизни, теперь торговый канал стал удобным местом, чтобы быстро получить что-либо дёшево. Можно попытаться быстренько что-либо продать, но продавать нужно тоже дёшево. Всяко лучше, чем отдавать вендору.

Я даже написал скрипт, который непрерывно спамит трейд чаты, но он у меня как-то не прижился. Я был не настолько хардкорен.

^!F10::
    toggle := !toggle
    if (toggle)
    {
        SetTimer, Timer_Spam, 60000
        Menu, Tray, Icon, shell32.dll, 44
        Gosub, Timer_Spam
    }
    else
    {
        SetTImer, Timer_Spam, Off
        Menu, Tray, Icon, *
    }
    return

Кроме того, я "забиндил" переход в хайдаут и подсчёт оставшихся монстров на карте (очень удобно это делать на Tab)

F3::
    SendInput {Enter}/hideout{Enter}
    return

F5::
~Tab::
    SendInput {Enter}/remaining{Enter}
    return

Начав программировать, сложно остановиться. Следующей жертвой были выбраны фласки. Я играл CI суммонером с тремя тотемами от Soul Mantle:

Каждый раз, когда я использовал новый тотем, старый умирал и мне было необходимо снимать с себя проклятия, которые стекались и были очень страшными. Иммунитет к проклятьям я брал от Quicksilver фласок, но каждый раз нажимать их вручную не только неэффективно, но и скучно. Поэтому был быстренько написан следующий скрипт:

~RButton::
    if (!curseImmune)
    {
        DoCurse()
    }
    if (!armorUp)
    {
        DoArmor()
    }
    return

ExpireCurseImmune:
    if GetKeyState("RButton")
        DoCurse()
    else
        curseImmune = 0
    return

ExpireArmorUp:
    if GetKeyState("RButton")
        DoArmor()
    else
        armorUp = 0
    return

GetCurrentArmorButton(currentArmor)
{
    if(currentArmor==1)
        return 2
    if(currentArmor==2)
        return 3
    if(currentArmor==3)
        return 1
    return 1
}

GetCurrentCurseButton(currentArmor)
{
    if(currentArmor==4)
        return 5
    if(currentArmor==5)
        return 4
    return 4
}

DoCurse()
{
        global curseImmune
        global currentCurse
        curseImmune = 1
        currentCurse := GetCurrentCurseButton(currentCurse)
        SendInput %currentCurse%
        SetTimer, ExpireCurseImmune, -6720
}

DoArmor()
{
        global armorUp
        global currentArmor
        armorUp = 1
        currentArmor := GetCurrentArmorButton(currentArmor)
        SendInput %currentArmor%
        SetTimer, ExpireArmorUp, -4800
}

Таким вот нехитрым способом, мой герой всегда поддерживал нажатыми фласки на броню и квиксильвер фласки. Только когда я нажимал или держал правую кнопку мыши (там у меня каст тотема).

Работает идеально, очень рекомендую. Но играть становится скучно. Левой рукой я поддерживал голову, а правой нажимал две кнопочки: левую чтобы бегать, и правую чтобы делать всё остальное. Иногда лутал так же левой. Скука.

Побегав так пару дней, я понял, что хочу освободить себя и от нажатия кнопок мыши. Об этом в следующей статье.