模块:GiftsByItem:修订间差异
来自星露谷物语扩展百科
更多操作
删除的内容 添加的内容
m 3546754953775813移动页面模块:GiftsByItem/SVE至模块:Expanded/GiftsByItem,不留重定向 |
重构 |
||
| 第1行: | 第1行: | ||
local Vanilla = require("模块:GiftsByItem") |
|||
local p = {} |
local p = {} |
||
local predefinedOrder = { |
|||
"阿比盖尔", "亚历克斯", "安迪", "苹果", "卡洛琳", "克莱尔", "克林特", |
|||
"德米特里厄斯", "矮人", "艾利欧特", "艾米丽", "艾芙琳", "乔治", |
|||
"冈瑟", "格斯", "海莉", "哈维", "仆从", "贾斯", "乔迪", "肯特", |
|||
"科罗布斯", "兰斯", "莉亚", "雷欧", "刘易斯", "莱纳斯", "马格努斯", |
|||
"马龙", "玛妮", "马丁", "玛鲁", "摩根", "摩根", "莫里斯", "奥利维亚", |
|||
"潘姆", "潘妮", "皮埃尔", "罗宾", "山姆", "桑迪", "斯嘉丽", |
|||
"塞巴斯蒂安", "谢恩", "索菲娅", "苏珊", "维克多", "文森特", "威利" |
|||
-- SVE 新增人物 |
|||
local newVillagers = { |
|||
["Lance"] = "兰斯", ["Magnus"] = "马格努斯", ["Marlon"] = "马龙", |
|||
["Martin"] = "马丁", ["Morgan"] = "摩根", ["Morris"] = "莫里斯", |
|||
["Olivia"] = "奥利维亚", ["Andy"] = "安迪", ["Scarlett"] = "斯嘉丽", |
|||
["Sophia"] = "索菲娅", ["Susan"] = "苏珊", ["Victor"] = "维克多", |
|||
["Henchman"] = "仆从", ["Claire"] = "克莱尔", ["Gunther"] = "冈瑟", |
|||
["Apples"] = "苹果" |
|||
} |
} |
||
local orderAdditions = { |
|||
--tssve = translate & sort for sve |
|||
"索菲娅", "维克多", "克莱尔", "马丁", "安迪", "苏珊", "奥利维亚", "兰斯", "斯嘉丽", "莫里斯", "马龙", "冈瑟", "仆从", "马格努斯", "摩根", "苹果" |
|||
function p.tssve(frame) |
|||
} |
|||
local villagerlist = frame.args[1] |
|||
-- 翻译映射表合并 |
|||
if villagerlist ~= nil then |
|||
local function createTranslationMap() |
|||
local combined = {} |
|||
-- 原版翻译 |
|||
local villagers = mw.text.split(villagerlist, ",", true) |
|||
for k, v in pairs(Vanilla.translation) do |
|||
combined[k] = v |
|||
local v = mw.text.trim(villagers[i]) |
|||
end |
|||
if v ~= "" then |
|||
-- SVE 翻译 |
|||
table.insert(vtable, v) |
|||
for k, v in pairs(newVillagers) do |
|||
combined[k] = v |
|||
end |
|||
return combined |
|||
--remove duplicate entries |
|||
end |
|||
local dupes = {} |
|||
local villagertable = {} |
|||
for i = 1, #vtable do |
|||
if not dupes[vtable[i]] then |
|||
table.insert(villagertable, vtable[i]) |
|||
dupes[vtable[i]] = true |
|||
end |
|||
end |
|||
table.sort(villagertable) |
|||
for k,v in pairs(villagertable) do |
|||
if v == "Alex" then villagertable[k] = "亚历克斯" end |
|||
if v == "Elliott" then villagertable[k] = "艾利欧特" end |
|||
if v == "Harvey" then villagertable[k] = "哈维" end |
|||
if v == "Sam" then villagertable[k] = "山姆" end |
|||
if v == "Sebastian" then villagertable[k] = "塞巴斯蒂安" end |
|||
if v == "Shane" then villagertable[k] = "谢恩" end |
|||
if v == "Abigail" then villagertable[k] = "阿比盖尔" end |
|||
if v == "Emily" then villagertable[k] = "艾米丽" end |
|||
if v == "Haley" then villagertable[k] = "海莉" end |
|||
if v == "Leah" then villagertable[k] = "莉亚" end |
|||
if v == "Maru" then villagertable[k] = "玛鲁" end |
|||
if v == "Penny" then villagertable[k] = "潘妮" end |
|||
if v == "Caroline" then villagertable[k] = "卡洛琳" end |
|||
if v == "Clint" then villagertable[k] = "克林特" end |
|||
if v == "Demetrius" then villagertable[k] = "德米特里厄斯" end |
|||
if v == "Dwarf" then villagertable[k] = "矮人" end |
|||
if v == "Evelyn" then villagertable[k] = "艾芙琳" end |
|||
if v == "George" then villagertable[k] = "乔治" end |
|||
if v == "Gus" then villagertable[k] = "格斯" end |
|||
if v == "Jas" then villagertable[k] = "贾斯" end |
|||
if v == "Jodi" then villagertable[k] = "乔迪" end |
|||
if v == "Kent" then villagertable[k] = "肯特" end |
|||
if v == "Krobus" then villagertable[k] = "科罗布斯" end |
|||
if v == "Leo" then villagertable[k] = "雷欧" end |
|||
if v == "Lewis" then villagertable[k] = "刘易斯" end |
|||
if v == "Linus" then villagertable[k] = "莱纳斯" end |
|||
if v == "Marnie" then villagertable[k] = "玛妮" end |
|||
if v == "Pam" then villagertable[k] = "潘姆" end |
|||
if v == "Pierre" then villagertable[k] = "皮埃尔" end |
|||
if v == "Robin" then villagertable[k] = "罗宾" end |
|||
if v == "Sandy" then villagertable[k] = "桑迪" end |
|||
if v == "Vincent" then villagertable[k] = "文森特" end |
|||
if v == "Willy" then villagertable[k] = "威利" end |
|||
-- new in sve |
|||
if v == "Lance" then villagertable[k] = "兰斯" end |
|||
if v == "Magnus" then villagertable[k] = "马格努斯" end |
|||
if v == "Marlon" then villagertable[k] = "马龙" end |
|||
if v == "Martin" then villagertable[k] = "马丁" end |
|||
if v == "Morgan" then villagertable[k] = "摩根" end |
|||
if v == "Morris" then villagertable[k] = "莫里斯" end |
|||
if v == "Olivia" then villagertable[k] = "奥利维亚" end |
|||
if v == "Andy" then villagertable[k] = "安迪" end |
|||
if v == "Scarlett" then villagertable[k] = "斯嘉丽" end |
|||
if v == "Sophia" then villagertable[k] = "索菲娅" end |
|||
if v == "Susan" then villagertable[k] = "苏珊" end |
|||
if v == "Victor" then villagertable[k] = "维克多" end |
|||
if v == "Henchman" then villagertable[k] = "仆从" end |
|||
if v == "Claire" then villagertable[k] = "克莱尔" end |
|||
if v == "Gunther" then villagertable[k] = "冈瑟" end |
|||
if v == "Morgan" then villagertable[k] = "摩根" end |
|||
if v == "Apples" then villagertable[k] = "苹果" end |
|||
end |
|||
-- 排序顺序合并 |
|||
-- Custom sort |
|||
local function createNewOrder() |
|||
table.sort(villagertable, function(a, b) |
|||
local combined = {} |
|||
-- 原版顺序 |
|||
local indexB = 0 |
|||
for _, name in ipairs(Vanilla.predefinedOrder) do |
|||
table.insert(combined, name) |
|||
end |
|||
if b == name then indexB = i end |
|||
-- SVE 顺序 |
|||
for _, name in ipairs(orderAdditions) do |
|||
return indexA < indexB |
|||
table.insert(combined, name) |
|||
end |
|||
return combined |
|||
end |
|||
-- 创建 SVE 的数据 |
|||
local newTranslationMap = createTranslationMap() |
|||
local newOrder = createNewOrder() |
|||
-- 生成 SVE 的反向映射和索引 |
|||
--put the table "villagertable" back into a string blob |
|||
local sveOriginal = {} |
|||
--table.concat( table, sep, i, j ) DOES NOT WORK |
|||
for en, zh in pairs(newTranslationMap) do |
|||
villagerlist = "" |
|||
sveOriginal[zh] = en |
|||
for i = 1, (#villagertable-1) do |
|||
end |
|||
villagerlist = villagerlist .. '<span class="no-wrap">[[File:' .. villagertable[i] .. ' Icon.png|24px|link=' .. villagertable[i] .. ']] [[SVE:' .. villagertable[i] .. '|' .. villagertable[i] .. ']]</span> • ' |
|||
end |
|||
--We don't want a trailing bullet at the end of the list |
|||
villagerlist = villagerlist .. '<span class="no-wrap">[[File:' .. villagertable[#villagertable] .. ' Icon.png|24px|link=' .. villagertable[#villagertable] .. ']] [[SVE:' .. villagertable[#villagertable] .. '|' .. villagertable[#villagertable] .. ']]</span>' |
|||
local newOrderIndex = {} |
|||
for i, name in ipairs(newOrder) do |
|||
newOrderIndex[name] = i |
|||
end |
|||
-- SVE 的主函数 |
|||
--Now that we've sorted by the native language, |
|||
function p.tssve(frame) |
|||
--fix icons whose names are all in English |
|||
local villagerlist = frame.args[1] |
|||
--Also add the é to Leo for French |
|||
return Vanilla.processVillagers(villagerlist, newTranslationMap, newOrderIndex, sveOriginal, "SVE") |
|||
--so I don't have to write an entire substitution table for accented chars |
|||
end |
|||
villagerlist = string.gsub(villagerlist, "亚历克斯 Icon", "Alex Icon") |
|||
villagerlist = string.gsub(villagerlist, "艾利欧特 Icon", "Elliott Icon") |
|||
villagerlist = string.gsub(villagerlist, "哈维 Icon", "Harvey Icon") |
|||
villagerlist = string.gsub(villagerlist, "山姆 Icon", "Sam Icon") |
|||
villagerlist = string.gsub(villagerlist, "塞巴斯蒂安 Icon", "Sebastian Icon") |
|||
villagerlist = string.gsub(villagerlist, "谢恩 Icon", " Shane Icon") |
|||
villagerlist = string.gsub(villagerlist, "阿比盖尔 Icon", "Abigail Icon") |
|||
villagerlist = string.gsub(villagerlist, "艾米丽 Icon", "Emily Icon") |
|||
villagerlist = string.gsub(villagerlist, "海莉 Icon", "Haley Icon") |
|||
villagerlist = string.gsub(villagerlist, "莉亚 Icon", "Leah Icon") |
|||
villagerlist = string.gsub(villagerlist, "玛鲁 Icon", "Maru Icon") |
|||
villagerlist = string.gsub(villagerlist, "潘妮 Icon", "Penny Icon") |
|||
villagerlist = string.gsub(villagerlist, "卡洛琳 Icon", "Caroline Icon") |
|||
villagerlist = string.gsub(villagerlist, "克林特 Icon", "Clint Icon") |
|||
villagerlist = string.gsub(villagerlist, "德米特里厄斯 Icon", "Demetrius Icon") |
|||
villagerlist = string.gsub(villagerlist, "矮人 Icon", "Dwarf Icon") |
|||
villagerlist = string.gsub(villagerlist, "艾芙琳 Icon", "Evelyn Icon") |
|||
villagerlist = string.gsub(villagerlist, "乔治 Icon", "George Icon") |
|||
villagerlist = string.gsub(villagerlist, "格斯 Icon", "Gus Icon") |
|||
villagerlist = string.gsub(villagerlist, "贾斯 Icon", "Jas Icon") |
|||
villagerlist = string.gsub(villagerlist, "乔迪 Icon", "Jodi Icon") |
|||
villagerlist = string.gsub(villagerlist, "肯特 Icon", "Kent Icon") |
|||
villagerlist = string.gsub(villagerlist, "科罗布斯 Icon", "Krobus Icon") |
|||
villagerlist = string.gsub(villagerlist, "雷欧 Icon", "Leo Icon") |
|||
villagerlist = string.gsub(villagerlist, "刘易斯 Icon", "Lewis Icon") |
|||
villagerlist = string.gsub(villagerlist, "莱纳斯 Icon", "Linus Icon") |
|||
villagerlist = string.gsub(villagerlist, "玛妮 Icon", "Marnie Icon") |
|||
villagerlist = string.gsub(villagerlist, "潘姆 Icon", "Pam Icon") |
|||
villagerlist = string.gsub(villagerlist, "皮埃尔 Icon", "Pierre Icon") |
|||
villagerlist = string.gsub(villagerlist, "罗宾 Icon", "Robin Icon") |
|||
villagerlist = string.gsub(villagerlist, "桑迪 Icon", "Sandy Icon") |
|||
villagerlist = string.gsub(villagerlist, "文森特 Icon", "Vincent Icon") |
|||
villagerlist = string.gsub(villagerlist, "威利 Icon", "Willy Icon") |
|||
villagerlist = string.gsub(villagerlist, "法师 Icon", "Wizard Icon") |
|||
villagerlist = string.gsub(villagerlist, "兰斯 Icon", "Lance Icon") |
|||
villagerlist = string.gsub(villagerlist, "马格努斯 Icon", "Magnus Icon") |
|||
villagerlist = string.gsub(villagerlist, "马龙 Icon", "Marlon Icon") |
|||
villagerlist = string.gsub(villagerlist, "马丁 Icon", "Martin Icon") |
|||
villagerlist = string.gsub(villagerlist, "摩根 Icon", "Morgan Icon") |
|||
villagerlist = string.gsub(villagerlist, "莫里斯 Icon", "Morris Icon") |
|||
villagerlist = string.gsub(villagerlist, "奥利维亚 Icon", "Olivia Icon") |
|||
villagerlist = string.gsub(villagerlist, "安迪 Icon", "Andy Icon") |
|||
villagerlist = string.gsub(villagerlist, "斯嘉丽 Icon", "Scarlett Icon") |
|||
villagerlist = string.gsub(villagerlist, "索菲娅 Icon", "Sophia Icon") |
|||
villagerlist = string.gsub(villagerlist, "苏珊 Icon", "Susan Icon") |
|||
villagerlist = string.gsub(villagerlist, "维克多 Icon", "Victor Icon") |
|||
villagerlist = string.gsub(villagerlist, "仆从 Icon", "Henchman Icon") |
|||
villagerlist = string.gsub(villagerlist, "克莱尔 Icon", "Claire Icon") |
|||
villagerlist = string.gsub(villagerlist, "冈瑟 Icon", "Gunther Icon") |
|||
villagerlist = string.gsub(villagerlist, "摩根 Icon", "Morgan Icon") |
|||
villagerlist = string.gsub(villagerlist, "苹果 Icon", "Apples Icon") |
|||
-- 导出原版模块的函数供其他地方使用 |
|||
return villagerlist |
|||
p.base = Vanilla |
|||
end --if villagerlist == nil, then do nothing but return p |
|||
end --end function p.tssve() |
|||
return p |
return p |
||
2025年9月4日 (四) 20:23的版本
描述
当前模块用于物品的人物喜好列表的生成,能够根据导出的数据进行全自动的格式化、排序和输出。
人物按照一定的逻辑排序,此外还对排版显示上进行了一定的优化。
如果该模块存在任何问题,请在{{GiftsByItem}}对应的讨论页中反馈。
模块使用的数据见模块:GiftsByItem/data,相关数据是通过由中文社区维护的模组导出的,相关代码见 Github 仓库中的 GetNPCGiftTastes 部分。
[ 查看 | 编辑 | 历史 | 刷新 ]上述文档的内容来自模块:GiftsByItem/doc。
local Vanilla = require("模块:GiftsByItem")
local p = {}
-- SVE 新增人物
local newVillagers = {
["Lance"] = "兰斯", ["Magnus"] = "马格努斯", ["Marlon"] = "马龙",
["Martin"] = "马丁", ["Morgan"] = "摩根", ["Morris"] = "莫里斯",
["Olivia"] = "奥利维亚", ["Andy"] = "安迪", ["Scarlett"] = "斯嘉丽",
["Sophia"] = "索菲娅", ["Susan"] = "苏珊", ["Victor"] = "维克多",
["Henchman"] = "仆从", ["Claire"] = "克莱尔", ["Gunther"] = "冈瑟",
["Apples"] = "苹果"
}
local orderAdditions = {
"索菲娅", "维克多", "克莱尔", "马丁", "安迪", "苏珊", "奥利维亚", "兰斯", "斯嘉丽", "莫里斯", "马龙", "冈瑟", "仆从", "马格努斯", "摩根", "苹果"
}
-- 翻译映射表合并
local function createTranslationMap()
local combined = {}
-- 原版翻译
for k, v in pairs(Vanilla.translation) do
combined[k] = v
end
-- SVE 翻译
for k, v in pairs(newVillagers) do
combined[k] = v
end
return combined
end
-- 排序顺序合并
local function createNewOrder()
local combined = {}
-- 原版顺序
for _, name in ipairs(Vanilla.predefinedOrder) do
table.insert(combined, name)
end
-- SVE 顺序
for _, name in ipairs(orderAdditions) do
table.insert(combined, name)
end
return combined
end
-- 创建 SVE 的数据
local newTranslationMap = createTranslationMap()
local newOrder = createNewOrder()
-- 生成 SVE 的反向映射和索引
local sveOriginal = {}
for en, zh in pairs(newTranslationMap) do
sveOriginal[zh] = en
end
local newOrderIndex = {}
for i, name in ipairs(newOrder) do
newOrderIndex[name] = i
end
-- SVE 的主函数
function p.tssve(frame)
local villagerlist = frame.args[1]
return Vanilla.processVillagers(villagerlist, newTranslationMap, newOrderIndex, sveOriginal, "SVE")
end
-- 导出原版模块的函数供其他地方使用
p.base = Vanilla
return p