Page 1 of 2

eqemu level 65 or so pal, druid, bers, wiz

Posted: Tue Aug 18, 2015 1:28 am
by toolisaccount
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

Code: Select all

		case OP_WorldComplete: ////////////////////////////////////////////////////////////////////////////
		{
			eqs->Close();
			return false;
		}
this also may be for rof2 client but im not sure yet

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
                }
plz bear with me ---- this didn't even work from the start

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);
//}
wtflol how do you release this -bard was wrong had to be done in spells.cpp

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 ? 105
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

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;
}
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

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

Re: eqemu level 65 or so pal, druid, bers, wiz

Posted: Tue Aug 18, 2015 1:29 am
by toolisaccount
this is paladin.mac part2
----------------------------------------

Code: Select all

Sub page(direction, duration)

/if (${direction.Find[down]}) {
    /keypress Page_Down hold 
    /delay ${duration}
    /keypress Page_Down
}
/if (${direction.Find[up]}) {
    /keypress Page_Up hold 
    /delay ${duration}
    /keypress Page_Up
}
/return

Sub returntocamp(face)

/if (${Bool[${makecamploc}]}) {
    /call gotoloc "${makecamploc}" 
    /if (${Macro.Return} == 1 && ${face.Equal[face]}) {
        /if (${Me.Heading.Degrees} > 179) /face fast heading ${Math.Calc[${Me.Heading.Degrees} - 180]}
        /if (${Me.Heading.Degrees} < 180) /face fast heading ${Math.Calc[${Me.Heading.Degrees} + 180]}
    }
}
/return

Sub gotoloc(loc, command)

/declare locfrom string local
/declare zoneshortname string local ${Zone.ShortName}
/if (!${Bool[${loc}]}) /varset locfrom leashloc
/if (${Bool[${loc}]}) /varset locfrom loc
/declare nextlocationy string local ${${locfrom}.Arg[1,,]}
/declare nextlocationx string local ${${locfrom}.Arg[2,,]}
/declare nextlocationyhigh string local ${Math.Calc[${${locfrom}.Arg[1,,]} + 5]}
/declare nextlocationylow string local ${Math.Calc[${${locfrom}.Arg[1,,]} - 5]}
/declare nextlocationxhigh string local ${Math.Calc[${${locfrom}.Arg[2,,]} + 5]}
/declare nextlocationxlow string local ${Math.Calc[${${locfrom}.Arg[2,,]} - 5]}
/if (${nextlocationy.NotEqual[NULL]} && ${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
    /if (${command.NotEqual[empty]}) /call ${command}
    /return
}
:travel
/keypress forward hold
/if (${nextlocationy.NotEqual[NULL]} && ${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
    /keypress forward
    /if (!${Me.Class.PureCaster}) /varset didstick 0
    /if (${command.NotEqual[empty]}) /call ${command}
    /return 1
}
/if (${nextlocationy.NotEqual[NULL]}) {
    /if (${Me.Y} <= ${nextlocationylow} || ${Me.X} <= ${nextlocationxlow} || ${Me.Y} >= ${nextlocationyhigh} || ${Me.X} >= ${nextlocationxhigh}) {
        /face nolook fast loc ${nextlocationy},${nextlocationx}
    }
}
/if (${zoneshortname.NotEqual[${Zone.ShortName}]}) {
    /if (!${InvSlot[17].Item.ID}) {
        /if (!${InvSlot[13].Item.ID} && !${Defined[amnaked]}) {
            /guildsay - i died during movement - 
            /declare amnaked int outer 100
            /keypress forward
            /varset makecamploc ${Me.Y},${Me.X}
            /return
        }
    }
}
/if (${zoneshortname.NotEqual[${Zone.ShortName}]}) {
    /if (${InvSlot[17].Item.ID} || ${amnaked} == 100) {
        /if (${InvSlot[13].Item.ID} && !${Defined[amnaked]} || !${InvSlot[13].Item.ID} && ${amnaked} == 100) {
            /echo ~~ ${Zone.Name} ~~
            /keypress forward
            /deletevar zoneoutloc
            /varset makecamploc ${Me.Y},${Me.X}
            /return
        }
    }
/return
}
/delay 1
/goto :travel
/return

Sub zonedoor

/keypress forward
:doorloop
/keypress u
/delay 2
/keypress u
/delay 1s
/keypress u
/delay 2
/call viewing
/if (${zoneshortname.Equal[${Zone.ShortName}]}) /goto :doorloop
/return

Sub door

/keypress u
/if (!${Me.Moving}) {
    /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc[${j}]door]}]}) {
        /doortarget ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc[${j}]door]}]}
        /face door
        /keypress u
    }
}
/return

Sub viewing

/declare variable string local page_down
:viewing
/if (${zoneshortname.Equal[${Zone.ShortName}]}) {
    /keypress ${variable} hold
    /delay 2
    /keypress ${variable}
    /keypress u
    /if (${zoneshortname.Equal[${Zone.ShortName}]}) {
        /keypress ${variable} hold
        /delay 4
        /keypress ${variable}
        /keypress u
        /if (${zoneshortname.Equal[${Zone.ShortName}]}) {
            /keypress ${variable} hold
            /delay 4
            /keypress ${variable}
            /keypress u
            /if (${variable.Equal[page_down]}) {
                /varset variable page_up
                /goto :viewing
            }
            /if (${variable.Equal[page_up]}) {
                /varset variable page_down
                /goto :viewing
            }
        }
    }
}
/return

Sub findgroup

/declare totalgroups int local
/declare i int local
/declare j int local
/varset totalgroups ${Ini[toolismacro,Values,totalgroups]}
/for i 1 to ${totalgroups}
/for j 1 to 6
/if (${Ini[toolismacro,Group${i},member${j}].Equal[${Me.Name}]}) {
    /return ${i}
}
/next j
/next i
/echo GROUP NOT FOUND ---- returning +1
/return ${Math.Calc[${totalgroups} + 1]}

Sub groupcheck

/declare i int local
/declare grpcheck int local 0
:checkgroup
/for i 0 to ${Group}
/if (${Group.Member[${i}].Distance} < 120 && ${Group.Member[${i}].ID}) /varset grpcheck ${Math.Calc[${grpcheck} + 1]}
/next i
/if (${grpcheck} == ${Group.GroupSize}) {
    /delay 1s
    /return 1
} else {
    /varset grpcheck 0
    /delay 2
    /goto :checkgroup
}
/return

Sub Event_Movement(Line, SenderPerson, targetperson, TargetZone)

/if (${Bool[${targetperson}]}) {
    /declare name int local
    /declare force int local
    /for force 1 to 10
    /if (${targetperson.Arg[${force},].Equal[force]}) {
        /declare forcemove bool local TRUE
    }
    /if (${targetperson.Arg[1,].Equal[force]} && !${Bool[${targetperson.Arg[2,]}]}) /goto :beginning
    /next force
    /if (${targetperson.Arg[1,].Equal[group]}) {
        /if (${targetperson.Arg[1,].Equal[group]}) {
            /declare groupnumber int local
            /call findgroup
            /varset targetperson ${targetperson.Right[-6]}
            /if (${targetperson.Find[force]}) /varset targetperson ${targetperson.Left[-6]}
            /for groupnumber 1 to ${Ini[toolismacro,Values,totalgroups]}
            /if (${targetperson.Arg[${groupnumber},,]} == ${Macro.Return}) {
                /goto :beginning
            } else {
                /next groupnumber 
                /return
            }
        }
    }
    /for name 1 to 10
    /if (${targetperson.Arg[${name},].Equal[${Me.Name}]}) /goto :beginning
    /next name
    /return
}
:beginning
/if (!${Bool[${Ini[movement,${TargetZone},zoneshortnames].Arg[1,,]}]}) {
    /echo Incorrect Destination
    /return
}
/declare zoneshortname     string local ${Zone.ShortName}
/declare savedtargetzone   string local ${TargetZone}
/declare startlocation     string local 0
/declare tempheading       float  local 0
/declare nextlocationx     string local NULL
/declare nextlocationy     string local NULL
/declare nextlocationxhigh string local
/declare nextlocationxlow  string local
/declare nextlocationyhigh string local
/declare nextlocationylow  string local
/declare i int local
/declare j int local
/declare junctions int local
/declare savedvariable int local 0
/if (${Me.Class.Name.NotEqual[Bard]}) /declare didinvis int local 0
/declare grpnumber int local 0

/echo - Starting -
/for junctions 1 to 12
/echo ${junctions} junctions
/for i 1 to 10
/echo ${i} i variable at i loop
:start
/if (${Bool[${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]}]}) {
    /echo ${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]}
    /varset TargetZone ${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]}
    /echo changed targetzone to ${TargetZone}
    /echo ${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]} targetzones junctions
    /echo ${i} i variable in bool junctions
    /varset i 1
}
/if (!${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]} && ${TargetZone.NotEqual[${savedtargetzone}]}) {
    /varset TargetZone ${savedtargetzone}
    /echo changed targetzone to savedtargetzone
    /echo ${junctions} junctions
    /echo ${i} i variable in not bool junctions
    /echo ${j} j 
    /varset i 1  
}
/if (${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]} && ${TargetZone.NotEqual[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]}) {
    /varset TargetZone ${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}
    /echo changed targetzone to savedtargetzone junction arg junctions
    /echo ${junctions}
    /echo ${i} i variable in bool junctions arg junctions
    /echo ${j} j
    /varset i 1
}
/if (${savedvariable} != 1) {
    /if (${Bool[${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,].Equal[${Zone.ShortName}]}]} && ${startlocation.Equal[0]}) {
        /echo found starting zone
        /varset startlocation ${TargetZone},${i},
        /echo ${startlocation}
        /echo ${i} i variable
        /echo ${j} j variable
    }
    /if (${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,].NotEqual[${Zone.ShortName}]} && ${startlocation.NotEqual[0]}) {
        /echo found end of zones
        /varset junctions 1
        /varset savedvariable 1
        /varset TargetZone ${startlocation.Arg[1,,]}
        /varset i ${startlocation.Arg[2,,]}
    }
}
/if (${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[finish]} && ${zoneshortname.Equal[${Zone.ShortName}]}) {
    /keypress w
    /varset didinvis 0
    /echo i have reached my destination
    /guildsay im at target destination
    /varset makecamploc ${Me.Y},${Me.X}
    /return
}
/if (${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,].Equal[${Zone.ShortName}]}) {
    /if (!${forcemove}) {
        /if (${Me.Class.Name.Equal[Bard]} && !${didinvis}) {
            /call groupcheck
        }
        /if (${Me.Class.Name.NotEqual[Bard]} && !${didinvis}) {
            /call findgroup
            /varset grpnumber ${Macro.Return}
            :waitforinvis
            /doevents Toggle
            /if (${Macro.Return.Equal[abort]}) {
                /varset makecamploc ${Me.Y},${Me.X}
                /return
            }
            /if (${Ini[toolismacro,Movement,group${grpnumber}ready].Equal[ready]}) {
                /varset didinvis 1
            }
            /if (${Ini[toolismacro,Movement,group${grpnumber}ready].Equal[empty]}) {
                /delay 2
                /echo waiting for invis
                /goto :waitforinvis
            }
        }
    }
    /if (${Me.Class.Name.Equal[Bard]} && !${didinvis}) {
        /squelch /twist off
        /varset didinvis 1
        /varset dotwist 1
        /if (!${Me.Gem[${travelsong}]} && !${Cursor.ID}) {
                /guildsay sec memming travel song
                /memspell ${travelsonggem} ${travelsong}
                /delay 2s
        }
        /squelch /twist ${travelsonggem}
        /delay 2s
        /if (!${Me.Casting.ID}) {
            /squelch /twist ${speedsonggem}
            /delay 2s
            /if (${Me.Casting.ID}) /delay 1s
            /if (!${Me.Gem[${invissong}]} && !${Cursor.ID}) {
                /guildsay sec memming invis song
                /memspell ${travelsonggem} ${invissong}
                /delay 2s
            }
            /squelch /twist ${travelsonggem}
            /delay 3s 
        }
        /if (${Me.Casting.ID}) /delay 2s
        /call findgroup
        /varset grpnumber ${Macro.Return}
        /ini "toolismacro" "Movement" "group${grpnumber}ready" "ready"
        /delay 6
        /ini "toolismacro" "Movement" "group${grpnumber}ready" "empty"
    }
    /echo ${j} j (before for loop)
    /for j 1 to 30
    /echo ${j} j
    /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}]}]} && ${savedvariable} != 1) {
        /varset savedvariable ${j}
        /varset nextlocationy ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}].Arg[1,,]}
        /varset nextlocationx ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}].Arg[2,,]}
        /varset nextlocationyhigh ${Math.Calc[${nextlocationy} + 75]}
        /varset nextlocationylow ${Math.Calc[${nextlocationy} - 75]}
        /varset nextlocationxhigh ${Math.Calc[${nextlocationx} + 75]}
        /varset nextlocationxlow ${Math.Calc[${nextlocationx} - 75]}
        /if (${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
            /echo found correct loc
            /varset savedvariable 1
            /goto :end
        }
        /varset nextlocationyhigh ${Math.Calc[${nextlocationy} + 175]}
        /varset nextlocationylow ${Math.Calc[${nextlocationy} - 175]}
        /varset nextlocationxhigh ${Math.Calc[${nextlocationx} + 175]}
        /varset nextlocationxlow ${Math.Calc[${nextlocationx} - 175]}
        /if (${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
            /echo found nearest loc
            /varset savedvariable 1
            /goto :nearestlocloop
        }
        /echo this didnt work
        /varset nextlocationy NULL
        /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${savedvariable}].Arg[1,,]}]}) {
            /varset savedvariable ${Math.Calc[${j} + 1]}
            /varset nextlocationy NULL          
            /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${savedvariable}].Arg[1,,]}]}) {
                /echo next j
                /next j
            }
            /if (${Bool[${Ini[movement,${TargetZone},zoneshortnames].Arg[${Math.Calc[${i} + 1]},,]}]}) {
                /varset j 0
                /next i
            }
            /if (${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]}) {
                /varset j 0
                /echo next junctions instead of j
                /varset TargetZone ${savedtargetzone}
                /next junctions
            }
        }
        /echo this fired
        /varset savedvariable ${Math.Calc[${j} + 1]}
        /delay 2
        /next i
    }
        /if (!${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]} && ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[junction]} || ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[finish]}) {
            /keypress w
            /varset didinvis 0
            /echo i have reached my destination
            /guildsay im at target destination
            /varset makecamploc ${Me.Y},${Me.X}
            /return
        } 
    :end
    /if (${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[junction]}) {
        /keypress forward
        /varset j 1
        /varset TargetZone ${savedtargetzone}
        /if (!${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]}) {
            /varset TargetZone ${startlocation.Arg[1,,]}
            /varset i ${startlocation.Arg[2,,]}
        } 
        /if (${Bool[${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]}]}) {
            /echo changing junctions +1 from hitting a junction
            /next junctions
        }
    }
    /if (${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[zonedoor]} && ${nextlocationy.NotEqual[NULL]}) {
        /keypress forward
        /varset j 1
        :doorloop
        /keypress u
        /delay 2
        /keypress u
        /delay 1s
        /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}zonedoor]}]}) {
            /face nolook loc ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}zonedoor]}
            /keypress u
        }
        /call viewing
        /if (${zoneshortname.Equal[${Zone.ShortName}]}) /goto :doorloop
        /varset nextlocationy NULL
    }
    /if (${zoneshortname.Equal[${Zone.ShortName}]}) {
        /varset tempheading ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,]})
        /if (${Math.Calc[(360 - ${tempheading}) + 45]} > 360 && ${Me.Heading.Degrees} <= ${Math.Calc[(360 - ${tempheading}) - 45]} || ${Math.Calc[(360 - ${tempheading}) + 45]} > 360 && ${Me.Heading.Degrees} <= ${Math.Calc[45 - (360 - ${tempheading})]}) {
            /goto :headingdone
        }
        /if (${Math.Calc[(360 - ${tempheading}) - 45]} < 0 && ${Me.Heading.Degrees} <= ${Math.Calc[(360 - ${tempheading}) + 45]} || ${Math.Calc[(360 - ${tempheading}) - 45]} < 0 && ${Me.Heading.Degrees} <= ${Math.Calc[45 - (360 - ${tempheading})]}) { 
            /goto :headingdone
        }
        /if (${Math.Calc[${Me.Heading.Degrees}]} >= ${Math.Calc[360 - ${tempheading}]} && ${Math.Calc[${Me.Heading.Degrees}]} <= ${Math.Calc[(360 - ${tempheading}) + 45]} || ${Math.Calc[${Me.Heading.Degrees}]} >= ${Math.Calc[(360 - ${tempheading}) - 45]} && ${Math.Calc[${Me.Heading.Degrees}]} <= ${Math.Calc[360 - ${tempheading}]}) {
            /goto :headingdone
        }
            /if (${tempheading} <= 180) {
            /echo Tempheading < 180
                /if (${Me.Heading.Degrees} >= ${Math.Calc[(360 - ${tempheading}) - 180]} && ${Me.Heading.Degrees} <= ${Math.Calc[360 - ${tempheading}]}) {
                    /varset tempheading ${Math.Calc[${tempheading} + 45]}
                    /goto :heading
                } else {
                    /if (${tempheading} <= 45) {
                        /varset tempheading ${Math.Calc[315 + ${tempheading}]}
                        /goto :heading
                    }
                    /varset tempheading ${Math.Calc[${tempheading} - 45]}
                    /goto :heading
                }
            }
            /if (${tempheading} > 180) {
            /echo Tempheading > 180
                /if (${Me.Heading.Degrees} <= ${Math.Calc[(360 - ${tempheading}) + 180]} && ${Me.Heading.Degrees} >= ${Math.Calc[360 - ${tempheading}]}) {
                    /varset tempheading ${Math.Calc[${tempheading} - 45]}
                    /goto :heading
                } else {
                    /if (${tempheading} <= 315) {
                        /varset tempheading ${Math.Calc[${tempheading} + 45]}
                        /goto :heading
                    }
                    /varset tempheading ${Math.Calc[(360 - ${tempheading}) - 45]}
                    /goto :heading
                }
            }
            :heading
            /face heading ${tempheading}
        :headingdone
        /face fast heading ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,]}
    }
    /varset nextlocationy NULL
    /varset nextlocationx NULL
    /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}]}]}) {
        /varset nextlocationy ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}].Arg[1,,]}
        /varset nextlocationx ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}].Arg[2,,]}
    }
    :nearestlocloop
    /doevents Toggle
    /if (${Macro.Return.Equal[abort]}) {
        /varset makecamploc ${Me.Y},${Me.X}
        /return
    }
    /varset nextlocationyhigh ${Math.Calc[${nextlocationy} + 5]}
    /varset nextlocationylow ${Math.Calc[${nextlocationy} - 5]}
    /varset nextlocationxhigh ${Math.Calc[${nextlocationx} + 5]}
    /varset nextlocationxlow ${Math.Calc[${nextlocationx} - 5]}
    :movementloop
    /keypress forward hold
    /if (${nextlocationy.NotEqual[NULL]} && ${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
        /keypress forward
        /delay 2
        /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}command]}]}) /call ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}command]}
        /next j
    }
    /if (${nextlocationy.NotEqual[NULL]}) {
        /if (${Me.Y} <= ${nextlocationylow} || ${Me.X} <= ${nextlocationxlow} || ${Me.Y} >= ${nextlocationyhigh} || ${Me.X} >= ${nextlocationxhigh}) {
            /face nolook fast loc ${nextlocationy},${nextlocationx}
        }
    }
    /if (${zoneshortname.NotEqual[${Zone.ShortName}]}) {
        /if (!${InvSlot[17].Item.ID}) {
            /if (!${InvSlot[13].Item.ID} && !${Defined[amnaked]}) {
                /guildsay - i died during movement - 
                /declare amnaked int outer 100
                /doevents flush Movement
                /return
            }
        }
        /echo -- ${Zone.Name} --
        /varset nextlocationy NULL
        /keypress forward
        /varset zoneshortname ${Zone.ShortName}
        /varset didinvis 0
        /varset j 1
        /varset i 0
        /delay 2
        /next i
    }
    /delay 1
    /goto :movementloop
}
/delay 2
/if (${Bool[${Ini[movement,${TargetZone},zoneshortnames].Arg[${Math.Calc[${i} + 1]},,]}]}) /next i
/varset i 0
/next junctions
/varset junctions 1
/varset savedvariable 1
/varset TargetZone ${startlocation.Arg[1,,]}
/varset i ${startlocation.Arg[2,,]}
/echo setting targetzone and zone im in
/next junctions
/echo returning
/return

Re: eqemu level 65 or so pal, druid, bers, wiz

Posted: Tue Aug 18, 2015 1:32 am
by toolisaccount
reserved for druid part1 - this is a 2 part macro - req newer toolismacro.ini

this isn't finished or tested yet im working on it!
todo - druids can snare? ewww
todo - druids can port?
todo - check radiant cure/ check ward
todo - druid ch
todo - stun and run around if mobs attack (coordinateplanes and cliffs)
todo - find a way to detect screen isn't black and fix /delay 1s before /memspellset 62

she does buffs, skin, pot9, protection for hp buff eww
she does thorns and regen if u ask her
same as like cleric or whatever
she does ward nature's boon and does druid paragon Spirit of the Wood if u ask
/gui buff pot9 group 1
/gui buff soe group 4
/gui buff thorns group 2
/tell testdruid buff regen
/tell testdruid buff ds
/tell testdruid buff thorns
/gui toggle paragon gets bsts and druids going
/gui toggle ward gets druids (clerics soon) going

there is autods and autoregen, ds detects mages and regen detects shms
you should be healing
autods -> 1 if u want druid to autods
autoregen -> 1 if u want druid to autoregen

/gui healers toggle healoutofgroup 1 or /gui healers toggle healoutofgroup on or something
that makes them heal out of group, or u could do specific names or groups
/gui group 1 toggle heal out of group 1 one of those works don't remember

druid participates in the heal rots if told

Code: Select all

#turbo 40

#chat group
#chat tell
#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 GuildRotSpam "#1#tells the#*#, '#2#next >>>> heal incoming#3#<<<<'"
#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 completehealspell        string outer "Karana's Renewal"
/declare quickhealspell           string outer "Nature's Touch"
/declare healrotspell             string outer "Nature's Infusion"
/declare hpbuff                   string outer "Blessing of the Nine"
/declare damageshieldspell        string outer "Legacy of Bracken"
/declare regenspell               string outer "Blessing of Replenishment"
/declare tampspell                string outer "Skin like Nature"
/declare hpselfbuff               string outer "Mask of the Forest"
/declare snarespell               string outer "Mire Thorns"
/declare stunspell                string outer "Breath of Karana"

/declare hpselfbuffduration        int    outer 192000
/declare hpselfbufftimer           timer  outer 0
/declare damageshieldspellduration int    outer 14400
/declare damageshieldspelltimer    timer  outer 0

/declare sticktype             string    outer behindonce loose 8
/declare quickhealat              int    outer 80
/declare assistat                 int    outer 98
/declare hpspellgem               int    outer 6
/declare autods                   int    outer 0
/declare autoregen                int    outer 0

/if (!${Me.Book["Mask of the Forest"]}) {
    /varset hpselfbuff "Mask of the Hunter"
    /if (!${Me.Book["Mask of the Hunter"]}) {
        /varset hpselfbuff "Mask of the Stalker"
    }
}

/declare storednpcid         int outer 0
/declare targetarray[8]      int outer 0

/declare makecamploc         string outer ${Me.Y},${Me.X}
/declare mageingrp           int   outer 2
/declare shmingrp            int   outer 2
/declare rotationtimer       timer outer 0
/declare rotationnumber      int   outer 1
/declare myrotnumber         int   outer 0
/declare rotdelay            int   outer 15
/declare dohealrot           int   outer 0
/declare oldtarget           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
/declare targetarraytotal    int   outer 0
/declare HealOutOfGroup      int   outer 0

/squelch /stick off

/declare mainassist string outer
/varset mainassist ${Param0}
/if (${Param1} == 1) /varset HealOutOfGroup 1

/echo druid 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

:mainloop
/call cleartarget
/call checkstuff
/if (!${ammoving} && ${Bool[${leashloc}]}) /call gotoloc
/if (${gettarget} && !${ammoving}) /call gettarget
/if (!${ammoving} && ${dohealrot}) /call healrot
/if (!${ammoving} && !${dohealrot}) /call checkheals
/if (${HealOutOfGroup} && !${ammoving}) /call checkhealsoutofgroup
/if (!${ammoving}) /call checkbuffs
/if (${Me.CombatState.NotEqual[COMBAT]} && ${Me.CombatState.NotEqual[COOLDOWN]} && ${Me.PctMana} < 98 && !${Me.Moving} && ${Me.Standing} && !${ammoving}) /sit
/delay 2
/doevents
/goto :mainloop

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}]}) {
    /target ID ${Group.Member[${i}].ID}
    /delay 2 
    /if (${Target.Type.Equal[PC]} && ${Target.ID} == ${Group.Member[${i}].ID}) {
        /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}]}) {
    /target ID ${Me.ID}
    /delay 2
    /say Quick Heal incoming >>>> %t <<<<
    /call cast ${quickhealspell} 2s checkhealed
}
/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 (${gettarg}) /call gettarg
    /next i
}    
/return

Sub healrot

/declare nextnumber int local
/if (${myrotnumber} == ${rotationnumber} && ${Me.CurrentMana} < ${Spell[${healrotspell}].Mana}) {
    /varset nextnumber ${Math.Calc[${myrotnumber} + 1]}
    /varset rotationnumber 0
    /if (${myrotnumber} == ${Ini[toolismacro,Values,totalrotationnumber]}) /varset nextnumber 1
    /guildsay ${nextnumber} next >>>> Heal incoming %T <<<<
    /guildsay OOM
    /return
}
/if (${myrotnumber} == ${rotationnumber} && ${rotationtimer} < 6) {
    /call getids "${mainassist}"
    /if (${Spawn[${Macro.Return}].ID} && ${Spawn[id ${Macro.Return}].Distance} < 100) {
        /target ID ${Macro.Return}
        /delay 2
        /delay 2s ${Me.SpellReady[${healrotspell}]}
        /if (${Me.CurrentMana} > ${Spell[${healrotspell}].Mana} && ${Target.Type.Equal[PC]} && ${Me.SpellReady[${healrotspell}]}) {
            /varset nextnumber ${Math.Calc[${myrotnumber} + 1]}
            /varset rotationnumber 0
            /if (${yaulptimer} < 160) /varset yaulptimer 0
            /if (${myrotnumber} == ${Ini[toolismacro,Values,totalrotationnumber]}) /varset nextnumber 1
            /guildsay ${nextnumber} next >>>> Heal incoming %T <<<<
            /call cast ${healrotspell} 2s checkhealedtwo
        } 
    }
}
/return

Sub checkbuffs

