Skip to content

Commit bb1cbd4

Browse files
authored
Merge branch 'dev' into fix-linux-headers
2 parents f57be63 + dbcf0c9 commit bb1cbd4

File tree

112 files changed

+99030
-83254
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

112 files changed

+99030
-83254
lines changed

src/Assets/BreachIcon.png

7.8 KB
Loading

src/Classes/GemSelectControl.lua

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -480,7 +480,23 @@ function GemSelectClass:Draw(viewPort, noTooltip)
480480
local calcFunc, calcBase = self.skillsTab.build.calcsTab:GetMiscCalculator(self.build)
481481
if calcFunc then
482482
self.tooltip:Clear()
483-
local output, gemInstance = self:CalcOutputWithThisGem(calcFunc, self.gems[self.list[self.hoverSel]], self:GetQualityType(self.list[self.hoverSel]), self.skillsTab.sortGemsByDPSField == "FullDPS")
483+
local gemData = self.gems[self.list[self.hoverSel]]
484+
local qualityType = self:GetQualityType(self.list[self.hoverSel])
485+
local output= self:CalcOutputWithThisGem(calcFunc, gemData, qualityType, self.skillsTab.sortGemsByDPSField == "FullDPS")
486+
local gemInstance = {
487+
level = self.skillsTab:ProcessGemLevel(gemData),
488+
qualityId = qualityType,
489+
quality = self.skillsTab.defaultGemQuality or 0,
490+
count = 1,
491+
enabled = true,
492+
enableGlobal1 = true,
493+
enableGlobal2 = true,
494+
gemId = gemData.id,
495+
nameSpec = gemData.name,
496+
skillId = gemData.grantedEffectId,
497+
displayEffect = nil,
498+
gemData = gemData
499+
}
484500
self:AddGemTooltip(gemInstance)
485501
self.tooltip:AddSeparator(10)
486502
self.skillsTab.build:AddStatComparesToTooltip(self.tooltip, calcBase, output, "^7Selecting this gem will give you:")

src/Classes/ImportTab.lua

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -815,7 +815,8 @@ function ImportTabClass:ImportItemsAndSkills(json)
815815
end
816816

817817
local rarityMap = { [0] = "NORMAL", "MAGIC", "RARE", "UNIQUE", [9] = "RELIC", [10] = "RELIC" }
818-
local slotMap = { ["Weapon"] = "Weapon 1", ["Offhand"] = "Weapon 2", ["Weapon2"] = "Weapon 1 Swap", ["Offhand2"] = "Weapon 2 Swap", ["Helm"] = "Helmet", ["BodyArmour"] = "Body Armour", ["Gloves"] = "Gloves", ["Boots"] = "Boots", ["Amulet"] = "Amulet", ["Ring"] = "Ring 1", ["Ring2"] = "Ring 2", ["Ring3"] = "Ring 3", ["Belt"] = "Belt" }
818+
local slotMap = { ["Weapon"] = "Weapon 1", ["Offhand"] = "Weapon 2", ["Weapon2"] = "Weapon 1 Swap", ["Offhand2"] = "Weapon 2 Swap", ["Helm"] = "Helmet", ["BodyArmour"] = "Body Armour", ["Gloves"] = "Gloves", ["Boots"] = "Boots",
819+
["Amulet"] = "Amulet", ["Ring"] = "Ring 1", ["Ring2"] = "Ring 2", ["Ring3"] = "Ring 3", ["Belt"] = "Belt", ["BrequelGrafts"] = "Graft 1", ["BrequelGrafts2"] = "Graft 2", }
819820

820821
function ImportTabClass:ImportItem(itemData, slotName)
821822
if not slotName then

src/Classes/Item.lua

