Aloha!
Last night I woke up, and believe it or not, I was actually dreaming about scripting. So as I attempted to go back to sleep, I had this code running through my head, and really wanted to get it down. So I came downstairs at 3:45 am, and wrote out an Alchemy Assistant. A Potion Crafter I suppose you can call it.
The menu I am quite proud of, its better then any I've done in the past, and am using your (TM) Persistant Variable Subs in it as well. I attempted to test this out this morning (4 hours of writing), but it does not pull any reagents out of the resource chest.
I went over it a few times, but do not see the error, and I was wondering if you, or anybody could give it a eye-over, and if you could run that nice little Syntax Error finder thing, to bring up the error's in code that I tend to have.
I must say, this is the best script I've written to date, and I'm pretty happy with how the flow works. Give me some harsh feedback please, its the way I learn best.
set %alch_tool RQF
set %alch_tools_needed 5
set %tink_tool GTL_KTL_JTL
set %tink_tools_needed 2
set %bottle WUF
set %ingot_type ENK
set %board TLK
set %size1 130
set %size2 100
set %pot_to_make 100
set %amount_to_make 200
set %resources AVF_WUF_UUF_ZUF_XWS_YWS_YUF_OUF_XUF_TUF_YZF_NUF_KZF_KUF_RZF_MZF_JUF_WZF_SZF_JZF_ENK_TZF_YZF
set %catposx 30
set %selposx 230
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; XXXXXXXXXXXXXXX MENU DESIGN XXXXXXXXXXXXXXX
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
menu window title menu test
menu window color silver
menu window size 290 %size1
menu font bgcolor gray
menu shape potionbg 5 5 280 65 3 7 1 Black 7 Gray
menu font align right
menu text title 130 12 Resource Container:
menu text title 130 42 Potion Container:
menu font bgcolor silver
menu font align left
menu button target_resource_bag 230 10 30 24 Set
menu button target_dump_bag 230 40 30 24 Set
menu edit resource_bag 135 10 85 %resource_bag
menu edit dump_bag 135 40 85 %dump_bag
menu button start 170 75 55 25 Start
menu button quit 230 75 55 25 Quit
menu font size 9
menu font color marron
menu text titles 20 80 Select Type
menu text titles 115 80 Amount
menu button add_more 175 105 20 20 +
menu button remove 200 105 20 20 -
menu font size 8
menu font color black
menu combo create %pot_to_make 5 %size2 100
menu combo add %pot_to_make Total Refreshment
menu combo add %pot_to_make Greater Agility
menu combo add %pot_to_make Night Sight
menu combo add %pot_to_make Greater Heal
menu combo add %pot_to_make Greater Strength
menu combo add %pot_to_make Poison
menu combo add %pot_to_make Greater Poison
menu combo add %pot_to_make Deadly Poison
menu combo add %pot_to_make Greater Cure
menu combo add %pot_to_make Greater Explosion
menu combo add %pot_to_make Greater Conflagration
menu combo add %pot_to_make Greater Confusion Blast
menu combo add %pot_to_make Invisibility
menu combo add %pot_to_make Parasitic
menu combo add %pot_to_make Darkglow
menu edit %amount_to_make 110 %size2 50 0
menu show
gosub TM_GetPersistantVariable resource_bag
menu set resource_bag #result
menu get resource_bag
set %ResourceChest #menures
set #lobjectid %ResourceChest
event macro 17 0
wait 10
contpos 610 440
wait 10
gosub TM_GetPersistantVariable dump_bag
menu set dump_bag #result
menu get dump_bag
menuloop:
if #menuButton = target_resource_bag
{
set #targCurs 1
set_resource_bag:
if #targCurs = 1
goto set_resource_bag
Set %resource_bag #ltargetid
Set #lobjectid %resource_bag
Event Macro 17 0
wait 10
contpos 610 440
wait 10
menu font size 10
menu set resource_bag %resource_bag
gosub TM_SetPersistantVariable resource_bag %resource_bag
set #menubutton N/A
}
if #menuButton = target_dump_bag
{
set #targCurs 1
set_dump_bag:
if #targCurs = 1
goto set_dump_bag
Set %dump_bag #ltargetid
menu font size 10
menu set dump_bag %dump_bag
gosub TM_SetPersistantVariable dump_bag %dump_bag
set #menubutton N/A
}
if #menubutton = add_more
{
gosub add_more
set #menubutton N/A
}
if #menubutton = remove
{
gosub remove
set #menubutton N/A
}
if #menubutton = Start
{
set #menubutton N/A
set %size2 30
set %pot_to_make 100
set %amount_to_make 200
gosub loop
}
if #menubutton = Quit
{
set #menubutton N/A
display ok Thank you for using my script.$
+$
+Script is Halting$
menu hide
halt
}
goto menuloop
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; XXXXXXXX SUB TO ADD ANOTHER OPTION XXXXXXXX
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
sub add_more
set %size1 ( %size1 + 25 )
set %size2 ( %size2 + 25 )
set %pot_to_make ( %pot_to_make + 1 )
set %amount_to_make ( %amount_to_make + 1 )
menu window size 290 %size1
menu font size 8
menu font color black
menu combo create %pot_to_make 5 %size2 100
menu combo add %pot_to_make Total Refreshment
menu combo add %pot_to_make Greater Agility
menu combo add %pot_to_make Night Sight
menu combo add %pot_to_make Greater Heal
menu combo add %pot_to_make Greater Strength
menu combo add %pot_to_make Poison
menu combo add %pot_to_make Greater Poison
menu combo add %pot_to_make Deadly Poison
menu combo add %pot_to_make Greater Cure
menu combo add %pot_to_make Greater Explosion
menu combo add %pot_to_make Greater Conflagration
menu combo add %pot_to_make Greater Confusion Blast
menu combo add %pot_to_make Invisibility
menu combo add %pot_to_make Parasitic
menu combo add %pot_to_make Darkglow
menu edit %amount_to_make 110 %size2 50 0
return
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; XXXXXXXXX SUB TO REMOVE AN OPTION XXXXXXXXX
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
sub remove
if %pot_to_make = 100
return
set %size1 ( %size1 - 25 )
set %size2 ( %size2 - 25 )
menu window size 290 %size1
menu delete %pot_to_make
menu delete %amount_to_make
set %pot_to_make ( %pot_to_make - 1 )
set %amount_to_make ( %amount_to_make - 1 )
return
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; XXXXXXXXXXX MAIN LOOP FOR SCRIPT XXXXXXXXXX
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
sub loop
crafting_loop:
gosub clear_pack
gosub check_tool %alch_tool %alch_tools_needed %catposx 110 %selposx 90
gosub check_tool %tink_tool %tink_tools_needed %catposx 110 %selposx 130
gosub potion_init
gosub grab_resources %bottle %reagent1 %reagent2
gosub craft_potion %alch_tool %alch_tools_needed %catposx %catposy %selposx %selposy
goto crafting_loop
return
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; XXXX SUB TO FIND AND RETURN RESOURCES XXXXX
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
sub clear_pack
finditem %resources C_ , #backpackid
for %i 1 #findcnt
{
finditem %resources C_ , #backpackid
exevent drag #findid #findstack
wait 10
exevent dropc %resource_bag
wait 15
}
return
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; XXXXXX SUB TO CHECK AND CRAFT TOOLS XXXXXXX
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
sub check_tool
finditem %1 C_ , #backpackid
if #findcnt >= %2
return
set %to_make ( %2 - #findcnt ) ; Sets a number of tools to make
set #lobjectid #findid
; --------------------------------
; This section looks for ingots, then pulls 100
finditem %ingot_type C_ , %resource_bag
for #findindex 1 #findcnt
{
event property #findid
if copper || shadow || bronze || agapite || gold || verite || valorite in #property
ignoreitem #findid
if ingots in #property && shadow notin #property
set %ingots #findid ; Finds only Iron Ingots
}
finditem %ingots C_ , %resource_bag
if #findcnt < 20
{
display ok You are out of ingots.$
+Please get more and resetart script.
gosub return_resources
halt
}
finditem %ingots C_ , %resource_bag
exevent drag #findid 100
wait 10
exevent dropc #backpackid
wait 15
; --------------------------------
; Makes tool required, and loops %to_make (number of tools needed) times
event macro 22 0
gosub gumpwait
set %x #contposx + %3
set %y #contposy + %4
click %x %y ; Selects Category
gosub gumpwait
for %i 1 %to_make
{
set %x #contposx + %5
set %y #contposy + %6
click %x %y ; Selects Tool
gosub gumpwait
}
gosub clear_pack
finditem %1 C_ , #backpackid
if #findcnt < %2
gosub check_tool
return
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; XXXX SETS ITEMS NEEDED FOR EACH POTION XXXX
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
sub potion_init
menu get %pot_to_make
if #menuRes = 1 ; Total Refreshment
{
set %reagent1 KUF ; Black Pearl
set %reagent2 N/A ; N/A
set %required_reagent1 5
set %required_reagent2 N/A
set %catposy 90
set %selposy 90
menu getnum %amount_to_make
if #menures = 0
{
menu delete %amount_to_make
menu font color red
menu text done 120 %size2 Done!
set %size2 ( %size2 + 25 )
set %pot_to_make ( %pot_to_make + 1 )
set %amount_to_make ( %amount_to_make + 1 )
return
}
set %amount #menures
}
if #menuRes = 2 ; Greater Agility
{
set %reagent1 JUF ; Bloodmoss
set %reagent2 N/A ; N/A
set %required_reagent1 3
set %required_reagent2 N/A
set %catposy 110
set %selposy 90
menu getnum %amount_to_make
if #menures = 0
{
menu delete %amount_to_make
menu font color red
menu text done 120 %size2 Done!
set %size2 ( %size2 + 25 )
set %pot_to_make ( %pot_to_make + 1 )
set %amount_to_make ( %amount_to_make + 1 )
return
}
set %amount #menures
}
if #menuRes = 3 ; Night Sight
{
set %reagent1 RZF ; Spider's Silk
set %reagent2 N/A ; N/A
set %required_reagent1 1
set %required_reagent2 N/A
set %catposy 130
set %selposy 70
menu getnum %amount_to_make
if #menures = 0
{
menu delete %amount_to_make
menu font color red
menu text done 120 %size2 Done!
set %size2 ( %size2 + 25 )
set %pot_to_make ( %pot_to_make + 1 )
set %amount_to_make ( %amount_to_make + 1 )
return
}
set %amount #menures
}
if #menuRes = 4 ; Greater Heal
{
set %reagent1 JZF ; Ginseng
set %reagent2 N/A ; N/A
set %required_reagent1 7
set %required_reagent2 N/A
set %catposy 150
set %selposy 110
menu getnum %amount_to_make
if #menures = 0
{
menu delete %amount_to_make
menu font color red
menu text done 120 %size2 Done!
set %size2 ( %size2 + 25 )
set %pot_to_make ( %pot_to_make + 1 )
set %amount_to_make ( %amount_to_make + 1 )
return
}
set %amount #menures
}
if #menuRes = 5 ; Greater Strength
{
set %reagent1 MZF ; Mandrake Root
set %reagent2 N/A ; N/A
set %required_reagent1 5
set %required_reagent2 N/A
set %catposy 170
set %selposy 90
menu getnum %amount_to_make
if #menures = 0
{
menu delete %amount_to_make
menu font color red
menu text done 120 %size2 Done!
set %size2 ( %size2 + 25 )
set %pot_to_make ( %pot_to_make + 1 )
set %amount_to_make ( %amount_to_make + 1 )
return
}
set %amount #menures
}
if #menuRes = 6 ; Poison
{
set %reagent1 WZF ; Nightshade
set %reagent2 N/A ; N/A
set %required_reagent1 2
set %required_reagent2 N/A
set %catposy 190
set %selposy 90
menu getnum %amount_to_make
if #menures = 0
{
menu delete %amount_to_make
menu font color red
menu text done 120 %size2 Done!
set %size2 ( %size2 + 25 )
set %pot_to_make ( %pot_to_make + 1 )
set %amount_to_make ( %amount_to_make + 1 )
return
}
set %amount #menures
}
if #menuRes = 7 ; Greater Poison
{
set %reagent1 WZF ; Nightshade
set %reagent2 N/A ; N/A
set %required_reagent1 4
set %required_reagent2 N/A
set %catposy 190
set %selposy 110
menu getnum %amount_to_make
if #menures = 0
{
menu delete %amount_to_make
menu font color red
menu text done 120 %size2 Done!
set %size2 ( %size2 + 25 )
set %pot_to_make ( %pot_to_make + 1 )
set %amount_to_make ( %amount_to_make + 1 )
return
}
set %amount #menures
}
if #menuRes = 8 ; Deadly Poison
{
set %reagent1 WZF ; Nightshade
set %reagent2 N/A ; N/A
set %required_reagent1 8
set %required_reagent2 N/A
set %catposy 190
set %selposy 130
menu getnum %amount_to_make
if #menures = 0
{
menu delete %amount_to_make
menu font color red
menu text done 120 %size2 Done!
set %size2 ( %size2 + 25 )
set %pot_to_make ( %pot_to_make + 1 )
set %amount_to_make ( %amount_to_make + 1 )
return
}
set %amount #menures
}
if #menuRes = 9 ; Greater Cure
{
set %reagent1 KZF ; Garlic
set %reagent2 N/A ; N/A
set %required_reagent1 6
set %required_reagent2 N/A
set %catposy 210
set %selposy 110
menu getnum %amount_to_make
if #menures = 0
{
menu delete %amount_to_make
menu font color red
menu text done 120 %size2 Done!
set %size2 ( %size2 + 25 )
set %pot_to_make ( %pot_to_make + 1 )
set %amount_to_make ( %amount_to_make + 1 )
return
}
set %amount #menures
}
if #menuRes = 10 ; Greater Explosion
{
set %reagent1 WZF ; Nightshade
set %reagent2 N/A ; N/A
set %required_reagent1 10
set %required_reagent2 N/A
set %catposy 230
set %selposy 110
menu getnum %amount_to_make
if #menures = 0
{
menu delete %amount_to_make
menu font color red
menu text done 120 %size2 Done!
set %size2 ( %size2 + 25 )
set %pot_to_make ( %pot_to_make + 1 )
set %amount_to_make ( %amount_to_make + 1 )
return
}
set %amount #menures
}
if #menuRes = 11 ; Greater Conflagration
{
set %reagent1 TZF ; Grave Dust
set %reagent2 N/A ; N/A
set %required_reagent1 10
set %required_reagent2 N/A
set %catposy 250
set %selposy 90
menu getnum %amount_to_make
if #menures = 0
{
menu delete %amount_to_make
menu font color red
menu text done 120 %size2 Done!
set %size2 ( %size2 + 25 )
set %pot_to_make ( %pot_to_make + 1 )
set %amount_to_make ( %amount_to_make + 1 )
return
}
set %amount #menures
}
if #menuRes = 12 ; Greater Confusion Blast
{
set %reagent1 YZF ; Pig Iron
set %reagent2 N/A ; N/A
set %required_reagent1 10
set %required_reagent2 N/A
set %catposy 250
set %selposy 130
menu getnum %amount_to_make
if #menures = 0
{
menu delete %amount_to_make
menu font color red
menu text done 120 %size2 Done!
set %size2 ( %size2 + 25 )
set %pot_to_make ( %pot_to_make + 1 )
set %amount_to_make ( %amount_to_make + 1 )
return
}
set %amount #menures
}
if #menuRes = 13 ; Invisibility
{
set %reagent1 JUF ; Bloodmoss
set %reagent2 WZF ; Nightshade
set %required_reagent1 4
set %required_reagent2 3
set %catposy 270
set %selposy 70
menu getnum %amount_to_make
if #menures = 0
{
menu delete %amount_to_make
menu font color red
menu text done 120 %size2 Done!
set %size2 ( %size2 + 25 )
set %pot_to_make ( %pot_to_make + 1 )
set %amount_to_make ( %amount_to_make + 1 )
return
}
set %amount #menures
}
if #menuRes = 14 ; Parasitic
{
set %reagent1 YWS ; Parasitic Plant
set %reagent2 N/A ; N/A
set %required_reagent1 5
set %required_reagent2 N/A
set %catposy 270
set %selposy 90
menu getnum %amount_to_make
if #menures = 0
{
menu delete %amount_to_make
menu font color red
menu text done 120 %size2 Done!
set %size2 ( %size2 + 25 )
set %pot_to_make ( %pot_to_make + 1 )
set %amount_to_make ( %amount_to_make + 1 )
return
}
set %amount #menures
}
if #menuRes = 15 ; Darkglow
{
set %reagent1 XWS ; Luminescent Fungi
set %reagent2 N/A ; N/A
set %required_reagent1 5
set %required_reagent2 N/A
set %catposy 270
set %selposy 110
menu getnum %amount_to_make
if #menures = 0
{
menu delete %amount_to_make
menu font color red
menu text done 120 %size2 Done!
set %size2 ( %size2 + 25 )
set %pot_to_make ( %pot_to_make + 1 )
set %amount_to_make ( %amount_to_make + 1 )
return
}
set %amount #menures
}
return
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; XXXXX SUB TO FIND AND GRAB RESOURCES XXXXXX
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
sub grab_resources
if %amount >= 100
set %grab 100
if %amount < 100
set %grab %amount
; Finds and grabs Bottles
finditem %bottle C_ , %resource_bag
exevent drag #findid %grab
wait 10
exevent dropc #backpackid
wait 15
; Finds and grabs Reagent #1
finditem %1 C_ , %resource_bag
exevent drag #findid 1000
wait 10
exevent dropc #backpackid
wait 15
; Finds and grabs Reagent #2
finditem %2 C_ , %resource_bag
exevent drag #findid 1000
wait 10
exevent dropc #backpackid
wait 15
return
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; XXXXXXXX SUB FOR MAKING THE POTIONS XXXXXXX
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
sub craft_potion
repeat
finditem %reagent1 C_ , #backpackid
if #findcnt < %required_reagent
gosub grab_more_resources %reagent1
finditem %1 C_ , #backpackid
if #findcnt < %2
gosub check_tool %alch_tool %alch_tools_needed %catposx 110 %selposx 90
event macro 22 0
gosub gumpwait
set %x #contposx + %3
set %y #contposy + %4
click %x %y ; Category
gosub gumpwait
set %x #contposx + %5
set %y #contposy + %6
click %x %y ; Selection (Potion)
gosub gumpwait
finditem %bottle C_ , #backpackid
until #findcnt = 0
gosub clear_pack
set %amount ( %amount - %grab )
if %amount = 0
{
menu delete %amount_to_make
menu font color red
menu text done 120 %size2 Done!
set %size2 ( %size2 + 25 )
set %pot_to_make ( %pot_to_make + 1 )
set %amount_to_make ( %amount_to_make + 1 )
return
}
return
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; XXXX GUMP WAIT SUB, ENSURES GUMP IS UP XXXX
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
sub gumpwait
set %timer #SCNT + 5
repeat
until #CONTNAME = generic_gump || #SCNT > %timer
if #contname <> generic_gump
{
event macro 17 0
}
Return
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
; XXX TRAILMYX'S PERSISTANT VARIABLE SUBS XXX
; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
sub TM_GetPersistantVariable
set #RESULT %1 , _ , #CHARID
set #RESULT * . #RESULT
return #RESULT
sub TM_SetPersistantVariable
set #RESULT %1 , _ , #CHARID
set * . #RESULT %2
return