/if (${Me.Book[${hpselfbuff}]} && !${Me.Buff[${hpselfbuff}].ID} && !${Window[SpellBookWnd].Open} || ${Me.Book[${hpselfbuff}]} && ${hpselfbufftimer} < 6000 && !${Window[SpellBookWnd].Open}) {
    /if (!${Me.Gem[${hpselfbuff}]} && ${Me.CombatState.NotEqual[COMBAT]} && ${Me.Gem[${quickhealspell}]}) {
        /memspell 3 ${hpselfbuff}
        /delay 16s ${Me.SpellReady[${hpselfbuff}]}
        /keypress w
    }
    /if (${Me.SpellReady[${hpselfbuff}]} && ${Me.CurrentMana} > ${Spell[${hpselfbuff}].Mana} && ${Me.CombatState.NotEqual[COMBAT]} && !${Window[SpellBookWND].Open} && !${Me.Moving}) {
        /g self buffing myself with ${hpselfbuff}
        /echo self buffing myself with ${hpselfbuff}
        /call cast ${hpselfbuff} 2s
        /if (${Macro.Return.Equal["CAST_SUCCESS"]}) {
            /varset hpselfbufftimer ${hpselfbuffduration}
        }
    }
}
/if (${shmingrp} == 2 && ${mageingrp} == 2) {
    /if (${Group.Member[5].ID}) {
        /declare i int local
        /for i 0 to 5
        /if (${Group.Member[${i}].Class.Name.Find[shaman]}) {
            /varset shmingrp 1
            /guildsay there is a shaman in grp, they can do regen
        }
        /if (${Group.Member[${i}].Class.Name.Find[magician]}) {
            /varset mageingrp 1
            /guildsay there is a mage in grp, they can do ds
        }
        /next i
        /varset i 0
        /if (${mageingrp} == 2) /varset mageingrp 0
        /if (${shmingrp} == 2) /varset shmingrp 0
    }
}
/if (${autods == 1} && ${mageingrp} == 0) {
    /if (!${Me.Buff[${damageshieldspell}].ID} && !${Window[SpellBookWND].Open} || ${damageshieldspelltimer} < 80 && !${Window[SpellBookWND].Open}) {
        /if (!${Me.Gem[${damageshieldspell}]} && ${Me.CombatState.Find[REST]} && ${Me.Buff[${hpselfbuff}].ID} || !${Me.Gem[${damageshieldspell}]} && ${Me.CombatState.Equal[COOLDOWN]} && ${Me.Buff[${hpselfbuff}].ID} || !${Me.Gem[${damageshieldspell}]} && ${Me.CombatState.Equal[ACTIVE]} && ${Me.Buff[${hpselfbuff}].ID}) {
            /if (${hpselfbufftimer} < 6000) /return
            /memspell 8 ${damageshieldspell}
            /delay 16s ${Me.Gem[${damageshieldspell}]}
            /keypress w 
        }
        /if (${Me.SpellReady[${damageshieldspell}]} && ${Me.CombatState.NotEqual[COMBAT]}) {
            /call checkgrouprange "${damageshieldspell}"
            /if (${Macro.Return} > 0) {
                /target id ${Macro.Return}
                /delay 2
                /guildsay druid ds inc ${Spawn[${Macro.Return}.Name}
                /if (!${Window[SpellBookWND].Open}) /call cast ${damageshieldspell} 1s
                /if (${Macro.Return.Equal["CAST_SUCCESS"]}) /varset damageshieldspelltimer ${damageshieldspellduration}
            }
        }
    }
}
/if (${autoregen == 1} && ${shmingrp} == 0) {
    /if (!${Me.Buff[${regenspell}].ID} && !${Window[SpellBookWND].Open} || ${regenspelltimer} < 80 && !${Window[SpellBookWND].Open}) {
        /if (!${Me.Gem[${regenspell}]} && ${Me.CombatState.Find[REST]} && ${Me.Buff[${hpselfbuff}].ID} || !${Me.Gem[${regenspell}]} && ${Me.CombatState.Equal[COOLDOWN]} && ${Me.Buff[${hpselfbuff}].ID} || !${Me.Gem[${regenspell}]} && ${Me.CombatState.Equal[ACTIVE]} && ${Me.Buff[${hpselfbuff}].ID}) {
            /if (${hpselfbufftimer} < 6000) /return
            /memspell 7 ${regenspell}
            /delay 16s ${Me.Gem[${regenspell}]}
            /keypress w 
        }
        /if (${Me.SpellReady[${regenspell}]} && ${Me.CombatState.NotEqual[COMBAT]}) {
            /call checkgrouprange "${regenspell}"
            /if (${Macro.Return} > 0) {
                /target id ${Macro.Return}
                /delay 2
                /guildsay druid regen inc ${Spawn[${Macro.Return}.Name}
                /if (!${Window[SpellBookWND].Open}) /call cast ${regenspell} 1s
                /if (${Macro.Return.Equal["CAST_SUCCESS"]}) /varset regenspelltimer ${regenspellduration}
            }
        }
    }
}
/if (!${dohealrot}) /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} ${HealOutOfGroup} ${amnaked}
            /if (!${Window[SpellBookWnd].Open}) /docommand /mac rez ${mainassist} ${HealOutOfGroup}
        }
    }
}
/return

Sub gettarget

/call getids "${mainassist}"
/if (${Spawn[${Macro.Return}].ID} && ${Spawn[${Macro.Return}].Distance} < 200) {
    /target ID ${Macro.Return}
    /delay 2
    /assist
    /delay 2
    /if (${Target.PctHPs} < ${assistat} && ${Target.Type.Equal[NPC]} && ${Target.Type.NotEqual[CORPSE]}) {
        /varset targetid ${Target.ID}
        /varset targetdead 0
        /varset gettarget 0
        /varset didstick 0
        /echo My Target is now ${Target.CleanName}
    }
}
/return

Sub cleartarget

/declare i int local 1

/if (${Spawn[${targetid}].Type.Equal[CORPSE]} && !${targetdead} || !${Spawn[${targetid}].Type.Equal[NPC]} && !${targetdead}) {
    /varset targetdead 1
    /varset gettarget 1
    /varset targetid 0
    /if (${Me.CombatState.NotEqual[COMBAT]} && !${NearestSpawn[1,npc radius 50].ID}) /call returntocamp "face"
}
/if (${targetarraytotal}) {
    /for i 1 to 8
    /if (${targetarray[${i}]} && ${Spawn[${targetarray[${i}]}].Type.Equal[CORPSE]} || ${targetarray[${i}]} && !${Spawn[${targetarray[${i}]}].Type.Equal[NPC]}) {
        /varset targetarray[${i}] 0
        /varset targetarraytotal ${Math.Calc[${targetarraytotal} - 1]}
        /echo clearing target array = not npc or is corpse
    }
    /if (${targetarray[${i}]} == ${targetid} && ${targetid}) {
        /varset targetarray[${i}] 0
        /varset targetarraytotal ${Math.Calc[${targetarraytotal} - 1]}
        /echo clearing target array because target array = targetid
    }
/next i
}
/return

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 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 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 2
    /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_GuildRotSpam(Line, Senderperson, Spam, RotTarget)

/varset rotationnumber ${Spam}
/varset rotationtimer ${rotdelay}
/return

Sub Event_Buff(Line, TargetPerson, command)

/varset TargetPerson ${TargetPerson.Right[-2].Left[-2]}
/if (${command.Arg[1,].Equal[protection]} || ${command.Arg[1,].Equal[pot9]} || ${command.Arg[1,].Equal[skin]} || ${command.Arg[1,].Equal[regen]} || ${command.Arg[1,].Equal[ds]} || ${command.Arg[1,].Equal[thorns]} || ${command.Arg[1,].Equal[soe]}) {
    /declare tempvariable string local 
    /declare tempvariabletwo string local
    /if (${command.Arg[1,].Equal[protection]}) {
        /varset command ${command.Right[-11]}
        /varset tempvariable ${hpbuff}
        /varset tempvariabletwo druidhp
        /declare gemnumber int local 6
    }
    /if (${command.Arg[1,].Equal[pot9]}) {
        /varset command ${command.Right[-5]}
        /varset tempvariable ${hpbuff}
        /varset tempvariabletwo druidhp
        /declare gemnumber int local 6
    }
    /if (${command.Arg[1,].Equal[skin]}) {
        /varset command ${command.Right[-5]}
        /varset tempvariable ${hpbuff}
        /varset tempvariabletwo druidhp
        /declare gemnumber int local 6
    }
    /if (${command.Arg[1,].Equal[regen]}) {
        /varset command ${command.Right[-6]}
        /varset tempvariable ${regenspell}
        /varset tempvariabletwo priestregen
        /declare gemnumber int local 7
    }
    /if (${command.Arg[1,].Equal[ds]}) {
        /varset command ${command.Right[-3]}
        /varset tempvariable ${damageshieldspell}
        /varset tempvariabletwo mageds
        /declare gemnumber int local 8
    }
    /if (${command.Arg[1,].Equal[thorns]}) {
        /varset command ${command.Right[-7]}
        /varset tempvariable ${damageshieldspell}
        /varset tempvariabletwo mageds
        /declare gemnumber int local 8
    }
    /if (${command.Arg[1,].Equal[soe]}) {
        /varset command ${command.Right[-4]}
        /varset tempvariable "Flight of Eagles"
        /varset tempvariabletwo druiddmf
        /declare gemnumber int local 8
    }
    /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 18s !${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 24s ${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[${hpbuff}]}) {
        /if (${Target.ConColor.Equal[GREY]} || ${Target.ConColor.Equal[GREEN]}) /varset tempvariable "Skin like Nature"
    }
    /if (${tempvariable.Equal[${regenspell}]}) {
        /if (${Target.ConColor.Equal[GREY]} || ${Target.ConColor.Equal[GREEN]}) /varset tempvariable "Chloroplast"
    }
    /if (${tempvariable.Equal[${damageshieldspell}]}) {
        /if (${Target.ConColor.Equal[GREY]} || ${Target.ConColor.Equal[GREEN]}) /varset tempvariable "Shield of Thorns"
    }
    /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 24s ${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
    }
    /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[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[ward]}) {
    /if (${Me.AltAbilityReady[Nature's Boon]}) {
        /call findgroup
        /if (${Ini[toolismacro,Values,druidward].Equal[empty]}) {
            /ini "toolismacro" "Values" "druidward" "${Me.Name}"
            /delay 2
            /guildsay Nature's Boon inc...
            /aa act Nature's Boon
            /delay 6
            /timed 20 /ini "toolismacro" "Values" "druidward" "empty"
        }
    }
    /return
}
/if (${action.Arg[1,].Equal[tank]}) {
    /if (${action.Arg[1,].Equal[mainassist]}) /varset action ${action.Right[-11]}
    /if (${action.Arg[1,].Equal[tank]}) /varset action ${action.Right[-5]}
    /varset mainassist ${action}
    /return
}
/if (${action.Find[paragon]}) {
    /if (${Me.AltAbilityReady[Spirit of Wood]} && ${Me.AltAbilityReady[Mass Group Buff]}) {
        /declare groupnumber int local
        /call findgroup
        /varset groupnumber ${Macro.Return}
        /if (${Ini[toolismacro,Values,druidparagon].Equal[empty]}) {
            /ini "toolismacro" "Values" "druidparagon]" "${Me.Name}"
            /delay 2
            /call checkgrouprange "Spirit of Wood"
            /if (${Macro.Return} != 0 && ${Ini[toolismacro,Values,druidparagon].Equal[${Me.Name}]}) {
                /target ID ${Macro.Return}
                /delay 2
                /if (${Target.Type.Equal[PC]}) {
                    /aa act Mass Group Buff
                    /delay 2
                    /guildsay Spirit of Wood inc...
                    /aa act Spirit of Wood
                    /delay 6
                }
            }
            /timed 20 /ini "toolismacro" "Values" "druidparagon" "empty"
        }
    }
    /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.Equal[Shadowknight]}) /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[nuke]}) {
    /if (${action.Find[dont]} || ${action.Find[off]}) {
        /varset donukes 0
        /echo turning nukes OFF
        /return
    }
    /varset donukes 1
    /echo turning nukes ON
    /return
}
/if (${action.Find[set rot]}) {
    /varset action ${action.Right[-8]}
    /ini "toolismacro" "Values" "totalrotationnumber" "0"
    /doevents flush GuildRotSpam
    /if (${Bool[${action}]}) {
        /varset rotdelay ${action}
        /echo ${action}
        /echo Rotation delay set at ${rotdelay}
        /return
    }
    /return
}
/if (${action.Find[heal rot]}) {
    /declare i int local
    /declare j int local
    /for i 1 to 14
    /if (${Targets.Arg[${i},].Equal[dont]}) {
        /varset dohealrot 0
        /varset rotationnumber 1
        /ini "toolismacro" "Values" "totalrotationnumber" "0"
        /echo cleared variables and turned heal rot off
        /return
    }
    /next i
    /varset dohealrot 1
    /varset myrotnumber ${j}
    /varset rotationnumber 1
    /delay 1s
    /if (${myrotnumber} > ${Ini[toolismacro,Values,totalrotationnumber]}) {
        /ini "toolismacro" "Values" "totalrotationnumber" "${myrotnumber}"
    }
    /echo my number in rot is ${j}, rotation started
    /if (${myrotnumber} == 1) /guildsay starting heal rotation
    /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[accept rez]}) {
    /if (${Window[ConfirmationDialogBox].Open} || !${InvSlot[13].Item.ID}) {
        /docommand /mac rez ${mainassist} ${HealOutOfGroup}
    }
    /return
}
/if (${action.Find[rebuff]}) {
    /if (${FindItem[=Talisman of the Burrower].ID}) /call clickitem "Talisman of the Burrower" "5"
    /varset hpselfbufftimer 0
    /return
}
/if (${action.Find[consent]}) {
    /consent ${action}
    /return
}
/if (${action.Find[clickies]}) {
    /if (${FindItem[=Talisman of the Burrower].ID}) /call clickitem "Talisman of the Burrower" "5"
    /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[healat]}) {
    /varset action ${action.Right[-7]}
    /varset quickhealat ${action}
    /echo now healing at ${action}
    /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[nukeat]}) /varset nukeat ${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

Re: eqemu level 65 or so pal, druid, bers, wiz

Posted: Tue Aug 18, 2015 1:33 am
by toolisaccount
reserved for druid part2
this is druid.mac part2 this sht isn't tested yet

Code: Select all

Sub page(direction, duration)

/if (${direction.Find[down]}) {
    /keypress Page_Down hold 
    /delay ${duration}
    /keypress Page_Down
}
/if (${direction.Find[up]}) {
    /keypress Page_Up hold 
    /delay ${duration}
    /keypress Page_Up
}
/return

Sub returntocamp(face)

/if (${Bool[${makecamploc}]}) {
    /call gotoloc "${makecamploc}" 
    /if (${Macro.Return} == 1 && ${face.Equal[face]}) {
        /if (${Me.Heading.Degrees} > 179) /face fast heading ${Math.Calc[${Me.Heading.Degrees} - 180]}
        /if (${Me.Heading.Degrees} < 180) /face fast heading ${Math.Calc[${Me.Heading.Degrees} + 180]}
    }
}
/return

Sub gotoloc(loc, command)

/declare locfrom string local
/declare zoneshortname string local ${Zone.ShortName}
/if (!${Bool[${loc}]}) /varset locfrom leashloc
/if (${Bool[${loc}]}) /varset locfrom loc
/declare nextlocationy string local ${${locfrom}.Arg[1,,]}
/declare nextlocationx string local ${${locfrom}.Arg[2,,]}
/declare nextlocationyhigh string local ${Math.Calc[${${locfrom}.Arg[1,,]} + 5]}
/declare nextlocationylow string local ${Math.Calc[${${locfrom}.Arg[1,,]} - 5]}
/declare nextlocationxhigh string local ${Math.Calc[${${locfrom}.Arg[2,,]} + 5]}
/declare nextlocationxlow string local ${Math.Calc[${${locfrom}.Arg[2,,]} - 5]}
/if (${nextlocationy.NotEqual[NULL]} && ${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
    /if (${command.NotEqual[empty]}) /call ${command}
    /return
}
:travel
/keypress forward hold
/if (${nextlocationy.NotEqual[NULL]} && ${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
    /keypress forward
    /if (!${Me.Class.PureCaster}) /varset didstick 0
    /if (${command.NotEqual[empty]}) /call ${command}
    /return 1
}
/if (${nextlocationy.NotEqual[NULL]}) {
    /if (${Me.Y} <= ${nextlocationylow} || ${Me.X} <= ${nextlocationxlow} || ${Me.Y} >= ${nextlocationyhigh} || ${Me.X} >= ${nextlocationxhigh}) {
        /face nolook fast loc ${nextlocationy},${nextlocationx}
    }
}
/if (${zoneshortname.NotEqual[${Zone.ShortName}]}) {
    /if (!${InvSlot[17].Item.ID}) {
        /if (!${InvSlot[13].Item.ID} && !${Defined[amnaked]}) {
            /guildsay - i died during movement - 
            /declare amnaked int outer 100
            /keypress forward
            /varset makecamploc ${Me.Y},${Me.X}
            /return
        }
    }
}
/if (${zoneshortname.NotEqual[${Zone.ShortName}]}) {
    /if (${InvSlot[17].Item.ID} || ${amnaked} == 100) {
        /if (${InvSlot[13].Item.ID} && !${Defined[amnaked]} || !${InvSlot[13].Item.ID} && ${amnaked} == 100) {
            /echo ~~ ${Zone.Name} ~~
            /keypress forward
            /deletevar zoneoutloc
            /varset makecamploc ${Me.Y},${Me.X}
            /return
        }
    }
/return
}
/delay 1
/goto :travel
/return

Sub zonedoor

/keypress forward
:doorloop
/keypress u
/delay 2
/keypress u
/delay 1s
/keypress u
/delay 2
/call viewing
/if (${zoneshortname.Equal[${Zone.ShortName}]}) /goto :doorloop
/return

Sub door

/keypress u
/if (!${Me.Moving}) {
    /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc[${j}]door]}]}) {
        /doortarget ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc[${j}]door]}]}
        /face door
        /keypress u
    }
}
/return

Sub viewing

/declare variable string local page_down
:viewing
/if (${zoneshortname.Equal[${Zone.ShortName}]}) {
    /keypress ${variable} hold
    /delay 2
    /keypress ${variable}
    /keypress u
    /if (${zoneshortname.Equal[${Zone.ShortName}]}) {
        /keypress ${variable} hold
        /delay 4
        /keypress ${variable}
        /keypress u
        /if (${zoneshortname.Equal[${Zone.ShortName}]}) {
            /keypress ${variable} hold
            /delay 4
            /keypress ${variable}
            /keypress u
            /if (${variable.Equal[page_down]}) {
                /varset variable page_up
                /goto :viewing
            }
            /if (${variable.Equal[page_up]}) {
                /varset variable page_down
                /goto :viewing
            }
        }
    }
}
/return

Sub findgroup

/declare totalgroups int local
/declare i int local
/declare j int local
/varset totalgroups ${Ini[toolismacro,Values,totalgroups]}
/for i 1 to ${totalgroups}
/for j 1 to 6
/if (${Ini[toolismacro,Group${i},member${j}].Equal[${Me.Name}]}) {
    /return ${i}
}
/next j
/next i
/echo GROUP NOT FOUND ---- returning +1
/return ${Math.Calc[${totalgroups} + 1]}

Sub groupcheck

/declare i int local
/declare grpcheck int local 0
:checkgroup
/for i 0 to ${Group}
/if (${Group.Member[${i}].Distance} < 120 && ${Group.Member[${i}].ID}) /varset grpcheck ${Math.Calc[${grpcheck} + 1]}
/next i
/if (${grpcheck} == ${Group.GroupSize}) {
    /delay 1s
    /return 1
} else {
    /varset grpcheck 0
    /delay 2
    /goto :checkgroup
}
/return

Sub Event_Movement(Line, SenderPerson, targetperson, TargetZone)

/if (${Bool[${targetperson}]}) {
    /declare name int local
    /declare force int local
    /for force 1 to 10
    /if (${targetperson.Arg[${force},].Equal[force]}) {
        /declare forcemove bool local TRUE
    }
    /if (${targetperson.Arg[1,].Equal[force]} && !${Bool[${targetperson.Arg[2,]}]}) /goto :beginning
    /next force
    /if (${targetperson.Arg[1,].Equal[group]}) {
        /if (${targetperson.Arg[1,].Equal[group]}) {
            /declare groupnumber int local
            /call findgroup
            /varset targetperson ${targetperson.Right[-6]}
            /if (${targetperson.Find[force]}) /varset targetperson ${targetperson.Left[-6]}
            /for groupnumber 1 to ${Ini[toolismacro,Values,totalgroups]}
            /if (${targetperson.Arg[${groupnumber},,]} == ${Macro.Return}) {
                /goto :beginning
            } else {
                /next groupnumber 
                /return
            }
        }
    }
    /for name 1 to 10
    /if (${targetperson.Arg[${name},].Equal[${Me.Name}]}) /goto :beginning
    /next name
    /return
}
:beginning
/if (!${Bool[${Ini[movement,${TargetZone},zoneshortnames].Arg[1,,]}]}) {
    /echo Incorrect Destination
    /return
}
/declare zoneshortname     string local ${Zone.ShortName}
/declare savedtargetzone   string local ${TargetZone}
/declare startlocation     string local 0
/declare tempheading       float  local 0
/declare nextlocationx     string local NULL
/declare nextlocationy     string local NULL
/declare nextlocationxhigh string local
/declare nextlocationxlow  string local
/declare nextlocationyhigh string local
/declare nextlocationylow  string local
/declare i int local
/declare j int local
/declare junctions int local
/declare savedvariable int local 0
/if (${Me.Class.Name.NotEqual[Bard]}) /declare didinvis int local 0
/declare grpnumber int local 0

