Hey peeps, thought I would release this before I head off to the gym today I spent a lot of time researching all these Mod Structs so please If you find this useful drop a "Thanks", I would appreciate it!
This removes all need to define by ModelID since if your farming OS skins your inventory can fill up fast and you will do less runs because while your sleeping your Char repeatedly goes to the merchant with a full inventory of really shit Magmas Shields/Dragon Staves/Platinum Staves/Echovald Shields etc.
So far it is all working as perfectly as I wish it to, however I have noticed it keeping a very small amount of weird items, not enough to cause a problem though.
Works with perfect Shields, Staves, Caster items and the currently expensive runes.
UPDATED 29/01/2024 - Added more changes to caster function to find more combinations of desired mods. Also added +44/+43 & +10vsDemons as desired shield
; ModStructs
Code:
Func IsPerfectShield($aItem)
Local $ModStruct = GetModStruct($aItem)
; Universal mods
Local $Plus30 = StringInStr($ModStruct, "001E4823", 0, 1) ; Mod struct for +30 (shield only?)
Local $Minus3Hex = StringInStr($ModStruct, "3009820", 0, 1) ; Mod struct for -3wHex (shield only?)
Local $Minus2Stance = StringInStr($ModStruct, "200A820", 0, 1) ; Mod Struct for -2Stance
Local $Minus2Ench = StringInStr($ModStruct, "2008820", 0, 1) ; Mod struct for -2Ench
Local $Plus45Stance = StringInStr($ModStruct, "02D8823", 0, 1) ; For +45Stance
Local $Plus45Ench = StringInStr($ModStruct, "02D6823", 0, 1) ; Mod struct for +45ench
Local $Plus44Ench = StringInStr($ModStruct, "02C6823", 0, 1) ; For +44/+10Demons
Local $Plus43Ench =StringInStr($ModStruct, "02B6823", 0, 1) ; For +43/+10Demons
Local $Minus520 = StringInStr($ModStruct, "5147820", 0, 1) ; For -5(20%)
; +1 20% Mods ~ Updated 08/10/2018 - FINISHED
Local $PlusIllusion = StringInStr($ModStruct, "0118240", 0, 1) ; +1 Illu 20%
Local $PlusDomination = StringInStr($ModStruct, "0218240", 0, 1) ; +1 Dom 20%
Local $PlusInspiration = StringInStr($ModStruct, "0318240", 0, 1) ; +1 Insp 20%
Local $PlusBlood = StringInStr($ModStruct, "0418240", 0, 1) ; +1 Blood 20%
Local $PlusDeath = StringInStr($ModStruct, "0518240", 0, 1) ; +1 Death 20%
Local $PlusSoulReap = StringInStr($ModStruct, "0618240", 0, 1) ; +1 SoulR 20%
Local $PlusCurses = StringInStr($ModStruct, "0718240", 0, 1) ; +1 Curses 20%
Local $PlusAir = StringInStr($ModStruct, "0818240", 0, 1) ; +1 Air 20%
Local $PlusEarth = StringInStr($ModStruct, "0918240", 0, 1) ; +1 Earth 20%
Local $PlusFire = StringInStr($ModStruct, "0A18240", 0, 1) ; +1 Fire 20%
Local $PlusWater = StringInStr($ModStruct, "0B18240", 0, 1) ; +1 Water 20%
Local $PlusHealing = StringInStr($ModStruct, "0D18240", 0, 1) ; +1 Heal 20%
Local $PlusSmite = StringInStr($ModStruct, "0E18240", 0, 1) ; +1 Smite 20%
Local $PlusProt = StringInStr($ModStruct, "0F18240", 0, 1) ; +1 Prot 20%
Local $PlusDivine = StringInStr($ModStruct, "1018240", 0, 1) ; +1 Divine 20%
; +10vsMonster Mods
Local $PlusDemons = StringInStr($ModStruct, "A0848210", 0, 1) ; +10vs Demons
Local $PlusDragons = StringInStr($ModStruct, "A0948210", 0, 1) ; +10vs Dragons
Local $PlusPlants = StringInStr($ModStruct, "A0348210", 0, 1) ; +10vs Plants
Local $PlusUndead = StringInStr($ModStruct, "A0048210", 0, 1) ; +10vs Undead
Local $PlusTengu = StringInStr($ModStruct, "A0748210", 0, 1) ; +10vs Tengu
; New +10vsMonster Mods 07/10/2018 - Thanks to Savsuds
Local $PlusCharr = StringInStr($ModStruct, "0A014821", 0 ,1) ; +10vs Charr
Local $PlusTrolls = StringInStr($ModStruct, "0A024821", 0 ,1) ; +10vs Trolls
Local $PlusSkeletons = StringInStr($ModStruct, "0A044821", 0 ,1) ; +10vs Skeletons
Local $PlusGiants = StringInStr($ModStruct, "0A054821", 0 ,1) ; +10vs Giants
Local $PlusDwarves = StringInStr($ModStruct, "0A064821", 0 ,1) ; +10vs Dwarves
Local $PlusDragons = StringInStr($ModStruct, "0A094821", 0 ,1) ; +10vs Dragons
Local $PlusOgres = StringInStr($ModStruct, "0A0A4821", 0 ,1) ; +10vs Ogres
; +10vs Dmg
Local $PlusPiercing = StringInStr($ModStruct, "A0118210", 0, 1) ; +10vs Piercing
Local $PlusLightning = StringInStr($ModStruct, "A0418210", 0, 1) ; +10vs Lightning
Local $PlusVsEarth = StringInStr($ModStruct, "A0B18210", 0, 1) ; +10vs Earth
Local $PlusCold = StringInStr($ModStruct, "A0318210", 0, 1) ; +10 vs Cold
Local $PlusSlashing = StringInStr($ModStruct, "A0218210", 0, 1) ; +10vs Slashing
Local $PlusVsFire = StringInStr($ModStruct, "A0518210", 0, 1) ; +10vs Fire
; New +10vs Dmg 08/10/2018
Local $PlusBlunt = StringInStr($ModStruct, "A0018210", 0, 1) ; +10vs Blunt
If $Plus30 > 0 Then
If $PlusDemons > 0 Or $PlusPiercing > 0 Or $PlusDragons > 0 Or $PlusLightning > 0 Or $PlusVsEarth > 0 Or $PlusPlants > 0 Or $PlusCold > 0 Or $PlusUndead > 0 Or $PlusSlashing > 0 Or $PlusTengu > 0 Or $PlusVsFire > 0 Then
Return True
ElseIf $PlusCharr > 0 Or $PlusTrolls > 0 Or $PlusSkeletons > 0 Or $PlusGiants > 0 Or $PlusDwarves > 0 Or $PlusDragons > 0 Or $PlusOgres > 0 Or $PlusBlunt > 0 Then
Return True
ElseIf $PlusDomination > 0 Or $PlusDivine > 0 Or $PlusSmite > 0 Or $PlusHealing > 0 Or $PlusProt > 0 Or $PlusFire > 0 Or $PlusWater > 0 Or $PlusAir > 0 Or $PlusEarth > 0 Or $PlusDeath > 0 Or $PlusBlood > 0 Or $PlusIllusion > 0 Or $PlusInspiration > 0 Or $PlusSoulReap > 0 Or $PlusCurses > 0 Then
Return True
ElseIf $Minus2Stance > 0 Or $Minus2Ench > 0 Or $Minus520 > 0 Or $Minus3Hex > 0 Then
Return True
Else
Return False
EndIf
EndIf
If $Plus45Ench > 0 Then
If $PlusDemons > 0 Or $PlusPiercing > 0 Or $PlusDragons > 0 Or $PlusLightning > 0 Or $PlusVsEarth > 0 Or $PlusPlants > 0 Or $PlusCold > 0 Or $PlusUndead > 0 Or $PlusSlashing > 0 Or $PlusTengu > 0 Or $PlusVsFire > 0 Then
Return True
ElseIf $PlusCharr > 0 Or $PlusTrolls > 0 Or $PlusSkeletons > 0 Or $PlusGiants > 0 Or $PlusDwarves > 0 Or $PlusDragons > 0 Or $PlusOgres > 0 Or $PlusBlunt > 0 Then
Return True
ElseIf $Minus2Ench > 0 Then
Return True
ElseIf $PlusDomination > 0 Or $PlusDivine > 0 Or $PlusSmite > 0 Or $PlusHealing > 0 Or $PlusProt > 0 Or $PlusFire > 0 Or $PlusWater > 0 Or $PlusAir > 0 Or $PlusEarth > 0 Or $PlusDeath > 0 Or $PlusBlood > 0 Or $PlusIllusion > 0 Or $PlusInspiration > 0 Or $PlusSoulReap > 0 Or $PlusCurses > 0 Then
Return True
Else
Return False
EndIf
EndIf
If $Minus2Ench > 0 Then
If $PlusDemons > 0 Or $PlusPiercing > 0 Or $PlusDragons > 0 Or $PlusLightning > 0 Or $PlusVsEarth > 0 Or $PlusPlants > 0 Or $PlusCold > 0 Or $PlusUndead > 0 Or $PlusSlashing > 0 Or $PlusTengu > 0 Or $PlusVsFire > 0 Then
Return True
ElseIf $PlusCharr > 0 Or $PlusTrolls > 0 Or $PlusSkeletons > 0 Or $PlusGiants > 0 Or $PlusDwarves > 0 Or $PlusDragons > 0 Or $PlusOgres > 0 Or $PlusBlunt > 0 Then
Return True
ElseIf $PlusDomination > 0 Or $PlusDivine > 0 Or $PlusSmite > 0 Or $PlusHealing > 0 Or $PlusProt > 0 Or $PlusFire > 0 Or $PlusWater > 0 Or $PlusAir > 0 Or $PlusEarth > 0 Or $PlusDeath > 0 Or $PlusBlood > 0 Or $PlusIllusion > 0 Or $PlusInspiration > 0 Or $PlusSoulReap > 0 Or $PlusCurses > 0 Then
Return True
EndIf
EndIf
If $Plus44Ench > 0 Or $Plus43Ench > 0 Then
If $PlusDemons > 0 Then
Return True
EndIf
EndIf
If $Plus45Stance > 0 Then
If $Minus2Stance > 0 Then
Return True
EndIf
EndIf
Return False
EndFunc
Func IsPerfectStaff($aItem)
Local $ModStruct = GetModStruct($aItem)
Local $A = GetItemAttribute($aItem)
; Ele mods
Local $Fire20Casting = StringInStr($ModStruct, "0A141822", 0, 1) ; Mod struct for 20% fire
Local $Water20Casting = StringInStr($ModStruct, "0B141822", 0, 1) ; Mod struct for 20% water
Local $Air20Casting = StringInStr($ModStruct, "08141822", 0, 1) ; Mod struct for 20% air
Local $Earth20Casting = StringInStr($ModStruct, "09141822", 0, 1) ; Mod Struct for 20% Earth
Local $Energy20Casting = StringInStr($ModStruct, "0C141822", 0, 1) ; Mod Struct for 20% Energy Storage (Doesnt drop)
; Monk mods
Local $Smite20Casting = StringInStr($ModStruct, "0E141822", 0, 1) ; Mod struct for 20% smite
Local $Divine20Casting = StringInStr($ModStruct, "10141822", 0, 1) ; Mod struct for 20% divine
Local $Healing20Casting = StringInStr($ModStruct, "0D141822", 0, 1) ; Mod struct for 20% healing
Local $Protection20Casting = StringInStr($ModStruct, "0F141822", 0, 1) ; Mod struct for 20% protection
; Rit mods
Local $Channeling20Casting = StringInStr($ModStruct, "22141822", 0, 1) ; Mod struct for 20% channeling
Local $Restoration20Casting = StringInStr($ModStruct, "21141822", 0, 1) ; Mod Struct for 20% Restoration
Local $Communing20Casting = StringInStr($ModStruct, "20141822", 0, 1) ; Mod Struct for 20% Communing
Local $Spawning20Casting = StringInStr($ModStruct, "24141822", 0, 1) ; Mod Struct for 20% Spawning (Unconfirmed)
; Mes mods
Local $Illusion20Casting = StringInStr($ModStruct, "01141822", 0, 1) ; Mod struct for 20% Illusion
Local $Domination20Casting = StringInStr($ModStruct, "02141822", 0, 1) ; Mod struct for 20% domination
Local $Inspiration20Casting = StringInStr($ModStruct, "03141822", 0, 1) ; Mod struct for 20% Inspiration
; Necro mods
Local $Death20Casting = StringInStr($ModStruct, "05141822", 0, 1) ; Mod struct for 20% death
Local $Blood20Casting = StringInStr($ModStruct, "04141822", 0, 1) ; Mod Struct for 20% Blood
Local $SoulReap20Casting = StringInStr($ModStruct, "06141822", 0, 1) ; Mod Struct for 20% Soul Reap (Doesnt drop)
Local $Curses20Casting = StringInStr($ModStruct, "07141822", 0, 1) ; Mod Struct for 20% Curses
Switch $A
Case 1 ; Illusion
If $Illusion20Casting > 0 Then
Return True
Else
Return False
EndIf
Case 2 ; Domination
If $Domination20Casting > 0 Then
Return True
Else
Return False
EndIf
Case 3 ; Inspiration - Doesnt Drop
If $Inspiration20Casting > 0 Then
Return True
Else
Return False
EndIf
Case 4 ; Blood
If $Blood20Casting > 0 Then
Return True
Else
Return False
EndIf
Case 5 ; Death
If $Death20Casting > 0 Then
Return True
Else
Return False
EndIf
Case 6 ; SoulReap - Doesnt Drop
If $SoulReap20Casting > 0 Then
Return True
Else
Return False
EndIf
Case 7 ; Curses
If $Curses20Casting > 0 Then
Return True
Else
Return False
EndIf
Case 8 ; Air
If $Air20Casting > 0 Then
Return True
Else
Return False
EndIf
Case 9 ; Earth
If $Earth20Casting > 0 Then
Return True
Else
Return False
EndIf
Case 10 ; Fire
If $Fire20Casting > 0 Then
Return True
Else
Return False
EndIf
Case 11 ; Water
If $Water20Casting > 0 Then
Return True
Else
Return False
EndIf
Case 12 ; Energy Storage
If $Air20Casting > 0 Or $Earth20Casting > 0 Or $Fire20Casting > 0 Or $Water20Casting > 0 Then
Return True
Else
Return False
EndIf
Case 13 ; Healing
If $Healing20Casting > 0 Then
Return True
Else
Return False
EndIf
Case 14 ; Smiting
If $Smite20Casting > 0 Then
Return True
Else
Return False
EndIf
Case 15 ; Protection
If $Protection20Casting > 0 Then
Return True
Else
Return False
EndIf
Case 16 ; Divine
If $Healing20Casting > 0 Or $Protection20Casting > 0 Or $Divine20Casting > 0 Then
Return True
Else
Return False
EndIf
Case 32 ; Communing
If $Communing20Casting > 0 Then
Return True
Else
Return False
EndIf
Case 33 ; Restoration
If $Restoration20Casting > 0 Then
Return True
Else
Return False
EndIf
Case 34 ; Channeling
If $Channeling20Casting > 0 Then
Return True
Else
Return False
EndIf
Case 36 ; Spawning - Unconfirmed
If $Spawning20Casting > 0 Then
Return True
Else
Return False
EndIf
EndSwitch
Return False
EndFunc
Func IsPerfectCaster($aItem)
Local $ModStruct = GetModStruct($aItem)
Local $A = GetItemAttribute($aItem)
; Universal mods
Local $PlusFive = StringInStr($ModStruct, "05320823", 0, 1) ; Mod struct for +5^50
Local $PlusFiveEnch = StringInStr($ModStruct, "0500F822", 0, 1)
Local $EnergyAlways15 = StringInStr($ModStruct, "0F00D822", 0 ,1) ; Energy +15
Local $EnergyRegen = StringInStr($ModStruct, "0100C820", 0 ,1) ; Energy regeneration -1
Local $10Cast = StringInStr($ModStruct, "000A0822", 0, 1) ; Mod struct for 10% cast
Local $10Recharge = StringInStr($ModStruct, "000AA823", 0, 1) ; Mod struct for 10% recharge
Local $Plus30 = StringInStr($ModStruct, "001E4823", 0, 1) ; Mod struct for +30
Local $Plus45Ench = StringInStr($ModStruct, "02D6823", 0, 1) ; Mod struct for +45ench
; Plus 1 Mods
Local $PlusIllusion = StringInStr($ModStruct, "0118240", 0, 1) ; +1 Illu 20%
Local $PlusDomination = StringInStr($ModStruct, "0218240", 0, 1) ; +1 Dom 20%
Local $PlusInspiration = StringInStr($ModStruct, "0318240", 0, 1) ; +1 Insp 20%
Local $PlusBlood = StringInStr($ModStruct, "0418240", 0, 1) ; +1 Blood 20%
Local $PlusDeath = StringInStr($ModStruct, "0518240", 0, 1) ; +1 Death 20%
Local $PlusSoulReap = StringInStr($ModStruct, "0618240", 0, 1) ; +1 SoulR 20%
Local $PlusCurses = StringInStr($ModStruct, "0718240", 0, 1) ; +1 Curses 20%
Local $PlusAir = StringInStr($ModStruct, "0818240", 0, 1) ; +1 Air 20%
Local $PlusEarth = StringInStr($ModStruct, "0918240", 0, 1) ; +1 Earth 20%
Local $PlusFire = StringInStr($ModStruct, "0A18240", 0, 1) ; +1 Fire 20%
Local $PlusWater = StringInStr($ModStruct, "0B18240", 0, 1) ; +1 Water 20%
Local $PlusHealing = StringInStr($ModStruct, "0D18240", 0, 1) ; +1 Heal 20%
Local $PlusSmite = StringInStr($ModStruct, "0E18240", 0, 1) ; +1 Smite 20%
Local $PlusProt = StringInStr($ModStruct, "0F18240", 0, 1) ; +1 Prot 20%
Local $PlusDivine = StringInStr($ModStruct, "1018240", 0, 1) ; +1 Divine 20%
; Ele mods
Local $Fire20Casting = StringInStr($ModStruct, "0A141822", 0, 1) ; Mod struct for 20% fire
Local $Fire20Recharge = StringInStr($ModStruct, "0A149823", 0, 1)
Local $Water20Casting = StringInStr($ModStruct, "0B141822", 0, 1) ; Mod struct for 20% water
Local $Water20Recharge = StringInStr($ModStruct, "0B149823", 0, 1)
Local $Air20Casting = StringInStr($ModStruct, "08141822", 0, 1) ; Mod struct for 20% air
Local $Air20Recharge = StringInStr($ModStruct, "08149823", 0, 1)
Local $Earth20Casting = StringInStr($ModStruct, "09141822", 0, 1)
Local $Earth20Recharge = StringInStr($ModStruct, "09149823", 0, 1)
Local $Energy20Casting = StringInStr($ModStruct, "0C141822", 0, 1)
Local $Energy20Recharge = StringInStr($ModStruct, "0C149823", 0, 1)
; Monk mods
Local $Smiting20Casting = StringInStr($ModStruct, "0E141822", 0, 1) ; Mod struct for 20% smite
Local $Smiting20Recharge = StringInStr($ModStruct, "0E149823", 0, 1)
Local $Divine20Casting = StringInStr($ModStruct, "10141822", 0, 1) ; Mod struct for 20% divine
Local $Divine20Recharge = StringInStr($ModStruct, "10149823", 0, 1)
Local $Healing20Casting = StringInStr($ModStruct, "0D141822", 0, 1) ; Mod struct for 20% healing
Local $Healing20Recharge = StringInStr($ModStruct, "0D149823", 0, 1)
Local $Protection20Casting = StringInStr($ModStruct, "0F141822", 0, 1) ; Mod struct for 20% protection
Local $Protection20Recharge = StringInStr($ModStruct, "0F149823", 0, 1)
; Rit mods
Local $Channeling20Casting = StringInStr($ModStruct, "22141822", 0, 1) ; Mod struct for 20% channeling
Local $Channeling20Recharge = StringInStr($ModStruct, "22149823", 0, 1)
Local $Restoration20Casting = StringInStr($ModStruct, "21141822", 0, 1)
Local $Restoration20Recharge = StringInStr($ModStruct, "21149823", 0, 1)
Local $Communing20Casting = StringInStr($ModStruct, "20141822", 0, 1)
Local $Communing20Recharge = StringInStr($ModStruct, "20149823", 0, 1)
Local $Spawning20Casting = StringInStr($ModStruct, "24141822", 0, 1) ; Spawning - Unconfirmed
Local $Spawning20Recharge = StringInStr($ModStruct, "24149823", 0, 1) ; Spawning - Unconfirmed
; Mes mods
Local $Illusion20Recharge = StringInStr($ModStruct, "01149823", 0, 1)
Local $Illusion20Casting = StringInStr($ModStruct, "01141822", 0, 1)
Local $Domination20Casting = StringInStr($ModStruct, "02141822", 0, 1) ; Mod struct for 20% domination
Local $Domination20Recharge = StringInStr($ModStruct, "02149823", 0, 1) ; Mod struct for 20% domination recharge
Local $Inspiration20Recharge = StringInStr($ModStruct, "03149823", 0, 1)
Local $Inspiration20Casting = StringInStr($ModStruct, "03141822", 0, 1)
; Necro mods
Local $Death20Casting = StringInStr($ModStruct, "05141822", 0, 1) ; Mod struct for 20% death
Local $Death20Recharge = StringInStr($ModStruct, "05149823", 0, 1)
Local $Blood20Recharge = StringInStr($ModStruct, "04149823", 0, 1)
Local $Blood20Casting = StringInStr($ModStruct, "04141822", 0, 1)
Local $SoulReap20Recharge = StringInStr($ModStruct, "06149823", 0, 1)
Local $SoulReap20Casting = StringInStr($ModStruct, "06141822", 0, 1)
Local $Curses20Recharge = StringInStr($ModStruct, "07149823", 0, 1)
Local $Curses20Casting = StringInStr($ModStruct, "07141822", 0, 1)
Switch $A
Case 1 ; Illusion
If $PlusFive > 0 Or $PlusFiveEnch > 0 Then
If $Illusion20Casting > 0 Or $Illusion20Recharge > 0 Then
Return True
EndIf
EndIf
If $Illusion20Recharge > 0 Or $Illusion20Casting > 0 Then
If $10Cast > 0 Or $10Recharge > 0 Or ($EnergyAlways15 > 0 And $EnergyRegen > 0) Or $PlusIllusion > 0 Then
Return True
EndIf
EndIf
If $Illusion20Recharge > 0 Then
If $Illusion20Casting > 0 Then
Return True
EndIf
EndIf
If $Plus30 > 0 Or $Plus45Ench > 0 Then
If $Illusion20Casting > 0 Or $Illusion20Recharge > 0 Or $PlusIllusion > 0 Or $10Recharge > 0 Then
Return True
EndIf
EndIf
Return False
Case 2 ; Domination
If $PlusFive > 0 Or $PlusFiveEnch > 0 Then
If $Domination20Casting > 0 Or $Domination20Recharge > 0 Then
Return True
EndIf
EndIf
If $Domination20Recharge > 0 Or $Domination20Casting > 0 Then
If $10Cast > 0 Or $10Recharge > 0 Or ($EnergyAlways15 > 0 And $EnergyRegen > 0) Or $PlusDomination > 0 Then
Return True
EndIf
EndIf
If $Domination20Recharge > 0 Then
If $Domination20Casting > 0 Then
Return True
EndIf
EndIf
If $Plus30 > 0 Or $Plus45Ench > 0 Then
If $Domination20Casting > 0 Or $Domination20Recharge > 0 Or $PlusDomination > 0 Or $10Recharge > 0 Then
Return True
EndIf
EndIf
Return False
Case 3 ; Inspiration
If $PlusFive > 0 Or $PlusFiveEnch > 0 Then
If $Inspiration20Casting > 0 Or $Inspiration20Recharge > 0 Then
Return True
EndIf
EndIf
If $Inspiration20Recharge > 0 Or $Inspiration20Casting > 0 Then
If $10Cast > 0 Or $10Recharge > 0 Or ($EnergyAlways15 > 0 And $EnergyRegen > 0) Or $PlusInspiration > 0 Then
Return True
EndIf
EndIf
If $Inspiration20Recharge > 0 Then
If $Inspiration20Casting > 0 Then
Return True
EndIf
EndIf
If $Plus30 > 0 Then
If $Inspiration20Casting > 0 Or $Inspiration20Recharge > 0 Or $PlusInspiration > 0 Or $10Recharge > 0 Then
Return True
EndIf
EndIf
If $PlusIllusion > 0 Then
If $Illusion20Casting > 0 Or $Illusion20Recharge > 0 Then
Return True ; Perfect Illusion
EndIf
EndIf
If $PlusDomination > 0 Then
If $Domination20Casting > 0 Or $Domination20Recharge > 0 Then
Return True ; Perfect Domination
EndIf
EndIf
Return False
Case 4 ; Blood
If $PlusFive > 0 Or $PlusFiveEnch > 0 Then
If $Blood20Casting > 0 Or $Blood20Recharge > 0 Then
Return True
EndIf
EndIf
If $Blood20Recharge > 0 Or $Blood20Casting > 0 Then
If $10Cast > 0 Or $10Recharge > 0 Or ($EnergyAlways15 > 0 And $EnergyRegen > 0) Or $PlusBlood > 0 Then
Return True
EndIf
EndIf
If $Blood20Recharge > 0 Then
If $Blood20Casting > 0 Then
Return True
EndIf
EndIf
If $Plus30 > 0 Or $Plus45Ench > 0 Then
If $Blood20Casting > 0 Or $Blood20Recharge > 0 Or $PlusBlood > 0 Or $10Recharge > 0 Then
Return True
EndIf
EndIf
Return False
Case 5 ; Death
If $PlusFive > 0 Or $PlusFiveEnch > 0 Then
If $Death20Casting > 0 Or $Death20Recharge > 0 Then
Return True
EndIf
EndIf
If $Death20Recharge > 0 Or $Death20Casting > 0 Then
If $10Cast > 0 Or $10Recharge > 0 Or ($EnergyAlways15 > 0 And $EnergyRegen > 0) Or $PlusDeath > 0 Then
Return True
EndIf
EndIf
If $Death20Recharge > 0 Then
If $Death20Casting > 0 Then
Return True
EndIf
EndIf
If $Plus30 > 0 Or $Plus45Ench > 0 Then
If $Death20Casting > 0 Or $Death20Recharge > 0 Or $PlusDeath > 0 Or $10Recharge > 0 Then
Return True
EndIf
EndIf
Return False
Case 6 ; SoulReap - Doesnt drop?
If $PlusFive > 0 Or $PlusFiveEnch > 0 Then
If $SoulReap20Casting > 0 Or $SoulReap20Recharge > 0 Then
Return True
EndIf
EndIf
If $SoulReap20Recharge > 0 Or $SoulReap20Casting > 0 Then
If $10Cast > 0 Or $10Recharge > 0 Or ($EnergyAlways15 > 0 And $EnergyRegen > 0) Or $PlusSoulReap > 0 Then
Return True
EndIf
EndIf
If $SoulReap20Recharge > 0 Then
If $SoulReap20Casting > 0 Then
Return True
EndIf
EndIf
If $Plus30 > 0 Or $Plus45Ench > 0 Then
If $SoulReap20Casting > 0 Or $SoulReap20Recharge > 0 Or $PlusSoulReap > 0 Or $10Recharge > 0 Or $Blood20Casting > 0 Or $Blood20Recharge > 0 Or $Death20Casting > 0 Or $Death20Recharge > 0 Or $Curses20Casting > 0 Or $Curses20Recharge > 0 Then
Return True
EndIf
EndIf
If ($EnergyAlways15 > 0 And $EnergyRegen > 0) Then
If $Blood20Casting > 0 Or $Blood20Recharge > 0 Or $Death20Casting > 0 Or $Death20Recharge > 0 Or $Curses20Casting > 0 Or $Curses20Recharge > 0 Or $SoulReap20Casting > 0 Or $SoulReap20Recharge > 0 Then
Return True
EndIf
EndIf
If $PlusDeath > 0 Then
If $Death20Casting > 0 Or $Death20Recharge > 0 Then
Return True ; Perfect Death
EndIf
EndIf
If $PlusBlood > 0 Then
If $Blood20Casting > 0 Or $Blood20Recharge > 0 Then
Return True ; Perfect Blood
EndIf
EndIf
If $PlusCurses > 0 Then
If $Curses20Casting > 0 Or $Curses20Recharge > 0 Then
Return True
EndIf
EndIf
Return False
Case 7 ; Curses
If $PlusFive > 0 Or $PlusFiveEnch > 0 Then
If $Curses20Casting > 0 Or $Curses20Recharge > 0 Then
Return True
EndIf
EndIf
If $Curses20Recharge > 0 Or $Curses20Casting > 0 Then
If $10Cast > 0 Or $10Recharge > 0 Or ($EnergyAlways15 > 0 And $EnergyRegen > 0) Or $PlusCurses > 0 Then
Return True
EndIf
EndIf
If $Curses20Recharge > 0 Then
If $Curses20Casting > 0 Then
Return True
EndIf
EndIf
If $Plus30 > 0 Or $Plus45Ench > 0 Then
If $Curses20Casting > 0 Or $Curses20Recharge > 0 Or $PlusCurses > 0 Or $10Recharge > 0 Then
Return True
EndIf
EndIf
Return False
Case 8 ; Air
If $PlusFive > 0 Or $PlusFiveEnch > 0 Then
If $Air20Casting > 0 Or $Air20Recharge > 0 Then
Return True
EndIf
EndIf
If $Air20Recharge > 0 Or $Air20Casting > 0 Then
If $10Cast > 0 Or $10Recharge > 0 Or ($EnergyAlways15 > 0 And $EnergyRegen > 0) Or $PlusAir > 0 Then
Return True
EndIf
EndIf
If $Air20Recharge > 0 Then
If $Air20Casting > 0 Then
Return True
EndIf
EndIf
If $Plus30 > 0 Or $Plus45Ench > 0 Then
If $Air20Casting > 0 Or $Air20Recharge > 0 Or $PlusAir > 0 Or $10Recharge > 0 Then
Return True
EndIf
EndIf
Return False
Case 9 ; Earth
If $PlusFive > 0 Or $PlusFiveEnch > 0 Then
If $Earth20Casting > 0 Or $Earth20Recharge > 0 Then
Return True
EndIf
EndIf
If $Earth20Recharge > 0 Or $Earth20Casting > 0 Then
If $10Cast > 0 Or $10Recharge > 0 Or ($EnergyAlways15 > 0 And $EnergyRegen > 0) Or $PlusEarth > 0 Then
Return True
EndIf
EndIf
If $Earth20Recharge > 0 Then
If $Earth20Casting > 0 Then
Return True
EndIf
EndIf
If $Plus30 > 0 Or $Plus45Ench > 0 Then
If $Earth20Casting > 0 Or $Earth20Recharge > 0 Or $PlusEarth > 0 Or $10Recharge > 0 Then
Return True
EndIf
EndIf
Return False
Case 10 ; Fire
If $PlusFive > 0 Or $PlusFiveEnch > 0 Then
If $Fire20Casting > 0 Or $Fire20Recharge > 0 Then
Return True
EndIf
EndIf
If $Fire20Recharge > 0 Or $Fire20Casting > 0 Then
If $10Cast > 0 Or $10Recharge > 0 Or ($EnergyAlways15 > 0 And $EnergyRegen > 0) Or $PlusFire > 0 Then
Return True
EndIf
EndIf
If $Fire20Recharge > 0 Then
If $Fire20Casting > 0 Then
Return True
EndIf
EndIf
If $Plus30 > 0 Or $Plus45Ench > 0 Then
If $Fire20Casting > 0 Or $Fire20Recharge > 0 Or $PlusFire > 0 Or $10Recharge > 0 Then
Return True
EndIf
EndIf
Return False
Case 11 ; Water
If $PlusFive > 0 Or $PlusFiveEnch > 0 Then
If $Water20Casting > 0 Or $Water20Recharge > 0 Then
Return True
EndIf
EndIf
If $Water20Recharge > 0 Or $Water20Casting > 0 Then
If $10Cast > 0 Or $10Recharge > 0 Or ($EnergyAlways15 > 0 And $EnergyRegen > 0) Or $PlusWater > 0 Then
Return True
EndIf
EndIf
If $Water20Recharge > 0 Then
If $Water20Casting > 0 Then
Return True
EndIf
EndIf
If $Plus30 > 0 Or $Plus45Ench > 0 Then
If $Water20Casting > 0 Or $Water20Recharge > 0 Or $PlusWater > 0 Or $10Recharge > 0 Then
Return True
EndIf
EndIf
Return False
Case 12 ; Energy Storage
If $PlusFive > 0 Or $PlusFiveEnch > 0 Then
If $Energy20Casting > 0 Or $Energy20Recharge > 0 Or $Water20Casting > 0 Or $Water20Recharge > 0 Or $Fire20Casting > 0 Or $Fire20Recharge > 0 Or $Earth20Casting > 0 Or $Earth20Recharge > 0 Or $Air20Casting > 0 Or $Air20Recharge > 0 Then
Return True
EndIf
EndIf
If $Energy20Recharge > 0 Or $Energy20Casting > 0 Then
If $10Cast > 0 Or $10Recharge > 0 Or $Water20Casting > 0 Or $Water20Recharge > 0 Or $Fire20Casting > 0 Or $Fire20Recharge > 0 Or $Earth20Casting > 0 Or $Earth20Recharge > 0 Or $Air20Casting > 0 Or $Air20Recharge > 0 Then
Return True
EndIf
EndIf
If $Energy20Recharge > 0 Then
If $Energy20Casting > 0 Then
Return True
EndIf
EndIf
If $10Cast > 0 Or $10Recharge > 0 Then
If $Water20Casting > 0 Or $Water20Recharge > 0 Or $Fire20Casting > 0 Or $Fire20Recharge > 0 Or $Earth20Casting > 0 Or $Earth20Recharge > 0 Or $Air20Casting > 0 Or $Air20Recharge > 0 Then
Return True
EndIf
EndIf
If $Plus30 > 0 Or $Plus45Ench > 0 Then
If $Water20Casting > 0 Or $Water20Recharge > 0 Or $Fire20Casting > 0 Or $Fire20Recharge > 0 Or $Earth20Casting > 0 Or $Earth20Recharge > 0 Or $Air20Casting > 0 Or $Air20Recharge > 0 Or $10Recharge > 0 Then
Return True
EndIf
EndIf
If ($EnergyAlways15 > 0 And $EnergyRegen > 0) Then
If $Water20Casting > 0 Or $Water20Recharge > 0 Or $Fire20Casting > 0 Or $Fire20Recharge > 0 Or $Earth20Casting > 0 Or $Earth20Recharge > 0 Or $Air20Casting > 0 Or $Air20Recharge > 0 Or $10Recharge > 0 Then
Return True
EndIf
EndIf
If $PlusAir > 0 Then
If $Air20Casting > 0 Or $Air20Recharge > 0 Then
Return True ; Perfect Air
EndIf
EndIf
If $PlusFire > 0 Then
If $Fire20Casting > 0 Or $Fire20Recharge > 0 Then
Return True ; Perfect Fire
EndIf
EndIf
If $PlusWater > 0 Then
If $Water20Casting > 0 Or $Water20Recharge > 0 Then
Return True ; Perfect Water
EndIf
EndIf
If $PlusEarth > 0 Then
If $Earth20Casting > 0 Or $Earth20Recharge > 0 Then
Return True ; Perfect Earth
EndIf
EndIf
Return False
Case 13 ; Healing
If $PlusFive > 0 Or $PlusFiveEnch > 0 Then
If $Healing20Casting > 0 Or $Healing20Recharge > 0 Then
Return True
EndIf
EndIf
If $Healing20Recharge > 0 Or $Healing20Casting > 0 Then
If $10Cast > 0 Or $10Recharge > 0 Or ($EnergyAlways15 > 0 And $EnergyRegen > 0) Then
Return True
EndIf
EndIf
If $Healing20Recharge > 0 Then
If $Healing20Casting > 0 Then
Return True
EndIf
EndIf
If $Plus30 > 0 Or $Plus45Ench > 0 Then
If $Healing20Casting > 0 Or $Healing20Recharge > 0 Or $PlusHealing > 0 Or $10Recharge > 0 Then
Return True
EndIf
EndIf
Return False
Case 14 ; Smiting
If $PlusFive > 0 Or $PlusFiveEnch > 0 Then
If $Smiting20Casting > 0 Or $Smiting20Recharge > 0 Then
Return True
EndIf
EndIf
If $Smiting20Recharge > 0 Or $Smiting20Casting > 0 Then
If $10Cast > 0 Or $10Recharge > 0 Or ($EnergyAlways15 > 0 And $EnergyRegen > 0) Then
Return True
EndIf
EndIf
If $Smiting20Recharge > 0 Then
If $Smiting20Casting > 0 Then
Return True
EndIf
EndIf
If $Plus30 > 0 Or $Plus45Ench > 0 Then
If $Smiting20Casting > 0 Or $Smiting20Recharge > 0 Or $PlusSmite > 0 Or $10Recharge > 0 Then
Return True
EndIf
EndIf
Return False
Case 15 ; Protection
If $PlusFive > 0 Or $PlusFiveEnch > 0 Then
If $Protection20Casting > 0 Or $Protection20Recharge > 0 Then
Return True
EndIf
EndIf
If $Protection20Recharge > 0 Or $Protection20Casting > 0 Then
If $10Cast > 0 Or $10Recharge > 0 Or ($EnergyAlways15 > 0 And $EnergyRegen > 0) Then
Return True
EndIf
EndIf
If $Protection20Recharge > 0 Then
If $Protection20Casting > 0 Then
Return True
EndIf
EndIf
If $Plus30 > 0 Or $Plus45Ench > 0 Then
If $Protection20Casting > 0 Or $Protection20Recharge > 0 Or $PlusProt > 0 Or $10Recharge > 0 Then
Return True
EndIf
EndIf
Return False
Case 16 ; Divine
If $PlusFive > 0 Or $PlusFiveEnch > 0 Then
If $Divine20Casting > 0 Or $Divine20Recharge > 0 Or $Healing20Casting > 0 Or $Healing20Recharge > 0 Or $Smiting20Casting > 0 Or $Smiting20Recharge > 0 Or $Protection20Casting > 0 Or $Protection20Recharge > 0 Then
Return True
EndIf
EndIf
If $Divine20Recharge > 0 Or $Divine20Casting > 0 Then
If $10Cast > 0 Or $10Recharge > 0 Or $Healing20Casting > 0 Or $Healing20Recharge > 0 Or $Smiting20Casting > 0 Or $Smiting20Recharge > 0 Or $Protection20Casting > 0 Or $Protection20Recharge > 0 Then
Return True
EndIf
EndIf
If $Divine20Recharge > 0 Then
If $Divine20Casting > 0 Then
Return True
EndIf
EndIf
If $10Cast > 0 Or $10Recharge > 0 Then
If $Healing20Casting > 0 Or $Healing20Recharge > 0 Or $Smiting20Casting > 0 Or $Smiting20Recharge > 0 Or $Protection20Casting > 0 Or $Protection20Recharge > 0 Then
Return True
EndIf
EndIf
If $Plus30 > 0 Or $Plus45Ench > 0 Then
If $Healing20Casting > 0 Or $Healing20Recharge > 0 Or $Smiting20Casting > 0 Or $Smiting20Recharge > 0 Or $Protection20Casting > 0 Or $Protection20Recharge > 0 Then
Return True
EndIf
EndIf
If ($EnergyAlways15 > 0 And $EnergyRegen > 0) Then
If $Healing20Casting > 0 Or $Healing20Recharge > 0 Or $Smiting20Casting > 0 Or $Smiting20Recharge > 0 Or $Protection20Casting > 0 Or $Protection20Recharge > 0 Then
Return True
EndIf
EndIf
If $PlusHealing > 0 Then
If $Healing20Casting > 0 Or $Healing20Recharge > 0 Then
Return True ; Perfect Healing
EndIf
EndIf
If $PlusProt > 0 Then
If $Protection20Casting > 0 Or $Protection20Recharge > 0 Then
Return True ; Perfect Prot
EndIf
EndIf
If $PlusSmite > 0 Then
If $Smiting20Casting > 0 Or $Smiting20Recharge > 0 Then
Return True ; Perfect Smite
EndIf
EndIf
Return False
Case 32 ; Communing
If $PlusFive > 0 Or $PlusFiveEnch > 0 Then
If $Communing20Casting > 0 Or $Communing20Recharge > 0 Then
Return True
EndIf
EndIf
If $Communing20Recharge > 0 Or $Communing20Casting > 0 Then
If $10Cast > 0 Or $10Recharge > 0 Or ($EnergyAlways15 > 0 And $EnergyRegen > 0) Then
Return True
EndIf
EndIf
If $Communing20Recharge > 0 Then
If $Communing20Casting > 0 Then
Return True
EndIf
EndIf
If $Plus30 > 0 Or $Plus45Ench > 0 Then
If $Communing20Casting > 0 Or $Communing20Recharge > 0 Or $10Recharge > 0 Then
Return True
EndIf
EndIf
Return False
Case 33 ; Restoration
If $PlusFive > 0 Or $PlusFiveEnch > 0 Then
If $Restoration20Casting > 0 Or $Restoration20Recharge > 0 Then
Return True
EndIf
EndIf
If $Restoration20Recharge > 0 Or $Restoration20Casting > 0 Then
If $10Cast > 0 Or $10Recharge > 0 Or ($EnergyAlways15 > 0 And $EnergyRegen > 0) Then
Return True
EndIf
EndIf
If $Restoration20Recharge > 0 Then
If $Restoration20Casting > 0 Then
Return True
EndIf
EndIf
If $Plus30 > 0 Or $Plus45Ench > 0 Then
If $Restoration20Casting > 0 Or $Restoration20Recharge > 0 Or $10Recharge > 0 Then
Return True
EndIf
EndIf
Return False
Case 34 ; Channeling
If $PlusFive > 0 Or $PlusFiveEnch > 0 Then
If $Channeling20Casting > 0 Or $Channeling20Recharge > 0 Then
Return True
EndIf
EndIf
If $Channeling20Recharge > 0 Or $Channeling20Casting > 0 Then
If $10Cast > 0 Or $10Recharge > 0 Or ($EnergyAlways15 > 0 And $EnergyRegen > 0) Then
Return True
EndIf
EndIf
If $Channeling20Recharge > 0 Then
If $Channeling20Casting > 0 Then
Return True
EndIf
EndIf
If $Plus30 > 0 Or $Plus45Ench > 0 Then
If $Channeling20Casting > 0 Or $Channeling20Recharge > 0 Or $10Recharge > 0 Then
Return True
EndIf
EndIf
Return False
Case 36 ; Spawning - Unconfirmed
If $PlusFive > 0 Or $PlusFiveEnch > 0 Then
If $Spawning20Casting > 0 Or $Spawning20Recharge > 0 Then
Return True
EndIf
EndIf
If $Spawning20Recharge > 0 Or $Spawning20Casting > 0 Then
If $10Cast > 0 Or $10Recharge > 0 Or ($EnergyAlways15 > 0 And $EnergyRegen > 0) Then
Return True
EndIf
EndIf
If $Spawning20Recharge > 0 Then
If $Spawning20Casting > 0 Then
Return True
EndIf
EndIf
If $Plus30 > 0 Or $Plus45Ench > 0 Then
If $Spawning20Casting > 0 Or $Spawning20Recharge > 0 Or $10Recharge > 0 Then
Return True
EndIf
EndIf
Return False
EndSwitch
Return False
EndFunc
Func IsRareRune($aItem)
Local $ModStruct = GetModStruct($aItem)
Local $SupVigor = StringInStr($ModStruct, "C202EA27", 0, 1) ; Mod struct for Sup vigor rune
Local $WindWalker = StringInStr($ModStruct, "040430A5060518A7", 0, 1) ; Windwalker insig
Local $MinorMyst = StringInStr($ModStruct, "05033025012CE821", 0, 1) ; Minor Mysticism
; Not Worth Anything - Local $SupEarthPrayers = StringInStr($ModStruct, "32BE82109033025", 0, 1) ; Sup earth prayers
; Not Worth Anything - Local $Prodigy = StringInStr($ModStruct, "C60330A5000528A7", 0, 1) ; Prodigy insig
; Not Worth Anything - Local $SupDom = StringInStr($ModStruct, "30250302E821770", 0, 1) ; Superior Domination
Local $Shamans = StringInStr($ModStruct, "080430A50005F8A", 0, 1) ; Shamans insig
Local $MinorSpawning = StringInStr($ModStruct, "0124E821", 0, 1) ; Minor Spawning
Local $MinorEnergyStorage = StringInStr($ModStruct, "010CE821", 0, 1) ; Minor Energy Storage
Local $MinorFastCasting = StringInStr($ModStruct, "0100E821", 0, 1) ; Minor Fast Casting
Local $MinorIllusion = StringInStr($ModStruct, "0101E821", 0, 1) ; Minor Illusion
Local $MinorSoulReap = StringInStr($ModStruct, "0106E821", 0, 1) ; Minor SoulReaping
If $SupVigor > 0 Or $WindWalker > 0 Or $MinorMyst > 0 Or $Shamans > 0 Or $MinorSpawning > 0 Or $MinorEnergyStorage > 0 Or $MinorFastCasting > 0 Or $MinorIllusion > 0 Or $MinorSoulReap > 0 Then
Return True
Else
Return False
EndIf
EndFunc
Func GetItemMaxReq8($aItem)
Local $Type = DllStructGetData($aItem, "Type")
Local $Dmg = GetItemMaxDmg($aItem)
Local $Req = GetItemReq($aItem)
Switch $Type
Case 12 ;~ Offhand
If $Dmg == 12 And $Req == 8 Then
Return True
Else
Return False
EndIf
Case 24 ;~ Shield
If $Dmg == 16 And $Req == 8 Then
Return True
Else
Return False
EndIf
Case 27 ;~ Sword
If $Dmg == 22 And $Req == 8 Then
Return True
Else
Return False
EndIf
EndSwitch
EndFunc
Func GetItemMaxReq7($aItem)
Local $Type = DllStructGetData($aItem, "Type")
Local $Dmg = GetItemMaxDmg($aItem)
Local $Req = GetItemReq($aItem)
Switch $Type
Case 12 ;~ Offhand
If $Dmg == 11 And $Req == 7 Then
Return True
Else
Return False
EndIf
Case 24 ;~ Shield
If $Dmg == 15 And $Req == 7 Then
Return True
Else
Return False
EndIf
Case 27 ;~ Sword
If $Dmg == 21 And $Req == 7 Then
Return True
Else
Return False
EndIf
EndSwitch
EndFunc
Func IsReq8Max($aItem)
Local $Type = DllStructGetData($aItem, "Type")
Local $Rarity = GetRarity($aItem)
Local $MaxDmgOffHand = GetItemMaxReq8($aItem)
Local $MaxDmgShield = GetItemMaxReq8($aItem)
Local $MaxDmgSword = GetItemMaxReq8($aItem)
Switch $Rarity
Case 2624 ;~ Gold
Switch $Type
Case 12 ;~ Offhand
If $MaxDmgOffHand = True Then
Return True
Else
Return False
EndIf
Case 24 ;~ Shield
If $MaxDmgShield = True Then
Return True
Else
Return False
EndIf
Case 27 ;~ Sword
If $MaxDmgSword = True Then
Return True
Else
Return False
EndIf
EndSwitch
Case 2623 ;~ Purple?
Switch $Type
Case 12 ;~ Offhand
If $MaxDmgOffHand = True Then
Return True
Else
Return False
EndIf
Case 24 ;~ Shield
If $MaxDmgShield = True Then
Return True
Else
Return False
EndIf
Case 27 ;~ Sword
If $MaxDmgSword = True Then
Return True
Else
Return False
EndIf
EndSwitch
Case 2626 ;~ Blue?
Switch $Type
Case 12 ;~ Offhand
If $MaxDmgOffHand = True Then
Return True
Else
Return False
EndIf
Case 24 ;~ Shield
If $MaxDmgShield = True Then
Return True
Else
Return False
EndIf
Case 27 ;~ Sword
If $MaxDmgSword = True Then
Return True
Else
Return False
EndIf
EndSwitch
EndSwitch
Return False
EndFunc
Func IsReq7Max($aItem)
Local $Type = DllStructGetData($aItem, "Type")
Local $Rarity = GetRarity($aItem)
Local $MaxDmgOffHand = GetItemMaxReq7($aItem)
Local $MaxDmgShield = GetItemMaxReq7($aItem)
Local $MaxDmgSword = GetItemMaxReq7($aItem)
Switch $Rarity
Case 2624 ;~ Gold
Switch $Type
Case 12 ;~ Offhand
If $MaxDmgOffHand = True Then
Return True
Else
Return False
EndIf
Case 24 ;~ Shield
If $MaxDmgShield = True Then
Return True
Else
Return False
EndIf
Case 27 ;~ Sword
If $MaxDmgSword = True Then
Return True
Else
Return False
EndIf
EndSwitch
Case 2623 ;~ Purple?
Switch $Type
Case 12 ;~ Offhand
If $MaxDmgOffHand = True Then
Return True
Else
Return False
EndIf
Case 24 ;~ Shield
If $MaxDmgShield = True Then
Return True
Else
Return False
EndIf
Case 27 ;~ Sword
If $MaxDmgSword = True Then
Return True
Else
Return False
EndIf
EndSwitch
Case 2626 ;~ Blue?
Switch $Type
Case 12 ;~ Offhand
If $MaxDmgOffHand = True Then
Return True
Else
Return False
EndIf
Case 24 ;~ Shield
If $MaxDmgShield = True Then
Return True
Else
Return False
EndIf
Case 27 ;~ Sword
If $MaxDmgSword = True Then
Return True
Else
Return False
EndIf
EndSwitch
EndSwitch
Return False
EndFunc
Func GetItemMaxDmg($aItem)
If Not IsDllStruct($aItem) Then $aItem = GetItemByItemID($aItem)
Local $lModString = GetModStruct($aItem)
Local $lPos = StringInStr($lModString, "A8A7") ; Weapon Damage
If $lPos = 0 Then $lPos = StringInStr($lModString, "C867") ; Energy (focus)
If $lPos = 0 Then $lPos = StringInStr($lModString, "B8A7") ; Armor (shield)
If $lPos = 0 Then Return 0
Return Int("0x" & StringMid($lModString, $lPos - 2, 2))
EndFunc
; How to use
Code:
Func CanPickUp2($aItem)
Local $Q = DllStructGetData($aItem, "Quantity")
Local $IsSpecial = IsSpecialItem($aItem)
Local $Rarity = GetRarity($aItem)
Local $Pcon = IsPcon($aItem)
Local $Material = IsRareMaterial($aItem)
Switch $IsSpecial
Case True
Return True ; Is special item (Ecto, TOT, etc)
EndSwitch
Switch $Rarity
Case 2624
Return True ; Gold items
EndSwitch
Switch $Pcon
Case True
Return True ; Is a Pcon
EndSwitch
Switch $Material
Case True
Return True ; Is rare material
EndSwitch
If $Q > 50 Then
Return True
Else
Return False
EndIf
Return False
EndFunc
Func CanSell($aItem)
; Local $RareSkin = IsRareSkin($aItem)
Local $Pcon = IsPcon($aItem)
Local $Material = IsRareMaterial($aItem)
Local $IsSpecial = IsSpecialItem($aItem)
Local $IsCaster = IsPerfectCaster($aItem)
Local $IsStaff = IsPerfectStaff($aItem)
Local $IsShield = IsPerfectShield($aItem)
Local $IsRune = IsRareRune($aItem)
Local $IsReq8 = IsReq8Max($aItem)
Local $Type = DllStructGetData($aItem, "Type")
Switch $IsSpecial
Case True
Return False ; Is special item (Ecto, TOT, etc)
EndSwitch
Switch $Pcon
Case True
Return False ; Is a Pcon
EndSwitch
Switch $Material
Case True
Return False ; Is rare material
EndSwitch
Switch $IsShield
Case True
Return False ; Is perfect shield
EndSwitch
Switch $IsReq8
Case True
Return False ; Is req8 max
EndSwitch
Switch $Type
Case 12 ; Offhands
If $IsCaster = True Then
Return False ; Is perfect offhand
Else
Return True
EndIf
Case 22 ; Wands
If $IsCaster = True Then
Return False ; Is perfect wand
Else
Return True
EndIf
Case 26 ; Staves
If $IsStaff = True Then
Return False ; Is perfect Staff
Else
Return True
EndIf
EndSwitch
Switch $IsRune
Case True
Return False
EndSwitch
;Switch $RareSkin
;Case True
; Return False
;EndSwitch
Return True
EndFunc
; Extra
Code:
Func IsEliteTome($aItem)
Local $ModelID = DllStructGetData($aItem, "ModelID")
Switch $ModelID
Case 21786, 21787, 21788, 21789, 21790, 21791, 21792, 21793, 21794, 21795
Return True ; All Elite Tomes
EndSwitch
Return False
EndFunc
Func IsRegularTome($aItem)
Local $ModelID = DllStructGetData($aItem, "ModelID")
Switch $ModelID
Case 21796, 21797, 21798, 21799, 21800, 21801, 21802, 21803, 21804, 21805
Return True
EndSwitch
Return False
EndFunc
Func IsPcon($aItem)
Local $ModelID = DllStructGetData($aItem, "ModelID")
Switch $ModelID
Case 910, 2513, 5585, 6049, 6366, 6367, 6375, 15477, 19171, 19172, 19173, 22190, 24593, 28435, 30855, 31145, 31146, 35124, 36682
Return True ; Alcohol
Case 6376, 21809, 21810, 21813, 36683
Return True ; Party
Case 21492, 21812, 22269, 22644, 22752, 28436
Return True ; Sweets
Case 6370, 21488, 21489, 22191, 26784, 28433
Return True ; DP Removal
Case 15837, 21490, 30648, 31020
Return True ; Tonic
EndSwitch
Return False
EndFunc
Func IsSpecialItem($aItem)
Local $ModelID = DllStructGetData($aItem, "ModelID")
Local $ExtraID = DllStructGetData($aItem, "ExtraID")
Switch $ModelID
Case 5656, 18345, 21491, 37765, 21833, 28433, 28434
Return True ; Special - ToT etc
Case 22751
Return True ; Lockpicks
Case 27047
Return True ; Glacial Stones
Case 146
If $ExtraID = 10 Or $ExtraID = 12 Then
Return True ; Black & White Dye
Else
Return False
EndIf
Case 24353, 24354
Return True ; Chalice & Rin Relics
Case 27052
Return True ; Superb Charr Carving
Case 522
Return True ; Dark Remains
Case 3746, 22280
Return True ; Underworld & FOW Scroll
Case 819
Return True ; Dragon Root
Case 35121
Return True ; War supplies
Case 36985
Return True ; Commendations
EndSwitch
Return False
EndFunc
Func IsRareMaterial($aItem)
Local $M = DllStructGetData($aItem, "ModelID")
Switch $M
Case 937, 938, 935, 931, 932, 936, 930
Return True ; Rare Mats
EndSwitch
Return False
EndFunc
; A better pickuploot
Code:
Func _PickUpLootEx() ; For general Loot
Local $lAgent
Local $lItem
Local $lDeadlock
For $i = 1 To GetMaxAgents()
If GetIsDead(-2) Then Return
$lAgent = GetAgentByID($i)
If Not GetIsMovable($lAgent) Then ContinueLoop
$lItem = GetItemByAgentID($i)
If CanPickUp2($lItem) Then
_MoveToItem($lAgent)
Sleep(500)
Do
PickUpItem($lItem)
Until GetAgentExists($lAgent) = False
$lDeadlock = TimerInit()
While GetAgentExists($i)
sleep(50)
If GetIsDead(-2) Then Return
If TimerDiff($lDeadlock) > 10000 Then ExitLoop
WEnd
EndIf
Next
EndFunc
Func _MoveToItem($agent) ; Carries on staying alive while collecting item
Local $lMe
If GetIsDead(-2) Then Return
$x = DllStructGetData($agent, "x")
$y = DllStructGetData($agent, "y")
_Run($x, $y) ; Change this to MoveToAggro/MoveTo/Move - Whatever your using as an advanced movement function
EndFunc
There are a few mods missing, but all the worthwhile crap is there. Once I find the missing ones I will either post here or update the main post, if I can be bothered! I spent multiple nights comparing mod structs to find these so like I said, if you use it, please "Thanks"!
Thats a nice set of Mod Structs Sav, but it's quite different from what I have created here.
Going through all of that I can see that it is largely geared towards inscriptions (Mine is OS), and my code searches for only the perfect dual mod shields etc, which what you linked does not provide.
There is no point for example passing a +1 mod on a Staff or Caster item or anything else since it will either be a wrapping or an undesired mod, so it is only passed on a shield and in conjunction with a +45 or +30 mod. Its a lot more specific and thought out, rather then just simply checking against any known modstruct.
Granted having this information would of helped me in my searching of Mod Structs, this release still fulfils a purpose which is different to what that collection provides.
Thank you a lot for these. I had just started researching modstructs and saw this You have saved me tons of time. Also the extra functions are nice too
Thanks, anyone know how to make this pick up blue armor pieces ? most minor mes runes are worth more then sup runes...
how can i get the mod struct?
The example above picks up golds. $r == 2624, Blue rarity is 2623.
Thanks to savsuds for providing this.
Global Const $RARITY_White = 2621
Global Const $RARITY_Blue = 2623
Global Const $RARITY_Gold = 2624
Global Const $RARITY_Purple = 2626
Global Const $RARITY_Green = 2627
Global Const $RARITY_Red = 33026
The example above picks up golds. $r == 2624, Blue rarity is 2623.
Thanks to savsuds for providing this.
Global Const $RARITY_White = 2621
Global Const $RARITY_Blue = 2623
Global Const $RARITY_Gold = 2624
Global Const $RARITY_Purple = 2626
Global Const $RARITY_Green = 2627
Global Const $RARITY_Red = 33026
Thanks Rit, love your froggy script and thanks for the he`lp but im looking for specific mod structs like
Code:
Local $MinorMyst = StringInStr($ModStruct, "05033025012CE821", 0, 1) ; Minor Mysticism
can anyone tell me how they are found so i may help out on this ?
I'm making a VQ bot rn and its going very well, however If i pick up all blue armors my inv would get full fast
Thanks Rit, love your froggy script and thanks for the he`lp but im looking for specific mod structs like
Code:
Local $MinorMyst = StringInStr($ModStruct, "05033025012CE821", 0, 1) ; Minor Mysticism
can anyone tell me how they are found so i may help out on this ?
I'm making a VQ bot rn and its going very well, however If i pick up all blue armors my inv would get full fast
Hi Np,
To help you learn. This small script will get the modstruct string representation. I would approach this by putting the same rune on various pieces of armor and looking for the common string.
Code:
#include "GWA2.au3"
#include "GWA2_Headers.au3"
Global Const $GuildWars = WinGetProcess("Guild Wars")
If Not Initialize($GuildWars, True) Then
ConsoleWrite("Initialization Failed!")
Exit
EndIf
$item = GetItemBySlot(1, 1)
$modstruct = GetModStruct($item)
ConsoleWrite(String($modstruct))
To help you learn. This small script will get the modstruct string representation. I would approach this by putting the same rune on various pieces of armor and looking for the common string.
Code:
#include "GWA2.au3"
#include "GWA2_Headers.au3"
Global Const $GuildWars = WinGetProcess("Guild Wars")
If Not Initialize($GuildWars, True) Then
ConsoleWrite("Initialization Failed!")
Exit
EndIf
$item = GetItemBySlot(1, 1)
$modstruct = GetModStruct($item)
ConsoleWrite(String($modstruct))
Hope this isnt a dumb question, i assume the answer is yes, using mod stucts can does the bot know what mods unids on the ground have ?
Hope this isnt a dumb question, i assume the answer is yes, using mod stucts can does the bot know what mods unids on the ground have ?
Im pretty sure there is an identification flag in Item Struct so I am not so sure that you can view unid structs without doing that, but I have never tried. It could be possible since you can view mods by just equipping a weapon, but I do not really understand why you would want to. It seems like a lot of work for very little gain. Just pick them up, ID and drop them if **** if you must.
Im pretty sure there is an identification flag in Item Struct so I am not so sure that you can view unid structs without doing that, but I have never tried. It could be possible since you can view mods by just equipping a weapon, but I do not really understand why you would want to. It seems like a lot of work for very little gain. Just pick them up, ID and drop them if **** if you must.
Thank you, how can i pick up blue armor but not blue weapons?
Keiran GWA2 Version PvEovled 07/02/2014 - GW Exploits, Hacks, Bots, Tools & Macros - 7 Replies Closed because no feedback from community
[GWA2] War Supply Bot 06/01/2014 - Trading - 0 Replies Opening up a thread here again to advertise my war supply bot. I've sold over 80 copies on ************ and sold it a couple times to epvpers a few years ago.
You can reach me on ************ or on skype: raskofshadows.
Prices are set in stone and source is available for a fee.
gwa2 autoit broblem 04/06/2014 - GW Bots - 0 Replies Hat Sich Erledigt kann Gelöscht werden ^^
GWA2 A/mo Vaettir Bot; Need Help!! 02/19/2012 - GW Bots - 1 Replies http://www.elitepvpers.com/forum/gw-exploits-hacks -bots-tools-macros/1568881-gwa-vaettir-mo-farm-bot .html
ENGLISH:
I can't seem to get this to work. I've spent 3-4 hours, read the entire thread here, tried to search for a detailed guide on how to get this to work but it's not.
What I've done was: Downloaded the 2 files shown in the Original Post... "GWA2 A_Mo Vaettirs Farm by bl4ck3lit3.zip"
Extracted it to desktop
Ran GW.EXE as admin.
Set-up assassin with appropriate gear and...