Module:DishInfo

来自Don't Starve Wiki
跳转到导航 跳转到搜索

可在Module:DishInfo/doc创建此模块的帮助文档

local p = {}
local MODULE = "Module:"

local preparedfoods = require(MODULE .. "Scripts/preparedfoods.lua")
local preparedfoods_warly = require(MODULE .. "Scripts/preparedfoods_warly.lua")
local preparednonfoods = require(MODULE .. "Scripts/preparednonfoods.lua")

local PORTABLE_COOK_POT_TIME_MULTIPLIER = .8
local SECONDS_PRE_COOK_TIME = 20
local SECONDS_PER_MIN = 60
local MINUTES_PER_DAY = 8
local DAYS_PER_YEAR = 70
local function timeToString(timeNum)
    local cur = timeNum
    if (cur < SECONDS_PER_MIN) then
        return cur % 1 == 0 and
                string.format("%d 秒", cur)
                or string.format("%.2f 秒", cur)
    end
    cur = cur / SECONDS_PER_MIN
    if (cur < MINUTES_PER_DAY) then
        return cur % 1 == 0 and
                string.format("%d 分", cur)
                or string.format("%.2f 分", cur)
    end
    cur = cur / MINUTES_PER_DAY
    if (cur < DAYS_PER_YEAR) then
        return cur % 1 == 0 and
                string.format("%d 天", cur)
                or string.format("%.2f 天", cur)
    end
    cur = cur / DAYS_PER_YEAR
    return cur % 1 == 0 and
            string.format("%d 分", cur)
            or string.format("%.2f 分", cur)  -- 有生之年应该不会遇到需要做一年的饭吧。
end

function p.itemInfoBox(frame)
    local itemName = frame.args[1]:lower()
    local foodData = preparedfoods[itemName] or preparednonfoods[itemName]
    local isWarlyFood = false

    if (not foodData) then
        foodData = preparedfoods_warly[itemName]
        isWarlyFood = not not foodData
    end

    if not foodData then
        return error("Unknown dish prefab: " .. tostring(itemName) .. ", check your input, or ask User:Sodiumaluminate for update module")
    end

    --[[
    function CookbookPageCrockPot:_GetSideEffectString(recipe_def)
	return  recipe_def.oneat_desc
			or (recipe_def.temperature ~= nil and recipe_def.temperature > 0) and STRINGS.UI.COOKBOOK.FOOD_EFFECTS_HOT_FOOD
			or (recipe_def.temperature ~= nil and recipe_def.temperature < 0) and STRINGS.UI.COOKBOOK.FOOD_EFFECTS_COLD_FOOD
			or STRINGS.UI.COOKBOOK.FOOD_EFFECTS_NONE
    end
    ]]
    local perk = foodData.oneat_desc
            or (foodData.temperature ~= nil and foodData.temperature > 0) and "让身体变暖"
            or (foodData.temperature ~= nil and foodData.temperature < 0) and "为身体降温"
            or nil
    if (frame.args.perk and #frame.args.perk > 0) then
        perk = frame.args.perk
    end

    return frame:expandTemplate({
        title = "Item Infobox",
        args = {
            name = frame:expandTemplate({ title = "Po", args = { "STRINGS.NAMES." .. itemName:upper() } }), -- todo: 砍一层调用栈
            stack = "40",
            spawnCode = itemName,
            hpRestored = tostring(foodData.health or 0),
            hungerRestored = tostring(foodData.hunger or 0),
            sanityRestored = tostring(foodData.sanity or 0),
            spoil = timeToString(foodData.perishtime) or "不会腐烂",
            cookedBy = isWarlyFood
                    and frame:expandTemplate({ title = "便携烹饪锅" })
                    or "任意" .. frame:expandTemplate({ title = "烹饪锅" }),
            cooktime = isWarlyFood
                    --感谢盛哥(space.bilibili.com/42328131)给出的建议~ (前后文:https://discord.com/channels/347760782924185600/347813932938821633/1103960968968552480)
                    and timeToString(foodData.cooktime * SECONDS_PRE_COOK_TIME * PORTABLE_COOK_POT_TIME_MULTIPLIER) .. " (" .. timeToString(foodData.cooktime * SECONDS_PRE_COOK_TIME) .. " * 0.8)"
                    or timeToString(foodData.cooktime * SECONDS_PRE_COOK_TIME),
            image = "[[File:" .. frame:expandTemplate({ title = "Po", args = { "STRINGS.NAMES." .. itemName:upper(), "en" } }) .. ".png|64px]]", -- todo: 砍一层调用栈
            imagewidth = "64px",
            priority = tostring(foodData.priority or 0),
            perk = perk
        }
    })
end

return p