/echo - Starting -
/for junctions 1 to 12
/echo ${junctions} junctions
/for i 1 to 10
/echo ${i} i variable at i loop
:start
/if (${Bool[${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]}]}) {
    /echo ${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]}
    /varset TargetZone ${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]}
    /echo changed targetzone to ${TargetZone}
    /echo ${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]} targetzones junctions
    /echo ${i} i variable in bool junctions
    /varset i 1
}
/if (!${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]} && ${TargetZone.NotEqual[${savedtargetzone}]}) {
    /varset TargetZone ${savedtargetzone}
    /echo changed targetzone to savedtargetzone
    /echo ${junctions} junctions
    /echo ${i} i variable in not bool junctions
    /echo ${j} j 
    /varset i 1  
}
/if (${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]} && ${TargetZone.NotEqual[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]}) {
    /varset TargetZone ${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}
    /echo changed targetzone to savedtargetzone junction arg junctions
    /echo ${junctions}
    /echo ${i} i variable in bool junctions arg junctions
    /echo ${j} j
    /varset i 1
}
/if (${savedvariable} != 1) {
    /if (${Bool[${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,].Equal[${Zone.ShortName}]}]} && ${startlocation.Equal[0]}) {
        /echo found starting zone
        /varset startlocation ${TargetZone},${i},
        /echo ${startlocation}
        /echo ${i} i variable
        /echo ${j} j variable
    }
    /if (${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,].NotEqual[${Zone.ShortName}]} && ${startlocation.NotEqual[0]}) {
        /echo found end of zones
        /varset junctions 1
        /varset savedvariable 1
        /varset TargetZone ${startlocation.Arg[1,,]}
        /varset i ${startlocation.Arg[2,,]}
    }
}
/if (${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[finish]} && ${zoneshortname.Equal[${Zone.ShortName}]}) {
    /keypress w
    /varset didinvis 0
    /echo i have reached my destination
    /guildsay im at target destination
    /varset makecamploc ${Me.Y},${Me.X}
    /return
}
/if (${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,].Equal[${Zone.ShortName}]}) {
    /if (!${forcemove}) {
        /if (${Me.Class.Name.Equal[Bard]} && !${didinvis}) {
            /call groupcheck
        }
        /if (${Me.Class.Name.NotEqual[Bard]} && !${didinvis}) {
            /call findgroup
            /varset grpnumber ${Macro.Return}
            :waitforinvis
            /doevents Toggle
            /if (${Macro.Return.Equal[abort]}) {
                /varset makecamploc ${Me.Y},${Me.X}
                /return
            }
            /if (${Ini[toolismacro,Movement,group${grpnumber}ready].Equal[ready]}) {
                /varset didinvis 1
            }
            /if (${Ini[toolismacro,Movement,group${grpnumber}ready].Equal[empty]}) {
                /delay 2
                /echo waiting for invis
                /goto :waitforinvis
            }
        }
    }
    /if (${Me.Class.Name.Equal[Bard]} && !${didinvis}) {
        /squelch /twist off
        /varset didinvis 1
        /varset dotwist 1
        /if (!${Me.Gem[${travelsong}]} && !${Cursor.ID}) {
                /guildsay sec memming travel song
                /memspell ${travelsonggem} ${travelsong}
                /delay 2s
        }
        /squelch /twist ${travelsonggem}
        /delay 2s
        /if (!${Me.Casting.ID}) {
            /squelch /twist ${speedsonggem}
            /delay 2s
            /if (${Me.Casting.ID}) /delay 1s
            /if (!${Me.Gem[${invissong}]} && !${Cursor.ID}) {
                /guildsay sec memming invis song
                /memspell ${travelsonggem} ${invissong}
                /delay 2s
            }
            /squelch /twist ${travelsonggem}
            /delay 3s 
        }
        /if (${Me.Casting.ID}) /delay 2s
        /call findgroup
        /varset grpnumber ${Macro.Return}
        /ini "toolismacro" "Movement" "group${grpnumber}ready" "ready"
        /delay 6
        /ini "toolismacro" "Movement" "group${grpnumber}ready" "empty"
    }
    /echo ${j} j (before for loop)
    /for j 1 to 30
    /echo ${j} j
    /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}]}]} && ${savedvariable} != 1) {
        /varset savedvariable ${j}
        /varset nextlocationy ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}].Arg[1,,]}
        /varset nextlocationx ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}].Arg[2,,]}
        /varset nextlocationyhigh ${Math.Calc[${nextlocationy} + 75]}
        /varset nextlocationylow ${Math.Calc[${nextlocationy} - 75]}
        /varset nextlocationxhigh ${Math.Calc[${nextlocationx} + 75]}
        /varset nextlocationxlow ${Math.Calc[${nextlocationx} - 75]}
        /if (${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
            /echo found correct loc
            /varset savedvariable 1
            /goto :end
        }
        /varset nextlocationyhigh ${Math.Calc[${nextlocationy} + 175]}
        /varset nextlocationylow ${Math.Calc[${nextlocationy} - 175]}
        /varset nextlocationxhigh ${Math.Calc[${nextlocationx} + 175]}
        /varset nextlocationxlow ${Math.Calc[${nextlocationx} - 175]}
        /if (${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
            /echo found nearest loc
            /varset savedvariable 1
            /goto :nearestlocloop
        }
        /echo this didnt work
        /varset nextlocationy NULL
        /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${savedvariable}].Arg[1,,]}]}) {
            /varset savedvariable ${Math.Calc[${j} + 1]}
            /varset nextlocationy NULL          
            /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${savedvariable}].Arg[1,,]}]}) {
                /echo next j
                /next j
            }
            /if (${Bool[${Ini[movement,${TargetZone},zoneshortnames].Arg[${Math.Calc[${i} + 1]},,]}]}) {
                /varset j 0
                /next i
            }
            /if (${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]}) {
                /varset j 0
                /echo next junctions instead of j
                /varset TargetZone ${savedtargetzone}
                /next junctions
            }
        }
        /echo this fired
        /varset savedvariable ${Math.Calc[${j} + 1]}
        /delay 2
        /next i
    }
        /if (!${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]} && ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[junction]} || ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[finish]}) {
            /keypress w
            /varset didinvis 0
            /echo i have reached my destination
            /guildsay im at target destination
            /varset makecamploc ${Me.Y},${Me.X}
            /return
        } 
    :end
    /if (${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[junction]}) {
        /keypress forward
        /varset j 1
        /varset TargetZone ${savedtargetzone}
        /if (!${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]}) {
            /varset TargetZone ${startlocation.Arg[1,,]}
            /varset i ${startlocation.Arg[2,,]}
        } 
        /if (${Bool[${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]}]}) {
            /echo changing junctions +1 from hitting a junction
            /next junctions
        }
    }
    /if (${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[zonedoor]} && ${nextlocationy.NotEqual[NULL]}) {
        /keypress forward
        /varset j 1
        :doorloop
        /keypress u
        /delay 2
        /keypress u
        /delay 1s
        /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}zonedoor]}]}) {
            /face nolook loc ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}zonedoor]}
            /keypress u
        }
        /call viewing
        /if (${zoneshortname.Equal[${Zone.ShortName}]}) /goto :doorloop
        /varset nextlocationy NULL
    }
    /if (${zoneshortname.Equal[${Zone.ShortName}]}) {
        /varset tempheading ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,]})
        /if (${Math.Calc[(360 - ${tempheading}) + 45]} > 360 && ${Me.Heading.Degrees} <= ${Math.Calc[(360 - ${tempheading}) - 45]} || ${Math.Calc[(360 - ${tempheading}) + 45]} > 360 && ${Me.Heading.Degrees} <= ${Math.Calc[45 - (360 - ${tempheading})]}) {
            /goto :headingdone
        }
        /if (${Math.Calc[(360 - ${tempheading}) - 45]} < 0 && ${Me.Heading.Degrees} <= ${Math.Calc[(360 - ${tempheading}) + 45]} || ${Math.Calc[(360 - ${tempheading}) - 45]} < 0 && ${Me.Heading.Degrees} <= ${Math.Calc[45 - (360 - ${tempheading})]}) { 
            /goto :headingdone
        }
        /if (${Math.Calc[${Me.Heading.Degrees}]} >= ${Math.Calc[360 - ${tempheading}]} && ${Math.Calc[${Me.Heading.Degrees}]} <= ${Math.Calc[(360 - ${tempheading}) + 45]} || ${Math.Calc[${Me.Heading.Degrees}]} >= ${Math.Calc[(360 - ${tempheading}) - 45]} && ${Math.Calc[${Me.Heading.Degrees}]} <= ${Math.Calc[360 - ${tempheading}]}) {
            /goto :headingdone
        }
            /if (${tempheading} <= 180) {
            /echo Tempheading < 180
                /if (${Me.Heading.Degrees} >= ${Math.Calc[(360 - ${tempheading}) - 180]} && ${Me.Heading.Degrees} <= ${Math.Calc[360 - ${tempheading}]}) {
                    /varset tempheading ${Math.Calc[${tempheading} + 45]}
                    /goto :heading
                } else {
                    /if (${tempheading} <= 45) {
                        /varset tempheading ${Math.Calc[315 + ${tempheading}]}
                        /goto :heading
                    }
                    /varset tempheading ${Math.Calc[${tempheading} - 45]}
                    /goto :heading
                }
            }
            /if (${tempheading} > 180) {
            /echo Tempheading > 180
                /if (${Me.Heading.Degrees} <= ${Math.Calc[(360 - ${tempheading}) + 180]} && ${Me.Heading.Degrees} >= ${Math.Calc[360 - ${tempheading}]}) {
                    /varset tempheading ${Math.Calc[${tempheading} - 45]}
                    /goto :heading
                } else {
                    /if (${tempheading} <= 315) {
                        /varset tempheading ${Math.Calc[${tempheading} + 45]}
                        /goto :heading
                    }
                    /varset tempheading ${Math.Calc[(360 - ${tempheading}) - 45]}
                    /goto :heading
                }
            }
            :heading
            /face heading ${tempheading}
        :headingdone
        /face fast heading ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,]}
    }
    /varset nextlocationy NULL
    /varset nextlocationx NULL
    /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}]}]}) {
        /varset nextlocationy ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}].Arg[1,,]}
        /varset nextlocationx ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}].Arg[2,,]}
    }
    :nearestlocloop
    /doevents Toggle
    /if (${Macro.Return.Equal[abort]}) {
        /varset makecamploc ${Me.Y},${Me.X}
        /return
    }
    /varset nextlocationyhigh ${Math.Calc[${nextlocationy} + 5]}
    /varset nextlocationylow ${Math.Calc[${nextlocationy} - 5]}
    /varset nextlocationxhigh ${Math.Calc[${nextlocationx} + 5]}
    /varset nextlocationxlow ${Math.Calc[${nextlocationx} - 5]}
    :movementloop
    /keypress forward hold
    /if (${nextlocationy.NotEqual[NULL]} && ${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
        /keypress forward
        /delay 2
        /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}command]}]}) /call ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}command]}
        /next j
    }
    /if (${nextlocationy.NotEqual[NULL]}) {
        /if (${Me.Y} <= ${nextlocationylow} || ${Me.X} <= ${nextlocationxlow} || ${Me.Y} >= ${nextlocationyhigh} || ${Me.X} >= ${nextlocationxhigh}) {
            /face nolook fast loc ${nextlocationy},${nextlocationx}
        }
    }
    /if (${zoneshortname.NotEqual[${Zone.ShortName}]}) {
        /if (!${InvSlot[17].Item.ID}) {
            /if (!${InvSlot[13].Item.ID} && !${Defined[amnaked]}) {
                /guildsay - i died during movement - 
                /declare amnaked int outer 100
                /doevents flush Movement
                /return
            }
        }
        /echo -- ${Zone.Name} --
        /varset nextlocationy NULL
        /keypress forward
        /varset zoneshortname ${Zone.ShortName}
        /varset didinvis 0
        /varset j 1
        /varset i 0
        /delay 2
        /next i
    }
    /delay 1
    /goto :movementloop
}
/delay 2
/if (${Bool[${Ini[movement,${TargetZone},zoneshortnames].Arg[${Math.Calc[${i} + 1]},,]}]}) /next i
/varset i 0
/next junctions
/varset junctions 1
/varset savedvariable 1
/varset TargetZone ${startlocation.Arg[1,,]}
/varset i ${startlocation.Arg[2,,]}
/echo setting targetzone and zone im in
/next junctions
/echo returning
/return

Re: eqemu level 65 or so pal, druid, bers, wiz

Posted: Tue Aug 18, 2015 1:34 am
by toolisaccount
reserved for bers part1 -this feels like a monk thing
this is berserker part1

rage volley apparently works close up
gonna change this now, 09/06/2015 9:51pm est

still gotta do the part where they summon axes ill do it very very soon
todo - "Sprint Discipline" maybey this is kinda useless except for training ppl
todo - test axe usage with bards pulling almost no agro- disabled for now
todo - possible delay cycle attacks if berserker is pulling aggro -very soon
todo - possible berserker disc timer if discs interfere with eachother
todo - manual /stick with throwing axes implemented????
todo - /autofire with rage volley????
todo -summoning axes works kind of properly... summons almost 400 then almost 800 after u use first axe 8/22/2015 9:17am est
todo-both summoning axes code can be changed from Stacks < 4 to StackCount < 400

not sure about berserkers there is 1 thing tho
we have 2 variables left do be defined
cleavinginsteadofinvuln = 1 if u wanna be a lil more dps instead of invuln
and
there is like 5 combat abilities
im not sure about berserkers or wat one is good yet so i guessed
set the combatability to the ability of your choosing, default is "Blind Rage Discipline"

"Blind Rage Discipline" is level 58 says greatly increases damage - 25 min repop
"Cleaving Rage Discipline" is level 54 says all crit hits - 25 min repop
"Burning Rage Discipline" is level 60 says melee damage cap increase - 30min repop
"Inspired Anger Discipline" is level 53 says impossible to miss - 25 min repop
"Focused Fury Discipline" is level 57 says melee accuracy increase - 25 min repop

"Blind Rage Discipline" lasts for 30 seconds, "Burning Rage Discipline" lasts for 60 seconds

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 Enraged  "#1# enraged#*#"
#Event GuildAssist "#1#tells the guild, 'assist me with#*#'"
#Event Toggle "#1#guild, '#2#toggle#3#'"
#Event Movement "#1#guild, '#2#goto#3#'"

Sub Main

/declare randomstring            string outer "glitchishere"
/declare assistat                int outer 98
/declare combatability           string outer "Blind Rage Discipline"
/declare cleavinginsteadofinvuln int outer 0
/declare berserkeraxe            string outer Tainted Axe of Hatred

/declare makecamploc     string outer ${Me.Y},${Me.X}
/declare sticktype       string outer behindonce loose 8
/declare warcry          string outer "empty"
/declare axewarningerror string outer "null"
/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

/if (${Me.CombatAbility[Ancient: Cry of Chaos]}) {
    /varset warcry "Ancient: Cry of Chaos"
}
/if (!${Me.CombatAbility[Ancient: Cry of Chaos]}) {
    /varset warcry "Battle Cry of the Matruq"
    /if (!${Me.CombatAbility[Battle Cry of the Mastruq]}) {
        /varset warcry "War Cry of Dravel"
        /if (!${Me.CombatAbility[War Cry of Dravel]}) {
            /varset warcry "Battle Cry of Dravel"
        }
    }
}

/if (!${Me.CombatAbility[Tainted Axe of Hatred]}) {
    /varset berserkeraxe Deathfury Axe
    /echo Tainted axe of hatred disc not found, setting berserkeraxe to Deathfury Axe
}

/squelch /stick off
/squelch /assist off

/declare mainassist string outer
/varset mainassist ${Param0}

/if (${Defined[Param0]}) {
/echo My main assist is set to ${mainassist}
} else {
/echo This Macro needs a Main assist to run ... try /mac berserker Tanksname ....
/end
}
/echo berserker macro started

:berserkerloop
/if (!${ammoving} && ${Bool[${leashloc}]}) /call gotoloc
/if (!${ammoving}) /call cleartarget
/if (${gettarget} && !${ammoving}) /call gettarget
/if (${targetid} == ${Target.ID}) /call killtarg
/if (!${ammoving}) /call checkstuff
/if (!${ammoving} && ${Me.CombatState.NotEqual[COMBAT]}) { 
    /if (!${Me.Casting.ID} && ${Me.Standing} && !${Me.Moving})  /sit
}
/doevents
/delay 2
/goto :berserkerloop

Sub gettarget

/call getids "${mainassist}"
/if (${Spawn[${Macro.Return}].ID} && ${Spawn[id ${Macro.Return}].Distance} < 200) {
    /target ID ${Macro.Return}
    /delay 2
    /assist
    /delay 2
    /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
        /varset didstick 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 (${Me.PctHPs} < 30 && ${Me.CombatAbilityReady["Battle Focus Discipline"]}) {
    /guildsay clicking off ability for Battle Focus
    /nomodkey /notify CombatAbilityWnd CAW_CombatEffectButton leftmouseup
    /delay 2
    /doability "Battle Focus Discipline"
}
/if (${dontmelee} == 1) /return
/if (${Me.AbilityReady["Kick"]} && ${Target.Type.Equal[NPC]}) {
        /doability "Kick"
}
/if (${Me.CombatAbilityReady[${warcry}]} && ${Target.PctHPs} < 95 && ${Target.Type.Equal[NPC]}) {
    /doability ${warcry}
}
/if (${Me.AltAbilityReady[Untamed Rage]} && ${Target.PctHPs} < 95 && ${Target.Type.Equal[NPC]}) {
        /aa act Untamed Rage
}
/if (${Target.Type.Equal[NPC]}) {
    /if (${Target.Distance} > 30) {
        /ranged
    }
    /if (${Target.Distance} < 80 && ${Me.CombatAbilityReady["Rage Volley"]}) {
        /doability "Rage Volley"
    }
}
/if (${Me.CombatAbilityReady["Confusing Strike"]} && ${Target.PctHPs} < 95 && ${Target.Type.Equal[NPC]}) {
    /doability "Confusing Strike"
}
/if (${Me.Buff[Lesson of the Devoted].Name.Find[Lesson]} || ${Target.Named}) {
    /if (${Me.CombatAbilityReady[${combatability}]} && ${Target.PctHPs} < 95 && ${Target.Type.Equal[NPC]}) {
        /doability ${combatability}
    }
    /if (${Me.CombatAbilityReady["Cleaving Anger Discipline"]} && ${cleavinginsteadofinvuln} == 1) {
        /if (${Target.PctHPs} < 95 && ${Target.Type.Equal[NPC]}) {
            /doability "Cleaving Anger Discipline"
        }
    }
}
/if (${Me.CombatAbilityReady["Head Crush"]} && ${Target.PctHPs} < 95 && ${Target.Type.Equal[NPC]}) {
    /if (${Target.PctHPs} <= 14) /doability "Leg Slice"
    /if (${Target.PctHPs} > 14) /doability "Head Crush"
}
/if (${Me.PctHPs} < 60) {
    /if (${Me.AltAbilityReady[Desperation]} && ${Target.PctHPs} < 95 && ${Target.Type.Equal[NPC]}) {
        /aa act Desperation
    }
}
/if (${Me.PctHPs} < 30 && ${Me.CombatAbilityReady["Battle Focus Discipline"]}) {
    /guildsay clicking off ability for Battle Focus
    /nomodkey /notify CombatAbilityWnd CAW_CombatEffectButton leftmouseup
    /delay 2
    /doability "Battle Focus Discipline"
}
/return

Sub cleartarget

/if (${Spawn[${targetid}].Type.Equal[CORPSE]} && !${targetdead} || !${Spawn[${targetid}].Type.Equal[NPC]} && !${targetdead}) {
/varset targetdead 1
/varset gettarget 1
/varset didstick 0
/attack off
/if (${Me.CombatState.NotEqual[COMBAT]} && !${NearestSpawn[1,npc radius 50].ID}) /call returntocamp "face"
}
/if (${Target.ID} != ${targetid} && ${Spawn[${targetid}].Type.NotEqual[CORPSE]} && ${Spawn[${targetid}].ID}) /target ID ${targetid}
/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 (${Cursor.Name.Equal[Rod of Mystical Transvergence]}) {
    /if (${Me.FreeInventory} > 1) {
        /autoinv
        /call handledestroy "Rod of Mystical Transvergence"
    }
}
/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 (!${Defined[amnaked]}) /declare amnaked int local 100
            /if (!${Window[SpellBookWnd].Open}) /guildsay <==== i died ====>
            /if (!${Window[SpellBookWnd].Open}) /memspellset level 62
            /if (${Window[SpellBookWnd].Open} && !${Me.Gem[8].ID}) /delay 1s
            /if (!${Window[SpellBookWnd].Open} && ${Defined[amnaked]}) /docommand /mac rez ${mainassist} ${amnaked}
            /if (!${Window[SpellBookWnd].Open}) /docommand /mac rez ${mainassist}
        }
    }
}
/if (!${axewarningerror.Find[null]}) {
    /if (${Me.CombatState.NotEqual[COMBAT]}) {
        /if (${axewarningerror.Find[4]}) {
            /if (${FindItem[=Balanced Axe Components].Stacks} >= 1) {
                /echo got moar balanced axe stuffs
                /guildsay 20 balanced axe components left
                /varset axewarningerror empty,empty,${axewarningerror.Arg[3,,]},${axewarningerror.Arg[4,,]}
                /return
            }
        }
        /if (${axewarningerror.Find[5]}) {
            /if (${FindItem[=Axe Components].Stacks} >= 1) {
                /echo got moar rage axe stuffs
                /guildsay 20 reg axe components left
                /varset axewarningerror ${axewarningerror.Arg[1,,]},${axewarningerror.Arg[2,,]},empty,empty                 
                /return
            }
        }
        /if (${axewarningerror.Find[20]}) {
            /if (${Me.CombatState.NotEqual[COMBAT]}) {
                /if (${axewarningerror.Arg[1,,].Find[${berserkeraxe}]}) {
                    /echo 20 "Balanced Axe Components" left
                    /guildsay 20 balanced axe components left
                }
                /if (${axewarningerror.Arg[3,,].Find[Rage Axe]}) {
                    /echo 20 reg "Axe Components" left
                    /guildsay 20 reg axe components left
                }
            }
        }
        /if (${axewarningerror.Find[0]}) {
            /if (${axewarningerror.Arg[1,,].Find[${berserkeraxe}]}) {
                /echo 0 "Balanced Axe Components" left
                /guildsay NO BALANCED AXE COMPONENTS LEFT!!!!
                /guildsay NO BALANCED AXE COMPONENTS LEFT!!!!
                /guildsay NO BALANCED AXE COMPONENTS LEFT!!!!
                /guildsay NO BALANCED AXE COMPONENTS LEFT!!!!
                /varset axewarningerror ${berserkeraxe},4,${axewarningerror.Arg[3,,]},${axewarningerror.Arg[4,,]}
            }
            /if (${axewarningerror.Arg[3,,].Find[Rage Axe]}) {
                /echo 20 reg "Axe Components" left
                /guildsay NO REG AXE COMPONENTS LEFT!!!!
                /guildsay NO REG AXE COMPONENTS LEFT!!!!
                /guildsay NO REG AXE COMPONENTS LEFT!!!!
                /guildsay NO REG AXE COMPONENTS LEFT!!!!
                /varset axewarningerror ${axewarningerror},"Rage Axe",5
            }
        }
        /if (${axewarningerror.Arg[1,,].Find[empty]} && ${axewarningerror.Arg[3,,].Find[empty]}) {
            /varset axewarningerror "null"
        }
    }
}    
/if (${FindItem[=${berserkeraxe}].Stacks} < 4) {
    /if (${Me.CombatState.NotEqual[COMBAT]}) {
        /if (${Me.FreeInventory} > 4 && ${Me.CombatAbilityReady["${berserkeraxe}"]}) {
            /if (${FindItem[=Balanced Axe Components].StackCount} <= 20) /varset axewarningerror ${berserkeraxe},20,${axewarningerror.Arg[3,,]},${axewarningerror.Arg[4,,]}
            /if (${FindItem[=Balanced Axe Components].StackCount} <= 0) {
                /varset axewarningerror ${berserkeraxe},0,${axewarningerror.Arg[3,,]},${axewarningerror.Arg[4,,]}
                /echo out of balanced axe components
            }
            /if (!${Cursor.ID}) {
                /delay 2s
                /doability "${berserkeraxe}"
                /delay 2s
                /delay 6
                /if (${Cursor.Name.Find[${berserkeraxe}]}) {
                    /autoinventory
                    /return
                }
                /if (${Cursor.Name.Equal[Rod of Mystical Transvergence]}) {
                    /if (${Me.FreeInventory} > 1) {
                        /autoinv
                        /call handledestroy "Rod of Mystical Transvergence"
                    }
                }
                /echo error summoning axes BERSERKER ERROR BERSERK
                /guildsay something is on my cursor
                /return
            }
            /if (${Cursor.ID}) /echo trying to summon axes but something is on my cursor
            /return
        }
|        /echo Not enough inventory or ability not ready
|        /if (${FindItem[=Balanced Axe Components].StackCount} == 0) /varset berserkeraxe error
    }
}
/if (${FindItem[=Rage Axe].Stacks} < 4) {
    /if (${Me.CombatState.NotEqual[COMBAT]}) {
        /if (${Me.FreeInventory} > 4 && ${Me.CombatAbilityReady[Rage Axe]}) {
            /if (${FindItem[=Axe Components].StackCount} <= 20) /varset axewarningerror ${axewarningerror.Arg[1,,]},${axewarningerror.Arg[2,,]},"Rage Axe",20
            /if (${FindItem[=Axe Components].StackCount} <= 0) {
                /varset axewarningerror ${axewarningerror.Arg[1,,]},${axewarningerror.Arg[2,,]},"Rage Axe",0
                /echo out of reg axe components
                /return
            }
            /if (!${Cursor.ID}) {
                /delay 2s
                /doability "Rage Axe"
                /delay 2s
                /delay 6
                /if (${Cursor.Name.Find[Rage Axe]}) {
                    /autoinventory
                    /return
                }
                /if (${Cursor.Name.Equal[Rod of Mystical Transvergence]}) {
                    /if (${Me.FreeInventory} > 1) {
                        /autoinv
                        /call handledestroy "Rod of Mystical Transvergence"
                    }
                }
                /echo error summoning axes BERSERKER ERROR BERSERK
                /guildsay something is on my cursor
            }
            /echo trying to summon axes but something is on my cursor
            /return
        }
|        /echo Not enough inventory or ability not ready
|        /if (${FindItem[=Axe Components].StackCount} == 0) /varset berserkeraxe error
    }
}
/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 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 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
    }
    /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[clickies]}) {
    /if (${FindItem[=Reaper's Ring].ID}) /call clickitem "Reaper's Ring" "inv"
/return
}
/if (${action.Arg[1,].Equal[tank]}) {
    /if (${action.Arg[1,].Equal[mainassist]}) /varset action ${action.Right[-11]}
    /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.Equal[Shadowknight]}) /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[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[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[nukeat]}) /varset nukeat ${action.Arg[2,]}
    /return
}
/if (${action.Find[/ex]}) {
    /if (${Me.Trader}) /return
    /docommand /exit
}
/if (${action.Find[pagedown]}) {
    /keypress Page_Down hold 
    /delay 1s
    /keypress Page_Down
    /return
}
/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

Sub page(direction, duration)

/if (${direction.Find[down]}) {
    /keypress Page_Down hold 
    /delay ${duration}
    /keypress Page_Down
}
/if (${direction.Find[up]}) {
    /keypress Page_Up hold 
    /delay ${duration}
    /keypress Page_Up
}
/return

Sub returntocamp(face)

/if (${Bool[${makecamploc}]}) {
    /call gotoloc "${makecamploc}" 
    /if (${Macro.Return} == 1 && ${face.Equal[face]}) {
        /if (${Me.Heading.Degrees} > 179) /face fast heading ${Math.Calc[${Me.Heading.Degrees} - 180]}
        /if (${Me.Heading.Degrees} < 180) /face fast heading ${Math.Calc[${Me.Heading.Degrees} + 180]}
    }
}
/return

Sub gotoloc(loc, command)

/declare locfrom string local
/declare zoneshortname string local ${Zone.ShortName}
/if (!${Bool[${loc}]}) /varset locfrom leashloc
/if (${Bool[${loc}]}) /varset locfrom loc
/declare nextlocationy string local ${${locfrom}.Arg[1,,]}
/declare nextlocationx string local ${${locfrom}.Arg[2,,]}
/declare nextlocationyhigh string local ${Math.Calc[${${locfrom}.Arg[1,,]} + 5]}
/declare nextlocationylow string local ${Math.Calc[${${locfrom}.Arg[1,,]} - 5]}
/declare nextlocationxhigh string local ${Math.Calc[${${locfrom}.Arg[2,,]} + 5]}
/declare nextlocationxlow string local ${Math.Calc[${${locfrom}.Arg[2,,]} - 5]}
/if (${nextlocationy.NotEqual[NULL]} && ${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
    /if (${command.NotEqual[empty]}) /call ${command}
    /return
}
:travel
/keypress forward hold
/if (${nextlocationy.NotEqual[NULL]} && ${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
    /keypress forward
    /if (!${Me.Class.PureCaster}) /varset didstick 0
    /if (${command.NotEqual[empty]}) /call ${command}
    /return 1
}
/if (${nextlocationy.NotEqual[NULL]}) {
    /if (${Me.Y} <= ${nextlocationylow} || ${Me.X} <= ${nextlocationxlow} || ${Me.Y} >= ${nextlocationyhigh} || ${Me.X} >= ${nextlocationxhigh}) {
        /face nolook fast loc ${nextlocationy},${nextlocationx}
    }
}
/if (${zoneshortname.NotEqual[${Zone.ShortName}]}) {
    /if (!${InvSlot[17].Item.ID}) {
        /if (!${InvSlot[13].Item.ID} && !${Defined[amnaked]}) {
            /guildsay - i died during movement - 
            /declare amnaked int outer 100
            /keypress forward
            /varset makecamploc ${Me.Y},${Me.X}
            /return
        }
    }
}
/if (${zoneshortname.NotEqual[${Zone.ShortName}]}) {
    /if (${InvSlot[17].Item.ID} || ${amnaked} == 100) {
        /if (${InvSlot[13].Item.ID} && !${Defined[amnaked]} || !${InvSlot[13].Item.ID} && ${amnaked} == 100) {
            /echo ~~ ${Zone.Name} ~~
            /keypress forward
            /deletevar zoneoutloc
            /varset makecamploc ${Me.Y},${Me.X}
            /return
        }
    }
/return
}
/delay 1
/goto :travel
/return

Sub zonedoor

/keypress forward
:doorloop
/keypress u
/delay 2
/keypress u
/delay 1s
/keypress u
/delay 2
/call viewing
/if (${zoneshortname.Equal[${Zone.ShortName}]}) /goto :doorloop
/return

Sub door

/keypress u
/if (!${Me.Moving}) {
    /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc[${j}]door]}]}) {
        /doortarget ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc[${j}]door]}]}
        /face door
        /keypress u
    }
}
/return

Sub viewing

/declare variable string local page_down
:viewing
/if (${zoneshortname.Equal[${Zone.ShortName}]}) {
    /keypress ${variable} hold
    /delay 2
    /keypress ${variable}
    /keypress u
    /if (${zoneshortname.Equal[${Zone.ShortName}]}) {
        /keypress ${variable} hold
        /delay 4
        /keypress ${variable}
        /keypress u
        /if (${zoneshortname.Equal[${Zone.ShortName}]}) {
            /keypress ${variable} hold
            /delay 4
            /keypress ${variable}
            /keypress u
            /if (${variable.Equal[page_down]}) {
                /varset variable page_up
                /goto :viewing
            }
            /if (${variable.Equal[page_up]}) {
                /varset variable page_down
                /goto :viewing
            }
        }
    }
}
/return

Sub findgroup

/declare totalgroups int local
/declare i int local
/declare j int local
/varset totalgroups ${Ini[toolismacro,Values,totalgroups]}
/for i 1 to ${totalgroups}
/for j 1 to 6
/if (${Ini[toolismacro,Group${i},member${j}].Equal[${Me.Name}]}) {
    /return ${i}
}
/next j
/next i
/echo GROUP NOT FOUND ---- returning +1
/return ${Math.Calc[${totalgroups} + 1]}

Sub groupcheck

/declare i int local
/declare grpcheck int local 0
:checkgroup
/for i 0 to ${Group}
/if (${Group.Member[${i}].Distance} < 120 && ${Group.Member[${i}].ID}) /varset grpcheck ${Math.Calc[${grpcheck} + 1]}
/next i
/if (${grpcheck} == ${Group.GroupSize}) {
    /delay 1s
    /return 1
} else {
    /varset grpcheck 0
    /delay 2
    /goto :checkgroup
}
/return

Sub Event_Movement(Line, SenderPerson, targetperson, TargetZone)

