| AFMELEE.mac initial version v04.01.08
| 04.01.09 added leashing
| 04.26.09 added param based arguments
| 05.12.09 added many checks for zone
#include spell_routines.inc
#include ChatParse.inc
#turbo 5
#Event Hidem "#*#Hide Em#*#"
#Event Rest "#*#Rest up#*#"
#Event Buffs "#*#Shitheads Buff#*#"
#Event Zoned "LOADING, PLEASE WAIT...
#Event morph "#*#IT'S MORPHIN' TIME!#*#"
#Event Alliance "#*#Alliance Time#*#"
#Event Alliancewar "#*#Alliance Warsyo#*#"
#Event xtarclear "#*#Xtarget Clear Set#*#"
#Event xtarraid "#*#Xtarget Raid Set #1# #2#'"
Sub Main
/stick off
|------------READ THIS SECTION AND EDIT IF NEEDED-----------|
|-- Set spell casting order here
/declare mainassist string outer ${Param0}
/declare autoassist int outer 1
/declare autoassisthealth int outer ${Param1}
/declare autoleash bool outer ${Param2}
/declare stakeX int outer ${Me.X}
/declare stakeY int outer ${Me.Y}
/declare leashlength int outer 50
/declare leashholder string outer Nobody
/declare leashflex int outer 25
/declare i int local
/declare x int local
/declare StartZone int outer ${Zone.ID}
/declare groupbuff string outer Stormblood's Unity Rk. III
/declare grouphealthbuff string outer Spiritual Vivification Rk. II
/declare grouphembuff string outer Spiritual Elaboration Rk. II
/declare healspell string outer Krasir's Mending Rk. III
/declare healspell2 string outer Reckless Regeneration Rk. II
/declare healspellrange int outer 100
/declare pethealspell string outer Jaerol's Mending
/declare pethealspellrange int outer 100
/declare canniwinmode string outer Tribal Pact Rk. III
/declare petyhealspell string outer Salve of Blezon
/declare petyhealspellrange int outer 100
/declare groupheal string outer Krasir's Recourse Rk. II
/declare groupheal2 string outer Historian's Intervention Rk. III
/declare grouphealrange int outer 70
/declare selfhealpoint int outer 70
/declare tankhealpoint int outer 65
/declare casterpatchpoint int outer 70
/declare necshmpatchpoint int outer 50
/declare defaultpatchpoint int outer 75
/declare minorhurt int outer 0
/declare majorhurt int outer 0
/declare worsthurt string outer NULL
/declare worsthurtid int outer
/declare worsthp int outer 100
/declare worstclass string outer NULL
/declare ghealhurtcount int outer 0
/declare gmember int outer
/declare mainassistid int outer
|------------END EDITING------------------------------------|
/declare boolInCombat bool inner FALSE
/if (!${Defined[Param0]}) {
/echo Proper usage: /macro assist TankName assisthealth autoleash
/end
}
/echo Assisting: ${mainassist}, at ${autoassisthealth}, and leashing: ${autoleash}
|------------BEGIN ROUTINES------------------------------------|
/if (${Raid.Members}>=13) {
/target ${mainassist} PC
/varset mainassistid ${Target.ID}
/if (${Target.Distance}>=50) /stick ID ${mainassistid}
}
/echo AFMelee Active
:mainloop
/if (${GameState.Equal[CHARSELECT]}) /end
/if (${Zone.ShortName.Equal[GuildLobby]}) {
/sit
/delay 10m
/camp desktop
}
/if (${Zone.ID} != ${StartZone}) {
/sit
/delay 10m
/camp desktop
}
/call CheckEvents
|-----------------------------
|-- check to see if I should attack
/delay 1
|/if (${Me.XTarget[1].ID})
/assist ${mainassist}
/if (!${Me.Casting.ID} && ${Me.CombatState.Equal[COMBAT]} && !${Me.Buff["Roar of the Lion 6"].ID} && !${Me.Moving} && ${Me.PctMana}>10 && ${Cast.Ready[Roar of the Lion]} && !${Me.Buff["Flamesong of Ro"].ID}) /Casting "Roar of the Lion" gem7 1.5s
/if (!${Me.Casting.ID} && !${Me.Song["Shear of Renewal Rk. III"].ID} && !${Me.Moving} && ${Me.PctMana}>10) /Casting "Shear of Renewal Rk. III" gem4 2s
/if (!${Me.Casting.ID} && !${Me.Buff["Roar of the Lion 6"].ID} && !${Me.Buff["Talisman of the Leopard Rk. II"].ID} && !${Me.Moving} && ${Me.PctMana}>10) /Casting "Talisman of the Leopard Rk. II" gem4 1.5s
/if (!${Me.Casting.ID} && ${Me.PctMana}<=50 && ${Me.PctHPs}>=50) /Casting "${canniwinmode}" gem8 3s
/if (!${Me.Casting.ID} && ${Me.AltAbilityReady[Cannibalization]} && ${Me.PctMana}<=70 && ${Me.PctHPs}>=50) /casting "Cannibalization" alt
/delay 1
/if (${Raid.Members}>=13 && !${Me.CombatState.Equal[COMBAT]} && !${Stick.Active}) /stick ID ${mainassistid}
/if (!${Me.Casting.ID} && ${Me.PctMana}>10 && ${Cast.Ready[Spiritual Swell Rk. III]} && ${Me.Song["Healing Twincast"].ID}) {
/echo Swell
/target ${Me} PC
/delay 1
/Casting "Spiritual Swell Rk. III" gem12 2s
/delay 2s
/squelch /tar clear
}
/if (!${Me.Casting.ID} && ${Me.CombatState.Equal[COMBAT]} && !${Me.Song["Healing Twincast"].ID} && !${Me.Moving} && ${Me.PctMana}>10 && ${Cast.Ready[Glacial Gift Rk. III]}) {
/echo Twincast
/target ${mainassist} PC
/delay 1
/Casting "Glacial Gift Rk. III" gem10 2s
/delay 2s
/squelch /tar clear
}
/if (${Me.Buff["Talisman of the Leopard Rk. II"].ID} && ${Me.Song["Shear of Renewal Rk. III"].ID} && !${Me.Gem[Reckless Regeneration Rk. II]}) /multiline ; /memorize 44328 gem4 ; /echo memming
|-----------------------------
|-- check to see if I am in combat, if I am, then set it as such, so I don't go and reassist.
/if (${Melee.Status.NotEqual[WAITING]}) {
/varset boolInCombat FALSE
} else {
/varset boolInCombat TRUE
}
|-----------------Heals
/varset minorhurt 0
/varset majorhurt 0
/for gmember 0 to ${Group}
/if ((${Group.Member[${gmember}].PctHPs}<=75)&&(${Group.Member[${gmember}].PctHPs}>=60)) /varcalc minorhurt ${minorhurt}+1
/if ((${Group.Member[${gmember}].PctHPs}<=60)&&(${Group.Member[${gmember}].PctHPs}>=1)) /varcalc majorhurt ${majorhurt}+1
/next gmember
/for i 0 to 5
/if (!${Me.Casting.ID} && ${Me.SpellReady[${groupheal}]} && ${Math.Calc[${majorhurt}+${minorhurt}]}>=2) /casting "${groupheal}" gem1 2s
/if (!${Me.Casting.ID} && ${Me.SpellReady[${groupheal2}]} && ${Math.Calc[${majorhurt}+${minorhurt}]}>=3) /casting "${groupheal2}" gem3 2s
/if (!${Me.Casting.ID} && ${Math.Calc[${majorhurt}+${minorhurt}]}<=3 && ${Group.Member[${i}].PctHPs}<=85 && ${Group.Member[${i}].PctHPs}>0 && !${SpawnCount[${Group.Member[${i}]} corpse]} && ${Group.Member[${i}].Distance}<=200) {
/squelch /tar ${Group.Member[${i}]} PC
/delay 1s ${Target.ID}==${Group.Member[${i}].ID}
/if (${Me.SpellReady[${healspell2}]}) /casting "${healspell2}" gem4 1s
/if (${Me.SpellReady[${healspell}]}) /casting "${healspell}" gem2 2.6s
/if (${Me.Casting.ID} && ${Target.PctHPs}>=100) /interrupt
/echo Healing ${Target}
/if (${Me.Casting.ID}==44328) /delay 1s
/if (${Me.Casting.ID}==44293) /delay 2.6s
/delay 2
/squelch /tar clear
}
/next i
/for x 2 to 13
/if (!${Me.Casting.ID} && ${Math.Calc[${majorhurt}+${minorhurt}]}==0 && ${Me.PctMana}>10 && ${Me.XTarget[${x}].Type.Equal[PC]} && ${Me.XTarget[${x}].PctHPs}<=65 && ${Me.XTarget[${x}].PctHPs}>=1 && ${Me.XTarget[${x}].Distance}<=175) {
/squelch /xtar ${x}
/if (${Me.PctMana}>10 && ${Cast.Ready[Spiritual Swell Rk. III]}) /Casting "Spiritual Swell Rk. III" gem12 2s
/if (${Me.SpellReady[${healspell2}]}) /casting "${healspell2}" gem4 1s
/if (${Me.SpellReady[${healspell}]}) /casting "${healspell}" gem2 2.6s
/echo Healing ${Target}
/if (${Me.Casting.ID}==44328) /delay 1s
/if (${Me.Casting.ID}==44293) /delay 2.6s
/delay 2
/squelch /tar clear
}
/next x
|-----------------------------
|-- if not in combat, and I should be assisting, and killing, do so;
|-- the boolInCombat flag keeps from from banging autoattack over and over.
/if (!${Me.Casting.ID} && (${Math.Calc[${majorhurt}+${minorhurt}]}==0) && (${autoassist}==1) && (${Target.Type.Equal[NPC]}) && (${Target.PctHPs}<= ${autoassisthealth}) && (${boolInCombat} == FALSE) && ${${mainassist}.Distance}<50) {
/varset boolInCombat TRUE
/attack on
/echo Damage
|/if (${Target.Distance}>=30 && ${Target.Distance}<=75 && !${Me.Moving} && ${Raid.Members}>13) /stick on
/if (${Target.Distance}<=40) /pet attack
/if (${Target.Distance}<=40) /pet swarm
/if (${Me.AltAbilityReady[177]} && ${Target.PctHPs}<=95 && !${Me.Casting.ID}) /alt activate 177
/if (${Me.AltAbilityReady[50]} && ${Target.PctHPs}<=95 && !${Me.Casting.ID}) /alt activate 50
/if (${Me.AltAbilityReady[Turgur's Swarm]} && !${Target.BuffDuration[Turgur's Swarm VI]} && !${Me.Casting.ID}) /casting "Turgur's Swarm" alt
/if (${Me.CombatState.Equal[COMBAT]} && ${Cast.Ready[57405]} && !${Me.Casting.ID}) /useitem Blessed Spiritstaff of the Heyokah
/if (!${Target.BuffDuration[Reef Crawler Blood Rk. II]} && ${Target.PctHPs}<=95 && ${Me.PctMana}>50 && !${Target.Buff["Reef Crawler Blood Rk. II"].Caster.Equal[${Me}]} && ${Target.PctHPs}>=15 && !${Me.Song["Gift of Mana (105)"].ID} && !${Me.Casting.ID}) /casting "Chaotic Venom Rk. IiI" gem5 .1s
/if (!${Target.BuffDuration[Livio's Affliction Rk. II]} && ${Target.PctHPs}<=95 && ${Me.PctMana}>50 && !${Target.Buff["Livio's Affliction Rk. II"].Caster.Equal[${Me}]} && ${Target.PctHPs}>=15 && !${Me.Casting.ID}) /casting "Livio's Malosenia Rk. II" gem9 3s
/if (!${Target.BuffDuration[Breath of Hemocoraxius Rk. II]} && ${Target.PctHPs}<=95 && ${Me.PctMana}>50 && !${Target.Buff["Breath of Hemocoraxius Rk. II"].Caster.Equal[${Me}]} && ${Target.PctHPs}>=15 && !${Me.Song["Gift of Mana (105)"].ID} && !${Me.Casting.ID}) /casting "Hemocoraxius' Pandemic" gem6 3s
/if (!${Target.BuffDuration[Garugaru Rk. II]} && ${Target.PctHPs}<=95 && ${Me.PctMana}>50 && !${Target.Buff["Garugaru Rk. II"].Caster.Equal[${Me}]} && ${Target.PctHPs}>=15 && !${Me.Casting.ID}) /casting "Garugaru Rk. II" gem7 3s
/if (!${Target.BuffDuration[Sraskus' Curse Rk. II]} && ${Target.PctHPs}<=95 && ${Me.PctMana}>50 && !${Target.Buff["Sraskus' Curse Rk. II"].Caster.Equal[${Me}]} && ${Target.PctHPs}>=15 && !${Me.Casting.ID}) /casting "Sraskus' Curse Rk. II" gem7 3s
/if (${Me.Casting.ID}==49202) /delay 2.5s
/if (${Me.Casting.ID}==44346) /delay 1s
/if (${Me.Casting.ID}==44295) /delay 2.5s
/if (${Me.Casting.ID}==44298) /delay 2.5s
/if (${Me.Casting.ID}==48880) /delay 1s
}
|-----------------------------
|-- should I leash?
/if ((${autoleash} == TRUE) && ${leashholder.Equal[Nobody]} && !${Me.CombatState.Equal[COMBAT]} && (${Math.Distance[${Me.Y},${Me.X}:${stakeY},${stakeX}]}>${leashlength})) {
/goto :LeashStart
}
/goto :mainloop
|-----------------------------
|-- leashing, ganked from RH
:LeashStart
/if (${leashholder.Equal[Nobody]} && (${Math.Distance[${Me.Y},${Me.X}:${stakeY},${stakeX}]}>${Math.Calc[${leashlength}*${leashflex}/100]})) {
/echo Moving closer to the Stake... ${Math.Distance[${Me.Y},${Me.X}:${stakeY},${stakeX}]} ft. away
/face ${If[${Me.Underwater},,nolook]} loc ${stakeY},${stakeX}
/keypress forward hold
/delay 1s ${Math.Distance[${Me.Y},${Me.X}:${stakeY},${stakeX}]}<${Math.Calc[${leashlength}*${leashflex}/100]}
/keypress forward
/if (${Math.Distance[${Me.Y},${Me.X}:${stakeY},${stakeX}]}<${Math.Calc[${leashlength}*${leashflex}/100]}) {
/echo Arrived near enough to the Stake.
/face fast ${If[${Me.Underwater},,nolook]} away loc ${stakeY},${stakeX}
/keypress esc
/goto :mainloop
}
/if (${Zone.ID} != ${StartZone}) {
/sit
/delay 10m
/camp desktop
}
/goto :LeashStart
/return
Sub CheckEvents
/delay 1
/doevents
/return
Sub Event_resumeduty
/echo Back to bidness
/gsay We Obey!
/return
Sub Event_morph
/echo Back to bidness
/delay 3s
/gsay Pterodactyl!
/return
Sub Event_Hidem
/echo Hiding corpses
/hidecorpse npc
/return
Sub Event_Rest
/echo Resting
/sit
/return
Sub Event_Buffs
/echo Casting Buffs
/alt activate 992
/delay 20
/Casting "${groupbuff}" gem11 5s
/delay 6s
/return
Sub Event_Alliance
/declare a int local
/declare gt int local
:alliance
/stick off
/varset minorhurt 0
/varset majorhurt 0
/for gt 0 to ${Group}
/if ((${Group.Member[${gt}].PctHPs}<=75)&&(${Group.Member[${gt}].PctHPs}>=60)) /varcalc minorhurt ${minorhurt}+1
/if ((${Group.Member[${gt}].PctHPs}<=60)&&(${Group.Member[${gt}].PctHPs}>=1)) /varcalc majorhurt ${majorhurt}+1
/next gt
/stick off
/for a 2 to 13
/if (${Math.Calc[${majorhurt}+${minorhurt}]}==0 && ${Me.PctMana}>10 && ${Me.XTarget[${a}].Type.Equal[PC]} && ${Me.XTarget[${a}].PctHPs}>=1 && ${Me.XTarget[${a}].Distance}<=100) {
/squelch /xtar ${a}
/delay 2s
/if (!${Target.Buff["Ancient Alliance Rk. III"].ID}) /casting "Ancient Alliance Rk. III" gem9 2.3s
/delay 2
/if (!${Target.Buff["Ancient Alliance Rk. III"].ID}) /delay 3s
/squelch /tar clear
}
/next a
/return
Sub Event_Alliancewar
/declare a int local
/declare gt int local
:alliance
/stick off
/varset minorhurt 0
/varset majorhurt 0
/for gt 0 to ${Group}
/if ((${Group.Member[${gt}].PctHPs}<=75)&&(${Group.Member[${gt}].PctHPs}>=60)) /varcalc minorhurt ${minorhurt}+1
/if ((${Group.Member[${gt}].PctHPs}<=60)&&(${Group.Member[${gt}].PctHPs}>=1)) /varcalc majorhurt ${majorhurt}+1
/next gt
/stick off
/for a 2 to 13
/if (${Math.Calc[${majorhurt}+${minorhurt}]}==0 && ${Me.PctMana}>10 && ${Me.XTarget[${a}].Type.Equal[PC]} && ${Me.XTarget[${a}].PctHPs}>=1 && ${Me.XTarget[${a}].Distance}<=100) {
/squelch /xtar ${a}
/delay 2s
/if (!${Target.Buff["Ancient Alliance Rk. III"].ID}) /casting "Ancient Alliance Rk. III" gem9 2.3s
/delay 2
/if (!${Target.Buff["Ancient Alliance Rk. III"].ID}) /delay 3s
/squelch /tar clear
}
/next a
/return
Sub Event_xtarclear
/xtarget remove 2
/xtarget remove 3
/xtarget remove 4
/xtarget remove 5
/xtarget remove 6
/xtarget remove 7
/xtarget remove 8
/xtarget remove 9
/xtarget remove 10
/xtarget remove 11
/xtarget remove 12
/xtarget remove 13
/return
Sub Event_xtarraid(string Line,string number,string tank)
/echo setting Tank to ${tank} spot to ${number}
/xtarget set ${number} ${tank}
/return
Sub Event_Buffs
/echo Casting Buffs
/alt activate 992
/delay 20
/Casting "${grouplongbuff}" gem12 16s
/delay 6s
/return
|--------------------------------------------------------------------------------
|SUB: Zoned
|--------------------------------------------------------------------------------
Sub Event_Zoned
/echo Zoned
/444
Sub Event_follow
/mac stick
/return