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
}