Broken Forage Macro

Need some help with that macro you're working on or aren't quite sure how to get your macro to do something? Ask here!

Moderator: MacroQuest Developers

krhom
decaying skeleton
decaying skeleton
Posts: 1
Joined: Sat Apr 24, 2004 10:33 pm

Broken Forage Macro

Post by krhom » Sat Apr 24, 2004 10:35 pm

Please help me repair this handy forage macro. It no longer works since the MQDATA stuff has been activated. Thank you very much.

Code: Select all

|---------------------------- 
| Forager with ini file support and 
| statistic gathering and reporting 
| version 2.1 

| Set this define to the desired .ini file 
| Requires a blank .ini file to start. The marco will 
| populate the .ini file automatically for any zone 
| and default to keeping the item. Then just change 
| the values in the .ini file to 0 for an item to be 
| automatically destroyed (requires FastItemDestroy 
| be turned on in the options window) 

#define IniFile "forage.ini" 
#Event ZoneChange "Loading please wait" 
#turbo 

Sub Main 
  /declare ForageDelay global 
  /declare EnableShowStats global 
  /declare EnableWriteLog global 
  /declare EnableClear global 

| ##### User set variables ##### 
  /varset ForageDelay 1010         | The delay between forage attempts 
  /varset EnableShowStats 1        | Set to 1 to show foraging statistics 
  /varset EnableWriteLog 1         | Set to 1 to write statistics to MQLog 
  /varset EnableClear 0            | Set to 1 to clear before writing stats 

| ##### User set variables ##### 

  /declare ForageAttempts global 
  /declare ForageSuccess global 
  /declare ForageFailure global 
  /declare ForageKeeps global 
  /declare ForageDestroys global 
  /declare NumItem global 
  /declare Index global 
  /declare ItemArray array2 

  /varset ForageAttempts 0 
  /varset ForageSuccess 0 
  /varset ForageFailure 0 
  /varset ForageKeeps 0 
  /varset ForageDestroys 0 
  /varset NumItem 0 
  /call LoadFromIni 

:Continue 
  /doevents 
  /varset Index 0 
  /if $char(state)==SIT { 
      /stand 
      /delay 3 
  } 
  /if n $char(ability,"Forage")>0 { 
     /doability Forage 
     /varadd ForageAttempts 1 
     /delay 15 
     /if "$cursor(name)"=="NULL" { 
       /varadd ForageFailure 1 
     } else { 
       /varadd ForageSuccess 1 
       /call CheckItem 
       /call HandleItem 
|       /beep 
     } 
  } 
  /if @EnableWriteLog==1 /call LogStats 
  /if @EnableShowStats==1 /call ShowStats 
  /delay @ForageDelay 
  /goto :Continue 

/return 

| ########## Subroutines ########## 
Sub Event_ZOneChange 
   /delay 1m 
   /call LoadFromIni 
/return 

Sub LoadFromIni 
   /varset NumItem 0 
   /declare IniPosition local 
   /declare IniList local 
   /declare tmpItem local 
   /varset IniList $ini(IniFile,"Global") 
   /if "@IniList"!~"NOTFOUND" { 
      /varset IniPosition 0 
      :CheckGlobalForage 
         /varadd IniPosition 1 
         /varadd NumItem 1 
         /varset ItemArray(0,@NumItem) "$arg($int(@IniPosition),"@IniList",|)" 
         /varset ItemArray(1,@NumItem) $ini(IniFile,"Global","@ItemArray(0,@NumItem)") 
|  Setting the second column to 0 in the array at zoneout/in.  Originally wasn't getting set and would cause stats to bail. 
         /varset ItemArray(2,@NumItem) 0 
      /if "$arg($int($calc(@IniPosition+1)),"@IniList",|)"!="" /goto :CheckGlobalForage 
   } 
   /varset IniList "$ini(IniFile,"$zone")" 
   /if "@IniList"!~"NOTFOUND" { 
      /varset IniPosition 0 
      :CheckZoneForage 
         /varadd IniPosition 1 
         /varadd NumItem 1 
         /varset ItemArray(0,@NumItem) "$arg($int(@IniPosition),"@IniList",|)" 
         /varset ItemArray(1,@NumItem) $ini(IniFile,"$zone","@ItemArray(0,@NumItem)") 
         /varset ItemArray(2,@NumItem) 0 
      /if "$arg($int($calc(@IniPosition+1)),"@IniList",|)"!="" /goto :CheckZoneForage 
   } 
