全站通知:
            
            
        
模块:Quest
                  
                  
                  刷
                  
                     
                               
                               历
                            
                  
                    
                      
                        
                        编
                      
                    
                
            
            
            
            
            
            跳到导航
            跳到搜索
            
            
                
            
            
            
            
        
    local p = {}
local getArg = require('Module:Utils').getArg
local questData = mw.loadData("Module:Quest/data")
-- 任务名称到ID的映射表
local questNameToId = {
    ["会见法师"] = "1",
    ["神秘的齐1"] = "2",
    ["神秘的齐2"] = "3",
    ["神秘的齐3"] = "4",
    ["神秘的齐4"] = "5",
    ["开始"] = "6",
    ["养殖动物"] = "7",
    ["进阶"] = "8",
    ["介绍"] = "9",
    ["铜矿石"] = "10",
    ["开始铸造"] = "11",
    ["打铁"] = "12",
    ["前往沙滩"] = "13",
    ["探索矿场"] = "14",
    ["入门1"] = "15",
    ["入门2"] = "16",
    ["矿场深处"] = "17",
    ["深入地底?"] = "18",
    ["头骨钥匙"] = "19",
    ["齐先生的挑战"] = "20",
    ["玛妮的请求"] = "21",
    ["砂锅魚"] = "22",
    ["考古发现1"] = "23",
    ["考古发现2"] = "24",
    ["交友指南"] = "25",
    ["“老鼠肆虐”"] = "26",
    ["哥布林问题"] = "27",
    ["暗黑护身符"] = "28",
    ["奇怪纸条"] = "29",
    ["秘文纸条"] = "30",
    ["冬日谜团"] = "31",
    ["罗宾丢失的斧子"] = "100",
    ["乔迪的请求"] = "101",
    ["镇长的“短裤”"] = "102",
    ["潘姆渴了"] = "103",
    ["作物研究"] = "104",
    ["膝盖疗养"] = "105",
    ["讨牛欢心"] = "106",
    ["黑莓篮子"] = "107",
    ["雕刻南瓜"] = "108",
    ["捕条鱿鱼"] = "109",
    ["克林特的努力"] = "110",
    ["黑暗试剂"] = "111",
    ["克林特的小忙"] = "112",
    ["罗宾的请求"] = "113",
    ["烩鱼汤"] = "114",
    ["新鲜水果"] = "115",
    ["奶奶的礼物"] = "116",
    ["皮埃尔的布告"] = "117",
    ["水产调查"] = "118",
    ["士兵的星星"] = "119",
    ["镇长的需求"] = "120",
    ["征集:龙虾"] = "121",
    ["潘姆需要电池"] = "122",
    ["力量法杖"] = "123",
    ["捕捞蛇齿单线鱼"] = "124",
    ["异域饮品"] = "125",
    ["妻子的差事"] = "126",
    ["海莉的蛋糕竞走赛"] = "127",
    ["……1"] = "128",
    ["……2"] = "129",
    ["海盗的妻子"] = "130",
    ["威利的挑战"] = "131",
    ["新手入门"] = "132",
    ["喂养动物"] = "133",
    ["大树桩"] = "134"
}
-- 链接映射表
local autoLinks = {
    -- 居民
    ["居民"] = "居民",
    ["罗宾"] = "罗宾",
    ["马龙"] = "马龙",
    ["威利"] = "威利",
    ["克林特"] = "克林特",
    ["法师"] = "法师",
    ["玛妮"] = "玛妮",
    ["乔迪"] = "乔迪",
    ["刘易斯"] = "刘易斯",
    ["镇长刘易斯"] = "刘易斯",
    ["冈瑟"] = "冈瑟",
    ["格斯"] = "格斯",
    ["潘姆"] = "潘姆",
    ["德米特里厄斯"] = "德米特里厄斯",
    ["乔治"] = "乔治",
    ["莱纳斯"] = "莱纳斯",
    ["卡洛琳"] = "卡洛琳",
    ["艾米丽"] = "艾米丽",
    ["艾芙琳"] = "艾芙琳",
    ["皮埃尔"] = "皮埃尔",
    ["肯特"] = "肯特",
    ["桑迪"] = "桑迪",
    ["科罗布斯"] = "科罗布斯",
    ["仆从"] = "仆从",
    ["贝啼"] = "贝啼",
    ["老太太"] = "贝啼",
    ["齐先生"] = "齐先生",
    ["祝尼魔"] = "祝尼魔",
    -- 地点
    ["矿井"] = "矿井",
    ["探险家公会"] = "探险家公会",
    ["骷髅洞穴"] = "骷髅洞穴",
    ["头骨山洞"] = "骷髅洞穴",
    ["博物馆"] = "博物馆",
    ["社区中心"] = "社区中心",
    ["巴士站"] = "巴士站",
    ["鹈鹕镇"] = "鹈鹕镇",
    ["法师塔"] = "法师塔",
    ["赌场"] = "赌场",
    ["秘密森林"] = "秘密森林",
    ["铁路"] = "铁路",
    ["女巫小屋"] = "女巫小屋",
    ["Joja仓库"] = "Joja仓库",
    ["突变虫穴"] = "突变虫穴",
    ["姜岛"] = "姜岛",
    ["煤矿森林"] = "煤矿森林",
    ["边远森林"] = "边远森林",
    ["农舍"] = "农舍",
    ["柳巷1号"] = "柳巷1号",
    ["玛妮的牧场"] = "玛妮的牧场",
    ["玛妮的店铺"] = "玛妮的牧场",
    ["大树桩"] = "大树桩(地点)",
    -- 物品
    ["防风草"] = "防风草",
    ["稻草人"] = "稻草人",
    ["鸡舍"] = "鸡舍",
    ["史莱姆"] = "史莱姆",
    ["头骨钥匙"] = "头骨钥匙",
    ["电池组"] = "电池组",
    ["彩虹贝壳"] = "彩虹贝壳",
    ["甜菜"] = "甜菜",
    ["太阳精华"] = "太阳精华",
    ["会员卡"] = "会员卡",
    ["古物"] = "古物",
    ["矿石"] = "矿物",
    ["矿物"] = "矿物",
    ["铜矿石"] = "铜矿石",
    ["煤炭"] = "煤炭",
    ["铜锭"] = "铜锭",
    ["熔炉"] = "熔炉",
    ["竹钓竿"] = "工具#鱼竿",
    ["放大镜"] = "放大镜",
    ["山洞萝卜"] = "山洞萝卜",
    ["大嘴鲈鱼"] = "大嘴鲈鱼",
    ["虚空蛋黄酱"] = "虚空蛋黄酱",
    ["魔法墨水"] = "魔法墨水",
    ["战争纪念物"] = "战争纪念物",
    ["美食家番茄盐"] = "美食家番茄盐",
    ["星露谷玫瑰"] = "星露谷玫瑰",
    ["高级电视遥控器"] = "高级电视遥控器",
    ["极寒碎片"] = "极寒碎片",
    ["蠕动蚯蚓"] = "蠕动蚯蚓",
    ["海盗项链"] = "海盗项链",
    ["硬木"] = "硬木",
    ["丢失的斧子"] = "丢失的斧子",
    ["花椰菜"] = "花椰菜",
    ["短裤"] = "幸运紫色短裤",
    ["紫色短裤"] = "幸运紫色短裤",
    ["幸运紫色短裤"] = "幸运紫色短裤",
    ["淡啤酒"] = "淡啤酒",
    ["啤酒花"] = "啤酒花",
    ["酿造桶"] = "小桶",
    ["小桶"] = "小桶",
    ["甜瓜"] = "甜瓜",
    ["辣椒"] = "辣椒",
    ["苋菜"] = "苋菜",
    ["莱纳斯的篮子"] = "黑莓篮子",
    ["黑莓篮子"] = "黑莓篮子",
    ["南瓜"] = "南瓜",
    ["鱿鱼"] = "鱿鱼",
    ["紫水晶"] = "紫水晶",
    ["虚空精华"] = "虚空精华",
    ["铁锭"] = "铁锭",
    ["青花鱼"] = "青花鱼",
    ["杏子"] = "杏子",
    ["韭葱"] = "韭葱",
    ["生鱼片"] = "生鱼片",
    ["河豚"] = "河豚",
    ["杨桃"] = "杨桃",
    ["松露油"] = "松露油",
    ["龙虾"] = "龙虾",
    ["铱锭"] = "铱锭",
    ["蛇齿单线鱼"] = "蛇齿单线鱼",
    ["椰子"] = "椰子",
    ["金色核桃"] = "金色核桃",
    -- 系统
    ["友谊"] = "友谊",
    ["好感度"] = "友谊#好感度机制",
    ["耕种"] = "技能#耕种",
    ["收集包"] = "收集包",
    ["工艺室"] = "收集包#工艺室",
    ["秘密纸条"] = "秘密纸条",
    ["生命值"] = "生命值",
    ["熊的知识"] = "熊的知识",
    ["魔法建筑"] = "法师塔",
    ["随机事件"] = "随机事件",
    ["大风"] = "随机事件#大风",
    -- 季节
    ["春季"] = "春季",
    ["夏季"] = "夏季",
    ["秋季"] = "秋季",
    ["冬季"] = "冬季"
}
local function parseQuestId(idOrName)
    if not idOrName then return nil end
    local trimmed = tostring(idOrName):match("^%s*(.-)%s*$")
    return trimmed:match("^%d+$") and trimmed or questNameToId[trimmed]
