匿名
未登录
登录
乐园数据管理室
搜索
查看“︁模块:Npc”︁的源代码
来自乐园数据管理室
命名空间
模块
讨论
更多
更多
页面操作
阅读
查看源代码
历史
刷新
←
模块:Npc
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您没有权限编辑
模块
命名空间内的页面。
您必须确认您的电子邮件地址才能编辑页面。请通过
参数设置
设置并确认您的电子邮件地址。
您可以查看和复制此页面的源代码。
local p = {} local QueryHelper = require("Module:Xb2QueryHelper") local html = require("Module:Html") local BdatEnums = require("Module:BdatEnums") local Flag = require("Module:Flag") local function processTalk(talkArr) local talkText = "" for _, row in ipairs(talkArr) do row = mw.ustring.gsub(row, "\n", "<br>") row = mw.ustring.gsub(row, "%[ML:Dash.*%]", "──") row = mw.ustring.gsub(row, "%[ML:Feeling .*%]", "") talkText = talkText .. "<li>" .. row .. "</li>" end return "<ul>" .. talkText .. "</ul>" end function p.main(frame) local out = "" local currentTitle = mw.title.getCurrentTitle() local npcName = currentTitle.text local npcs = QueryHelper.getNpcPopByNpcName(npcName) -- 过滤无出现地点的NPC local npcsWithoutNoPop = {} for _, npc in ipairs(npcs) do if #npc.Pops > 0 then table.insert(npcsWithoutNoPop, npc) end end -- mw.log(mw.text.jsonEncode(npcs, mw.text.JSON_PRETTY)) -- mw.logObject(npcsWithoutNoPop) -- table.sort比较函数,相同要返回false,一直返回true会出错 local sortFunc = function(a, b) -- 把任务id小于1000的隐式主线任务设为0,认为它不存在 if a.QuestFlag <= 1000 then a.QuestFlag = 0 end if b.QuestFlag <= 1000 then b.QuestFlag = 0 end -- 不是任务的排前面 if a.QuestFlag * b.QuestFlag == 0 and a.QuestFlag > 0 or b.QuestFlag > 0 then if a.QuestFlag == b.QuestFlag then return false else return a.QuestFlag < b.QuestFlag end end -- 按ScenarioFlagMin升序 if a.ScenarioFlagMin > 0 and b.ScenarioFlagMin > 0 then if a.ScenarioFlagMin == b.ScenarioFlagMin then return false else return a.ScenarioFlagMin <= b.ScenarioFlagMin end end -- 按QuestFlag升序 if a.QuestFlag > 1000 or b.QuestFlag > 1000 then if a.QuestFlag == b.QuestFlag then return false else return a.QuestFlag < b.QuestFlag end end return a.row_id < b.row_id end for _, npc in ipairs(npcsWithoutNoPop) do if #npcsWithoutNoPop > 1 then out = out .. html.h2("Npc: " .. npc.row_id) end -- NPC info and picture out = out .. '<div class="flex-wrap" style="justify-content: space-between;">' local race = BdatEnums.getNpcRaceName(npc) out = out .. html.wikitable( {"性别", "人种"}, { {BdatEnums.Gender[npc.Gender], race} } ) out = out .. "[[文件:NPC-" .. npc.row_id .. ".jpg|none|400px|上传NPC照片]]" out = out .. "</div>" -- 出现点 table.sort(npc.Pops, sortFunc) for _, npcPop in ipairs(npc.Pops) do out = out .. html.h3("Pop: " .. npcPop.row_id) local scenario if npcPop.ScenarioFlagMin > 0 or npcPop.ScenarioFlagMax > 0 then scenario = npcPop.ScenarioFlagMin == npcPop.ScenarioFlagMax and Flag.scenario(npcPop.ScenarioFlagMin) or Flag.scenario(npcPop.ScenarioFlagMin) .. " ~ " .. Flag.scenario(npcPop.ScenarioFlagMax) end local npcPopRowData = { world = BdatEnums.getWorldName(math.floor(npcPop.row_id / 1000)), timerange = table.concat(BdatEnums.getTimeRange(npcPop.TimeRange), ", "), scenario = scenario, quest = Flag.quest(npcPop.QuestFlag, npcPop.row_id > 40000), condition = Flag.condition(npcPop.Condition) } local th = { {scope = "world", label = "地域"}, {scope = "timerange", label = "时间段"} } if npcPopRowData.scenario then table.insert(th, {scope = "scenario", label = "主线剧情"}) end if npcPopRowData.quest then table.insert(th, {scope = "quest", label = "任务"}) end if npcPop.Condition > 0 then table.insert(th, {scope = "condition", label = "条件"}) end out = out .. html.wikitable(th, {npcPopRowData}) out = out .. '<div class="flex-wrap" style="justify-content: space-between;">' -- Talkable属性为true才显示对话 if npcPop.Talkable then local languageTable = { {lan = "cn", label = "简"}, {lan = "tw", label = "繁"}, {lan = "jp", label = "日"} } local talkList = {} for _, v in ipairs(languageTable) do -- 设置语言 QueryHelper.language = v.lan table.insert(talkList, QueryHelper.getDialogByEventId(npcPop.EventID)) end -- 重置语言 QueryHelper.language = "cn" -- 对话语句数大于0时才显示 if #talkList[1] > 0 then out = out .. '<div class="xbxbtabs">' for i, v in ipairs(languageTable) do local tabslabel = v.label local tabsname = npcPop.EventID .. v.lan out = out .. '<div data-name="' .. tabsname .. '" data-label="' .. tabslabel .. '" >' .. html.wikitable( {"对话"}, { {processTalk(talkList[i])} } ) .. "</div>" end out = out .. "</div>" end end -- 地图 out = out .. '<div style="flex-grow: 1;min-width: 360px;max-width: 640px;">' .. mw.ustring.format([[<div class="xb2map-npc" data-gmk-id="%s" ></div>]], npcPop.name) .. "</div>" out = out .. "</div>" -- SMW mw.smw.set { PopID = npcPop.row_id, QuestDisplay = npcPopRowData.quest } end -- SMW mw.smw.set { Race = race } end return out end return p
该页面使用的模板:
模块:Npc/doc
(
查看源代码
)
返回
模块:Npc
。
导航
导航
首页
最近更改
随机页面
翻译查询
异度神剑
异度神剑3
异度神剑X
wiki工具
wiki工具
特殊页面
页面工具
页面工具
用户页面工具
更多
链入页面
相关更改
页面信息
页面日志