/if (${Bool[${targetperson}]}) {
    /declare name int local
    /declare force int local
    /for force 1 to 10
    /if (${targetperson.Arg[${force},].Equal[force]}) {
        /declare forcemove bool local TRUE
    }
    /if (${targetperson.Arg[1,].Equal[force]} && !${Bool[${targetperson.Arg[2,]}]}) /goto :beginning
    /next force
    /if (${targetperson.Arg[1,].Equal[group]}) {
        /if (${targetperson.Arg[1,].Equal[group]}) {
            /declare groupnumber int local
            /call findgroup
            /varset targetperson ${targetperson.Right[-6]}
            /if (${targetperson.Find[force]}) /varset targetperson ${targetperson.Left[-6]}
            /for groupnumber 1 to ${Ini[toolismacro,Values,totalgroups]}
            /if (${targetperson.Arg[${groupnumber},,]} == ${Macro.Return}) {
                /goto :beginning
            } else {
                /next groupnumber 
                /return
            }
        }
    }
    /for name 1 to 10
    /if (${targetperson.Arg[${name},].Equal[${Me.Name}]}) /goto :beginning
    /next name
    /return
}
:beginning
/if (!${Bool[${Ini[movement,${TargetZone},zoneshortnames].Arg[1,,]}]}) {
    /echo Incorrect Destination
    /return
}
/declare zoneshortname     string local ${Zone.ShortName}
/declare savedtargetzone   string local ${TargetZone}
/declare startlocation     string local 0
/declare tempheading       float  local 0
/declare nextlocationx     string local NULL
/declare nextlocationy     string local NULL
/declare nextlocationxhigh string local
/declare nextlocationxlow  string local
/declare nextlocationyhigh string local
/declare nextlocationylow  string local
/declare i int local
/declare j int local
/declare junctions int local
/declare savedvariable int local 0
/if (${Me.Class.Name.NotEqual[Bard]}) /declare didinvis int local 0
/declare grpnumber int local 0

/echo - Starting -
/for junctions 1 to 12
/echo ${junctions} junctions
/for i 1 to 10
/echo ${i} i variable at i loop
:start
/if (${Bool[${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]}]}) {
    /echo ${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]}
    /varset TargetZone ${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]}
    /echo changed targetzone to ${TargetZone}
    /echo ${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]} targetzones junctions
    /echo ${i} i variable in bool junctions
    /varset i 1
}
/if (!${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]} && ${TargetZone.NotEqual[${savedtargetzone}]}) {
    /varset TargetZone ${savedtargetzone}
    /echo changed targetzone to savedtargetzone
    /echo ${junctions} junctions
    /echo ${i} i variable in not bool junctions
    /echo ${j} j 
    /varset i 1  
}
/if (${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]} && ${TargetZone.NotEqual[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]}) {
    /varset TargetZone ${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}
    /echo changed targetzone to savedtargetzone junction arg junctions
    /echo ${junctions}
    /echo ${i} i variable in bool junctions arg junctions
    /echo ${j} j
    /varset i 1
}
/if (${savedvariable} != 1) {
    /if (${Bool[${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,].Equal[${Zone.ShortName}]}]} && ${startlocation.Equal[0]}) {
        /echo found starting zone
        /varset startlocation ${TargetZone},${i},
        /echo ${startlocation}
        /echo ${i} i variable
        /echo ${j} j variable
    }
    /if (${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,].NotEqual[${Zone.ShortName}]} && ${startlocation.NotEqual[0]}) {
        /echo found end of zones
        /varset junctions 1
        /varset savedvariable 1
        /varset TargetZone ${startlocation.Arg[1,,]}
        /varset i ${startlocation.Arg[2,,]}
    }
}
/if (${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[finish]} && ${zoneshortname.Equal[${Zone.ShortName}]}) {
    /keypress w
    /varset didinvis 0
    /echo i have reached my destination
    /guildsay im at target destination
    /varset makecamploc ${Me.Y},${Me.X}
    /return
}
/if (${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,].Equal[${Zone.ShortName}]}) {
    /if (!${forcemove}) {
        /if (${Me.Class.Name.Equal[Bard]} && !${didinvis}) {
            /call groupcheck
        }
        /if (${Me.Class.Name.NotEqual[Bard]} && !${didinvis}) {
            /call findgroup
            /varset grpnumber ${Macro.Return}
            :waitforinvis
            /doevents Toggle
            /if (${Macro.Return.Equal[abort]}) {
                /varset makecamploc ${Me.Y},${Me.X}
                /return
            }
            /if (${Ini[toolismacro,Movement,group${grpnumber}ready].Equal[ready]}) {
                /varset didinvis 1
            }
            /if (${Ini[toolismacro,Movement,group${grpnumber}ready].Equal[empty]}) {
                /delay 2
                /echo waiting for invis
                /goto :waitforinvis
            }
        }
    }
    /if (${Me.Class.Name.Equal[Bard]} && !${didinvis}) {
        /squelch /twist off
        /varset didinvis 1
        /varset dotwist 1
        /if (!${Me.Gem[${travelsong}]} && !${Cursor.ID}) {
                /guildsay sec memming travel song
                /memspell ${travelsonggem} ${travelsong}
                /delay 2s
        }
        /squelch /twist ${travelsonggem}
        /delay 2s
        /if (!${Me.Casting.ID}) {
            /squelch /twist ${speedsonggem}
            /delay 2s
            /if (${Me.Casting.ID}) /delay 1s
            /if (!${Me.Gem[${invissong}]} && !${Cursor.ID}) {
                /guildsay sec memming invis song
                /memspell ${travelsonggem} ${invissong}
                /delay 2s
            }
            /squelch /twist ${travelsonggem}
            /delay 3s 
        }
        /if (${Me.Casting.ID}) /delay 2s
        /call findgroup
        /varset grpnumber ${Macro.Return}
        /ini "toolismacro" "Movement" "group${grpnumber}ready" "ready"
        /delay 6
        /ini "toolismacro" "Movement" "group${grpnumber}ready" "empty"
    }
    /echo ${j} j (before for loop)
    /for j 1 to 30
    /echo ${j} j
    /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}]}]} && ${savedvariable} != 1) {
        /varset savedvariable ${j}
        /varset nextlocationy ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}].Arg[1,,]}
        /varset nextlocationx ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}].Arg[2,,]}
        /varset nextlocationyhigh ${Math.Calc[${nextlocationy} + 75]}
        /varset nextlocationylow ${Math.Calc[${nextlocationy} - 75]}
        /varset nextlocationxhigh ${Math.Calc[${nextlocationx} + 75]}
        /varset nextlocationxlow ${Math.Calc[${nextlocationx} - 75]}
        /if (${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
            /echo found correct loc
            /varset savedvariable 1
            /goto :end
        }
        /varset nextlocationyhigh ${Math.Calc[${nextlocationy} + 175]}
        /varset nextlocationylow ${Math.Calc[${nextlocationy} - 175]}
        /varset nextlocationxhigh ${Math.Calc[${nextlocationx} + 175]}
        /varset nextlocationxlow ${Math.Calc[${nextlocationx} - 175]}
        /if (${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
            /echo found nearest loc
            /varset savedvariable 1
            /goto :nearestlocloop
        }
        /echo this didnt work
        /varset nextlocationy NULL
        /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${savedvariable}].Arg[1,,]}]}) {
            /varset savedvariable ${Math.Calc[${j} + 1]}
            /varset nextlocationy NULL          
            /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${savedvariable}].Arg[1,,]}]}) {
                /echo next j
                /next j
            }
            /if (${Bool[${Ini[movement,${TargetZone},zoneshortnames].Arg[${Math.Calc[${i} + 1]},,]}]}) {
                /varset j 0
                /next i
            }
            /if (${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]}) {
                /varset j 0
                /echo next junctions instead of j
                /varset TargetZone ${savedtargetzone}
                /next junctions
            }
        }
        /echo this fired
        /varset savedvariable ${Math.Calc[${j} + 1]}
        /delay 2
        /next i
    }
        /if (!${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]} && ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[junction]} || ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[finish]}) {
            /keypress w
            /varset didinvis 0
            /echo i have reached my destination
            /guildsay im at target destination
            /varset makecamploc ${Me.Y},${Me.X}
            /return
        } 
    :end
    /if (${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[junction]}) {
        /keypress forward
        /varset j 1
        /varset TargetZone ${savedtargetzone}
        /if (!${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]}) {
            /varset TargetZone ${startlocation.Arg[1,,]}
            /varset i ${startlocation.Arg[2,,]}
        } 
        /if (${Bool[${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]}]}) {
            /echo changing junctions +1 from hitting a junction
            /next junctions
        }
    }
    /if (${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[zonedoor]} && ${nextlocationy.NotEqual[NULL]}) {
        /keypress forward
        /varset j 1
        :doorloop
        /keypress u
        /delay 2
        /keypress u
        /delay 1s
        /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}zonedoor]}]}) {
            /face nolook loc ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}zonedoor]}
            /keypress u
        }
        /call viewing
        /if (${zoneshortname.Equal[${Zone.ShortName}]}) /goto :doorloop
        /varset nextlocationy NULL
    }
    /if (${zoneshortname.Equal[${Zone.ShortName}]}) {
        /varset tempheading ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,]})
        /if (${Math.Calc[(360 - ${tempheading}) + 45]} > 360 && ${Me.Heading.Degrees} <= ${Math.Calc[(360 - ${tempheading}) - 45]} || ${Math.Calc[(360 - ${tempheading}) + 45]} > 360 && ${Me.Heading.Degrees} <= ${Math.Calc[45 - (360 - ${tempheading})]}) {
            /goto :headingdone
        }
        /if (${Math.Calc[(360 - ${tempheading}) - 45]} < 0 && ${Me.Heading.Degrees} <= ${Math.Calc[(360 - ${tempheading}) + 45]} || ${Math.Calc[(360 - ${tempheading}) - 45]} < 0 && ${Me.Heading.Degrees} <= ${Math.Calc[45 - (360 - ${tempheading})]}) { 
            /goto :headingdone
        }
        /if (${Math.Calc[${Me.Heading.Degrees}]} >= ${Math.Calc[360 - ${tempheading}]} && ${Math.Calc[${Me.Heading.Degrees}]} <= ${Math.Calc[(360 - ${tempheading}) + 45]} || ${Math.Calc[${Me.Heading.Degrees}]} >= ${Math.Calc[(360 - ${tempheading}) - 45]} && ${Math.Calc[${Me.Heading.Degrees}]} <= ${Math.Calc[360 - ${tempheading}]}) {
            /goto :headingdone
        }
            /if (${tempheading} <= 180) {
            /echo Tempheading < 180
                /if (${Me.Heading.Degrees} >= ${Math.Calc[(360 - ${tempheading}) - 180]} && ${Me.Heading.Degrees} <= ${Math.Calc[360 - ${tempheading}]}) {
                    /varset tempheading ${Math.Calc[${tempheading} + 45]}
                    /goto :heading
                } else {
                    /if (${tempheading} <= 45) {
                        /varset tempheading ${Math.Calc[315 + ${tempheading}]}
                        /goto :heading
                    }
                    /varset tempheading ${Math.Calc[${tempheading} - 45]}
                    /goto :heading
                }
            }
            /if (${tempheading} > 180) {
            /echo Tempheading > 180
                /if (${Me.Heading.Degrees} <= ${Math.Calc[(360 - ${tempheading}) + 180]} && ${Me.Heading.Degrees} >= ${Math.Calc[360 - ${tempheading}]}) {
                    /varset tempheading ${Math.Calc[${tempheading} - 45]}
                    /goto :heading
                } else {
                    /if (${tempheading} <= 315) {
                        /varset tempheading ${Math.Calc[${tempheading} + 45]}
                        /goto :heading
                    }
                    /varset tempheading ${Math.Calc[(360 - ${tempheading}) - 45]}
                    /goto :heading
                }
            }
            :heading
            /face heading ${tempheading}
        :headingdone
        /face fast heading ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,]}
    }
    /varset nextlocationy NULL
    /varset nextlocationx NULL
    /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}]}]}) {
        /varset nextlocationy ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}].Arg[1,,]}
        /varset nextlocationx ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}].Arg[2,,]}
    }
    :nearestlocloop
    /doevents Toggle
    /if (${Macro.Return.Equal[abort]}) {
        /varset makecamploc ${Me.Y},${Me.X}
        /return
    }
    /varset nextlocationyhigh ${Math.Calc[${nextlocationy} + 5]}
    /varset nextlocationylow ${Math.Calc[${nextlocationy} - 5]}
    /varset nextlocationxhigh ${Math.Calc[${nextlocationx} + 5]}
    /varset nextlocationxlow ${Math.Calc[${nextlocationx} - 5]}
    :movementloop
    /keypress forward hold
    /if (${nextlocationy.NotEqual[NULL]} && ${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
        /keypress forward
        /delay 2
        /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}command]}]}) /call ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}command]}
        /next j
    }
    /if (${nextlocationy.NotEqual[NULL]}) {
        /if (${Me.Y} <= ${nextlocationylow} || ${Me.X} <= ${nextlocationxlow} || ${Me.Y} >= ${nextlocationyhigh} || ${Me.X} >= ${nextlocationxhigh}) {
            /face nolook fast loc ${nextlocationy},${nextlocationx}
        }
    }
    /if (${zoneshortname.NotEqual[${Zone.ShortName}]}) {
        /if (!${InvSlot[17].Item.ID}) {
            /if (!${InvSlot[13].Item.ID} && !${Defined[amnaked]}) {
                /guildsay - i died during movement - 
                /declare amnaked int outer 100
                /doevents flush Movement
                /return
            }
        }
        /echo -- ${Zone.Name} --
        /varset nextlocationy NULL
        /keypress forward
        /varset zoneshortname ${Zone.ShortName}
        /varset didinvis 0
        /varset j 1
        /varset i 0
        /delay 2
        /next i
    }
    /delay 1
    /goto :movementloop
}
/delay 2
/if (${Bool[${Ini[movement,${TargetZone},zoneshortnames].Arg[${Math.Calc[${i} + 1]},,]}]}) /next i
/varset i 0
/next junctions
/varset junctions 1
/varset savedvariable 1
/varset TargetZone ${startlocation.Arg[1,,]}
/varset i ${startlocation.Arg[2,,]}
/echo setting targetzone and zone im in
/next junctions
/echo returning
/return

Re: eqemu level 65 or so pal, druid, bers, wiz

Posted: Tue Aug 18, 2015 1:34 am
by toolisaccount
reserved for wiz part 1 -I bet you cant resist using necro.mac!
|
|THESE MACROS ARE NOT SAFE FOR LIVE PLZ DONT
|
|wiz macro now works and is kinda finished,
|mems spells better 09/06/2015? 10:25pm est
|mana burn, life burn implemented correctly 09/07/2015? 3:39am est
|
|/gui toggle manaburn
|/gui toggle lifeburn
|/gui toggle manaburn lifeburn
|should now work
|
|shes able to buff rune, buff rune group 1 etc
|she kinda does aa familiars, spells, spellsets herself
|still requires spellset called level 62, id recommend magic spells for first 5
|and uh 3 other spells
|
|spell1-Elnerick's Electrical Rending
|spell2-Draught of Thunder
|spell3-Lure of Thunder
|spell4-Shock of Magic
|spell5-Markar's Discord
|spell6-Firetree's Familiar Enhancement
|spell7-Force Shield
|spell8-Harvest
|spell9-????snare, half implemented if u put snare and she wants to snare
|she will remove spell9 to buff runes if u have slot 9
|
|she likes to rune and nuke, and she harvests and stuff and stuns sometimes
|she may work in conjunction with other wizards to buff rune groups or w/e
|not tested rlly thx
|
|you can /gui wizards toggle manaburn
|think 20 15kmana wizards would manaburn for like 900k damage
|not sure how hot that would be with GoD or OoW mobs maybey they have
|liek 2mil hp tho so
|you can then staunch recovery and nuke, or nuke and staunch and manaburn
|if you add some necros and some lifeburn code u should be fine w/pets too
|and those instant heal soul orbs
|and some mages w/pets and nukes
|
|you can /gui wizards toggle nukes off
|with nukes off the wizard will just markar's discord which does like 1k damage
|this is good if u just want to stun, or if u want to not ks exp group
|there is also /gui casters toggle assistat ## if u want to uh not ks or something
|that would set their nuke-at's too
|you can easily add another stun if u want but mobs die too fast usually
|
|not sure on the math behind wizards but the stuns are interesting
|i don't really like wizards, i may develop some sort of fondness
|
|not sure on cast times there may be better spell hastes
|
|todo: ports, strong root, aa that my server doesnt have(breaksmez etc)
|todo:use lures or command to use lures
|todo:mem snare to spellslot 9
|
|im liking the cold nukes but im guessing gonna have to write the macro to
|do all different stuff depending what u type in
|
|fire mark and ward of destruction dont work with my emu build, ill write something maybey
|
|manaburn with improved damage worn foci doesnt seem to improve
|manaburn with magic familiar doesnt seem to improve
|manaburn doesnt seem to crit
|manaburn with 6k mana is like 18k damage
|
|im interested in manaburn uh manaburned a golem that was aggrod clr in
|pov for my first time, and was at 75% mana and manaburn was like 15k
|damage it didn't crit or anything not sure if it can crit
|the manaburn instant killed the golem
|manaburn appears to be like 2.5x mana -> damage or 3x mana -> damage
|was using icy familiar aa and dusty girdle of reformed sand 20%
|she has 6065m total at time w/o kei
|so i manaburn the golem now again w/o dusty girdle and im too far away for damage spew <>
|
< There is a 30% damage focus buff for level 60 cold spells called Iceflame of E`ci >
< it only works with improved familiar, the greater aa familiars don't stack >
< the lvl60 cold nukes other than lure have a 13sec? recast timer >
when using cold, improved familiar and iceflame of e`ci does little more damage
but you lose the improvement to ice comets, so im saying e`ci advanced familiar thing is better
im thinking cold or magic is best for wizard

Code: Select all

-------------------------------------------------------------------------------------
Magic
----------
Shock of Magic -                lvl65    550m 2.4k-3kdam   -20resist    6.0sec->4.5sec casttime
Draught of Thunder -            lvl65    255m 980dam       -50resist    3.0sec->2.3sec casttime
Draught of Lightning -          lvl63    255m 980dam       -50resist    3.0sec->2.3sec casttime
Agnarr's Thunder -              lvl63    525m 2350dam      //resist     7.0sec->5.3sec casttime
Lure of Thunder -               lvl61    365m 1090dam      -300resist   4.5sec->3.4sec casttime
Elnerick's Electrical Rending - lvl60    421m 1796dam      //resist     7.5sec->5.6sec casttime
-------------------------------------------------------------------------------------
Fire
----------
Strike of Solusek -             lvl65    640m 2740dam      -10resist    8.0sec->6.0sec casttime
White Fire -                    lvl65    704m 3015dam      -10resist    8.0sec->6.0sec casttime
Ancient: Strike of Chaos -      lvl65    768m 3288dam      -10resist    8.0sec->6.0sec casttime
Draught of Ro -                 lvl62    255m 980dam       -50resist    3.0sec->2.3sec casttime
Lure of Ro -                    lvl62    378m 1090dam      -300resist   4.5sec->3.4sec casttime
Sunstrike -                     lvl60    450m 1800dam      -10resist    7.0sec->5.2sec casttime
Garrison's Superior Sundering - lvl60    480m 2000dam      -10resist    7.5sec->5.6sec casttime
-------------------------------------------------------------------------------------
Cold
----------
Black Ice -                     lvl65    280m 1078dam      -50resist    3.0sec->2.3sec casttime
Draught of E`ci -               lvl64    255m 980dam       -50resist    3.0sec->2.3sec casttime
Ice Meteor -                    lvl64    520m 2460dam      -10resist    8.0sec->6.0sec casttime
Claw of Frost -                 lvl61    167m 1000dam      -50resist    5.0sec->3.8sec casttime
Lure of Ice -                  <lvl60>   310m 882dam       -300resist   4.5sec->3.4sec casttime
Ice Spear of Solist -          <lvl60>   221m 1076dam      -10resist    4.0sec->3.0sec casttime
Ancient: Destruction of Ice -  <lvl60>   200m 1150dam      -10resist    4.0sec->3.0sec casttime
-------------------------------------------------------------------------------------
Bane - req 2 peridots per cast
----------
Hsagra's Wrath - lvl60    450m giant bane damage 2k, unresistable, 6.0sec->4.5sec casttime
Porlos's Fury -  lvl60    450m dragon bane damage 2k, unresistable, 6.0sec->4.5sec casttime
wiz.mac part 1

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 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 this is a glitch

/declare assistat                int    outer 98
/declare donukes                 int    outer 1
/declare dostun                  int    outer 1
/declare snare                   int    outer 0
/declare nukeat                  int    outer 90
/declare stopnukesat             int    outer 1

/declare magictype               string outer magic

/declare nukespell1              string outer "Elnerick's Electrical Rending"
/declare nukespell2              string outer "Draught of Thunder"
/declare nukespell3              string outer "Lure of Thunder"
/declare nukespell4              string outer "Shock of Magic"
/declare nukespell5              string outer "Markar's Discord"
/declare petbuffspell            string outer "Firetree's Familiar Enhancement"
/declare spellrune1              string outer "Spellshield"
/declare spellrune2              string outer "Protection of Calrena"
/declare forceshieldspell        string outer "Force Shield"
/declare harvestspell            string outer "Harvest"
/declare snarespell              string outer "Atol's Spectral Shackles"


/declare aafamiliar              string outer Druzzil's Mystical Familiar
/declare petbuffduration         int    outer 36000

/declare forceshieldtimer        timer  outer 0
/declare petbufftimer            timer  outer 0       

/declare makecamploc             string outer ${Me.Y},${Me.X}
/declare sticktype               string outer behindonce loose 8
/declare tempvar                 int    outer 100
/declare peridotwarning          int    outer 0
/declare dopet                   int    outer 1
/declare storedpetid             int    outer 0
/declare targetid                int    outer 0
/declare targetdead              int    outer 1
/declare gettarget               int    outer 1
/declare ammoving                int    outer 0

/varset storedpetid ${Me.Pet.ID}
/squelch /stick off

/declare mainassist string outer
/varset mainassist ${Param0}

/if (${Defined[Param1]}) /varset dopet ${Param1}

/if (!${magictype.Find[magic]} && !${magictype.Find[fire]}) {
    /if (!${magictype.Find[cold]}) {
        /if (!${magictype.Find[ice]}) {
            /varset magictype magic
        }
    }
}
/if (${magictype.Find[ice]}) {
    /varset magictype cold
}    
/if (${FindItem[=Peridot].StackCount} < 200) {
    /guildsay under 200 peridots ... ${FindItem[=Peridot].StackCount} peridots
}
/keypress esc

/echo wiz 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

:mainloop
/if (${tempvar} == 100) /call checkspells
/call checkstuff
/if (!${ammoving} && ${Bool[${leashloc}]}) /call gotoloc
/if (!${ammoving}) /call checkbuffs
/if (!${ammoving}) /call cleartarget
/if (${gettarget} && !${ammoving}) /call gettarget
/if (${targetid} == ${Target.ID} && !${ammoving}) /call DoCombat
/if (${Me.PctMana} < 95 && !${Me.Casting.ID} && !${ammoving} && ${Me.Standing} && !${Me.Moving}) /sit
/doevents
/goto :mainloop


Sub checkspells

/if (${Window[SpellBookWND].Open}) /return
/if (${Cursor.ID}) {
    /if (!${Defined[wizcursorwarning]}) /declare wizcursorwarning int outer 1
    /if (${wizcursorwarning} == 1) /guildsay trying to mem spells but stuff on cursor
    /varset wizcursorwarning 0
    /return
}
/varset tempvar 1
/if (${magictype.Find[magic]}) {
    /varset aafamiliar Druzzil's Mystical Familiar
}
/if (${magictype.Find[ice]} || ${magictype.Find[cold]}) {
    /varset aafamiliar E'ci's Icy Familiar
}
/if (${magictype.Find[fire]}) {
    /varset aafamilair Ro's Flaming Familiar
}
/if (!${Me.AltAbility[${aafamiliar}]}) {
    /varset aafamiliar Improved Familiar
    /echo aafamiliar not found, setting to ${aafamiliar}
    /if (!${Me.AltAbility[${aafamiliar}]}) {
        /varset aafamiliar "Greater Familiar"
        /echo aafamiliar2 not found, setting to ${aafamiliar}
        /if (!${Me.Book[${aafamiliar}]}) {
            /echo spell ${aafamiliar} not found, get a familiar!
        }
    }
}
/if (${magictype.Find[magic]} && !${Me.Gem["Elnerick's Electrical Rending"]} || ${magictype.Find[fire]} && !${Me.Gem["Draught of Ro"]} || ${magictype.Find[cold]} && !${Me.Gem["Ice Spear of Solist"]}) {
    /echo spells are memmed wrong or magictype changed
    /pet leave
    /if (${magictype.Find[magic]}) {
        /varset nukespell1 "Elnerick's Electrical Rending"
        /varset nukespell2 "Draught of Thunder"
        /varset nukespell3 "Lure of Thunder"
        /varset nukespell4 "Shock of Magic"
        /varset nukespell5 "Markar's Discord"
    }
    /if (${magictype.Find[fire]}) {
        /varset nukespell1 "Garrison's Superior Sundering"
        /varset nukespell2 "Draught of Ro"
        /varset nukespell3 "Lure of Ro"
        /varset nukespell4 "Ancient: Strike of Chaos"
        /varset nukespell5 "White Fire"
        /if (!${Me.Book[${nukespell1}]}) {
            /varset nukespell1 "Sunstrike"
        }
        /if (!${Me.Book[${nukespell4}]}) {
            /varset nukespell4 "White Fire"
            /varset nukespell5 "Strike of Solusek"
        }
        /if (!${Me.Book[${nukespell5}]}) {
            /varset nukespell5 "Strike of Solusek"
        } 
    }        
    /if (${magictype.Find[cold]}) {
        /varset nukespell1 "Ancient: Destruction of Ice"
        /varset nukespell2 "Ice Spear of Solist"
        /varset nukespell3 "Lure of Ice"
        /varset nukespell4 "Shock of Magic"
        /varset nukespell5 "Ice Meteor"
        /if (!${Me.Book[${nukespell1}]}) {
            /varset nukespell1 "Markar's Discord
        }
    }
    /for tempvar 1 to 5
    /if (${Me.Book[${nukespell${tempvar}}]}) {
        /memspell ${tempvar} ${nukespell${tempvar}}
        /delay 16s !${Window[SpellBookWND].Open}
    }
    /next tempvar
    /varset tempvar 1
}
/return

Sub checkbuffs