Lines changed: 56 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -682,6 +682,9 @@ function ItemClass:ParseRaw(raw, rarity, highQuality)
682682
if not (self.rarity == "NORMAL" or self.rarity == "MAGIC") then
683683
self.title = self.name
684684
end
685+
if self.title and self.title:find("Foulborn") then
686+
self.foulborn = true
687+
end
685688
self.type = base.type
686689
self.base = base
687690
self.affixes = (self.base.subType and data.itemMods[self.base.type..self.base.subType])
@@ -778,6 +781,27 @@ function ItemClass:ParseRaw(raw, rarity, highQuality)
778781
self.canHaveShieldCrucibleTree = true
779782
elseif lineLower == "has a two handed sword crucible passive skill tree" then
780783
self.canHaveTwoHandedSwordCrucibleTree = true
784+
elseif lineLower == "cannot roll caster modifiers" then
785+
self.restrictTag = true
786+
self.noCaster = true
787+
elseif lineLower == "cannot roll attack modifiers" then
788+
self.restrictTag = true
789+
self.noAttack = true
790+
elseif lineLower == "cannot roll modifiers of non-cold damage types" then
791+
self.restrictDamageType = true
792+
self.onlyColdDamage = true
793+
elseif lineLower == "cannot roll modifiers of non-fire damage types" then
794+
self.restrictDamageType = true
795+
self.onlyFireDamage = true
796+
elseif lineLower == "cannot roll modifiers of non-lightning damage types" then
797+
self.restrictDamageType = true
798+
self.onlyLightningDamage = true
799+
elseif lineLower == "cannot roll modifiers of non-chaos damage types" then
800+
self.restrictDamageType = true
801+
self.onlyChaosDamage = true
802+
elseif lineLower == "cannot roll modifiers of non-physical damage types" then
803+
self.restrictDamageType = true
804+
self.onlyPhysicalDamage = true
781805
end
782806

783807
local modLines
@@ -855,7 +879,7 @@ function ItemClass:ParseRaw(raw, rarity, highQuality)
855879
self.affixLimit = 2
856880
end
857881
elseif self.rarity == "RARE" then
858-
self.affixLimit = ((self.type == "Jewel" and not (self.base.subType == "Abyss" and self.corrupted)) and 4 or 6)
882+
self.affixLimit = (((self.type == "Jewel" and not (self.base.subType == "Abyss" and self.corrupted)) or self.type == "Graft") and 4 or 6)
859883
if self.prefixes.limit or self.suffixes.limit then
860884
self.prefixes.limit = m_max(m_min((self.prefixes.limit or 0) + self.affixLimit / 2, self.affixLimit), 0)
861885
self.suffixes.limit = m_max(m_min((self.suffixes.limit or 0) + self.affixLimit / 2, self.affixLimit), 0)
@@ -954,6 +978,32 @@ function ItemClass:GetModSpawnWeight(mod, includeTags, excludeTags)
954978
local function HasMavenInfluence(modAffix)
955979
return modAffix:match("Elevated")
956980
end
981+
if self.restrictTag then
982+
for _, key in ipairs(mod.modTags) do
983+
local flagName = "no" .. key:gsub("^%l", string.upper)
984+
if flagName and self[flagName] then
985+
return 0
986+
end
987+
end
988+
end
989+
if self.restrictDamageType then
990+
local required, restricted = false, {}
991+
for _, element in ipairs({ "fire", "cold", "lightning", "chaos", "physical" }) do
992+
local flagName = "only" .. element:gsub("^%l", string.upper) .. "Damage"
993+
if self[flagName] then
994+
required = true
995+
else
996+
restricted[element] = true
997+
end
998+
end
999+
if required then
1000+
for _, key in ipairs(mod.modTags) do
1001+
if restricted[key] then
1002+
return 0
1003+
end
1004+
end
1005+
end
1006+
end
9571007

9581008
for i, key in ipairs(mod.weightKey) do
9591009
if (self.base.tags[key] or (includeTags and includeTags[key]) or HasInfluenceTag(key)) and not (excludeTags and excludeTags[key]) then
@@ -1278,6 +1328,8 @@ function ItemClass:GetPrimarySlot()
12781328
return "Flask 1"
12791329
elseif self.type == "Tincture" then
12801330
return "Flask 1"
1331+
elseif self.type == "Graft" then
1332+
return "Graft 1"
12811333
else
12821334
return self.type
12831335
end
@@ -1582,8 +1634,10 @@ function ItemClass:BuildModListForSlotNum(baseList, slotNum)
15821634

