Moderator: MacroQuest Developers


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 0 | 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 @EnableShowStats==1 /call ShowStats
/if @EnableWriteLog==1 /call LogStats
/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
/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))
/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,"Global",@ItemArray(0,@NumItem))
/if "$arg($int($calc(@IniPosition+1)),"@IniList",|)"!="" /goto :CheckZoneForage
}
/return
Sub LogStats
/declare xy local
/if @EnableClear==1 /mqlog clear
/mqlog #############################################
/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 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
} else {
/varadd ForageKeeps 1
/autoinv
}
/return
Code: Select all
/if $char(state)=SIT {
/stand
/delay 3
}
Code: Select all
/if $char(state)==SIT {
/sit
/delay 3
}
Code: Select all
Ending macro: Calculate encountered unparsable text ''
for.mac@136 (ShowStats): /echo [$int(@xy)] [@ItemArray(0,@xy)] [$int(@ItemArray(1,@xy))] [$int(@ItemArray(2,@xy))] [$int($calc(@ItemArray(2,@xy)/@ForageAttempts*100))%]
for.mac@68 (Main): /if @EnableShowStats==1 /call ShowStats
Cleared the following: Timers Vars Arrays
The current macro has ended.
Error: Calculate encountered a unparsed variable '?ItemArray(2,?xy'
Error: Calculate encountered a unparsed variable '?ItemArray(1,?xy'
Error: Calculate encountered a unparsed variable '?xy'
[MacroQuest] [-1] [@ItemArray(0,@xy)] [-1)] [-1)] [-1%]
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
Code: Select all
/varset IniList "$ini(IniFile,"$zone")"
/if "@IniList"!="NOTFOUND||" {Code: Select all
!="NOTFOUND||"Code: Select all
!~"NOTFOUND"Code: Select all
/varset ItemArray(1,@NumItem) $ini(IniFile,$zone,"@ItemArray(0,@NumItem)")Code: Select all
/varset ItemArray(1,@NumItem) $ini(IniFile,[b]"$zone"[/b],"@ItemArray(0,@NumItem)")Well it's loading the stuff right if you're in the zone. It's just not reloading when you zone. I'll figure that out and post tomorrow. bedtime
Code: Select all
#Event ZoneChange "Loading please wait" Code: Select all
#Event ZoneChange "LOADING, PLEASE WAIT..."

Code: Select all
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 Code: Select all
Sub HandleItem
/if @ItemArray(1,@Index)==0 {
/varadd ForageDestroys 1
/echo $cursor(name) should be destroyed.
/destroy
} else {
/varadd ForageKeeps 1
/autoinv
}
/return Code: Select all
|----------------------------
| Forager v2.2
|
| Changes in 2.2:
| Streamlined the code a little more
| Changed it to an ability check rather than a timer
| Massively reduced the status spam!
| - Fewer lines, only updates after each forage attempt now
#define INIFile "Forage.ini"
| Set the above 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)
Sub Main
/declare EnableShowStats global
/declare EnableWriteLog global
/declare EnableClear global
| ##### User set variables #####
/varset EnableShowStats 1 | Set to 1 to show foraging statistics
/varset EnableWriteLog 0 | 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
:Continue
/delay 5
/varset Index 0
/if "$char(state)"=="SIT" {
/stand
/delay 5
}
/if n $char(ability,"Forage")>0 {
/doability Forage
/delay 5
/varadd ForageAttempts 1
/if "$cursor(name)"=="NULL" {
/varadd ForageFailure 1
} else {
/varadd ForageSuccess 1
/call CheckItem
/call HandleItem
}
/if @EnableShowStats==1 /call ShowStats
/if @EnableWriteLog==1 /call LogStats
}
/goto :Continue
/return
| ########## Subroutines ##########
Sub LogStats
/declare xy local
/if @EnableClear==1 /mqlog clear
/mqlog #############################################
/mqlog Attempts: $int(@ForageAttempts), Success: $int(@ForageSuccess) [$int($calc(@ForageSuccess/@ForageAttempts*100))%] Failures: $int(@ForageFailure) [$int($calc(@ForageFailure/@ForageAttempts*100))%]
/mqlog Keeps: $int(@ForageKeeps) [$int($calc(@ForageKeeps/@ForageAttempts*100))%] 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 Attempts: $int(@ForageAttempts), Success: $int(@ForageSuccess) [$int($calc(@ForageSuccess/@ForageAttempts*100))%] Failures: $int(@ForageFailure) [$int($calc(@ForageFailure/@ForageAttempts*100))%]
/echo Keeps: $int(@ForageKeeps) [$int($calc(@ForageKeeps/@ForageAttempts*100))%] 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
/destroy
} else {
/varadd ForageKeeps 1
/autoinv
}
/return