米斯特利亚Wiki正在建设中,本WIKI编辑权限开放!欢迎参与~!

全站通知:

模块:Object prototypes

来自米斯特利亚WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

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

-- 模块:object_prototypes
-- 说明:本模块用于查询 object_prototypes.lua 中的对象原型数据。
-- 数据请在“模块:object_prototypes/Data”子页面维护,其结构可参考仓库中的 ./data_lua/object_prototypes.lua

local data = require('模块:object_prototypes/Data')
local p = {}

-- 内部辅助函数:通过对象ID遍历所有类别查找原型数据
-- @param id string 对象ID,例如 "small_barn" 或 "strawberry_crop_object"
-- @return table or nil 找到的原型数据,或 nil
local function findPrototype(id)
    if not id or type(id) ~= 'string' then
        return nil
    end

    for category, prototypes in pairs(data) do
        if type(prototypes) == 'table' and prototypes[id] then
            return prototypes[id]
        end
    end

    return nil
end

-- 获取指定对象的单个属性值
-- @param frame.args[1] string 对象ID
-- @param frame.args[2] string 属性名
-- @return any 找到的属性值,保持原始类型。找不到则返回 nil。
function p.get(frame)
    local objectId = frame.args[1]
    local propertyName = frame.args[2]

    if not objectId or not propertyName then
        return nil
    end

    local prototype = findPrototype(objectId)
    if prototype and prototype[propertyName] ~= nil then
        return prototype[propertyName]
    end

    return nil
end

-- 获取指定对象的所有属性
-- @param frame.args[1] string 对象ID
-- @return table or nil 找到的完整原型数据 table,找不到则返回 nil。
function p.getAll(frame)
    local objectId = frame.args[1]
    return findPrototype(objectId)
end

-- 计算并返回作物的总生长天数
-- 读取对象的 day_to_stage 数组并求和。例如 {0,1,2,3,3,4} -> 13
-- @param frame.args[1] string 作物对象ID
-- @return number|nil 总天数;找不到对象或无有效 day_to_stage 时返回 nil
function p.growthDays(frame)
    frame.args[2] = "day_to_stage"
    local stages = p.get(frame)
    if not stages then
    	mw.log("没找到属性")
        return nil
    end

    local days = 0
    for _ in ipairs(stages) do
        days = days + 1
    end
    return days
end

return p