/return 

Sub LogStats 
  /declare xy local  
  /if @EnableClear==1 /mqlog clear 
  /mqlog ############################################# 
  /mqlog For Zone: $zone 
  /mqlog Attempts = $int(@ForageAttempts) 
  /mqlog Success  = $int(@ForageSuccess)  [$int($calc(@ForageSuccess/@ForageAttempts*100))%] 
  /mqlog Failures = $int(@ForageFailure)  [$int($calc(@ForageFailure/@ForageAttempts*100))%] 
  /mqlog Keeps    = $int(@ForageKeeps)    [$int($calc(@ForageKeeps/@ForageAttempts*100))%] 
  /mqlog Destroys = $int(@ForageDestroys) [$int($calc(@ForageDestroys/@ForageAttempts*100))%] 
  /mqlog [Idx] [Item] [Keep] [Qty] [%] 
  /mqlog ------------------------------------------- 
  /if n @NumItem>0 { 
    /for xy 1 to @NumItem 
       /mqlog [$int(@xy)] [@ItemArray(0,@xy)] [$int(@ItemArray(1,@xy))] [$int(@ItemArray(2,@xy))] [$int($calc(@ItemArray(2,@xy)/@ForageAttempts*100))%] 
    /next xy 
  } 
/return 

Sub ShowStats 
  /declare xy local 
  /if @EnableClear==1 /clear 
  /echo ############################################# 
  /echo For Zone: $zone 
  /echo Attempts = $int(@ForageAttempts) 
  /echo Success  = $int(@ForageSuccess)  [$int($calc(@ForageSuccess/@ForageAttempts*100))%] 
  /echo Failures = $int(@ForageFailure)  [$int($calc(@ForageFailure/@ForageAttempts*100))%] 
  /echo Keeps    = $int(@ForageKeeps)    [$int($calc(@ForageKeeps/@ForageAttempts*100))%] 
  /echo Destroys = $int(@ForageDestroys) [$int($calc(@ForageDestroys/@ForageAttempts*100))%] 
  /echo [Idx] [Item] [Keep] [Qty] [%] 
  /echo ------------------------------------------- 
  /if n @NumItem>0 { 
    /for xy 1 to @NumItem 
      /echo [$int(@xy)] [@ItemArray(0,@xy)] [$int(@ItemArray(1,@xy))] [$int(@ItemArray(2,@xy))] [$int($calc(@ItemArray(2,@xy)/@ForageAttempts*100))%] 
    /next xy 
  } 
/return 


Sub CheckItem 
  /declare xy local 
  /if @NumItem==0 { 
    /varset NumItem 1 
    /call AddToArray 
    /varset Index 1 
  } else { 
    /for xy 1 to @NumItem 
      /if "@ItemArray(0,@xy)"=="$cursor(name)" /varset Index @xy 
    /next xy 
    /if @Index==0 { 
      /varadd NumItem 1 
      /call AddToArray 
    } else { 
      /varadd ItemArray(2,@Index) 1 
    } 
  } 
/return 

Sub AddToArray 
    /varset ItemArray(0,@NumItem) "$cursor(name)" 
    /varset ItemArray(1,@NumItem) $ini("IniFile","$zone","$cursor(name)") 
    /if "@ItemArray(1,@NumItem)"=="NOTFOUND" { 
      /varset ItemArray(1,@NumItem) 1 
      /ini "IniFile" "$zone" "$cursor(name)" 1 
    } 
    /varset ItemArray(2,@NumItem) 1 
/return 

Sub HandleItem 
  /if @ItemArray(1,@Index)==0 { 
    /varadd ForageDestroys 1 
    /click left destroy 
    /echo $cursor(name) should be destroyed. 
  } else { 
    /varadd ForageKeeps 1 
    /autoinv 
  } 
/return