Hello everyone,
I need some help with saving variables so I dont (any hopefully you dont!) have to run setup each time this script is run.  I have done as much reading on the topic as I can find, but alas I cant make heads nor tails of it.  Could someone either point me to a "how to for dummies" on variable saving and recalling or even better help me to understand it by (assisting me with) incorporating it into the following script.
Also, I wanted to mention, this is my first script, so any assistance would be greatly appreciated!
;============================================================================
; Script Name: Sin's Mace and Shield Donator
; Author: Sin
; Version: 1.3.0
; Client Tested with: 7.0.25.7
; EUO version tested with: 1.5.214
; Purpose: Donating to brit library for Mace and Shield Reading glasses
;=============================================================================
;***Setup Instructions***
;1. Runebook with position 1 marked to secure, anvil and forge
;2. Runebook with position 2 marked to Library Turn in NPC
;3. Runebook with position 3 marked to alternate Library Turn in NPC location.
;4. A "Workbag" inside your backpack, I used a "Bag" during testing.
;5. At least one tinker tools in the "Workbag"
;6. Top level of secure should contain Iron Ingots only!
;7. BEFORE running script, use a blacksmith hammer to line up the
;8. (cont) Crafting Gump to the upper left corner.
;9. Under "User Options", set the two variables.
;=============================================================================
; User Options
set %setup 1 ;Currently "MUST" be set to 1 to make script work, **Needs Work**
set %max_buckler_amount 59 ; select number of bucklers to make
==============================================================================
;Update Log
;
;Version 1.3.0
;Fixed Tinker Tool Creation.
;Fixed WaitForGump Sub.
;Improved Speed at which bucklers are made.
;Added a number of checks for stability and to ensure script continues
;to run in the event of lag.
;Added an alternate recall spot to library turn in NPC if the first
;position is blocked.
;06/18/2012 Sin
;
;Version 1.2.0
;Added Tinker Tool Creation Function
;When your workbag is down to one tinker tool, another is produced.
;Various code cleanup.
;Still suffers from being prone to cash, need to add better wait for gump
;functions.  Will work on this.
;06/10/2012 Sin
;
;Version 1.1.0
;Changed the way smith hammers were made, now only 3 are made
;Make Tinker Tools not working at this time.
;06/10/12 Sin
;
;Version 1.0.0
;Completed the first version of the script.  Script can not recover from lag
;or glitches very well at this point, but it runs.  Will continue to work on
;recovery ability etc.
;06/10/2012 Sin
==============================================================================
; Script Variables (Item types)
set %ingots ENK
set %tinker_tools JTL
set %smiths_hammer TLH
set %buckler FIK
set %status_bucklers 0
set %status_ingots 0
set %makefirstbuckler 1
set %check 0
set %count 0
set %loop 0
;list
;%time         - Delay Time in "WaitForGump"
;%setup        - Set to 1 to run script currently **NEEDS WORK HERE**
;%runebook     - This is the runebook used in this script
;%secure       - This is the secure container at the house rune location
;%workbag      - This is the workbags ID number
;%donation_npc - This is the ID of the donation NPC
;=============================================================================
; Main Loop
if %setup = 1
   {
   gosub MainSetup
   set %setup 0
   }
repeat
   {
   ;gosub CheckWeight                            ;sub not currently used
   gosub InvisSelf
   gosub GetIngots
   gosub MakeBuckler
   gosub DropIngots
   gosub TurnInBucklers
   }