15831635
-- Small and Medium Curse Cluster Jewel passive mods are parsed the same so the medium cluster data overwrites small and the skills differ
15841636
-- This changes small curse clusters to have the correct clusterJewelSkill so it passes validation below and works as expected in the tree
1585-
if jewelData.clusterJewelSkill == "affliction_curse_effect" and jewelData.clusterJewelNodeCount and jewelData.clusterJewelNodeCount < 4 then
1637+
if self.clusterJewel.size == "Small" and jewelData.clusterJewelSkill == "affliction_curse_effect" then
15861638
jewelData.clusterJewelSkill = "affliction_curse_effect_small"
1639+
elseif self.clusterJewel.size == "Medium" and jewelData.clusterJewelSkill == "affliction_curse_effect_small" then
1640+
jewelData.clusterJewelSkill = "affliction_curse_effect"
15871641
end
15881642

15891643
-- Validation

src/Classes/ItemDBControl.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ local ItemDBClass = newClass("ItemDBControl", "ListControl", function(self, anch
2626
self.leaguesAndTypesLoaded = false
2727
self.leagueList = { "Any league", "No league" }
2828
self.typeList = { "Any type", "Armour", "Jewellery", "One Handed Melee", "Two Handed Melee" }
29-
self.slotList = { "Any slot", "Weapon 1", "Weapon 2", "Helmet", "Body Armour", "Gloves", "Boots", "Amulet", "Ring", "Belt", "Jewel", "Flask" }
29+
self.slotList = { "Any slot", "Weapon 1", "Weapon 2", "Helmet", "Body Armour", "Gloves", "Boots", "Amulet", "Ring", "Belt", "Jewel", "Flask", "Graft 1", "Graft 2" }
3030
local baseY = dbType == "RARE" and -22 or -62
3131
self.controls.slot = new("DropDownControl", {"BOTTOMLEFT",self,"TOPLEFT"}, {0, baseY, 179, 18}, self.slotList, function(index, value)
3232
self.listBuildFlag = true

src/Classes/ItemsTab.lua

Lines changed: 33 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ local socketDropList = {
3030
{ label = colorCodes.SCION.."W", color = "W" }
3131
}
3232

33-
local baseSlots = { "Weapon 1", "Weapon 2", "Helmet", "Body Armour", "Gloves", "Boots", "Amulet", "Ring 1", "Ring 2", "Ring 3", "Belt", "Flask 1", "Flask 2", "Flask 3", "Flask 4", "Flask 5" }
33+
local baseSlots = { "Weapon 1", "Weapon 2", "Helmet", "Body Armour", "Gloves", "Boots", "Amulet", "Ring 1", "Ring 2", "Ring 3", "Belt", "Flask 1", "Flask 2", "Flask 3", "Flask 4", "Flask 5", "Graft 1", "Graft 2" }
3434

3535
local influenceInfo = itemLib.influenceInfo.all
3636

@@ -507,7 +507,7 @@ holding Shift will put it in the second.]])
507507
end)
508508
self.controls.displayItemAddImplicit.shown = function()
509509
return self.displayItem and
510-
self.displayItem.type ~= "Tincture" and (self.displayItem.corruptible or ((self.displayItem.type ~= "Flask" and self.displayItem.type ~= "Jewel") and
510+
self.displayItem.type ~= "Tincture" and self.displayItem.type ~= "Graft" and (self.displayItem.corruptible or ((self.displayItem.type ~= "Flask" and self.displayItem.type ~= "Jewel") and
511511
(self.displayItem.rarity == "NORMAL" or self.displayItem.rarity == "MAGIC" or self.displayItem.rarity == "RARE"))) and
512512
not self.displayItem.implicitsCannotBeChanged
513513
end
@@ -565,7 +565,7 @@ holding Shift will put it in the second.]])
565565
end})
566566
self.controls.displayItemQuality = new("LabelControl", {"TOPLEFT",self.controls.displayItemSectionQuality,"TOPRIGHT"}, {-4, 0, 0, 16}, "^7Quality:")
567567
self.controls.displayItemQuality.shown = function()
568-
return self.displayItem and self.displayItem.quality and (self.displayItem.base.type ~= "Amulet" or self.displayItem.base.type ~= "Belt" or self.displayItem.base.type ~= "Jewel" or self.displayItem.base.type ~= "Quiver" or self.displayItem.base.type ~= "Ring")
568+
return self.displayItem and self.displayItem.quality and (self.displayItem.base.type ~= "Amulet" or self.displayItem.base.type ~= "Belt" or self.displayItem.base.type ~= "Jewel" or self.displayItem.base.type ~= "Quiver" or self.displayItem.base.type ~= "Ring" or self.displayItem.type ~= "Graft")
569569
end
570570

