DruidPortWhore.mac v1.6

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

Moderator: MacroQuest Developers

A_Druid_00
Macro Maker Extraordinaire
Posts: 2378
Joined: Tue Jul 13, 2004 12:45 pm
Location: Rolling on the Lawn Farting

DruidPortWhore.mac v1.6

Post by A_Druid_00 » Sun Nov 07, 2004 8:20 am

1/4 Added soulbinder function to the portwhore. Also added /raiddisband so that asshat guildies don't invite you to a raid and leave you unable to invite people. Also changed the Dawnshroud port to look for DSP instead of DS. DS was getting triggered anytime someone asked for a Bloodfields port, sometimes landing people in the wrong zone.
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
Last edited by A_Druid_00 on Sat Jan 08, 2005 9:58 pm, edited 7 times in total.
[quote]<DigitalMocking> man, A_Druid_00 really does love those long ass if statements
<dont_know_at_all> i don't use his macro because i'm frightened of it[/quote]
[quote][12:45] <dont_know_at_all> never use a macro when you can really fuck up things with a plugin[/quote]

MacRogue
a lesser mummy
a lesser mummy
Posts: 38
Joined: Sat Nov 20, 2004 8:34 pm

Post by MacRogue » Sun Jan 02, 2005 12:48 pm

thinking of using this but is there a way to set it up to accept group invits from guildies and add a soul binder function? =)
oh and maybe a pickup request feature maybe, not sure how hard that would be

thinking the group invite thing, set it to take group invites with a 30 or 60 sec time out, ie: no port request in x:time it will drop group and go back to wait mode

A_Druid_00
Macro Maker Extraordinaire
Posts: 2378
Joined: Tue Jul 13, 2004 12:45 pm
Location: Rolling on the Lawn Farting

Post by A_Druid_00 » Mon Jan 03, 2005 11:47 am

It already accepts group invites. If a guildie with a group of 5 sends you an invite and then sends you a tell for a port, the bot will accept the invite and port the whole group.

I'm a nice guy, but I'm not going to spend the time developing a pickup feature. If my guildies want a port, they can bind where I'm bound and invest in a Gate item. I mainly use this just so that my guildies can get to raids in GoD/OoW in a timely manner anyway, not to be their personal taxi.
[quote]<DigitalMocking> man, A_Druid_00 really does love those long ass if statements
<dont_know_at_all> i don't use his macro because i'm frightened of it[/quote]
[quote][12:45] <dont_know_at_all> never use a macro when you can really fuck up things with a plugin[/quote]

MacRogue
a lesser mummy
a lesser mummy
Posts: 38
Joined: Sat Nov 20, 2004 8:34 pm

Post by MacRogue » Tue Jan 04, 2005 2:06 am

ok cool =) didnt know it took group invites, how hard would a snippet for soul binder function be?

Goofmester1
a hill giant
a hill giant
Posts: 241
Joined: Thu Nov 06, 2003 4:26 am

Post by Goofmester1 » Tue Jan 04, 2005 6:50 am

MacRogue try this add this /if block to the bottom of the If statements just before /return like so

Code: Select all

/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" gem6 10s

/return


User avatar
Cr4zyb4rd
Plugins Czar
Posts: 1449
Joined: Tue Jul 20, 2004 11:46 am

Post by Cr4zyb4rd » Tue Jan 04, 2005 7:29 am

I'd add some code to disband after casting the bind (it does this already upon zoning)...otherwise some asshat's bound to run off to PoI and leave you grouped for 3 hours blocking the portbot. :)

A_Druid_00
Macro Maker Extraordinaire
Posts: 2378
Joined: Tue Jul 13, 2004 12:45 pm
Location: Rolling on the Lawn Farting

Post by A_Druid_00 » Tue Jan 04, 2005 10:58 am

Yeah, I'll add it to the top post, thanks goof.

Gave Bind Affinity it's own spell slot though, since it will probably be a semi-common request.
[quote]<DigitalMocking> man, A_Druid_00 really does love those long ass if statements
<dont_know_at_all> i don't use his macro because i'm frightened of it[/quote]
[quote][12:45] <dont_know_at_all> never use a macro when you can really fuck up things with a plugin[/quote]

MacRogue
a lesser mummy
a lesser mummy
Posts: 38
Joined: Sat Nov 20, 2004 8:34 pm

Post by MacRogue » Wed Jan 05, 2005 3:33 am

i figured it was something not too hard to do =) thx now to set my druid up and let everyone know how the heck to use it

xyilla
naggy
naggy
Posts: 29514
Joined: Sun Feb 23, 2025 5:36 am

Re: DruidPortWhore.mac v1.6

Post by xyilla » Mon Feb 24, 2025 7:39 pm


xyilla
naggy
naggy
Posts: 29514
Joined: Sun Feb 23, 2025 5:36 am

Re: DruidPortWhore.mac v1.6

Post by xyilla » Mon Feb 24, 2025 7:40 pm


xyilla
naggy
naggy
Posts: 29514
Joined: Sun Feb 23, 2025 5:36 am

Re: DruidPortWhore.mac v1.6

Post by xyilla » Mon Feb 24, 2025 7:41 pm


xyilla
naggy
naggy
Posts: 29514
Joined: Sun Feb 23, 2025 5:36 am

Re: DruidPortWhore.mac v1.6

Post by xyilla » Mon Feb 24, 2025 7:42 pm


xyilla
naggy
naggy
Posts: 29514
Joined: Sun Feb 23, 2025 5:36 am

Re: DruidPortWhore.mac v1.6

Post by xyilla » Mon Feb 24, 2025 7:43 pm


xyilla
naggy
naggy
Posts: 29514
Joined: Sun Feb 23, 2025 5:36 am

Re: DruidPortWhore.mac v1.6

Post by xyilla » Mon Feb 24, 2025 7:45 pm


xyilla
naggy
naggy
Posts: 29514
Joined: Sun Feb 23, 2025 5:36 am

Re: DruidPortWhore.mac v1.6

Post by xyilla » Mon Feb 24, 2025 7:46 pm