打开/关闭搜索
搜索
打开/关闭菜单
331
1.7K
131
11.8K
星露谷物语扩展百科
导航
首页
最近更改
随机页面
交流群
互通站
上传文件
打开/关闭外观设置菜单
通知
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。
user-interface-preferences
个人工具
创建账号
登录
查看“︁模块:GiftsByItem”︁的源代码
来自星露谷物语扩展百科
查看
阅读
查看源代码
查看历史
associated-pages
模块
讨论
更多操作
←
模块:GiftsByItem
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:已验证邮箱用户
您必须确认您的电子邮件地址才能编辑页面。请通过
参数设置
设置并确认您的电子邮件地址。
您可以查看和复制此页面的源代码。
local Utils = require("Module:Utils") local ID = require("Module:ID") local GiftsByItemData = Utils.LazyLoad('Module:GiftsByItem/data') local p = {} -- 预定义排序顺序 p.predefinedOrder = { "哈维", "山姆", "谢恩", "亚历克斯", "艾利欧特", "塞巴斯蒂安", "海莉", "莉亚", "玛鲁", "潘妮", "艾米丽", "阿比盖尔", "皮埃尔", "卡洛琳", "刘易斯", "玛妮", "罗宾", "德米特里厄斯", "艾芙琳", "乔治", "贾斯", "文森特", "乔迪", "肯特", "威利", "格斯", "潘姆", "莱纳斯", "克林特", "法师", "矮人", "科罗布斯", "桑迪", "雷欧" } -- 英文到中文的翻译映射表 p.translation = { ["Alex"] = "亚历克斯", ["Elliott"] = "艾利欧特", ["Harvey"] = "哈维", ["Sam"] = "山姆", ["Sebastian"] = "塞巴斯蒂安", ["Shane"] = "谢恩", ["Abigail"] = "阿比盖尔", ["Emily"] = "艾米丽", ["Haley"] = "海莉", ["Leah"] = "莉亚", ["Maru"] = "玛鲁", ["Penny"] = "潘妮", ["Caroline"] = "卡洛琳", ["Clint"] = "克林特", ["Demetrius"] = "德米特里厄斯", ["Dwarf"] = "矮人", ["Evelyn"] = "艾芙琳", ["George"] = "乔治", ["Gus"] = "格斯", ["Jas"] = "贾斯", ["Jodi"] = "乔迪", ["Kent"] = "肯特", ["Krobus"] = "科罗布斯", ["Leo"] = "雷欧", ["Lewis"] = "刘易斯", ["Linus"] = "莱纳斯", ["Marnie"] = "玛妮", ["Pam"] = "潘姆", ["Pierre"] = "皮埃尔", ["Robin"] = "罗宾", ["Sandy"] = "桑迪", ["Vincent"] = "文森特", ["Willy"] = "威利", ["Wizard"] = "法师" } -- 生成中文到英文的反向映射表 p.original = {} for en, zh in pairs(p.translation) do p.original[zh] = en end -- 创建排序索引映射表 p.orderIndex = {} for i, name in ipairs(p.predefinedOrder) do p.orderIndex[name] = i end -- 通用工具函数 function p.removeDuplicates(list) local seen = {} local result = {} for _, item in ipairs(list) do if not seen[item] then table.insert(result, item) seen[item] = true end end return result end function p.translateVillagers(villagers, translationMap) for i, villager in ipairs(villagers) do villagers[i] = translationMap[villager] or villager end end function p.customSort(villagers, orderIndexMap) table.sort(villagers, function(a, b) local indexA = orderIndexMap[a] or math.huge local indexB = orderIndexMap[b] or math.huge return indexA < indexB end) end -- SVE 新增人物 local newVillagers = { ["Lance"] = "兰斯", ["Magnus"] = "马格努斯", ["Marlon"] = "马龙", ["Martin"] = "马丁", ["Morgan"] = "摩根", ["Morris"] = "莫里斯", ["Olivia"] = "奥利维亚", ["Andy"] = "安迪", ["Scarlett"] = "斯嘉丽", ["Sophia"] = "索菲娅", ["Susan"] = "苏珊", ["Victor"] = "维克多", ["Henchman"] = "仆从", ["Claire"] = "克莱尔", ["Gunther"] = "冈瑟", ["Apples"] = "苹果" } local orderAdditions = { "索菲娅", "维克多", "克莱尔", "马丁", "安迪", "苏珊", "奥利维亚", "兰斯", "斯嘉丽", "莫里斯", "马龙", "冈瑟", "仆从", "马格努斯", "摩根", "苹果" } -- 缓存合并后的数据 local translationMap local orderList local originalMap local orderIndexMap -- 初始化函数 local function initializeData() if translationMap then return end translationMap = {} for k, v in pairs(p.translation) do translationMap[k] = v end for k, v in pairs(newVillagers) do translationMap[k] = v end orderList = {} for _, name in ipairs(p.predefinedOrder) do table.insert(orderList, name) end for _, name in ipairs(orderAdditions) do table.insert(orderList, name) end originalMap = {} for en, zh in pairs(translationMap) do originalMap[zh] = en end orderIndexMap = {} for i, name in ipairs(orderList) do orderIndexMap[name] = i end end -- HTML 生成函数 function p.generateHTML(villagers, originalMap, linkPrefix) linkPrefix = linkPrefix or "" -- 默认无前缀 local result = {} for i, villager in ipairs(villagers) do local iconName = originalMap[villager] or villager local link = villager local html = string.format( '<span class="no-wrap">[[File:%s Icon.png|24px|link=%s]] [[%s|%s]]</span>', iconName, link, link, villager) table.insert(result, html) end return table.concat(result, " • ") end -- 通用处理函数 function p.processVillagers(villagerlist, translationMap, orderIndexMap, originalMap, linkPrefix) if not villagerlist then return "" end -- 解析输入 local villagers = {} for villager in villagerlist:gmatch("[^,]+") do villager = mw.text.trim(villager) if villager ~= "" then table.insert(villagers, villager) end end -- 处理流程 villagers = p.removeDuplicates(villagers) table.sort(villagers) -- 先按字母排序 p.translateVillagers(villagers, translationMap) p.customSort(villagers, orderIndexMap) return p.generateHTML(villagers, originalMap, linkPrefix) end -- 主函数 function p.ts(frame) local villagerlist = frame.args[1] return p.processVillagers(villagerlist, p.translation, p.orderIndex, p.original) end function p.tssve(frame) initializeData() local villagerlist = frame.args[1] return p.processVillagers(villagerlist, translationMap, orderIndexMap, originalMap, "SVE") end -- 获取当前模块的处理函数(用于 generateGiftTable 调用) function p.getCurrentProcessor() return p.tssve end -- 获取当前模块的 ID 函数(用于 generateGiftTable 调用) function p.getCurrentIDFunction() return ID.getId end -- 获取当前模块的数据源(用于 generateGiftTable 调用) function p.getCurrentDataSource() return Utils.LazyLoad('Module:GiftsByItem/data') end -- 通用的礼物表格生成函数 function p.generateGiftTableWithProcessor(frame, processorFunc, idFunc, dataSource) local itemName = frame.args[1] or frame:getParent().args[1] or mw.title.getCurrentTitle().text local displayName = frame.args.alt or itemName or '' if not itemName or itemName == "" then return "" end local itemID local itemNameToIDMapping = { ["诡异玩偶(绿)"] = "126", ["诡异玩偶(黄)"] = "127", ["Joja可乐"] = "167", ["垃圾(物品)"] = "168", ["破损的CD"] = "171", ["鱼饵(物品)"] = "685", ["针对性鱼饵"] = "SpecificBait", ["熏鱼"] = "Smoked", ["果干"] = "DriedFruit", ["蘑菇干"] = "DriedMushrooms", ["青蛙蛋"] = "FrogEgg" } if itemNameToIDMapping[itemName] then itemID = itemNameToIDMapping[itemName] end if not itemID then itemID = idFunc(itemName):gsub('%(O%)', ''):gsub('%(TR%)', '') end local item = dataSource[itemID] or dataSource[itemName] if not item then return "" end local hasPreferences = false for _, category in ipairs({ "Love", "Like", "Neutral", "Dislike", "Hate" }) do if item[category] then local count = 0 for i, _ in pairs(item[category]) do if type(i) == "number" and i > 0 then count = count + 1 end end if count > 0 then hasPreferences = true break end end end if not hasPreferences then return "" end local result = {} -- 开始构建表格 table.insert(result, '<table class="wikitable roundedborder">') table.insert(result, '<tr>') table.insert(result, '<th colspan="2">收到' .. displayName .. '后</th>') table.insert(result, '</tr>') local flag = false if item["Love"] then local npcList = {} for i, npc in pairs(item["Love"]) do if type(i) == "number" and i > 0 then table.insert(npcList, npc) end end if #npcList > 0 then flag = true local loveList = table.concat(npcList, ",") local points = "+80" if itemName == "星之果茶" or itemName == "StardropTea" then points = "+250" end local mockFrame = { args = { [1] = loveList } } local processedList = processorFunc(mockFrame) table.insert(result, '<tr>') table.insert(result, '<th><span class="no-wrap">最爱</span><br><span style="font-size:smaller;">' .. points .. '</span></th>') table.insert(result, '<td>' .. processedList .. '</td>') table.insert(result, '</tr>') end end if item["Like"] then local npcList = {} for i, npc in pairs(item["Like"]) do if type(i) == "number" and i > 0 then table.insert(npcList, npc) end end if #npcList > 0 then flag = true local likeList = table.concat(npcList, ",") local mockFrame = { args = { [1] = likeList } } local processedList = processorFunc(mockFrame) table.insert(result, '<tr>') table.insert(result, '<th><span class="no-wrap">喜欢</span><br><span style="font-size:smaller;">+45</span></th>') table.insert(result, '<td>' .. processedList .. '</td>') table.insert(result, '</tr>') end end if item["Neutral"] then local npcList = {} for i, npc in pairs(item["Neutral"]) do if type(i) == "number" and i > 0 then table.insert(npcList, npc) end end if #npcList > 0 then flag = true local neutralList = table.concat(npcList, ",") local mockFrame = { args = { [1] = neutralList } } local processedList = processorFunc(mockFrame) table.insert(result, '<tr>') table.insert(result, '<th><span class="no-wrap">普通</span><br><span style="font-size:smaller;">+20</span></th>') table.insert(result, '<td>' .. processedList .. '</td>') table.insert(result, '</tr>') end end if item["Dislike"] then local npcList = {} for i, npc in pairs(item["Dislike"]) do if type(i) == "number" and i > 0 then table.insert(npcList, npc) end end if #npcList > 0 then flag = true local dislikeList = table.concat(npcList, ",") local mockFrame = { args = { [1] = dislikeList } } local processedList = processorFunc(mockFrame) table.insert(result, '<tr>') table.insert(result, '<th><span class="no-wrap">不喜欢</span><br><span style="font-size:smaller;">-20</span></th>') table.insert(result, '<td>' .. processedList .. '</td>') table.insert(result, '</tr>') end end if item["Hate"] then local npcList = {} for i, npc in pairs(item["Hate"]) do if type(i) == "number" and i > 0 then table.insert(npcList, npc) end end if #npcList > 0 then flag = true local hateList = table.concat(npcList, ",") local mockFrame = { args = { [1] = hateList } } local processedList = processorFunc(mockFrame) table.insert(result, '<tr>') table.insert(result, '<th><span class="no-wrap">讨厌</span><br><span style="font-size:smaller;">-40</span></th>') table.insert(result, '<td>' .. processedList .. '</td>') table.insert(result, '</tr>') end end table.insert(result, '</table>') if not flag then table.insert(result, '[[分类:礼物喜好解析存在问题的物品]]') end return table.concat(result, '\n') end -- 输出完整的礼物喜好表格 function p.generateGiftTable(frame) return p.generateGiftTableWithProcessor(frame, p.getCurrentProcessor(), p.getCurrentIDFunction(), p.getCurrentDataSource()) end -- =p.generateGiftTable { args = { "骆驼毛" } } return p
该页面嵌入的页面:
模板:Documentation header
(
查看源代码
)
模板:Template link
(
查看源代码
)
模板:Tl
(
查看源代码
)
模块:Array
(
查看源代码
)
模块:Documentation
(
查看源代码
)
模块:Documentation/styles.css
(
查看源代码
)
模块:GiftsByItem/doc
(
查看源代码
)
模块:ProcessArgs
(
查看源代码
)
模块:STConversion
(
查看源代码
)
模块:Static
(
查看源代码
)
模块:TSLoader
(
查看源代码
)
返回
模块:GiftsByItem
。
查看“︁模块:GiftsByItem”︁的源代码
来自星露谷物语扩展百科