/* 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 }