Ok, I spliced this macro for my buddy (ranger) and I (bard) to duo in FH. I think I have it pretty well set to add him and zone him in if I am already kiting away, but I need to find a way to make it so that if I am solo, or if he joins me and leaves (by death, LD, or logs) I can still run the macro. There is a part in it where after I zone in, I do a PC check and if there aren't 2 people in the zone, I go into a holding pattern (did this so his toon can get set up). My questions are: 1) is this holding pattern needed, and 2) if it is, is there a way I can make a /if {grouped} do the hold , and if not grouped, not do it? I'll paste both the bard and ranger macros that we use, and I appologize that they haven't been credited correctly... just ment them for private use for the 2 of us til I get all the bugs worked out.
Also, if you see anything that needs to be re-hashed, please let me know. Thanks in advance for all the help!
fhbard.mac
fhcommon.inc
fhranger.mac
Also, if you see anything that needs to be re-hashed, please let me know. Thanks in advance for all the help!
fhbard.mac
Rich (BB code):
#Include FHCommon.inc
#turbo
#Event MobDied "#*#You gain party experience#*#"
#event ding "#*#have gained a level! Welcome to level#*#"
#event end "Shutdown12345"
#event dzadd1 "#*#RANGERNAME tells you, 'Matt'#*#"
#event dzadd2 "OTHERDUDE tells you, 'Matt'"
#event Zoned "#*#You have entered The Guild Lobby#*#"
|#event dzquit "#*#You have entered Nedaria's Landing#*#"
#event Fhalls "You have entered The Forgotten Halls."
#event PoK "#*#You have entered The Guild Lobby#*#"
|Change this to the ^^^^^^^^^^^^^^^
|zone you are bound in
Sub Main
/declare LootAllItems int outer 0
/declare LootSlot int outer 0
/call CommonDeclares
|We are waiting for the hotkey to start the macro
:waitforit
/doevents
/doevents
/goto :waitforit
/return
| We have the extra long delay to account for zoneing Time.
| You may set the delay to what you want.
| You also need to change the twist to your line up.
| We then Clear our target so we don't cast on anything.
Sub event_Fhalls
/speed 4
/delay 40s
:Waitforall
/if (${SpawnCount[pc]}!=2) {
/g Hurry and get your ass in the zone!
/delay 10s
/goto :Waitforall
}
/g Back in Forgotten Halls, Starting fighting again in 20 seconds!
/delay 20s
/call indz
Sub indz
/twist off
/face heading 270
/delay 1s
/warp loc -573.50 162.80 2.15
/circle on 18 -600 160
/keypress forward hold
/target clear
/target clear
/twist 2 3 4 6 5
|This loop calls the events to be redone along with a GM check.
|It checks to insure that the mobs it targets are not over
| level 67(a left over from the vxed mac i think)
|It then check the range of the target if it over 220 it clears it
|The 3rd If command targets an NPC if you do not have a target
|The final Line Watches your health and succor you when you hit 30%
| you could change the command to gate if you like.
| ex /if (${Me.PctHPs}<=30) /gate
:loopstart
/delay 1s
/call GMcheck
/if (${Target.Level}>67) /tar npc next
/if (${Target.Distance}>220) /keypress esc
/if (${Target.ID}==FALSE) /tar NPC radius 220 rat
/if (${Me.PctHPs}<=30) /call regen
/doevents
/delay 10
/goto :loopstart
/return
|I dont like to drop too low on hp so i just change to twist in regen
|with my dots
Sub regen
/twist 2 6
:regenloop
/doevents
/if (${Me.PctHPs}<=30) {
/call succor
/goto :regenloop
}
/if (${Me.PctHPs}>=30) {
/twist 2 3 5 6 4
/call indz
}
/return
|I never had this one called while i was in zone.
| but it warps you to that loc turn circle off
| and twists selos and heal song then when you reach
| 80% health you go back to killing
Sub succor
/twist 6
/delay 1s
/delay 120s
/return
/delay 60
/call regen
/return
| This is the GM check it is called about every 10 seconds.
| It beeps at you then /quits the game.
Sub GMcheck
/if (${Spawn[gm].ID}) {
/echo Gm detected
/beep
/beep
/beep
/closenow
/endmac
/unload
}
/return
|need to change the name of this to the person you want
|added to the adventure
Sub event_dzadd1
/invite RANGERNAME
/delay 2s
/dzadd RANGERNAME
/delay 1s
/return
Sub event_dzadd2
/invite OTHERDUDE
/delay 2s
/dzadd OTHERDUDE
/delay 1s
/return
| This sub follows a group invite.
Sub event_invite
/invite
/return
|This next bit removes you from the expdition if you still have it after
| you zone out
|Targets Eldros Danmor warps to him gets the adventure window then it
| warps back to Nideno and says forgotten halls allowing you to zone in.
|You then warp closer to the rock look at point behind the rock and
| press use or u, also you click with the mouse so you mouse needs to be
| in the center of the screen.
Sub event_dzquit
/doevents
/call gmcheck
/dzremove RANGERNAME
/dzremove OTHERDUDE
/delay 2s
/dzremove BARDNAME
/twist off
/delay 2s
/target Eldros Danmor
/warp target
/delay 2s
/say interested in visiting
/delay 3s
/target Nideno Eliagy
/warp target
/delay 2s
/say Forgotten halls
/delay 2s
/doevents
/warp loc 1544 -665 94
/face loc 1540, -675
/look 0
/doortarget
/delay 10s
/keypress u
/keypress u
/delay 1s
/target clear
:waitforfh
/doevents
/doevents
/goto :waitforfh
/return
|In the event of a water landing....
| This camps you out.
Sub Event_Zoned
/echo Sorry I don't know how or why, but you died.
/circle off
/twist off
/delay 45s
/sit on
/closenow
/endmacro
/return
Sub Event_MobDied
/doevents
/twist off
/delay 3s
/call GMcheck
/circle off
/keypress forward
/delay 1s
/squelch /declare LootSlot int inner 0
/declare LootCheck int inner 0
/declare LootTotal int inner 0
/target npc corpse radius 200
: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
/delay 5
/loot
/delay 5
/if (!${Corpse.Items}) {
/echo NO LOOT!
/notify LootWnd DoneButton leftmouseup
/delay 1s
/call checkanchor
/face heading 270
/circle on 18 -600 160
/keypress forward hold
/return
}
/varset LootTotal ${Corpse.Items}
/for LootSlot 1 to ${LootTotal}
/itemnotify loot${LootSlot} leftmouseup
/delay 5
/if (${LootAllItems}) {
/echo Keeping a ${Cursor.Name}... WOOT!
/autoinventory
/autoinventory
/delay 5
} else {
/for LootCheck 1 to ${ItemsToLoot.Size}
/if (${Cursor.Name.Find[${ItemsToLoot[${LootCheck}]}]}) {
/echo Keeping a ${Cursor.Name}... WOOT!
/autoinventory
/autoinventory
/delay 5
}
/next LootCheck
}
/if (${Cursor.ID}) {
/echo Destroying a ${Cursor.Name}...
/destroy
/destroy
/delay 5
}
/next LootSlot
/delay 5
/notify LootWnd DoneButton leftmouseup
/delay 2
/call checkanchor
/face heading 270
/circle on 18 -600 160
/keypress forward hold
/return
Sub CheckAnchor
/if (${Math.Distance[${AnchorY},${AnchorX}]}>12) /call MoveToAnchor
/return
Sub MoveToAnchor
/call indz
/return
|----------------------------------------------------------------------------
fhcommon.inc
Rich (BB code):
#event Dzquit "#*#You have entered Nedaria's Landing#*#"
#event Movedone "Arrived at MoveTo location"
Sub CommonDeclares
/declare ZoneID int outer ${Zone.ID}
/declare wezoned int outer 0
/echo Finished with Common Declares
/return
Sub event_Dzquit
/declare i int local
/doevents flush
/g We got booted to Nedaria
/varset wezoned 1
/dzremove BARDNAME
/dzremove RANGERNAME
/dzremove OTHERDUDE
/declare bardinzone local TRUE
| If I'm not the bard, skip down to waiting for him to get the mission and zone in.
/if (!${Me.Name.Equal[BARDNAME]}) {
/delay 30s
/goto :others
}
/twist stop
/delay 1s
| Selo's song of travel is in Gem9 for me.
| /twist 9
/speed 4
/delay 2s
/target Eldros Danmor
/warp target
/delay 2s
/say interested in visiting
/delay 3s
/target Nideno Eliagy
/warp target
/delay 2s
/say Forgotten halls
/delay 2s
/doevents
/warp loc 1544 -665 94
/face loc 1540, -675
/look 0
/doortarget
/delay 10s
/keypress u
/keypress u
/delay 1s
/target clear
:others
/if (${Zone.ID}==998) /return
/doevents
| Wait till the bard is no longer in Nedaria, this means the mission has been accepted and he's in FHalls
/if (!${Me.Name.Equal[BARDNAME]} && ${bardinzone}) {
/target BARDNAME
/if (!${Target.ID}) /varset bardinzone FALSE
/delay 5s
/goto :others
}
/if (${Zone.ID}!=998) /goto :others
/return
/delay 40s
:Waitforall
/if (${SpawnCount[pc]}!=2) {
/g Waiting for everyone to zone in.
/delay 10s
/goto :Waitforall
}
/g Back in Forgotten Halls, Starting fighting again in 20 seconds!
/delay 20s
/if (${Me.Name.Equal[bard]}) /twist 1 2 3 4 5
/varset wezoned 0
/return
fhranger.mac
Rich (BB code):
|Forgotten Halls Subordinate Macro
|Written by Moonspell for Redguides.com
|This macro is supposed to have your Ranger
|assist a target and throw axes at it. It will
|automatically summon more axes if you run out
|and end the macro if you are out of axe components.
|Additionally, it'll warp you to the proper starting
|spot, face you in the right direction, then commence
|tossing axes. If your HP gets too low, it will warp
|you away and allow you to meditate back to health.
|Setup: Get invited to your group and get an expo.
|Zone into Nedaria's Landing, run the macro, then
|type "/echo you have entered nedaria's landing"
|without the quotation marks. This should cause your toon
|to warp to the starting npc and zone you into the instance.
|Hotbar configuration.
|Slot 1: Summon Axe Combat Ability
|Slot 2: Ranged Attack
|Slot 3: Potion Belt Two Hotkey
|Slot 4: Rage Volley/Destroyer's Volley
|Be sure to change all instances of bardsName
|with the name of the toon you would like
|the character who is running this macro
|to assist.
|Some of the lines are borrowed from
|the Forgotten Halls AFK bard macro
|and have been edited by me.
|This macro can easily be edited
|to be used by any class that can
|throw items or use a bow. Just get
|an arrow/thrown weapon summing item
|and you're good to go.
#turbo
#event getexpo "#*#You have entered nedaria's landing#*#"
#event kill "#*#You gain party experience#*#"
#event zone "#*#You have entered The Forgotten Halls#*#"
#event noammo "#*#You have run out of ammo#*#"
#event died "#*#You have entered the Guild Lobby#*#"
#event invited "#*#BARDNAME invites you to join a group#*#"
|#event callofearth "#*#Your Call of Earth Spell has worn off BARDNAME#*#"
|#event feetlikecat "#*#Your Feet Like Cat Spell has worn off BARDNAME#*#"
|#event shieldofspikes "#*#Your Shield of Spikes Spell has worn off BARDNAME#*#"
|#event warderprotection "#*#Your skin returns to normal#*#"
Sub Main
|We are waiting for the hotkey to start the macro
/echo <<< Forgotten Halls Subordinate Macro Initiated >>>
/call CommonDeclares
/squelch /t BARDNAME Matt
:waitforit
/doevents
/doevents
/goto :waitforit
/return
Sub CommonDeclares
/declare ZoneID int outer ${Zone.ID}
/declare wezoned int outer 0
/echo Finished with Common Declares
/return
Sub event_invited
/delay 2s
/keypress ctrl+i
/delay 2s
/squelch /g Joined succsessfully!
/return
Sub event_getexpo
/declare i int local
/doevents flush
/varset wezoned 1
/declare bardinzone local TRUE
/dzquit
| If I'm not the bard, skip down to waiting for him to get the mission and zone in.
/if (!${Me.Name.Equal[BARDNAME]}) {
/delay 5s
/goto :others
}
:others
/if (${Zone.ID}==998) /return
/doevents
| Wait till the bard is no longer in Nedaria, this means the mission has been accepted and he's in FHalls
/if (!${Me.Name.Equal[BARDNAME]} && ${bardinzone}) {
/target BARDNAME
/if (!${Target.ID}) /varset bardinzone FALSE
/delay 5s
/goto :others
}
/warp loc 1544 -665 94
/face loc 1540, -675
/look 0
/doortarget
/delay 1s
/keypress u
/delay 1s
/keypress u
:waiting
/doevents
/doevents
/goto :waiting
/if (${Zone.ID}!=998) /goto :others
/return
Sub event_zone
/delay 10s
/face heading 90
/delay 4s
/warp loc -597.71 93.81 1.93
/delay 20s
/call killloop
/return
Sub killloop
/delay 15s
/assist BARDNAME
/autofire
:waitfortarget
/assist BARDNAME
/doevents
/delay 2s
/if (${Target.ID}==FALSE) /goto :waitfortarget
/if (${Target.Distance}>220) /keypress esc
/if (${Me.PctHPs}<=30) /call succor
/doevents
/delay 10
/goto :waitfortarget
/return
Sub event_kill
/delay 3s
/call killloop
Sub succor
/warp loc 245 -33 0
/delay 2s
/sit
:loopheal
/if (${Me.PctHPs}>80) {
/stand
/face heading 90
/warp loc -597.71 93.81 1.93
/delay 4s
/call killloop
/return
}
/delay 60
/goto :loopheal
/return
Sub event_noammo
/keypress 1
/delay 16s
/autoinventory
/delay 3s
/keypress 1
/delay 16s
/autoinventory
/delay 3s
/keypress 1
/delay 16s
/autoinventory
/delay 3s
/keypress 1
/delay 16s
/autoinventory
/delay 3s
/keypress 1
/delay 16s
/autoinventory
/delay 3s
/keypress 1
/delay 16s
/autoinventory
/delay 3s
/keypress 1
/delay 16s
/autoinventory
/delay 3s
/keypress 1
/delay 16s
/autoinventory
/delay 3s
/keypress 1
/delay 16s
/autoinventory
/delay 3s
/keypress 1
/delay 16s
/autoinventory
/delay 3s
/return
Sub event_died
/echo Bring out yer dead! *clang*
/echo Bring out yer dead! *clang*
/echo Bring out yer dead! *clang*
/echo <<< Terminating Macro >>>
/delay 6s
/camp desktop
/delay 60s
/end
/return
Last edited: