All pastes #640834 Raw Edit

Stuff

public text v1 · immutable
#640834 ·published 2007-07-31 18:28 UTC
rendered paste body
	/* Stealthy's Auto Equip */
	;Changes in this ver:
	;1) After many headaches, parsing of stats from tooltips works. This
	;   means all of your "of the ______" items will now work.
	;   Thanks for the help, M^3.

	variable string PrimStat = Stamina
	variable string SecStat = Intellect
	variable string ThirdStat = Spirit
	variable string WeapType = Dagger
	variable bool DualWield = FALSE
	variable int RarityThreshold = 3
	variable int LastEquipAttempt
	;Thanks to M^3 for the tooltip bit.
	variable index:string ToolTipText
	;Thanks for the pointers, M^3.
	member ArmorType()
	{
		;Thanks to Complex for supplying me with the skill # info
		;WoWSkill for Plate is 293
		if ${Me.Skill[293]} > 0
		{	
			return Plate
		}
		;wowSkill for Mail is 413
		elseif ${Me.Skill[413]} > 0
		{
			return Mail
		}
		;WoWSkill for Leather is 414
		elseif ${Me.Skill[414]} > 0
		{
			return Leather
		}
		;WoWSkill for cloth is 415
		elseif ${Me.Skill[415]} > 0
		{
			return Cloth
		}
		echo "ArmorType returned nothing, something is wrong with the Skill values"
	}
	member CanShield()
	{
		if !${This.DualWield} && ${Me.Skill[433]} > 0
		{
			return TRUE
		}
		return FALSE
	}
	member ShouldEquip(string ItemGUID, string ItemType)
	{
		if !${Item[${ItemGUID}].Usable}
		{
			return FALSE
		}
		if ${ItemType.Equal[Armor]}
		{
			if ${This.ArmorWeight[${ItemGUID}]} > ${This.ArmorWeight[${Me.Equip[${Item[${ItemGUID}].EquipType}].GUID}]}
			{
				return TRUE
			}
			return FALSE
		}
		if ${ItemType.Equal[Weapon]}
		{
			if ${This.DualWield}
			{
				if ${Item[${ItemGUID}].EquipType.Equal[Weapon (1H)]}
				{
					if ${This.WeaponWeight[${ItemGUID}]} > ${This.WeaponWeight[${Me.Equip[mainhand].GUID}]}
					{
						return TRUE
					}
					if ${This.WeaponWeight[${ItemGUID}]} > ${This.WeaponWeight[${Me.Equip[offhand].GUID}]}
					{
						return TRUE
					}
					return FALSE
				}
				if ${Item[${ItemGUID}].EquipType.Equal[Weapon (Mainhand)]}
				{
					if ${This.WeaponWeight[${ItemGUID}]} > ${This.WeaponWeight[${Me.Equip[mainhand].GUID}]}
					{
						return TRUE
					}
					return FALSE
				}
			}
			if !${This.DualWield}
			{
				echo "AutoEquip: Entered Non-DualWield if"
				if ${Item[${ItemGUID}].EquipType.Equal[Weapon (1H)]}
				{
					echo "AutoEquip: Weight 1 ${This.WeaponWeight[${ItemGUID}]}, 2 ${This.WeaponWeight[${Me.Equip[mainhand].GUID}]}"
					if ${This.WeaponWeight[${ItemGUID}]} > ${This.WeaponWeight[${Me.Equip[mainhand].GUID}]}
					{
						return TRUE
					}
					return FALSE
				}
			}
		}
		if ${ItemType.Equal[Bag]}
		{
			if ${This.BagWeight[${ItemGUID}]} > 0
			{
				return TRUE
			}
			return FALSE
		}
		if ${ItemType.Equal[Ring]}
		{
			if ${This.MiscWeight[${ItemGUID}]} > ${This.MiscWeight[${Me.Equip[finger1].GUID}]}
			{
				echo "AutoEquip: MiscWeight comparing ${Me.Equip[${Item[${ItemGUID}].EquipType}]} slot 1"
				return TRUE
			}
			if ${This.MiscWeight[${ItemGUID}]} > ${This.MiscWeight[${Me.Equip[finger2].GUID}]}
			{
				echo "AutoEquip: MiscWeight comparing ${Me.Equip[${Item[${ItemGUID}].EquipType}]} slot 2"
				return TRUE
			}
			return FALSE
		}
		if ${ItemType.Equal[Trinket]}
		{
			if ${This.MiscWeight[${ItemGUID}]} > ${This.MiscWeight[${Me.Equip[${Item[${ItemGUID}].EquipType}].GUID}]}
			{
				return TRUE
			}
			return FALSE
		}
		if ${ItemType.Equal[Held]}
		{
			if !${Me.Equip[mainhand].EquipType.Equal[Weapon (2H)]} && !${This.DualWield} && !${This.CanShield} && ${This.MiscWeight[${ItemGUID}]} > ${This.MiscWeight[${Me.Equip[offhand]}]}
			{
				return TRUE
			}
			return FALSE
		}
		if ${ItemType.Equal[Ranged]}
		{
			if ${This.WeaponWeight[${ItemGUID}]} > ${This.WeaponWeight[${Me.Equip[ranged]}]}
			{
				return TRUE
			}
			return FALSE
		}
	}
	;Thanks, M^3, for fixing what a fucking extra bracket. Goddamn notepad.
	member MiscWeight(string NewItemGUID)
	{
		variable objectref ITEMGUID = ${Item[${NewItemGUID}].GUID}
		if ${Item[${NewItemGUID}].Rarity} >= 3 && ${Item[${NewItemGUID}].${PrimStat}} == 0 && ${Item[${NewItemGUID}].${SecStat}} == 0 && ${Item[${NewItemGUID}].${ThirdStat}} == 0
		{
			echo "AutoEquip: FUCK YOU! ${This.GetTooltipTextStat["${WoWScript[GetContainerItemLink([${ITEMGUID.Bag.Number}\,${ITEMGUID.Slot})]}",${PrimStat}]}"
			return ${Math.Calc[${This.GetTooltipTextStat["${WoWScript[GetContainerItemLink(${ITEMGUID.Bag.Number}\,${ITEMGUID.Slot})]}",${PrimStat}]} + (${This.GetTooltipTextStat["${WoWScript[GetContainerItemLink(${ITEMGUID.Bag.Number}\,${ITEMGUID.Slot})]}",${SecStat}]}*.9) + (${This.GetTooltipTextStat["${WoWScript[GetContainerItemLink(${ITEMGUID.Bag.Number}\,${ITEMGUID.Slot})]}",${ThirdStat}]}*.8)]}
		}
		echo "AutoEquip: NOT FUCK YOU!"
		return ${Math.Calc[${Item[${NewItemGUID}].${PrimStat}} + (${Item[${NewItemGUID}].${SecStat}}*.9) + (${Item[${NewItemGUID}].${ThirdStat}}*.8)]}
	}
	member ArmorWeight(string NewItemGUID)
	{
		return ${Math.Calc[${Item[${NewItemGUID}].${PrimStat}} + (${Item[${NewItemGUID}].${SecStat}}*.9) + (${Item[${NewItemGUID}].${ThirdStat}}*.8) + (${Item[${NewItemGUID}].Armor}*${This.ClassArmorWeight})]}
	}
	member WeaponWeight(string NewItemGUID)
	{
		return ${Math.Calc[${Item[${NewItemGUID}].${PrimStat}} + (${Item[${NewItemGUID}].${SecStat}}*.9) + (${Item[${NewItemGUID}].${ThirdStat}}*.8) + (${Item[${NewItemGUID}].DPS}*${This.ClassDPSWeight})]}
	}
	member BagWeight(string NewItemGUID)
	{
		if !${Object[${NewItemGUID}](exists)}
			return 0
		if ${Object[${NewItemGUID}].Slots} > ${Me.Bag[1].Slots}
			return 1
		if ${Object[${NewItemGUID}].Slots} > ${Me.Bag[2].Slots}
			return 2
		if ${Object[${NewItemGUID}].Slots} > ${Me.Bag[3].Slots}
			return 3
		if ${Object[${NewItemGUID}].Slots} > ${Me.Bag[4].Slots}
			return 4
		if ${Object[${NewItemGUID}].Slots} <= ${Me.Bag[1].Slots}
			return 0
		if ${Object[${NewItemGUID}].Slots} <= ${Me.Bag[2].Slots}
			return 0
		if ${Object[${NewItemGUID}].Slots} <= ${Me.Bag[3].Slots}
			return 0
		if ${Object[${NewItemGUID}].Slots} <= ${Me.Bag[4].Slots}
			return 0
	}
	member ClassArmorWeight()
	{
		if ${Me.Class.Equal[Warrior]} || ${Me.Class.Equal[Paladin]}
		{
			return .75
		}
		if ${Me.Class.Equal[Rogue]} || ${Me.Class.Equal[Shaman]} || ${Me.Class.Equal[Hunter]}
		{
			return .4
		}
		if ${Me.Class.Equal[Warlock]} || ${Me.Class.Equal[Priest]} || ${Me.Class.Equal[Mage]}
		{
			return .25
		}
	}
	member ClassDPSWeight()
	{
		if ${Me.Class.Equal[Rogue]} || ${Me.Class.Equal[Warrior]}
		{
			return .9
		}
		if ${Me.Class.Equal[Shaman]} || ${Me.Class.Equal[Paladin]} || ${Me.Class.Equal[Hunter]}
		{
			return .75
		}
		if ${Me.Class.Equal[Warlock]} || ${Me.Class.Equal[Priest]} || ${Me.Class.Equal[Mage]}
		{
			return .25
		}
	}
	member ArmorCanBeEquipped(string NewItemGUID)
	{
		echo "AutoEquip: ArmorCanBeEquipped member"
		if ${This.ArmorType.Equal[Plate]}
		{
			if ${Item[${NewItemGUID}].SubType.Equal[Plate]} || ${Item[${NewItemGUID}].SubType.Equal[Mail]} || ${Item[${NewItemGUID}].SubType.Equal[Leather]} || ${Item[${NewItemGUID}].SubType.Equal[Cloth]}
			{
				if ${Item[${NewItemGUID}].Usable}
				{
					return TRUE
				}
			}
		}
		if ${This.ArmorType.Equal[Mail]}
		{
			if ${Item[${NewItemGUID}].SubType.Equal[Mail]} || ${Item[${NewItemGUID}].SubType.Equal[Leather]} || ${Item[${NewItemGUID}].SubType.Equal[Cloth]}
			{
				if ${Item[${NewItemGUID}].Usable}
				{
					return TRUE
				}
			}
		}
		if ${This.ArmorType.Equal[Leather]}
		{
			if ${Item[${NewItemGUID}].SubType.Equal[Leather]} || ${Item[${NewItemGUID}].SubType.Equal[Cloth]}
			{
				if ${Item[${NewItemGUID}].Usable}
				{
					return TRUE
				}
			}
		}
		if ${This.ArmorType.Equal[Cloth]}
		{
			if ${Item[${NewItemGUID}].SubType.Equal[Cloth]}
			{
				if ${Item[${NewItemGUID}].Usable}
				{
					return TRUE
				}
			}
		}
		return FALSE
	}
	method AutoEquip()
	{
		variable int counter = 1
		variable int counterx = 1
		variable guidlist ItemSearch
		variable guidlist BaggieSearch
		;For now, using PrimStat and SecStat as the stat vars
		;Also using WeapType as the preferred weapon type
		ItemSearch:Search[-items,-inventory]
		BaggieSearch:Search[-containers,-inventory]
		variable objectref ITEMGUID
		ITEMGUID:Set[${ItemSearch.GUID[${counter}]}]
		;echo "AutoEquip: ItemSearch Count - ${ItemSearch.Count}"
		if ${ItemSearch.Count} > 0 && ${This.CanAttemptEquip}
		{
			do
			{
				if ${Item[${ItemSearch.GUID[${counter}]}].RandomName(exists)}
				{
					;This:GetTooltipText["${WoWScript[GetContainerItemLink(${ITEMGUID.Bag.Number}\,${ITEMGUID.Slot})]}"]
				}
				if ${Item[${ItemSearch.GUID[${counter}]}].Rarity} <= ${RarityThreshold}
				{
					echo "AutoEquip: Testing item ${Item[${ItemSearch.GUID[${counter}]}].Name}"
					if ${Item[${ItemSearch.GUID[${counter}]}].SubType.Equal[Shield]}
					{
						;echo "AutoEquip: Entered Shield if"
						if ${This.CanShield} && ${This.ShouldEquip[${ItemSearch.GUID[${counter}]},Armor]}
						{
							;echo "AutoEquip: Attempting to equip ${Item[${ItemSearch.GUID[${counter}]}].Name}"
							Item[${ItemSearch.GUID[${counter}]}]:Use
							WoWScript EquipPendingItem(0)
							This:SetLastEquipAttempt
						}
					}
					if ${This.ArmorCanBeEquipped[${ItemSearch.GUID[${counter}]}]}
					{
						echo "AutoEquip: Entered This.ArmorType if"
						if ${This.ShouldEquip[${ItemSearch.GUID[${counter}]},Armor]}
						{
							;echo "AutoEquip: Attempting to equip ${Item[${ItemSearch.GUID[${counter}]}].Name}"
							Item[${ItemSearch.GUID[${counter}]}]:Use
							WoWScript EquipPendingItem(0)
							This:SetLastEquipAttempt
						}
					}
					if ${Item[${ItemSearch.GUID[${counter}]}].EquipType.Equal[Finger]}
					{
						;echo "AutoEquip: Entered Ring if"
						if ${This.ShouldEquip[${ItemSearch.GUID[${counter}]},Ring]}
						{
							if ${This.MiscWeight[${ItemSearch.GUID[${counter}]}]} > ${This.MiscWeight[${Me.Equip[finger1].GUID}]}
							{
								;echo "AutoEquip: Attempting to equip ${Item[${ItemSearch.GUID[${counter}]}].Name}"
								WoWScript EquipItemByName("${Item[${ItemSearch.GUID[${counter}]}].Name}",11)
								This:SetLastEquipAttempt
							}
							if ${This.MiscWeight[${ItemSearch.GUID[${counter}]}]} > ${This.MiscWeight[${Me.Equip[finger2].GUID}]}
							{
								;echo "AutoEquip: Attempting to equip ${Item[${ItemSearch.GUID[${counter}]}].Name}"
								WoWScript EquipItemByName("${Item[${ItemSearch.GUID[${counter}]}].Name}",12)
								This:SetLastEquipAttempt
							}
							WoWScript EquipPendingItem(0)
						}
					}
					if ${Item[${ItemSearch.GUID[${counter}]}].SubType.Equal[${WeapType}]}
					{
						;echo "AutoEquip: Entered WeapType if"
						if ${This.ShouldEquip[${ItemSearch.GUID[${counter}]},Weapon]}
						{
							;echo "AutoEquip: Attempting to equip ${Item[${ItemSearch.GUID[${counter}]}].Name}"
							if ${This.DualWield}
							{
								if ${Item[${ItemSearch.GUID[${counter}]}].EquipType.Equal[Weapon (1H)]}
								{
									if ${This.WeaponWeight[${ItemSearch.GUID[${counter}]}]} > ${This.WeaponWeight[${Me.Equip[mainhand].GUID}]}
									{
										WoWScript EquipItemByName("${Item[${ItemSearch.GUID[${counter}]}].Name}",16)
										This:SetLastEquipAttempt
									}
									if ${This.WeaponWeight[${ItemSearch.GUID[${counter}]}]} > ${This.WeaponWeight[${Me.Equip[offhand].GUID}]}
									{
										WoWScript EquipItemByName("${Item[${ItemSearch.GUID[${counter}]}].Name}",17)
										This:SetLastEquipAttempt
									}
								}
								if ${Item[${ItemSearch.GUID[${counter}]}].EquipType.Equal[Weapon (Mainhand)]}
								{
									if ${This.WeaponWeight[${ItemSearch.GUID[${counter}]}]} > ${This.WeaponWeight[${Me.Equip[mainhand].GUID}]}
									{
										WoWScript EquipItemByName("${Item[${ItemSearch.GUID[${counter}]}].Name}",16)
										This:SetLastEquipAttempt
									}
								}
							}
							if !${This.DualWield}
							{
								if ${Item[${ItemSearch.GUID[${counter}]}].EquipType.Equal[Weapon (1H)]}
								{
									if ${This.WeaponWeight[${ItemSearch.GUID[${counter}]}]} > ${This.WeaponWeight[${Me.Equip[mainhand].GUID}]}
									{
										WoWScript EquipItemByName("${Item[${ItemSearch.GUID[${counter}]}].Name}",16)
										This:SetLastEquipAttempt
									}
								}
							}
							WoWScript EquipPendingItem(0)
						}
					}
					if ${Item[${ItemSearch.GUID[${counter}]}].EquipType.Equal[Held]}
					{
						;echo "AutoEquip: Entered Held if"
						if ${This.ShouldEquip[${ItemSearch.GUID[${counter}]},Held]}
						{
							WoWScript EquipItemByName("${Item[${ItemSearch.GUID[${counter}]}].Name}",17)
							This:SetLastEquipAttempt
						}
						WoWScript EquipPendingItem(0)
					}
					if ${Item[${ItemSearch.GUID[${counter}]}].EquipType.Equal[Ranged]}
					{
						;echo "AutoEquip: Entered Ranged if"
						if ${This.ShouldEquip[${ItemSearch.GUID[${counter}]},Ranged]}
						{
							WoWScript EquipItemByName("${Item[${ItemSearch.GUID[${counter}]}].Name}",18)
							This:SetLastEquipAttempt
						}
						WoWScript EquipPendingItem(0)
					}
				}
				counter:Inc
			}
			while ${ItemSearch.GUID[${counter}](exists)} && ${This.CanAttemptEquip}
		}
		if ${BaggieSearch.Count} > 0 && ${This.CanAttemptEquip}
		{
			do
			{
				if ${Object[${BaggieSearch.GUID[${counterx}]}].SubType.Equal[Bag]} && ${This.CanAttemptEquip}
				{
					;echo "AutoEquip: Entered Bag if"
					if ${This.ShouldEquip[${BaggieSearch.GUID[${counterx}]},Bag]}
					{
						echo "AutoEquip: Attempting to equip ${BaggieSearch.GUID[${counterx}]} aka ${BaggieSearch.Name[${counterx}]}"
						Object[${BaggieSearch.GUID[${counterx}]}]:PickUp
						WoWScript PickupInventoryItem(ContainerIDToInventoryID(${This.BagWeight[${BaggieSearch.GUID[${counterx}]}]}))
						WoWScript EquipPendingItem(0)
						This:SetLastEquipAttempt
						return
					}	
				}
				counterx:Inc
			}
			while ${counterx} <= ${BaggieSearch.Count} && ${This.CanAttemptEquip}
		}
	}
	member CanAttemptEquip()
	{
		if ${LavishScript.RunningTime} > ${LastEquipAttempt}
		{
			return TRUE
		}
		return FALSE
	}
	method SetLastEquipAttempt()
	{
		echo "AutoEquip: Setting Last Equip Attempt"
		LastEquipAttempt:Set[${Math.Calc[${LavishScript.RunningTime} + 1500]}]
	}
	member GetTooltipTextStat(string ItemLink, string TheStat)
	{
		variable int TotalLines
		variable int i
		variable int Bonus = 1
		variable int CurrentLine = 2
		WowScript GameTooltip:SetOwner(UIParent,"ANCHOR_NONE")
		WoWScript GameTooltip:SetHyperlink("${ItemLink}")
		TotalLines:Set[${WoWScript["GameTooltip:NumLines()"]}]
		echo "AutoEquip: Tooltip: Total Lines: ${TotalLines}"
		echo "AutoEquip: ${ItemLink} Item link, ${TheStat} Stat"
		for(i:Set[1];${i} < ${TotalLines};i:Inc)
		{
			This.ToolTipText:Insert[${String["${WoWScript[GameTooltipTextLeft${i}:GetText()]}"]}]
		}
		WoWScript GameTooltip:Hide()
		do
		{
			if ${This.ToolTipText.Get[${CurrentLine}].Find[${TheStat}]}
			{
				do
				{
					if ${This.ToolTipText.Get[${CurrentLine}].Find[+${Bonus} ${TheStat}]}
					{
						echo "AutoEquip: blahrg ${This.ToolTipText.Get[${CurrentLine}]}"
						echo "AutoEquip: plus ${Bonus} ${TheStat}"
						return ${Bonus}
					}
					Bonus:Inc
				}
				while ${Bonus} <= 50
			}
			
		}
		while ${CurrentLine:Inc} <= ${TotalLines}
                return 0
	}