end
local function isInsideLink(text, pos)
    local lastOpen, lastClose = 0, 0
    for i = pos - 1, 1, -1 do
        local substr = text:sub(i, i + 1)
        if substr == "[[" then
            lastOpen = i
            break
        elseif substr == "]]" then
            lastClose = i
            break
        end
    end
    return lastOpen > lastClose
end
local function formatLinks(text)
    if not text or text == "" then return text end
    local sortedKeys = {}
    for key in pairs(autoLinks) do table.insert(sortedKeys, key) end
    table.sort(sortedKeys, function(a, b) return #a > #b end)
    for _, keyword in ipairs(sortedKeys) do
        local target = autoLinks[keyword]
        local matchStart, matchEnd = text:find(keyword, 1, true)
        if matchStart and not isInsideLink(text, matchStart) then
            local link =
                (target == keyword) and "[[" .. keyword .. "]]" or "[[" ..
                    target .. "|" .. keyword .. "]]"
            text = text:sub(1, matchStart - 1) .. link .. text:sub(matchEnd + 1)
        end
    end
    return text
end
local function splitText(text, delimiter)
    local result = {}
    for match in (text .. delimiter):gmatch("(.-)" .. delimiter) do
        table.insert(result, match)
    end
    return result
end
local function getField(idOrName, fieldIndex, processor)
    local questId = parseQuestId(idOrName)
    if not questId then return '' end
    local questInfo = questData[questId]
    if not questInfo then return '' end
    local parts = splitText(questInfo, "/")
    local fieldValue = parts[fieldIndex] or ""
    if processor then fieldValue = processor(fieldValue, parts) end
    return formatLinks(fieldValue)
end
function p.getQuestName(input) return getField(getArg(input), 2) end
function p.getQuestDesc(input) return getField(getArg(input), 3) end
function p.getQuestRequest(input) return getField(getArg(input), 4) end
function p.getQuestQuote(input)
    return getField(getArg(input), nil, function(_, parts)
        if #parts ~= 10 then return "" end
        return parts[10]:gsub("#", ""):gsub("%$[a-zA-Z]", ""):gsub("@",
                                                                   "<玩家名>")
    end)
end
p.getQuestDescription = p.getQuestDesc
p.getQuestObjective = p.getQuestRequest
p.getQuestRewardText = p.getQuestQuote
return p
                
                    沪公网安备 31011002002714 号