HunterHelper Looter/Rangedattack/Forage/Kick...with INI

Post your completed (working) macros here. Only for macros using MQ2Data syntax!

Moderator: MacroQuest Developers

Bigguy70
a ghoul
a ghoul
Posts: 85
Joined: Tue Sep 27, 2005 9:08 am

HunterHelper Looter/Rangedattack/Forage/Kick...with INI

Post by Bigguy70 » Sat Jan 21, 2006 1:31 am

This is the looter/hunting helper I have spliced and tweaked together that I use with all my toons. Looting / foraging is INI controlled -1 for keep all.. 0 for leave on corpse/destroy, or amount for keeping upto an amount.

Very little is origanal but it has been a learning experience, I just got VIP access so I figured I'd post this version for those who don't have VIP as any future versions will require plugin support.

Code: Select all

|------------------------------------------------------------
| Name: Loot2b.mac
| Frankienstiened by Bigguy70
|
|------------------------------------------------------------
| Description: Loots mobs that you or your pet kills.
|------------------------------------------------------------
| Looting portion based off Mac: Loot.mac 
|										Author: TheWarden (helped by DKAA)
|										posted: http://www.macroquest2.com/phpBB2/viewtopic.php?t=9076&highlight=
| 
| Ranged attack/snare from Mac: Ranger.mac (unable to find it again if anyone recognizes please post so I can update creds)
|
| Forage part 	Mac: YAFM.mac
|						Author: Bootyjuice
|						posted: http://www.macroquest2.com/phpBB2/viewtopic.php?t=9076&highlight=
|
|------------------------------------------------------------
| Example Uses:
|    /macro loot2b.mac
|------------------------------------------------------------

#include spell_routines.inc

#Event MobDied "#*# has been slain by |${Me.Pet.CleanName}|!"
#Event MobDied "#*#You have slain #*#"
#Event Zoned           "#*#You have entered#*#"
#Event AutofireOn      "#*#Auto fire on#*#"
#Event AutofireOff     "#*#Auto fire off#*#"
#Event Exp             "#*#You gain#*#experience#*#"
#Event resist       "Your target resisted the Ensnare spell#*#"
#Event resist       "Your Ensnare spell has worn off#*#"
#Event Snaresuccess    "#*#has been ensnared#*#"
#Event Immune       "#*#changes in its run speed#*#"
#Event Song "You miss a note#*#"

Sub Main

		
|------------------------------------------------------------
|Should I loot all items? (1 for yes, 0 for no) set in INI file
|Set MacName for begining of Ini file name, will be saved as
|"filename"."charname"."servername".ini  Ini file is created
|first time mac is played and updated with each new loot.
|Default file name is loot2blist
|------------------------------------------------------------
		/declare MacName 					string	outer loot2blist
   		/declare LootAllItems     bool 		outer
		/declare UseRanged        bool 		outer
		/declare UseSnare         bool 		outer
		/declare SnareSpell				string	outer
		/declare BandRanged				string  outer
		/declare BandMelee				string	outer
		/call Load_Config
		
|------------------------------------------------------------
|Variables that you don't need to worry about.'
|------------------------------------------------------------

  	/declare LootSlot         int 		outer	0
		/declare auto_fire 				int 		outer 0
		/declare IsSnared 				int 		outer 0
		/declare Hunt string outer
		/declare TheMob string outer
		/varset Hunt ${Param0} 
		/varset TheMob ${Param1} 


    /echo Starting Looting Macro Ver 2.c
    /echo Lootall setting ${LootAllItems}


:eventloop
    /doevents
    /if (${Hunt.Equal[NULL]} || ${TheMob.Equal[NULL]}) /goto :skip
    /if (!${Me.Combat}) /call autohunt
    :skip
	  /call KickIt
	  /call Forage
    /delay 5
    /if (${Window[LootWnd].Open}) /call Manual
    /goto :eventloop
/return

