All pastes #447042 Raw Edit

Mine

public text v1 · immutable
·published 2007-04-18 20:15 UTC
rendered paste body
;Check to see if ISXWoW has loaded.
#if !${InnerSpace:LoadExtension[isxwarden](exists)}
#error ISXWoW is required but could not be loaded
#endif

;Check we have a character loaded
#if !${Me(exists)}
#error Please have a character loaded before running WoWBot
#endif


;Defines for Travel State
#define PATROLING 0
#define ADVANCING 1
#define SELLING 2
#define FLEEING 3
#define CR 4

;Define for waypoint precision
#define WPPRECISION 7

#include Debug.iss
#includeoptional Routines.iss
#include moveto.iss
#include misc.iss
#include HudStat.iss
#include Settings.iss
#include spell.iss
#include navigation.iss
#include uibits.iss




;Determine State funtion
function DetermineState()
{
	declare NearestPatrolPointIndex int local
	debug("DetermineState:Checking State")
	; If I am dead then I am gonna have to find my corpse and rez.

	if ${Me.Dead}
	{
		Return "DEAD"
	}

	if ${Me.Ghost}&&${TravelState}!=CR
	{
		Return "GHOST"
	}
	
	if ${RLG}
	{
		Return "FALLBACK"
	}
	
	; If I am in combat but not attacking find aggro mob
	if (${Me.InCombat}&&!${FalseAggro})&&(${TargetGUID.Equal[NOTARGET]}||${Unit[${TargetGUID}].Dead})
	{
		Return "AGGROED"
	}

	; Check I am not dead and not a ghost and if neither then do downtime.
	if !${Me.Dead}&&!${Me.Ghost}&&${DoDowntime}&&(!${Me.InCombat}||${FalseAggro})
	{
		Return "DOWNTIME"
	}

	;If our inventory is full we need to head back to town.
	 if (!${Me.InCombat}||${FalseAggro})&&${TravelState}!=SELLING&&${TravelState}!=CR&&((${AutoSell}&&${Me.EmptyInventorySlots}-${KeepEmpty}<1)||(${AutoRepair}&&${NeedRepair})) 
	 {
	 	Return "RESUPPLY"
	 }
	 
	;If not patroling and close to the merchant point sell
	 if (!${Me.InCombat}||${FalseAggro})&&${AtMerchant}&&${AutoSell}
	 {
	 	Return "SELL"
	 }

	; If I have target that is dead loot it.
	if (${Unit[${TargetGUID}].Dead})&&(!${Me.InCombat}||${FalseAggro})
	{
		Return "LOOT"
	}

	;If I am patroling but too far from my patrol path then plot a route to it
	NearestPatrolPointIndex:Set[${PatrolPath.NearestPoint[${Me.X},${Me.Y},${Me.Z}]}]
	if (!${Me.InCombat}||${FalseAggro}) && ${Math.Distance[${Me.X},${Me.Y},${Me.Z},${PatrolPath.Point[${NearestPatrolPointIndex}].X},${PatrolPath.Point[${NearestPatrolPointIndex}].Y},${PatrolPath.Point[${NearestPatrolPointIndex}].Z}]}>${MaxRoam} && ${TravelState}==PATROLING
	{
		Return "ADVANCE"
	}

	;If we have failed to find a unit multiple times or we should be heading somewhere then roam
	if (${TravelState}==PATROLING && ${NoTargetCount}>${NoTargetCountMax} && (!${SearchGameObjects} || ${NoObjectCount}>1))||(${TravelState}>0&&(!${Me.InCombat}||${FalseAggro}))||${TravelState}==FLEEING
	{
		Return "ROAM"
	}

	;If i am not aggroed and I want to check for chest, mines, herbs etc then look for some
	if ${TargetGUID.Equal[NOTARGET]} && ${TravelState}==PATROLING && ${SearchGameObjects} && (!${Me.InCombat}||${FalseAggro}) && !${GameObject[${TargetGUID}](exists)} && ${NoObjectCount}<2
	{
		Return "FINDCHESTS"
	}

	; If I have GameObject target then Loot it.
	if ${GameObject[${TargetGUID}](exists)} && (!${Me.InCombat}||${FalseAggro})
	{
		Return "LOOTCHEST"
	}

	; If I dont have target and I am patroling then find one.
	if ${TargetGUID.Equal[NOTARGET]}&&${TravelState}==PATROLING
	{
		Return "TARGET"
	}

	; If I have a target and havent done it already do combat prep
	if ${Unit[${TargetGUID}](exists)}&&!${Unit[${TargetGUID}].Dead}&&${DoCombatPrep}&&(!${Me.InCombat}||${FalseAggro})
	{
		Return "COMBATPREP"
	}

	; If I have target then attack it.
	if ${Unit[${TargetGUID}](exists)}&&!${Unit[${TargetGUID}].Dead}
	{
		Return "ATTACK"
	}
	
	Return "ROAM"
}


