全站通知:

模块:Snippets

来自星露谷物语维基
跳到导航 跳到搜索
[ 创建 | 刷新 ]文档页面
当前模块文档缺失,需要扩充。
local p = {}

-- 常用文本片段
local categories = {

    -- 物品来源
    ['来源'] = {
        ['酒吧'] = '2.44% 的概率作为每日特色菜出现在[[星之果实酒吧#不固定商品|星之果实酒吧]]的菜单中,售价为{{Price|{param1}}}。',
        ['酒吧垃圾桶'] = '当天翻动酒吧外的[[垃圾桶]]时也有概率获得 1 份{{PAGENAME}}。',
        ['科罗布斯概率出售'] = '{param2} 的概率在每周{param1}出现在[[科罗布斯#滚动出售|科罗布斯商店]]中,售价为{param3}。'
    },

    -- 物品用途
    ['不用于'] = {
        ['收集包'] = '{{PAGENAME}}不用于任何[[收集包]]。',
        ['食谱'] = '{{PAGENAME}}不用于任何[[烹饪#食谱|食谱]]。',
        ['配方'] = '{{PAGENAME}}不用于任何[[打造#可打造物品|配方]]。',
        ['任务'] = '{{PAGENAME}}不用于任何[[任务]]。',
        ['裁制'] = '{{PAGENAME}}不可用于[[裁缝|裁制]]。',
        ['裁缝'] = '{{PAGENAME}}不可用于[[裁缝|裁制]]。'
    },

    -- 人际关系
    ['人际关系'] = {
        ['花舞节'] = '如果玩家在[[花舞节]]中没有邀请{villager}或[[{param1}]]跳舞,{villager}和{param1}会成为舞伴。'
    },

    -- 任务
    ['任务'] = {
        ['布告栏'] = '{villager}可能会随机地在[[皮埃尔的杂货店]]门外的布告栏上发布[[任务#求助任务|求助任务]]。奖励为数目等同于需求的物品的基础售价的 3 倍的金币,并提高{villager}的[[好感度]]150 点。'
    },

    -- 好感度
    ['好感度'] = {
        ['礼物'] = '{villager}对玩家的[[友谊|好感度]]大于 0 时,{villager}就有可能会向玩家邮寄礼物。好感度越高,玩家收到礼物的可能性越大。',
        ['食谱'] = '与{villager}的好感度到达 {param1} 心后,{villager}会通过信件和玩家分享{{Name|{param2}|class=inline}}的食谱。',
        ['配方'] = '与{villager}的好感度到达 {param1} 心后,{villager}会通过信件和玩家分享{{Name|{param2}|class=inline}}的配方。'
    },

    -- 人物摘要
    ['摘要'] = {
        ['可结婚'] = '{villager}是 12 位可[[婚姻|结婚]]的人物之一。'
    },

    -- 人物日程
    ['日程'] = {
        ['表格'] = '下方展示的是{villager}的日程。上方的日程的优先级高于下方的日程,例如雨天的日程一般位于普通日程的上方,如果雨天上方没有其他日程或者日程的条件没有满足,则会执行雨天的日程。',
        ['度假村'] = '如果[[姜岛]]的[[姜岛#海滩度假村|度假村]]已经重建、度假村处于开放状态并且姜岛没有下雨,{villager}可能会去度假。18:00 后,{villager}便会离开度假村,回家准备睡觉。{villager}不会在{schedule_exception}节日期间度假。'
    },

    -- 特殊元素
    ['元素'] = {
        ['农场'] = '<span class="player-name">农场名</span>',
        ['后缀'] = '<span class="trigger-chance">{param1}</span>',
        ['锚点'] = '<span id="{param1}" data-id="{param1}" class="tab-archor"></span>',
        ['小标题'] = '<span class="talk-title">{param1}</span>',
        ['年份'] = '<span class="player-name">年份</span>',
        ['玩家'] = '<span class="player-name">玩家名</span>'
    },

    -- 游戏设定
    ['设定'] = {
        ['早期设定'] = '{villager}的肖像图以及人物设定随着游戏开发的推进进行了多次调整和迭代。下方的图片展示了 ConcernedApe 在游戏正式发布之前对人物进行过的调整和细化。'
    },

    -- 遗失物品商店
    ['遗失'] = {
        ['回购'] = '若不慎遗失或损毁,可以在[[秘密森林]]的[[秘密森林#失物回购|遗失物品商店]]花费{{Price|10000}} 重新购买。'
    },

    -- 物品用法
    ['用法'] = {
        ['椅子'] = '有关{{PAGENAME}}的更多用法,请见[[椅子戏法]]。'
    },

    -- 钓鱼
    ['钓鱼'] = {
        ['魔法鱼饵'] = '可以使用[[魔法鱼饵]]不受{param1}的限制钓到{{PAGENAME}}。'
    },

    -- 宠物
    ['宠物'] = {
        ['礼物'] = '[[宠物]]{param1}达到最大[[宠物#好感度|好感度]]后,每天第一次被抚摸也有可能掉落{{PAGENAME}}。'
    },

    -- 无子类别(无 subtype 的示例)
    ['可结婚'] = '{villager}是 12 位可[[婚姻|结婚]]的人物之一。',
    ['花舞节舞伴'] = '如果玩家在[[花舞节]]中没有邀请{villager}或[[{param1}]]跳舞,{villager}和{param1}会成为舞伴。'
}