:checkpet
/if (!${Me.Pet.ID}) {
    /if (${Me.Moving}) {
        /delay 2s
        /goto :checkpet
    }
    /if (${aafamiliar.Find[Greater]}) {
        /if (!${Me.Gem[${aafamiliar}]} && !${Cursor.ID}) {
            /memspell 6 ${aafamiliar}
            /delay 16s ${Me.SpellReady[${aafamiliar}]}
        }
        /call cast ${aafamiliar} 1s
        /if (${Macro.Return.Equal["CAST_SUCCESS"]}) {
            /varset storedpetid ${Me.Pet.ID}
            /varset petbufftimer 0
        }
    }
    /if (${Me.AltAbilityReady[${aafamiliar}]}) {
        /if (${aafamiliar.Find[Druzzil's]}) {
            /aa act Druzzil's Mystical Familiar
        }
        /if (${aafamiliar.Find[flaming]}) {
            /aa act Ro's Flaming Familiar
        }
        /if (${aafamiliar.Find[E'ci's]}) {
            /aa act E'ci's Icy Familiar
        }
        /if (${aafamiliar.Find[improved]}) {
            /aa act Improved Familiar
        }
        /delay 2s ${Me.Pet.ID}
        /varset storedpetid ${Me.Pet.ID}
        /varset petbufftimer 0
    }
}
/if (${Me.Pet.ID} && ${Me.Pet.ID} != ${storedpetid}) {
    /varset petbufftimer 0
    /varset storedpetid ${Me.Pet.ID}
}
/if (${Me.Buff[${aafamiliar}].Duration} < 100) {
    /pet leave
}
/if (${Target.ID} ==${targetid} && ${Target.PctHPs} > 90 && ${Target.Named} && ${Me.AltAbilityReady["Call of Xuzl"]}) {
    /timed 1s /aa act Call of Xuzl
}
/if (${Me.Buff[${forceshieldspell}].Duration} < 120 && ${Me.CombatState.NotEqual[COMBAT]} || ${forceshieldtimer} == 0 && ${Me.CombatState.NotEqual[COMBAT]}) {
    /if (${Me.CurrentMana} > ${Spell[${forceshieldspell}].Mana} && ${Me.Gem[${nukespell4}]}) {
        /if (!${Me.Gem[${forceshieldspell}]} && !${Cursor.ID}) {
            /memspell 7 ${forceshieldspell}
            /delay 16s ${Me.SpellReady[${forceshieldspell}]}
        }
        /call cast ${forceshieldspell} 1s
        /varset forceshieldtimer 64000
    }
}        
/if (${petbufftimer} < 100 && ${Me.Pet.ID} && ${Me.PctMana} > 5) { 
    /call cast ${petbuffspell} 2s
    /if (${Macro.Return.Equal["CAST_SUCCESS"]}) /varset petbufftimer ${petbuffduration}
}
/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
}
/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]} && !${dopet}) /docommand /mac rez ${mainassist} ${amnaked} ${dopet}
            /if (!${Window[SpellBookWnd].Open} && ${Defined[amnaked]} && ${dopet} == 4 && ${Me.Pet.ID}) /docommand /mac rez ${mainassist} ${amnaked} ${dopet}
            /if (!${Window[SpellBookWnd].Open} && ${Defined[amnaked]} && ${dopet} != 4) /docommand /mac rez ${mainassist} ${amnaked} ${dopet}
        }
    }
}
/if (${FindItem[=Peridot].StackCount} < 100) {
    /if (${peridotwarning} < ${Math.Rand[10]}) {
        /guildsay under 100 peridots ... ${FindItem[=Peridot].StackCount} peridots
        /varset peridotwarning ${Math.Calc[${peridotwarning} + 1]}
    }
}
/return

Sub DoCombat

/if (${donukes}) {
    /if (!${nukespell5.Find[Ice Meteor]}) {
        /if (${Target.ID} == ${targetid} && ${Target.PctHPs} < ${nukeat} && ${Me.CurrentMana} > ${Spell[${nukespell4}].Mana} && ${Target.Type.NotEqual[CORPSE]} && ${Target.PctHPs} > ${stopnukesat}) {
            /call cast ${nukespell4} 1s checkhps
        }
        /if (${Target.ID} == ${targetid} && ${Target.PctHPs} < ${nukeat} && ${Me.CurrentMana} > ${Spell[${nukespell5}].Mana} && ${Target.Type.NotEqual[CORPSE]} && ${Target.PctHPs} > ${stopnukesat}) {
            /call cast ${nukespell5} 1s checkhps
        }
    }
    /if (${nukespell2.Find[Solist]}) {
        /if (${Target.ID} == ${targetid} && ${Target.PctHPs} < ${nukeat} && ${Me.CurrentMana} > ${Spell[${nukespell5}].Mana} && ${Target.Type.NotEqual[CORPSE]} && ${Target.PctHPs} > ${stopnukesat}) {
            /call cast ${nukespell1} 1s checkhps
        }
        /if (${Target.ID} == ${targetid} && ${Target.PctHPs} < ${nukeat} && ${Me.CurrentMana} > ${Spell[${nukespell5}].Mana} && ${Target.Type.NotEqual[CORPSE]} && ${Target.PctHPs} > ${stopnukesat}) {
            /call cast ${nukespell2} 1s checkhps
        }
        /if (${Target.ID} == ${targetid} && ${Target.PctHPs} < ${nukeat} && ${Me.CurrentMana} > ${Spell[${nukespell5}].Mana} && ${Target.Type.NotEqual[CORPSE]} && ${Target.PctHPs} > ${stopnukesat}) {
            /call cast ${nukespell5} 1s checkhps
        }
    }
}
/if (${dostun}) {
    /if (${Me.Gem["Markar's Discord"]} && ${Me.SpellReady["Markar's Discord"]}) {
        /if (${Target.ID} == ${targetid} && ${Target.PctHPs} < ${nukeat} && ${Me.CurrentMana} > ${Spell["Markar's Discord"].Mana} && ${Target.Type.NotEqual[CORPSE]} && ${Target.PctHPs} > ${stopnukesat}) {
            /call cast "Markar's Discord" 1s checkhps
        }
    }
}
/if (${snare}) {
    /if (${snare} != 4 && ${Target.ID} == ${targetid} && ${Target.PctHPs} < 20 && ${Me.CurrentMana} > ${Spell[${snarespell}].Mana} && ${Target.Type.NotEqual[CORPSE]}) {
        /call cast ${snarespell} 1s
        /if (${Macro.Return.Equal["CAST_SUCCESS"]}) {
            /varset snare 4
        }
    }
}
/if (${Me.PctMana} < 20) {
    /if (${Me.SpellReady[${harvestspell}]}) {
        /call cast ${harvestspell} 1s
    }
    /if (${Me.AltAbilityReady[Harvest of Druzzil]}) {
        /timed 1s /aa act Harvest of Druzzil
    }
}
/return

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 cleartarget

/if (${Spawn[${targetid}].Type.Equal[CORPSE]} && !${targetdead} || !${Spawn[${targetid}].ID} && !${targetdead}) {
/varset targetdead 1
/varset gettarget 1
/varset targetid 0
/if (${snare} == 4) /varset snare 1
/if (${Me.CombatState.NotEqual[COMBAT]} && !${NearestSpawn[1,npc radius 50].ID}) /call returntocamp "face"
}
/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 checkhps

/if (${Target.PctHPs} < 4 && !${Target.Named}) {
/stopcast
/echo ${Target.PctHPs} attempting interrupt...
/echo ${casttimer} (ms) cast time left...
/call Interrupt
}
/return

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 donukes 1
        /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_Buff(Line, TargetPerson, command)

/varset TargetPerson ${TargetPerson.Right[-2].Left[-2]}
/if (${command.Arg[1,].Equal[rune]}) {
    /varset command ${command.Right[-5]}
    /if (${command.Arg[1,].Equal[group]}) {
        /if (${FindItem[=Peridot].StackCount} < 12) {
            /echo not enough peridots
            /guildsay not enough peridots
            /return
        }
        /if (${FindItem[=Peridot].StackCount} < 200) {
            /guildsay only ${FindItem[=Peridot].StackCount} peridots left, runes inc
        }
        /varset command ${command.Right[-6]}
        /if (${Ini[toolismacro,Group${command},member1].NotEqual[empty]} && !${ammoving}) {
            /call getids "${Ini[toolismacro,Group${command},member1]}"
            /if (!${Me.Gem[${spellrune1}]} && !${Cursor.ID}) {
                /memspell 6 ${spellrune1}
                /delay 24s !${Window[SpellBookWND].Open}
                /keypress w
                /delay 16s ${Me.SpellReady[${spellrune1}]}
            }
            /if (${Spawn[id ${Macro.Return}].Distance} < 100 && ${Me.CurrentMana} > ${Spell[${spellrune1}].Mana} && ${Ini[toolismacro,Values,wizrunebuffer].Equal[empty]} || ${Spawn[id ${Macro.Return}].Distance} < 100 && ${Ini[toolismacro,Values,wizrunebuffertargetgroup]} != 0 && ${Ini[toolismacro,Values,wizrunebuffertargetgroup]} != ${command}) /delay 8s ${Me.SpellReady[${spellrune1}]}
            /if (${Spawn[id ${Macro.Return}].Distance} < 100 && ${Me.SpellReady[${spellrune1}]} && ${Me.CurrentMana} > ${Spell[${spellrune1}].Mana} && ${Ini[toolismacro,Values,wizrunebuffer].Equal[empty]} || ${Spawn[id ${Macro.Return}].Distance} < 100 && ${Me.SpellReady[${spellrune1}]} && ${Me.CurrentMana} > ${Spell[${spellrune1}].Mana} && ${Ini[toolismacro,Values,wizrunebuffertargetgroup]} != 0 && ${Ini[toolismacro,Values,wizrunebuffertargetgroup]} != ${command}) {
                /ini "toolismacro" "Values" "wizrunebuffer" "${Me.Name}"
                /ini "toolismacro" "Values" "wizrunebuffertargetgroup" "${command}"
                /guildsay wiz spellshield runes inc grp ${command}
                /declare i int local 1
                /for i 1 to 6
                /call getids "${Ini[toolismacro,Group${command},member${i}]}"
                /target ID ${Macro.Return}
                /delay 2
                /if (${Target.ID} == ${Macro.Return} && ${Target.Distance} < 100 && ${Target.Type.Equal[PC]}) {
                    /tell ${Spawn[id ${Macro.Return}].Name} wizrunes inc...
                    /call cast ${spellrune1} 2s
                    /if (${Me.Book[${spellrune2}]}) {
                        /if (!${Me.Gem[${spellrune2}]} && !${Cursor.ID}) {
                            /if (${Me.AltAbility[Mnemonic Retention]} <= 1) /memspell 6 ${spellrune2}
                            /if (${Me.AltAbility[Mnemonic Retention]} >= 1) /memspell 9 ${spellrune2}
                            /delay 24s !${Window[SpellBookWND].Open}
                            /keypress w
                        }
                        /delay 16s ${Me.SpellReady[${spellrune2}]}
                        /call cast ${spellrune2} 2s
                    }
                    /if (${Macro.Return.Equal["CAST_SUCCESS"]}) /next i    
                }
                /echo ${Target}'s grp spellshield buffed
                /guildsay grp ${command} wizrune buffed
                /if (${Ini[toolismacro,Values,wizrunebuffertargetgroup]} == ${command}) {
                    /ini "toolismacro" "Values" "wizrunebuffer" "empty"
                    /ini "toolismacro" "Values" "wizrunebuffertargetgroup" "0"
                }
            }
        }
    /return
    }
/call getids "${TargetPerson}"
/if (${Spawn[id ${Macro.Return}].ID} && ${Spawn[id ${Macro.Return}].Distance} < 100) /target ID ${Macro.Return}
/delay 2
/if (${Me.PctMana} > 10 && !${ammoving} && ${Target.ID} == ${Macro.Return} && ${Target.Distance} < 100 && ${Target.Type.Equal[PC]}) {
    /if (!${Me.Gem[${spellrune1}]} && !${Cursor.ID}) {
        /memspell 6 ${spellrune1}
        /delay 18s !${Window[SpellBookWND].Open}
        /keypress w
    }
    /tell ${Spawn[id ${Macro.Return}].Name} Spellshield inc...
    /delay 18s ${Me.SpellReady[${spellrune1}]}
    /call cast ${spellrune1} 1s
    /if (${Macro.Return.Equal["CAST_SUCCESS"]}) /echo ${Target} spellshield buffed
}
/if (${FindItem[=Peridot].StackCount} > 1) {
    /if (${FindItem[=Peridot].StackCount} < 200) {
        /guildsay only ${FindItem[=Peridot].StackCount} peridots left, rune inc
    }
    /if (${Me.PctMana} > 10 && !${ammoving} && ${Target.ID} == ${Macro.Return} && ${Target.Distance} < 100 && ${Target.Type.Equal[PC]}) {
        /if (!${Me.Gem[${spellrune2}]} && !${Cursor.ID}) {
            /if (!${Me.AltAbility[Mnemonic Retention]} < 1) /memspell 6 ${spellrune2}
            /if (${Me.AltAbility[Mnemonic Retention]} >= 1) /memspell 9 ${spellrune2}
            /delay 18s !${Window[SpellBookWND].Open}
            /keypress w
        }
        /tell ${Spawn[id ${Macro.Return}].Name} Protection of Calrenainc...
        /delay 18s ${Me.SpellReady[${spellrune2}]}
        /call cast ${spellrune2} 1s
        /if (${Macro.Return.Equal["CAST_SUCCESS"]}) /echo ${Target} protection spellshield 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[wizards]}) {
        /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.Equal[Shadowknight]}) /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[nuke]}) {
    /if (${action.Find[dont]} || ${action.Find[off]}) {
        /varset donukes 0
        /echo turning nukes OFF
        /return
    }
    /varset donukes 1
    /echo turning nukes ON
    /return
}
/if (${action.Find[stun]}) {
    /if (${action.Find[dont]} || ${action.Find[off]}) {
        /varset dostun 0
        /echo turning stun OFF
        /return
    }
    /varset dostun 1
    /echo turning stun ON
    /return
}
/if (${action.Find[manaburn]}) {
    /if (${targetid} == ${Target.ID} && ${Target.Type.Equal["NPC"]}) {
        /guildsay Manaburning ${Target.CleanName}
        /if (${Me.AltAbilityReady[Mana Burn]}) /aa act Mana Burn
    }
}
/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[rebuff]}) {
    /varset petbufftimer 0
    /varset forceshieldtimer 0
    /return
}
/if (${action.Find[pet]}) {
    /if (${action.Find[kill pet]}) {
        /pet leave
        /varset dopet 0
        /return
    }
    /if (${action.Find[do pet]}) {
        /varset dopet 1
        /return
    }
/return
}
/if (${action.Find[snare]}) {
    /if (${action.Find[dont]}) {
        /echo turning snare off
        /varset snare 0
        /return
    }
    /varset snare 1
    /return
}
/if (${action.Find[magictype]}) {
    /varset action ${action.Right[-10]}
    /if (${action.Find[magic]}) {
        /varset magictype magic
        /varset tempvar 100
        /return
    }
    /if (${action.Find[fire]}) {
        /varset magictype fire
        /varset tempvar 100
        /return
    }
    /if (${action.Find[cold]} || ${action.Find[ice]}) {
        /varset magictype cold
        /varset tempvar 100
        /return
    }
    /echo Incorrect magictype
    /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[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[nukeat]}) /varset nukeat ${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

Re: eqemu level 65 or so pal, druid, bers, wiz

Posted: Tue Aug 18, 2015 1:35 am
by toolisaccount
reserved for wiz part2
wiz.mac part2

Code: Select all

Sub page(direction, duration)

/if (${direction.Find[down]}) {
    /keypress Page_Down hold 
    /delay ${duration}
    /keypress Page_Down
}
/if (${direction.Find[up]}) {
    /keypress Page_Up hold 
    /delay ${duration}
    /keypress Page_Up
}
/return

Sub returntocamp(face)

/if (${Bool[${makecamploc}]}) {
    /call gotoloc "${makecamploc}" 
    /if (${Macro.Return} == 1 && ${face.Equal[face]}) {
        /if (${Me.Heading.Degrees} > 179) /face fast heading ${Math.Calc[${Me.Heading.Degrees} - 180]}
        /if (${Me.Heading.Degrees} < 180) /face fast heading ${Math.Calc[${Me.Heading.Degrees} + 180]}
    }
}
/return

Sub gotoloc(loc, command)

/declare locfrom string local
/declare zoneshortname string local ${Zone.ShortName}
/if (!${Bool[${loc}]}) /varset locfrom leashloc
/if (${Bool[${loc}]}) /varset locfrom loc
/declare nextlocationy string local ${${locfrom}.Arg[1,,]}
/declare nextlocationx string local ${${locfrom}.Arg[2,,]}
/declare nextlocationyhigh string local ${Math.Calc[${${locfrom}.Arg[1,,]} + 5]}
/declare nextlocationylow string local ${Math.Calc[${${locfrom}.Arg[1,,]} - 5]}
/declare nextlocationxhigh string local ${Math.Calc[${${locfrom}.Arg[2,,]} + 5]}
/declare nextlocationxlow string local ${Math.Calc[${${locfrom}.Arg[2,,]} - 5]}
/if (${nextlocationy.NotEqual[NULL]} && ${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
    /if (${command.NotEqual[empty]}) /call ${command}
    /return
}
:travel
/keypress forward hold
/if (${nextlocationy.NotEqual[NULL]} && ${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
    /keypress forward
    /if (!${Me.Class.PureCaster}) /varset didstick 0
    /if (${command.NotEqual[empty]}) /call ${command}
    /return 1
}
/if (${nextlocationy.NotEqual[NULL]}) {
    /if (${Me.Y} <= ${nextlocationylow} || ${Me.X} <= ${nextlocationxlow} || ${Me.Y} >= ${nextlocationyhigh} || ${Me.X} >= ${nextlocationxhigh}) {
        /face nolook fast loc ${nextlocationy},${nextlocationx}
    }
}
/if (${zoneshortname.NotEqual[${Zone.ShortName}]}) {
    /if (!${InvSlot[17].Item.ID}) {
        /if (!${InvSlot[13].Item.ID} && !${Defined[amnaked]}) {
            /guildsay - i died during movement - 
            /declare amnaked int outer 100
            /keypress forward
            /varset makecamploc ${Me.Y},${Me.X}
            /return
        }
    }
}
/if (${zoneshortname.NotEqual[${Zone.ShortName}]}) {
    /if (${InvSlot[17].Item.ID} || ${amnaked} == 100) {
        /if (${InvSlot[13].Item.ID} && !${Defined[amnaked]} || !${InvSlot[13].Item.ID} && ${amnaked} == 100) {
            /echo ~~ ${Zone.Name} ~~
            /keypress forward
            /deletevar zoneoutloc
            /varset makecamploc ${Me.Y},${Me.X}
            /return
        }
    }
/return
}
/delay 1
/goto :travel
/return

Sub zonedoor

/keypress forward
:doorloop
/keypress u
/delay 2
/keypress u
/delay 1s
/keypress u
/delay 2
/call viewing
/if (${zoneshortname.Equal[${Zone.ShortName}]}) /goto :doorloop
/return

Sub door

/keypress u
/if (!${Me.Moving}) {
    /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc[${j}]door]}]}) {
        /doortarget ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc[${j}]door]}]}
        /face door
        /keypress u
    }
}
/return

Sub viewing

/declare variable string local page_down
:viewing
/if (${zoneshortname.Equal[${Zone.ShortName}]}) {
    /keypress ${variable} hold
    /delay 2
    /keypress ${variable}
    /keypress u
    /if (${zoneshortname.Equal[${Zone.ShortName}]}) {
        /keypress ${variable} hold
        /delay 4
        /keypress ${variable}
        /keypress u
        /if (${zoneshortname.Equal[${Zone.ShortName}]}) {
            /keypress ${variable} hold
            /delay 4
            /keypress ${variable}
            /keypress u
            /if (${variable.Equal[page_down]}) {
                /varset variable page_up
                /goto :viewing
            }
            /if (${variable.Equal[page_up]}) {
                /varset variable page_down
                /goto :viewing
            }
        }
    }
}
/return

Sub findgroup

/declare totalgroups int local
/declare i int local
/declare j int local
/varset totalgroups ${Ini[toolismacro,Values,totalgroups]}
/for i 1 to ${totalgroups}
/for j 1 to 6
/if (${Ini[toolismacro,Group${i},member${j}].Equal[${Me.Name}]}) {
    /return ${i}
}
/next j
/next i
/echo GROUP NOT FOUND ---- returning +1
/return ${Math.Calc[${totalgroups} + 1]}

Sub groupcheck

/declare i int local
/declare grpcheck int local 0
:checkgroup
/for i 0 to ${Group}
/if (${Group.Member[${i}].Distance} < 120 && ${Group.Member[${i}].ID}) /varset grpcheck ${Math.Calc[${grpcheck} + 1]}
/next i
/if (${grpcheck} == ${Group.GroupSize}) {
    /delay 1s
    /return 1
} else {
    /varset grpcheck 0
    /delay 2
    /goto :checkgroup
}
/return

Sub Event_Movement(Line, SenderPerson, targetperson, TargetZone)

/if (${Bool[${targetperson}]}) {
    /declare name int local
    /declare force int local
    /for force 1 to 10
    /if (${targetperson.Arg[${force},].Equal[force]}) {
        /declare forcemove bool local TRUE
    }
    /if (${targetperson.Arg[1,].Equal[force]} && !${Bool[${targetperson.Arg[2,]}]}) /goto :beginning
    /next force
    /if (${targetperson.Arg[1,].Equal[group]}) {
        /if (${targetperson.Arg[1,].Equal[group]}) {
            /declare groupnumber int local
            /call findgroup
            /varset targetperson ${targetperson.Right[-6]}
            /if (${targetperson.Find[force]}) /varset targetperson ${targetperson.Left[-6]}
            /for groupnumber 1 to ${Ini[toolismacro,Values,totalgroups]}
            /if (${targetperson.Arg[${groupnumber},,]} == ${Macro.Return}) {
                /goto :beginning
            } else {
                /next groupnumber 
                /return
            }
        }
    }
    /for name 1 to 10
    /if (${targetperson.Arg[${name},].Equal[${Me.Name}]}) /goto :beginning
    /next name
    /return
}
:beginning
/if (!${Bool[${Ini[movement,${TargetZone},zoneshortnames].Arg[1,,]}]}) {
    /echo Incorrect Destination
    /return
}
/declare zoneshortname     string local ${Zone.ShortName}
/declare savedtargetzone   string local ${TargetZone}
/declare startlocation     string local 0
/declare tempheading       float  local 0
/declare nextlocationx     string local NULL
/declare nextlocationy     string local NULL
/declare nextlocationxhigh string local
/declare nextlocationxlow  string local
/declare nextlocationyhigh string local
/declare nextlocationylow  string local
/declare i int local
/declare j int local
/declare junctions int local
/declare savedvariable int local 0
/if (${Me.Class.Name.NotEqual[Bard]}) /declare didinvis int local 0
/declare grpnumber int local 0

