Module:ItemCategories

From Dune: Awakening Community Wiki
Jump to navigation Jump to search

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

-- this will be mw.loadData later
local config = {
    -- Direct mappings
    direct = {
        -- Loot
        ["LootTier.1"] = "LootTier 1",
        ["LootTier.2"] = "LootTier 2",
        ["LootTier.3"] = "LootTier 3",
        ["LootTier.4"] = "LootTier 4",
        ["LootTier.5"] = "LootTier 5",
        ["LootTier.6"] = "LootTier 6",
        ["Loot.GreatHouse"] = "Loot from Great Houses",
        ["Loot.Fremen"] = "Loot from Fremen",
        ["Loot.OldImperial"] = "Loot from Old Imperial",
        ["Loot.Component"] = "Component",
        ["Loot.CraftedResources"] = "Crafted Resources",
        ["Rarity.Rare"] = "Rare",

        -- Weapons
        ["Items.Holsters.MeleeWeapons.Knife"] = "Knife",
        ["Items.Holsters.MeleeWeapons.Sword"] = "Sword",
        ["Items.Holsters.RangedWeapons.Heavy.Flamethrower"] = "Flamethrower",
        ["Items.Holsters.RangedWeapons.Heavy.Lasgun"] = "Lasgun",
        ["Items.Holsters.RangedWeapons.Heavy.LMG"] = "LMG",
        ["Items.Holsters.RangedWeapons.Heavy.Pistol"] = "Pistol",
        ["Items.Holsters.RangedWeapons.Heavy.RocketLauncher"] = "RocketLauncher",
        ["Items.Holsters.RangedWeapons.Heavy.Shotgun"] = "Shotgun",
        ["Items.Holsters.RangedWeapons.Light.Pistol"] = "Pistol",
        ["Items.Holsters.RangedWeapons.Light.Rifle"] = "Rifle",
        ["Items.Holsters.RangedWeapons.Light.Shotgun"] = "Shotgun",
        ["Items.Holsters.RangedWeapons.Light.SMG"] = "SMG",

        -- Tools
        ["Items.Holsters.HydrationTools"] = "Hydration Tools",
    },
    -- Partial mappings, matches the start only
    partial = {
        ["Items.Holsters.RangedWeapons.Heavy"] = "Heavy Ranged Weapons",
        ["Items.Holsters.RangedWeapons.Light"] = "Light Ranged Weapons",
        ["Items.Holsters.MeleeWeapons"] = "Melee Weapons",
        ["Items"] = "Items",
        ["Items.RawResources"] = "Raw Resources",
        ["Items.Schematics"] = "Schematics",

        ["Items.Clothes.ScoutArmor"] = "Light Armor",
        ["Items.Clothes.HeavyArmor"] = "Heavy Armor",
    }
}

local p = {}

function p.fromItemTags(frame)
    local itemtags = frame.args[1] or ""
    local out = {}
    local seen = {}
    mw.log(itemtags)

    for tag in mw.text.gsplit(itemtags, ",") do
        tag = mw.text.trim(tag)
        mw.log("checking tag: " .. tag)
        -- direct tag match from config
        local direct = config.direct[tag]
        if direct then
            seen[direct] = true
            mw.log("added " .. direct .. " by direct mapping with " .. tag)
        end

        -- partial match
        for partial, category in pairs(config.partial) do
            if string.sub(tag, 1, #partial) == partial then
                seen[category] = true
                mw.log("added " .. category .. " by partial match on " .. partial)
            end
        end
    end

    for cat in pairs(seen) do
        table.insert(out, string.format("[[Category:%s]]", cat))
    end

    return table.concat(out, "\n")
end

return p