The original bot is the Celestial farm that you posted, which works great for me, so thank you, and thank you to everyone else that is contributing.
I'll post the full code below. I've tried many different ways, here is the last version I did. Note I commented the wintersday array out after it failed but left it in. This is lines 49-54:
#include "GWA².au3"
;MAPIDS
Global Const $MAP_ID_NAHPUI = 216
Global Const $MAP_ID_WAJJUN = 239
Global Const $MAP_ID_KAINENG = 194
;RARITY
Global Const $RARITY_GOLD = 2624
Global Const $RARITY_PURPLE = 2626
Global Const $RARITY_BLUE = 2623
Global Const $RARITY_WHITE = 2621
;CONSUMABLES
Global Const $ITEM_ID_LOCKPICKS = 22751
Global Const $ITEM_ID_SALVAGE_KIT = 2992
Global Const $ITEM_ID_ID_KIT = 2989
;DYES
Global Const $ITEM_ID_DYES = 146
Global Const $ITEM_EXTRAID_BLACKDYE = 10
Global Const $ITEM_EXTRAID_WHITEDYE = 12
;MATS
Global $ITEM_ID_MEYES = 931
Global $ITEM_ID_RUBY = 937
Global $ITEM_ID_AMBER = 6532
;PCONS
Global Const $ITEM_ID_TOTS = 28434
Global Const $ITEM_ID_GOLDEN_EGGS = 22752
Global Const $ITEM_ID_BUNNIES = 22644
Global Const $ITEM_ID_GROG = 30855
Global Const $ITEM_ID_CLOVER = 22191
Global Const $ITEM_ID_PIE = 28436
Global Const $ITEM_ID_CIDER = 28435
Global Const $ITEM_ID_POPPERS = 21810
Global Const $ITEM_ID_ROCKETS = 21809
Global Const $ITEM_ID_CUPCAKES = 22269
Global Const $ITEM_ID_SPARKLER = 21813
Global Const $ITEM_ID_HONEYCOMB = 26784
Global Const $ITEM_ID_VICTORY_TOKEN = 18345
Global Const $ITEM_ID_LUNAR_TOKEN = 21833
Global Const $ITEM_ID_HUNTERS_ALE = 910
Global Const $ITEM_ID_LUNAR_TOKENS = 28433
Global Const $ITEM_ID_KRYTAN_BRANDY = 35124
Global Const $ITEM_ID_BLUE_DRINK = 21812
;Wintersday
;Global $Wintersday[4] = [6376,21492,30648,6375]
Global $ITEM_ID_Snowman_Summoner = 6376
Global $ITEM_ID_Fruitcake = 21492
Global $ITEM_ID_Frosty_Tonic = 30648
Global $ITEM_ID_Eggnog = 6375
;GOODSKINS
Global $CeleStr = 942
Global $CeleTact = 943
Global $BladedShieldStr = 777
Global $BladedShieldTact = 778
Global $FanFastCast = 775
Global $FanSoulReap = 776
Global $FanEnergyStorage = 789
Global $FanDivine = 858
Global $FanSpawning = 866
Global $JugDivine = 1022
Global $JugSoul = 874
Global $JugES = 875
Global $CeleStaff = 785
Global $CockaStaff = 786
Global $EternalFlameW = 729
Global $KoiScepterAir = 929
Global $WailingStaff = 883
Global $BanefulScepter = 730
Global $DarkTendrilStaff = 878
Global $EvilEyeStaff = 882
Global $CeleScepter = 926
Global $PaperLantern = 896
Global $DivineScroll = 905
Global $CanthanFireStaff = 887
Global $CanthanWaterStaff = 888
Global $CanthanAirStaff = 884
Global $EyeFlameArtifact = 181
Global $CanthanEarthStaff = 885
Global $DivineStaff = 889
; declare skill numbers to make the code WAY more readable (UseSkill($sf) is better than UseSkill(2))
Global Const $sq = 1
Global Const $sod = 2
Global Const $sf = 3
Global Const $dc = 4
Global Const $whirling = 5
Global Const $eoe = 6
Global Const $soh = 7
Global Const $dash = 8
Initialize(WinGetProcess("Guild Wars"))
While 1
Global $Me = GetAgentById(-2)
If GetIsDeadEx() Then ContinueLoop
;Merchant()
FastWay()
While CountFreeSlots() > 4
CombatLoop()
WEnd
Merchant()
WEnd
Func CountFreeSlots()
Local $temp = 0
Local $bag
$bag = GetBag(1)
$temp += DllStructGetData($bag, 'slots') - DllStructGetData($bag, 'ItemsCount')
$bag = GetBag(2)
$temp += DllStructGetData($bag, 'slots') - DllStructGetData($bag, 'ItemsCount')
$bag = GetBag(3)
$temp += DllStructGetData($bag, 'slots') - DllStructGetData($bag, 'ItemsCount')
Return $temp
EndFunc
Func FastWay()
If GetMapID() <> $MAP_ID_NAHPUI Then
WriteChat("Mapping")
TravelTo($MAP_ID_NAHPUI)
EndIf
SwitchMode(1)
WriteChat("Setup")
MoveTo(-22340, 011430)
Move(-21799.478515, 014847.574218)
Sleep(8000)
WaitMapLoading($MAP_ID_WAJJUN)
Move(009005.643554, -20277.562500)
WaitMapLoading($MAP_ID_NAHPUI)
EndFunc
Func CombatLoop()
$Me = GetAgentById(-2)
Move(-21799.478515, 014847.574218)
WaitMapLoading($MAP_ID_WAJJUN)
Global $Me = GetAgentById(-2)
WriteChat("Running to mantids")
MoveRunning(007330.191406, -18014.404296)
MoveRunning(003021.682373, -16771.634765)
WriteChat("Getting aggro")
SpecialMoves()
MoveAggroing(-00860.679138, -15715.822265)
SpecialMoves2()
MoveAggroingNoDash(-00882.065551, -15936.000000)
MoveAggroingNoDash(-00860.679138, -14909.244140)
MoveAggroingNoDash(-00620.464904, -14909.244140, 5)
UseSkillStance($soh)
MoveAggroingNoDash(-00479.886474, -14272.292968)
WriteChat("Balling")
MoveAggroingNoDash(001169.562866, -14196.305664, 5)
WaitFor(1500)
UseSkillStance($dash)
Sleep(50)
ReverseDirection()
WaitFor(3000)
WriteChat("Killing")
Kill()
WriteChat("Looting")
PickUpLoot()
WriteChat("Returning to Outpost")
While GetMapID() = $MAP_ID_WAJJUN
Resign()
Sleep(3500)
ReturnToOutpost()
WaitMapLoading($MAP_ID_NAHPUI)
WEnd
EndFunc
Func MoveRunning($lDestX, $lDestY, $lRandom = 250)
If GetIsDeadEx() Then Return
Local $lBlocked = 0
Do
If GetIsDeadEx() Then Return
RndSleep(100)
Move($lDestX, $lDestY, $lRandom)
Local $lMe = GetAgentByID(-2)
If IsRecharged($dash) Then
UseSkillStance($dash)
EndIf
Until ComputeDistance(DllStructGetData($lMe, 'X'), DllStructGetData($lMe, 'Y'), $lDestX, $lDestY) < $lRandom * 1.5
EndFunc
Func MoveAggroing($lDestX, $lDestY, $lRandom = 250)
If GetIsDeadEx() Then Return
Local $lBlocked = 0
Do
If GetIsDeadEx() Then Return
RndSleep(100)
Move($lDestX, $lDestY, $lRandom)
$lMe = GetAgentByID(-2)
If DllStructGetData($lMe, 'MoveX') == 0 And DllStructGetData($lMe, 'MoveY') == 0 Then
$lBlocked += 1
Move($lDestX, $lDestY)
EndIf
If $lBlocked = 5 Then
AntiBlock()
EndIf
If IsRecharged($dash) Then
UseSkillStance($dash)
EndIf
If IsRecharged($sf) Then
UseSkillEx($sf)
EndIf
Until ComputeDistance(DllStructGetData($lMe, 'X'), DllStructGetData($lMe, 'Y'), $lDestX, $lDestY) < $lRandom * 1.5
EndFunc
Func MoveAggroingNoDash($lDestX, $lDestY, $lRandom = 250)
If GetIsDeadEx() Then Return
Local $lMe = GetAgentById(-2)
Local $lBlocked = 0
If DllStructGetData($lMe, 'MoveX') == 0 And DllStructGetData($lMe, 'MoveY') == 0 Then
$lBlocked += 1
Move($lDestX, $lDestY)
EndIf
If $lBlocked = 5 Then
StrafeLeft(1)
WaitFor(500)
StrafeLeft(0)
AntiBlock()
EndIf
Do
$lMe = GetAgentByID(-2)
RndSleep(100)
Move($lDestX, $lDestY, $lRandom)
If GetIsDeadEx() Then Return
If IsRecharged($sf) Then
UseSkillEx($sf)
EndIf
Until ComputeDistance(DllStructGetData($lMe, 'X'), DllStructGetData($lMe, 'Y'), $lDestX, $lDestY) < $lRandom * 1.5
EndFunc
Func WaitFor($lMs)
If GetIsDeadEx() Then Return
Local $lTimer = TimerInit()
Do
RndSleep(100)
If GetIsDeadEx() Then Return
If IsRecharged($sf) Then
UseSkillEx($sf)
EndIf
Until TimerDiff($lTimer) > $lMs
EndFunc
Func SpecialMoves()
If GetIsDeadEx() Then Return
Do
If GetIsDeadEx() Then Return
Local $NearestEnemy = GetNearestEnemyToAgent(-2)
Local $DistanceToEnemy = GetDistance($NearestEnemy)
Move(000561.803222, -15936.115234)
RndSleep(100)
Until $DistanceToEnemy < 1300
UseSkillStance($sq)
UseSkillEx($sod)
UseSkillEx($sf)
Local $EnemyID1 = GetNearestAgentToCoords(000906.164184, -16503.773437)
If GetIsDeadEx() Then Return
UseSkillEx($dc, $EnemyID1)
Local $lDeadlock = TimerInit()
Do
If GetIsDeadEx() Then Return
Sleep(50)
If TimerDiff($lDeadlock) > 5000 Then Return
Until IsRecharged($dc) == False
Local $EnemyID2 = GetNearestAgentToCoords(-01086.659667, -16456.222656)
ChangeTarget($EnemyID2)
Do
Local $lMe = GetAgentById(-2)
If GetIsDeadEx() Then Return
RndSleep(100)
Move(-01086.659667, -16456.222656)
If IsRecharged($dash) Then
UseSkillStance($dash)
EndIf
Local $Distance = GetDistance(-1, -2)
Until $Distance < 900 Or ComputeDistance(DllStructGetData($lMe, 'X'), DllStructGetData($lMe, 'Y'), -01086.659667, -16456.222656) < 250
EndFunc
Func SpecialMoves2()
If GetIsDeadEx() Then Return
Local $EnemyID4 = GetNearestAgentToCoords(-01386.235717, -14546.714843)
ChangeTarget($EnemyID4)
Do
If GetIsDeadEx() Then Return
RndSleep(100)
Local $lMe = GetAgentByID(-2)
Move(-01386.235717, -14546.714843)
;If IsRecharged($dash) Then
;UseSkillStance($dash)
;EndIf
Local $Distance2 = GetDistance(-1, -2)
Until $Distance2 < 900 Or ComputeDistance(DllStructGetData($lMe, 'X'), DllStructGetData($lMe, 'Y'), -01386.235717, -14546.714843) < 250
EndFunc
Func Kill()
If GetIsDeadEx() Then Return
Local $EnemyID3 = GetNearestAgentToCoords(-00253.713897, -14348.154296)
If IsRecharged($dc) Then
UseSkillEx($dc, $EnemyID3)
Else
MoveAggroing(-00253.713897, -14348.154296)
EndIf
Attack($EnemyID3)
UseSkill($eoe, -2)
WaitFor(100)
UseSkillStance($whirling)
WaitFor(8000)
EndFunc
Func AntiBlock()
If GetIsDeadEx() Then Return
TurnLeft(1)
MoveForward(1)
Local $lMe = GetAgentByID(-2)
Local $XMe = DllStructGetData($lMe, 'X')
Local $YMe = DllStructGetData($lMe, 'Y')
Do
If GetIsDeadEx() Then Return
WaitFor(100)
Local $lMe = GetAgentByID(-2)
TurnLeft(0)
WaitFor(100)
TurnLeft(1)
Until ComputeDistance(DllStructGetData($lMe, 'X'), DllStructGetData($lMe, 'Y'), $XMe, $YMe) > 50
MoveForward(0)
TurnLeft(0)
EndFunc
Func UseSkillEx($aSkillSlot, $aTarget = -2)
If GetIsDeadEx() Then Return
If Not IsRecharged($aSkillSlot) Then Return
$tDeadlock = TimerInit()
USESKILL($aSkillSlot, $aTarget)
Do
Sleep(50)
If GetIsDeadEx() = True Then Return
Until GetSkillBarSkillRecharge($aSkillSlot) <> 0 Or TimerDiff($tDeadlock) > 6000
Sleep(750)
EndFunc
Func UseSkillStance($aSkillSlot, $aTarget = -2)
If GetIsDeadEx() Then Return
If Not IsRecharged($aSkillSlot) Then Return
$tDeadlock = TimerInit()
USESKILL($aSkillSlot, $aTarget)
Do
Sleep(50)
If GetIsDeadEx() = True Then Return
Until GetSkillBarSkillRecharge($aSkillSlot) <> 0 Or TimerDiff($tDeadlock) > 6000
EndFunc
Func IsRecharged($lSkill)
Return GetSkillBarSkillRecharge($lSkill)==0
EndFunc
Func PickUpLoot()
Local $lAgent
Local $lItem
Local $lDeadlock
If GetIsDeadEx() Then Return
For $i = 1 To GetMaxAgents()
If GetIsDeadEx() Then Return
$lAgent = GetAgentByID($i)
If DllStructGetData($lAgent, 'Type') <> 0x400 Then ContinueLoop
$lItem = GetItemByAgentID($i)
If CanPickup($lItem) Then
PickUpItem($lItem)
$lDeadlock = TimerInit()
While GetAgentExists($i)
Sleep(100)
If GetIsDeadEx() Then Return
If TimerDiff($lDeadlock) > 10000 Then ExitLoop
WEnd
EndIf
Next
EndFunc
Func CanPickUp($aItem)
Local $lModelID = DllStructGetData(($aItem), 'ModelID')
Local $lRarity = GetRarity($aItem)
If $lModelID == 2511 And GetGoldCharacter() < 99000 Then Return True ; gold coins (only pick if character has less than 99k in inventory)
If $lModelID > 21785 And $lModelID < 21806 Then Return True ; Elite/Normal Tomes
If $1ModelID == $ITEM_ID_Snowman_Summoner = 6376 Then Return True
If $1ModelID == $ITEM_ID_Fruitcake = 21492 Then Return True
If $1ModelID == $ITEM_ID_Frosty_Tonic = 30648 Then Return True
If $IModelID == $Item_ID_Eggnog = 6375 Then Return True
If $lRarity == $RARITY_GOLD Then Return True
If $lModelID == $ITEM_ID_DYES Then ; if dye
Switch DllStructGetData($aItem, "ExtraID")
Case $ITEM_EXTRAID_BLACKDYE, $ITEM_EXTRAID_WHITEDYE ; only pick white and black ones
Return True
Case Else
Return False
EndSwitch
EndIf
If StackableReturnTrue($lModelID) Then Return True
Return False
EndFunc
Func Merchant()
GoToMerchant()
WriteChat("Identifying Items")
Ident(1)
Ident(2)
Ident(3)
WriteChat("Depositing Gold")
DepositGold()
WriteChat("Selling Items")
Sell(1)
Sell(2)
Sell(3)
EndFunc
Func GoToMerchant()
Local $npc = GetNearestNPCToCoords(-18693, 10132)
GoToNPC($npc)
EndFunc
Func Ident($bagIndex)
Local $bag = GetBag($bagIndex)
For $i = 1 To DllStructGetData($bag, 'slots')
If FindIDKit() = 0 Then
If GetGoldCharacter() < 500 AND GetGoldStorage() > 499 Then
WithdrawGold(500)
Sleep(Random(200,300))
EndIf
Do
BuyIDKit()
RndSleep(500)
Until FindIDKit() <> 0
RndSleep(500)
EndIf
Local $aitem = GetItemBySlot($bagIndex, $i)
If DllStructGetData($aItem, 'ID') = 0 Then ContinueLoop
IdentifyItem($aItem)
Sleep(Random(500,750))
Next
EndFunc
Func Sell($bagIndex)
Local $bag = GetBag($bagIndex)
Local $numOfSlots = DllStructGetData($bag, 'slots')
For $i = 1 To $numOfSlots
Local $aItem = GetItemBySlot($bagIndex, $i)
Local $lModelID = DllStructGetData($aItem, 'ModelID')
If StackableReturnTrue($lModelID) Or ValEquipReturnTrue($aItem) Then
Else
SellItem($aItem)
EndIf
RndSleep(250)
Next
EndFunc
Func ValEquipReturnTrue($aItem)
Local $ModStruct = GetModStruct($aItem)
Local $lModelID = DllStructGetData($aItem, 'ModelID')
Local $WeaponType = DllStructGetData($aItem, 'Type')
If IsGoodSkin($lModelID) Then Return True
If IsMartial($WeaponType) Then
If IsDualVamp($ModStruct) Then Return True
If IsDualZealous($ModStruct) Then Return True
Local $lReq = GetItemReq($aItem)
If $lReq == 9 Then
If IsStrengthAndHonor($ModStruct) Or IsGuidedByFate($ModStruct) Or IsDanceWithDeath($ModStruct) Or IsIHaveThePower($ModStruct) Then Return True
EndIf
EndIf
If IsStaff($WeaponType) Then
If IsHCT20($ModStruct) Then Return True
Local $lReq = GetItemReq($aItem)
If $lReq == 9 Then
If IsHaleAndHearty($ModStruct) Or IsHaveFaith($ModStruct) Or IsHCT10($ModStruct) Then Return True
EndIf
EndIf
If IsWandFocusShield($WeaponType) Then
If HasTwoUsefulMods($ModStruct) Then Return True
EndIf
EndFunc
Func IsGoodSkin($lModelID)
; If $lModelID == $CeleStr Then Return True
; If $lModelID == $CeleTact Then Return True
If $lModelID == $BladedShieldStr Then Return True
If $lModelID == $BladedShieldTact Then Return True
If $lModelID == $FanFastCast Then Return True
If $lModelID == $FanSoulReap Then Return True
If $lModelID == $FanEnergyStorage Then Return True
If $lModelID == $FanDivine Then Return True
If $lModelID == $FanSpawning Then Return True
If $lModelID == $JugDivine Then Return True
If $lModelID == $JugSoul Then Return True
If $lModelID == $JugES Then Return True
If $lModelID == $CeleStaff Then Return True
If $lModelID == $CockaStaff Then Return True
If $lModelID == $EternalFlameW Then Return True
If $lModelID == $KoiScepterAir Then Return True
If $lModelID == $WailingStaff Then Return True
If $lModelID == $BanefulScepter Then Return True
If $lModelID == $DarkTendrilStaff Then Return True
; If $lModelID == $CeleScepter Then Return True
If $lModelID == $PaperLantern Then Return True
If $lModelID == $DivineScroll Then Return True
If $lModelID == $CanthanFireStaff Then Return True
If $lModelID == $CanthanWaterStaff Then Return True
If $lModelID == $CanthanAirStaff Then Return True
If $lModelID == $EyeFlameArtifact Then Return True
If $lModelID == $CanthanEarthStaff Then Return True
If $lModelID == $DivineStaff Then Return
EndFunc
Func IsMartial($WeaponType)
If $WeaponType == 2 Then Return True
If $WeaponType == 5 Then Return True
If $WeaponType == 15 Then Return True
If $WeaponType == 27 Then Return True
If $WeaponType == 32 Then Return True
EndFunc
Func IsStaff($WeaponType)
If $WeaponType == 26 Then Return True
EndFunc
Func IsWandFocusShield($WeaponType)
If $WeaponType == 22 Then Return True
If $WeaponType == 12 Then Return True
If $WeaponType == 24 Then Return True
EndFunc
Func IsDualVamp($ModStruct)
Local $Vampiric3 = StringInStr($ModStruct, "00032825", 0 ,1)
Local $Vampiric5 = StringInStr($ModStruct, "00052825", 0 ,1)
Local $HealthRegen = StringInStr($ModStruct, "0100E820", 0 ,1) ; Health regeneration -1
If (($HealthRegen - $Vampiric3 - $Vampiric5) > 0) Then Return True
EndFunc
Func IsDualZealous($ModStruct)
Local $Zealous = StringInStr($ModStruct, "01001825", 0 ,1) ; Damage +15%
Local $EnergyRegen = StringInStr($ModStruct, "0100C820", 0 ,1) ; Energy regeneration -1
If (($EnergyRegen - $Zealous) > 0) Then Return True
EndFunc
Func IsStrengthAndHonor($ModStruct)
Local $StrengthAndHonor = StringInStr($ModStruct, "0F327822", 0 ,1) ; Damage +15% (while Health is above 50%)
If $StrengthAndHonor > 0 Then Return True
EndFunc
Func IsGuidedByFate($ModStruct)
Local $GuidedByFate = StringInStr($ModStruct, "0F006822", 0 ,1) ; Damage +15% (while Enchanted)
If $GuidedByFate > 0 Then Return True
EndFunc
Func IsDanceWithDeath($ModStruct)
Local $DanceWithDeath = StringInStr($ModStruct, "0F00A822", 0 ,1) ; Damage +15% (while in a Stance)
If $DanceWithDeath > 0 Then Return True
EndFunc
Func IsIHaveThePower($ModStruct)
Local $EnergyAlways5 = StringInStr($ModStruct, "0500D822", 0 ,1) ; Energy +5
If $EnergyAlways5 > 0 Then Return True
EndFunc
Func IsHCT20($ModStruct)
Local $aHCT20[19] = ["01141822", "02141822", "03141822", "04141822", "05141822", "06141822", "07141822", "08141822", "09141822", "0A141822", "0B141822", "0D141822", "0E141822", "0F141822", "10141822", "20141822", "21141822", "22141822", "24141822"]
Local $NumHCT20 = 18
For $i = 0 to $NumHCT20
Local $lHCT20 = StringInStr($ModStruct, $aHCT20[$i], 0 ,1) ; Halves casting time of spells of item's attribute (Chance: 20%)
If $lHCT20 > 0 Then Return True
Next
EndFunc
Func IsHaleAndHearty($ModStruct)
Local $HaleAndHearty = StringInStr($ModStruct, "05320823", 0 ,1) ; Energy +5 (while health is above 50%)
If $HaleAndHearty > 0 Then Return True
EndFunc
Func IsHaveFaith($ModStruct)
Local $HaveFaith = StringInStr($ModStruct, "0500F822", 0 ,1) ; Energy +5 (while Enchanted)
If $HaveFaith > 0 Then Return True
EndFunc
Func IsHCT10($ModStruct)
Local $HCT10 = StringInStr($ModStruct, "000A0822", 0 ,1) ; Halves casting time of spells (Chance: 10%)
If $HCT10 > 0 Then Return True
EndFunc
Func HasTwoUsefulMods($ModStruct)
Local $UsefulMods = 0
Local $aModStrings[159] = ["05320823", "0500F822", "0F00D822", "000A0822", "000AA823", "00140828", "00130828", "0A0018A1", "0A0318A1", "0A0B18A1", "0A0518A1", "0A0418A1", "0A0118A1", "0A0218A1", "02008820", "0200A820", "05147820", "05009821", "000AA823", "00142828", "00132828", "0100E820", "000AA823", "00142828", "00132828", "002D6823", "002C6823", "002B6823", "002D8823", "002C8823", "002B8823", "001E4823", "001D4823", "001C4823", "14011824", "13011824", "14021824", "13021824", "14031824", "13031824", "14041824", "13041824", "14051824", "13051824", "14061824", "13061824", "14071824", "13071824", "14081824", "13081824", "14091824", "13091824", "140A1824", "130A1824", "140B1824", "130B1824", "140D1824", "130D1824", "140E1824", "130E1824", "140F1824", "130F1824", "14101824", "13101824", "14201824", "13201824", "14211824", "13211824", "14221824", "13221824", "14241824", "13241824", "0A004821", "0A014821", "0A024821", "0A034821", "0A044821", "0A054821", "0A064821", "0A074821", "0A084821", "0A094821", "0A0A4821", "01131822", "02131822", "03131822", "04131822", "05131822", "06131822", "07131822", "08131822", "09131822", "0A131822", "0B131822", "0D131822", "0E131822", "0F131822", "10131822", "20131822", "21131822", "22131822", "24131822", "01139823", "02139823", "03139823", "04139823", "05139823", "06139823", "07139823", "08139823", "09139823", "0A139823", "0B139823", "0D139823", "0E139823", "0F139823", "10139823", "20139823", "21139823", "22139823", "24139823"]
Local $NumMods = 158
For $i = 0 to $NumMods
Local $ModStr = StringInStr($ModStruct, $aModStrings[$i], 0, 1);
If ($ModStr <= 0) Then
$UsefulMods += 1
EndIf
Next
If $UsefulMods == 2 Then Return True
EndFunc
Func StackableReturnTrue($lModelID)
If $lModelID == 854 Then Return True
If $lModelID == $ITEM_ID_LOCKPICKS Then Return True
If $lModelID == $ITEM_ID_ID_KIT Then Return True
If $lModelID == $ITEM_ID_MEYES Then Return True
If $lModelID == $ITEM_ID_RUBY Then Return True
If $lModelID == $ITEM_ID_AMBER Then Return True
; ==== Pcons ====
If $lModelID == $ITEM_ID_TOTS Then Return True
If $lModelID == $ITEM_ID_GOLDEN_EGGS Then Return True
If $lModelID == $ITEM_ID_BUNNIES Then Return True
If $lModelID == $ITEM_ID_GROG Then Return True
If $lModelID == $ITEM_ID_CLOVER Then Return True
If $lModelID == $ITEM_ID_PIE Then Return True
If $lModelID == $ITEM_ID_CIDER Then Return True
If $lModelID == $ITEM_ID_POPPERS Then Return True
If $lModelID == $ITEM_ID_ROCKETS Then Return True
If $lModelID == $ITEM_ID_CUPCAKES Then Return True
If $lModelID == $ITEM_ID_SPARKLER Then Return True
If $lModelID == $ITEM_ID_HONEYCOMB Then Return True
If $lModelID == $ITEM_ID_VICTORY_TOKEN Then Return True
If $lModelID == $ITEM_ID_LUNAR_TOKEN Then Return True
If $lModelID == $ITEM_ID_HUNTERS_ALE Then Return True
If $lModelID == $ITEM_ID_LUNAR_TOKENS Then Return True
If $lModelID == $ITEM_ID_KRYTAN_BRANDY Then Return True
If $lModelID == $ITEM_ID_BLUE_DRINK Then Return True
EndFunc
Func GetIsDeadEx()
Local $lMe = GetAgentByID(-2)
If GetIsDead($lMe) Then Return True
If ComputeDistance(DllStructGetData($lMe, 'X'), DllStructGetData($lMe, 'Y'), 003953.247802, -18649.464843) < 1000 Then Return True
EndFunc
I know it is probably something really easy and basic. Thank you for taking the time to help me.