/echo - Starting -
/for junctions 1 to 12
/echo ${junctions} junctions
/for i 1 to 10
/echo ${i} i variable at i loop
:start
/if (${Bool[${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]}]}) {
    /echo ${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]}
    /varset TargetZone ${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]}
    /echo changed targetzone to ${TargetZone}
    /echo ${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]} targetzones junctions
    /echo ${i} i variable in bool junctions
    /varset i 1
}
/if (!${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]} && ${TargetZone.NotEqual[${savedtargetzone}]}) {
    /varset TargetZone ${savedtargetzone}
    /echo changed targetzone to savedtargetzone
    /echo ${junctions} junctions
    /echo ${i} i variable in not bool junctions
    /echo ${j} j 
    /varset i 1  
}
/if (${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]} && ${TargetZone.NotEqual[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]}) {
    /varset TargetZone ${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}
    /echo changed targetzone to savedtargetzone junction arg junctions
    /echo ${junctions}
    /echo ${i} i variable in bool junctions arg junctions
    /echo ${j} j
    /varset i 1
}
/if (${savedvariable} != 1) {
    /if (${Bool[${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,].Equal[${Zone.ShortName}]}]} && ${startlocation.Equal[0]}) {
        /echo found starting zone
        /varset startlocation ${TargetZone},${i},
        /echo ${startlocation}
        /echo ${i} i variable
        /echo ${j} j variable
    }
    /if (${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,].NotEqual[${Zone.ShortName}]} && ${startlocation.NotEqual[0]}) {
        /echo found end of zones
        /varset junctions 1
        /varset savedvariable 1
        /varset TargetZone ${startlocation.Arg[1,,]}
        /varset i ${startlocation.Arg[2,,]}
    }
}
/if (${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[finish]} && ${zoneshortname.Equal[${Zone.ShortName}]}) {
    /keypress w
    /varset didinvis 0
    /echo i have reached my destination
    /guildsay im at target destination
    /varset makecamploc ${Me.Y},${Me.X}
    /return
}
/if (${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,].Equal[${Zone.ShortName}]}) {
    /if (!${forcemove}) {
        /if (${Me.Class.Name.Equal[Bard]} && !${didinvis}) {
            /call groupcheck
        }
        /if (${Me.Class.Name.NotEqual[Bard]} && !${didinvis}) {
            /call findgroup
            /varset grpnumber ${Macro.Return}
            :waitforinvis
            /doevents Toggle
            /if (${Macro.Return.Equal[abort]}) {
                /varset makecamploc ${Me.Y},${Me.X}
                /return
            }
            /if (${Ini[toolismacro,Movement,group${grpnumber}ready].Equal[ready]}) {
                /varset didinvis 1
            }
            /if (${Ini[toolismacro,Movement,group${grpnumber}ready].Equal[empty]}) {
                /delay 2
                /echo waiting for invis
                /goto :waitforinvis
            }
        }
    }
    /if (${Me.Class.Name.Equal[Bard]} && !${didinvis}) {
        /squelch /twist off
        /varset didinvis 1
        /varset dotwist 1
        /if (!${Me.Gem[${travelsong}]} && !${Cursor.ID}) {
                /guildsay sec memming travel song
                /memspell ${travelsonggem} ${travelsong}
                /delay 2s
        }
        /squelch /twist ${travelsonggem}
        /delay 2s
        /if (!${Me.Casting.ID}) {
            /squelch /twist ${speedsonggem}
            /delay 2s
            /if (${Me.Casting.ID}) /delay 1s
            /if (!${Me.Gem[${invissong}]} && !${Cursor.ID}) {
                /guildsay sec memming invis song
                /memspell ${travelsonggem} ${invissong}
                /delay 2s
            }
            /squelch /twist ${travelsonggem}
            /delay 3s 
        }
        /if (${Me.Casting.ID}) /delay 2s
        /call findgroup
        /varset grpnumber ${Macro.Return}
        /ini "toolismacro" "Movement" "group${grpnumber}ready" "ready"
        /delay 6
        /ini "toolismacro" "Movement" "group${grpnumber}ready" "empty"
    }
    /echo ${j} j (before for loop)
    /for j 1 to 30
    /echo ${j} j
    /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}]}]} && ${savedvariable} != 1) {
        /varset savedvariable ${j}
        /varset nextlocationy ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}].Arg[1,,]}
        /varset nextlocationx ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}].Arg[2,,]}
        /varset nextlocationyhigh ${Math.Calc[${nextlocationy} + 75]}
        /varset nextlocationylow ${Math.Calc[${nextlocationy} - 75]}
        /varset nextlocationxhigh ${Math.Calc[${nextlocationx} + 75]}
        /varset nextlocationxlow ${Math.Calc[${nextlocationx} - 75]}
        /if (${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
            /echo found correct loc
            /varset savedvariable 1
            /goto :end
        }
        /varset nextlocationyhigh ${Math.Calc[${nextlocationy} + 175]}
        /varset nextlocationylow ${Math.Calc[${nextlocationy} - 175]}
        /varset nextlocationxhigh ${Math.Calc[${nextlocationx} + 175]}
        /varset nextlocationxlow ${Math.Calc[${nextlocationx} - 175]}
        /if (${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
            /echo found nearest loc
            /varset savedvariable 1
            /goto :nearestlocloop
        }
        /echo this didnt work
        /varset nextlocationy NULL
        /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${savedvariable}].Arg[1,,]}]}) {
            /varset savedvariable ${Math.Calc[${j} + 1]}
            /varset nextlocationy NULL          
            /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${savedvariable}].Arg[1,,]}]}) {
                /echo next j
                /next j
            }
            /if (${Bool[${Ini[movement,${TargetZone},zoneshortnames].Arg[${Math.Calc[${i} + 1]},,]}]}) {
                /varset j 0
                /next i
            }
            /if (${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]}) {
                /varset j 0
                /echo next junctions instead of j
                /varset TargetZone ${savedtargetzone}
                /next junctions
            }
        }
        /echo this fired
        /varset savedvariable ${Math.Calc[${j} + 1]}
        /delay 2
        /next i
    }
        /if (!${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]} && ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[junction]} || ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[finish]}) {
            /keypress w
            /varset didinvis 0
            /echo i have reached my destination
            /guildsay im at target destination
            /varset makecamploc ${Me.Y},${Me.X}
            /return
        } 
    :end
    /if (${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[junction]}) {
        /keypress forward
        /varset j 1
        /varset TargetZone ${savedtargetzone}
        /if (!${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]}) {
            /varset TargetZone ${startlocation.Arg[1,,]}
            /varset i ${startlocation.Arg[2,,]}
        } 
        /if (${Bool[${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]}]}) {
            /echo changing junctions +1 from hitting a junction
            /next junctions
        }
    }
    /if (${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[zonedoor]} && ${nextlocationy.NotEqual[NULL]}) {
        /keypress forward
        /varset j 1
        :doorloop
        /keypress u
        /delay 2
        /keypress u
        /delay 1s
        /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}zonedoor]}]}) {
            /face nolook loc ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}zonedoor]}
            /keypress u
        }
        /call viewing
        /if (${zoneshortname.Equal[${Zone.ShortName}]}) /goto :doorloop
        /varset nextlocationy NULL
    }
    /if (${zoneshortname.Equal[${Zone.ShortName}]}) {
        /varset tempheading ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,]})
        /if (${Math.Calc[(360 - ${tempheading}) + 45]} > 360 && ${Me.Heading.Degrees} <= ${Math.Calc[(360 - ${tempheading}) - 45]} || ${Math.Calc[(360 - ${tempheading}) + 45]} > 360 && ${Me.Heading.Degrees} <= ${Math.Calc[45 - (360 - ${tempheading})]}) {
            /goto :headingdone
        }
        /if (${Math.Calc[(360 - ${tempheading}) - 45]} < 0 && ${Me.Heading.Degrees} <= ${Math.Calc[(360 - ${tempheading}) + 45]} || ${Math.Calc[(360 - ${tempheading}) - 45]} < 0 && ${Me.Heading.Degrees} <= ${Math.Calc[45 - (360 - ${tempheading})]}) { 
            /goto :headingdone
        }
        /if (${Math.Calc[${Me.Heading.Degrees}]} >= ${Math.Calc[360 - ${tempheading}]} && ${Math.Calc[${Me.Heading.Degrees}]} <= ${Math.Calc[(360 - ${tempheading}) + 45]} || ${Math.Calc[${Me.Heading.Degrees}]} >= ${Math.Calc[(360 - ${tempheading}) - 45]} && ${Math.Calc[${Me.Heading.Degrees}]} <= ${Math.Calc[360 - ${tempheading}]}) {
            /goto :headingdone
        }
            /if (${tempheading} <= 180) {
            /echo Tempheading < 180
                /if (${Me.Heading.Degrees} >= ${Math.Calc[(360 - ${tempheading}) - 180]} && ${Me.Heading.Degrees} <= ${Math.Calc[360 - ${tempheading}]}) {
                    /varset tempheading ${Math.Calc[${tempheading} + 45]}
                    /goto :heading
                } else {
                    /if (${tempheading} <= 45) {
                        /varset tempheading ${Math.Calc[315 + ${tempheading}]}
                        /goto :heading
                    }
                    /varset tempheading ${Math.Calc[${tempheading} - 45]}
                    /goto :heading
                }
            }
            /if (${tempheading} > 180) {
            /echo Tempheading > 180
                /if (${Me.Heading.Degrees} <= ${Math.Calc[(360 - ${tempheading}) + 180]} && ${Me.Heading.Degrees} >= ${Math.Calc[360 - ${tempheading}]}) {
                    /varset tempheading ${Math.Calc[${tempheading} - 45]}
                    /goto :heading
                } else {
                    /if (${tempheading} <= 315) {
                        /varset tempheading ${Math.Calc[${tempheading} + 45]}
                        /goto :heading
                    }
                    /varset tempheading ${Math.Calc[(360 - ${tempheading}) - 45]}
                    /goto :heading
                }
            }
            :heading
            /face heading ${tempheading}
        :headingdone
        /face fast heading ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,]}
    }
    /varset nextlocationy NULL
    /varset nextlocationx NULL
    /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}]}]}) {
        /varset nextlocationy ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}].Arg[1,,]}
        /varset nextlocationx ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}].Arg[2,,]}
    }
    :nearestlocloop
    /doevents Toggle
    /if (${Macro.Return.Equal[abort]}) {
        /varset makecamploc ${Me.Y},${Me.X}
        /return
    }
    /varset nextlocationyhigh ${Math.Calc[${nextlocationy} + 5]}
    /varset nextlocationylow ${Math.Calc[${nextlocationy} - 5]}
    /varset nextlocationxhigh ${Math.Calc[${nextlocationx} + 5]}
    /varset nextlocationxlow ${Math.Calc[${nextlocationx} - 5]}
    :movementloop
    /keypress forward hold
    /if (${nextlocationy.NotEqual[NULL]} && ${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
        /keypress forward
        /delay 2
        /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}command]}]}) /call ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}command]}
        /next j
    }
    /if (${nextlocationy.NotEqual[NULL]}) {
        /if (${Me.Y} <= ${nextlocationylow} || ${Me.X} <= ${nextlocationxlow} || ${Me.Y} >= ${nextlocationyhigh} || ${Me.X} >= ${nextlocationxhigh}) {
            /face nolook fast loc ${nextlocationy},${nextlocationx}
        }
    }
    /if (${zoneshortname.NotEqual[${Zone.ShortName}]}) {
        /if (!${InvSlot[17].Item.ID}) {
            /if (!${InvSlot[13].Item.ID} && !${Defined[amnaked]}) {
                /guildsay - i died during movement - 
                /declare amnaked int outer 100
                /doevents flush Movement
                /return
            }
        }
        /echo -- ${Zone.Name} --
        /varset nextlocationy NULL
        /keypress forward
        /varset zoneshortname ${Zone.ShortName}
        /varset didinvis 0
        /varset j 1
        /varset i 0
        /delay 2
        /next i
    }
    /delay 1
    /goto :movementloop
}
/delay 2
/if (${Bool[${Ini[movement,${TargetZone},zoneshortnames].Arg[${Math.Calc[${i} + 1]},,]}]}) /next i
/varset i 0
/next junctions
/varset junctions 1
/varset savedvariable 1
/varset TargetZone ${startlocation.Arg[1,,]}
/varset i ${startlocation.Arg[2,,]}
/echo setting targetzone and zone im in
/next junctions
/echo returning
/return

Re: eqemu level 65 or so pal, druid, bers, wiz

Posted: Tue Aug 18, 2015 1:37 am
by toolisaccount
spellroutines.inc
this is my spellroutines.inc its faster and efficient it could be better very soon!

this is ideal for raiding with alot of chars or watever fastest

this is the newest version i think this is very close to perfection ----UNTESTED
this reads 1xperline 1-2line 1line w/returns for efficiency
old version reads 3xperline 1-2line

nothold is done by default in this version as a success so no repeated casts
nothold done by default the second /varset castreturn CAST_SUCCESS is unnecessary keeping it for research purposes

you want it teh bestest???!? remove the commented out stuff -outofrange outofmana uselessness

you could also disable your focus effect chat spew ingame filters

if u wanna get rlly specul with this u can remove the "cannot be" line and make
a seperate spellroutines for ench and brd? that mez/charm mobs ---- 1xperline 1-2line // 1xperline 1-2line 1line
don't forget to #include spell_routines.inc in ur macro
or liek #include spell_routines_full.inc in ench && brd? macros if u make a seperate one for charm/mez

Code: Select all

#turbo 40



#Event spellroutines "Your#1#"
|#Event OutOfMana "Insufficient Mana to cast this spell!#*#"

Sub cast(string SpellName,string Recast,string SpellSlot,string Subroutine)

/if (!${Defined[castreturn]}) /declare castreturn string outer
/if (!${Defined[casttime]}) /declare casttime float outer ${Spell[${SpellName}].MyCastTime}
/if (!${Defined[casttimer]}) /declare casttimer timer outer
/if (!${Defined[recasttimer]}) /declare recasttimer timer outer 

/varset casttime ${Spell[${SpellName}].MyCastTime}
/if (${Defined[Recast]}) { 
    /if (${Recast.Find[gem]}) {
        /declare SpellSlot string local ${Recast}
    }
    /varset Recast ${Recast.Left[-1]}
} else {
    /declare Recast string local 0
}
/if (${Defined[SpellSlot]}) {
    /if (!${SpellSlot.Find[gem]}) {
        /declare Subroutine string local
        /varset Subroutine ${SpellSlot}
        /varset SpellSlot ${Me.Gem[${SpellName}]}
    }
    /if (${SpellSlot.Find[gem]}) {
        /varset SpellSlot ${SpellSlot.Right[-3]}
    }
}
:start
/if (!${Me.Gem[${SpellName}]} && !${Cursor.ID}) {
    /memspell ${SpellSlot} "${SpellName}"
    /delay 10s ${Me.SpellReady[${SpellName}]}
}
/delay 1
/if (!${Me.SpellReady[${SpellName}]}) /goto :start
/varset recasttimer ${Math.Calc[${Recast} * 10]}
:cast
/if (${Me.SpellReady[${SpellName}]}) {
    /varset casttimer ${Math.Calc[${casttime} * 10]}
    /if (${Spell[${SpellName}].TargetType.Equal[Self]} || ${Spell[${SpellName}].TargetType.Equal[PB AE]} || ${Spell[${SpellName}].TargetType.Equal[Pet]}) {
        /echo Casting ${SpellName} >>><<<
    } else {
        /echo Casting ${SpellName} >>> ${Target.CleanName} <<<
    }
    /cast "${SpellName}"
} else {
/delay 1
/goto :cast
}
:check
/if (!${Me.Casting.ID} && !${recasttimer}) /goto :finish
/if (${Defined[Subroutine]} && ${Me.Casting.ID}) /call ${Subroutine}
/delay 1
/if (!${Me.Casting.ID} && ${recasttimer}) /goto :cast
/if (${Me.Casting.ID}) /goto :check
:finish
/varset castreturn CAST_SUCCESS
/doevents spellroutines
/if (${castreturn.NotEqual[CAST_SUCCESS]}) /echo ${castreturn}
/return ${castreturn}

Sub Interrupt

/stopcast
/varset recasttimer 0
/delay 1
/return

Sub Event_spellroutines(Line, spellstring)

/if (${spellstring.Find[spell]}) {
    /if (${spellstring.Find[interrupted]}) {
        /varset castreturn CAST_INTERRUPTED
        /return
    }
    /if (${spellstring.Find[resisted the]}) {
        /varset castreturn CAST_RESISTED
        /return
    }
|    /varset castreturn CAST_SUCCESS
    /return
}
|    /if (${spellstring.Find[is out of]}) {
|        /varset castreturn CAST_OUTOFRANGE
|        /return
|    }
/if (${spellstring.Find[cannot be]}) {
    /varset castreturn CAST_IMMUNE
}
/return

|Sub Event_OutOfMana(Line)
|
|/varset castreturn CAST_OOM
|/return


this is the old version its ok for research purposes this works its tested

Code: Select all

#turbo 40



#Event Interrupt "Your#*#interrupted#*#"
#Event CastFail "Your target#2#"
#Event NotHold "Your spell did not take hold#*#"
|#Event OutOfMana "Insufficient Mana to cast this spell!#*#"

Sub cast(string SpellName,string Recast,string SpellSlot,string Subroutine)

/if (!${Defined[castreturn]}) /declare castreturn string outer
/if (!${Defined[casttime]}) /declare casttime float outer ${Spell[${SpellName}].MyCastTime}
/if (!${Defined[casttimer]}) /declare casttimer timer outer
/if (!${Defined[recasttimer]}) /declare recasttimer timer outer 

/varset casttime ${Spell[${SpellName}].MyCastTime}
/if (${Defined[Recast]}) { 
    /if (${Recast.Find[gem]}) {
        /declare SpellSlot string local ${Recast}
    }
    /varset Recast ${Recast.Left[-1]}
} else {
    /declare Recast string local 0
}
/if (${Defined[SpellSlot]}) {
    /if (!${SpellSlot.Find[gem]}) {
        /declare Subroutine string local
        /varset Subroutine ${SpellSlot}
        /varset SpellSlot ${Me.Gem[${SpellName}]}
    }
    /if (${SpellSlot.Find[gem]}) {
        /varset SpellSlot ${SpellSlot.Right[-3]}
    }
}
:start
/if (!${Me.Gem[${SpellName}]} && !${Cursor.ID}) {
    /memspell ${SpellSlot} "${SpellName}"
    /delay 10s ${Me.SpellReady[${SpellName}]}
}
/delay 1
/if (!${Me.SpellReady[${SpellName}]}) /goto :start
/varset recasttimer ${Math.Calc[${Recast} * 10]}
:cast
/if (${Me.SpellReady[${SpellName}]}) {
    /varset casttimer ${Math.Calc[${casttime} * 10]}
    /if (${Spell[${SpellName}].TargetType.Equal[Self]} || ${Spell[${SpellName}].TargetType.Equal[PB AE]} || ${Spell[${SpellName}].TargetType.Equal[Pet]}) {
        /echo Casting ${SpellName} >>><<<
    } else {
        /echo Casting ${SpellName} >>> ${Target.CleanName} <<<
    }
    /cast "${SpellName}"
} else {
/delay 1
/goto :cast
}
:check
/if (!${Me.Casting.ID} && !${recasttimer}) /goto :finish
/if (${Defined[Subroutine]} && ${Me.Casting.ID}) /call ${Subroutine}
/delay 1
/if (!${Me.Casting.ID} && ${recasttimer}) /goto :cast
/if (${Me.Casting.ID}) /goto :check
:finish
/varset castreturn CAST_SUCCESS
/doevents Interrupt
/doevents NotHold
/doevents CastFail
/if (${castreturn.NotEqual[CAST_SUCCESS]}) /echo ${castreturn}
/return ${castreturn}

Sub Interrupt

/stopcast
/varset recasttimer 0
/delay 1
/return

Sub Event_CastFail(Line, FailText)

|/if (${FailText.Find[is out of]}) {
|    /varset castreturn CAST_OUTOFRANGE
|    /return
|}
/if (${FailText.Find[resisted the]}) {
    /varset castreturn CAST_RESISTED
    /return
}
/if (${FailText.Find[cannot be]}) {
    /varset castreturn CAST_IMMUNE
    /return
}
/return

Sub Event_Interrupt(Line)

/varset castreturn CAST_INTERRUPTED
/return

Sub Event_NotHold(Line)

/varset castreturn CAST_SUCCESS
/return

|Sub Event_OutOfMana(Line)
|
|/varset castreturn CAST_OOM
|/return

Re: eqemu level 65 or so pal, druid, bers, wiz

Posted: Tue Aug 18, 2015 1:38 am
by toolisaccount
reserved for movement.ini
this is in other posts atm

Re: eqemu level 65 or so pal, druid, bers, wiz

Posted: Tue Aug 18, 2015 1:41 am
by toolisaccount
reserved for movement.ini part2

Re: eqemu level 65 or so pal, druid, bers, wiz

Posted: Tue Aug 18, 2015 1:42 am
by toolisaccount
reserved

Re: eqemu level 65 or so pal, druid, bers, wiz

Posted: Tue Aug 18, 2015 1:43 am
by toolisaccount
reserved for toolismacro.ini
this is the newest version at this time 09/06/2015? 5:37 est
explanation and stuff is in other posts this is a work in progress

Code: Select all

[Values]
totalgroups=4
totalrotationnumber=0
othermacros=fish,forage,rez,pl
macros=bard,cleric,necro,monk,shaman,mage,sk,ench,beast,paladin,wiz,warrior,rogue,ranger,druid,berserker

shamanhpbuffer=empty
shamanhpbuffertargetgroup=0
shamansowbuffer=empty
shamansowbuffertargetgroup=0
clerichpbuffer=empty
clerichpbuffertargetgroup=0
clerichastebuffer=empty
clerichastebuffertargetgroup=0
druidhpbuffer=empty
druidhpbuffertargetgroup=0
druiddmfbuffer=empty
druiddmfbuffertargetgroup=0
rangerattackonebuffer=empty
rangerattackonebuffertargetgroup=0
rangerattacktwobuffer=empty
rangerattacktwobuffertargetgroup=0
priestregenbuffer=empty
priestregenbuffertargetgroup=0
wizrunebuffer=empty
wizrunebuffertargetgroup=0
necrodmfbuffer=empty
necrodmfbuffertargetgroup=0
magedsbuffer=empty
magedsbuffertargetgroup=0
enchkeibuffer=empty
enchkeibuffertargetgroup=0
enchresistbuffer=empty
enchresistbuffertargetgroup=0
shamanresistbuffer=empty
shamanresistbuffertargetgroup=0
bstcrackbuffer=empty
bstcrackbuffertargetgroup=0
bsthpbuffer=empty
bsthpbuffertargetgroup=0
palhpbuffer=empty
palhpbuffertargetgroup=0

bstparagon=empty
druidparagon=empty
modrods=empty
clericward=empty
druidward=empty
group1cure=empty
group2cure=empty
group3cure=empty
group4cure=empty
group1regen=empty
group2regen=empty
group3regen=empty
group4regen=empty


[Movement]
group1ready=empty
group2ready=empty
group3ready=empty
group4ready=empty

[Group1]
member1=Tooli
member2=Toolis
member3=Chloroform
member4=Lateralus
member5=Opiate
member6=Evildeedlit

[Group2]
member1=Leviath
member2=Undertow
member3=Lolth
member4=Zhzh
member5=Atoms
member6=Parabola

[Group3]
member1=Finhmi
member2=Schism
member3=Abyssal
member4=Nocturnity
member5=Deedlit
member6=Ticksandleeches

[Group4]
member1=Sengir
member2=Intolerance
member3=Chronal
member4=Severely
member5=Astraldeva
member6=Parabol

Re: eqemu level 65 or so pal, druid, bers, wiz

Posted: Tue Aug 18, 2015 1:44 am
by toolisaccount
pl.mac
this is good for low level chars or just /sticking with lower level chars
good to learn from or something too

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 Enraged  "#1# enraged#*#"
#Event GuildAssist "#1#tells#*#, 'assist me with#*#'"
#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 assistat        int outer 98
/if (${Me.Class.HealerType} && ${Me.Book[${healspell}]})                      /declare doheal           int outer 1
/if (${Me.Class.HealerType})                                                  /declare healat           int outer 85
/if (${Me.Class.Name.Equal[Necromancer]} || ${Me.Class.Name.Equal[Magician]}) /declare pethasteduration int outer 36000

/if (${Me.Class.Name.Equal[Warrior]}) /declare dotaunt int outer 0
/if (${Me.Class.Name.Find[Shadow]})   /declare dotaunt int outer 0
/if (${Me.Class.Name.Equal[Paladin]}) /declare dotaunt int outer 0

/if (${Me.Class.Name.Equal[Bard]})    /declare speedsonggem  int outer 4
/if (${Me.Class.Name.Equal[Bard]})    /declare travelsonggem int outer 6
/if (${Me.Class.Name.Equal[Bard]} && ${Me.Level} == 51) /stick set autopause off

/if (${Me.Class.Name.Equal[Necromancer]}) /declare petspell         string outer "Saryrn's Companion"
/if (${Me.Class.Name.Equal[Necromancer]}) /declare pethastespell    string outer "Rune of Death"
/if (${Me.Class.Name.Equal[Necromancer]}) /declare nukespell        string outer "Gangrenous Touch of Zum`uul"

/if (${Me.Class.Name.Equal[Magician]})    /declare petspell         string outer "Servant of Marr"
/if (${Me.Class.Name.Equal[Magician]})    /declare pethastespell    string outer "Burnout V"
/if (${Me.Class.Name.Equal[Magician]})    /declare nukespell        string outer "Shock of Fiery Blades"

/if (${Me.Class.Name.Equal[Beastlord]})   /declare petspell         string outer
/if (${Me.Class.Name.Equal[Beastlord]})   /declare pethastespell    string outer
/if (${Me.Class.Name.Equal[Beastlord]})   /declare healspell        string outer
 
/if (${Me.Class.Name.Equal[Shaman]})      /declare petspell         string outer "True Spirit"
/if (${Me.Class.Name.Equal[Shaman]})      /declare pethastespell    string outer 
/if (${Me.Class.Name.Equal[Shaman]})      /declare healspell        string outer "Tnarg's Mending"

/if (${Me.Class.Name.Equal[Cleric]})      /declare healspell        string outer "Ethereal Light"

/if (${Me.Class.Name.Equal[Necromancer]} || ${Me.Class.Name.Equal[Magician]}) /declare pethastetimer timer outer
/declare makecamploc  string outer ${Me.Y},${Me.X}
/declare sticktype    string outer behindonce loose 8
/declare canlev          int outer 1
/declare didinvis        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
/squelch /assist off

/declare mainassist string outer
/varset mainassist ${Param0}

/if (${Defined[Param0]}) {
/echo My main assist is set to ${mainassist}
} else {
/echo This Macro needs a Main assist to run ... try /mac monk Tanksname ....
/end
}
/echo pl macro started
/memspellset level 62

:loop
/if (${ammoving} && ${Me.Class.Name.Equal[Bard]}) /call travelstuff
|/if (!${ammoving} && ${Bool[${leashloc}]}) /call gotoloc
/if (!${ammoving}) /call cleartarget
/if (!${ammoving}) /call checkstuff
/if (!${ammoving} && ${Bool[${petspell}]}) /call summonpet
/if (${gettarget} && !${ammoving}) /call gettarget
/if (${targetid} == ${Target.ID}) /call killtarg
/if (!${ammoving} && ${Me.CombatState.NotEqual[COMBAT]}) { 
    /if (!${Me.Casting.ID} && ${Me.Standing} && !${Me.Moving})  /sit
}
/if (!${ammoving} && ${doheal}) /call checkheals
/doevents
/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 2
    /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
        /varset didstick 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} && !${Me.Class.PureCaster}) {
    /face fast nolook id ${targetid}
    /stick ${sticktype}
    /if (${Me.Pet.ID}) /pet attack
    /attack on
    /varset didstick 1
    /delay 2
}
/if (${Me.AbilityReady["Kick"]} && ${Target.Type.Equal["NPC"]}) {
    /if (!${Defined[dontmelee]}) {
        /doability "Kick"
    }
}
/if (${dotaunt}) {
    /if (${Me.AbilityReady["Taunt"]} && ${Target.Type.Equal["NPC"]}) {
        /doability "Taunt"
    }
}
/if (${Bool[${nukespell}]}) {
    /if (${Me.SpellReady[${nukespell}]} && ${Me.CurrentMana} > ${Spell[${nukespell}].Mana}) {
        /if (${Target.ID} == ${targetid} && ${Target.PctHPs} < ${assistat} && ${Target.PctHPs} > 10) {
            /call cast ${nukespell} 1s checkhps
        }
    }
}
/return

Sub travelstuff

/declare i int local
/if (${Cursor.ID} && !${cursorwarningtimer}) {
    /echo i cant travel through lev / no lev zones properly with shit on my cursor
    /guildsay i cant travel through lev / no lev zones properly with shit on my cursor
    /declare cursorwarningtimer timer outer 100
}
/if (!${didinvis} && ${canlev}) {
    /if (!${Me.Gem["Selo's Song of Travel"]} && !${Cursor.ID}) {
        /guildsay sec memming invis travel song
        /memspell 6 "Selo's Song of Travel"
        /delay 2s
    }
    /twist ${travelsonggem}
    /varset didinvis 1
}
/if (!${didinvis} && !${canlev}) {
    /if (!${Me.Gem["Shauri's Sonorous Clouding"]} && !${Cursor.ID}) {
        /guildsay sec memming invis song
        /memspell 4 "Shauri's Sonorous Clouding"
        /delay 2s
    }
    /call groupcheck
    /if (${Macro.Return.Equal[1]}) {
        /twist ${speedsonggem}
        /delay 3s
        /twist ${travelsonggem}
        /varset didinvis 1
    }
}

/return

Sub groupcheck

/declare i int local
/declare grpcheck int local 0
:checkgroup
/for i 0 to ${Group}
/if (${Group.Member[${i}].Distance} < 120 && ${Group.Member[${i}].ID}) /varset grpcheck ${Math.Calc[${grpcheck} + 1]}
/next i
/if (${grpcheck} == ${Group.GroupSize}) {
    /delay 1s
    /return 1
} else {
    /varset grpcheck 0
    /delay 2
    /goto :checkgroup
}
/return

Sub cleartarget

/if (${Spawn[${targetid}].Type.Equal[CORPSE]} && !${targetdead} || !${Spawn[${targetid}].Type.Equal[NPC]} && !${targetdead}) {
/varset targetdead 1
/varset gettarget 1
/varset didstick 0
/attack off
/if (${Me.CombatState.NotEqual[COMBAT]} && !${NearestSpawn[1,npc radius 50].ID}) /call returntocamp "face"
}
/if (${Target.ID} != ${targetid} && ${Spawn[${targetid}].Type.NotEqual[CORPSE]} && ${Spawn[${targetid}].ID}) /target ID ${targetid}
/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 (${Cursor.Name.Equal[Rod of Mystical Transvergence]}) {
    /if (${Me.FreeInventory} > 1) {
        /autoinv
        /call handledestroy "Rod of Mystical Transvergence"
    }
}
/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 (!${Defined[amnaked]}) /declare amnaked int local 100
            /if (!${Window[SpellBookWnd].Open}) /guildsay <==== i died ====>
            /if (!${Window[SpellBookWnd].Open}) /memspellset level 62
            /if (${Window[SpellBookWnd].Open} && !${Me.Gem[8].ID}) /delay 1s
            /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 
/if (${Me.CurrentMana} > ${Spell[${healspell}].Mana}) {
    /call getids "${mainassist}"
    /if (${Spawn[id ${Macro.Return}].Distance} < 125 && ${Spawn[id ${Macro.Return}].ID}) {
        /target ID ${Macro.Return}
        /delay 2
        /if (${Target.PctHPs} < ${healat} && ${Target.Type.Equal[PC]}) {
            /gsay heal incoming on ${Target}
            /call cast ${healspell} 1s checkhealed
        }
    }
}
/for i 0 to ${Group}
/if (${Group.Member[${i}].PctHPs} < ${healat} && ${Me.CurrentMana} > ${Spell[${healspell}].Mana}) {
    /if (${Group.Member[${i}].Distance} < 125 && ${Group.Member[${i}].Type.NotEqual[CORPSE]} && ${Group.Member[${i}].ID}) {
        /target ID ${Group.Member[${i}].ID}
        /delay 2
        /if (${Target.Type.Equal[PC]}) {
            /gsay incoming heal on ${Target}
            /call cast ${healspell} 1s checkhealed
        }
    }
}
/next i
/return

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 checkhps

