11/17 Added auto-invis and SoE on all port requests.
11/8 Fixed a problem in Event_Zoned caused by someone (I won't name any names here) casting a Divine Aura type spell on you mid-gate.
I was inspired by MROuija AK's Guild Magus macro, so I decided to write a druid based one. It was a little more difficult since I had to code around the inviting, waiting for acceptance, and then porting and gating back after zoning. But, after a few hours of bug testing and streamlining I think its ready for release. I also added in some of the common druid buffs that get asked for, since he's just standing there doing nothing anyway. It doesn't send tells or check to see if you're even high enough to cast the spell. Spell Routines returns spell not found just fine, and I don't like having chatty bots. Adding in those things if you want them should be easy enough.
It also automatically casts Spirit of Eagle on the person who sends the tell, so they don't have to ask for it; or kick themselves because they forgot to ask for it before the port.
Code: Select all
|DruidPortWhore.mac v1.6
|This mac is made to park a druid at his bind point and leave him there
|to answer buff and port requests. He doesn't do anything too fancy, just |what I wanted him for.
#include spell_routines.inc
#chat tell
#define <guild> "BobsYourUncle"
#event Zoned "You have entered#*#"
Sub Main
/echo Port Bitch Macro Activated
/declare BuffGuy string outer
/declare InviteReturn string outer
/declare InviteTimer timer outer
:loop
/doevents
/delay 2s
/goto :loop
Sub Event_Chat(ChatType,Sender,ChatText)
/varset BuffGuy ${Sender}
/if (${ChatText.Find[Barind]}) {
/call Invite
/if (${InviteReturn.Equal[INVITE_SUCCESS]} && ${Target.Distance}<100) /call Cast "Circle of Barindu" gem6 10s
}
/if ((${ChatText.Find[Bloodf]}) || (${ChatText.Find[BF]})) {
/call Invite
/if (${InviteReturn.Equal[INVITE_SUCCESS]} && ${Target.Distance}<100) /call Cast "Circle of Bloodfields" gem6 10s
}
/if ((${ChatText.Find[Butcher]}) || (${ChatText.Find[BB]})) {
/call Invite
/if (${InviteReturn.Equal[INVITE_SUCCESS]} && ${Target.Distance}<100) /call Cast "Circle of Butcher" gem6 10s
}
/if ((${ChatText.Find[Cobalt]}) || (${ChatText.Find["CS"]})) {
/call Invite
/if (${InviteReturn.Equal[INVITE_SUCCESS]} && ${Target.Distance}<100) /call Cast "Circle of Cobalt Scar" gem6 10s
}
/if ((${ChatText.Find[Common]}) || (${ChatText.Find[WC]})) {
/call Invite
/if (${InviteReturn.Equal[INVITE_SUCCESS]} && ${Target.Distance}<100) /call Cast "Circle of Commons" gem6 10s
}
/if ((${ChatText.Find[Dawns]}) || (${ChatText.Find[DSP]})) {
/call Invite
/if (${InviteReturn.Equal[INVITE_SUCCESS]} && ${Target.Distance}<100) /call Cast "Circle of Dawnshroud" gem6 10s
}
/if (${ChatText.Find[Feer]}) {
/call Invite
/if (${InviteReturn.Equal[INVITE_SUCCESS]} && ${Target.Distance}<100) /call Cast "Circle of Feerrott" gem6 10s
}
/if ((${ChatText.Find[Great]}) || (${ChatText.Find[GD]})) {
/call Invite
/if (${InviteReturn.Equal[INVITE_SUCCESS]} && ${Target.Distance}<100) /call Cast "Circle of Great Divide" gem6 10s
}
/if (${ChatText.Find[Griml]}) {
/call Invite
/if (${InviteReturn.Equal[INVITE_SUCCESS]} && ${Target.Distance}<100) /call Cast "Circle of Grimling" gem6 10s
}
/if ((${ChatText.Find[Icecl]}) || (${ChatText.Find[Icecl]})) {
/call Invite
/if (${InviteReturn.Equal[INVITE_SUCCESS]} && ${Target.Distance}<100) /call Cast "Circle of Iceclad" gem6 10s
}
/if ((${ChatText.Find[NK]}) || (${ChatText.Find["North K"]})) {
/call Invite
/if (${InviteReturn.Equal[INVITE_SUCCESS]} && ${Target.Distance}<100) /call Cast "Circle of Karana" gem6 10s
}
/if ((${ChatText.Find[Knowl]}) || (${ChatText.Find["POK"]})) {
/call Invite
/if (${InviteReturn.Equal[INVITE_SUCCESS]} && ${Target.Distance}<100) /call Cast "Circle of Knowledge" gem6 10s
}
/if (${ChatText.Find[Lava]}) {
/call Invite
/if (${InviteReturn.Equal[INVITE_SUCCESS]} && ${Target.Distance}<100) /call Cast "Circle of Lavastorm" gem6 10s
}
/if (${ChatText.Find[Misty]}) {
/call Invite
/if (${InviteReturn.Equal[INVITE_SUCCESS]} && ${Target.Distance}<100) /call Cast "Circle of Misty" gem6 10s
}
/if (${ChatText.Find[Natim]}) {
/call Invite
/if (${InviteReturn.Equal[INVITE_SUCCESS]} && ${Target.Distance}<100) /call Cast "Circle of Natimbi" gem6 10s
}
/if ((${ChatText.Find[SRo]}) || (${ChatText.Find["South R"]})) {
/call Invite
/if (${InviteReturn.Equal[INVITE_SUCCESS]} && ${Target.Distance}<100) /call Cast "Circle of Ro" gem6 10s
}
/if ((${ChatText.Find[WoS]}) || (${ChatText.Find["Wall of"]}) || (${ChatText.Find[Slaugh]})) {
/call Invite
/if (${InviteReturn.Equal[INVITE_SUCCESS]} && ${Target.Distance}<100) /call Cast "Circle of Slaughter" gem6 10s
}
/if (${ChatText.Find[Steam]}) {
/call Invite
/if (${InviteReturn.Equal[INVITE_SUCCESS]} && ${Target.Distance}<100) /call Cast "Circle of Steamfont" gem6 10s
}
/if (${ChatText.Find[Stoneb]}) {
/call Invite
/if (${InviteReturn.Equal[INVITE_SUCCESS]} && ${Target.Distance}<100) /call Cast "Circle of Stonebrunt" gem6 10s
}
/if ((${ChatText.Find[Surefall]}) || (${ChatText.Find[SFG]})) {
/call Invite
/if (${InviteReturn.Equal[INVITE_SUCCESS]} && ${Target.Distance}<100) /call Cast "Circle of Surefall Glade" gem6 10s
}
/if ((${ChatText.Find[Dread]}) || (${ChatText.Find[DL]}) || (${ChatText.Find[Comb]})) {
/call Invite
/if (${InviteReturn.Equal[INVITE_SUCCESS]} && ${Target.Distance}<100) /call Cast "Circle of the Combines" gem6 10s
}
/if (${ChatText.Find[Nexus]}) {
/call Invite
/if (${InviteReturn.Equal[INVITE_SUCCESS]} && ${Target.Distance}<100) /call Cast "Circle of the Nexus" gem6 10s
}
/if (${ChatText.Find[Tox]}) {
/call Invite
/if (${InviteReturn.Equal[INVITE_SUCCESS]} && ${Target.Distance}<100) /call Cast "Circle of Toxxulia" gem6 10s
}
/if (${ChatText.Find[Twili]}) {
/call Invite
/if (${InviteReturn.Equal[INVITE_SUCCESS]} && ${Target.Distance}<100) /call Cast "Circle of Twilight" gem6 10s
}
/if ((${ChatText.Find[Wakeni]}) || (${ChatText.Find[WL]})) {
/call Invite
/if (${InviteReturn.Equal[INVITE_SUCCESS]} && ${Target.Distance}<100) /call Cast "Circle of Wakening Lands" gem6 10s
}
/if (${ChatText.Find[EK]}) {
/call Invite
/if (${InviteReturn.Equal[INVITE_SUCCESS]} && ${Target.Distance}<100) /call Cast "Succor: East" gem6 10s
}
/if (${ChatText.Find[Skyfi]}) {
/call Invite
/if (${InviteReturn.Equal[INVITE_SUCCESS]} && ${Target.Distance}<100) /call Cast "Wind of the North" gem6 10s
}
/if ((${ChatText.Find["EJ"]}) || (${ChatText.Find[Emeral]})) {
/call Invite
/if (${InviteReturn.Equal[INVITE_SUCCESS]} && ${Target.Distance}<100) /call Cast "Wind of the South" gem6 10s
}
/if (${ChatText.Find["Bind"]}) {
/call Invite
/if (${InviteReturn.Equal[INVITE_SUCCESS]} && ${Target.Distance}<100) /call Cast "Bind Affinity" gem8 10s
/disband
/raiddisband
}
/return
Sub Event_Zoned
/disband
/raiddisband
/doevents flush
:AmIHome
/if (${Zone.ID}!=${Me.Bound.ID}) {
/call Cast Gate gem4
/if (${castReturn.Equal[CAST_INTERRUPTED]}) /goto :AmIHome
/if (${castReturn.Equal[CAST_CANCELLED]}) /goto :AmIHome
}
/return
Sub Invite
/squelch /target clear
/target ${BuffGuy}
/if (!${Target.ID}) {
/echo Failed to get a Target
/varset InviteReturn TARGET_FAILED
/return
}
/varset InviteTimer 10s
/if (${Target.Guild.Equal[<guild>]}) {
/invite
:wait4join
/if (${InviteTimer}==0) {
/echo Invite Timed Out
/varset InviteReturn INVITE_FAILED
/return
}
}
/if (${Group}==0) {
/delay 1s
/goto :wait4join
}
/call Cast "Spirit of Eagle" gem5 10s
/call Cast "Foliage Shield" gem7 10s
/varset InviteReturn INVITE_SUCCESS
/return


