Created: 05/18/2026
Last Updated: about 16 hours ago
Description from the author: This script fully automates Alchemy training from 50 up to your chosen target (maxAlchemy), using one resource container you select at startup.
On every loop, it does the following:
checks if you already reached your target skill (maxAlchemy) and stops automatically;
keeps Alchemy set to up;
restocks core reagents into your backpack when low (spiders silk, garlic, ginseng, mandrake root, bloodmoss, sulfurous ash, nightshade);
restocks empty bottles by ID (0x0F0E or 3854) in batches;
ensures a mortar and pestle is always in your backpack;
if the mortar breaks/runs out, it grabs a new one from the source container, closes/reopens the alchemy gump, and resets category tracking;
opens the alchemy gump only when needed;
auto-selects what potion to craft based on your current skill range:
50–70: Lesser Magic Resist
70–90: Greater Cure
90–100: Greater Explosion
100–115: Greater Magic Resist
115–120: Lethal Poison
optimizes gump navigation by only reselecting potion category when the potion type changes (LastPotionCode);
for Lesser Magic Resist, uses the hotkey to drink it (to recycle bottle flow);
after crafting, it attempts to move finished potions back to the same source container in stacks of 20, based on the current potion color/type.
In short, this macro handles the entire cycle: resource restock, smart crafting flow by skill bracket, mortar recovery, bottle management, and auto-stashing crafted potions with minimal manual input.
clearsysmsg
@setvar! maxAlchemy 120
if not varexist "LastPotionCode"
@setvar! LastPotionCode 0
endif
if not varexist "SourceContainer"
overhead "ABRA O MACRO 'setvar SourceContainer', CLIQUE NA BAG E RODE ESTE SCRIPT DEPOIS" 38
wait 5000
stop
endif
if skill "Alchemy" >= maxAlchemy
overhead "Target Alchemy Level Reached!" 88
setskill "Alchemy" lock
wait 2000
stop
endif
setskill "Alchemy" up
## ========================================================
## MORTAR AND PESTLE MANAGER COM RESET GARANTIDO DO CODE
## ========================================================
if not varexist "CurrentMortar"
@setvar! CurrentMortar 0
endif
## Verifica se o mortar atual ainda existe
if CurrentMortar != 0
if not find CurrentMortar backpack
overhead "Mortar sumiu/quebrou!" 38
@setvar! CurrentMortar 0
@setvar! LastPotionCode 0
if gumpexists 949095101
gumpclose 949095101
wait 200
endif
endif
endif
## Se nao tem mortar, procura um novo
if CurrentMortar = 0
## primeiro na backpack
if findtype "mortar and pestle" backpack as newmortar
@setvar! CurrentMortar newmortar
@setvar! LastPotionCode 0
dclick newmortar
waitforgump 949095101 5000
wait 200
else
## depois na SourceContainer
if findtype "mortar and pestle" SourceContainer as newmortar
while queued
//donothing
endwhile
lift newmortar 1
wait 200
drop backpack
wait 200
if findtype "mortar and pestle" backpack as newmortar2
@setvar! CurrentMortar newmortar2
@setvar! LastPotionCode 0
dclick newmortar2
waitforgump 949095101 5000
wait 200
else
overhead "Sem mortar na bag!" 38
wait 1000
loop
endif
else
overhead "Sem mortar nem na SourceContainer!" 38
wait 1000
loop
endif
endif
endif
## Garante que o gump esteja aberto
if not gumpexists 949095101
if find CurrentMortar backpack
@setvar! LastPotionCode 0
dclick CurrentMortar
waitforgump 949095101 5000
wait 200
else
overhead "Mortar sumiu!" 38
@setvar! CurrentMortar 0
@setvar! LastPotionCode 0
wait 500
loop
endif
endif
## =============================
## RESTOCK INTELIGENTE
## =============================
## 50-70: Lesser Magic Resist -> Spider's Silk (3981)
if skill "Alchemy" < 70
@setvar! needRegID 3981
@setvar! needRegName "Spiders Silk"
@setvar! minReg 6
@setvar! potionCategory 105
@setvar! potionBtn 200
@setvar! potionCode 1
@setvar! potionColor "Black Potion"
## 70-90: Greater Heal -> Ginseng (3973)
elseif skill "Alchemy" >= 70 and skill "Alchemy" < 90
@setvar! needRegID 3973
@setvar! needRegName "Ginseng"
@setvar! minReg 6
@setvar! potionCategory 100
@setvar! potionBtn 204
@setvar! potionCode 2
@setvar! potionColor "Yellow Potion"
## 90-100: Greater Explosion -> Sulfurous Ash (3980)
elseif skill "Alchemy" >= 90 and skill "Alchemy" < 100
@setvar! needRegID 3980
@setvar! needRegName "Sulfurous Ash"
@setvar! minReg 9
@setvar! potionCategory 107
@setvar! potionBtn 204
@setvar! potionCode 3
@setvar! potionColor "Purple Potion"
## 100-115: Greater Magic Resist -> Spider's Silk (3981)
elseif skill "Alchemy" >= 100 and skill "Alchemy" < 115
@setvar! needRegID 3981
@setvar! needRegName "Spiders Silk"
@setvar! minReg 9
@setvar! potionCategory 105
@setvar! potionBtn 204
@setvar! potionCode 4
@setvar! potionColor "Black Potion"
## 115-120: Lethal Poison -> Nightshade (3976)
else
@setvar! needRegID 3976
@setvar! needRegName "Nightshade"
@setvar! minReg 10
@setvar! potionCategory 106
@setvar! potionBtn 208
@setvar! potionCode 5
@setvar! potionColor "Green Potion"
endif
## -----------------------------
## RESTOCK DO REAGENTE
## -----------------------------
if counttype needRegID backpack < minReg
if findtype needRegID SourceContainer as reg
while queued
//donothing
endwhile
lift reg 1000
wait 150
drop backpack
wait 150
else
overhead "Falta " + needRegName + " na SourceContainer!" 38
wait 1000
loop
endif
endif
## -----------------------------
## RESTOCK DE BOTTLES
## -----------------------------
if counttype 0x0F0E backpack < minReg and counttype 3854 backpack < minReg
if findtype 0x0F0E SourceContainer as bottle1
while queued
//donothing
endwhile
lift bottle1 200
wait 150
drop backpack
wait 150
elseif findtype 3854 SourceContainer as bottle2
while queued
//donothing
endwhile
lift bottle2 200
wait 150
drop backpack
wait 150
else
overhead "Sem bottles na SourceContainer!" 38
wait 1000
loop
endif
endif
## -----------------------------
## CRAFT
## -----------------------------
if counttype needRegID backpack < minReg
overhead "Need more " + needRegName + "!" 34
wait 500
loop
endif
if counttype 0x0F0E backpack < 1 and counttype 3854 backpack < 1
overhead "Need more Empty Bottles!" 34
wait 800
loop
endif
## Seleciona categoria (SEMPRE reseta se mudou)
if LastPotionCode != potionCode
gumpresponse potionCategory 949095101
waitforgump 949095101 5000
@setvar! LastPotionCode potionCode
wait 200
endif
## Craft um
if gumpexists 949095101
gumpresponse potionBtn 949095101
waitforgump 949095101 5000
wait 550
## Verifica se mortar quebrou
if CurrentMortar != 0
if not find CurrentMortar backpack
overhead "Mortar quebrou!" 38
@setvar! CurrentMortar 0
@setvar! LastPotionCode 0
endif
endif
else
overhead "Gump fechou!" 38
@setvar! CurrentMortar 0
@setvar! LastPotionCode 0
wait 500
loop
endif
## -----------------------------
## AUTO-DEPOSIT TODAS AS POCOES
## -----------------------------
## Deposita Black Potion
while counttype "Black Potion" backpack >= 20
if findtype "Black Potion" backpack as madepot
while queued
//donothing
endwhile
lift madepot 20
wait 150
if findtype "Black Potion" SourceContainer as stashpot
drop stashpot
else
drop SourceContainer
endif
wait 150
else
break
endif
endwhile
## Deposita Yellow Potion
while counttype "Yellow Potion" backpack >= 20
if findtype "Yellow Potion" backpack as madepot
while queued
//donothing
endwhile
lift madepot 20
wait 150
if findtype "Yellow Potion" SourceContainer as stashpot
drop stashpot
else
drop SourceContainer
endif
wait 150
else
break
endif
endwhile
## Deposita Orange Potion
while counttype "Orange Potion" backpack >= 20
if findtype "Orange Potion" backpack as madepot
while queued
//donothing
endwhile
lift madepot 20
wait 150
if findtype "Orange Potion" SourceContainer as stashpot
drop stashpot
else
drop SourceContainer
endif
wait 150
else
break
endif
endwhile
## Deposita White Potion
while counttype "White Potion" backpack >= 20
if findtype "White Potion" backpack as madepot
while queued
//donothing
endwhile
lift madepot 20
wait 150
if findtype "White Potion" SourceContainer as stashpot
drop stashpot
else
drop SourceContainer
endif
wait 150
else
break
endif
endwhile
## Deposita Blue Potion
while counttype "Blue Potion" backpack >= 20
if findtype "Blue Potion" backpack as madepot
while queued
//donothing
endwhile
lift madepot 20
wait 150
if findtype "Blue Potion" SourceContainer as stashpot
drop stashpot
else
drop SourceContainer
endif
wait 150
else
break
endif
endwhile
## Deposita Purple Potion
while counttype "Purple Potion" backpack >= 20
if findtype "Purple Potion" backpack as madepot
while queued
//donothing
endwhile
lift madepot 20
wait 150
if findtype "Purple Potion" SourceContainer as stashpot
drop stashpot
else
drop SourceContainer
endif
wait 150
else
break
endif
endwhile
## Deposita Green Potion
while counttype "Green Potion" backpack >= 20
if findtype "Green Potion" backpack as madepot
while queued
//donothing
endwhile
lift madepot 20
wait 150
if findtype "Green Potion" SourceContainer as stashpot
drop stashpot
else
drop SourceContainer
endif
wait 150
else
break
endif
endwhile
wait 500
loop