function main()
{
	turbo 1000

	; Load the ExtTypes module
	; Module -require ExtTypes (depreciated)
	
	;declare TurnedOnAFK bool script	FALSE		/* Used to determine if we turned on AFK so we can turn it back off again when were done */
	declare CharacterName string script ${Me.Name.Replace[',REMOVE,.,REMOVE]} /* Your characters name */
	declare Realm string script ${ISXWoW.RealmName.Replace[',REMOVE,.,REMOVE]}	/* The Current Realm */
	declare BotState string	script					/* Holds the current state of the bot */
	declare HomeDir filepath script "${Script.CurrentDirectory}"	/* Holds the full path to wowbot.iss */
	declare TargetGUID string script "NOTARGET"	/* this is used to hold out current target */
	declare CurrentWaypointIndex int script 1	/* This keeps track of where we are in our Path */
	declare CurrentWaypointX float script ${Me.X}	/* The X location we are currently heading towards */
	declare CurrentWaypointY float script ${Me.Y}	/* The Y location we are currently heading towards */
	declare CurrentWaypointZ float script ${Me.Z}	/* The Z location we are currently heading towards */
	declare LastWaypointX float script ${Me.X}	/* The last X location we were at */
	declare LastWaypointY float script ${Me.Y}	/* The last Y location we were at */
	declare LastWaypointZ float script ${Me.Z}	/* The last Z location we were at */	
	declare SavedWaypointX float script ${Me.X}	/* The last X location we were at */
	declare SavedWaypointY float script ${Me.Y}	/* The last Y location we were at */
	declare SavedWaypointZ float script ${Me.Z}	/* The last Z location we were at */
	declare DoDowntime bool script TRUE		/* Flag to control when we do downtime */
	declare DoCombatPrep bool script TRUE	/* Flag to control combat prep */
	declare CurrentPath string script PatrolPath		/* This variable hold the name of the current path you are following */
	declare MaxRoam int script 20			/* Maximum Distance to roam from waypoint and distance to search for mobs */.
	declare NoTargetCount int script 1		/* Count for the number of times you fail to get a target */
	declare NoObjectCount int script 0		/* Count for the number of times you fail to find an Object */
	declare RLG bool script				/* Flag for running like a girl */
	declare NoTargetCountMax int script 0		/* The number of times you search for a target before giving up and moving on */
	declare SitWhenRest bool script 1		/* Do you want to sit down when resting */
	declare MinHealthPct int script 50		/* The minimum percentage value your health can be before you start to rest*/
	declare MinManaPct int script 80		/* The minimum percentage value your mana can be before you start to rest */
	declare DoSkinning bool script FALSE		/* Do you wan to skin or not */
	declare SearchGameObjects bool script FALSE		/* Do you want to search for chests, mines, herbs, etc whilst roaming */
	declare ComplexTargeting bool script TRUE		/* Do you want to check for possible proximity aggro etc when selecting a target*/
	declare KeepEmpty int script 0			/* The number of bag slots you want to keep empty (Hunters can add the number of slot in there ammo pouch here  */
	declare CombatBailout int script 30		/* How long to run attack routine before giving up */
	declare CombatMaxDist float script 5		/* The maximum distance to the mob for melee (used for combat positioning) */
	declare CombatMinDist float script 1		/* The minimum distance to the mob for melee (used for combat positioning) */
	declare RangedMaxDist float script 35		/* The maximum distance to the mob for ranged (used for combat positioning) */
	declare RangedMinDist float script 11		/* The minimum distance to the mob for ranged (used for combat positioning) */
	declare TargetMinLevelDiff int script 5		/* The targeting routine will target mobs no less then this number lower than your current level */
	declare TargetMaxLevelDiff int script 2		/* The targeting routine will target mobs no higher then this number above your current level */
	declare NoCritters bool script TRUE			/* Do we want to avoid targeting critters */
	declare PullBeforeContinue bool script TRUE			/* Do we want to make sure we have pulled before casting other spells. */
	declare TargetingRange float script 50		/* Target the mob once its closer than this distance */
	declare PullingRange float script 28		/* Execute the pull routine once the mob is closer than this distance */
	declare PanicThreshold int script 5		/* If we have this many aggro mobs on us then run like a girl to the start of our path*/
	declare UnitAssistRadius int script 15	/* The range that is used when checking how close units that assist are */
	declare SettingFile string script "Configuration/WoWBot.xml" /* Name of the configuration file to use*/
	declare FoodNDrinkSettingFile string script "Configuration/FoodNDrink.xml" /* Name of the configuration file to use*/
	declare InventorySettingFile string script "Configuration/InventoryManagement.xml" /* Name of the configuration file to use*/
	declare PathFile string global "Navigation/WoWBotPath.xml" /* Name of the Path file to use*/
	declare World string global "WoWBot"		/* This is the name of the world within the navigation file */
	declare GraveyardPoint string script		/* This is the name of the waypoint to the graveyard */
	declare SafePoint string script			/* This is the name of a safe waypoint to flee too */
	declare PatrolStartPoint string script			/* This is the name of a start point of our patrol path */
	declare MerchantPoint string script			/* This is the name of a Merchant waypoint */
	declare PatrolWaypoints string script		/* This variable holds a comma seperated list of waypoints used to generate the Patrol Route path*/
	declare PatrolPath navpath script		/* This variable hold our patrol navigation path */
	declare TravelingPath navpath script		/* This variable will be used to generate path for moving to and from the Patrol Path */ 
	declare TempPath navpath script			/* Var for temporary paths.*/
	declare CorpseX float script			/* This is the X loc of our corpse */
	declare CorpseY float script			/* This is the Y loc of our corpse */
	declare CorpseZ float script			/* This is the Z loc of our corpse */
	declare ShowStats bool script FALSE		/* Toggle for WoWBot Report display */
	declare ShowStatus bool script TRUE		/* Toggle for WoWBot running status display */
	declare CurrentXP int global ${Me.Exp}		/* Starting XP */
	declare TotalKills int global 0			/* Count of mobs we kill */
	declare TotalDeaths int global 0		/* Count of times we have died */
	declare TotalXPGained int global 0		/* Total XP gained this session */
	declare XPToLevel int global ${Math.Calc[${Me.NextLevelExp}-${Me.Exp}]}	/* amount of XP needed to gt the next level */
	declare XPSec float global 0			/* XP per second */
	declare TimeNextLevel float global 0		/* Estimated Seconds until next level */
	declare GUIDBlacklist collection:string script	/* Blacklist of bad GUIDs */
	declare Skirmish bool script TRUE		/* Do we want to search for targets whilst running between patrol points */
	declare AtMerchant bool script FALSE		/* Used to decide if we are at a merchant or not */
	declare NeedRepair bool script FALSE		/* Used to decide if we need to repair or not */
	declare TravelState int script 0		/* Used to keep track of what type of path we are on. */
	declare UseFaceFast bool script FALSE	/* Set this to TRUE if you want to use face -fast */
	declare LoopPatrolPath bool script FALSE	/* If set to tru then when you reach the end of your patrol path you will walk to the start directly instead of reversing path */
	declare AutoSell bool script TRUE			/* Do you want wowbot to auto sell */
	declare AutoRepair bool script TRUE			/* Do you want wowbot to auto repair */
	declare AutoDestroy bool script TRUE		/* Do you want wowbot to auto destroy */
	declare RepairPctLevel int script 20		/* The minimum pct durabilty before we go to repair */
	declare SellByName bool script TRUE			/* Do you want to sell items out of your inventory by name ?*/
	declare SellByRarity bool script FALSE			/* Do you want to sell items out of your inventory by name ?*/
	declare DestroyByName bool script TRUE			/* Do you want to sell items out of your inventory by name ?*/
	declare DestroyByRarity bool script FALSE			/* Do you want to sell items out of your inventory by name ?*/
	declare DestroyByRarityLevel int script -1			/* Destroy items that are less than this quality level */
	declare SellByRarityLevel int script -1			/* Sell items that are less than this quality level */
	declare moneygain int global 0            /* Holds the total copper gained from the money loot */
	declare storedmoney int script ${WoWScript[GetMoney()]}   /* Holds the amount of cash you have after each kill */	
	declare FalseAggro bool script FALSE		/* Flag to deal with false aggro */
	declare FalseAggroTimer int script 0		/* Timer to deal with false aggro */
	declare AggroCount int script 0
	declare TestLocXIPO float script  
	declare TestLocYIPO float script
	declare TargetDist float script
	declare SpellCastEnd bool script FALSE
	declare OnSpellCastInt bool script FALSE
	declare GlobalStuckCheck int script 0
	
	LavishScript:RegisterEvent[UNIT_SPELLCAST_STOP]
	Event[UNIT_SPELLCAST_STOP]:AttachAtom[OnSpellCastEnd]
	LavishScript:RegisterEvent[UNIT_SPELLCAST_INTERRUPTED]
	Event[UNIT_SPELLCAST_INTERRUPTED]:AttachAtom[OnSpellCastInt]
	
	echo "CWD: ${Script.CurrentDirectory}"
	echo "HD: ${HomeDir}"

	ui -load "interface/wowskin.xml"
	call SetupHudStatus
	;call CreateDirectories
	call SetDebugFile "Logs/WoWBot.log"
	call UpdateHudStatus "Stared WoWBot VERSION"
	call UpdateHudStatus "${CharacterName} on Realm ${Realm}"
	ui -load "interface/wowbotui.xml"
	ui -load "interface/wowbotstatsui.xml"
	bind WoWBotDisplay SHIFT+ALT+W "UIElement -toggle wowbot"
	call LoadSettings
	call InitNavigation
	call UpdateHudStatus "Loaded Mage specific routines"
	call CombatPrep
	

	While ${BotState.NotEqual[END]}
	{
		;Reset our False Aggro Flag
		if ${FalseAggro}&&${Script.RunningTime}>${FalseAggroTimer}
		 FalseAggro:Set[FALSE]

		; Check what we are supposed to be doing
		call DetermineState
		
		BotState:Set[${Return}]
		debug("Main:${BotState}")

		; Act on our current state
		Switch ${BotState}
		{
			case DEAD
				call UpdateHudStatus "Entered ${BotState} State"
				call ReleaseCorpse
				break

			case GHOST
				call UpdateHudStatus "Entered ${BotState} State"
				call SetCorpseRunPath
				break
				
			case FALLBACK
				call UpdateHudStatus "Entered ${BotState} State"
				call FallBack
				break
				
			case AGGROED
				call UpdateHudStatus "Entered ${BotState} State"
				CheckAggro
				break
				
			case DOWNTIME
				call UpdateHudStatus "Entered ${BotState} State"
				call Downtime
				break

			case COMBATPREP
				call UpdateHudStatus "Entered ${BotState} State"
				call CombatPrep ${TargetGUID}
				break

			case FINDCHESTS
				call UpdateHudStatus "Entered ${BotState} State"
				call FindChest
				break

			case LOOTCHEST
				call UpdateHudStatus "Entered ${BotState} State"
				call LootChest ${TargetGUID}
				break

			case TARGET
				call UpdateHudStatus "Entered ${BotState} State"
				call FindTarget
				break

			case GOHOME
				call UpdateHudStatus "Entered ${BotState} State"
				call GoHome
				break

			case ATTACK
				call UpdateHudStatus "Entered ${BotState} State"
				AggroCount:Set[0]
				call Attack ${TargetGUID}
				break

			case LOOT
				call UpdateHudStatus "Entered ${BotState} State"
				call Loot 
				break
			
			case ROAM
				call UpdateHudStatus "Entered ${BotState} State"
				call Roam
				break
				
			case RESUPPLY
				call UpdateHudStatus "Entered ${BotState} State"
				call SetMerchantPath
				break

			case ADVANCE
				call UpdateHudStatus "Entered ${BotState} State"
				call SetAdvancePath
				break

			case SELL
				call UpdateHudStatus "Entered ${BotState} State"
				call Sell
				break

			case END
				call UpdateHudStatus "Entered ${BotState} State"
				break
				
		}
	}

}

function atexit()
{
	; Dump our running stats to the console.
	call DumpStats
	; Clean up if the script is ended
	move -stop
	if ${Script[WoWBotWaypoints](exists)}
	{
		EndScript WoWBotWaypoints
	}
	

	ui -unload "interface/wowbotui.xml"
	ui -unload "interface/wowbotstatsui.xml"
	UI -unload "interface/wowbotstatusui.xml"
	bind -delete WoWBotDisplay

}