|~~Activates Combat Skills~~
Sub KickIt
		/if (${UseRanged}&&${Me.Combat}&&${Target.Distance}>30) /call archery
		/if (${Me.Combat}&&${auto_fire}==1&&${Target.Distance}<=30) /call autoOff
		/if (${Me.Combat}&&${Target.ID}&&${auto_fire}==0) /call closer
   		/if (${Me.Class.Name.Equal[Berserker]}) /call Berserker
   		/if (${Me.Class.Name.Equal[Monk]}) /call monk   		
   		/if (${Me.Combat}&&${Me.AbilityReady["Kick"]}&&!${Me.Casting.ID}&&${Target.ID}&&!${Me.Stunned}&& ${Target.Distance}<15) /doability "Kick" 
   		/if (${Me.Combat}&&${Me.AbilityReady["Taunt"]}&&!${Me.Casting.ID}&&${Target.ID}&&!${Me.Stunned}&& ${Target.Distance}<15) /doability "Taunt"
   		/if (${Me.Combat}&&${Me.AbilityReady["Bash"]}&&!${Me.Casting.ID}&&${Target.ID}&&!${Me.Stunned}&& ${Target.Distance}<15) /doability "Bash"
   		/if (${Me.Combat}&&${Target.ID}&&${Target.Distance}<195) /call Snare
   		/if (${Me.Race.Name.Equal[Barbarian]}||${Me.Race.Name.Equal[Troll]}||${Me.Race.Name.Equal[Ogre]}) {
   			/if (${Me.Combat}&&${Me.AltTimerReady}&&!${Me.Casting.ID}&&${Target.ID}&&!${Me.Stunned}&& ${Target.Distance}<15) /doability "111"
   			}
	/return
		
|--------------------------------------------------------------------------------
|Event: MobDied
|--------------------------------------------------------------------------------

Sub Event_MobDied
		/varset IsSnared 0
    /declare 	LootCheck   int inner  0
    /declare 	LootTotal   int inner  0

    /target npc corpse radius 200
		/call closer
		/delay 5
    /loot

:NotOpen
    /if (${Window[LootWnd].Open})	/goto :Lalala
    /goto :NotOpen

:Lalala
    /delay 5
    /call Manual
	/return

|~~Compares items on corpse to INI file~~
Sub Manual
		/varset LootSlot 0
    /declare mLootCheck    int inner  0
    /declare mLootTotal    int inner  0
    /varset IsSnared 0
			    
:Lalala2
    /delay 5
    /if (!${Corpse.Items}) {
      /echo NO LOOT! Cheap Bastard!
      /notify LootWnd DoneButton leftmouseup
      /delay 5
      /return
    	}

    /varset mLootTotal ${Corpse.Items}
    /for LootSlot 1 to ${mLootTotal}
        
:LootWait2
      /delay 1
      /if (${LootAllItems}) {
      			/lootnodrop never
           	/echo Keeping a ${Corpse.Item[${LootSlot}].Name}... WOOT!
           	/call takeit
           } 
      /if (!${LootAllItems}) {
      		  /call ItemSort
      		}
     	/next LootSlot
 			/notify LootWnd DoneButton leftmouseup

	/return
	
sub ItemSort
  /declare DoubleCheck local

:Recheck
  /delay 5
  /varset DoubleCheck "${Corpse.Item[${LootSlot}].Name}"
	/if (!${Ini[${MacName}.${Me.Name}.${MacroQuest.Server}.ini,${Zone.ShortName},${Corpse.Item[${LootSlot}].Name}].Length}) {
  	/call writeit
    /goto :Recheck
  	} else {
    	/if (${Ini[${MacName}.${Me.Name}.${MacroQuest.Server}.ini,${Zone.ShortName},${Corpse.Item[${LootSlot}].Name}]}) {
      /if (${FindItemCount["=${Corpse.Item[${LootSlot}].Name}"]}>=${Ini[${MacName}.${Me.Name}.${MacroQuest.Server}.ini,${Zone.ShortName},${Corpse.Item[${LootSlot}].Name}]} && ${Ini[${MacName}.${Me.Name}.${MacroQuest.Server}.ini,${Zone.ShortName},${Corpse.Item[${LootSlot}].Name}]}!=-1) /goto :Destroy
    } else {
   		:Destroy
      /if (${Corpse.Item[${LootSlot}].Name.Equal[${DoubleCheck}]}) { 
        /echo  :: Skipping ${Corpse.Item[${LootSlot}].Name}
        /return
      			}
    }
  }

  :LootIt
    /echo Looting ${Corpse.Item[${LootSlot}].Name} 
    /call takeit
    /delay 1
    /if (${Cursor.ID}) /drop
  /return 
  
