欢迎大家来到沙石镇时光中文维基!本站编辑权限开放,欢迎加入中文维基 QQ 群「沙海时光」:372816689
目前正在进行全站数据更新,期间可能会存在显示异常的问题。

全站通知:

模块:Relic

来自沙石镇时光维基
跳到导航 跳到搜索

此模块的文档可以在模块:Relic/doc创建

local Helper = require("Module:Helper")
local ItemHelper = require("Module:ItemHelper")
local ItemId = Helper.LazyLoad("Module:ItemId")
local RestoreConfigs = Helper.LazyLoad("Module:AssetRestoreConfigs")
local p = {}

-- APIs --
p.ItemObtainingRelicTable = function(frame)
    local itemName = frame.args[1]

    if ItemHelper.isImplemented(itemName) then
        local restoreConfig = findRestoreConfig(itemName, true)
        local header = expandTemplate("ItemObtainingRelic/header", {})
        local rows = {}
        local args = {}
        args.machine = "古物修复机"

        if (restoreConfig.extraItemCost[1] ~= nil) then
            args.extraItemCost1 = ItemHelper.getInGameName(restoreConfig.extraItemCost[1].id)
            args.extraItemCost1amt = restoreConfig.extraItemCost[1].count
        end

        if (restoreConfig.partsItemIds[1] ~= nil) then
            args.mat1 = ItemHelper.getInGameName(restoreConfig.partsItemIds[1])
            args.mat1amt = 1
        end

        if (restoreConfig.partsItemIds[2] ~= nil) then
            args.mat2 = ItemHelper.getInGameName(restoreConfig.partsItemIds[2])
            args.mat2amt = 1
        end

        if (restoreConfig.partsItemIds[3] ~= nil) then
            args.mat3 = ItemHelper.getInGameName(restoreConfig.partsItemIds[3])
            args.mat3amt = 1
        end

        if (restoreConfig.partsItemIds[4] ~= nil) then
            args.mat4 = ItemHelper.getInGameName(restoreConfig.partsItemIds[4])
            args.mat4amt = 1
        end

        if (restoreConfig.partsItemIds[5] ~= nil) then
            args.mat5 = ItemHelper.getInGameName(restoreConfig.partsItemIds[5])
            args.mat5amt = 1
        end

        if (restoreConfig.costTime) then
            local hours = math.floor(restoreConfig.costTime / 60)
            local minutes = restoreConfig.costTime % 60
            args.costTime = hours .. "h " .. minutes .. "m"
        end

        local row = expandTemplate("ItemObtainingRelic/row", args)
        table.insert(rows, row)
        return header .. table.concat(rows, "") .. "|}"
    else
        return itemName .. "is currently unimplemented."
    end
end

-- Helpers --
function getItemId(itemName)
    local name = itemName
    if name == nil then
        name = mw.getCurrentFrame():getParent():getTitle()
    end
    name, _ = name:gsub("&#(%d+);", function(n)
        return string.char(n)
    end)
    local id = ItemId[name:lower()]
    if id == nil then
        error("Cannot find item: " .. itemName)
    end
    return id
end

function expandTemplate(title, args)
    return mw.getCurrentFrame():expandTemplate{
        title = title,
        args = args
    }
end

function findRestoreConfigByItemId(itemId, assertRestorable)
    if (RestoreConfigs[itemId]) then
        return RestoreConfigs[itemId]
    else
        if assertRestorable then
            error("Item cannot be restored: " .. ItemHelper.getName(itemId))
        else
            return nil
        end
    end
end

function findRestoreConfig(itemName, assertRestorable)
    local itemId = getItemId(itemName)
    return findRestoreConfigByItemId(itemId, assertRestorable)
end

-- Debug --
p.debug = function()
    local args = {
        "Great Wall"
    }
    local frame = {
        args = args
    }

    expandTemplate = function(title, args)
        ret = "{{" .. title
        for k, v in pairs(args) do
            ret = ret .. "|" .. k .. "=" .. tostring(v)
        end
        return ret .. "}}"
    end

    r = p.ItemObtainingRelicTable(frame)
    mw.logObject(r)
end

return p