until #charghost = yes
display ok You have died, halting script.
halt
display ok End of main, error halting
halt
;=============================================================================
sub MainSetup
; Get Runebook ID
display ok Target your runebook
set #targcurs 1
wait 5
repeat
wait 0
until #targcurs = 0
set %runebook #ltargetID
wait 5
; Get workbag ID number
display ok Target your workbag
set #targcurs 1
wait 5
repeat
wait 0
until #targcurs = 0
set %workbag #ltargetID
set #lobjectID %workbag
wait 5
event macro 17 0
wait 5
set #contPosX 850
set #contPosY 520
wait 25
; Get secure ID number
display ok Target your secure container.
set #targcurs 1
wait 5
repeat
wait 0
until #targcurs = 0
set %secure #ltargetID
set #lobjectID %secure
wait 10
event macro 17 0
wait 10
set #contPosX 675
set #contPosY 500
wait 25
; Get Donation NPC ID
gosub TravelToLibrary
display ok Target the reward NPC
set #targcurs 1
wait 5
repeat
wait 0
until #targcurs = 0
set %donation_npc #ltargetID
wait 5
display ok Setup complete, You can leave it to me now
gosub TravelToHome
wait 5
return
;=============================================================================
; Check weight subroutine
sub CheckWeight                                  ;more work to be done with this
set %avail = ( #maxweight - #weight )
return
;=============================================================================
; Cast Invis on Self at Secure
sub InvisSelf
set #ltargetID #charID                           ;set pc as last target
wait 5
event macro 15 43                                ;cast invis spell
wait 50
event macro 22 0                                 ;last target
wait 5
return
;=============================================================================
; Places ingots in backpack
sub GetIngots
oops:                                            ;return if ingots were not put in workbag, trys again
set #lobjectID %secure
wait 10
event macro 17 0
;set #contPosX 675                               ;if you position the secure, it moves the
;set #contPosY 500                               ;position of the workbag for some reason
wait 25
finditem %ingots C_ , %secure
if #findkind = -1
   {
   display ok Your secure container has run out of ingots, Ending Script.
   halt
   }
if #findstack < 1000
   {
   set %stack #findstack
   }
else
    {
    set %stack 1000
    }
exevent drag #findID %stack
wait 10
exevent dropc %workbag
wait 15
finditem %ingots C_ , %workbag                   ;anti lag measure, check to ensure ingots were
if #findkind = -1                                ;placed in workbag.  If not returns and tries
   {                                             ;again.
   goto oops
   }
set %status_ingots ( %status_ingots + %stack )
return
;=============================================================================
; Make Bucklers Loops
sub MakeBuckler
finditem %smiths_hammer C_ , %workbag            ;check to see how many smith hammers
if #findkind = -1                                ;are in the workbag, if 0 makes more
   {
   gosub MakeHammer
   }
finditem %smiths_hammer C_ , %workbag            ;select smith's hammer
set #lobjectID #findID
wait 5
event macro 17 0                                 ;open crafting gump
wait 5
set #contPosX 0                                  ;position gump
set #contPosY 0                                  ;position gump
wait 5
while %makefirstbuckler = 1
   {
   click 25 130 dmc
   wait 5
   gosub WaitForGump
   set #contPosX 0
   set #contPosY 0
   click 233 70 dmc
   wait 5
   gosub WaitForGump
   set %makefirstbuckler  0
   gosub MoreBuck
   click 27 452 dmc                              ;close blacksmithing window
   wait 25
   }
set %makefirstbuckler 1
return
;============================================================
; 1 to 50 bucklers
sub MoreBuck
while %count < %max_buckler_amount
      {
      click 282 453 dmc                          ;click make last button
      wait 10
      gosub WaitForGump                          ;wait for gump to refresh
      if #weight > 450                           ;checks if character is overweight
      {                                          ;if overweight, drops ingots and
      wait 10                                    ;moves to turn in NPC to drop bucklers
      return
      }
      wait 10
      finditem %smiths_hammer C_ , %workbag      ;find hammer in workbag
      if #findkind = -1                          ;checks to see how many hammers there are
          {
          gosub MakeHammer                       ;if 0 go make more
          }
      else
      if %check = 5
         {
         finditem %smiths_hammer C_ , %workbag   ;ensure hammer is targeted
         set #lobjectID #findID                  ;ensure hammer is targeted
         event macro 17 0                        ;lasttarget (activate a new hammer if last broke)
         wait 5
         set #contPosX 0                         ;reposition gump for makelast button
         set #contPosY 0                         ;reposition gump for makelast button
         wait 5
         set %check 0
         }
      else
      set %check %check + 1
      set %count %count + 1
      }
set %count 0
return
;=============================================================================
; Move ingots to secure
sub DropIngots
finditem %ingots C_ , %workbag
wait 5
exevent drag #findid #findstack
wait 10
exevent dropc %secure
set %status_ingots ( %status_ingots - #findstack )
wait 25
return
;=============================================================================
; Turns bucklers into the Donation NPC
sub TurnInBucklers
gosub TravelToLibrary
oops2:
set #lobjectID %donation_npc
event macro 17 0
gosub WaitForGump
wait 5
click 288 214 dmc                                ;select "by bag" option on npc, get target cursor
repeat
      wait 5                                     ;repeat looking until bag target cursor
      finditem %workbag C_ , #backpackid         ;is gone (anti lag measure)
      set #ltargetID #findID
      wait 5
      event macro 22 0                           ;set lasttarget to %workbag, selectlasttarget
until #targcurs = 0
gosub WaitForGump
wait 10
click 606 392 dmc                                ;select "ok" basically
wait 25
      if #weight > 250                           ;checks to see if buckler turn in was succesful
      {                                          ;if not, returns and trys again
      wait 10
      goto oops2
      }
gosub TravelToHome
return
;=============================================================================
; Makes 3 smith's hammers
sub MakeHammer
finditem %tinker_tools C_ , %workbag             ;check for tinker tools
if #findcnt < 2                                  ;if 1 left, make one more
   {
   gosub MakeTinker                              ;make tinker tools
   }
finditem %tinker_tools C_ , %workbag             ;select tinker tools
set #lobjectID #findID
wait 10
event macro 17 0                                 ;open tinkering gump
gosub WaitForGump
set #contPosX 0                                  ;position tinkering gump
set #contPosY 0                                  ;position tinkering gump
wait 10
click 28 131 dmc                                 ;select tools option in gump
gosub WaitForGump
wait 10
click 385 270 dmc                                ;select next page option in gump
gosub WaitForGump
wait 10
click 230 130 dmc                                ;select smith hammer option in gump
gosub WaitForGump
wait 25
;first hammer
click 282 453 dmc                                ;click make last button option in gump
gosub WaitForGump
wait 25
;second hammer
click 282 453 dmc                                ;click make last button option in gump
gosub WaitForGump
wait 25
;third and final hammer
finditem %smiths_hammer C_ , %workbag            ;change last object from tinker tool
set #lobjectID #findID                           ;to smiths hammer
wait 5
return
;=============================================================================
; Makes one tinker tool
sub MakeTinker
finditem %tinker_tools C_ , %workbag             ;check for tinker tools
if #findcnt > 1                                  ;if more then 1 return
   {                                             ;this is to make sure the script doesnt
   return                                        ;make excess tinker tools
   }
finditem %tinker_tools C_ , %workbag
set #lobjectID #findID
wait 10
event macro 17 0                                 ;open tinkering gump
gosub WaitForGump
set #contPosX 0                                  ;position tinkering gump
set #contPosY 0                                  ;position tinkering gump
wait 10
click 28 131 dmc                                 ;select tools option in gump
gosub WaitForGump
wait 10
click 232 130 dmc                                ;select tinker's tools
gosub WaitForGump
wait 10
return
;=============================================================================
; Travel Home to Secure Storage, Anvil, and Forge
sub TravelToHome
recallfailhome:
set %runbook #ltargetID
set #lobjectID %runebook
set %charx_runebook #charposx                    ;set current character position X
set %chary_runebook #charposy                    ;set current character position Y
wait 5
event macro 17 0                                 ;open runebook
wait 10
set #contPosX 0                                  ;position runebook
set #contPosY 0                                  ;position runebook
wait 5
click 138 196 dmc                                ;clicking page 1
wait 10
click 139 145 dmc                                ;selecting home location
wait 10
gosub WaitForRecallHome
return
;=============================================================================
; Wait For Recall Home
sub WaitForRecallHome
set %loop 0
repeat
if %charx_runebook <> #charposx || %chary_runebook <> #charposy
   {
   wait 5
   return
   }
set %loop %loop + 1
until %loop > 200
goto recallfailhome
;=============================================================================
; Travel to Library to Drop off Shields / Select turn in NPC
sub TravelToLibrary
recallfaillibrary:
set %runbook #ltargetID
set #lobjectID %runebook
set %charx_runebook #charposx                    ;set current character position X
set %chary_runebook #charposy                    ;set current character position Y
wait 5
event macro 17 0                                 ;open runebook
wait 10
set #contPosX 0                                  ;position runebook
set #contPosY 0                                  ;position runebook
wait 10
click 138 196 dmc                                ;click page 1
wait 10
click 298 145 dmc                                ;selecting Library Location
wait 10
gosub WaitForRecallLibrary
return
;=============================================================================
; Travel To Library Location 2
sub TravelToLibrary2
set %runbook #ltargetID
set #lobjectID %runebook
set %charx_runebook #charposx                    ;set current character position X
set %chary_runebook #charposy                    ;set current character position Y
wait 5
event macro 17 0                                 ;open runebook
wait 10
set #contPosX 0                                  ;position runebook
set #contPosY 0                                  ;position runebook
wait 10
click 173 195 dmc                                ;click page 2
wait 10
click 139 145 dmc                                ;select recall option
wait 10
gosub WaitForRecallLibrary
return
;=============================================================================
; Wait For Recall Library
sub WaitForRecallLibrary
set %loop 0
repeat
if Something_is_blocking in #sysmsg              ;if primary library rune is blocked
   {
   wait 10
   gosub TravelToLibrary2
   }
if %charx_runebook <> #charposx || %chary_runebook <> #charposy
   {
   wait 5
   return
   }
set %loop %loop + 1
until %loop > 200
goto recallfaillibrary
;=============================================================================
; Wait for gump
sub WaitForGump
set %time #scnt
repeat
if You_mark_ in #sysmsg
   {
   break
   }
if #scnt > ( %time + 5 )
   {
   break
   }
wait 0
until #contname = generic_gump
wait 5
return
;=============================================================================