#define BGQUIT 1
#define BGPAUSE 2
#define BGINAV 3
#define BGWAITINGQ 4
#define BGDESERTER 5
#define BGWAIT 6
#define BGWAITSTART 7
#define BGRUN 8
#define BGDEAD 9
#define BGCOMBAT 10
#define BGMOUNT 11
#define BGNOPATH 12
#define GY_Tunnel 1
#define GY_IB 2
#define GY_SH 3
#define GY_SP 4
#define NAVIGATION_NONE 0
#define NAVIGATION_ZONE_CHANGED 1
#define NAVIGATION_PLOT 2
#define NAVIGATION_HOP 3
#define NAVIGATION_ARRIVED 4
#define NAVIGATION_DIRECT 0
#define NAVIGATION_MAP 1
#define NAVIGATION_GROW_LIMIT 50
#define NAVIGATION_GROW_Z_LIMIT 2
#include objects.iss
#include movement.iss
#include misc.iss
#include combat/warrior.iss
#include combat/mage.iss
#include combat/shaman.iss
#include combat/priest.iss
#include combat/warlock.iss
#include combat/paladin.iss
#include combat/druid.iss
#include combat/hunter.iss
#include combat/rogue.iss
#include abbot.iss
/*
* Events:
* REGION_ADDED [regionname]
*/
variable(global) oNavigation Mapper
function main()
{
declare AVBOTVERSION string script "1.1.6"
declare CurrentRegion lnavregionref script
declare ZoneRegion lnavregionref script
declare TmpRegion lnavregionref script
declare PathFinder dijkstrapathfinder script
declare CurrentPath lnavpath script
declare DestinationRegion lnavregionref script
declare NewPathFinder astarpathfinder script
declare NewCurrentPath lnavpath script
declare BadConnection lnavconnection script
declare CurrentLocation point3f script
declare ConfigFile filepath script "${Script.CurrentDirectory}/avbot_config.xml"
declare GOTSTUCK int script 0
declare BGPERSON string script "NONE"
declare BGPERSONX int script 0
declare BGPERSONY int script 0
declare BGPERSONZ int script 0
declare BGQUEZONE string script "Orgrimmar"
declare FIGHTX int script 0
declare FIGHTY int script 0
declare FIGHTZ int script 0
declare MYMOUNT string script "NONE"
declare MYMOUNTBUFF string script "NONE"
declare PULSETIME int script 0
declare i int script 1
declare lasthop int script 1
declare DORUN int 0 global
declare BGBOT int global
declare BGBOTSTATUS string global
declare DESERTER int global
declare JOINS int global
declare BONUS int global
declare KILLS int global
declare GY int global 0
declare HORDE_WINS int global 0
declare ALIANCE_WINS int global 0
BONUS:Set[0]
KILLS:Set[0]
DESERTER:Set[0]
JOINS:Set[0]
ABPERSONX:Set[-8391.0]
ABPERSONY:Set[268.3]
ABPERSONZ:Set[120.9]
Mapper:Plugin
Mapper:Initialize
AddTrigger AddHonor "[Event:@*@:CHAT_MSG_COMBAT_HONOR_GAIN](\"@*@ dies, honorable kill Rank:@*@ (Estimated Honor Points: @points@)\"@*@)"
AddTrigger AddHonor2 "[Event:@*@:CHAT_MSG_COMBAT_HONOR_GAIN](\"You have been awarded @points@ honor@*@)"
;\"
AddTrigger PulseUpdate "[Event:@*@:PLAYTIME_CHANGED] (@*@)"
AddTrigger UpdateWhisper "[Event:@eventid@:CHAT_MSG_WHISPER](\"@message@\",\"@speaker@\",\"@language@\",\"@something@\",\"@something@\",\"@something@\",@something@,@something@,\"@something@\",@something@)"
AddTrigger UpdateWhisper "[Event:@eventid@:CHAT_MSG_SAY](\"@message@\",\"@speaker@\",\"@language@\",\"@something@\",\"@something@\",\"@something@\",@something@,@something@,\"@something@\",@something@)"
Event[OnFrame]:AttachAtom[PulseUpdate]
call AddHud
call Load_Config
echo "BGPERSON: ${BGPERSON}"
echo "BGPERSONX: ${BGPERSONX}"
echo "BGPERSONY: ${BGPERSONY}"
echo "BGPERSONZ: ${BGPERSONZ}"
echo "BGQUEZONE: ${BGQUEZONE}/${WoWScript[GetRealZoneText()]}"
echo "FIGHTX: ${FIGHTX}"
echo "FIGHTY: ${FIGHTY}"
echo "FIGHTZ: ${FIGHTZ}"
echo "MYMOUNT: ${MYMOUNT}"
echo "MYMOUNTBUFF: ${MYMOUNTBUFF}"
echo "AVBot v${AVBOTVERSION} now online."
do
{
AVStatus:Set[${WoWScript[GetBattlefieldStatus(1)]}]
ABStatus:Set[${WoWScript[GetBattlefieldStatus(2)]}]
WSGStatus:Set[${WoWScript[GetBattlefieldStatus(3)]}]
ZoneRegion:SetRegion[${LNavRegion[${WoWScript[GetRealZoneText()]}].FQN}]
ISXWoW:ResetIdle
;--------------------------------------------------- Check if we are at the BG Chick--------------------------------------
if ${Math.Distance[${Me.X},${Me.Y},${BGPERSONX},${BGPERSONY}]}>10&&${WoWScript[GetRealZoneText()].Equal["${BGQUEZONE}"]}
{
call Update_State BGRUN
call UpdateHudStatus "Not at the BG Quer, moving there"
call MoveMeThere ${BGPERSONX} ${BGPERSONY} ${BGPERSONZ}
if ${Math.Distance[${Me.X},${Me.Y},${BGPERSONX},${BGPERSONY}]}<15
{
call movetocont ${BGPERSONX} ${BGPERSONY} 2
}
move -stop
}
if ${Me.Buff[Deserter](exists)}
{
call Update_State BGDESERTER
}
if !${Me.Buff[Deserter](exists)} && ${BGBOT}==BGDESERTER
{
call UpdateHudStatus "Dester Flaged: Waiting for it to expire"
DESERTER:Inc
call Update_State BGWAIT
}
call pulse_update
;-----------------------------------------------------If we are in AB, run script------------------------------------------------
if ${WoWScript[GetRealZoneText()].Equal["Arathi Basin"]}
{
call UpdateHudStatus "AB Poped joined it"
JOINS:Inc
call do_ab
move -stop
}
;-----------------------------------------------------------If in AV start script---------------------------------------
; If we are in AV already lets do our thing
if ${WoWScript[GetRealZoneText()].Equal["Alterac Valley"]}
{
call UpdateHudStatus "AV Poped joined it"
JOINS:Inc
call Do_AV
move -stop
call Update_State BGINAV
}
; If we are in Orgrimmar we should be queing
if ${WoWScript[GetRealZoneText()].Equal["${BGQUEZONE}"]}
{
;-------------------------------------------Join AB if window comes up-------------------------------------------------------
if ${WoWScript[GetBattlefieldStatus(2)].Equal["confirm"]}
{
call UpdateHudStatus "AB poped joining it now"
WoWScript StaticPopup_Hide("CONFIRM_BATTLEFIELD_ENTRY")
wait 2
WoWScript AcceptBattlefieldPort(2,1)
while ${WoWScript[GetRealZoneText()].NotEqual["Arathi Basin"]}
{
wait 1
waitframe
}
}
;------------------------------------------------------------Join AV if window comes up--------------------------------------------
if ${WoWScript[GetBattlefieldStatus(1)].Equal["confirm"]}
{
call UpdateHudStatus "AV poped joining it now"
WoWScript StaticPopup_Hide("CONFIRM_BATTLEFIELD_ENTRY")
wait 2
WoWScript AcceptBattlefieldPort(1,1)
while ${WoWScript[GetRealZoneText()].NotEqual["Alterac Valley"]}
{
wait 1
waitframe
}
}
;------------------------------------------------------------------ See if we are in the que for AV + queue up-------------------------------
if !${WoWScript[GetBattlefieldTimeWaited(1)]} && ${WoWScript[GetBattlefieldStatus(1)].NotEqual["confirm"]}&&!${Me.Buff[Deserter](exists)}
{
call UpdateHudStatus "Quing for AV now"
;We are not int he que lets que up
Unit[${BGPERSON}]:Use
wait 20
WoWScript SelectGossipOption(1)
wait 20
WoWScript JoinBattlefield(0)
wait 20
; WoWScript ToggleQuestLog()
wait 1
; WoWScript ToggleQuestLog()
call Update_State BGWAITINGQ
}
;----------------------------------------------Go to the AB lady and queue up----------------------------------------------------
if ${WoWScript[GetBattlefieldStatus(2)].NotEqual["confirm"]} && ${WoWScript[GetBattlefieldStatus(2)].NotEqual["queued"]}
{
Target "The Black Bride"
wait 20
Unit["The Black Bride"]:Use
wait 20
WoWScript SelectGossipOption(1)
wait 20
WoWScript JoinBattlefield(0)
wait 20
Press Esc
}
}
wait 1s
}
while ${BGBOT}!=BGQUIT
call RemoveHud
}
;----------------------------------------------------------------------AV SCRIPT------------------------------------------------
function Do_AV()
{
declare AggroList guidlist local
declare TargetList guidlist local
; Wait for the gates to be opened
if ${WoWScript[GetBattlefieldInstanceRunTime()]}>0
{
while ${WoWScript[GetBattlefieldInstanceRunTime()]}<131165
{
call Update_State BGWAITSTART
if ${BGBOT}==BGQUIT
{
return
}
ISXWoW:ResetIdle
wait 1s
}
}
else
{
call UpdateHudStatus "LUA BGStat Rimer BUG starting now waiting for 2 minutes"
wait 1200
}
call Update_State BGINAV
; Set our current region
ZoneRegion:SetRegion[${LNavRegion[${WoWScript[GetRealZoneText()]}].FQN}]
; Main loop until BG is finished
while !${WoWScript[GetBattlefieldInstanceExpiration()]}
{
if ${BGBOT}==BGQUIT
{
return
}
; Reset our Idle time just incase
ISXWoW:ResetIdle
; If we are dead... Release us
if ${Me.Dead}
{
WoWScript RepopMe()
}
; If we are not dead... Lets do some mapping
; if !${Me.Dead}
; {
;echo "Should be Pulsing"
; Mapper:Pulse
; }
; If we are dead or a ghost.. Lets not move
if ${Me.Dead}||${Me.Ghost}
{
call Update_State BGDEAD
move -stop
}
i:Set[1]
; Targetting Start
; If we currently have a target... Lets clear it
if ${Target(exists)}
{
wowscript ClearTarget()
}
;Check if we have agro
AggroList:Search[-players,-pvp,-alive,-hostile,-nearest,-targetingme,-lineofsight,-range 0-50]
; If we have agro lets fight that one
if ${AggroList.Count}>0&&!${Me.Dead}&&!${Me.Ghost}
{
echo "Agro"
target ${AggroList.GUID[1]}
}
else
{
; If we dont have agro lets try to find someone to kill
TargetList:Search[-players,-pvp,-hostile,-nearest,-nopets,-alive,-lineofsight,-range 0-50]
if ${TargetList.Count}>0
{
echo "Targeting"
target ${TargetList.GUID[1]}
}
}
; Sanity Checking of the current target
if ${Target.Type.Equal[Unit]}
{
; We have a Mob not a player.
if ${Math.Calc[${Target.Z}-${Me.Z}]}>5
{
call UpdateHudStatus "Mob to far above me ignoring"
wowscript ClearTarget()
}
}
; If we now have a target and are not dead or a ghost lets get busy
if ${Target(exists)}&&!${Me.Dead}&&!${Me.Ghost}
{
echo "Killing ${Target}"
call DoDismount
call kill_target ${Target.GUID}
}
if !${Me.InCombat}&&!${Me.Ghost}&&!${Me.Dead}
{
call check_buffs
}
; Need to remove the Battle Stance part but leaving there for stopping
; if ${Me.Buff[Battle Stance](exists)}&&!${Me.Dead}&&!${Me.Ghost}
if !${Me.Dead}&&!${Me.Ghost}
{
i:Inc
CurrentLocation.X:Set[${Me.X}]
CurrentLocation.Y:Set[${Me.Y}]
CurrentLocation.Z:Set[${Me.Z} + ${Math.Calc[${Me.Height} / 2]}]
;echo "Best Container: ${ZoneRegion.BestContainer[${CurrentLocation.X},${CurrentLocation.Y},${CurrentLocation.Z}].ID}"
CurrentRegion:SetRegion[${ZoneRegion.BestContainer[${CurrentLocation.X},${CurrentLocation.Y},${CurrentLocation.Z}].ID}]
;echo "Current Point:" ${CurrentRegion.FQN} ${Math.Distance[${CurrentRegion.CenterPoint.X},${CurrentRegion.CenterPoint.Y},0,${Me.X}, ${Me.Y}, 0]}
PathFinder:Reset
CurrentPath:Clear
;1981.57 -4787.25 55.80
;673.57 -371.15 29.78 SP GY
if ${WoWScript[GetRealZoneText()].Equal[Alterac Valley]}
{
DestinationRegion:SetRegion[${ZoneRegion.BestContainer[${FIGHTX},${FIGHTY},${FIGHTZ}].ID}]
}
else
{
DestinationRegion:SetRegion[${ZoneRegion.BestContainer[1979,-4788, 56].ID}]
}
; DestinationRegion:SetRegion[${CurrentRegion.NearestChild[1981,-4787,55].FQN}]
;echo "BOOGER: ${CurrentRegion.FQN},${DestinationRegion.FQN}"
if ${CurrentRegion.FQN.Equal[${DestinationRegion.FQN}]}
{
;echo "We are already here"
;cast "Berserker Stance"
move -stop
}
PathFinder:SelectPath[${CurrentRegion.FQN},${DestinationRegion.FQN},CurrentPath]
; PathFinder:SelectPath[${CurrentRegion},${LNavRegion["Hall of the Brave-2"]},CurrentPath]
;echo "HOPS: ${CurrentPath.Hops} I: ${i}"
; if ${CurrentPath.Hops}!=${lasthop}
; {
; We have recalculated redo our path
; i:Set[2]
; lasthop:Set[${CurrentPath.Hops}]
; }
; If we dont have a path lets try to move back to a last known good one
if ${CurrentPath.Hops} == 0
{
call Update_State BGNOPATH
echo No Path! Moving directly
move -stop
}
else
{
; We have a path... So lets get the next hop
i:Set[1]
; Make sure our next hop is at least 15 feet away from us
do
{
i:Inc
}
while ${Math.Distance[${Me.X},${Me.Y},${CurrentPath.Region[${i}].CenterPoint.X},${CurrentPath.Region[${i}].CenterPoint.Y}]}<15
;echo "Next Spot: ${CurrentPath.Region[${i}].CenterPoint.X} ${CurrentPath.Region[${i}].CenterPoint.Y}"
; If it is not X=0/Y=0 then lets set our current good and move to the next hop
if ${CurrentPath.Region[${i}].CenterPoint.X}!=0&&${CurrentPath.Region[${i}].CenterPoint.Y}!=0
{
; Mount if we are outdoors and Not in combat
if !${WoWScript[IsIndoors()](exists)} && !${Me.InCombat} && !${Me.Buff[${MYMOUNTBUFF}](exists)}
{
call Update_State BGMOUNT
call UpdateHudStatus "Mounting up"
move -stop
wait 10
call DoMount
}
; Need to check if path is obstructed if so remove it and retry
if ${Me.IsPathObstructed[${CurrentPath.Region[${i}].CenterPoint},9999,${Me.Location}]}
{
call UpdateHudStatus "Weighting next hop since it is obstructed"
; need to do a check if it is over a certain number dont bother becuase this is appearntly our only path just try it
; Need to do a check if we are rooted if so dont inc this
CurrentPath.Connection[${Math.Calc[${i}-1]}]:SetDistance[${Math.Calc[${CurrentPath.Connection[${Math.Calc[${i}-1]}].Distance}+4]}]
call UpdateHudStatus "Weight now ${CurrentPath.Connection[${Math.Calc[${i}-1]}].Distance}"
}
else
{
call Update_State BGRUN
call movetocont ${CurrentPath.Region[${i}].CenterPoint.X} ${CurrentPath.Region[${i}].CenterPoint.Y} 5
;If we didnt get stuck and this connection was weighted.. Lets Lower it since we got there through it
if ${GOTSTUCK}==0 && ${CurrentPath.Connection[${Math.Calc[${i}-1]}].Distance}>0
{
CurrentPath.Connection[${Math.Calc[${i}-1]}]:SetDistance[${Math.Calc[${CurrentPath.Connection[${Math.Calc[${i}-1]}].Distance}-4]}]
if ${CurrentPath.Connection[${Math.Calc[${i}-1]}].Distance}<0
{
CurrentPath.Connection[${Math.Calc[${i}-1]}]:SetDistance[0]
}
call UpdateHudStatus "Weight now ${CurrentPath.Connection[${Math.Calc[${i}-1]}].Distance}"
}
if ${GOTSTUCK}==1
{
call UpdateHudStatus "We got stuck weighting next hop"
; Need to do a check if it is over a certain number dont bother becuase this is appearntly our only path
; Need to do a check if we are rooted if so dont inc this
;CurrentPath.Connection[${Math.Calc[${i}-1]}]:SetDistance[4]
CurrentPath.Connection[${Math.Calc[${i}-1]}]:SetDistance[${Math.Calc[${CurrentPath.Connection[${Math.Calc[${i}-1]}].Distance}+4]}]
call UpdateHudStatus "Weight now ${CurrentPath.Connection[${Math.Calc[${i}-1]}].Distance}"
}
GOTSTUCK:Set[0]
}
}
else
{
; Stop because we have a fucked up x/y
move -stop
}
}
waitframe
}
}
WINNER:Set[${WoWScript[GetBattlefieldWinner()]}]
if ${WINNER}==0
{
HORDE_WINS:Inc
}
if ${WINNER}==1
{
ALIANCE_WINS:Inc
}
call Update_State BGWAITINGQ
WoWScript LeaveBattlefield()
wait 300
}
atom toggle()
{
echo "Changing it"
if ${DORUN}
{
DORUN:Set[0]
return
}
DORUN:Set[1]
}
function kill_target(string TargetGUID)
{
; Mapper:Plugin
ZoneRegion:SetRegion[${LNavRegion[${WoWScript[GetRealZoneText()]}].FQN}]
if ${This.CollisionTest[${Me.X},${Me.Y},${Me.Z},${Target.X},${Target.Y},${Target.Z}]}
{
call UpdateHudStatus "Can't get to ${Target}, clearing that out"
wowscript ClearTarget()
return
}
call UpdateHudStatus "Attacking ${Target}"
WoWScript AttackTarget()
if ${Me.Class.Equal[Warrior]}
{
call UpdateHudStatus "I am doing Warrior Fighting"
call fight_warrior ${TargetGUID}
return
}
if ${Me.Class.Equal[Mage]}
{
call UpdateHudStatus "I am doing Mage Fighting"
call fight_mage ${TargetGUID}
return
}
if ${Me.Class.Equal[Warlock]}
{
call UpdateHudStatus "I am doing Warlock Fighting"
call fight_warlock ${TargetGUID}
return
}
if ${Me.Class.Equal[priest]}
{
call UpdateHudStatus "I am doing Priest Fighting"
call fight_priest ${TargetGUID}
return
}
if ${Me.Class.Equal[Hunter]}
{
call UpdateHudStatus "I am doing Hunter Fighting"
call fight_hunter ${TargetGUID}
return
}
if ${Me.Class.Equal[Shaman]}
{
call UpdateHudStatus "I am doing Shaman Fighting"
call fight_shaman ${TargetGUID}
return
}
if ${Me.Class.Equal[Paladin]}
{
call UpdateHudStatus "I am doing Paladin Fighting"
call fight_paladin ${TargetGUID}
return
}
if ${Me.Class.Equal[Rogue]}
{
call UpdateHudStatus "I am doing Rogue Fighting"
call fight_rogue ${TargetGUID}
return
}
if ${Me.Class.Equal[Druid]}
{
call UpdateHudStatus "I am doing Druid Fighting"
call fight_druid ${TargetGUID}
return
}
}
function check_buffs()
{
if ${Me.Class.Equal[Warrior]}
{
call buff_warrior
return
}
if ${Me.Class.Equal[Mage]}
{
call buff_mage
return
}
if ${Me.Class.Equal[Warlock]}
{
call buff_warlock
return
}
if ${Me.Class.Equal[priest]}
{
call buff_priest
return
}
if ${Me.Class.Equal[Hunter]}
{
call buff_hunter
return
}
if ${Me.Class.Equal[Shaman]}
{
call buff_shaman
return
}
if ${Me.Class.Equal[Paladin]}
{
call buff_paladin
return
}
if ${Me.Class.Equal[Rogue]}
{
call buff_rogue
return
}
if ${Me.Class.Equal[Druid]}
{
call buff_druid
return
}
}
function AddHud()
{
UI -load "${Script.CurrentDirectory}/avbot-ui.xml"
}
function RemoveHud()
{
UI -unload "${Script.CurrentDirectory}/avbot-ui.xml"
}
function pulse_update()
{
; BGBOTSTATUS:Set[UNKNOWN]
Switch ${BGBOT}
{
case BGQUIT
BGBOTSTATUS:Set[Quitting]
break
case BGPAUSE
BGBOTSTATUS:Set[Pausing]
break
case BGINAV
BGBOTSTATUS:Set[In AV]
break
case BGWAITINGQ
BGBOTSTATUS:Set[Qued]
break
case BGDESERTER
BGBOTSTATUS:Set[DESERTER]
break
case BGWAIT
BGBOTSTATUS:Set[Waiting]
break
case BGWAITSTART
BGBOTSTATUS:Set["Wait Start"]
break
case BGRUN
BGBOTSTATUS:Set["Running"]
break
case BGDEAD
BGBOTSTATUS:Set["Dead"]
break
case BGCOMBAT
BGBOTSTATUS:Set["In Combat"]
break
case BGMOUNT
BGBOTSTATUS:Set["Mounting"]
break
case BGNOPATH
BGBOTSTATUS:Set["NO PATH"]
break
}
}
atom AddHonor(string Line, int points)
{
KILLS:Inc
BONUS:Inc[${points}]
call UpdateHudStatus "Honor Update: KILL: ${points} for ${BONUS} KILLS: ${KILLS}"
}
atom AddHonor2(string Line, int points)
{
echo Adding Bonus
BONUS:Inc[${points}]
call UpdateHudStatus "Honor Update: BONUS ${points} for ${BONUS}"
}
function UpdateHudStatus(string StatusMessage)
{
UIElement[BGStatus@Status@BGBotTab@BGBot]:Echo["${Time}: ${StatusMessage}"]
redirect -append "${Script.CurrentDirectory}/ChatLog.txt" echo "${Time}: ${StatusMessage}"
}
atom UpdateWhisper(string Line,string eventid, string message, string speaker, string language, ... junk)
{
ReceivedWhispers:Inc
UIElement[BGWhispers@Whispers@BGBotTab@BGBot]:Echo["[${Time}] ${speaker}: ${message}"]
redirect -append "${Script.CurrentDirectory}/WhisperLog.txt" echo "${Time} ${speaker}: ${message}"
}
function MoveMeThere(int TOX, int TOY, int TOZ)
{
declare i int local 0
do
{
CurrentLocation.X:Set[${Me.X}]
CurrentLocation.Y:Set[${Me.Y}]
CurrentLocation.Z:Set[${Me.Z} + ${Math.Calc[${Me.Height} / 2]}]
CurrentRegion:SetRegion[${ZoneRegion.BestContainer[${CurrentLocation.X},${CurrentLocation.Y},${CurrentLocation.Z}].ID}]
PathFinder:Reset
CurrentPath:Clear
DestinationRegion:SetRegion[${ZoneRegion.BestContainer[${TOX},${TOY},${TOZ}].ID}]
if ${CurrentRegion.FQN.Equal[${DestinationRegion.FQN}]}
{
move -stop
}
PathFinder:SelectPath[${CurrentRegion.FQN},${DestinationRegion.FQN},CurrentPath]
; If we dont have a path lets try to move back to a last known good one
if ${CurrentPath.Hops} == 0
{
echo No Path!
move -stop
return
}
else
{
; We have a path... So lets get the next hop
i:Set[1]
; Make sure our next hop is at least 15 feet away from us
do
{
i:Inc
}
while ${Math.Distance[${Me.X},${Me.Y},${CurrentPath.Region[${i}].CenterPoint.X},${CurrentPath.Region[${i}].CenterPoint.Y}]}<8
if ${CurrentPath.Region[${i}].CenterPoint.X}!=0&&${CurrentPath.Region[${i}].CenterPoint.Y}!=0
{
; Need to check if path is obstructed if so remove it and retry
if ${Me.IsPathObstructed[${CurrentPath.Region[${i}].CenterPoint},9999,${Me.Location}]}
{
call UpdateHudStatus "Weighting next hop since it is obstructed"
CurrentPath.Connection[${Math.Calc[${i}-1]}]:SetDistance[${Math.Calc[${CurrentPath.Connection[${Math.Calc[${i}-1]}].Distance}+4]}]
call UpdateHudStatus "Weight now ${CurrentPath.Connection[${Math.Calc[${i}-1]}].Distance}"
}
else
{
call Update_State BGRUN
call movetocont ${CurrentPath.Region[${i}].CenterPoint.X} ${CurrentPath.Region[${i}].CenterPoint.Y} 5
if ${GOTSTUCK}==1
{
call UpdateHudStatus "We got stuck weighting next hop"
;CurrentPath.Connection[${Math.Calc[${i}-1]}]:SetDistance[4]
CurrentPath.Connection[${Math.Calc[${i}-1]}]:SetDistance[${Math.Calc[${CurrentPath.Connection[${Math.Calc[${i}-1]}].Distance}+4]}]
call UpdateHudStatus "Weight now ${CurrentPath.Connection[${Math.Calc[${i}-1]}].Distance}"
}
GOTSTUCK:Set[0]
}
}
else
{
; Stop because we have a fucked up x/y
move -stop
}
}
wait 2
}
while ${Math.Distance[${Me.X},${Me.Y},${TOX},${TOY}]}>8
}
function Load_Config()
{
if !${ConfigFile.PathExists}
{
call UpdateHudStatus "Generating default configuration files"
SettingXML[${ConfigFile}].Set[General Options]:Set[BGPERSON,"Kartra Bloodsnarl"]
SettingXML[${ConfigFile}].Set[General Options]:Set[BGPERSONX,1981]
SettingXML[${ConfigFile}].Set[General Options]:Set[BGPERSONY,-4788]
SettingXML[${ConfigFile}].Set[General Options]:Set[BGPERSONZ,56]
SettingXML[${ConfigFile}].Set[General Options]:Set[BGQUEZONE,"Orgrimmar"]
SettingXML[${ConfigFile}].Set[AV Options]:Set[FIGHTX,706]
SettingXML[${ConfigFile}].Set[AV Options]:Set[FIGHTY,-34]
SettingXML[${ConfigFile}].Set[AV Options]:Set[FIGHTZ,51]
SettingXML[${ConfigFile}].Set[Mount Options]:Set[MYMOUNT,"Great White Kodo"]
SettingXML[${ConfigFile}].Set[Mount Options]:Set[MYMOUNTBUFF,"Great White Kodo"]
SettingXML[${ConfigFile}]:Save
}
call UpdateHudStatus "Loaded configuration file ${ConfigFile}"
SettingXML[${ConfigFile}]:Unload
BGPERSON:Set[${SettingXML[${ConfigFile}].Set[General Options].GetString[BGPERSON,"Kartra Bloodsnarl"]}]
BGPERSONX:Set[${SettingXML[${ConfigFile}].Set[General Options].GetInt[BGPERSONX,1981]}]
BGPERSONY:Set[${SettingXML[${ConfigFile}].Set[General Options].GetInt[BGPERSONY,-4788]}]
BGPERSONZ:Set[${SettingXML[${ConfigFile}].Set[General Options].GetInt[BGPERSONZ,56]}]
BGQUEZONE:Set[${SettingXML[${ConfigFile}].Set[General Options].GetString[BGQUEZONE,"Orgrimmar"]}]
FIGHTX:Set[${SettingXML[${ConfigFile}].Set[AV Options].GetInt[FIGHTX,1981]}]
FIGHTY:Set[${SettingXML[${ConfigFile}].Set[AV Options].GetInt[FIGHTY,-4788]}]
FIGHTZ:Set[${SettingXML[${ConfigFile}].Set[AV Options].GetInt[FIGHTZ,56]}]
MYMOUNT:Set[${SettingXML[${ConfigFile}].Set[Mount Options].GetString[MYMOUNT,"Great White Kodo"]}]
MYMOUNTBUFF:Set[${SettingXML[${ConfigFile}].Set[Mount Options].GetString[MYMOUNTBUFF,"Great White Kodo"]}]
}
function Update_State(int STATE)
{
if ${BGBOT}==BGQUIT
{
; We have executed a quit lets not change that state
return
}
; If it currently isnt that we will change it
if ${BGBOT}!=${STATE}
{
BGBOT:Set[${STATE}]
call pulse_update
}
}
atom atexit()
{
ui -unload "${Script.CurrentDirectory}/avbot-ui.xml"
}