/if (${Target.PctHPs} < 4 && !${Target.Named}) {
/stopcast
/echo ${Target.PctHPs} attempting interrupt...
/echo ${casttimer} (ms) cast time left...
/call Interrupt
}
/return

Sub summonpet

/if (!${Me.Pet.ID}) {
    /if (${Me.CurrentMana} > ${Spell[${petspell}].Mana}) {
        /if (${Me.Class.Name.Equal[Magician]} || ${Me.Class.Name.Equal[Necromancer]}) {
            /if (${FindItem[=Bone Chips].StackCount} > 0 && ${Me.Class.Name.Equal[Necromancer]} || ${FindItem[=Malachite].StackCount} > 0 && ${Me.Class.Name.Equal[Magician]}) {
                /call cast ${petspell} 1s
                /delay 2
                /if (${targetid}) {
                    /target ID ${targetid}
                    /delay 4
                    /pet attack
                }
            }
            /return
        }
        /call cast ${petspell} 1s
        /delay 2
        /if (${targetid}) {
            /target ID ${targetid}
            /delay 4
            /pet attack
        }
    }
}
/if (${Me.Pet.ID}) {
    /if (${Me.Book[${pethastespell}]}) {
        /if (!${Me.PetBuff[${pethastespell}]} || ${pethastetimer} < 600) {
            /if (${Me.CurrentMana} > ${Spell[${pethastespell}].Mana}) {
                /call cast ${pethastespell} 1s
                /if (${Macro.Return.Equal["CAST_SUCCESS"]}) { 
                    /varset pethastetimer ${pethasteduration}
                }
            }
        }
    }
}       
/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 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 <<<
        /declare dontmelee int outer 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! <<<
        /deletevar dontmelee
        /attack on
    }
}
/doevents flush Enraged
/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
    }
    /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[clickies]}) {
    /if (${FindItem[=Reaper's Ring].ID}) /call clickitem "Reaper's Ring" "inv"
/return
}
/if (${action.Arg[1,].Equal[tank]}) {
    /if (${action.Arg[1,].Equal[mainassist]}) /varset action ${action.Right[-11]}
    /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.Equal[Shadowknight]}) /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[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[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[nukeat]}) /varset nukeat ${action.Arg[2,]}
    /return
}
/if (${action.Find[/ex]}) {
    /if (${Me.Trader}) /return
    /docommand /exit
}
/if (${action.Find[pagedown]}) {
    /keypress Page_Down hold 
    /delay 1s
    /keypress Page_Down
    /return
}
/if (${action.Find[throne]}) {
    /aa act Throne of Heroes
    /return
}
/if (${action.Find[infusion]}) {
    /twist off
    /varset dotwist 1
    /aa act Infusion of the Faithful
    /return
}
/if (${action.Find[lesson]}) {
    /twist off
    /varset dotwist 1
    /aa act Lesson of the Devoted
    /return
}
/if (${action.Find[intensity]}) {
    /twist off
    /varset dotwist 1
    /aa act Intensity of the Resolute
    /return
}
/if (${action.Find[expedient]} || ${action.Find[expediant]}) {
    /twist off
    /varset dotwist 1
    /aa act Expedient Recovery
    /return
}
/return

Sub page(direction, duration)

/if (${direction.Find[down]}) {
    /keypress Page_Down hold 
    /delay ${duration}
    /keypress Page_Down
}
/if (${direction.Find[up]}) {
    /keypress Page_Up hold 
    /delay ${duration}
    /keypress Page_Up
}
/return

Sub returntocamp(face)

/if (${Bool[${makecamploc}]}) {
    /call gotoloc "${makecamploc}" 
    /if (${Macro.Return} == 1 && ${face.Equal[face]}) {
        /if (${Me.Heading.Degrees} > 179) /face fast heading ${Math.Calc[${Me.Heading.Degrees} - 180]}
        /if (${Me.Heading.Degrees} < 180) /face fast heading ${Math.Calc[${Me.Heading.Degrees} + 180]}
    }
}
/return

Sub gotoloc(loc, command)

/declare locfrom string local
/declare zoneshortname string local ${Zone.ShortName}
/if (!${Bool[${loc}]}) /varset locfrom leashloc
/if (${Bool[${loc}]}) /varset locfrom loc
/declare nextlocationy string local ${${locfrom}.Arg[1,,]}
/declare nextlocationx string local ${${locfrom}.Arg[2,,]}
/declare nextlocationyhigh string local ${Math.Calc[${${locfrom}.Arg[1,,]} + 5]}
/declare nextlocationylow string local ${Math.Calc[${${locfrom}.Arg[1,,]} - 5]}
/declare nextlocationxhigh string local ${Math.Calc[${${locfrom}.Arg[2,,]} + 5]}
/declare nextlocationxlow string local ${Math.Calc[${${locfrom}.Arg[2,,]} - 5]}
/if (${nextlocationy.NotEqual[NULL]} && ${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
    /if (${command.NotEqual[empty]}) /call ${command}
    /return
}
:travel
/keypress forward hold
/if (${nextlocationy.NotEqual[NULL]} && ${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
    /keypress forward
    /if (!${Me.Class.PureCaster}) /varset didstick 0
    /if (${command.NotEqual[empty]}) /call ${command}
    /return 1
}
/if (${nextlocationy.NotEqual[NULL]}) {
    /if (${Me.Y} <= ${nextlocationylow} || ${Me.X} <= ${nextlocationxlow} || ${Me.Y} >= ${nextlocationyhigh} || ${Me.X} >= ${nextlocationxhigh}) {
        /face nolook fast loc ${nextlocationy},${nextlocationx}
    }
}
/if (${zoneshortname.NotEqual[${Zone.ShortName}]}) {
    /if (!${InvSlot[17].Item.ID}) {
        /if (!${InvSlot[13].Item.ID} && !${Defined[amnaked]}) {
            /guildsay - i died during movement - 
            /declare amnaked int outer 100
            /keypress forward
            /varset makecamploc ${Me.Y},${Me.X}
            /return
        }
    }
}
/if (${zoneshortname.NotEqual[${Zone.ShortName}]}) {
    /if (${InvSlot[17].Item.ID} || ${amnaked} == 100) {
        /if (${InvSlot[13].Item.ID} && !${Defined[amnaked]} || !${InvSlot[13].Item.ID} && ${amnaked} == 100) {
            /echo ~~ ${Zone.Name} ~~
            /keypress forward
            /deletevar zoneoutloc
            /varset makecamploc ${Me.Y},${Me.X}
            /return
        }
    }
/return
}
/delay 1
/goto :travel
/return

Sub zonedoor

/keypress forward
:doorloop
/keypress u
/delay 2
/keypress u
/delay 1s
/keypress u
/delay 2
/call viewing
/if (${zoneshortname.Equal[${Zone.ShortName}]}) /goto :doorloop
/return

Sub door

/keypress u
/if (!${Me.Moving}) {
    /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc[${j}]door]}]}) {
        /doortarget ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc[${j}]door]}]}
        /face door
        /keypress u
    }
}
/return

Sub viewing

/declare variable string local page_down
:viewing
/if (${zoneshortname.Equal[${Zone.ShortName}]}) {
    /keypress ${variable} hold
    /delay 2
    /keypress ${variable}
    /keypress u
    /if (${zoneshortname.Equal[${Zone.ShortName}]}) {
        /keypress ${variable} hold
        /delay 4
        /keypress ${variable}
        /keypress u
        /if (${zoneshortname.Equal[${Zone.ShortName}]}) {
            /keypress ${variable} hold
            /delay 4
            /keypress ${variable}
            /keypress u
            /if (${variable.Equal[page_down]}) {
                /varset variable page_up
                /goto :viewing
            }
            /if (${variable.Equal[page_up]}) {
                /varset variable page_down
                /goto :viewing
            }
        }
    }
}
/return

Sub findgroup

/declare totalgroups int local
/declare i int local
/declare j int local
/varset totalgroups ${Ini[toolismacro,Values,totalgroups]}
/for i 1 to ${totalgroups}
/for j 1 to 6
/if (${Ini[toolismacro,Group${i},member${j}].Equal[${Me.Name}]}) {
    /return ${i}
}
/next j
/next i
/echo GROUP NOT FOUND ---- returning +1
/return ${Math.Calc[${totalgroups} + 1]}

Sub groupcheck

/declare i int local
/declare grpcheck int local 0
:checkgroup
/for i 0 to ${Group}
/if (${Group.Member[${i}].Distance} < 120 && ${Group.Member[${i}].ID}) /varset grpcheck ${Math.Calc[${grpcheck} + 1]}
/next i
/if (${grpcheck} == ${Group.GroupSize}) {
    /delay 1s
    /return 1
} else {
    /varset grpcheck 0
    /delay 2
    /goto :checkgroup
}
/return

Sub Event_Movement(Line, SenderPerson, targetperson, TargetZone)

/if (${Bool[${targetperson}]}) {
    /declare name int local
    /declare force int local
    /for force 1 to 10
    /if (${targetperson.Arg[${force},].Equal[force]}) {
        /declare forcemove bool local TRUE
    }
    /if (${targetperson.Arg[1,].Equal[force]} && !${Bool[${targetperson.Arg[2,]}]}) /goto :beginning
    /next force
    /if (${targetperson.Arg[1,].Equal[group]}) {
        /if (${targetperson.Arg[1,].Equal[group]}) {
            /declare groupnumber int local
            /call findgroup
            /varset targetperson ${targetperson.Right[-6]}
            /if (${targetperson.Find[force]}) /varset targetperson ${targetperson.Left[-6]}
            /for groupnumber 1 to ${Ini[toolismacro,Values,totalgroups]}
            /if (${targetperson.Arg[${groupnumber},,]} == ${Macro.Return}) {
                /goto :beginning
            } else {
                /next groupnumber 
                /return
            }
        }
    }
    /for name 1 to 10
    /if (${targetperson.Arg[${name},].Equal[${Me.Name}]}) /goto :beginning
    /next name
    /return
}
:beginning
/if (!${Bool[${Ini[movement,${TargetZone},zoneshortnames].Arg[1,,]}]}) {
    /echo Incorrect Destination
    /return
}
/declare zoneshortname     string local ${Zone.ShortName}
/declare savedtargetzone   string local ${TargetZone}
/declare startlocation     string local 0
/declare tempheading       float  local 0
/declare nextlocationx     string local NULL
/declare nextlocationy     string local NULL
/declare nextlocationxhigh string local
/declare nextlocationxlow  string local
/declare nextlocationyhigh string local
/declare nextlocationylow  string local
/declare i int local
/declare j int local
/declare junctions int local
/declare savedvariable int local 0
/if (${Me.Class.Name.NotEqual[Bard]}) /declare didinvis int local 0
/declare grpnumber int local 0

/echo - Starting -
/for junctions 1 to 12
/echo ${junctions} junctions
/for i 1 to 10
/echo ${i} i variable at i loop
:start
/if (${Bool[${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]}]}) {
    /echo ${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]}
    /varset TargetZone ${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]}
    /echo changed targetzone to ${TargetZone}
    /echo ${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]} targetzones junctions
    /echo ${i} i variable in bool junctions
    /varset i 1
}
/if (!${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]} && ${TargetZone.NotEqual[${savedtargetzone}]}) {
    /varset TargetZone ${savedtargetzone}
    /echo changed targetzone to savedtargetzone
    /echo ${junctions} junctions
    /echo ${i} i variable in not bool junctions
    /echo ${j} j 
    /varset i 1  
}
/if (${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]} && ${TargetZone.NotEqual[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]}) {
    /varset TargetZone ${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}
    /echo changed targetzone to savedtargetzone junction arg junctions
    /echo ${junctions}
    /echo ${i} i variable in bool junctions arg junctions
    /echo ${j} j
    /varset i 1
}
/if (${savedvariable} != 1) {
    /if (${Bool[${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,].Equal[${Zone.ShortName}]}]} && ${startlocation.Equal[0]}) {
        /echo found starting zone
        /varset startlocation ${TargetZone},${i},
        /echo ${startlocation}
        /echo ${i} i variable
        /echo ${j} j variable
    }
    /if (${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,].NotEqual[${Zone.ShortName}]} && ${startlocation.NotEqual[0]}) {
        /echo found end of zones
        /varset junctions 1
        /varset savedvariable 1
        /varset TargetZone ${startlocation.Arg[1,,]}
        /varset i ${startlocation.Arg[2,,]}
    }
}
/if (${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[finish]} && ${zoneshortname.Equal[${Zone.ShortName}]}) {
    /keypress w
    /varset didinvis 0
    /echo i have reached my destination
    /guildsay im at target destination
    /varset makecamploc ${Me.Y},${Me.X}
    /return
}
/if (${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,].Equal[${Zone.ShortName}]}) {
    /if (!${forcemove}) {
        /if (${Me.Class.Name.Equal[Bard]} && !${didinvis}) {
            /call groupcheck
        }
        /if (${Me.Class.Name.NotEqual[Bard]} && !${didinvis}) {
            /call findgroup
            /varset grpnumber ${Macro.Return}
            :waitforinvis
            /doevents Toggle
            /if (${Macro.Return.Equal[abort]}) {
                /varset makecamploc ${Me.Y},${Me.X}
                /return
            }
            /if (${Ini[toolismacro,Movement,group${grpnumber}ready].Equal[ready]}) {
                /varset didinvis 1
            }
            /if (${Ini[toolismacro,Movement,group${grpnumber}ready].Equal[empty]}) {
                /delay 2
                /echo waiting for invis
                /goto :waitforinvis
            }
        }
    }
    /if (${Me.Class.Name.Equal[Bard]} && !${didinvis}) {
        /squelch /twist off
        /varset didinvis 1
        /varset dotwist 1
        /if (!${Me.Gem[${travelsong}]} && !${Cursor.ID}) {
                /guildsay sec memming travel song
                /memspell ${travelsonggem} ${travelsong}
                /delay 2s
        }
        /squelch /twist ${travelsonggem}
        /delay 2s
        /if (!${Me.Casting.ID}) {
            /squelch /twist ${speedsonggem}
            /delay 2s
            /if (${Me.Casting.ID}) /delay 1s
            /if (!${Me.Gem[${invissong}]} && !${Cursor.ID}) {
                /guildsay sec memming invis song
                /memspell ${travelsonggem} ${invissong}
                /delay 2s
            }
            /squelch /twist ${travelsonggem}
            /delay 3s 
        }
        /if (${Me.Casting.ID}) /delay 2s
        /call findgroup
        /varset grpnumber ${Macro.Return}
        /ini "toolismacro" "Movement" "group${grpnumber}ready" "ready"
        /delay 6
        /ini "toolismacro" "Movement" "group${grpnumber}ready" "empty"
    }
    /echo ${j} j (before for loop)
    /for j 1 to 30
    /echo ${j} j
    /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}]}]} && ${savedvariable} != 1) {
        /varset savedvariable ${j}
        /varset nextlocationy ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}].Arg[1,,]}
        /varset nextlocationx ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}].Arg[2,,]}
        /varset nextlocationyhigh ${Math.Calc[${nextlocationy} + 75]}
        /varset nextlocationylow ${Math.Calc[${nextlocationy} - 75]}
        /varset nextlocationxhigh ${Math.Calc[${nextlocationx} + 75]}
        /varset nextlocationxlow ${Math.Calc[${nextlocationx} - 75]}
        /if (${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
            /echo found correct loc
            /varset savedvariable 1
            /goto :end
        }
        /varset nextlocationyhigh ${Math.Calc[${nextlocationy} + 175]}
        /varset nextlocationylow ${Math.Calc[${nextlocationy} - 175]}
        /varset nextlocationxhigh ${Math.Calc[${nextlocationx} + 175]}
        /varset nextlocationxlow ${Math.Calc[${nextlocationx} - 175]}
        /if (${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
            /echo found nearest loc
            /varset savedvariable 1
            /goto :nearestlocloop
        }
        /echo this didnt work
        /varset nextlocationy NULL
        /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${savedvariable}].Arg[1,,]}]}) {
            /varset savedvariable ${Math.Calc[${j} + 1]}
            /varset nextlocationy NULL          
            /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${savedvariable}].Arg[1,,]}]}) {
                /echo next j
                /next j
            }
            /if (${Bool[${Ini[movement,${TargetZone},zoneshortnames].Arg[${Math.Calc[${i} + 1]},,]}]}) {
                /varset j 0
                /next i
            }
            /if (${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]}) {
                /varset j 0
                /echo next junctions instead of j
                /varset TargetZone ${savedtargetzone}
                /next junctions
            }
        }
        /echo this fired
        /varset savedvariable ${Math.Calc[${j} + 1]}
        /delay 2
        /next i
    }
        /if (!${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]} && ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[junction]} || ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[finish]}) {
            /keypress w
            /varset didinvis 0
            /echo i have reached my destination
            /guildsay im at target destination
            /varset makecamploc ${Me.Y},${Me.X}
            /return
        } 
    :end
    /if (${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[junction]}) {
        /keypress forward
        /varset j 1
        /varset TargetZone ${savedtargetzone}
        /if (!${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]}) {
            /varset TargetZone ${startlocation.Arg[1,,]}
            /varset i ${startlocation.Arg[2,,]}
        } 
        /if (${Bool[${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]}]}) {
            /echo changing junctions +1 from hitting a junction
            /next junctions
        }
    }
    /if (${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[zonedoor]} && ${nextlocationy.NotEqual[NULL]}) {
        /keypress forward
        /varset j 1
        :doorloop
        /keypress u
        /delay 2
        /keypress u
        /delay 1s
        /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}zonedoor]}]}) {
            /face nolook loc ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}zonedoor]}
            /keypress u
        }
        /call viewing
        /if (${zoneshortname.Equal[${Zone.ShortName}]}) /goto :doorloop
        /varset nextlocationy NULL
    }
    /if (${zoneshortname.Equal[${Zone.ShortName}]}) {
        /varset tempheading ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,]})
        /if (${Math.Calc[(360 - ${tempheading}) + 45]} > 360 && ${Me.Heading.Degrees} <= ${Math.Calc[(360 - ${tempheading}) - 45]} || ${Math.Calc[(360 - ${tempheading}) + 45]} > 360 && ${Me.Heading.Degrees} <= ${Math.Calc[45 - (360 - ${tempheading})]}) {
            /goto :headingdone
        }
        /if (${Math.Calc[(360 - ${tempheading}) - 45]} < 0 && ${Me.Heading.Degrees} <= ${Math.Calc[(360 - ${tempheading}) + 45]} || ${Math.Calc[(360 - ${tempheading}) - 45]} < 0 && ${Me.Heading.Degrees} <= ${Math.Calc[45 - (360 - ${tempheading})]}) { 
            /goto :headingdone
        }
        /if (${Math.Calc[${Me.Heading.Degrees}]} >= ${Math.Calc[360 - ${tempheading}]} && ${Math.Calc[${Me.Heading.Degrees}]} <= ${Math.Calc[(360 - ${tempheading}) + 45]} || ${Math.Calc[${Me.Heading.Degrees}]} >= ${Math.Calc[(360 - ${tempheading}) - 45]} && ${Math.Calc[${Me.Heading.Degrees}]} <= ${Math.Calc[360 - ${tempheading}]}) {
            /goto :headingdone
        }
            /if (${tempheading} <= 180) {
            /echo Tempheading < 180
                /if (${Me.Heading.Degrees} >= ${Math.Calc[(360 - ${tempheading}) - 180]} && ${Me.Heading.Degrees} <= ${Math.Calc[360 - ${tempheading}]}) {
                    /varset tempheading ${Math.Calc[${tempheading} + 45]}
                    /goto :heading
                } else {
                    /if (${tempheading} <= 45) {
                        /varset tempheading ${Math.Calc[315 + ${tempheading}]}
                        /goto :heading
                    }
                    /varset tempheading ${Math.Calc[${tempheading} - 45]}
                    /goto :heading
                }
            }
            /if (${tempheading} > 180) {
            /echo Tempheading > 180
                /if (${Me.Heading.Degrees} <= ${Math.Calc[(360 - ${tempheading}) + 180]} && ${Me.Heading.Degrees} >= ${Math.Calc[360 - ${tempheading}]}) {
                    /varset tempheading ${Math.Calc[${tempheading} - 45]}
                    /goto :heading
                } else {
                    /if (${tempheading} <= 315) {
                        /varset tempheading ${Math.Calc[${tempheading} + 45]}
                        /goto :heading
                    }
                    /varset tempheading ${Math.Calc[(360 - ${tempheading}) - 45]}
                    /goto :heading
                }
            }
            :heading
            /face heading ${tempheading}
        :headingdone
        /face fast heading ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,]}
    }
    /varset nextlocationy NULL
    /varset nextlocationx NULL
    /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}]}]}) {
        /varset nextlocationy ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}].Arg[1,,]}
        /varset nextlocationx ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}].Arg[2,,]}
    }
    :nearestlocloop
    /doevents Toggle
    /if (${Macro.Return.Equal[abort]}) {
        /varset makecamploc ${Me.Y},${Me.X}
        /return
    }
    /varset nextlocationyhigh ${Math.Calc[${nextlocationy} + 5]}
    /varset nextlocationylow ${Math.Calc[${nextlocationy} - 5]}
    /varset nextlocationxhigh ${Math.Calc[${nextlocationx} + 5]}
    /varset nextlocationxlow ${Math.Calc[${nextlocationx} - 5]}
    :movementloop
    /keypress forward hold
    /if (${nextlocationy.NotEqual[NULL]} && ${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
        /keypress forward
        /delay 2
        /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}command]}]}) /call ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}command]}
        /next j
    }
    /if (${nextlocationy.NotEqual[NULL]}) {
        /if (${Me.Y} <= ${nextlocationylow} || ${Me.X} <= ${nextlocationxlow} || ${Me.Y} >= ${nextlocationyhigh} || ${Me.X} >= ${nextlocationxhigh}) {
            /face nolook fast loc ${nextlocationy},${nextlocationx}
        }
    }
    /if (${zoneshortname.NotEqual[${Zone.ShortName}]}) {
        /if (!${InvSlot[17].Item.ID}) {
            /if (!${InvSlot[13].Item.ID} && !${Defined[amnaked]}) {
                /guildsay - i died during movement - 
                /declare amnaked int outer 100
                /doevents flush Movement
                /return
            }
        }
        /echo -- ${Zone.Name} --
        /varset nextlocationy NULL
        /keypress forward
        /varset zoneshortname ${Zone.ShortName}
        /varset didinvis 0
        /varset j 1
        /varset i 0
        /delay 2
        /next i
    }
    /delay 1
    /goto :movementloop
}
/delay 2
/if (${Bool[${Ini[movement,${TargetZone},zoneshortnames].Arg[${Math.Calc[${i} + 1]},,]}]}) /next i
/varset i 0
/next junctions
/varset junctions 1
/varset savedvariable 1
/varset TargetZone ${startlocation.Arg[1,,]}
/varset i ${startlocation.Arg[2,,]}
/echo setting targetzone and zone im in
/next junctions
/echo returning
/return

Re: eqemu level 65 or so pal, druid, bers, wiz

Posted: Tue Aug 18, 2015 1:45 am
by toolisaccount
rez.mac
this macro is for autoswitching to rez.mac when death is detected

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 Toggle "#1#guild, '#2#toggle#3#'"
#Event Movement "#1#guild, '#2#goto#3#'"

#include spell_routines.inc

Sub Main

/declare randomvariable string outer "thisisaglitch"
/declare mainassist     string outer ${Param0}
/declare makecamploc    string outer ${Me.Y},${Me.X}
/declare amrezzed       int    outer 0
/declare amnaked        int    outer 4
/declare ammoving       int    outer 0

/if (${Me.Class.Name.Equal[Bard]}) /squelch /twist off
/if (${Me.Class.Name.Equal[Bard]}) /declare dotwist        int    outer 0
/if (${Me.Class.Name.Equal[Bard]}) /declare didinvis       int    outer 0

/if (!${Defined[Param0]}) {
    /echo no paramater of main assist set, defaulting to myself
    /varset mainassist  string outer ${Me.Name}
}
/if (${Defined[Param1]}) {
    /if (${Param1} == 100) /varset amnaked 100
    /if (${Param1} != 100 && ${Param1.NotEqual[NULL]}) {
        /echo second paramater given! it is ${Param1}
        /declare savedparamater int outer ${Param1}
    }
}
/if (${Defined[Param2]}) {
    /if (${Param2} == 100) /varset amnaked 100
    /if (${Param2} != 100 && ${Param1.NotEqual[NULL]}) {
        /echo third paramater given! it is ${Param2}
        /if (${Defined[savedparamater]}) /declare savedparamatertwo int outer ${Param2}
        /if (!${Defined[savedparamater]}) /declare savedparamater int outer ${Param2}
    }
}
/if (${Defined[Param3]}) {
    /if (${Param2} != 100 && ${Param1.NotEqual[NULL]}) {
        /echo fourth paramater given! it is ${Param3}
        /if (${Defined[savedparamatertwo]}) /declare savedparamaterthree int outer ${Param3}
        /if (!${Defined[savedparamatertwo]}) /declare savedparamatertwo int outer ${Param3}
    }
}

/echo **** -|_ Rez Macro Initiated _|- ****
:rezloop
/call waitrez
/call checkstuff
/if (${NearestSpawn[corpse radius 100 "${Me.Name}"].ID} && ${amrezzed}) /call lootcorpse
/delay 2
/doevents
/goto :rezloop

Sub waitrez

/if (${Window[ConfirmationDialogBox].Open} && !${Me.Casting.ID} && !${Cursor.ID}) {
    /if (${Window[ConfirmationDialogBox].FirstChild.Next.Next.Next.Next.Text.Find[destroy]}) {
        /nomodkey /notify ConfirmationDialogBox CD_No_Button leftmouseup
        /return
    }
    /if (${Window[ConfirmationDialogBox].FirstChild.Next.Next.Next.Next.Text.Find[upon you.]}) {
        /if (${Window[ConfirmationDialogBox].FirstChild.Next.Next.Next.Next.Text.Find[destroy]}) {
            /nomodkey /notify ConfirmationDialogBox CD_No_Button leftmouseup
            /return
        }
        /if (!${Cursor.ID}) /nomodkey /notify ConfirmationDialogBox CD_Yes_Button leftmouseup
        /delay 1s
        /if (!${Window[ConfirmationDialogBox].Open}) /varset amrezzed 1
    }
}
/return

Sub checkstuff

