Code: Select all
|************************************|
|* nClericGroup.mac *|
|* by Ogre_Luvr *|
|* Usage: /mac clericgroup Soandso *|
|* A work in progress *|
|************************************|
#include nSpellCast.inc
Sub main
/zapvars
/declare mainHeal global
/varset mainHeal "Remedy"
/declare durationHeal global
/varset durationHeal "Celestial Healing"
/declare bigHeal global
/varset bigHeal "Complete Healing"
/declare tankID global
/if (${Spawn[@Param0].ID}) {
/varset tankID ${Spawn[@Param0].ID}
} else {
/varset tankID 0
}
:mainLoop
/call checkHP
/call checkBuffs
/goto :mainLoop
/return
Sub checkHP
/declare lowHP local
/varset lowHP ${Me.ID}
/declare i local
/for i 1 to ${Group}
/if (${Math.Calc[${Group[@i].PctHPs}<${Spawn[@lowHP].PctHPs}]} && ${Group[@i].ID} && ${Math.Calc[${Group[@i].Distance}<=200]}) {
/varset lowHP ${Group[@i].ID}
}
/if (${String["Necromancer Magician Beastlord Shaman"].Find[${Group[@i].Class}]} && ${Group[@i].Pet.ID} && ${Math.Calc[${Group[@i].Pet.PctHPs}<${Spawn[@lowHP].PctHPs}]} && ${Math.Calc[${Group[@i].Pet.Distance}<=200]}) {
/varset lowHP ${Group[@i].Pet.ID}
}
/next i
/if (${Math.Calc[${Spawn[@lowHP].PctHPs}<70]}) {
/call heal @lowHP
}
/return
Sub heal(spawnID)
/target id @spawnID
/if (${Math.Calc[@spawnID!=@tankID]}) {
/if (${Math.Calc[${Spawn[@spawnID].PctHPs}>0]} && ${Math.Calc[${Spawn[@spawnID].PctHPs}<45]} && ${Math.Calc[${Spawn[@spawnID].Distance}<=${Spell["@mainHeal"].Range}]} && ${Math.Calc[${Me.CurrentMana}>=${Spell["@mainHeal"].Mana}]}) {
/call cast "@mainHeal"
} else {
||| if the spawn in question is less than 70% health and in range of the duration heal spell
/if (${Math.Calc[${Spawn[@spawnID].PctHPs}<70]} && ${Math.Calc[${Spawn[@spawnID].Distance}<=${Spell["@durationHeal"].Range}]}) {
/if (!${Defined[healTimer@spawnID]}) {
/declare healTimer@spawnID timer
/varset healTimer@spawnID 0
}
/if (${Math.Calc[@healTimer@spawnID<1]} && ${Math.Calc[${Me.CurrentMana}>=${Spell["@durationHeal"].Mana}]}) {
/call cast "@durationHeal"
/varset healTimer@spawnID ${Math.Calc[${Spell["@durationHeal"].Duration}*.1]}m
}
}
}
} else {
/if (${Math.Calc[${Spawn[@spawnID].PctHPs}>0]} && ${Math.Calc[${Spawn[@spawnID].PctHPs}<=45]} && ${Math.Calc[${Spawn[@spawnID].Distance}<=${Spell["@bigHeal"].Range}]} && ${Math.Calc[${Me.CurrentMana}>=${Spell[@bigHeal].Mana}]}) {
/g inc @bigHeal to ${Spawn[@spawnID].CleanName}
/call cast "@bigHeal"
}
}
/return
Sub checkBuffs
/if (!${Math.Calc[${FindItemCount["Summoned: Black Bread"]}>10]}) {
/call noFailMem 7 "Abundant Food"
/call cast "Abundant Food"
/autoinv
/call noFailMem 8 "Abundant Drink"
/call cast "Abundant Drink"
/autoinv
}
/declare i local
/declare buff local
/varset buff "Symbol of Marzin"
/for i 1 to ${Group}
/if (!${Defined[symbolTimer${Group[@i]}]}) {
/declare symbolTimer${Group[@i]} timer
/varset symbolTimer${Group[@i]} 0
}
/if (${String["Warrior Rogue Bard Ranger Shadow knight Paladin berserker monk"].Find[${Group[@i].Class}]} && ${Math.Calc[@symbolTimer${Group[@i]}<1]} && ${FindItemCount["Peridot"]} && ${Math.Calc[${Me.CurrentMana}>=${Spell[@buff].Mana}]}) {
/target id ${Group[@i].ID}
/call cast "@buff"
/varset symbolTimer${Group[@i]} ${Math.Calc[${Spell["@buff"].Duration}*.1]}m
}
/if (${String["Necromancer Magician Beastlord Shaman"].Find[${Group[@i].Class}]} && ${FindItemCount["Peridot"]} && ${Math.Calc[${Me.CurrentMana}>=${Spell[@buff].Mana}]}) {
/if (!${Defined[symbolTimer${Group[@i].Pet.ID}]}) {
/echo creating symbolTimer${Group[@i].Pet.ID} timer
/declare symbolTimer${Group[@i].Pet.ID} timer
/varset symbolTimer${Group[@i].Pet.ID} 0
}
/if (${Math.Calc[@symbolTimer${Group[@i].Pet.ID}<1]}) {
/target id ${Group[@i].Pet.ID}
/call cast "@buff"
/varset symbolTimer${Group[@i].Pet.ID} ${Math.Calc[${Spell["@buff"].Duration}*.1]}m
}
}
/next i
/varset buff "Fortitude"
/if (!${Me.Buff[@buff].ID}) {
/target myself
/call cast "@buff"
}
/for i 1 to ${Group}
/if (!${Defined[hpAcTimer${Group[@i]}]}) {
/declare hpAcTimer${Group[@i]} timer
/varset hpAcTimer${Group[@i]} 0
}
/if (${Math.Calc[@hpAcTimer${Group[@i]}<1]} && ${Math.Calc[${Me.CurrentMana}>=${Spell[@buff].Mana}]}) {
/target id ${Group[@i].ID}
/call cast "@buff"
/varset hpAcTimer${Group[@i]} ${Math.Calc[${Spell["@buff"].Duration}*.1]}m
}
/if (${String["Necromancer Magician Beastlord Shaman"].Find[${Group[@i].Class}]}) {
/if (!${Defined[hpAcTimer${Group[@i].Pet.ID}]}) {
/declare hpAcTimer${Group[@i].Pet.ID} timer
/varset hpAcTimer${Group[@i].Pet.ID} 0
}
/if (${Math.Calc[@hpAcTimer${Group[@i].Pet.ID}<1]} && ${Math.Calc[${Me.CurrentMana}>=${Spell[@buff].Mana}]}) {
/target id ${Group[@i].Pet.ID}
/call cast "@buff"
/varset hpAcTimer${Group[@i].Pet.ID} ${Math.Calc[${Spell["@buff"].Duration}*.1]}m
}
}
/next i
/varset buff "Shield of Words"
/if (!${Me.Buff[@buff].ID}) {
/target myself
/call cast "@buff"
}
/for i 1 to ${Group}
/if (!${Defined[AcTimer${Group[@i]}]}) {
/declare AcTimer${Group[@i]} timer
/varset AcTimer${Group[@i]} 0
}
/if (${Math.Calc[@AcTimer${Group[@i]}<1]} && ${Math.Calc[${Me.CurrentMana}>=${Spell[@buff].Mana}]}) {
/target id ${Group[@i].ID}
/call cast "@buff"
/varset AcTimer${Group[@i]} ${Math.Calc[${Spell["@buff"].Duration}*.1]}m
}
/if (${String["Necromancer Magician Beastlord Shaman"].Find[${Group[@i].Class}]}) {
/if (!${Defined[AcTimer${Group[@i].Pet.ID}]}) {
/declare AcTimer${Group[@i].Pet.ID} timer
/varset AcTimer${Group[@i].Pet.ID} 0
}
/if (${Math.Calc[@AcTimer${Group[@i].Pet.ID}<1]} && ${Math.Calc[${Me.CurrentMana}>=${Spell[@buff].Mana}]}) {
/target id ${Group[@i].Pet.ID}
/call cast "@buff"
/varset AcTimer${Group[@i].Pet.ID} ${Math.Calc[${Spell["@buff"].Duration}*.1]}m
}
}
/next i
/varset buff "Blessing of Faith"
/if (!${Me.Buff[@buff].ID} && ${Math.Calc[${Me.CurrentMana}>=${Spell[@buff].Mana}]}) {
/target myself
/call cast "@buff"
}
||| "Ranger Shadow Knight Wizard Paladin Cleric Druid Enchanter Necromancer Magician Beastlord Shaman"
/for i 1 to ${Group}
/if (${String["Ranger Shadow Knight Wizard Paladin Cleric Druid Enchanter Necromancer Magician Beastlord Shaman"].Find[${Group[@i].Class}]}) {
/if (!${Defined[blessingTimer${Group[@i]}]}) {
/declare blessingTimer${Group[@i]} timer
/varset blessingTimer${Group[@i]} 0
}
/if (${Math.Calc[@blessingTimer${Group[@i]}<1]} && ${Math.Calc[${Me.CurrentMana}>=${Spell[@buff].Mana}]}) {
/target id ${Group[@i].ID}
/call cast "@buff"
/varset blessingTimer${Group[@i]} ${Math.Calc[${Spell["@buff"].Duration}*.1]}m
}
}
/next i
/return
