模块:B ProjectDivide
来自Limbo Wiki
此模块的文档可以在模块:B ProjectDivide/doc创建
local frame; if not mw.loadJsonData then mw.loadJsonData = function(pageName) local str = frame:expandTemplate{title=pageName}; return mw.text.jsonDecode(str) end end local getArgs = require('Module:Arguments').getArgs; local p = {} function makeInvokeFunc(funcName) return function(frame) local args = getArgs(frame) return p[funcName](args) end end p.initTableFromName = makeInvokeFunc('_initTableFromName') local levelNameList = { [0] = "C", [1] = "B", [2] = "A", [3] = "S", } local actionTypeNameList = { ACTIVE = "主动", PASSIVE = "被动", ENTRANCE = "登场" } local buffTypeNameList = { taunt = "嘲讽等级", } local action2TypeNameList = { destory = "销毁" } local function getStrFromNumber(number) if number == 0 then return "0"; elseif number > 0 then return "+" .. number; else return tostring(number); end end local function getStrFromOpAndValue(operator,value) if operator == 0 then return "+" .. value elseif operator == 1 then return "+" .. (value*100) .. "%" elseif operator == 2 then return "+" .. value elseif operator == 3 then return "*" .. (value*100+100) .. "%" end end local readConditions,readCondition; local originalJson; function readCondition(condition) if condition.description then return condition.description;end if condition.type == "List" then return readConditions(condition); elseif condition.type == "event" then return "事件" .. condition.event .. "发生时" elseif condition.type == "condition" then return "条件" .. condition.condition .. "成立时" else return "未知条件:" .. mw.dumpObject(condition); end end function readConditions(cList) local desp = string.gsub(cList.condition,"&&"," 且 "); desp = string.gsub(desp,"||"," 或 "); for _, v in ipairs(cList.list) do desp = string.gsub(desp,"%[" .. v.id .. "%]",readCondition(v)) end return desp; end local function readSelector(selector,def) if not selector then return def; elseif selector.type == "self" then return "选中自身" elseif selector.type == "supported" then return "选中被援助对象" else return "选中 未知选择器:" .. mw.dumpObject(selector); end end local function readSkill(jsonSkill) local skillDes = {} skillDes[1] = "【" .. actionTypeNameList[jsonSkill.type] .. "】" .. jsonSkill.name; if jsonSkill.cost ~= 0 then skillDes[2] = "(KB" .. getStrFromNumber(0 - jsonSkill.cost) .. "): "; else skillDes[2] = ": " end if jsonSkill.description then skillDes[3] = jsonSkill.description; else local i = 2; if jsonSkill.condition then skillDes[2] = skillDes[2] .. "当" .. readCondition(jsonSkill.condition) .. "生效:"; end for _i, v in ipairs(jsonSkill.actionList) do i = i + 1; if _i ~= 1 then skillDes[i] = ";";i = i + 1;end if v.description then skillDes[i] = v.description; elseif v.type == "addCard" then skillDes[i] = readSelector(v.selector,"选中自身"); i = i + 1; skillDes[i] = ",向手牌里加入" for _i2, v2 in ipairs(v.cards) do if _i2 ~= 1 then skillDes[i] = "、";i = i + 1;end i = i + 1; if v2.privateID then skillDes[i] = (v2.amount or 1) .. "张 " .. originalJson[v2.privateID].name else error("剩下的分支没写好!") end end elseif v.type == "buff" then skillDes[i] = readSelector(v.selector,"选中自身"); i = i + 1; skillDes[i] = ",使其" i = i + 1; skillDes[i] = buffTypeNameList[v.name] or v.name or "???"; i = i + 1; skillDes[i] = "属性"; i = i + 1; skillDes[i] = getStrFromOpAndValue(v.operator,v.value); if v.duration then i = i + 1; skillDes[i] = ",持续"; i = i + 1; skillDes[i] = tostring(v.duration); i = i + 1; skillDes[i] = "回合"; end elseif v.type == "action" then if v.before then skillDes[i] = "等待"; i = i + 1; skillDes[i] = tostring(v.before); i = i + 1; skillDes[i] = "回合后,"; i = i + 1; end skillDes[i] = readSelector(v.selector,"选中自身"); i = i + 1; skillDes[i] = "," i = i + 1; skillDes[i] = action2TypeNameList[v.name] or v.name or "???" i = i + 1; skillDes[i] = "卡牌" elseif v.type == "addKB" then skillDes[i] = readSelector(v.selector,"选中自身"); i = i + 1; skillDes[i] = "," i = i + 1; skillDes[i] = getStrFromNumber(v.value) i = i + 1; skillDes[i] = "KB" else skillDes[i] = "未知行为: " .. mw.dumpObject(v); end end i = i + 1; skillDes[i] = "。" end return table.concat(skillDes); end local cardTypeList = { C = function (json,isWhims) local list = {}; list[1] = json.name; list[2] = json.EP; list[3] = json.BP; list[4] = json.KB; list[5] = isWhims and "异想之物" or "???"; list[6] = levelNameList[json.level]; -- list[7] = "Ability"; list[8] = "???援助角色"; list[9] = "未知编号"; list[10] = json.description or ""; local skills = {}; for index, v in ipairs(json.skills) do skills[index] = readSkill(v); end list[7] = table.concat(skills,"\n\n"); return frame:expandTemplate{title = "B_PD-C",args = list} end,--"角色卡" L = "置物卡", A = "行动卡", T = "反击卡", } local function makeTable(json) local func = cardTypeList[json.type]; if func then return func(json,false); else func = cardTypeList[string.sub(json.type,1,1)];return func(json,true); end end function p._initTableFromName(args) frame = mw.getCurrentFrame(); local pageName = args[1]; local json = mw.loadJsonData(args[1]) local limit = type(args[2]) == "string" originalJson = json; if json["name"] then return makeTable(json) elseif limit then local str = ""; for _, v in ipairs(json) do if v.type == limit or v.type == (limit .. "W") then str = str .. makeTable(v) .. "\n\n"; end end return str; else local str = ""; for _, v in ipairs(json) do str = str .. makeTable(v) .. "\n\n"; end return str; end end return p;