打开/关闭菜单
324
1711
132
1.2万
星露谷物语扩展百科
打开/关闭外观设置菜单
打开/关闭个人菜单
未登录
未登录用户的IP地址会在进行任意编辑后公开展示。

模块:GiftsByItem:修订间差异

来自星露谷物语扩展百科
删除的内容 添加的内容
Sizau留言 | 贡献
m 3546754953775813移动页面模块:GiftsByItem/SVE模块:Expanded/GiftsByItem,不留重定向
Sizau留言 | 贡献
重构
第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 vtable = {}
local combined = {}
-- 原版翻译
local villagers = mw.text.split(villagerlist, ",", true)
for i = 1, #villagers do
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)
end
for k, v in pairs(newVillagers) do
end
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 indexA = 0
local combined = {}
-- 原版顺序
local indexB = 0
for i, name in ipairs(predefinedOrder) do
for _, name in ipairs(Vanilla.predefinedOrder) do
if a == name then indexA = i end
table.insert(combined, name)
end
if b == name then indexB = i end
end
-- SVE 顺序
for _, name in ipairs(orderAdditions) do
return indexA < indexB
end)
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] .. ']]&nbsp;[[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] .. ']]&nbsp;[[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