Code:
# Fire mage for BG by guizmows
DRINKPERCENT=0.15
FOODPERCENT=0.15
manaRestPercent=0.01
healthRestPercent=0.01
manaRestToPercent=0.97
healthRestToPercent=0.99
Reach= 33
engage_dist=30
MaxReach=33
defact= act:firearmor slot:6 key:9 cooldown:1.5
defact= act:pyroblast slot:1 key:1 cooldown:6.1
defact= act:fireball slot:1 key:2 cooldown:3.1
defact= act:scorch slot:1 key:3 cooldown:1.6
defact= act:fireblast slot:1 key:4 cooldown:1.4 prevacttime:8 js:CheckTargetHealth
defact= act:fireblast2 slot:1 key:4 cooldown:1.4 prevacttime:8
defact= act:firewave slot:1 key:5 cooldown:1.4 prevacttime:30 js:isPlayerCLose()
defact= act:dragon slot:1 key:6 cooldown:1.4 prevacttime:20
defact= act:combustion slot:1 key:7 cooldown:1.4 prevacttime:185
defact= act:nova slot:1 key:8 cooldown:1.4 prevacttime:25 js:isPlayerCLose()
defact= act:blink slot:2 key:9 cooldown:1.4 prevacttime:14
defact= act:firearmor slot:6 key:9 cooldown:1.5
defact= act:dampen slot:2 key:7 cooldown:1.4
defact= act:arcanint slot:2 key:6 cooldown:1.4
defact= act:quickattack slot:2 key:3 cooldown:1
defact= act:makefood slot:6 key:3 js:checkFood() cooldown:1.5
defact= act:makewater slot:6 key:1 js:checkWater() cooldown:1.5
defact= act:conjurEmerald slot:6 key:2 js:checkEmerald() cooldown:1.5
defact= act:food slot:6 key:6 cooldown:1
defact= act:water slot:6 key:4 cooldown:1
defact= act:emerald slot:6 key:5 cooldown:1.3 js:checkMana()
defact= act:mount slot:2 key:8
#defact= act:mount2 slot:2 key:8 js:BGCheckAndMount()
defact= act:reachCombat js:BGReachCombatDistance()
defact= act:mount2 js:BGCheckAndMount()
defact= act:checkeatdrink js:checkEatDrink()
defact= act:checkneedbuff js:checkNeedBuff()
##################################################################
precombat= act:reachCombat
precombat= act:fireblast2
#precombat= act:pyroblast
combatseq= act:reachCombat
combatseq= act:combustion
combatseq= act:firewave
combatseq= act:nova
combatseq= act:fireball
combatseq= act:nova
combatseq= act:scorch
combatseq= act:firewave
combatseq= act:nova
combatseq= act:scorch
combatseq= act:scorch
combatseq= act:nova
combatseq= act:emerald
combatseq= act:fireball
combatseq= act:nova
combatseq= act:firewave
combatseq= act:emerald
combatseq= act:fireblast2
combatseq= act:nova
combatseq= act:firewave
combatseq= act:nova
combatseq= act:emerald
lootseq= act:makewater
lootseq= act:makefood
lootseq= act:conjurEmerald
lootseq= act:checkeatdrink
lootseq= act:mount2
#globalact= act:firearmor timeout:25m
#globalact= act:arcanint timeout:25m
#globalact= act:dampen timeout:5m
#globalact= act:combustion timeout:4m
#globalact= act:checkeatdrink timeout:5m
#globalact= act:conjurEmerald timeout:10m
globalact= act:checkneedbuff timeout:20m
#####################################################################
<script>
function checkNeedBuff()
{
me.wowDoFightAction("firearmor");
me.wowDoFightAction("arcanint");
me.wowDoFightAction("dampen");
me.wowDoFightAction("combustion");
me.wowDoFightAction("conjurEmerald");
me.wowDoFightAction("checkeatdrink");
me.wowDoFightAction("mount2");
}
function checkFood()
{
var names=["Conjured Mana Strudel",
"Conjured Croissant",
"Conjured Manna Biscuit",
"Conjured Cinnamon Roll",
"Conjured Croissant",
"Conjured Sweet Roll",
"Conjured Sourdough",
"Conjured Pumpernickel",
"Conjured Rye",
"Conjured Bread",
"Conjured Muffin"];
var foodTotal = 0;
for (var i in names){
foodTotal += me.wowGetAllContainerItemCount(names[i]);
}
var res=foodTotal < 2;
if (res == true) {
me.wowLog("my food " + foodTotal +" need to make more");
return true;
}
me.wowLog("there are enough food " + foodTotal);
return false;
}
function checkWater() {
me.wowLog("checking water");
var waterTotal = 0;
var names=["Conjured Mana Strudel",
"Conjured Glacier Water",
"Conjured Manna Biscuit",
"Conjured Mountain Spring Water",
"Conjured Crystal Water",
"Conjured Sparkling Water",
"Conjured Mineral Water",
"Conjured Spring Water",
"Conjured Purified Water",
"Conjured Fresh Water",
"Conjured Water"
];
for (var i in names) {
waterTotal += me.wowGetAllContainerItemCount(names[i]);
}
me.wowLog("checking water total is " + waterTotal);
var needWater = waterTotal<2;
if (needWater == true) {
me.wowLog("Need more water, we have "+waterTotal);
return true;
}
me.wowLog("Don't need more water, we have "+waterTotal);
return false;
}
function checkLife()
{
var lifePrecent = me.health/me.maxhealth;
if (lifePrecent < .60) return true;
return false;
}
function checkFireball()
{
var hasBuf = me.wowGetBuff(57761);
return hasBuf;
}
function checkFingers()
{
var hasBuf = me.wowGetBuff(44544);
return hasBuf;
}
function checkMana()
{
var manaPrecent = me.mana/me.maxmana;
if (manaPrecent < .40) return true;
return false;
}
function CheckTargetHealth()
{
var target = me.target;
if (target == null) return false;
var targethealth = target.health;
var targetmaxhealth = target.maxhealth;
if(targethealth !=0 && ((targethealth / targetmaxhealth) < 0.25) )
{
return true;
}
return false;
}
// Tells bot to eat/drink if health/mana fall below a threshold
function checkEatDrink()
{
me.wowDoFightAction("makefood");
me.wowDoFightAction("makewater");
var lifep = ((me.health/me.maxhealth)*100)|0;
var manap = ((me.mana/me.maxmana)*100)|0;
var lifeAct = 40; //activate food when < 60%
var manaAct = 30; //activate water when < 60%
var lifeTo = 90; //rest to 90%
var manaTo = 90; //rest to 90%
var action = ""; // used for while loop so we know when to stop
wowjs.wowLog("checkEatDrink start: LIFE="+lifep+" MANA="+manap);
doUnsafeRefresh();
if (me.inCombat || (lifep >= lifeAct && manap >= manaAct))
return;
if (lifep < lifeAct) {
action = action + "life";
me.wowDoFightAction("food");
}
if (manap < manaAct) {
action = action + "mana";
me.wowDoFightAction("water");
}
while (me.wowBotRun) {
doUnsafeRefresh();
lifep = ((me.health/me.maxhealth)*100)|0;
manap = ((me.mana/me.maxmana)*100)|0;
wowjs.wowLog("resting: LIFE="+lifep+" MANA="+manap);
if ( ((action == "life") && (lifep > lifeTo)) ||
((action == "mana") && (manap > manaTo)) ||
((action == "lifemana") && (manap > manaTo) && (lifep > lifeTo)) ) {
wowjs.wowLog("rest ok!");
return;
}
if (wowjs.wowGetAttackingMob() != null) {
wowjs.wowLog("rest interrupted: someone is attacking me.");
return;
}
if (me.lifep <= 1) {
wowjs.wowLog("rest interrupted: I am dead.");
return;
}
wowjs.wowSleep(1000);
}
}
function isPlayerCLose(){
var sdist = BGgetDistToNearstMob(me.x, me.y);
me.wowLog("isPlayerCLose : dist "+sdist+" return "+(sdist < 10) );
return (sdist < 10)
}
function isPlayerFar(){
var sdist = BGgetDistToNearstMob(me.x, me.y);
me.wowLog("isPlayerFar : dist "+sdist+" return "+(sdist > 40) );
return (sdist > 40)
}
/*
function BGReachCombatDistance() {
var target = me.target;
if (target == null) return;
//if (target.mobSpell == 0) return; //if target not casting, don't care. They migh fleeing
var myReach = me.myCombatReach;
var dx = me.x - target.x;
var dy = me.y - target.y;
var dz = me.z - target.z;
var targetDist = Math.sqrt( (dx*dx) + (dy*dy) + (dz*dz) );
me.wowLog("BGReachCombatDistance : target dist "+ targetDist+" MyReach "+myReach);
//me.wowApproach(x,y,dist, timeout in seconds)
if (myReach - 5 < targetDist) {
//distance is too far to caster, try to reach to myReach-5 in 6 seconds
me.wowLog("target too far, reaching");
me.wowApproach(target.x, target.y, myReach -5, 6);
}
}*/
function BGReachCombatDistance() {
var target = me.target;
var myReach = me.myCombatReach;
if (target != null) {
var dist = fDist3D(target.x, target.y, target.z);
if (myReach - 5 < dist) {
wowjs.wowLog("BGReachCombatDistance : mob too far dist="+dist+", try to run to "+target.name);
if (dist < 45) {
var myreach = me.myCombatReach;
wowjs.wowLog("BGReachCombatDistance : my reach is " + myreach);
myreach = myreach - 5;
if (myreach < 0) myreach = 5;
wowjs.wowRunTo(target.x, target.y, 6, myreach);
}
}
}
return;
}
//mount if nearst ennemy is 40 yards away.
function BGCheckAndMount() {
var minMob = BGgetDistToNearstMob(me.x, me.y);
wowjs.wowLog("BGCheckAndMount : nearst mob dist " + parseInt(minMob));
if (minMob > 40) {
wowjs.wowDoFightAction("mount");
}
}
function BGgetDistToNearstMob(x,y) {
var min = 99999;
for (var i = 0 ;i < me.toonCount; i++) {
var toon = me.wowGetToon(i);
if (toon.isPlayer && isOppositRace(toon) ) {
if (toon.isAttackAbleFaction && toon.health > 0) {
var xx = x - toon.x;
var yy = y - toon.y;
xx = xx * xx;
yy = yy * yy;
var dist = Math.sqrt(xx+yy);
if (dist < min) min = dist;
}
}
}
return min;
}
function checkEmerald()
{
var names=["Mana Emerald",
"Conjured Emerald"];
var EmeraldTotal = 0;
for (var i in names){
EmeraldTotal += me.wowGetAllContainerItemCount(names[i]);
}
var res=EmeraldTotal < 1;
if (res == true) {
me.wowLog("my Emerald " + EmeraldTotal +" need to make more");
return true;
}
me.wowLog("there are enough Emerald " + EmeraldTotal);
return false;
}
function checkCounter() {
wowjs.wowLog("check counter");
var target = me.target;
if (target == null) return false;
wowjs.wowLog("mob spell " + target.mobSpell);
if (target.mobSpell != 0) {
return true;
}
return false;
}
</script>