模块:Condition
来自乐园数据管理室
此模块的文档可以在模块:Condition/doc创建
local p = {}
local QueryHelper = require("Module:Xb2QueryHelper")
local html = require("Module:Html")
local loadJson = require("Module:JSON").loadJson
local conditionType = require("Module:BdatEnums").conditionType
local Flag = require("Module:Flag")
local parser = {
Scenario = function(subCondition)
local data = subCondition.data
-- 四个属性都存在,显示两个区间
if data.ScenarioFlagMin > 0 and data.ScenarioFlagMax > 0 and data.NotScenarioMin > 0 and data.NotScenarioMax > 0 then
return Flag.scenario(data.ScenarioFlagMin) ..
" ~ " ..
Flag.scenario(data.NotScenarioMin) ..
", " .. Flag.scenario(data.NotScenarioMax) .. " ~ " .. Flag.scenario(data.ScenarioFlagMax)
end
if data.NotScenarioMin > 0 and data.NotScenarioMax > 0 then
return "~ " .. Flag.scenario(data.NotScenarioMin) .. ", " .. Flag.scenario(data.ScenarioFlagMin) .. " ~"
end
if data.ScenarioFlagMin == data.ScenarioFlagMax then
return Flag.scenario(data.ScenarioFlagMin)
else
return Flag.scenario(data.ScenarioFlagMin) .. " ~ " .. Flag.scenario(data.ScenarioFlagMax)
end
end,
-- Quest
Quest = function(subCondition)
local data = subCondition.data
local ira = subCondition.ira
local q1, q1p = Flag.quest(data.QuestFlag1, ira)
local q2, q2p = Flag.quest(data.QuestFlag2, ira)
local q = {
q1p and (q1 .. "#" .. q1p) or q1,
q2p and (q2 .. "#" .. q2p) or q2
}
local nq1, nq1p = Flag.quest(data.NotQuestFlag1, ira)
local nq2, nq2p = Flag.quest(data.NotQuestFlag2, ira)
local notq = {
nq1p and (nq1 .. "#" .. nq1p) or nq1,
nq2p and (nq2 .. "#" .. nq2p) or nq2
}
local out = ""
for _, v in pairs(q) do
out = out .. v .. " "
end
for _, v in pairs(notq) do
out = out .. "<del>" .. v .. "</del> "
end
return out
end,
-- Env天气
Env = function(subCondition)
return subCondition.type .. "/" .. subCondition.data.row_id
end,
-- Flag标记
Flag = function(subCondition)
local data = subCondition.data
local FlagID = tostring(data.FlagID)
local title = mw.title.new(FlagID, "FLAG")
local content = title:getContent()
local value
if data.FlagMin == data.FlagMax then
value = data.FlagMin
else
value = data.FlagMin .. "~" .. data.FlagMax
end
if content then
return content .. ": " .. value
end
return "[[" .. title.fullText .. "]]" .. ": " .. value
end,
-- 道具
Item = function(subCondition)
return subCondition.type .. "/" .. subCondition.data.row_id
end,
PT = function(subCondition)
return subCondition.type .. "/" .. subCondition.data.row_id
end,
Idea = function(subCondition)
return subCondition.type .. "/" .. subCondition.data.row_id
end,
Level = function(subCondition)
return subCondition.type .. "/" .. subCondition.data.row_id
end,
Achievement = function(subCondition)
return subCondition.type .. "/" .. subCondition.data.row_id
end,
FieldSkiiLevel = function(subCondition)
return subCondition.type .. "/" .. subCondition.data.row_id
end
}
function p.getById(id, ira)
if id <= 0 then
return nil
end
local conditionList = QueryHelper.getConditonList(id)
local result = {relation, list = {}}
if conditionList.Premise == 0 then
result.relation = " | "
elseif conditionList.Premise == 1 then
result.relation = " 或 "
end
for i = 1, 8 do
local type = conditionList["ConditionType" .. i]
local id = conditionList["Condition" .. i]
if type > 0 then
local conditionDetail = QueryHelper.getSubCondition(conditionType[type], id)
table.insert(result.list, {type = conditionType[type], data = conditionDetail, ira = ira})
end
end
-- process result
local out = {}
for _, subCondition in ipairs(result.list) do
table.insert(out, parser[subCondition.type](subCondition))
end
out = table.concat(out, result.relation)
return out
end
return p