eqemu level 65 or so pal, druid, bers, wiz
Posted: Tue Aug 18, 2015 1:28 am
reserved! this will prolly be pal part1
THESE MACROS ARE NOT SAFE FOR LIVE EVER
---------------------------------------------------
todo : war macro better
todo : sk and pal offtank
todo : bards offtank
bards / monks / sks autopull
ench charm (coordinate planes and cliffs) (no lag allowed)
ench mez is copy paste
todo : rogue -> better movement
hey guys rl got me down for a couple days, caulk should fix this soon
important for casters
/if (${Window[SpellBookWND].Open}) /keypress esc
this goes before :spellsetloop at top of casters macros
prevents them from locking up if you restart macros while casting
gonna finish invis travel grp movement soon, very sorry
09/20/2015?
---------------------------------------------------
|these macros require spellset called level 62 and they require certain spells on spellbar
i cant test the macros cause im crashing when im ranged proccing i think
i had to fix spells in the eqserver cause this guy released it not working
yesterday i fixed pet buffs crashing me, took like 2 hrs had to restudy code
and then im thinking its sending my Message(13, "Comments"); to the pet...
then gotta get to fixing server things im like half done correcting the server
all that's left is rest of zone folder and everything in offline loginserver folder
common folder and stuff has to be checked too, world and ucs are done
this isn't even on an offline comp yet
here is an example of some of the ridiculousness
these may be for rof2 client but im not sure - they aren't for titanium/uf
this also may be for rof2 client but im not sure yet
plz bear with me ---- this didn't even work from the start
wtflol how do you release this -bard was wrong had to be done in spells.cpp
spells.cpp makebuffspacket had to be rewritten -
newmakebuffspacket declared in mob.h, default spellid 30000
double packet sends in spell_effects.cpp
double packet sends are because of the buff0 being sent as empty for no reason
newmakebuffspacket had to be called with default spell id and some, 31234
make sure ur pet buffs aren't rolling over into this from prior bufffadebyslot
im crashing somewhere with this, have to compare to original source, a packet send may be wrong
still didn't find out where that gets done yet i just wanted the thing to work
this is my newmakebuffspacket - spell tics don't eat 6 seconds or add 6 seconds for no reason
you can use some of these techniques in macros
commenting, rerouting, passing variables, for loops, addition
might post working spells.cpp/spell_effects.cpp link when it works
cant wait to do c++ and plugins and stuff getting 1 week distractions
oooh find a way for cigs, oooh find a way for coffee, oooh finish writing macros, oooh playtest macros
oooh fix server glitch, oooh do unnamed things, oooh try and make money, oooh buy more caulk
oooh sleep instead of code, oooh figure out about sigs, oooh figure out about chipsets, oooh study all these things
oooh study c++(important), oooh eat/cook food, oooh try and wake up in morning, oooh reinstall comp occasionally
oooh concoct schemes to pilfer creamer packets/attain creamer its been like 2 and 1/2months of black coffee
study and practice of these things takes precedence, just dragged down by distractions
end up going on a tangent and getting annoyed/unmotivated for hrs
you could also lock ur server with account_id < 70858 && account_id > 70896
in the correct places,that would only allow ALREADY MADE first 36 accts and 3 other bots/traders
if account < ,account >- return;
if account > , account < -do stuff/continue doing stuff, got mine in 4 places
client.cpp(world)
loginserver.cpp(world)
client_process.cpp(zone)
client.cpp(zone) not necessary at this point
my goal is for offline eqemu macros really
paladin.mac part1
paladin does not offtank rlly
paladin does not invuln, rgc, yaulp, crusaders touch, breath of tunare
paladin does not use mgb/purification
paladin does not act of valor, sanctification, or holyforge
stuntimers == cast time of the stun + 0.6
stundurations == durations of the stun supposedly
THESE MACROS ARE NOT SAFE FOR LIVE EVER
---------------------------------------------------
todo : war macro better
todo : sk and pal offtank
todo : bards offtank
bards / monks / sks autopull
ench charm (coordinate planes and cliffs) (no lag allowed)
ench mez is copy paste
todo : rogue -> better movement
hey guys rl got me down for a couple days, caulk should fix this soon
important for casters
/if (${Window[SpellBookWND].Open}) /keypress esc
this goes before :spellsetloop at top of casters macros
prevents them from locking up if you restart macros while casting
gonna finish invis travel grp movement soon, very sorry
09/20/2015?
---------------------------------------------------
|these macros require spellset called level 62 and they require certain spells on spellbar
i cant test the macros cause im crashing when im ranged proccing i think
i had to fix spells in the eqserver cause this guy released it not working
yesterday i fixed pet buffs crashing me, took like 2 hrs had to restudy code
and then im thinking its sending my Message(13, "Comments"); to the pet...
then gotta get to fixing server things im like half done correcting the server
all that's left is rest of zone folder and everything in offline loginserver folder
common folder and stuff has to be checked too, world and ucs are done
this isn't even on an offline comp yet
here is an example of some of the ridiculousness
these may be for rof2 client but im not sure - they aren't for titanium/uf
Code: Select all
case OP_WorldComplete: ////////////////////////////////////////////////////////////////////////////
{
eqs->Close();
return false;
}Code: Select all
case OP_LoginUnknown1:
{
return false; //why does this case exist???? false works
}
case OP_LoginUnknown2:
{
return false; //why does this case exist???? false works
}Code: Select all
void Client::SendBuffDurationPacket(Buffs_Struct &buff)
{
Message(13, "SendBuffDurationPacket");
return;
}
// EQApplicationPacket* outapp;
// outapp = new EQApplicationPacket(OP_Buff, sizeof(SpellBuffFade_Struct));
// SpellBuffFade_Struct* sbf = (SpellBuffFade_Struct*) outapp->pBuffer;
//
// sbf->entityid = GetID();
// sbf->slot = 2;
// sbf->spellid = buff.spellid;
// sbf->slotid = 0;
// sbf->level = buff.casterlevel > 0 ? buff.casterlevel : GetLevel();
//
// if (IsEffectInSpell(buff.spellid, SE_TotalHP))
// {
// // If any of the lower 6 bits are set, the GUI changes MAX_HP AGAIN.
// // If its set to 0 the effect is cancelled.
// // 128 seems to work (ie: change only duration).
// sbf->effect = 128;
// }
// else if (IsEffectInSpell(buff.spellid, SE_CurrentHP))
// {
// // This is mostly a problem when we try and update duration on a
// // dot or a hp->mana conversion. Zero cancels the effect, any
// // other value has the GUI doing that value at the same time server
// // is doing theirs. This makes the two match.
// int index = GetSpellEffectIndex(buff.spellid, SE_CurrentHP);
// sbf->effect = abs(spells[buff.spellid].base[index]);
// }
// else
// {
// // Default to what old code did until we find a better fix for
// // other spell lines.
// sbf->effect=sbf->level;
// }
//
// sbf->bufffade = 0;
// sbf->duration = buff.ticsremaining;
// sbf->num_hits = buff.numhits;
// FastQueuePacket(&outapp);
//}Code: Select all
// generic formula calculations
int Mob::CalcSpellEffectValue_formula(int formula, int base, int max, int caster_level, uint16 spell_id, int ticsremaining)
{
/*
i need those formulas checked!!!!
0 = base
1 - 99 = base + level * formulaID
100 = base
101 = base + level / 2
102 = base + level
103 = base + level * 2
104 = base + level * 3
105 = base + level * 4
106 ? base + level * 5
107 ? min + level / 2
108 = min + level / 3
109 = min + level / 4
110 = min + level / 5
119 ? min + level / 8
121 ? min + level / 4
122 = splurt
123 ?
203 = stacking issues ? max
205 = stacking issues ? 105newmakebuffspacket declared in mob.h, default spellid 30000
double packet sends in spell_effects.cpp
double packet sends are because of the buff0 being sent as empty for no reason
newmakebuffspacket had to be called with default spell id and some, 31234
make sure ur pet buffs aren't rolling over into this from prior bufffadebyslot
im crashing somewhere with this, have to compare to original source, a packet send may be wrong
still didn't find out where that gets done yet i just wanted the thing to work
this is my newmakebuffspacket - spell tics don't eat 6 seconds or add 6 seconds for no reason
Code: Select all
void Mob::NewMakeBuffsPacket(bool for_target, uint16 spell_id)
{
int npc = 0;
if(IsNPC() && spell_id < 30001) {
int npc = 1;
Message(13, "ISNPC NEWMAKEBUFFSPACKET - can change spelleffects fadingspell");
}
Message(13, "newmakebuffspacket");
Message(13, "newmakebuffspacket-spellid %d", spell_id);
int j = 0;
uint32 count = 0;
uint32 buff_count = GetMaxTotalSlots();
for(unsigned int i = 0; i < buff_count; ++i)
{
if(buffs[i].spellid != SPELL_UNKNOWN)
{
if(buffs[i].spellid > 2 && buffs[i].spellid < 30000) {
}
++count;
}
}
int spellcount = 0;
int songcount = 0;
for(int var = 0; var < 38; var++) {
if(buffs[var].spellid != SPELL_UNKNOWN && var < 25) {
++spellcount;
}
if(buffs[var].spellid != SPELL_UNKNOWN && var > 24) {
++songcount;
}
}
Message(13, "finding spells! spellcount - %d, songcount - %d", spellcount, songcount);
EQApplicationPacket* outapp = nullptr;
//Create it for a targeting window, else create it for a create buff packet.
if(for_target)
{
outapp = new EQApplicationPacket(OP_TargetBuffs, sizeof(BuffIcon_Struct) + sizeof(BuffIconEntry_Struct) * count);
}
else
{
outapp = new EQApplicationPacket(OP_BuffCreate, sizeof(BuffIcon_Struct) + sizeof(BuffIconEntry_Struct) * count);
}
BuffIcon_Struct *buff = (BuffIcon_Struct*)outapp->pBuffer;
buff->entity_id = GetID();
buff->count = count;
buff->all_buffs = 0;
uint32 index = 0;
for(int i = 0; i < buff_count; ++i)
{
if(buffs[i].spellid == spell_id || buffs[i].spellid == 30001) {
if(buffs[i].spellid < 30000) {
Message(13, "buffs i not fading - adjusting index");
if(i < 25) {
index = spellcount + songcount;
index = index + 10 - 11;
}
}
}
if(buffs[i].spellid != SPELL_UNKNOWN && buffs[i].spellid < 30000)
{
if(buffs[i].spellid == spell_id) {
Message(13, "index...%d i...%d", index, i);
buff->entries[index].buff_slot = i;
buff->entries[index].spell_id = buffs[i].spellid;
buff->entries[index].tics_remaining = buffs[i].ticsremaining;
buff->entries[index].num_hits = buffs[i].numhits;
break;
}
++index;
}
if(buffs[i].spellid == 30001) {
Message(13, "NOT spell_unknown and ID = 30001");
Message(13, "buffs i = %d, index = %d", i, index);
j = i;
buffs[i].spellid = SPELL_UNKNOWN;
buff->entries[index].buff_slot = i;
buff->entries[index].spell_id = 0;
buff->entries[index].tics_remaining = 0;
buff->entries[index].num_hits = 0;
++index;
break;
}
}
if(for_target == false) {
if(spell_id == 30001) {
buffs[j].spellid = SPELL_UNKNOWN;
}
CastToClient()->FastQueuePacket(&outapp);
safe_delete(outapp);
return;
}
if(spell_id == 31234 || npc == 1) {
entity_list.QueueClientsByTarget(this, outapp, false, nullptr, true, false, BIT_SoDAndLater, true);
safe_delete(outapp);
return;
}
entity_list.QueueClientsByTarget(this, outapp, false, nullptr, true, false, BIT_SoDAndLater);
if(IsClient() && GetTarget() == this)
CastToClient()->QueuePacket(outapp);
safe_delete(outapp);
if(buffs[j].spellid == SPELL_UNKNOWN && spell_id == 30001) {
buffs[j].spellid = 30001;
}
return;
}commenting, rerouting, passing variables, for loops, addition
might post working spells.cpp/spell_effects.cpp link when it works
cant wait to do c++ and plugins and stuff getting 1 week distractions
oooh find a way for cigs, oooh find a way for coffee, oooh finish writing macros, oooh playtest macros
oooh fix server glitch, oooh do unnamed things, oooh try and make money, oooh buy more caulk
oooh sleep instead of code, oooh figure out about sigs, oooh figure out about chipsets, oooh study all these things
oooh study c++(important), oooh eat/cook food, oooh try and wake up in morning, oooh reinstall comp occasionally
oooh concoct schemes to pilfer creamer packets/attain creamer its been like 2 and 1/2months of black coffee
study and practice of these things takes precedence, just dragged down by distractions
end up going on a tangent and getting annoyed/unmotivated for hrs
you could also lock ur server with account_id < 70858 && account_id > 70896
in the correct places,that would only allow ALREADY MADE first 36 accts and 3 other bots/traders
if account < ,account >- return;
if account > , account < -do stuff/continue doing stuff, got mine in 4 places
client.cpp(world)
loginserver.cpp(world)
client_process.cpp(zone)
client.cpp(zone) not necessary at this point
my goal is for offline eqemu macros really
paladin.mac part1
paladin does not offtank rlly
paladin does not invuln, rgc, yaulp, crusaders touch, breath of tunare
paladin does not use mgb/purification
paladin does not act of valor, sanctification, or holyforge
stuntimers == cast time of the stun + 0.6
stundurations == durations of the stun supposedly
Code: Select all
#turbo 40
#chat tell
#chat group
#chat guild
#Event Follow "#1#tells the#*#, '#2#follow'"
#Event MakeCamp "#*#tells the#*#, '#2#make camp'"
#Event GuildAssist "#1#tells the#*#, 'assist me with#*#'"
#Event Enraged "#1# enraged#*#"
#Event Buff "#1#tells#*#, 'buff#2#'"
#Event Toggle "#1#guild, '#2#toggle#3#'"
#Event Movement "#1#guild, '#2#goto#3#'"
#include spell_routines.inc
Sub Main
/declare randomstring string outer "glitchishere"
/declare quickhealspell string outer "Light of Order"
/declare grouphealspell string outer "Healing Wave of Prexus"
/declare healovertimespell string outer "Supernal Cleansing"
/declare stunone string outer "Quellious' Word of Serenity"
/declare stuntwo string outer "Force of Akilae"
/declare stunthree string outer "Ancient: Force of Chaos"
/declare stunfour string outer "Cease"
/declare hpbuffspell string outer "Brell's Stalwart Shield"
/declare selfhpbuffspell string outer "Aura of the Crusader"
/declare selfhastebuffspell string outer "Valor of Marr"
/declare selfprocbuffspell string outer "Holy Order"
/declare invulnspell string outer "Divine Aura"
/declare rezspell string outer "Resurrection"
/declare guarddisc string outer "Guard of Humility"
/declare dostuns string outer 1
/declare dogrpheals int outer 1
/declare quickhealat int outer 60
/declare stunat int outer 98
/declare lohat int outer 20
/declare assistat int outer 98
/declare stunonetimer int outer 26
/declare stuntwotimer int outer 16
/declare stunthreetimer int outer 16
/declare stunfourtimer int outer 21
/declare hpselfbuffduration int outer 108000
/declare selfhastebuffduration int outer 22800
/declare selfprocbuffduration int outer 46200
/declare stunoneduration int outer 100
/declare stuntwoduration int outer 40
/declare stunthreeduration int outer 40
/declare stunfourduration int outer 10
/declare hpselfbufftimer timer outer 0
/declare selfhastebufftimer timer outer 0
/declare selfprocbufftimer timer outer 0
/declare stuntimer timer outer 0
/declare sticktype string outer behindonce loose 8
/declare makecamploc string outer ${Me.Y},${Me.X}
/declare amtanking int outer 0
/declare HealOutOfGroup int outer 0
/declare dontmelee int outer 0
/declare didstick int outer 0
/declare gettarget int outer 1
/declare targetdead int outer 1
/declare targetid int outer 0
/declare ammoving int outer 0
/squelch /stick off
/if (!${Me.Book[Holy Order]}) {
/varset selfprocbuffspell "Pious Might"
/echo setting selfproc spell to "Pious Might", "Holy Order" not found
}
/if (!${Me.Book[Ancient: Force of Chaos]}) {
/varset stunthree "Desist"
/varset stunthreetimer 16
/varset stunthreeduration 10
/echo autosetting stunthree to "desist", ancient stun spell not found
}
/if (!${Me.Book[Light of Order]}) {
/varset quickhealspell "Light of Nife"
/echo "Light of Order" not found, setting healspell to "Light of Nife"
}
/if (!${Me.CombatAbility[Guard of Humility]}) {
/varset guarddisc "Guard of Piety"
/echo Guard of Humility not found, setting guarddisc to guard of piety
}
/declare mainassist string outer
/varset mainassist ${Param0}
/echo paladin macro started
:spellsetloop
/if (${NearestSpawn[PC ${Me.Name}].Name.Find[${Me.Name}]}) {
/memspellset level 62
/delay 46s !${Window[SpellBookWND].Open}
}
/delay 2
/if (!${NearestSpawn[PC ${Me.Name}].Name.Find[${Me.Name}]}) /goto :spellsetloop
:loop
/doevents
/call checkstuff
/if (!${ammoving} && ${Bool[${leashloc}]}) /call gotoloc
/if (!${ammoving}) /call cleartarget
/if (!${ammoving} && ${dogrpheals} == 1) /call checkheals
/if (!${ammoving} && ${HealOutOfGroup} == 1) /call checkhealsoutofgroup
/if (${gettarget} && !${ammoving}) /call gettarget
/if (${targetid} == ${Target.ID} && !${ammoving}) /call killtarg
/if (!${ammoving}) /call checkbuffs
/if (${Me.PctMana} < 95 && !${Me.Casting.ID} && !${ammoving} && ${Me.Standing} && !${Me.Moving} && ${Me.CombatState.NotEqual[COMBAT]}) /sit
/delay 2
/goto :loop
Sub gettarget
/call getids "${mainassist}"
/if (${Spawn[${Macro.Return}].ID} && ${Spawn[id ${Macro.Return}].Distance} < 200) {
/target ID ${Macro.Return}
/delay 2
/assist
/delay 4
/if (${Target.Type.Equal[NPC]} && ${Target.Type.NotEqual[CORPSE]} && ${Target.PctHPs} < ${assistat} && ${Target.Distance} < 200) {
/varset targetid ${Target.ID}
/varset targetdead 0
/varset gettarget 0
/g assisting on %t
/echo My Target is now ${Target.CleanName}
/if (${Me.Pet.ID}) /pet attack
}
}
/return
Sub killtarg
/if (!${didstick} && ${Target.Type.Equal[NPC]} && ${Target.ID} == ${targetid}) {
/face fast nolook id ${targetid}
/attack on
/stick ${sticktype}
/if (${Me.Pet.ID}) /pet attack
/varset didstick 1
/delay 2
}
/if (${amtanking} == 1) {
/if (${Me.AbilityReady["Taunt"]} && ${Target.Type.Equal[NPC]}) {
/if (${dontmelee} == 0) {
/doability "Taunt"
}
}
}
/if (${Me.AbilityReady["Bash"]} && ${Target.Type.Equal[NPC]}) {
/if (${dontmelee} == 0) {
/doability "Bash"
}
}
/if (${amtanking} == 1 || ${dostuns.Arg[1,,].Equal[1]}) {
/if (!${amtanking} && ${dostuns.Arg[2,,].Equal[1]} || !${amtanking} && ${Target.Level} > 65) /goto :afterstuns
/if (${Me.SpellReady[${stunone}]} && ${stuntimer} <= ${stunonetimer}) {
/squelch /stick off
/delay 2
/call cast ${stunone} 1s
/varset didstick 0
/if (${Macro.Return.Equal["CAST_SUCCESS"]}) {
/varset stuntimer ${stunoneduration}
/goto :afterstuns
}
/if (${Macro.Return.Equal["CAST_IMMUNE"]}) {
/varset dostuns ${dostuns},1
/goto :afterstuns
}
}
/if (${Me.SpellReady[${stuntwo}]} && ${stuntimer} <= ${stuntwotimer}) {
/squelch /stick off
/delay 2
/call cast ${stuntwo} 1s
/varset didstick 0
/if (${Macro.Return.Equal["CAST_SUCCESS"]}) {
/varset stuntimer ${stuntwoduration}
/goto :afterstuns
}
/if (${Macro.Return.Equal["CAST_IMMUNE"]}) {
/varset dostuns ${dostuns},1
/goto :afterstuns
}
}
/if (${stunthree.Find[Desist]} && !${amtanking}) /goto :afterstuns
/if (${Me.SpellReady[${stunthree}]} && ${stuntimer} <= ${stunthreetimer}) {
/squelch /stick off
/delay 2
/call cast ${stunthree} 1s
/varset didstick 0
/if (${Macro.Return.Equal["CAST_SUCCESS"]}) {
/varset stuntimer ${stunthreeduration}
/goto :afterstuns
}
/if (${Macro.Return.Equal["CAST_IMMUNE"]}) {
/varset dostuns ${dostuns},1
/goto :afterstuns
}
}
/if (!${amtanking}) /goto :afterstuns
/if (${Me.SpellReady[${stunfour}]} && ${stuntimer} <= ${stunfourtimer}) {
/squelch /stick off
/delay 2
/call cast ${stunfour} 1s
/varset didstick 0
/if (${Macro.Return.Equal["CAST_SUCCESS"]}) {
/varset stuntimer ${stunfourduration}
/goto :afterstuns
}
/if (${Macro.Return.Equal["CAST_IMMUNE"]}) {
/varset dostuns ${dostuns},1
/goto :afterstuns
}
}
}
:afterstuns
/if (${Me.PctHPs} < 30 && ${Me.AltAbilityReady["Hand of Piety"]}) {
/guildsay hand of piety inc
/alt act Hand of Piety
}
/if (${Me.PctHPs} < ${lohat}) {
/if (${Me.AltAbilityReady["Lay on Hands"]}) {
/target ID ${Me.ID}
/delay 2
/echo LOH on ${Target.Name}
/aa act Lay on Hands
}
}
/if (${Me.PctHPs} < 20 && ${Me.CombatAbilityReady["Deflection"]} && ${targetid}) {
/if (${Math.Calc[360 - ${Me.Heading.Degrees}]} == ${Target.Heading.Degrees} && ${Me.Heading.Degrees} != 180 || ${Me.Heading.Degrees} == 180 && ${Target.Heading.Degrees} == 360 || ${Me.Heading.Degrees} == 180 && ${Target.Heading.Degrees} == 0) {
/guildsay clicking off whatever disc for deflection
/nomodkey /notify CombatAbilityWnd CAW_CombatEffectButton leftmouseup
/delay 2
/guildsay doing deflection disc
/doability "Deflection"
}
}
/if (${Me.PctHPs} < 65 && ${Me.CombatAbilityReady[${guarddisc}]} && ${targetid}) {
/if (${Math.Calc[360 - ${Me.Heading.Degrees}]} == ${Target.Heading.Degrees} && ${Me.Heading.Degrees} != 180 || ${Me.Heading.Degrees} == 180 && ${Target.Heading.Degrees} == 360 || ${Me.Heading.Degrees} == 180 && ${Target.Heading.Degrees} == 0) {
/guildsay doing ${guarddisc} disc
/doability ${guarddisc}
}
}
/if (${Me.AltAbilityReady["Divine Stun"]} && ${Target.Type.Equal[NPC]}) {
/squelch /stick off
/delay 2
/aa act Divine Stun
}
/return
Sub checkbuffs
/if (${Me.CombatState.Equal[COMBAT]}) /return
/if (${Me.Book[${selfhpbuffspell}]} && !${Me.Buff[${selfhpbuffspell}].ID} && !${Window[SpellBookWnd].Open} || ${Me.Book[${selfhpbuffspell}]} && ${hpselfbufftimer} < 6000 && !${Window[SpellBookWnd].Open}) {
/if (!${Me.Gem[${selfhpbuffspell}]} && ${Me.CombatState.NotEqual[COMBAT]} && ${Me.Gem[${quickhealspell}]}) {
/memspell 7 ${selfhpbuffspell}
/delay 16s ${Me.SpellReady[${selfhpbuffspell}]}
/keypress w
}
/if (${Me.SpellReady[${selfhpbuffspell}]} && ${Me.CurrentMana} > ${Spell[${selfhpbuffspell}].Mana} && ${Me.CombatState.NotEqual[COMBAT]} && !${Window[SpellBookWND].Open} && !${Me.Moving}) {
/g self buffing myself with ${selfhpbuffspell}
/echo self buffing myself with ${selfhpbuffspell}
/call cast ${selfhpbuffspell} 2s
/if (${Macro.Return.Equal["CAST_SUCCESS"]}) {
/varset hpselfbufftimer ${hpselfbuffduration}
}
}
}
/if (${Me.Book[${selfprocbuffspell}]} && !${Me.Buff[${selfprocbuffspell}].ID} && !${Window[SpellBookWnd].Open} || ${Me.Book[${selfprocbuffspell}]} && ${selfprocbufftimer} < 2000 && !${Window[SpellBookWnd].Open}) {
/if (!${Me.Gem[${selfprocbuffspell}]} && ${Me.CombatState.NotEqual[COMBAT]} && ${Me.Gem[${quickhealspell}]}) {
/memspell 7 ${selfprocbuffspell}
/delay 16s ${Me.SpellReady[${selfprocbuffspell}]}
/keypress w
}
/if (${Me.SpellReady[${selfprocbuffspell}]} && ${Me.CurrentMana} > ${Spell[${selfprocbuffspell}].Mana} && ${Me.CombatState.NotEqual[COMBAT]} && !${Window[SpellBookWND].Open} && !${Me.Moving}) {
/g self buffing myself with ${selfprocbuffspell}
/echo self buffing myself with ${selfprocbuffspell}
/call cast ${selfprocbuffspell} 2s
/if (${Macro.Return.Equal["CAST_SUCCESS"]}) {
/varset selfprocbufftimer ${selfprocbuffduration}
}
}
}
/if (${Me.Book[${selfhastebuffspell}]} && !${Me.Buff[${selfhastebuffspell}].ID} && !${Window[SpellBookWnd].Open} || ${Me.Book[${selfhastebuffspell}]} && ${selfhastebufftimer} < 2000 && !${Window[SpellBookWnd].Open}) {
/if (!${Me.Gem[${selfhastebuffspell}]} && ${Me.CombatState.NotEqual[COMBAT]} && ${Me.Gem[${quickhealspell}]}) {
/memspell 7 ${selfhastebuffspell}
/delay 16s ${Me.SpellReady[${selfhastebuffspell}]}
/keypress w
}
/if (${Me.SpellReady[${selfhastebuffspell}]} && ${Me.CurrentMana} > ${Spell[${selfhastebuffspell}].Mana} && ${Me.CombatState.NotEqual[COMBAT]} && !${Window[SpellBookWND].Open} && !${Me.Moving}) {
/g self buffing myself with ${selfhastebuffspell}
/echo self buffing myself with ${selfhastebuffspell}
/call cast ${selfhastebuffspell} 2s
/if (${Macro.Return.Equal["CAST_SUCCESS"]}) {
/varset selfhastebufftimer ${selfhastebuffduration}
}
}
}
/if (${dogrpheals} == 1) /call checkheals
/if (${HealOutOfGroup}) /call checkhealsoutofgroup
/return
Sub checkstuff
/if (${Cursor.Name.Equal[Rod of Mystical Transvergence]}) {
/if (${Me.FreeInventory} < 1) {
/guildsay mod rod on cursor but no inventory room
/return
}
/if (${Me.FreeInventory} > 1) /autoinv
}
/if (!${Me.Invis}) {
/if (${FindItem[=Rod of Mystical Transvergence].ID}) {
/if (!${FindItem[=Rod of Mystical Transvergence].TimerReady}) {
/if (!${Cursor.ID} && ${Me.PctMana} < 85 && ${Me.CurrentHPs} > 4000) {
/call clickitem "Rod of Mystical Transvergence" "inv"
}
}
}
}
/if (!${InvSlot[13].Item.ID}) {
/if (!${InvSlot[17].Item.ID}) {
/if (${Zone.ShortName.Equal[poknowledge]} || ${Zone.ShortName.Equal[guildlobby]} || !${InvSlot[18].Item.ID}) {
/if (${MacroQuest.GameState.NotEqual[INGAME]}) /return
/if (!${Me.Gem[8].ID}) {
:spellsetloop
/if (${NearestSpawn[PC ${Me.Name}].Name.Find[${Me.Name}]}) {
/memspellset level 62
/delay 46s !${Window[SpellBookWND].Open}
}
/delay 2
/if (!${NearestSpawn[PC ${Me.Name}].Name.Find[${Me.Name}]}) /goto :spellsetloop
}
/if (!${Defined[amnaked]}) /declare amnaked int local 100
/if (!${Window[SpellBookWnd].Open}) /guildsay <==== i died ====>
/if (!${Window[SpellBookWnd].Open} && ${Defined[amnaked]}) /docommand /mac rez ${mainassist} ${amnaked}
/if (!${Window[SpellBookWnd].Open}) /docommand /mac rez ${mainassist}
}
}
}
/return
Sub checkheals
/declare i int local
/for i 0 to ${Group}
/if (${Group.Member[${i}].PctHPs} < ${quickhealat} && ${Group.Member[${i}].Distance} < 200 && ${Group.Member[${i}].ID} && ${Group.Member[${i}].Type.NotEqual[CORPSE]} && ${Me.CurrentMana} > ${Spell[${quickhealspell}].Mana} && ${Me.SpellReady[${quickhealspell}]}) {
/squelch /stick off
/target ID ${Group.Member[${i}].ID}
/delay 2
/if (${Target.Type.Equal[PC]} && ${Target.ID} == ${Group.Member[${i}].ID}) {
/if (${Target.PctHPs} < ${lohat}) {
/if (${Me.AltAbilityReady["Lay on Hands"]}) {
/echo LOH on ${Target.Name}
/aa act Lay on Hands
/next i
}
/if (${Me.AltAbilityReady["Hand of Piety"]}) {
/guildsay hand of piety inc
/alt act Hand of Piety
}
}
/g Quick Heal incoming >>>> %t <<<<
/call cast ${quickhealspell} 2s checkhealed
}
}
/next i
/if (!${Group} && ${Me.PctHPs} < ${quickhealat} && ${Me.CurrentMana} > ${Spell[${quickhealspell}].Mana} && ${Me.SpellReady[${quickhealspell}]}) {
/squelch /stick off
/target ID ${Me.ID}
/delay 2
/say Quick Heal incoming >>>> %t <<<<
/call cast ${quickhealspell} 2s checkhealed
}
/call cleartarget
/return
Sub checkhealsoutofgroup
/declare mob int local 1
/declare j int local 1
/declare i int local 1
/for j 1 to 8
/if (${Me.PctMana} > 4) {
/call getids "${mainassist}"
/if (${Spawn[${Macro.Return}].ID} && ${Spawn[id ${Macro.Return}].Distance} < 200) {
/target ID ${Macro.Return}
/delay 2
/if (${Target.Type.Equal[PC]} && ${Target.Distance} < 200 && ${Target.PctHPs} < ${quickhealat} && ${Me.CurrentMana} > ${Spell[${quickhealspell}].Mana} && !${Me.Moving}) {
/delay 1s ${Me.SpellReady[${quickhealspell}]}
/say Incoming Quick heal on >>>> %t <<<<
/call cast ${quickhealspell} 2s checkhealed
/echo healed based off mainassist
}
}
/if (${targetid}) {
/if (${Spawn[id ${targetid}].ID} && ${Spawn[id ${targetid}].Type.NotEqual[CORPSE]}) {
/target ID ${targetid}
/delay 2
/assist
/delay 3
/if (${Target.Type.Equal[PC]} && ${Target.PctHPs} < ${quickhealat} && ${Target.Distance} < 200 && ${Me.CurrentMana} > ${Spell[${quickhealspell}].Mana} && !${Me.Moving}) {
/delay 1s ${Me.SpellReady[${quickhealspell}]}
/say Incoming Quick heal on >>>> %t <<<<
/call cast ${quickhealspell} 2s checkhealed
/echo healing based off targetid
}
}
}
/for mob 1 to 8
/if (${Me.PctHPs} < 60 && ${Me.CurrentMana} > ${Spell[${quickhealspell}].Mana} && !${Me.Moving}) {
/target ID ${Me.ID}
/delay 2
/delay 15 ${Me.SpellReady[${quickhealspell}]}
/say Quick Heal incoming >>>> %t <<<<
/call cast ${quickhealspell} 2s checkhealed
}
/if (${targetarray[${mob}]} && ${Spawn[id ${targetarray[${mob}]}].Type.Equal[NPC]}) {
/target ID ${targetarray[${mob}]}
/delay 2
/assist
/delay 3
/if (${Target.Type.Equal[PC]} && ${Target.PctHPs} < ${quickhealat} && ${Target.Distance} < 200 && ${Me.CurrentMana} > ${Spell[${quickhealspell}].Mana} && !${Me.Moving}) {
/delay 1s ${Me.SpellReady[${quickhealspell}]}
/say Incoming Quick Heal on >>>> %t <<<<
/call cast ${quickhealspell} 2s checkhealed
/echo healed based off target array
}
}
/next mob
/for i 1 to ${SpawnCount[npc los radius 200]}
/if (${NearestSpawn[${i},npc los notid ${targetid}].ID} && ${NearestSpawn[${i},npc los notid ${targetid}].Type.NotEqual[CORPSE]} && ${NearestSpawn[${i},npc los notid ${targetid}].ID} != ${targetarray[1]} && ${NearestSpawn[${i},npc los notid ${targetid}].ID} != ${targetarray[2]} && ${NearestSpawn[${i},npc los notid ${targetid}].ID} != ${targetarray[3]} && ${NearestSpawn[${i},npc los notid ${targetid}].ID} != ${targetarray[4]} && ${NearestSpawn[${i},npc los notid ${targetid}].ID} != ${targetarray[5]} && ${NearestSpawn[${i},npc los notid ${targetid}].ID} != ${targetarray[6]} && ${NearestSpawn[${i},npc los notid ${targetid}].ID} != ${targetarray[7]} && ${NearestSpawn[${i},npc los notid ${targetid}].ID} != ${targetarray[8]}) {
/if (${NearestSpawn[${i},npc los notid ${targetid}].Distance} < 200) {
/squelch /target ID ${NearestSpawn[${i},npc los notid ${targetid}].ID}
/delay 2
/if (${Target.Type.Equal[NPC]} && ${Target.Type.NotEqual[CORPSE]}) {
/varset oldtarget ${Target.ID}
/assist
/delay 3
/if (${Target.Type.Equal[PC]}) {
/echo ${Spawn[${oldtarget}].Name} is an add ~ now adding to targetarray
/if (${Target.PctHPs} < ${quickhealat} && ${Target.Distance} < 200 && ${Me.CurrentMana} > ${Spell[${quickhealspell}].Mana} && ${Me.SpellReady[${quickhealspell}]} && !${Me.Moving}) {
/delay 1s ${Me.SpellReady[${quickhealspell}]}
/call cast ${quickhealspell} 2s checkhealed
}
/target ID ${oldtarget}
/delay 2
/if (${Target.Type.Equal[NPC]} && ${Target.Type.NotEqual[CORPSE]} && ${Target.ID} !=${targetid} && ${Target.ID} != ${targetarray[1]} && ${Target.ID} != ${targetarray[2]} && ${Target.ID} != ${targetarray[3]} && ${Target.ID} != ${targetarray[4]} && ${Target.ID} != ${targetarray[5]} && ${Target.ID} != ${targetarray[6]} && ${Target.ID} != ${targetarray[7]} && ${Target.ID} != ${targetarray[8]}) {
/varset targetarray[${j}] ${Target.ID}
/varset targetarraytotal ${Math.Calc[${targetarraytotal} + 1]}
/doevents Buff
/next j
}
}
}
}
}
/call cleartarget
/if (${gettarget}) /call gettarget
/next i
}
/return
Sub cleartarget
/if (${Spawn[${targetid}].Type.Equal[CORPSE]} && !${targetdead} || !${Spawn[${targetid}].Type.Equal[NPC]} && !${targetdead}) {
/echo im clearing target
/varset targetdead 1
/varset gettarget 1
/varset didstick 0
/if (${Me.CombatState.NotEqual[COMBAT]} && !${NearestSpawn[1,npc radius 50].ID}) /call returntocamp "face"
/attack off
/varset dostuns ${dostuns.Arg[1,,]}
}
/if (${Target.ID} != ${targetid} && ${Spawn[${targetid}].Type.NotEqual[CORPSE]} && ${Spawn[${targetid}].ID}) /target ID ${targetid}
/return
Sub getids(string name)
/declare SpawnID int local
/declare SpawnName string local
/declare i int local
/for i 1 to 4
/varset SpawnID ${NearestSpawn[${i}, pc ${name}].ID}
/varset SpawnName ${NearestSpawn[${i}, pc ${name}]}
/if (${NearestSpawn[${i}, pc ${name}].Name.Equal[${name}]}) /return ${SpawnID}
/next i
/return 0
Sub checkhealed
/if (${Target.PctHPs} > 90 && ${casttimer} < ${Math.Calc[(${casttime} * 10)/ 2]}) {
/stopcast
/echo ${Target.PctHPs} attempting interrupt...
/echo ${casttimer} (ms) cast time left...
/call Interrupt
}
/return
Sub checkhealedtwo
/if (${Target.PctHPs} > 90 && ${casttimer} < ${Math.Calc[(${casttime} * 10)/ 4]}) {
/stopcast
/echo ${Target.PctHPs} attempting interrupt...
/echo ${casttimer} (ms) cast time left...
/call Interrupt
}
/return
Sub checkhps
/declare i int local
/for i 0 to ${Group}
/if (${Group.Member[${i}].PctHPs} < ${quickhealat} && ${Group.Member[${i}].Distance} < 200 && ${Group.Member[${i}].ID} && ${Group.Member[${i}].Type.NotEqual[CORPSE]}) /call Interrupt
/next i
/return
Sub checkgrouprange(string spellname)
/declare inrangetarget int local ${Me.ID}
/declare range int local 0
/declare distance float local 0
/if (${Spell[${spellname}].Range}) /varset range ${Spell[${spellname}].Range}
/if (${Spell[${spellname}].Range} == 0) /varset range ${Spell[${spellname}].AERange}
/declare i int local
/declare j int local
/for i 0 to ${Group}
/if (${Group.Member[${i}].Distance} > ${range}) /varset inrangetarget 0
/if (${Group.Member[${i}].Distance} > ${Math.Calc[${range} / 3]} && ${Group.Member[${i}].Distance} < ${Math.Calc[${range} / 1.5]}) {
/if (!${inrangetarget}) /varset inrangetarget ${Group.Member[${i}].ID}
/varset distance ${Group.Member[${i}].Distance}
/for j 0 to ${Group}
/if (${Group.Member[${j}].Distance} > ${Math.Calc[${distance} + ${range}]}) {
/varset inrangetarget 0
}
/next j
/if (${inrangetarget}) /return ${inrangetarget}
}
/next i
/return ${inrangetarget}
Sub Event_Follow(Line, FollowTarget, ChatText)
/if (!${Bool[${ChatText}]}) {
/varset FollowTarget ${FollowTarget.Right[-2].Left[-2]}
/call getids "${FollowTarget}"
/if (${Spawn[id ${Macro.Return}].ID} && ${Spawn[id ${Macro.Return}].Distance} < 200) {
/target ID ${Macro.Return}
/delay 2
/if (${Target.Type.Equal[PC]}) {
/varset ammoving 1
/keypress w
/face fast
/stick loose 5
}
}
/return
}
/if (${ChatText.Find[group]}) {
/varset ChatText ${ChatText.Right[-6]}
/call findgroup
/declare i int local
/for i 1 to ${Ini[toolismacro,Values,totalgroups]}
/if (${Macro.Return} == ${ChatText.Arg[${i},,]}) {
/varset FollowTarget ${FollowTarget.Right[-2].Left[-2]}
/call getids "${FollowTarget}"
/if (${Spawn[id ${Macro.Return}].ID} && ${Spawn[id ${Macro.Return}].Distance} < 200) {
/target ID ${Macro.Return}
/delay 2
/if (${Target.Type.Equal[PC]}) {
/varset ammoving 1
/keypress w
/face fast
/stick loose 5
}
}
}
/next i
/return
}
/if (${ChatText.Find[healers]}) {
/if (${Me.Class.HealerType}) {
/varset FollowTarget ${FollowTarget.Right[-2].Left[-2]}
/call getids "${FollowTarget}"
/if (${Spawn[id ${Macro.Return}].ID} && ${Spawn[id ${Macro.Return}].Distance} < 200) {
/target ID ${Macro.Return}
/delay 2
/if (${Target.Type.Equal[PC]}) {
/varset ammoving 1
/keypress w
/face fast
/stick loose 5
}
}
}
/return
}
/if (${ChatText.Find[${Me.Name}]}) {
/declare i int local
/for i 1 to 12
/if (${ChatText.Arg[${i},].Equal[${Me.Name}]}) {
/varset FollowTarget ${FollowTarget.Right[-2].Left[-2]}
/call getids "${FollowTarget}"
/if (${Spawn[id ${Macro.Return}].ID} && ${Spawn[id ${Macro.Return}].Distance} < 200) {
/target ID ${Macro.Return}
/delay 2
/if (${Target.Type.Equal[PC]}) {
/varset ammoving 1
/keypress w
/face fast
/stick loose 5
}
}
}
/next i
/return
}
/return
Sub Event_MakeCamp(Line, ChatText)
/if (${ChatText.Find[group]}) {
/varset ChatText ${ChatText.Right[-6]}
/call findgroup
/if (${Macro.Return.Equal[${ChatText}]}) {
/stick off
/varset ammoving 0
/varset makecamploc ${Me.Y},${Me.X}
}
/return
}
/stick off
/varset ammoving 0
/varset makecamploc ${Me.Y},${Me.X}
/return
Sub Event_GuildAssist(Line, AssistTarget)
/varset AssistTarget ${AssistTarget.Right[-2].Left[-2]}
/call getids "${AssistTarget}"
/if (${Macro.Return} && ${Spawn[id ${Macro.Return}].Distance} < 200) {
/target ID ${Macro.Return}
/delay 2
/assist
/delay 4
/if (${Target.Type.Equal[NPC]} && ${Target.Type.NotEqual[CORPSE]} && ${Target.Distance} < 200) {
/varset targetid ${Target.ID}
/varset gettarget 0
/varset targetdead 0
/varset didstick 0
/echo My Target is now ${Target.CleanName}
/if (${Me.Pet.ID}) /pet back off
/if (${Me.Pet.ID}) /delay 5
/if (${Me.Pet.ID}) /pet attack
}
}
/return
Sub Event_Enraged(Line, ChatText)
/if (${ChatText.Find[has become]}) {
/varset ChatText ${ChatText.Left[-11]}
/if (${NearestSpawn[npc radius 200 "${ChatText}"].ID} == ${targetid}) {
/declare mobheading float local ${Spawn[id ${targetid}].Heading.Degrees}
/if (${mobheading} < 90 && ${Me.Heading.Degrees} < ${Math.Calc[360 -(90 - ${mobheading})]} && ${Me.Heading.Degrees} > ${Math.Calc[${mobheading} - 90]} || ${mobheading} > 270 && ${Me.Heading.Degrees} < ${Math.Calc[${mobheading} - 90]} && ${Me.Heading.Degrees} > ${Math.Calc[90 -(360 - ${mobheading})]} || ${Me.Heading.Degrees} > ${Math.Calc[${mobheading} + 90]} || ${Me.Heading.Degrees} < ${Math.Calc[${mobheading} - 90]}) /return
/echo >>> ${Spawn[${targetid}].CleanName} is Enraged <<<
/varset dontmelee 1
/attack off
}
/doevents flush Enraged
/return
}
/if (${ChatText.Find[is no longer]}) {
/varset ChatText ${ChatText.Left[-13]}
/if (${NearestSpawn[npc radius 200 "${ChatText}"].ID} == ${targetid}) {
/echo >>> ${Spawn[${targetid}].CleanName} is no longer Enraged! <<<
/varset dontmelee 0
/attack on
}
}
/doevents flush Enraged
/return
Sub Event_Buff(Line, TargetPerson, command)
/varset TargetPerson ${TargetPerson.Right[-2].Left[-2]}
/if (${command.Arg[1,].Equal[virt]} || ${command.Arg[1,].Equal[brells]} || ${command.Arg[1,].Equal[temp]} || ${command.Arg[1,].Equal[hot]}) {
/declare tempvariable string local
/declare tempvariabletwo string local
/if (${command.Arg[1,].Equal[virt]}) {
/varset command ${command.Right[-5]}
/varset tempvariable ${hpbuffspell}
/varset tempvariabletwo palhp
/declare gemnumber int local 7
}
/if (${command.Arg[1,].Equal[brells]}) {
/varset command ${command.Right[-7]}
/varset tempvariable ${hpbuffspell}
/varset tempvariabletwo palhp
/declare gemnumber int local 7
}
/if (${command.Arg[1,].Equal[temp]}) {
/varset command ${command.Right[-5]}
/varset tempvariable "Brell's Steadfast Aegis"
/varset tempvariabletwo palhp
/declare gemnumber int local 7
}
/if (${command.Arg[1,].Equal[hot]}) {
/call getids "${TargetPerson}"
/delay 6s ${Spawn[id ${Macro.Return}].Distance} < 100
/if (${Spawn[id ${Macro.Return}].ID} && ${Spawn[id ${Macro.Return}].Distance} < 100) /target ID ${Macro.Return}
/delay 2
/varset HoTspell ${healovertimespell}
/if (${Target.ConColor.Equal[GREY]} || ${Target.ConColor.Equal[GREEN]}) {
/varset HoTspell "Ethereal Cleansing"
}
/if (${Me.CurrentMana} > ${Spell[${HoTspell}].Mana} && !${ammoving} && ${Target.ID} == ${Macro.Return} && ${Target.Distance} < 100 && ${Target.Type.Equal[PC]}) {
/if (!${Me.Gem[${HoTspell}]}) {
/memspell 7 ${HoTspell}
/delay 24s !${Window[SpellBookWND].Open}
/keypress w
}
/delay 6s ${Me.SpellReady[${HoTspell}]}
/tell ${Spawn[id ${Macro.Return}].Name} HoT inc...
/call cast ${HoTspell} 1s
/return
}
}
/if (${command.Arg[1,].Equal[group]}) {
/varset command ${command.Right[-6]}
/if (${Ini[toolismacro,Group${command},member1].NotEqual[empty]} && ${Me.Book[${tempvariable}]} && !${ammoving}) {
/call getids "${Ini[toolismacro,Group${command},member1]}"
/if (!${Me.Gem[${tempvariable}]} && !${Cursor.ID}) {
/memspell ${gemnumber} ${tempvariable}
/delay 24s !${Window[SpellBookWND].Open}
/keypress w
}
/if (${Spawn[id ${Macro.Return}].Distance} < 100 && ${Me.CurrentMana} > ${Spell[${tempvariable}].Mana} && ${Ini[toolismacro,Values,${tempvariabletwo}buffer].Equal[empty]} || ${Spawn[id ${Macro.Return}].Distance} < 100 && ${Ini[toolismacro,Values,${tempvariabletwo}buffertargetgroup]} != 0 && ${Ini[toolismacro,Values,${tempvariabletwo}buffertargetgroup]} != ${command}) /delay 6s ${Me.SpellReady[${tempvariable}]}
/if (${Spawn[id ${Macro.Return}].Distance} < 100 && ${Me.SpellReady[${tempvariable}]} && ${Me.CurrentMana} > ${Spell[${tempvariable}].Mana} && ${Ini[toolismacro,Values,${tempvariabletwo}buffer].Equal[empty]} || ${Spawn[id ${Macro.Return}].Distance} < 100 && ${Me.SpellReady[${tempvariable}]} && ${Me.CurrentMana} > ${Spell[${tempvariable}].Mana} && ${Ini[toolismacro,Values,${tempvariabletwo}buffertargetgroup]} != 0 && ${Ini[toolismacro,Values,${tempvariabletwo}buffertargetgroup]} != ${command}) {
/ini "toolismacro" "Values" "${tempvariabletwo}buffer" "${Me.Name}"
/ini "toolismacro" "Values" "${tempvariabletwo}buffertargetgroup" "${command}"
/guildsay ${tempvariable} inc group ${command}
/target ID ${Macro.Return}
/delay 2
/if (${Target.ID} == ${Macro.Return} && ${Target.Distance} < 100 && ${Target.Type.Equal[PC]}) {
/tell ${Spawn[id ${Macro.Return}].Name} ${tempvariable} inc...
/call cast ${tempvariable} 2s
/if (${Macro.Return.Equal["CAST_SUCCESS"]}) /echo ${Target}'s grp has ${tempvariable}
}
/if (${Ini[toolismacro,Values,${tempvariabletwo}buffertargetgroup]} == ${command}) {
/ini "toolismacro" "Values" "${tempvariabletwo}buffer" "empty"
/ini "toolismacro" "Values" "${tempvariabletwo}buffertargetgroup" "0"
}
}
}
/return
}
/call getids "${TargetPerson}"
/if (${Spawn[id ${Macro.Return}].ID} && ${Spawn[id ${Macro.Return}].Distance} < 100) /target ID ${Macro.Return}
/delay 2
/if (${tempvariable.Equal[${hpbuffspell}]}) {
/if (${Target.ConColor.Equal[GREY]} || ${Target.ConColor.Equal[GREEN]}) /varset tempvariable "Brell's Steadfast Aegis"
}
/if (${Me.PctMana} > 15 && !${ammoving} && ${Target.ID} == ${Macro.Return} && ${Target.Distance} < 100 && ${Target.Type.Equal[PC]}) {
/if (!${Me.Gem[${tempvariable}]} && !${Cursor.ID}) {
/memspell ${gemnumber} ${tempvariable}
/delay 18s !${Window[SpellBookWND].Open}
/keypress w
}
/tell ${Spawn[id ${Macro.Return}].Name} ${tempvariable} inc...
/delay 6s ${Me.SpellReady[${tempvariable}]}
/call cast ${tempvariable} 1s
/if (${Macro.Return.Equal["CAST_SUCCESS"]}) /echo ${Target} ${tempvariable} buffed
}
}
/return
Sub clickitem(ClickItem, ReplaceSlot)
/if (${ReplaceSlot.Find[inv]}) /declare targetslot string local 100
/if (!${ReplaceSlot.Find[inv]}) /declare targetslot int local ${ReplaceSlot}
/if (!${Defined[ClickItem]}) {
/echo target item not defined - returning
/return
}
/if (!${Defined[ReplaceSlot]}) {
/echo replace slot not defined - inv or slot # plz -returning
/return
}
/if (${Cursor.ID}) {
/guildsay trying to click item but stuff is on my cursor
/return
}
/if (${FindItem[=${ClickItem}].ID} && !${Cursor.ID}) {
/declare castingtime float local ${FindItem[=${ClickItem}].CastTime}
/declare slotnumber int local
/declare packnumber int local
/declare i int local
/declare j int local
/for i 1 to 8
/for j 1 to 10
/if (${InvSlot[Pack${i}].Item.Item[${j}].Name.Equal[${ClickItem}]}) {
/echo found item in bag
/varset packnumber ${i}
/varset slotnumber ${j}
/goto :click
}
/next j
/varset j 0
/next i
/varset i 0
/for i 1 to 8
/if (${InvSlot[${Math.Calc[22 + ${i}]}].Item.Name.Equal[${ClickItem}]}) {
/echo found item in main slot
/varset packnumber ${i}
/varset targetslot pack${packnumber}
/declare invitem int local 1
/goto :click
}
/next i
/varset i 0
:click
/if (!${Window[InventoryWindow].Open}) /keypress i
/if (!${Window[pack${packnumber}].Open} && !${Defined[invitem]}) /nomodkey /itemnotify pack${packnumber} rightmouseup
/delay 2
/if (!${Defined[invitem]}) /nomodkey /itemnotify in pack${packnumber} ${slotnumber} leftmouseup
/if (${Defined[invitem]}) {
/echo using ${ClickItem}
/nomodkey /itemnotify ${InvSlot[${Math.Calc[22 + ${packnumber}]}]} rightmouseup
/delay 2
/if (${castingtime} > 0.50) /delay ${Math.Calc[${castingtime} * 10]}
/keypress i
/deletevar invitem
/return
}
/delay 2
/if (${Cursor.Name.Equal[${ClickItem}]}) {
/echo Using ${ClickItem}
/if (${Defined[targetslot]}) /varset targetslot ${InvSlot[${targetslot}]}
/if (${targetslot} == 100) /varset targetslot pack${packnumber}
/nomodkey /itemnotify ${targetslot} leftmouseup
/delay 2
/nomodkey /itemnotify ${targetslot} rightmouseup
/if (${castingtime} > 0.50) /delay ${Math.Calc[${castingtime} * 10]}
/delay 4
/if (!${ReplaceSlot.Find[inv]}) /nomodkey /itemnotify ${InvSlot[${targetslot}]} leftmouseup
/if (${ReplaceSlot.Find[inv]}) /nomodkey /itemnotify ${InvSlot[${Math.Calc[22 + ${packnumber}]}]} leftmouseup
/delay 4
/if (${Cursor.Name.Equal[${ClickItem}]}) {
/nomodkey /itemnotify pack${packnumber} rightmouseup
/delay 2
/nomodkey /itemnotify in pack${packnumber} ${slotnumber} leftmouseup
/delay 2
/nomodkey /itemnotify pack${packnumber} rightmouseup
/delay 2
}
}
/keypress i
}
/return
Sub handledestroy(TargetItem)
/if (!${Defined[TargetItem]}) {
/echo target item not defined, returning
/return
}
/if (${FindItem[=${TargetItem}].ID} && !${Cursor.ID}) {
/declare slotnumber int local
/declare packnumber int local
/declare i int local
/declare j int local
/for i 1 to 8
/for j 1 to 10
/if (${InvSlot[Pack${i}].Item.Item[${j}].Name.Equal[${TargetItem}]}) {
/echo item is in pack
/varset packnumber ${i}
/varset slotnumber ${j}
/goto :destroy
}
/next j
/varset j 0
/next i
/varset i 0
/for i 1 to 8
/if (${InvSlot[${Math.Calc[22 + ${i}]}].Item.Name.Equal[${TargetItem}]}) {
/echo found item in main slot
/varset packnumber ${i}
/declare invitem int local 1
/goto :destroy
}
/next i
/varset i 0
:destroy
/if (!${Window[InventoryWindow].Open}) /keypress i
/if (!${Window[pack${packnumber}].Open} && !${Defined[invitem]}) /nomodkey /itemnotify pack${packnumber} rightmouseup
/delay 2
/if (!${Defined[invitem]}) /nomodkey /itemnotify in pack${packnumber} ${slotnumber} leftmouseup
/if (${Defined[invitem]}) /nomodkey /itemnotify pack${packnumber} leftmouseup
/delay 2
/if (${Cursor.Name.Equal[${TargetItem}]}) {
/echo destroying ${TargetItem}
/if (${Cursor.Name.Equal[${TargetItem}]}) {
/echo destroying ${Cursor.Name}
/destroy
/if (${Defined[invitem]}) /deletevar invitem
}
}
/if (${Window[pack${packnumber}].Open}) /nomodkey /itemnotify pack${packnumber} rightmouseup
/delay 2
/keypress i
}
/return
Sub Event_Toggle(Line, ChatSender, Targets, action)
/if (!${Bool[${action}]}) /return
/if (${Bool[${Targets}]}) {
/if (${Targets.Arg[1,].Equal[group]}) {
/if (${Targets.Arg[1,].Equal[group]}) {
/declare groupnumber int local
/call findgroup
/varset Targets ${Targets.Right[-6]}
/for groupnumber 1 to ${Ini[toolismacro,Values,totalgroups]}
/if (${Targets.Arg[${groupnumber},,]} == ${Macro.Return}) {
/goto :togglestuff
} else {
/next groupnumber
/return
}
}
}
/if (${Targets.Arg[1,].Equal[healers]}) {
/if (${Me.Class.HealerType}) /goto :togglestuff
/return
}
/if (${Targets.Arg[1,].Equal[casters]}) {
/if (${Me.Class.PureCaster}) /goto :togglestuff
/return
}
/if (${Targets.Arg[1,].Equal[paladins]}) {
/if (${Me.Class.Name.Find[Paladin]}) /goto :togglestuff
/return
}
/declare name int local
/for name 1 to 12
/if (${Targets.Arg[${name},].Equal[${Me.Name}]}) /goto :togglestuff
/next name
/return
}
:togglestuff
/if (${action.Find[abort]}) {
/keypress forward
/varset didinvis 0
/guildsay !ABORTING!
/return abort
}
/if (${action.Arg[1,].Equal[leash]}) {
/varset action ${action.Right[-6]}
/if (${Bool[${Ini[movement,leash,${action}]}]}) {
/if (!${Defined[leashloc]}) /declare leashloc string outer
/declare i int local
/for i 1 to 10
/if (${Ini[movement,leash,zoneshortnames].Arg[${i},,].Equal[${Zone.ShortName}]}) {
/varset leashloc ${Ini[movement,leash,${action}]}
}
/next i
}
/return
}
/if (${action.Arg[1,].Equal[zoneout]}) {
/varset action ${action.Right[-8]}
/if (${Bool[${Ini[movement,zoneout,${action}]}]}) {
/if (!${Defined[zoneoutloc]}) /declare zoneoutloc string outer
/declare i int local
/for i 1 to 10
/if (${Ini[movement,zoneout,zoneshortnames].Arg[${i},,].Equal[${Zone.ShortName}]}) {
/if (!${Defined[zoneoutcommand]}) /declare zoneoutcommand string outer empty
/if (${Bool[${Ini[movement,zoneout,${action}command]}]}) /varset zoneoutcommand ${Ini[movement,zoneout,${action}command]}
/varset zoneoutloc ${Ini[movement,zoneout,${action}]}
/call gotoloc "${zoneoutloc}" "${zoneoutcommand}"
/return
}
/next i
}
/return
}
/if (${action.Arg[1,].Equal[leashoff]}) {
/if (${Defined[leashloc]}) /deletevar leashloc
/return
}
/if (${action.Arg[1,].Equal[tank]}) {
/if (${action.Arg[1,].Equal[tank]}) /varset action ${action.Right[-5]}
/varset mainassist ${action}
/return
}
/if (${action.Find[/mac]}) {
/varset action ${action.Right[-5]}
/if (${action.Arg[1,].Equal[start]}) {
/varset action ${action.Right[-6]}
/if (${Me.Class.Name.Equal[Beastlord]}) /docommand /mac beast ${action}
/if (${Me.Class.Name.Find[Shadow]}) /docommand /mac sk ${action}
/if (${Me.Class.Name.Equal[Magician]}) /docommand /mac mage ${action}
/if (${Me.Class.Name.Equal[Necromancer]}) /docommand /mac necro ${action}
/if (${Me.Class.Name.Equal[Wizard]}) /docommand /mac wiz ${action}
/if (${Me.Class.Name.Equal[Enchanter]}) /docommand /mac ench ${action}
/if (${Me.Class.Name.Equal[Bard]}) /docommand /mac bard ${action}
/if (${Me.Class.Name.Equal[Cleric]}) /docommand /mac cleric ${action}
/if (${Me.Class.Name.Equal[Shaman]}) /docommand /mac shaman ${action}
/if (${Me.Class.Name.Equal[Monk]}) /docommand /mac monk ${action}
/if (${Me.Class.Name.Equal[Rogue]}) /docommand /mac rogue ${action}
/if (${Me.Class.Name.Equal[Paladin]}) /docommand /mac paladin ${action}
/if (${Me.Class.Name.Equal[Ranger]}) /docommand /mac ranger ${action}
/if (${Me.Class.Name.Equal[Berserker]}) /docommand /mac berserker ${action}
/if (${Me.Class.Name.Equal[Druid]}) /docommand /mac druid ${action}
}
/declare i int local
/for i 1 to 15
/if (${Ini[toolismacro,Values,macros].Arg[${i},,].Equal[${action.Arg[1,]}]}) {
/docommand /mac ${action}
}
/next i
/varset i 0
/for i 1 to 10
/if (${Ini[toolismacro,Values,othermacros].Arg[${i},,].Equal[${action.Arg[1,]}]}) {
/docommand /mac ${action}
}
/next i
/echo Macro not found
/return
}
/if (${action.Find[mod rod]}) {
/if (${Cursor.ID}) {
/guildsay ITEM ON CURSOR - MOD RODS COMING
/return
}
/if (${Me.FreeInventory} < 1 && !${FindItem[=Rod of Mystical Transvergence].ID}) {
/guildsay NO ROOM IN BAGS - MOD RODS COMING
/return
}
/if (${FindItem[=Rod of Mystical Transvergence].ID} && ${FindItem[=Rod of Mystical Transvergence].Charges} < 3) /call handledestroy "Rod of Mystical Transvergence"
/return
}
/if (${action.Find[accept rez]}) {
/if (${Window[ConfirmationDialogBox].Open} || !${InvSlot[13].Item.ID}) {
/docommand /mac rez ${mainassist}
}
/return
}
/if (${action.Find[stun]}) {
/if (${action.Find[dont]} || ${action.Find[off]}) {
/varset dostuns 0
/echo turning stuns OFF
/return
}
/varset dostuns 1
/echo turning stuns ON
/return
}
/if (${action.Find[heal out of group]}) {
/if (${action.Find[dont]} || ${action.Find[off]}) {
/varset HealOutOfGroup 0
/echo NOT healing out of group
/return
}
/varset HealOutOfGroup 1
/echo Healing out of group
/return
}
/if (${action.Find[heal group]}) {
/if (${action.Find[dont]} || ${action.Find[off]}) {
/varset dogrpheals 0
/echo NOT healing group
/return
}
/varset dogrpheals 1
/echo Healing group ON
/return
}
/if (${action.Find[healat]}) {
/varset action ${action.Right[-7]}
/varset quickhealat ${action}
/echo now healing at ${action}
/return
}
/if (${action.Find[loh at]}) {
/varset action ${action.Right[-7]}
/varset lohat ${action}
/echo now doing loh at ${action}
/return
}
/if (${action.Arg[1,].Equal[cure]}) {
/if (${Me.AltAbilityReady[Radiant Cure]}) {
/call findgroup
/if (${Ini[toolismacro,Values,group${Macro.Return}cure].Equal[empty]}) {
/ini "toolismacro" "Values" "group${Macro.Return}cure]" "${Me.Name}"
/delay 2
/guildsay Radiant Cure inc...
/aa act Radiant Cure
/delay 6
/timed 20 /ini "toolismacro" "Values" "group${Macro.Return}cure" "empty"
}
}
/return
}
/if (${action.Arg[1,].Equal[rez]}) {
/varset action ${action.Right[-4]}
/if (!${Me.Gem["Resurrection"]}) {
/if (!${Me.Gem[${selfhpbuffspell}]} && ${Me.CombatState.NotEqual[COMBAT]} && ${Me.Gem[${quickhealspell}]}) {
/memspell 7 "Resurrection"
/delay 16s ${Me.SpellReady["Resurrection"]}
/keypress w
}
}
/if (${Me.Gem["Resurrection"]}) {
/if (!${Me.SpellReady["Resurrection"]}) {
/guildsay rez not up yet, returning
/return
}
/target ${action}'s corpse
/delay 2
/call cast "Resurrection" 1s
/if (${Macro.Return.Equal["CAST_SUCCESS"]}) /guildsay ${Target.CleanName} rezzed!
}
/return
}
/if (${action.Find[consent]}) {
/varset action ${action.Right[-8]}
/consent ${action}
/return
}
/if (${action.Find[stick]}) {
/if (${action.Find[front]}) {
/echo sticking in front
/varset sticktype front loose 8
}
/if (${action.Find[behind]}) {
/echo sticking behind
/varset sticktype behindonce loose 8
}
/return
}
/if (${action.Find[rebuff]}) {
/varset hpselfbufftimer 0
/varset selfhastebufftimer 0
/varset selfprocbufftimer 0
/return
}
/if (${action.Find[anon]}) {
/docommand /a
/return
}
/if (${action.Find[camp]}) {
/if (${Me.Trader}) /return
/if (${action.Find[desktop]}) {
/camp desktop
:action
/doevents toggle
/if (${Macro.Return.Equal[cancel]}) /return
/delay 2
/goto :action
/return
}
/camp
:action
/doevents toggle
/if (${Macro.Return.Equal[cancel]}) /return
/delay 2
/goto :action
/return
}
/if (${action.Find[cancel]}) {
/return cancel
}
/if (${action.Find[assistat]}) {
/echo setting assistat to ${action.Arg[2,]}
/varset assistat ${action.Arg[2,]}
/if (${Defined[stunat]}) /varset stunat ${action.Arg[2,]}
/return
}
/if (${action.Find[/ex]}) {
/if (${Me.Trader}) /return
/docommand /exit
}
/if (${action.Find[throne]}) {
/aa act Throne of Heroes
/return
}
/if (${action.Find[infusion]}) {
/aa act Infusion of the Faithful
/return
}
/if (${action.Find[lesson]}) {
/aa act Lesson of the Devoted
/return
}
/if (${action.Find[intensity]}) {
/aa act Intensity of the Resolute
/return
}
/if (${action.Find[expedient]} || ${action.Find[expediant]}) {
/aa act Expedient Recovery
/return
}
/if (${action.Find[pagedown]}) {
/keypress Page_Down hold
/delay 1s
/keypress Page_Down
/return
}
/return