571571
self.controls.displayItemQualityEdit = new("EditControl", {"LEFT",self.controls.displayItemQuality,"RIGHT"}, {2, 0, 60, 20}, nil, nil, "%D", 2, function(buf)
@@ -574,7 +574,7 @@ holding Shift will put it in the second.]])
574574
self:UpdateDisplayItemTooltip()
575575
end)
576576
self.controls.displayItemQualityEdit.shown = function()
577-
return self.displayItem and self.displayItem.quality and (self.displayItem.base.type ~= "Amulet" or self.displayItem.base.type ~= "Belt" or self.displayItem.base.type ~= "Jewel" or self.displayItem.base.type ~= "Quiver" or self.displayItem.base.type ~= "Ring")
577+
return self.displayItem and self.displayItem.quality and (self.displayItem.base.type ~= "Amulet" or self.displayItem.base.type ~= "Belt" or self.displayItem.base.type ~= "Jewel" or self.displayItem.base.type ~= "Quiver" or self.displayItem.base.type ~= "Ring" or self.displayItem.type ~= "Graft")
578578
end
579579

580580
-- Section: Catalysts
@@ -1996,7 +1996,7 @@ function ItemsTabClass:CraftItem()
19961996
item.implicitModLines = { }
19971997
item.explicitModLines = { }
19981998
item.crucibleModLines = { }
1999-
if base.base.type == "Amulet" or base.base.type == "Belt" or base.base.type == "Jewel" or base.base.type == "Quiver" or base.base.type == "Ring" then
1999+
if base.base.type == "Amulet" or base.base.type == "Belt" or base.base.type == "Jewel" or base.base.type == "Quiver" or base.base.type == "Ring" or base.base.type == "Graft" then
20002000
item.quality = nil
20012001
else
20022002
item.quality = 0
@@ -2730,19 +2730,19 @@ function ItemsTabClass:AddCustomModifierToDisplayItem()
27302730
end)
27312731
end
27322732
end
2733-
if self.displayItem.type ~= "Tincture" then
2733+
if self.displayItem.type ~= "Tincture" and self.displayItem.type ~= "Graft" then
27342734
if self.displayItem.type ~= "Jewel" then
27352735
t_insert(sourceList, { label = "Crafting Bench", sourceId = "MASTER" })
27362736
end
2737-
if self.displayItem.type ~= "Jewel" and self.displayItem.type ~= "Flask" then
2737+
if self.displayItem.type ~= "Jewel" and self.displayItem.type ~= "Flask" and self.displayItem.type ~= "Graft" then
27382738
t_insert(sourceList, { label = "Essence", sourceId = "ESSENCE" })
27392739
t_insert(sourceList, { label = "Veiled", sourceId = "VEILED"})
27402740
t_insert(sourceList, { label = "Beastcraft", sourceId = "BEASTCRAFT" })
27412741
end
27422742
if self.displayItem.type == "Helmet" or self.displayItem.type == "Body Armour" or self.displayItem.type == "Gloves" or self.displayItem.type == "Boots" then
27432743
t_insert(sourceList, { label = "Necropolis", sourceId = "NECROPOLIS"})
27442744
end
2745-
if not self.displayItem.clusterJewel and self.displayItem.type ~= "Flask" then
2745+
if not self.displayItem.clusterJewel and self.displayItem.type ~= "Flask" and self.displayItem.type ~= "Graft" then
27462746
t_insert(sourceList, { label = "Delve", sourceId = "DELVE"})
27472747
end
27482748
if not self.displayItem.crafted then
@@ -3080,7 +3080,7 @@ function ItemsTabClass:AddImplicitToDisplayItem()
30803080
t_insert(sourceList, { label = "Eater of Worlds", sourceId = "EATER" })
30813081
end
30823082
end
3083-
if self.displayItem.type ~= "Flask" and self.displayItem.type ~= "Jewel" then
3083+
if self.displayItem.type ~= "Flask" and self.displayItem.type ~= "Jewel" and self.displayItem.type ~= "Graft" then
30843084
--t_insert(sourceList, { label = "Synth", sourceId = "SYNTHESIS" }) -- synth removed until we get proper support for where the mods go
30853085
t_insert(sourceList, { label = "Delve", sourceId = "DelveImplicit" })
30863086
end
@@ -3217,17 +3217,22 @@ function ItemsTabClass:SetTooltipHeaderInfluence(tooltip, item)
32173217
end
32183218
end
32193219