/if (${Me.State.Equal[BIND]} && !${InvSlot[13].Item.ID} && !${Bool[${diedagain}]} && !${NearestSpawn[corpse radius 100 "${Me.Name}"].ID} && ${amrezzed}) {
    /varset amrezzed 0
    /declare diedagain int outer 1
    /guildsay i died again
    /echo i have died -- returning
    /return
}
/if (${Cursor.Name.Equal[Rod of Mystical Transvergence]}) {
    /autoinv
    /call handledestroy "Rod of Mystical Transvergence"
}
/if (${Bool[${corpsedone}]} && ${InvSlot[13].Item.ID} && ${Bool[${abandoncorpse}]}) {
    /if (${Me.Level} < 64) /docommand /mac pl ${mainassist} ${savedparamater}
    /if (${Me.Class.Name.Equal[Beastlord]}) /docommand /mac beast ${mainassist} ${savedparamater} ${savedparamatertwo}
    /if (${Me.Class.Name.Equal[Shadowknight]}) /docommand /mac sk ${mainassist} ${savedparamater}
    /if (${Me.Class.Name.Equal[Magician]}) /docommand /mac mage ${mainassist} ${savedparamater} ${savedparamatertwo}
    /if (${Me.Class.Name.Equal[Necromancer]}) /docommand /mac necro ${mainassist} ${savedparamater} ${savedparamatertwo}
    /if (${Me.Class.Name.Equal[Wizard]}) /docommand /mac wiz ${mainassist} ${savedparamater}
    /if (${Me.Class.Name.Equal[Enchanter]}) /docommand /mac ench ${mainassist} ${savedparamater}
    /if (${Me.Class.Name.Equal[Bard]}) /docommand /mac bard ${mainassist} ${savedparamater}
    /if (${Me.Class.Name.Equal[Cleric]}) /docommand /mac cleric ${mainassist} ${savedparamater}
    /if (${Me.Class.Name.Equal[Shaman]}) /docommand /mac shaman ${mainassist} ${savedparamater} ${savedparamatertwo}
    /if (${Me.Class.Name.Equal[Monk]}) /docommand /mac monk ${mainassist} ${savedparamater}
    /if (${Me.Class.Name.Equal[Rogue]}) /docommand /mac rogue ${mainassist} ${savedparamater}
    /if (${Me.Class.Name.Equal[Paladin]}) /docommand /mac paladin ${mainassist} ${savedparamater}
    /if (${Me.Class.Name.Equal[Ranger]}) /docommand /mac ranger ${mainassist} ${savedparamater}
    /if (${Me.Class.Name.Equal[Berserker]}) /docommand /mac berserker ${mainassist} ${savedparamater}
    /if (${Me.Class.Name.Equal[Druid]}) /docommand /mac druid ${mainassist} ${savedparamater}
}   
/if (${amrezzed} && !${NearestSpawn[1,corpse radius 100 "${Me.Name}"].ID} || ${NearestSpawn[1,corpse radius 100 "${Me.Name}"].ID} && ${Defined[stuffoncorpse]}) {
    /if (!${NearestSpawn[2,corpse radius 100 "${Me.Name}"].ID}) {
        /if (!${Defined[corpsedone]}) /declare corpsedone int outer 1
        /if (!${Defined[abandoncorpse]}) /declare abandoncorpse int outer 1
    }
}   
/return


Sub lootcorpse

/declare i int local
/declare justaname string local
:lootcorpse
/target ${NearestSpawn[1,corpse radius 100 "${Me.Name}"].CleanName}
/delay 2
/if (${Target.Type.Equal[CORPSE]} && !${Cursor.ID}) {
    /delay 1s
    /loot
    /if (${Window[LootWnd].Open}) {
        /for i 1 to 30
        :lootitem
        /if (${InvSlot[loot31].Item.ID}) {
            /echo there is still stuff on my corpse !
            /guildsay !! There is still stuff on my corpse !!
            /declare stuffoncorpse int outer 1
            /declare abandoncorpse int outer 1
        }
        /if (${InvSlot[loot${i}].Item.ID}) {
            /varset justaname (${InvSlot[loot${i}].Item.Name})
            /varset justaname ${justaname.Right[-1].Left[-1]}
            /nomodkey /itemnotify ${InvSlot[loot${i}]} rightmouseup
            /delay 2
            /if (!${FindItem[=${justaname}].ID}) {
                /echo this fired in rez macro - ${justaname}
                /goto :lootitem
            }
            /next i
        }
        /nomodkey /notify LootWnd LW_DoneButton leftmouseup
        /delay 2
        /if (${NearestSpawn[1,corpse radius 100 "${Me.Name}"].ID} && !${stuffoncorpse}) {
            /goto :lootcorpse
        }
        /if (!${NearestSpawn[2,corpse radius 100 "${Me.Name}"].ID}) {
            /if (!${Defined[corpsedone]}) /declare corpsedone int outer 1
            /if (!${Defined[abandoncorpse]}) /declare abandoncorpse int outer 1
        }
    }
}
/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 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 didinvis 0
        /varset makecamploc ${Me.Y},${Me.X}
    }
    /return
}
/stick off
/varset ammoving 0
/varset didinvis 0
/varset makecamploc ${Me.Y},${Me.X}
/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
    }
    /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.Level} < 60) /docommand /mac pl ${action} ${savedparamater}
        /if (${Me.Class.Name.Equal[Beastlord]}) /docommand /mac beast ${action} ${savedparamater}
        /if (${Me.Class.Name.Find[Shadow]}) /docommand /mac sk ${action} ${savedparamater}
        /if (${Me.Class.Name.Equal[Magician]}) /docommand /mac mage ${action} ${savedparamater}
        /if (${Me.Class.Name.Equal[Necromancer]}) /docommand /mac necro ${action} ${savedparamater}
        /if (${Me.Class.Name.Equal[Wizard]}) /docommand /mac wiz ${action} ${savedparamater}
        /if (${Me.Class.Name.Equal[Enchanter]}) /docommand /mac ench ${action} ${savedparamater}
        /if (${Me.Class.Name.Equal[Bard]}) /docommand /mac bard ${action} ${savedparamater}
        /if (${Me.Class.Name.Equal[Cleric]}) /docommand /mac cleric ${action} ${savedparamater}
        /if (${Me.Class.Name.Equal[Shaman]}) /docommand /mac shaman ${action} ${savedparamater}
        /if (${Me.Class.Name.Equal[Monk]}) /docommand /mac monk ${action} ${savedparamater}
        /if (${Me.Class.Name.Equal[Rogue]}) /docommand /mac rogue ${action} ${savedparamater}
        /if (${Me.Class.Name.Equal[Paladin]}) /docommand /mac paladin ${action} ${savedparamater}
        /if (${Me.Class.Name.Equal[Ranger]}) /docommand /mac ranger ${action} ${savedparamater}
        /if (${Me.Class.Name.Equal[Berserker]}) /docommand /mac berserker ${action} ${savedparamater}
        /if (${Me.Class.Name.Equal[Druid]}) /docommand /mac druid ${action} ${savedparamater}
    }
    /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.Arg[1,].Equal[rez]}) {
    /varset action ${action.Right[-4]}
    /if (${Me.Gem["Reviviscence"]}) {
        /if (!${Me.SpellReady["Reviviscence"]}) {
            /guildsay rez not up yet, returning
            /return
        }
        /target ${action}'s corpse
        /delay 2
        /call cast "Reviviscence" 1s
        /if (${Macro.Return.Equal["CAST_SUCCESS"]}) /guildsay ${Target} rezzed!
    }
    /return
}
/if (${action.Find[consent]}) {
    /varset action ${action.Right[-8]}
    /consent ${action}
    /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[/ex]}) {
    /if (${Me.Trader}) /return
    /docommand /exit
}
/if (${action.Find[pagedown]}) {
    /keypress Page_Down hold 
    /delay 1s
    /keypress Page_Down
    /return
}
/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
    /varset amrezzed 1
    /return
}
/return

Sub page(direction, duration)

/if (${direction.Find[down]}) {
    /keypress Page_Down hold 
    /delay ${duration}
    /keypress Page_Down
}
/if (${direction.Find[up]}) {
    /keypress Page_Up hold 
    /delay ${duration}
    /keypress Page_Up
}
/return

Sub returntocamp

/if (${Bool[${makecamploc}]}) {
    /call gotoloc "${makecamploc}"
    /if (${Macro.Return} == 1) {
        /if (${Me.Heading.Degrees} > 179) /face fast heading ${Math.Calc[${Me.Heading.Degrees} - 180]}
        /if (${Me.Heading.Degrees} < 180) /face fast heading ${Math.Calc[${Me.Heading.Degrees} + 180]}
    }
}
/return

Sub gotoloc(loc, command)

/declare locfrom string local
/declare zoneshortname string local ${Zone.ShortName}
/if (!${Bool[${loc}]}) /varset locfrom leashloc
/if (${Bool[${loc}]}) /varset locfrom loc
/declare nextlocationy string local ${${locfrom}.Arg[1,,]}
/declare nextlocationx string local ${${locfrom}.Arg[2,,]}
/declare nextlocationyhigh string local ${Math.Calc[${${locfrom}.Arg[1,,]} + 5]}
/declare nextlocationylow string local ${Math.Calc[${${locfrom}.Arg[1,,]} - 5]}
/declare nextlocationxhigh string local ${Math.Calc[${${locfrom}.Arg[2,,]} + 5]}
/declare nextlocationxlow string local ${Math.Calc[${${locfrom}.Arg[2,,]} - 5]}
/if (${nextlocationy.NotEqual[NULL]} && ${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
    /if (${command.NotEqual[empty]}) /call ${command}
    /return
}
:travel
/keypress forward hold
/if (${nextlocationy.NotEqual[NULL]} && ${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
    /keypress forward
    /if (!${Me.Class.PureCaster}) /varset didstick 0
    /if (${command.NotEqual[empty]}) /call ${command}
    /return 1
}
/if (${nextlocationy.NotEqual[NULL]}) {
    /if (${Me.Y} <= ${nextlocationylow} || ${Me.X} <= ${nextlocationxlow} || ${Me.Y} >= ${nextlocationyhigh} || ${Me.X} >= ${nextlocationxhigh}) {
        /face nolook fast loc ${nextlocationy},${nextlocationx}
    }
}
/if (${zoneshortname.NotEqual[${Zone.ShortName}]}) {
    /if (!${InvSlot[17].Item.ID}) {
        /if (!${InvSlot[13].Item.ID} && !${Defined[amnaked]}) {
            /guildsay - i died during movement - 
            /declare amnaked int outer 100
            /keypress forward
            /varset makecamploc ${Me.Y},${Me.X}
            /return
        }
    }
}
/if (${zoneshortname.NotEqual[${Zone.ShortName}]}) {
    /if (${InvSlot[17].Item.ID} || ${amnaked} == 100) {
        /if (${InvSlot[13].Item.ID} && !${Defined[amnaked]} || !${InvSlot[13].Item.ID} && ${amnaked} == 100) {
            /echo ~~ ${Zone.Name} ~~
            /keypress forward
            /deletevar zoneoutloc
            /varset makecamploc ${Me.Y},${Me.X}
            /return
        }
    }
/return
}
/delay 1
/goto :travel
/return

Sub zonedoor

/keypress forward
:doorloop
/keypress u
/delay 2
/keypress u
/delay 1s
/keypress u
/delay 2
/call viewing
/if (${zoneshortname.Equal[${Zone.ShortName}]}) /goto :doorloop
/return

Sub door

/keypress u
/if (!${Me.Moving}) {
    /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc[${j}]door]}]}) {
        /doortarget ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc[${j}]door]}]}
        /face door
        /keypress u
    }
}
/return

Sub viewing

/declare variable string local page_down
:viewing
/if (${zoneshortname.Equal[${Zone.ShortName}]}) {
    /keypress ${variable} hold
    /delay 2
    /keypress ${variable}
    /keypress u
    /if (${zoneshortname.Equal[${Zone.ShortName}]}) {
        /keypress ${variable} hold
        /delay 4
        /keypress ${variable}
        /keypress u
        /if (${zoneshortname.Equal[${Zone.ShortName}]}) {
            /keypress ${variable} hold
            /delay 4
            /keypress ${variable}
            /keypress u
            /if (${variable.Equal[page_down]}) {
                /varset variable page_up
                /goto :viewing
            }
            /if (${variable.Equal[page_up]}) {
                /varset variable page_down
                /goto :viewing
            }
        }
    }
}
/return

Sub findgroup

/declare totalgroups int local
/declare i int local
/declare j int local
/varset totalgroups ${Ini[toolismacro,Values,totalgroups]}
/for i 1 to ${totalgroups}
/for j 1 to 6
/if (${Ini[toolismacro,Group${i},member${j}].Equal[${Me.Name}]}) {
    /return ${i}
}
/next j
/next i
/echo GROUP NOT FOUND ---- returning +1
/return ${Math.Calc[${totalgroups} + 1]}

Sub groupcheck

/declare i int local
/declare grpcheck int local 0
:checkgroup
/for i 0 to ${Group}
/if (${Group.Member[${i}].Distance} < 120 && ${Group.Member[${i}].ID}) /varset grpcheck ${Math.Calc[${grpcheck} + 1]}
/next i
/if (${grpcheck} == ${Group.GroupSize}) {
    /delay 1s
    /return 1
} else {
    /varset grpcheck 0
    /delay 2
    /goto :checkgroup
}
/return

Sub Event_Movement(Line, SenderPerson, targetperson, TargetZone)

/if (${Bool[${targetperson}]}) {
    /declare name int local
    /declare force int local
    /for force 1 to 10
    /if (${targetperson.Arg[${force},].Equal[force]}) {
        /declare forcemove bool local TRUE
    }
    /if (${targetperson.Arg[1,].Equal[force]} && !${Bool[${targetperson.Arg[2,]}]}) /goto :beginning
    /next force
    /if (${targetperson.Arg[1,].Equal[group]}) {
        /if (${targetperson.Arg[1,].Equal[group]}) {
            /declare groupnumber int local
            /call findgroup
            /varset targetperson ${targetperson.Right[-6]}
            /if (${targetperson.Find[force]}) /varset targetperson ${targetperson.Left[-6]}
            /for groupnumber 1 to ${Ini[toolismacro,Values,totalgroups]}
            /if (${targetperson.Arg[${groupnumber},,]} == ${Macro.Return}) {
                /goto :beginning
            } else {
                /next groupnumber 
                /return
            }
        }
    }
    /for name 1 to 10
    /if (${targetperson.Arg[${name},].Equal[${Me.Name}]}) /goto :beginning
    /next name
    /return
}
:beginning
/if (!${Bool[${Ini[movement,${TargetZone},zoneshortnames].Arg[1,,]}]}) {
    /echo Incorrect Destination
    /return
}
/declare zoneshortname     string local ${Zone.ShortName}
/declare savedtargetzone   string local ${TargetZone}
/declare startlocation     string local 0
/declare tempheading       float  local 0
/declare nextlocationx     string local NULL
/declare nextlocationy     string local NULL
/declare nextlocationxhigh string local
/declare nextlocationxlow  string local
/declare nextlocationyhigh string local
/declare nextlocationylow  string local
/declare i int local
/declare j int local
/declare junctions int local
/declare savedvariable int local 0
/if (${Me.Class.Name.NotEqual[Bard]}) /declare didinvis int local 0
/declare grpnumber int local 0

/echo - Starting -
/for junctions 1 to 12
/echo ${junctions} junctions
/for i 1 to 10
/echo ${i} i variable at i loop
:start
/if (${Bool[${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]}]}) {
    /echo ${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]}
    /varset TargetZone ${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]}
    /echo changed targetzone to ${TargetZone}
    /echo ${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]} targetzones junctions
    /echo ${i} i variable in bool junctions
    /varset i 1
}
/if (!${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]} && ${TargetZone.NotEqual[${savedtargetzone}]}) {
    /varset TargetZone ${savedtargetzone}
    /echo changed targetzone to savedtargetzone
    /echo ${junctions} junctions
    /echo ${i} i variable in not bool junctions
    /echo ${j} j 
    /varset i 1  
}
/if (${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]} && ${TargetZone.NotEqual[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]}) {
    /varset TargetZone ${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}
    /echo changed targetzone to savedtargetzone junction arg junctions
    /echo ${junctions}
    /echo ${i} i variable in bool junctions arg junctions
    /echo ${j} j
    /varset i 1
}
/if (${savedvariable} != 1) {
    /if (${Bool[${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,].Equal[${Zone.ShortName}]}]} && ${startlocation.Equal[0]}) {
        /echo found starting zone
        /varset startlocation ${TargetZone},${i},
        /echo ${startlocation}
        /echo ${i} i variable
        /echo ${j} j variable
    }
    /if (${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,].NotEqual[${Zone.ShortName}]} && ${startlocation.NotEqual[0]}) {
        /echo found end of zones
        /varset junctions 1
        /varset savedvariable 1
        /varset TargetZone ${startlocation.Arg[1,,]}
        /varset i ${startlocation.Arg[2,,]}
    }
}
/if (${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[finish]} && ${zoneshortname.Equal[${Zone.ShortName}]}) {
    /keypress w
    /varset didinvis 0
    /echo i have reached my destination
    /guildsay im at target destination
    /return
}
/if (${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,].Equal[${Zone.ShortName}]}) {
    /if (!${forcemove}) {
        /if (${Me.Class.Name.Equal[Bard]} && !${didinvis}) {
            /call groupcheck
        }
        /if (${Me.Class.Name.NotEqual[Bard]} && !${didinvis}) {
            /call findgroup
            /varset grpnumber ${Macro.Return}
            :waitforinvis
            /doevents Toggle
            /if (${Macro.Return.Equal[abort]}) /return
            /if (${Ini[toolismacro,Movement,group${grpnumber}ready].Equal[ready]}) {
                /varset didinvis 1
            }
            /if (${Ini[toolismacro,Movement,group${grpnumber}ready].Equal[empty]}) {
                /delay 2
                /echo waiting for invis
                /goto :waitforinvis
            }
        }
    }
    /if (${Me.Class.Name.Equal[Bard]} && !${didinvis}) {
        /squelch /twist off
        /varset didinvis 1
        /varset dotwist 1
        /if (!${Me.Gem[${travelsong}]} && !${Cursor.ID}) {
                /guildsay sec memming travel song
                /memspell ${travelsonggem} ${travelsong}
                /delay 2s
        }
        /squelch /twist ${travelsonggem}
        /delay 2s
        /if (!${Me.Casting.ID}) {
            /squelch /twist ${speedsonggem}
            /delay 2s
            /if (${Me.Casting.ID}) /delay 1s
            /if (!${Me.Gem[${invissong}]} && !${Cursor.ID}) {
                /guildsay sec memming invis song
                /memspell ${travelsonggem} ${invissong}
                /delay 2s
            }
            /squelch /twist ${travelsonggem}
            /delay 3s 
        }
        /if (${Me.Casting.ID}) /delay 2s
        /call findgroup
        /varset grpnumber ${Macro.Return}
        /ini "toolismacro" "Movement" "group${grpnumber}ready" "ready"
        /delay 6
        /ini "toolismacro" "Movement" "group${grpnumber}ready" "empty"
    }
    /echo ${j} j (before for loop)
    /for j 1 to 30
    /echo ${j} j
    /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}]}]} && ${savedvariable} != 1) {
        /varset savedvariable ${j}
        /varset nextlocationy ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}].Arg[1,,]}
        /varset nextlocationx ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}].Arg[2,,]}
        /varset nextlocationyhigh ${Math.Calc[${nextlocationy} + 75]}
        /varset nextlocationylow ${Math.Calc[${nextlocationy} - 75]}
        /varset nextlocationxhigh ${Math.Calc[${nextlocationx} + 75]}
        /varset nextlocationxlow ${Math.Calc[${nextlocationx} - 75]}
        /if (${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
            /echo found correct loc
            /varset savedvariable 1
            /goto :end
        }
        /varset nextlocationyhigh ${Math.Calc[${nextlocationy} + 175]}
        /varset nextlocationylow ${Math.Calc[${nextlocationy} - 175]}
        /varset nextlocationxhigh ${Math.Calc[${nextlocationx} + 175]}
        /varset nextlocationxlow ${Math.Calc[${nextlocationx} - 175]}
        /if (${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
            /echo found nearest loc
            /varset savedvariable 1
            /goto :nearestlocloop
        }
        /echo this didnt work
        /varset nextlocationy NULL
        /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${savedvariable}].Arg[1,,]}]}) {
            /varset savedvariable ${Math.Calc[${j} + 1]}
            /varset nextlocationy NULL          
            /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${savedvariable}].Arg[1,,]}]}) {
                /echo next j
                /next j
            }
            /if (${Bool[${Ini[movement,${TargetZone},zoneshortnames].Arg[${Math.Calc[${i} + 1]},,]}]}) {
                /varset j 0
                /next i
            }
            /if (${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]}) {
                /varset j 0
                /echo next junctions instead of j
                /varset TargetZone ${savedtargetzone}
                /next junctions
            }
        }
        /echo this fired
        /varset savedvariable ${Math.Calc[${j} + 1]}
        /delay 2
        /next i
    }
        /if (!${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]} && ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[junction]} || ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[finish]}) {
            /keypress w
            /varset didinvis 0
            /echo i have reached my destination
            /guildsay im at target destination
            /return
        } 
    :end
    /if (${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[junction]}) {
        /keypress forward
        /varset j 1
        /varset TargetZone ${savedtargetzone}
        /if (!${Bool[${Ini[movement,${savedtargetzone},junctions].Arg[${junctions},,]}]}) {
            /varset TargetZone ${startlocation.Arg[1,,]}
            /varset i ${startlocation.Arg[2,,]}
        } 
        /if (${Bool[${Ini[movement,${TargetZone},junctions].Arg[${junctions},,]}]}) {
            /echo changing junctions +1 from hitting a junction
            /next junctions
        }
    }
    /if (${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,].Equal[zonedoor]} && ${nextlocationy.NotEqual[NULL]}) {
        /keypress forward
        /varset j 1
        :doorloop
        /keypress u
        /delay 2
        /keypress u
        /delay 1s
        /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}zonedoor]}]}) {
            /face nolook loc ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}zonedoor]}
            /keypress u
        }
        /if (${zoneshortname.Equal[${Zone.ShortName}]}) /goto :doorloop
        /varset nextlocationy NULL
    }
    /if (${zoneshortname.Equal[${Zone.ShortName}]}) {
        /varset tempheading ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,]})
        /if (${Math.Calc[(360 - ${tempheading}) + 45]} > 360 && ${Me.Heading.Degrees} <= ${Math.Calc[(360 - ${tempheading}) - 45]} || ${Math.Calc[(360 - ${tempheading}) + 45]} > 360 && ${Me.Heading.Degrees} <= ${Math.Calc[45 - (360 - ${tempheading})]}) {
            /goto :headingdone
        }
        /if (${Math.Calc[(360 - ${tempheading}) - 45]} < 0 && ${Me.Heading.Degrees} <= ${Math.Calc[(360 - ${tempheading}) + 45]} || ${Math.Calc[(360 - ${tempheading}) - 45]} < 0 && ${Me.Heading.Degrees} <= ${Math.Calc[45 - (360 - ${tempheading})]}) { 
            /goto :headingdone
        }
        /if (${Math.Calc[${Me.Heading.Degrees}]} >= ${Math.Calc[360 - ${tempheading}]} && ${Math.Calc[${Me.Heading.Degrees}]} <= ${Math.Calc[(360 - ${tempheading}) + 45]} || ${Math.Calc[${Me.Heading.Degrees}]} >= ${Math.Calc[(360 - ${tempheading}) - 45]} && ${Math.Calc[${Me.Heading.Degrees}]} <= ${Math.Calc[360 - ${tempheading}]}) {
            /goto :headingdone
        }
            /if (${tempheading} <= 180) {
            /echo Tempheading < 180
                /if (${Me.Heading.Degrees} >= ${Math.Calc[(360 - ${tempheading}) - 180]} && ${Me.Heading.Degrees} <= ${Math.Calc[360 - ${tempheading}]}) {
                    /varset tempheading ${Math.Calc[${tempheading} + 45]}
                    /goto :heading
                } else {
                    /if (${tempheading} <= 45) {
                        /varset tempheading ${Math.Calc[315 + ${tempheading}]}
                        /goto :heading
                    }
                    /varset tempheading ${Math.Calc[${tempheading} - 45]}
                    /goto :heading
                }
            }
            /if (${tempheading} > 180) {
            /echo Tempheading > 180
                /if (${Me.Heading.Degrees} <= ${Math.Calc[(360 - ${tempheading}) + 180]} && ${Me.Heading.Degrees} >= ${Math.Calc[360 - ${tempheading}]}) {
                    /varset tempheading ${Math.Calc[${tempheading} - 45]}
                    /goto :heading
                } else {
                    /if (${tempheading} <= 315) {
                        /varset tempheading ${Math.Calc[${tempheading} + 45]}
                        /goto :heading
                    }
                    /varset tempheading ${Math.Calc[(360 - ${tempheading}) - 45]}
                    /goto :heading
                }
            }
            :heading
            /face heading ${tempheading}
        :headingdone
        /face fast heading ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}].Arg[${j},,]}
    }
    /varset nextlocationy NULL
    /varset nextlocationx NULL
    /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}]}]}) {
        /varset nextlocationy ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}].Arg[1,,]}
        /varset nextlocationx ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}].Arg[2,,]}
    }
    :nearestlocloop
    /doevents Toggle
    /if (${Macro.Return.Equal[abort]}) /return
    /varset nextlocationyhigh ${Math.Calc[${nextlocationy} + 5]}
    /varset nextlocationylow ${Math.Calc[${nextlocationy} - 5]}
    /varset nextlocationxhigh ${Math.Calc[${nextlocationx} + 5]}
    /varset nextlocationxlow ${Math.Calc[${nextlocationx} - 5]}
    :movementloop
    /keypress forward hold
    /if (${nextlocationy.NotEqual[NULL]} && ${Me.Y} <= ${nextlocationyhigh} && ${Me.Y} >= ${nextlocationylow} && ${Me.X} <= ${nextlocationxhigh} && ${Me.X} >= ${nextlocationxlow}) {
        /keypress forward
        /delay 2
        /if (${Bool[${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}command]}]}) /call ${Ini[movement,${TargetZone},${Ini[movement,${TargetZone},zoneshortnames].Arg[${i},,]}loc${j}command]}
        /next j
    }
    /if (${nextlocationy.NotEqual[NULL]}) {
        /if (${Me.Y} <= ${nextlocationylow} || ${Me.X} <= ${nextlocationxlow} || ${Me.Y} >= ${nextlocationyhigh} || ${Me.X} >= ${nextlocationxhigh}) {
            /face nolook fast loc ${nextlocationy},${nextlocationx}
        }
    }
    /if (${zoneshortname.NotEqual[${Zone.ShortName}]}) {
        /if (!${InvSlot[17].Item.ID}) {
            /if (!${InvSlot[13].Item.ID} && !${Defined[amnaked]}) {
                /guildsay - i died during movement - 
                /declare amnaked int outer 100
                /return
            }
        }
        /echo -- ${Zone.Name} --
        /varset nextlocationy NULL
        /keypress forward
        /varset zoneshortname ${Zone.ShortName}
        /varset didinvis 0
        /varset j 1
        /varset i 0
        /delay 2
        /next i
    }
    /delay 1
    /goto :movementloop
}
/delay 2
/if (${Bool[${Ini[movement,${TargetZone},zoneshortnames].Arg[${Math.Calc[${i} + 1]},,]}]}) /next i
/varset i 0
/next junctions
/varset junctions 1
/varset savedvariable 1
/varset TargetZone ${startlocation.Arg[1,,]}
/varset i ${startlocation.Arg[2,,]}
/echo setting targetzone and zone im in
/next junctions
/echo returning
/return

Re: eqemu level 65 or so pal, druid, bers, wiz

Posted: Tue Aug 18, 2015 1:46 am
by toolisaccount
reserved