Sub closer
  :MovementLoop
    /face fast nolook
    /if (${Int[${Target.Distance}]}>13) /keypress forward hold
    /if (${Int[${Target.Distance}]}<13&&${Int[${Target.Distance}]}>11) /keypress forward
    /if (${Int[${Target.Distance}]}<9) /keypress back
    /if (${Int[${Target.Distance}]}>13) /goto :MovementLoop
    /keypress forward
    /keypress back
  /return

|~~Loots items if ok'd by INI file '    
Sub Takeit
	/if (!${Corpse.Item[${LootSlot}].Stackable}&&${Me.FreeInventory}<1) /return
|	/if (${Corpse.Item[${LootSlot}].FreeStack}<${Corpse.Item[${LootSlot}].StackCount}) /return
    :LootItem
      /itemnotify loot${LootSlot} rightmouseup
      /delay 3
      /if (${Corpse.Item[${LootSlot}].ID}) {
        /delay 2
        /goto :LootItem
      }
    /return

|~~Adds Items to Ini File~~    
Sub writeit
    /if (${Corpse.Item[${LootSlot}].NoDrop}) {
    	 /ini "${MacName}.${Me.Name}.${MacroQuest.Server}.ini" "${Zone.ShortName}" "${Corpse.Item[${LootSlot}].Name}" "0"
    	/return
    	}
    /if (!${Corpse.Item[${LootSlot}].Stackable}&&${Corpse.Item[${LootSlot}].Value}< 500) {
    	 /ini "${MacName}.${Me.Name}.${MacroQuest.Server}.ini" "${Zone.ShortName}" "${Corpse.Item[${LootSlot}].Name}" "0"
    	/return
    	}
    /ini "${MacName}.${Me.Name}.${MacroQuest.Server}.ini" "${Zone.ShortName}" "${Corpse.Item[${LootSlot}].Name}" "-1"
    /return

|~~Berserker attack skills~~
Sub Berserker
		/if (${Me.Combat}&&${Me.AbilityReady["Intimidation"]}&&!${Me.Casting.ID}&&${Target.ID}&&!${Me.Stunned}&& ${Target.Distance}<15) /doability "Intimidation" 
   	/if (${Me.Combat}&&${Me.AbilityReady["Frenzy"]}&&!${Me.Casting.ID}&&${Target.ID}&&!${Me.Stunned}&& ${Target.Distance}<15) /doability "Frenzy" 
	/return
	
|~~Monk attack skills~~    
Sub monk
    /if  (${Me.Combat}&&${Me.AbilityReady["kick"]}&&!${Me.Casting.ID}&&${Target.ID}&&!${Me.Stunned}&& ${Target.Distance}<15) /doability "kick" 
  /return

|~~Handles Ranged Attack~~    
Sub Archery
		/bandolier Activate ${BandRanged}
   	/delay 3
   	/face nolook
   	/if (${Target.Distance}>30) {
      /if (${auto_fire}==0) /autofire
      /call Snare
   		}
  /return

|~~Handles Casting Snare~~   
Sub Snare
		/if (${UseSnare}==0) /return
    /if (${IsSnared}==0 && ${Target.PctHPs}<=95) /call Cast "${SnareSpell}"
  /return

|~~Events for Ranged combat & Snare~~
Sub Event_Zoned
   /echo Zoned...Autofire is off
   /varset auto_fire 0
   /varset IsSnared 0
  /return

Sub Event_AutofireOn
   /echo Autofire activated! Target: ${Target.CleanName}
   /varset auto_fire 1
  /return

Sub Event_AutofireOff
   /echo Autofire deactivated!
   /varset auto_fire 0
  /return

Sub Event_Exp
   /varset auto_fire 0
   	/varset IsSnared 0
  /return

Sub Event_resist
  /return

Sub Event_Snaresuccess
   	/echo ${Target.CleanName} is snared
   	/varset IsSnared 1
  /return

Sub Event_Immune
   	/echo ${Target.CleanName} snare immune
   	/varset IsSnared 1
  /return 
 
 Sub Event_Song
 	/stopsong
| 	/echo tryagain
 	/melody 1 3 4
 	/return

|~~Switching from Ranged to Melee combat~~   
Sub AutoOff
   	/echo Autofire deactivated!
   	/varset auto_fire 0
   	/bandolier Activate ${BandMelee}
   	/echo testAO
   	/attack
	/return
   