3220-
if item.title and item.title:find("Replica") then
3221-
addInfluence("Experimented")
32223220
-- Eater and Exarch combo takes priority over fractured icon.
3223-
elseif item.cleansing and item.tangle then
3221+
if item.cleansing and item.tangle then
32243222
addInfluence("Exarch")
32253223
addInfluence("Eater")
32263224
else
32273225
-- Dual influence with fracture will show fractured icon and highest priority influence.
32283226
if item.fractured then
32293227
addInfluence("Fractured")
32303228
end
3229+
-- Replica Eternity Shroud has Experimented icon and Shaper icon on the right.
3230+
if item.title and item.title:find("Replica") then
3231+
addInfluence("Experimented")
3232+
end
3233+
if item.foulborn then
3234+
addInfluence("Foulborn")
3235+
end
32313236
if item.veiled then
32323237
addInfluence("Veiled")
32333238
end
@@ -3579,10 +3584,17 @@ function ItemsTabClass:AddItemTooltip(tooltip, item, slot, dbMode)
35793584
end
35803585

35813586
-- Show flavour text:
3582-
if (item.rarity == "UNIQUE" or item.rarity == "RELIC" or item.baseName == "Grasping Mail") and main.showFlavourText == true then
3583-
local flavourTable = flavourLookup[item.baseName == "Grasping Mail" and item.baseName or item.title]
3587+
if (item.rarity == "UNIQUE" or item.rarity == "RELIC" or item.base.flavourText) and main.showFlavourText then
3588+
local flavour = nil
3589+
local flavourTable = nil
3590+
3591+
if item.base.flavourText then
3592+
flavour = item.base.flavourText
3593+
else
3594+
flavourTable = flavourLookup[item.title:gsub("^Foulborn%s+", "")]
3595+
end
3596+
35843597
if flavourTable then
3585-
local flavour = nil
35863598
if item.title == "Grand Spectrum" then
35873599
local selectedFlavourId = nil
35883600
for _, lineEntry in ipairs(tooltip.lines or {}) do
@@ -3616,7 +3628,7 @@ function ItemsTabClass:AddItemTooltip(tooltip, item, slot, dbMode)
36163628
break
36173629
end
36183630
end
3619-
if selectedFlavourId then
3631+
if selectedFlavourId and flavourTable[selectedFlavourId] then
36203632
flavour = flavourTable[selectedFlavourId]
36213633
end
36223634
else
@@ -3625,13 +3637,13 @@ function ItemsTabClass:AddItemTooltip(tooltip, item, slot, dbMode)
36253637
break
36263638
end
36273639
end
3640+
end
36283641

3629-
if flavour then
3630-
for _, line in ipairs(flavour) do
3631-
tooltip:AddLine(fontSizeBig, colorCodes.UNIQUE .. line, "FONTIN SC ITALIC")
3632-
end
3633-
tooltip:AddSeparator(14)
3642+
if flavour then
3643+
for _, line in ipairs(flavour) do
3644+
tooltip:AddLine(fontSizeBig, colorCodes.UNIQUE .. line, "FONTIN SC ITALIC")
36343645
end
3646+
tooltip:AddSeparator(14)
36353647
end
36363648
end
36373649

src/Classes/ModStore.lua

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -235,13 +235,21 @@ function ModStoreClass:GetMultiplier(var, cfg, noMod)
235235
end
236236