-- 处理「不用于」的大小写转换和别名
local function processNotUsedFor(subtype)
    local lowerSubtype = string.lower(subtype or '')

    -- 处理别名映射
    local aliasMap = {
        ['b'] = '收集包',
        ['r'] = '食谱',
        ['c'] = '配方',
        ['q'] = '任务',
        ['t'] = '裁制',
        ['裁缝'] = '裁制'
    }

    return aliasMap[lowerSubtype] or subtype
end

-- 处理「日程」中的特殊逻辑
local function processScheduleException(actor)
    local exceptionMap = {
        ['谢恩'] = '<!-- 谢恩不体检 -->',
        ['哈维'] = '工作日或',
        ['潘妮'] = '工作日、体检日或',
        ['玛鲁'] = '工作日、体检日或',
        ['艾米丽'] = '秋季 15 日(桑迪的生日)、体检日或'
    }

    return exceptionMap[actor] or '体检日或'
end

-- 获取参数值
local function getParam(args, index)
    local paramName = 'param' .. index
    return args[paramName] or args[index] or ''
end

function p.main(frame)
    local args = frame:getParent().args

    local category = args[1] or ''
    local actor = args.actor or args.villager or
                      frame:preprocess('{{PAGENAME}}')

    if not categories[category] then return '' end

    local text
    local paramStart

    if type(categories[category]) == 'string' then
        text = categories[category]
        paramStart = 2
    else
        local subtype = args[2] or ''

        if category == '不用于' then
            subtype = processNotUsedFor(subtype)
        end

        text = categories[category][subtype]
        if not text then return '' end
        paramStart = 3
    end

    local replacements = {
        ['{villager}'] = actor,
        ['{param1}'] = getParam(args, paramStart),
        ['{param2}'] = getParam(args, paramStart + 1),
        ['{param3}'] = getParam(args, paramStart + 2),
        ['{param4}'] = getParam(args, paramStart + 3),
        ['{param5}'] = getParam(args, paramStart + 4),
        ['{param6}'] = getParam(args, paramStart + 5)
    }

    if category == '日程' and args[2] == '度假村' then
        replacements['{schedule_exception}'] = processScheduleException(actor)
    end

    for placeholder, value in pairs(replacements) do
        text = text:gsub(placeholder, value)
    end

    return frame:preprocess(text)
end

return p