全站通知:
模块: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 号