237237
function ModStoreClass:GetStat(stat, cfg)
238+
-- Checks if any buff in buffList matches
239+
-- Was needed for skills that provide multiple buffs (e.g. Herald of Agony) and can't be accesses with `buffList[1]`
240+
local function isNameInBuffList(buffList, name)
241+
for _, buff in ipairs(buffList) do
242+
if buff.name == name then return true end
243+
end
244+
return false
245+
end
238246
if stat == "ManaReservedPercent" then
239247
local reservedPercentMana = 0
240248
-- Check if mana is 0 (i.e. from Blood Magic) to avoid division by 0.
241249
local totalMana = self.actor.output["Mana"]
242250
if totalMana == 0 then return 0 else
243251
for _, activeSkill in ipairs(self.actor.activeSkillList) do
244-
if (activeSkill.skillTypes[SkillType.Aura] and not activeSkill.skillFlags.disable and activeSkill.buffList and activeSkill.buffList[1] and activeSkill.buffList[1].name == cfg.skillName) then
252+
if (activeSkill.skillTypes[SkillType.HasReservation] and not activeSkill.skillFlags.disable and activeSkill.buffList and activeSkill.buffList[1] and cfg and (isNameInBuffList(activeSkill.buffList, cfg.skillName) or isNameInBuffList(activeSkill.buffList, cfg.summonSkillName)) ) then
245253
local manaBase = activeSkill.skillData["ManaReservedBase"] or 0
246254
reservedPercentMana = manaBase / totalMana * 100
247255
break
@@ -250,6 +258,20 @@ function ModStoreClass:GetStat(stat, cfg)
250258
return m_min(reservedPercentMana, 100) --Don't let people get more than 100% reservation for aura effect.
251259
end
252260
end
261+
if stat == "LifeReservedPercent" then
262+
local reservedPercentLife = 0
263+
local totalLife = self.actor.output["Life"]
264+
if totalLife == 0 then return 0 else
265+
for _, activeSkill in ipairs(self.actor.activeSkillList) do
266+
if (activeSkill.skillTypes[SkillType.HasReservation] and not activeSkill.skillFlags.disable and activeSkill.buffList and activeSkill.buffList[1] and cfg and (isNameInBuffList(activeSkill.buffList, cfg.skillName) or isNameInBuffList(activeSkill.buffList, cfg.summonSkillName)) ) then
267+
local lifeBase = activeSkill.skillData["LifeReservedBase"] or 0
268+
reservedPercentLife = lifeBase / totalLife * 100
269+
break
270+
end
271+
end
272+
return m_min(reservedPercentLife, 100) --Don't let people get more than 100% reservation for aura effect.
273+
end
274+
end
253275
-- if ReservationEfficiency is -100, ManaUnreserved is nan which breaks everything if Arcane Cloak is enabled
254276
if stat == "ManaUnreserved" and self.actor.output[stat] ~= self.actor.output[stat] then
255277
-- 0% reserved = total mana

src/Classes/Tooltip.lua

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -326,6 +326,7 @@ function TooltipClass:Draw(x, y, w, h, viewPort)
326326
Exarch = "Assets/exarchicon.png",
327327
Synthesis = "Assets/synthesisicon.png",
328328
Experimented = "Assets/experimentedicon.png",
329+
Foulborn = "Assets/breachicon.png",
329330
}
330331
local headerConfigs = {
331332
RELIC = {left="Assets/itemsheaderfoilleft.png",middle="Assets/itemsheaderfoilmiddle.png",right="Assets/itemsheaderfoilright.png",height=54,sideWidth=47,middleWidth=52,textYOffset=2},

src/Classes/TradeQueryGenerator.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -915,7 +915,7 @@ function TradeQueryGeneratorClass:FinishQuery()
915915
}
916916
}
917917
},
918-
status = { option = "online" },
918+
status = { option = "available" },
919919
stats = {
920920
{
921921
type = "weight",

src/Classes/TreeTab.lua

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2070,7 +2070,7 @@ function TreeTabClass:FindTimelessJewel()
20702070
local search = {
20712071
query = {
20722072
status = {
2073-
option = "online"
2073+
option = "available"
20742074
},
20752075
stats = {
20762076
{

0 commit comments

Comments
 (0)