|~~Reads Settings part of INI File~~
Sub Load_Config()
| If there isnt a config lets make one for them
/if (!${Ini[${MacName}.${Me.Name}.${MacroQuest.Server}.ini,SETTINGS,VERSION]} ) /call Save_New_Config

		/varset LootAllItems ${Ini[${MacName}.${Me.Name}.${MacroQuest.Server}.ini,SETTINGS,LootAllItems]}
		/varset UseRanged ${Ini[${MacName}.${Me.Name}.${MacroQuest.Server}.ini,SETTINGS,UseRanged]}
		/varset UseSnare ${Ini[${MacName}.${Me.Name}.${MacroQuest.Server}.ini,SETTINGS,UseSnare]}
		/varset SnareSpell ${Ini[${MacName}.${Me.Name}.${MacroQuest.Server}.ini,SETTINGS,SnareSpell]}
		/varset BandRanged ${Ini[${MacName}.${Me.Name}.${MacroQuest.Server}.ini,SETTINGS,BandRanged]}
		/varset BandMelee ${Ini[${MacName}.${Me.Name}.${MacroQuest.Server}.ini,SETTINGS,BandMelee]}
/return

|~~Creates INI file first time mac is ran~~
Sub Save_New_Config
		/ini "${MacName}.${Me.Name}.${MacroQuest.Server}.ini" "SETTINGS" "VERSION" "2"
		/ini "${MacName}.${Me.Name}.${MacroQuest.Server}.ini" "SETTINGS" "TOONNAME" "${Me.Name}"
		/ini "${MacName}.${Me.Name}.${MacroQuest.Server}.ini" "SETTINGS" "LootAllItems" "0"
		/ini "${MacName}.${Me.Name}.${MacroQuest.Server}.ini" "SETTINGS" "UseRanged" "0"
		/ini "${MacName}.${Me.Name}.${MacroQuest.Server}.ini" "SETTINGS" "UseSnare" "0"
		/ini "${MacName}.${Me.Name}.${MacroQuest.Server}.ini" "SETTINGS" "SnareSpell" "Snare"
		/ini "${MacName}.${Me.Name}.${MacroQuest.Server}.ini" "SETTINGS" "BandRanged" "Ranged"
		/ini "${MacName}.${Me.Name}.${MacroQuest.Server}.ini" "SETTINGS" "BandMelee" "Melee"
	/return

Sub Forage
		/if (${Me.State.NotEqual[STAND]}) /return
   	/delay 1s
   	/if (!${Me.Combat}&&${Me.AbilityReady["Forage"]}&&!${Me.Casting.ID}&&!${Target.ID}&&!${Me.Stunned}) /doability "Forage"
   	/delay 5
   	/if (${Cursor.ID}) /call ForageItemSort
  /return

Sub ForageItemSort

  /declare ForageDoubleCheck local

  :ForageRecheck
  /delay 5
  /varset ForageDoubleCheck "${Cursor.Name}"

  /if (!${Ini[${MacName}.${Me.Name}.${MacroQuest.Server}.ini,ForageList,${Cursor.Name}].Length}) {
    	/ini "${MacName}.${Me.Name}.${MacroQuest.Server}.ini" "ForageList" "${Cursor.Name}" "-1"
    	/goto :ForageRecheck
  	} 
  /if (${Ini[${MacName}.${Me.Name}.${MacroQuest.Server}.ini,ForageList,${Cursor.Name}]}) {
      /if (${FindItemCount["=${Cursor.Name}"]}>=${Ini[${MacName}.${Me.Name}.${MacroQuest.Server}.ini,ForageList,${Cursor.Name}]} && ${Ini[${MacName}.${Me.Name}.${MacroQuest.Server}.ini,ForageList,${Cursor.Name}]}!=-1) {
      :ForageDestroy
      /if (${Cursor.Name.Equal[${DoubleCheck}]}) { 
        /echo  :: Destroying ${Cursor.Name}
        /destroy
        /return
      }
    }
	}
  :ForageLootIt
    /echo Keeping ${Cursor.Name}
    /autoinventory
    /delay 5
    /if (${Cursor.ID}) /goto :ForageRecheck
  /return 
  
Sub autohunt
/if (${Hunt.Equal[NULL]} || ${TheMob.Equal[NULL]}) /return
/delay 1s
/target ${TheMob} npc
/face
/echo test
/attack
/return

Bigguy70
a ghoul
a ghoul
Posts: 85
Joined: Tue Sep 27, 2005 9:08 am

Post by Bigguy70 » Sat Jan 21, 2006 1:34 am

INI file is created for each toon when mac is started saved as "macname"."toonname"."server".ini