Module:TestModule: Difference between revisions

From MENACE Official Wiki
Khitrir (talk | contribs)
No edit summary
Khitrir (talk | contribs)
No edit summary
 
(13 intermediate revisions by the same user not shown)
Line 1: Line 1:
---
---
--- Extracts attributes of Weapons from Module:Data/Weapons.json
--- Extracts attributes of weapons from Module:Data/Weapons.json
---
---


Line 15: Line 15:


--region Private member variables
--region Private member variables
local TestModule
local weaponsData
--endregion
--endregion


--region Private methods
--region Private methods
local function loadData()
local function loadData()
     if not TestModule then
     if not weaponsData then
         TestModule = JsonUtils.convertJSONToLuaTable(DATA_FILE)
         weaponsData = JsonUtils.convertJSONToLuaTable(DATA_FILE)
     end
     end
end
end


local function getTitleFromArgs(frame)
local function getTitleFromArgs(frame)
     if frame.args then
     if frame.args then
      return frame.args[3] or frame.args.title
        return frame.args[1] or frame.args.title
     else
     else
      return frame
        return frame
     end
     end
end
end
--endregion
function TestModule.get(frame)
    loadData()
    local weaponTitle = frame.args[1]
    local weaponProperty = frame.args[2]


    if not weaponTitle or not weaponProperty then
        return "Error: One or more arguments missing"
    end


local function getPropertyByTitle(frame, property)
    for _, weapon in ipairs(weaponsData) do
        if weapon.Title and string.lower(weapon.Title) == string.lower(weaponTitle) then
            return weapon[weaponProperty] or "Error: Property of that name not found"
        end
    end
 
    return "Error: Weapon of that name not found"
end
 
 
function TestModule.getSkillProperty(frame)
     loadData()
     loadData()


     local weaponTitle = getTitleFromArgs(frame)
     local weaponTitle = frame.args[1]
    local skillTitle = frame.args[2]
    local skillProperty = frame.args[3]


     for _, weapon in ipairs(TestModule) do
    if not weaponTitle or not skillTitle or not skillProperty then
         if string.lower(weapon.Title) == string.lower(weaponTitle) then
        return "Error: One or more arguments missing"
          return weapon[property]
    end
 
     for _, weapon in ipairs(weaponsData) do
         if weapon.Title and string.lower(weapon.Title) == string.lower(weaponTitle) then
            for _, skill in ipairs(weapon.SkillsGranted or {}) do
                if skill.Title and string.lower(skill.Title) == string.lower(skillTitle) then
                    return skill[skillProperty]
                end
            end
            return "Error: Skill of that name not found"
         end
         end
     end
     end
end
--endregion


function TestModule.getIconByTitle(frame)
     return "Error: Weapon of that name not found"
     return getPropertyByTitle(frame, "Icon")
end
end


return TestModule
return TestModule

Latest revision as of 05:12, 4 May 2026

Documentation for this module may be created at Module:TestModule/doc

---
--- Extracts attributes of weapons from Module:Data/Weapons.json
---

---@module TestModule
local TestModule = {}

--region Dependencies
local JsonUtils = require("Module:JsonUtils")
--endregion

--region Private constants
local DATA_FILE = "Module:Data/Weapons.json"
--endregion

--region Private member variables
local weaponsData
--endregion

--region Private methods
local function loadData()
    if not weaponsData then
        weaponsData = JsonUtils.convertJSONToLuaTable(DATA_FILE)
    end
end

local function getTitleFromArgs(frame)
    if frame.args then
        return frame.args[1] or frame.args.title
    else
        return frame
    end
end
--endregion

function TestModule.get(frame)
    loadData()

    local weaponTitle = frame.args[1]
    local weaponProperty = frame.args[2]

    if not weaponTitle or not weaponProperty then
        return "Error: One or more arguments missing"
    end

    for _, weapon in ipairs(weaponsData) do
        if weapon.Title and string.lower(weapon.Title) == string.lower(weaponTitle) then
            return weapon[weaponProperty] or "Error: Property of that name not found"
        end
    end
   
    return "Error: Weapon of that name not found"
end


function TestModule.getSkillProperty(frame)
    loadData()

    local weaponTitle = frame.args[1]
    local skillTitle = frame.args[2]
    local skillProperty = frame.args[3]

    if not weaponTitle or not skillTitle or not skillProperty then
        return "Error: One or more arguments missing"
    end

    for _, weapon in ipairs(weaponsData) do
        if weapon.Title and string.lower(weapon.Title) == string.lower(weaponTitle) then
            for _, skill in ipairs(weapon.SkillsGranted or {}) do
                if skill.Title and string.lower(skill.Title) == string.lower(skillTitle) then
                    return skill[skillProperty]
                end
            end
            return "Error: Skill of that name not found"
        end
    end

    return "Error: Weapon of that name not found"
end

return TestModule