From 67134df5b4f43765505e2ed051faa4c904eccbbb Mon Sep 17 00:00:00 2001 From: vaisest <4550061+vaisest@users.noreply.github.com> Date: Fri, 21 Aug 2026 18:28:22 +0300 Subject: [PATCH] Use require for loading more modules --- src/Classes/BuildListControl.lua | 2 +- src/Classes/CalcsTab.lua | 2 +- src/Classes/CompareBuySimilar.lua | 21 +++--- src/Classes/CompareEntry.lua | 2 +- src/Classes/CompareTab.lua | 16 ++--- src/Classes/ConfigTab.lua | 4 +- src/Classes/GemSelectControl.lua | 2 +- src/Classes/ItemSlotControl.lua | 2 +- src/Classes/ItemsTab.lua | 4 +- src/Classes/PassiveTree.lua | 8 +-- src/Classes/PassiveTreeView.lua | 2 +- src/Classes/TradeHelpers.lua | 64 ++++++++++--------- src/Classes/TradeQuery.lua | 2 +- src/Classes/TradeQueryGenerator.lua | 6 +- src/Classes/TradeQueryRequests.lua | 2 +- src/Data/Uniques/Special/Generated.lua | 2 +- src/Modules/Build.lua | 2 +- src/Modules/BuildList.lua | 2 +- src/Modules/CalcOffence.lua | 4 +- src/Modules/CalcPerform.lua | 4 +- src/Modules/Calcs.lua | 2 +- .../DataAbyssJewelLookUpTableHelper.lua | 2 +- src/Modules/DataLegionLookUpTableHelper.lua | 2 +- src/Modules/Main.lua | 4 +- src/_SimpleGraphic.def.lua | 2 +- 25 files changed, 86 insertions(+), 79 deletions(-) diff --git a/src/Classes/BuildListControl.lua b/src/Classes/BuildListControl.lua index 4e32355fd03..6979de79a15 100644 --- a/src/Classes/BuildListControl.lua +++ b/src/Classes/BuildListControl.lua @@ -5,7 +5,7 @@ -- local ipairs = ipairs local s_format = string.format -local buildListHelpers = LoadModule("Modules/BuildListHelpers") +local buildListHelpers = require("Modules.BuildListHelpers") ---@class BuildListControl: ListControl local BuildListClass = newClass("BuildListControl", "ListControl") diff --git a/src/Classes/CalcsTab.lua b/src/Classes/CalcsTab.lua index 7af7c72e63c..17c49346574 100644 --- a/src/Classes/CalcsTab.lua +++ b/src/Classes/CalcsTab.lua @@ -29,7 +29,7 @@ function CalcsTabClass:CalcsTab(build) self.build = build - self.calcs = LoadModule("Modules/Calcs") + self.calcs = require("Modules.Calcs") self.input = { } self.input.skill_number = 1 diff --git a/src/Classes/CompareBuySimilar.lua b/src/Classes/CompareBuySimilar.lua index 6b0424d8ac6..fa5447979be 100644 --- a/src/Classes/CompareBuySimilar.lua +++ b/src/Classes/CompareBuySimilar.lua @@ -6,15 +6,19 @@ local t_insert = table.insert local m_floor = math.floor local dkjson = require "dkjson" -local tradeHelpers = LoadModule("Classes/TradeHelpers") -local tradeStats = tradeHelpers.getTradeStats() - --- used to check what stats actually exist on the trade site. -local existingStats = {} -for _, cat in ipairs(tradeStats or {}) do - for _, entry in ipairs(cat.entries) do - existingStats[entry.id] = true +local tradeHelpers = require("Classes.TradeHelpers") + +-- used to check what stats actually exist on the trade site +local _existingStats +local function getStats() + if _existingStats then return _existingStats end + _existingStats = {} + for _, cat in ipairs(tradeHelpers.getTradeStats() or {}) do + for _, entry in ipairs(cat.entries) do + _existingStats[entry.id] = true + end end + return _existingStats end local M = {} @@ -257,6 +261,7 @@ function M.addModEntries(item, modTypeSources) -- convert hashes to string ids local resultIds = {} if resultHashes then + local existingStats = getStats() for idx = 1, #resultHashes do local id = string.format("%s.stat_%s", source.type, resultHashes[idx]) if existingStats[id] then diff --git a/src/Classes/CompareEntry.lua b/src/Classes/CompareEntry.lua index 2d97f4eb9cb..712a3f25e0d 100644 --- a/src/Classes/CompareEntry.lua +++ b/src/Classes/CompareEntry.lua @@ -48,7 +48,7 @@ function CompareEntryClass:CompareEntry(xmlText, label) self.outputRevision = 1 -- Display stats (same as primary build uses) - local displayStatsModule = LoadModule("Modules/BuildDisplayStats") + local displayStatsModule = require("Modules.BuildDisplayStats") self.displayStats = displayStatsModule.displayStats self.minionDisplayStats = displayStatsModule.minionDisplayStats self.extraSaveStats = displayStatsModule.extraSaveStats diff --git a/src/Classes/CompareTab.lua b/src/Classes/CompareTab.lua index eca72619032..592105743b2 100644 --- a/src/Classes/CompareTab.lua +++ b/src/Classes/CompareTab.lua @@ -9,12 +9,12 @@ local m_min = math.min local m_max = math.max local m_floor = math.floor local s_format = string.format -local tradeHelpers = LoadModule("Classes/TradeHelpers") -local buySimilar = LoadModule("Classes/CompareBuySimilar") -local calcsHelpers = LoadModule("Classes/CompareCalcsHelpers") -local buildListHelpers = LoadModule("Modules/BuildListHelpers") -local itemSlotHelper = LoadModule("Modules/ItemSlotHelper") -local configVisibility = LoadModule("Modules/ConfigVisibility") +local tradeHelpers = require("Classes.TradeHelpers") +local buySimilar = require("Classes.CompareBuySimilar") +local calcsHelpers = require("Classes.CompareCalcsHelpers") +local buildListHelpers = require("Modules.BuildListHelpers") +local itemSlotHelper = require("Modules.ItemSlotHelper") +local configVisibility = require("Modules.ConfigVisibility") -- Node IDs below this value are normal passive tree nodes; IDs at or above are cluster jewel nodes local CLUSTER_NODE_OFFSET = 65536 @@ -188,9 +188,9 @@ function CompareTabClass:CompareTab(primaryBuild) self.comparePowerCompareId = nil -- track which compare entry was calculated -- Pre-load static module data - self.configOptions = LoadModule("Modules/ConfigOptions") + self.configOptions = require("Modules.ConfigOptions") self.calcSections = LoadModule("Modules/CalcSections") - self.calcs = LoadModule("Modules/Calcs") + self.calcs = require("Modules.Calcs") -- Controls for the comparison screen self:InitControls() diff --git a/src/Classes/ConfigTab.lua b/src/Classes/ConfigTab.lua index 9979e581ff7..23276bd266c 100644 --- a/src/Classes/ConfigTab.lua +++ b/src/Classes/ConfigTab.lua @@ -9,8 +9,8 @@ local m_max = math.max local m_floor = math.floor local s_upper = string.upper -local varList = LoadModule("Modules/ConfigOptions") -local configVisibility = LoadModule("Modules/ConfigVisibility") +local varList = require("Modules.ConfigOptions") +local configVisibility = require("Modules.ConfigVisibility") ---@class CustomModBlock: ControlHost, Control local CustomModBlockClass = newClass("CustomModBlockControl", "ControlHost", "Control") diff --git a/src/Classes/GemSelectControl.lua b/src/Classes/GemSelectControl.lua index a65c2ded383..ccaeeb33f8d 100644 --- a/src/Classes/GemSelectControl.lua +++ b/src/Classes/GemSelectControl.lua @@ -11,7 +11,7 @@ local m_min = math.min local m_max = math.max local m_floor = math.floor -local gemTooltip = LoadModule("Classes/GemTooltip") +local gemTooltip = require("Classes.GemTooltip") local toolTipText = "Prefix tag searches with a colon and exclude tags with a dash. e.g. :fire:lightning:-cold:area" local imbuedTooltipText = "\"Socketed in\" item must be set in order to add an imbued support.\nOnly one imbued support is allowed per item." diff --git a/src/Classes/ItemSlotControl.lua b/src/Classes/ItemSlotControl.lua index 90bf611c00c..af994611fe5 100644 --- a/src/Classes/ItemSlotControl.lua +++ b/src/Classes/ItemSlotControl.lua @@ -7,7 +7,7 @@ local pairs = pairs local t_insert = table.insert local m_min = math.min -local itemSlotHelper = LoadModule("Modules/ItemSlotHelper") +local itemSlotHelper = require("Modules.ItemSlotHelper") ---@class ItemSlotControl local ItemSlotClass = newClass("ItemSlotControl", "DropDownControl") diff --git a/src/Classes/ItemsTab.lua b/src/Classes/ItemsTab.lua index 3ae6e046aa3..084372df54e 100644 --- a/src/Classes/ItemsTab.lua +++ b/src/Classes/ItemsTab.lua @@ -14,9 +14,9 @@ local m_min = math.min local m_ceil = math.ceil local m_floor = math.floor local m_modf = math.modf -local buySimilar = LoadModule("Classes/CompareBuySimilar") +local buySimilar = require("Classes.CompareBuySimilar") -local gemTooltip = LoadModule("Classes/GemTooltip") +local gemTooltip = require("Classes.GemTooltip") local rarityDropList = { { label = colorCodes.NORMAL.."Normal", rarity = "NORMAL" }, { label = colorCodes.MAGIC.."Magic", rarity = "MAGIC" }, diff --git a/src/Classes/PassiveTree.lua b/src/Classes/PassiveTree.lua index b6a705b0be2..eaefb89b898 100644 --- a/src/Classes/PassiveTree.lua +++ b/src/Classes/PassiveTree.lua @@ -75,8 +75,8 @@ function PassiveTreeClass:PassiveTree(treeVersion) self.treeVersion = treeVersion local versionNum = treeVersions[treeVersion].num - self.legion = LoadModule("Data/TimelessJewelData/LegionPassives") - self.tattoo = LoadModule("Data/TattooPassives") + self.legion = require("Data.TimelessJewelData.LegionPassives") + self.tattoo = require("Data.TattooPassives") MakeDir("TreeData") @@ -231,7 +231,7 @@ function PassiveTreeClass:PassiveTree(treeVersion) end if not self.assets then - self.assets = LoadModule("TreeData/3_19/Assets.lua") + self.assets = require("TreeData.3_19.Assets") self.assets = self.assets.assets if self.alternate_ascendancies then -- backgrounds @@ -386,7 +386,7 @@ function PassiveTreeClass:PassiveTree(treeVersion) end -- Load legion sprite sheets and build sprite map - local legionSprites = LoadModule("TreeData/legion/tree-legion.lua") + local legionSprites = require("TreeData.legion.tree-legion") local function loadLegionSheet(data) local sheet = spriteSheets[data.filename] if not sheet then diff --git a/src/Classes/PassiveTreeView.lua b/src/Classes/PassiveTreeView.lua index 17a03102419..ea7bef3f111 100644 --- a/src/Classes/PassiveTreeView.lua +++ b/src/Classes/PassiveTreeView.lua @@ -18,7 +18,7 @@ local JEWEL_RADIUS_TINT_NEUTRAL = { 1, 1, 1, 0.7 } local JEWEL_RADIUS_TINT_PRIMARY_ONLY = { 1, 0, 0, 0.7 } local JEWEL_RADIUS_TINT_COMPARE_ONLY = { 0, 1, 0, 0.7 } -local gemTooltip = LoadModule("Classes/GemTooltip") +local gemTooltip = require("Classes.GemTooltip") local function isAbyssConquered(node) local conqueror = node and node.conqueredBy and node.conqueredBy.conqueror diff --git a/src/Classes/TradeHelpers.lua b/src/Classes/TradeHelpers.lua index 4448bd0a032..24c96000bb4 100644 --- a/src/Classes/TradeHelpers.lua +++ b/src/Classes/TradeHelpers.lua @@ -4,34 +4,40 @@ -- Stateless trade mod lookup/matching and item display helper functions -- local m_floor = math.floor -local statDescData = require("Data.StatDescriptions.stat_descriptions") --- precalculate patterns used for matching stat lines +-- The stat description data is big and is only needed once a trade lookup actually runs, +-- so it and its precalculated patterns are built lazily local numberPattern = "%%d%+%%.%?%%d*" -for _, statDescEntry in ipairs(statDescData) do - for _, desc in ipairs(statDescEntry[1] or {}) do - -- pob doesn't parse this as a part of other mods - desc.text = desc.text:gsub("\nPassage", "") - desc.pat = desc.text - -- ignore uppercase letters to help custom items match - :lower() - -- remove minus and plus signs - :gsub("%-{", "{") - :gsub("%+{", "{") - -- escape existing characters - :gsub("([%(%)%.%%%+%-%*%?%[%]%^%$])", "%%%1") - -- match # to # as one block since the trade site uses the midpoint. these don't seem to - -- ever have plus or minus signs, and can't be negative as even flat damage turns into - -- flat damage against you instead of being negative - :gsub("{.-} to {.-}", string.format("(%s to %s)", numberPattern, numberPattern)) - - -- match number variables like {}, {0}, {0:-d}, {0:+d}, or {:d} - :gsub("{.-}", - -- and add optional plus and number signs. this is not necessarily correct as some - -- stats do require the plus sign to parse, but this simplifies handling reflected - -- mods - "%%%+%?(%%%-%?" .. numberPattern .. ")") +local statDescData +local function getStatDescData() + if statDescData then return statDescData end + statDescData = LoadModule("Data/StatDescriptions/stat_descriptions") + for _, statDescEntry in ipairs(statDescData) do + for _, desc in ipairs(statDescEntry[1] or {}) do + -- pob doesn't parse this as a part of other mods + desc.text = desc.text:gsub("\nPassage", "") + desc.pat = desc.text + -- ignore uppercase letters to help custom items match + :lower() + -- remove minus and plus signs + :gsub("%-{", "{") + :gsub("%+{", "{") + -- escape existing characters + :gsub("([%(%)%.%%%+%-%*%?%[%]%^%$])", "%%%1") + -- match # to # as one block since the trade site uses the midpoint. these don't seem to + -- ever have plus or minus signs, and can't be negative as even flat damage turns into + -- flat damage against you instead of being negative + :gsub("{.-} to {.-}", string.format("(%s to %s)", numberPattern, numberPattern)) + + -- match number variables like {}, {0}, {0:-d}, {0:+d}, or {:d} + :gsub("{.-}", + -- and add optional plus and number signs. this is not necessarily correct as some + -- stats do require the plus sign to parse, but this simplifies handling reflected + -- mods + "%%%+%?(%%%-%?" .. numberPattern .. ")") + end end + return statDescData end local M = {} @@ -68,13 +74,9 @@ function M.modLineValue(line, onlyFromTo) return tonumber(line:match("%-?[%d]+%.?[%d]*")) end -local _tradeStats - ---@return table? tradeStats function M.getTradeStats() - if _tradeStats then return _tradeStats end - _tradeStats = LoadModule("Data/TradeSiteStats") - return _tradeStats + return require("Data.TradeSiteStats") end local _optionTradeStatMap @@ -216,7 +218,7 @@ function M.findTradeHash(modLine) break end end - for _, statDescEntry in ipairs(statDescData) do + for _, statDescEntry in ipairs(getStatDescData()) do local statDescriptions = statDescEntry[1] if not statDescriptions then goto continue diff --git a/src/Classes/TradeQuery.lua b/src/Classes/TradeQuery.lua index 7ea2fcedf00..2501e5f626c 100644 --- a/src/Classes/TradeQuery.lua +++ b/src/Classes/TradeQuery.lua @@ -6,7 +6,7 @@ local dkjson = require "dkjson" -local itemSlotHelper = LoadModule("Modules/ItemSlotHelper") +local itemSlotHelper = require("Modules.ItemSlotHelper") local get_time = os.time local t_insert = table.insert diff --git a/src/Classes/TradeQueryGenerator.lua b/src/Classes/TradeQueryGenerator.lua index 9b7e3f5b406..529f7486006 100644 --- a/src/Classes/TradeQueryGenerator.lua +++ b/src/Classes/TradeQueryGenerator.lua @@ -9,8 +9,8 @@ local curl = require("lcurl.safe") local m_max = math.max local s_format = string.format local t_insert = table.insert -local tradeHelpers = LoadModule("Classes/TradeHelpers") -local utils = LoadModule("Modules/Utils") +local tradeHelpers = require("Classes.TradeHelpers") +local utils = require("Modules.Utils") -- a table which tells us what subtypes each category we can search for -- contains. the commented out lines are type-subtype combinations which don't @@ -378,7 +378,7 @@ function TradeQueryGeneratorClass:InitMods() if file then file:close() ---@module "src.Data.QueryMods" - self.modData = LoadModule(queryModFilePath) + self.modData = require(queryModFilePath:gsub("%.lua$", "")) return end diff --git a/src/Classes/TradeQueryRequests.lua b/src/Classes/TradeQueryRequests.lua index b0067123807..f76db449917 100644 --- a/src/Classes/TradeQueryRequests.lua +++ b/src/Classes/TradeQueryRequests.lua @@ -5,7 +5,7 @@ -- local dkjson = require "dkjson" -local utils = LoadModule("Modules/Utils") +local utils = require("Modules.Utils") ---@class TradeQueryRequests local TradeQueryRequestsClass = newClass("TradeQueryRequests") diff --git a/src/Data/Uniques/Special/Generated.lua b/src/Data/Uniques/Special/Generated.lua index 007222a3abc..de0f55850b0 100644 --- a/src/Data/Uniques/Special/Generated.lua +++ b/src/Data/Uniques/Special/Generated.lua @@ -948,7 +948,7 @@ table.insert(data.uniques.generated, table.concat(thatWhichWasTaken, "\n")) local replicaDragonfangsFlightMods = {} -LoadModule("Modules/CalcTools") +require("Modules.CalcTools") for _, gem in pairs(data.gems) do if not string.match(gem.grantedEffectId, "Alt[XY]$") and calcLib.gemIsType(gem, "active skill", false) and calcLib.gemIsType(gem, "non-vaal", false) then replicaDragonfangsFlightMods[gem.name] = "+3 to Level of all "..gem.name.." Gems" diff --git a/src/Modules/Build.lua b/src/Modules/Build.lua index dcfbc74e892..a3c0bb6d473 100644 --- a/src/Modules/Build.lua +++ b/src/Modules/Build.lua @@ -427,7 +427,7 @@ function buildMode:Init(dbFileName, buildName, buildXML, convertBuild, importLin end -- List of display stats - local displayStatsModule = LoadModule("Modules/BuildDisplayStats") + local displayStatsModule = require("Modules.BuildDisplayStats") self.displayStats = displayStatsModule.displayStats self.minionDisplayStats = displayStatsModule.minionDisplayStats self.extraSaveStats = displayStatsModule.extraSaveStats diff --git a/src/Modules/BuildList.lua b/src/Modules/BuildList.lua index db6467d663b..7648110d0ce 100644 --- a/src/Modules/BuildList.lua +++ b/src/Modules/BuildList.lua @@ -7,7 +7,7 @@ local pairs = pairs local ipairs = ipairs local t_insert = table.insert -local buildListHelpers = LoadModule("Modules/BuildListHelpers") +local buildListHelpers = require("Modules.BuildListHelpers") local buildSortDropList = buildListHelpers.buildSortDropList local listMode = new("ControlHost"):ControlHost() diff --git a/src/Modules/CalcOffence.lua b/src/Modules/CalcOffence.lua index 3fd3f028e3a..57e23a27053 100644 --- a/src/Modules/CalcOffence.lua +++ b/src/Modules/CalcOffence.lua @@ -1940,7 +1940,7 @@ function calcs.offence(env, actor, activeSkill) local critOverride = skillModList:Override(skillCfg, "WeaponBaseCritChance") if skillFlags.weapon1Attack then if breakdown then - breakdown.MainHand = LoadModule(calcs.breakdownModule)(skillModList, output.MainHand) + breakdown.MainHand = require(calcs.breakdownModule)(skillModList, output.MainHand) end activeSkill.weapon1Cfg.skillStats = output.MainHand local source = copyTable(actor.weaponData1) @@ -1957,7 +1957,7 @@ function calcs.offence(env, actor, activeSkill) end if skillFlags.weapon2Attack then if breakdown then - breakdown.OffHand = LoadModule(calcs.breakdownModule)(skillModList, output.OffHand) + breakdown.OffHand = require(calcs.breakdownModule)(skillModList, output.OffHand) end activeSkill.weapon2Cfg.skillStats = output.OffHand local source = copyTable(actor.weaponData2) diff --git a/src/Modules/CalcPerform.lua b/src/Modules/CalcPerform.lua index 95e90c38252..1882e8320b0 100644 --- a/src/Modules/CalcPerform.lua +++ b/src/Modules/CalcPerform.lua @@ -1480,10 +1480,10 @@ function calcs.perform(env, skipEHP) local breakdown = nil if env.mode == "CALCS" then -- Initialise breakdown module - breakdown = LoadModule(calcs.breakdownModule)(modDB, output, env.player) + breakdown = require(calcs.breakdownModule)(modDB, output, env.player) env.player.breakdown = breakdown if env.minion then - env.minion.breakdown = LoadModule(calcs.breakdownModule)(env.minion.modDB, env.minion.output, env.minion) + env.minion.breakdown = require(calcs.breakdownModule)(env.minion.modDB, env.minion.output, env.minion) end end diff --git a/src/Modules/Calcs.lua b/src/Modules/Calcs.lua index 917b29d35d2..9f5fb37d239 100644 --- a/src/Modules/Calcs.lua +++ b/src/Modules/Calcs.lua @@ -12,7 +12,7 @@ local m_ceil = math.ceil ---@class Calcs local calcs = require("Modules.CalcBase") -calcs.breakdownModule = "Modules/CalcBreakdown" +calcs.breakdownModule = "Modules.CalcBreakdown" require("Modules.CalcSetup") require("Modules.CalcPerform") require("Modules.CalcActiveSkill") diff --git a/src/Modules/DataAbyssJewelLookUpTableHelper.lua b/src/Modules/DataAbyssJewelLookUpTableHelper.lua index 85674cb4cb8..78c32af2a4d 100644 --- a/src/Modules/DataAbyssJewelLookUpTableHelper.lua +++ b/src/Modules/DataAbyssJewelLookUpTableHelper.lua @@ -5,7 +5,7 @@ -- local s_byte = string.byte local s_sub = string.sub -local loadJewelFile = LoadModule("Modules/DataJewelFileLoader") +local loadJewelFile = require("Modules.DataJewelFileLoader") local function readUInt16(jewelData, offset) return bytesToUShort(jewelData, offset), offset + 2 diff --git a/src/Modules/DataLegionLookUpTableHelper.lua b/src/Modules/DataLegionLookUpTableHelper.lua index aaf044b1ad5..a936f6e0f01 100644 --- a/src/Modules/DataLegionLookUpTableHelper.lua +++ b/src/Modules/DataLegionLookUpTableHelper.lua @@ -3,7 +3,7 @@ -- Module: Data Legion Look Up Table Helper -- Contains functions for managing the LUTs for the data module -- -local loadJewelFile = LoadModule("Modules/DataJewelFileLoader") +local loadJewelFile = require("Modules.DataJewelFileLoader") -- lazy load a specific timeless jewel type -- valid values: "Glorious Vanity", "Lethal Pride", "Brutal Restraint", "Militant Faith", "Elegant Hubris" diff --git a/src/Modules/Main.lua b/src/Modules/Main.lua index dab3eb6d353..d79e6147e32 100644 --- a/src/Modules/Main.lua +++ b/src/Modules/Main.lua @@ -19,8 +19,8 @@ LoadModule("Modules/Common") LoadModule("Modules/CalcFormat") LoadModule("Modules/Data") LoadModule("Modules/ModTools") -LoadModule("Modules/ItemTools") -LoadModule("Modules/CalcTools") +require("Modules.ItemTools") +require("Modules.CalcTools") LoadModule("Modules/PantheonTools") LoadModule("Modules/BuildSiteTools") diff --git a/src/_SimpleGraphic.def.lua b/src/_SimpleGraphic.def.lua index 158ed456dc1..6e159e4134e 100644 --- a/src/_SimpleGraphic.def.lua +++ b/src/_SimpleGraphic.def.lua @@ -432,7 +432,7 @@ function AbortSubScript(ssID) end function IsSubScriptRunning(ssID) end ---@param name string ----@param ... any +---@param ... any Extra parameters are passed to the file. This should be avoided to keep compatibility with require(). It is instead better to return a function which can be called with the parameters. ---@return unknown retVal use ---@module "name" instead function LoadModule(name, ...) if not name:match("%.lua") then