模块:Salvage
来自乐园数据管理室
此模块的文档可以在模块:Salvage/doc创建
local p = {}
local loadJson = require("Module:JSON").loadJson
function p.getDataByGmkId(gmkId)
return loadJson("SalvagePoint/" .. gmkId)
end
function p.parseSalvageTable(SalvageTable)
-- parse collection
local collection = {}
for ColleTableIndex = 1, 3 do
local ColleTable = SalvageTable["ColleTable" .. ColleTableIndex]
local ColleTablePercent = SalvageTable["ColleTablePercent" .. ColleTableIndex] / 100
if ColleTablePercent > 0 then
local collectionStaticPopTable = {}
local collectionRandomPopTable = {}
for itmIndex = 1, 8 do -- 单道具行
if #ColleTable["itm" .. itmIndex .. "ID"] > 0 then
local itemName = ColleTable["itm" .. itmIndex .. "ID"]
local itemNum = ColleTable["itm" .. itmIndex .. "Num"]
local itemPer = ColleTable["itm" .. itmIndex .. "Per"]
local itemTitle = mw.title.new(itemName, "物品")
local itemLink = "[[" .. itemTitle.fullText .. "|" .. itemTitle.text .. "]]"
if tonumber(itemNum) > 0 then
table.insert(collectionStaticPopTable, itemLink)
mw.smw.set {["SalvagePop"] = itemTitle.fullText}
end
if tonumber(itemPer) > 0 then
table.insert(collectionRandomPopTable, {itemLink, itemPer})
mw.smw.set {["SalvagePop"] = itemTitle.fullText}
end
end
end
local randitmPopNum = {ColleTable["randitmPopMin"], ColleTable["randitmPopMax"]}
if ColleTable["randitmPopMin"] == ColleTable["randitmPopMax"] then
randitmPopNum = {ColleTable["randitmPopMin"]}
end
if #collectionStaticPopTable > 0 or #collectionRandomPopTable > 0 then
table.insert(
collection,
{
["colleTablePercent"] = ColleTablePercent,
["staticPop"] = collectionStaticPopTable,
["randomPop"] = collectionRandomPopTable,
["randitmPopNum"] = randitmPopNum
}
)
end
end
end
-- parse treasure
local treasure = {}
for TresureTableIndex = 1, 3 do
local TresureTable = SalvageTable["TresureTable" .. TresureTableIndex]
local TresureTablePercent = SalvageTable["TresureTablePercent" .. TresureTableIndex] / 100
if TresureTablePercent > 0 then
local treasureStaticPopTable = {}
local treasureRandomPopTable = {}
local treasureGold = {0}
for itmIndex = 1, 8 do -- 单道具行
if #TresureTable["itm" .. itmIndex .. "ID"] > 0 then
local itemName = TresureTable["itm" .. itmIndex .. "ID"]
local itemNum = TresureTable["itm" .. itmIndex .. "Num"]
local itemPer = TresureTable["itm" .. itmIndex .. "Per"]
local itemTitle = mw.title.new(itemName, "物品")
local itemLink = "[[" .. itemTitle.fullText .. "|" .. itemTitle.text .. "]]"
if tonumber(itemNum) > 0 then
table.insert(treasureStaticPopTable, itemLink)
mw.smw.set {["SalvagePop"] = itemTitle.fullText}
end
if tonumber(itemPer) > 0 then
table.insert(treasureRandomPopTable, {itemLink, itemPer})
mw.smw.set {["SalvagePop"] = itemTitle.fullText}
end
if tonumber(TresureTable["goldPopMin"]) > 0 and tonumber(TresureTable["goldMax"]) > 0 then
treasureGold = {TresureTable["goldMin"], TresureTable["goldMax"]}
end
end
end
local tboxImage
if TresureTable["RSC_ID"] == "4" then
tboxImage = "[[文件:Mnu064 image 1.png|136px]]"
elseif TresureTable["RSC_ID"] == "5" then
tboxImage = "[[文件:Mnu064 image 2.png|136px]]"
elseif TresureTable["RSC_ID"] == "6" then
tboxImage = "[[文件:Mnu064 image 4.png|136px]]"
else
error("No valid RSC_ID")
end
table.insert(
treasure,
{
["treasureTablePercent"] = TresureTablePercent,
["staticPop"] = treasureStaticPopTable,
["randomPop"] = treasureRandomPopTable,
["randitmPopNum"] = TresureTable["randitmPopMin"] == TresureTable["randitmPopMax"] and
{TresureTable["randitmPopMin"]} or
{TresureTable["randitmPopMin"], TresureTable["randitmPopMax"]},
["tboxImage"] = tboxImage,
["treasureGold"] = treasureGold
}
)
end
end
-- enemy
local enemy = {}
for EnemyPopTableIndex = 1, 3 do
local EnemyPopTable = SalvageTable["EnemyPopTable" .. EnemyPopTableIndex]
local EnemyPopTablePercent = SalvageTable["EnemyPopTablePercent" .. EnemyPopTableIndex] / 100
local enemyPop = {}
if EnemyPopTablePercent > 0 then
for eneIndex = 1, 4 do
if #EnemyPopTable["ene" .. eneIndex .. "ID"] > 0 then
local eneName = EnemyPopTable["ene" .. eneIndex .. "ID"]
local eneLv = EnemyPopTable["ene" .. eneIndex .. "Lv"]
local enePer = EnemyPopTable["ene" .. eneIndex .. "Per"]
local eneTitle = mw.title.new(eneName, "敌人")
local eneLink = "[[" .. eneTitle.fullText .. "|" .. eneTitle.text .. "]]"
if tonumber(enePer) > 0 then
table.insert(enemyPop, {eneLink, enePer})
mw.smw.set {["SalvageEnemyPop"] = eneTitle.fullText}
end
end
end
table.insert(
enemy,
{
["EnemyPopTablePercent"] = EnemyPopTablePercent,
["enemyPop"] = enemyPop
}
)
end
end
return {
["collection"] = collection,
["treasure"] = treasure,
["TresureBoxHit"] = SalvageTable["TresureBoxHit"] / 100,
["enemy"] = enemy,
["EnemyPopHit"] = SalvageTable["EnemyPopHit"] / 100
}
end
function DisplayTable(SalvageTable)
local tableBody = ""
local result = p.parseSalvageTable(SalvageTable)
-- collection
local collectionTable = ""
if #result["treasure"] > 0 then
for i, v in ipairs(result["collection"]) do
local ColleTablePercent = v["colleTablePercent"]
local StaticPop = table.concat(v["staticPop"], "<br>")
local randitmPopNum = table.concat(v["randitmPopNum"], " ~ ")
local RandomPop = {}
for i, v in ipairs(v["randomPop"]) do
table.insert(RandomPop, table.concat(v, " ") .. "%")
end
RandomPop = table.concat(RandomPop, "<br>")
tableBody =
tableBody ..
mw.ustring.format([[|-
|%s%%
|%s
|%s
|%s
]], ColleTablePercent, StaticPop, randitmPopNum, RandomPop)
end
collectionTable =
mw.ustring.format(
[[{| class="wikitable"
|+
! colspan="4" |收藏道具
|+
!概率
!必出道具
! colspan="2" |额外道具
%s|}
]],
tableBody
)
end
-- treasure
local treasureTable = ""
if #result["treasure"] > 0 then
tableBody = ""
for i, v in ipairs(result["treasure"]) do
local StaticPop = table.concat(v["staticPop"], "<br>")
local randitmPopNum = table.concat(v["randitmPopNum"], " ~ ")
local treasureGold = table.concat(v["treasureGold"], " ~ ")
local RandomPop = {}
for i, v in ipairs(v["randomPop"]) do
table.insert(RandomPop, table.concat(v, " ") .. "%")
end
RandomPop = table.concat(RandomPop, "<br>")
tableBody =
tableBody ..
mw.ustring.format(
[[|-
|%s%%
|%s
|%s
|%s
|%s
|%s
]],
v["treasureTablePercent"],
v["tboxImage"],
treasureGold,
StaticPop,
randitmPopNum,
RandomPop
)
end
treasureTable =
mw.ustring.format(
[[{| class="wikitable"
|+
! colspan="6" |宝藏 基础出现率:%s%%
|+
!概率
!宝箱类型
!金币
!必出道具
! colspan="2" |额外道具
%s|}
]],
result["TresureBoxHit"],
tableBody
)
end
-- enemy
local enemyTable = ""
if #result["enemy"] > 0 and result["EnemyPopHit"] > 0 then
tableBody = ""
for i, v in ipairs(result["enemy"]) do
local EnemyPopTablePercent = v["EnemyPopTablePercent"]
local enemyPop = {}
for i, v in ipairs(v["enemyPop"]) do
table.insert(enemyPop, table.concat(v, " ") .. "%")
end
enemyPop = table.concat(enemyPop, "<br>")
tableBody = tableBody .. mw.ustring.format([[|-
|%s%%
|%s
]], EnemyPopTablePercent, enemyPop)
end
enemyTable =
mw.ustring.format(
[[{| class="wikitable"
|+
! colspan="2" |敌人 基础出现率:%s%%
|+
!概率
!名称
%s|}
]],
result["EnemyPopHit"],
tableBody
)
end
return '<div style="display:flex;flex-wrap:wrap;">\n' .. collectionTable .. enemyTable .. treasureTable .. "</div>\n"
end
function getMapinfo(gmkId)
local area
local gmkData = loadJson("Gmk/salvage")
for _,v in ipairs(gmkData) do
if v.Name == gmkId then
area = v.areas[1]
end
end
return loadJson("Mapinfo/" .. area)
end
function p.popTable(frame)
local args = frame.args
local gmkId = args[1]
local mapinfo = getMapinfo(gmkId)
mw.smw.set {["地域"] = mapinfo.mapName}
local data = p.getDataByGmkId(gmkId)
local output = ""
-- 按键
local button1 = data["BtnChallenge0"]["BtnType1"]
local button2 = data["BtnChallenge1"]["BtnType1"]
local button3 = data["BtnChallenge2"]["BtnType1"]
if button1 == "Random" then
output = output .. "按键:随机" .. "\n\n"
else
output = output .. "按键:" .. button1 .. button2 .. button3 .. "\n\n"
end
output = output .. "=== 普通气瓶 ===\n\n"
output = output .. DisplayTable(data["SalvageTable1"])
output = output .. "=== 白银气瓶 ===\n\n"
output = output .. DisplayTable(data["SalvageTable2"])
output = output .. "=== 黄金气瓶 ===\n\n"
output = output .. DisplayTable(data["SalvageTable3"])
output = output .. "=== 极品气瓶 ===\n\n"
output = output .. DisplayTable(data["SalvageTable4"])
if data["SalvageTable5"] ~= "" then
output = output .. "=== 增幅气瓶 ===\n\n"
output = output .. DisplayTable(data["SalvageTable5"])
end
return output
end
return p