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