模块:Tbox

来自乐园数据管理室

此模块的文档可以在模块:Tbox/doc创建

local p = {}
local getArgs = require("Module:Arguments").getArgs
local loadJson = require("Module:JSON").loadJson
local fsidMap = loadJson("FSID")

function itemList(args)
  local items = {}
  for i = 1, 6 do
    if args["itm" .. i .. "ID"] then -- filter nil
      local itemName = args["itm" .. i .. "ID"]
      local itemTitle = getItemTitle(itemName)
      local itemPage = "[[" .. tostring(itemTitle) .. "|" .. itemName .. "]]"

      table.insert(
        items,
        {
          itemPage,
          args["itm" .. i .. "Num"]
        }
      )

      local numString = ""
      if args["itm" .. i .. "Num"] ~= "1" then
        numString = " ×" .. args["itm" .. i .. "Num"]
      end

      mw.smw.set {
        tboxPop = {tostring(itemTitle)},
        tboxPopDisplay = {itemName .. numString},
        tboxPopLinkDisplay = {"[[" .. itemTitle.fullText .. "|" .. itemTitle.text .. "]]" .. numString},
        [tostring(itemTitle) .. "PopNum"] = {args["itm" .. i .. "Num"]}
      }
    end
  end
  return items
end

function fsRow(fsid)
  local output = ""
  if fsid then
    local fs = fsidMap[tonumber(fsid)]

    local firstSkill = fs.FieldSkillID1 .. "Lv" .. fs.FieldSkillLevel1
    local secondSkill
    if fs.FieldSkillLevel2 == 0 then
      secondSkill = "-"
    else
      secondSkill = fs.FieldSkillID2 .. "Lv" .. fs.FieldSkillLevel2
    end

    output =
      mw.ustring.format(
      [[|-
      | rowspan="2" | %s
      | %s
      |-
      | %s
      ]],
      fs.Name,
      firstSkill,
      secondSkill
    )

    if secondSkill == "-" then
      secondSkill = ""
    else
      secondSkill = " + " .. secondSkill
    end
    mw.smw.set {
      FieldSkill = {firstSkill .. secondSkill}
    }
  end
  return output
end

function getItemTitle(itemName)
  local itemTitle
  if mw.title.new(itemName, "物品").exists then
    itemTitle = mw.title.new(itemName, "物品")
  elseif mw.title.new(itemName, "黄金之国物品").exists then
    itemTitle = mw.title.new(itemName, "黄金之国物品")
  else
    itemTitle = mw.title.new(itemName, "物品")
  end
  return itemTitle
end

function p.popTable(frame)
  local args = getArgs(frame)
  local gmk_tbox = loadJson("Gmk/tbox")

  for i, v in ipairs(gmk_tbox) do
    if args.name == v.Name then
      local areas = {}
      for _, v in ipairs(v.areas) do
        table.insert(areas, mw.ustring.lower(v))
      end
      local mapinfo = loadJson("Mapinfo/" .. areas[1])
      mw.smw.set {
        PosX = v.PosX,
        PosY = v.PosY,
        PosZ = v.PosZ,
        Areas = areas,
        ["地域"] = mapinfo.mapName,
        zoneDisplay = mapinfo.mapName .. "・" .. mapinfo.menuGroup
      }
    end
  end

  local goldRow
  if args.goldMin == "0" then
    goldRow = ""
  elseif args.goldMin == args.goldMax then
    goldRow = mw.ustring.format([[
      |-
      ! 金币
      | %s G
      ]], args.goldMin)
    mw.smw.set {
      gold = {args.goldMin}
    }
  else
    goldRow = mw.ustring.format([[
      |-
      ! 金币
      | %s G
      ]], args.goldMin .. " ~ " .. args.goldMax)
    mw.smw.set {
      gold = {args.goldMin .. " ~ " .. args.goldMax}
    }
  end

  local itemRow = ""
  local itemPopList = itemList(args)
  if #itemPopList > 0 then
    local items = {}
    for i, v in ipairs(itemPopList) do
      table.insert(items, v[2] == "1" and v[1] or v[1] .. " ×" .. v[2])
    end

    itemRow = mw.ustring.format([[|-
      ! 物品
      | %s
      ]], table.concat(items, "<br>"))
  end

  return [[{| class="wikitable"
  ! colspan="2" |宝箱内容
  ]] .. goldRow .. itemRow .. [[|}]]
end

function p.fsInfo(frame)
  local args = getArgs(frame)

  local output = ""
  output = output .. fsRow(args.FSID2)
  output = output .. fsRow(args.FSID)

  return #output > 0 and [[{| class="wikitable"
  ! colspan="2" |所需场景技能
  ]] .. output .. "|}" or ""
end

function p.appearCondition(frame)
  local args = getArgs(frame)

  local output = ""
  if args["出现条件"] then
    output = mw.ustring.format([[{| class="wikitable"
    ! 出现条件
    |-
    | %s
    |}
    ]], args["出现条件"])
  end

  return output
end

return p