Line 1: |
Line 1: |
− | local U = require('Module:Core') | + | local U = require("Module:Core") |
| | | |
− | local ShipList = {}
| + | -- Some formatting |
| | | |
− | function ShipList.findID(frame) | + | local function formatBuildtime(minutes) |
− | for id, data in pairs(ShipList.KanmusuData) do
| + | return U.format {"${hours}:${minutes:2}", hours = math.floor(minutes / 60), minutes = minutes % 60} |
− | if ShipList.KanmusuData[id].name[3] == frame.args[1] then
| |
− | return id
| |
− | end
| |
− | end
| |
− | return "NotInDB"
| |
| end | | end |
| | | |
− | function ShipList.getSortedIDList() | + | local function formatTooltip(content, title) |
− | local IDList = {}
| + | return tostring(mw.html.create("span"):attr("title", title):addClass("explain"):wikitext(content)) |
− | for id, data in pairs(ShipList.KanmusuData) do
| |
− | IDList[#IDList + 1] = id
| |
− | local x = #IDList
| |
− | while x > 1 and IDList[x] < IDList[x - 1] do
| |
− | IDList[x - 1], IDList[x] = IDList[x], IDList[x - 1]
| |
− | x = x - 1
| |
− | end
| |
− | end
| |
− | return IDList
| |
| end | | end |
| | | |
− | function ShipList.TotalAircraft(frame)
| + | -- Some calculations |
− | local shipID = frame.args[1]
| |
− | -- if tonumber(shipID) == nil then
| |
− | -- shipID = ShipList.findID(frame)
| |
− | -- end
| |
− | local ship = ShipList.KanmusuData[shipID]
| |
− | local total = 0
| |
− | if ship.aircraft ~= "" then
| |
− | for i, planes in pairs(ship.aircraft) do
| |
− | if ship.aircraft[i] == nil or ship.aircraft[i] == "" then
| |
− | total = total + 0
| |
− | else
| |
− | total = total + ship.aircraft[i]
| |
− | end
| |
− | end
| |
− | end
| |
− | return total
| |
− | end
| |
| | | |
− | function ShipList.getWikiPage(id) | + | local function getTotalAircraft(ship) |
− | --finding name of wiki page of ship
| + | local total = 0 |
− | shipname = ShipList.KanmusuData[id]["name"][3]
| + | if ship.aircraft ~= "" then |
− | pagename = shipname
| + | for i, _ in pairs(ship.aircraft) do |
− | if string.sub(id,1,-2) == "Mist" then -- fleet of fog check
| + | if ship.aircraft[i] == nil or ship.aircraft[i] == "" then |
− | if string.sub(id, -1) == '1' then
| + | total = total + 0 |
− | pagename = 'Iona_(fog)'
| + | else |
− | elseif string.sub(id, -1) == '2' then
| + | total = total + ship.aircraft[i] |
− | pagename = 'Takao_(fog)'
| + | end |
− | elseif string.sub(id, -1) == '3' then
| + | end |
− | pagename = 'Haruna_(fog)'
| + | end |
− | else
| + | return total |
− | pagename = 'Fleet of Fog'
| |
− | end
| |
− | else
| |
− | shipbasename = mw.text.split(shipname, '%s')[1]
| |
− | --Prinz/Graf/Teste check (for ship names that are 2 or more words)
| |
− | if mw.text.split(shipname, '%s')[2] ~= nil and not (mw.text.split(shipname, '%s')[2] == "Kai" or
| |
− | mw.text.split(shipname, '%s')[2] == "A" or mw.text.split(shipname, '%s')[2] == "Zwei" or
| |
− | mw.text.split(shipname, '%s')[2] == "Drei" or mw.text.split(shipname, '%s')[2] == "Due") then
| |
− | shipbasename = shipbasename .. ' ' .. mw.text.split(shipname, '%s')[2]
| |
− | end
| |
− | pagename = shipbasename
| |
− | end
| |
− | return pagename
| |
| end | | end |
− |
| |
− | ShipList.KanmusuData = mw.loadData('Module:Data/Ship')
| |
− |
| |
− | local shipdb = ShipList
| |
− |
| |
− | local shipmodule = {}
| |
− |
| |
− | shipmodule.data = shipdb.KanmusuData
| |
| | | |
| local function getMarriedHp(hp, maxHp) | | local function getMarriedHp(hp, maxHp) |
Line 83: |
Line 31: |
| end | | end |
| | | |
− | local function tooltip(content, title)
| + | -- The ship infobox stuff, legacy |
− | return tostring(mw.html.create('span'):attr('title', title):addClass('explain'):wikitext(content))
| |
− | end
| |
| | | |
− | function shipmodule.getIDNum(frame) | + | local function renderStats(ship) |
− | local shipNum = frame.args[1]
| + | local shipName = ship.name[3] |
− | -- Getting ship ID, number, & info | + | local CardImg = '<div class="top-image">[[File:Ship Card ' .. shipName .. ".png|218x300px|link=]]</div>" |
− | if (tonumber(string.sub(shipNum, 1, 3)) == nil and string.sub(shipNum, 1, 4) ~= "Mist" ) then -- if given a name instead of ID, this searches the db for the ship's corresponding ID | + | local CardDmgImg = '<div class="bottom-image">[[File:Ship Card ' .. shipName .. " Damaged.png|218x300px|link=]]</div>" |
− | shipNum = shipdb.findID(frame)
| + | local BannerImg = '<div class="top-image">[[File:Ship Banner ' .. shipName .. ".png|link=]]</div>" |
| + | local BannerDmgImg = '<div class="bottom-image">[[File:Ship Banner ' .. shipName .. " Damaged.png|link=]]</div>" |
| + | local Cards = |
| + | '<td rowspan="10" class="double-image" style="width:218px;height:300px">' .. CardImg .. CardDmgImg .. "</td>" |
| + | local Banners = |
| + | '<td colspan="3" class="double-image" style="width:240px;height:60px">' .. BannerImg .. BannerDmgImg .. "</td>" |
| + | local sortNoText = ship.no and (ship.no < 1000 and ship.no or formatTooltip(ship.id, ship.no)) or ship.id |
| + | local row1 = "<tr>" .. Cards .. '<th style="text-align: center;">' .. sortNoText .. "</th>" .. Banners .. "</tr>" |
| + | -- Formatting Japanese |
| + | local kanji, form |
| + | local formNum = mw.ustring.find(ship["name"][1], "[乙改甲航]") |
| + | if formNum == nil then |
| + | if mw.ustring.find(ship["name"][1], "%szwei") ~= nil then |
| + | formNum = mw.ustring.find(ship["name"][1], "%szwei") |
| + | kanji = mw.ustring.sub(ship["name"][1], 1, formNum - 1) |
| + | form = " zwei" |
| + | elseif mw.ustring.find(ship["name"][1], "%sdrei") ~= nil then |
| + | formNum = mw.ustring.find(ship["name"][1], "%sdrei") |
| + | kanji = mw.ustring.sub(ship["name"][1], 1, formNum - 1) |
| + | form = " drei" |
| + | elseif mw.ustring.find(ship["name"][1], "%sdue") ~= nil then |
| + | formNum = mw.ustring.find(ship["name"][1], "%sdue") |
| + | kanji = mw.ustring.sub(ship["name"][1], 1, formNum - 1) |
| + | form = " due" |
| + | elseif mw.ustring.find(ship["name"][1], "%sдва") ~= nil then |
| + | formNum = mw.ustring.find(ship["name"][1], "%sдва") |
| + | kanji = mw.ustring.sub(ship["name"][1], 1, formNum - 1) |
| + | form = " два" |
| + | elseif mw.ustring.find(ship["name"][1], "%sMk.II") ~= nil then |
| + | if mw.ustring.find(ship["name"][1], "%sMk.II Mod.2") ~= nil then |
| + | formNum = mw.ustring.find(ship["name"][1], "%sMk.II Mod.2") |
| + | kanji = mw.ustring.sub(ship["name"][1], 1, formNum - 1) |
| + | form = " Mk.II Mod.2" |
| + | else |
| + | formNum = mw.ustring.find(ship["name"][1], "%sMk.II") |
| + | kanji = mw.ustring.sub(ship["name"][1], 1, formNum - 1) |
| + | form = " Mk.II" |
| + | end |
| + | elseif mw.ustring.find(ship["name"][1], "%sреволюция") ~= nil then -- Gangut "Kai" exception |
| + | kanji = mw.text.split(ship["name"][1], "%s")[1] .. "<br/>" .. mw.text.split(ship["name"][1], "%s")[2] |
| + | form = "" |
| + | else |
| + | kanji = ship["name"][1] |
| + | form = "" |
| end | | end |
− | return shipNum | + | else |
| + | kanji = mw.ustring.sub(ship["name"][1], 1, formNum - 1) |
| + | form = mw.ustring.sub(ship["name"][1], formNum, -1) |
| + | end |
| + | local JaName = "" |
| + | if |
| + | ship.name[3] == "Verniy" or ship.name[3] == "Gangut" or ship.name[3] == "Oktyabrskaya Revolyutsiya" or ship.name[3] == "Tashkent" or ship.name[3] == "Tashkent Kai" or ship.name[3] == "Gangut Dva" |
| + | then -- Russian ship markup |
| + | JaName = |
| + | '<ruby lang="ru"><rb>' .. |
| + | kanji .. |
| + | '<span lang="ru">' .. |
| + | form .. "</span>" .. '</rb><rp> (</rp><rt lang="ja">' .. ship["name"][2] .. "</rt><rp>) </rp></ruby>" |
| + | else |
| + | if ship.name[2] then |
| + | JaName = |
| + | '<ruby lang="ja"><rb>' .. |
| + | kanji .. "<span>" .. form .. "</span>" .. "</rb><rp> (</rp><rt>" .. ship.name[2] .. "</rt><rp>) </rp></ruby>" |
| + | else |
| + | JaName = '<ruby lang="ja"><rb>' .. kanji .. "<span>" .. form .. "</span>" .. "</rb></ruby>" |
| + | end |
| + | end |
| + | -- Summary of basic ship info |
| + | local isCVE = |
| + | ship.type == "Light Carrier" and type(ship.asw) == "table" and type(ship.asw[1]) == "number" and ship.asw[1] > 0 |
| + | local shipType = |
| + | isCVE and string.format('<span class="explain" title="CVE">%s[[Category:Escort Carriers]]</span>', ship.type) or |
| + | ship.type |
| + | local row2 = '<tr><th colspan="2">' .. JaName .. '</th><th colspan="2">' .. ship.name[3] .. "</th></tr>" |
| + | local class_string = ship.display_class and formatTooltip(ship.class, "Game library: " .. ship.display_class) or ship.class |
| + | local row3 = '<tr><td colspan="4" style="text-align: center;">' .. class_string .. " " .. shipType .. "</td></tr>" |
| + | local row4 = |
| + | '<tr><td colspan="4"><hr style="border: 0; height: 1px; background-image: linear-gradient(to right, rgba(0,0,0,0), rgba(0,0,0,0.75), rgba(0,0,0,0));" /></td></tr>' |
| + | -- Ship stats table |
| + | local statLabel = |
| + | '<th style="width: 65px; {{border-radius|12px 4px 4px 12px}} padding-left: 5px; padding-right: 5px; background-color: #eae1d1; color: #a3965c; text-align: right; vertical-align: baseline;">' |
| + | local statBox = |
| + | '<td style="{{border-radius|4px 12px 12px 4px}} padding-left: 5px; padding-right: 5px; border: 1px solid #a3965c; text-align: left; vertical-align: baseline;">' |
| + | local hp = ship["hp"][1] |
| + | local maxHp = ship["hp"][2] |
| + | local HPinfo |
| + | if maxHp then |
| + | local marriedHp = getMarriedHp(hp, maxHp) |
| + | local maxModHp = math.min(hp + 2, maxHp) |
| + | local maxModMarriedHp = math.min(marriedHp + 2, maxHp) |
| + | local hpSpan1 = hp == maxModHp and hp or formatTooltip(hp, string.format("%d with HP modernization", maxModHp)) |
| + | local hpSpan2 = |
| + | formatTooltip( |
| + | marriedHp, |
| + | marriedHp == maxModMarriedHp and "Married" or string.format("Married, %d with HP modernization", maxModMarriedHp) |
| + | ) |
| + | HPinfo = statLabel .. "HP [[File:IcoHP.png|HP]]</th>" .. statBox .. hpSpan1 .. "→" .. hpSpan2 .. "</td>" |
| + | else |
| + | HPinfo = statLabel .. "HP [[File:IcoHP.png|HP]]</th>" .. statBox .. hp .. "</td>" |
| + | end |
| + | local FPinfo = |
| + | statLabel .. "FP [[File:IcoAtk.png|18px|Firepower]]</th>" .. statBox .. ship["fp"][1] .. "→" .. ship["fp"][2] .. "</td>" |
| + | local row5 = "<tr>" .. HPinfo .. FPinfo .. "</tr>" |
| + | -- Armor & Torpedo |
| + | local Armorinfo = |
| + | statLabel .. |
| + | "ARM [[File:IcoArmor.png|Armor]]</th>" .. statBox .. ship["armor"][1] .. "→" .. ship["armor"][2] .. "</td>" |
| + | local Torpedoinfo = statLabel .. "TORP[[File:IcoTorpedo.png|Torpedo]]</th>" .. statBox |
| + | if ship["torpedo"] == 0 then |
| + | Torpedoinfo = Torpedoinfo .. ship["torpedo"] |
| + | else |
| + | Torpedoinfo = Torpedoinfo .. ship["torpedo"][1] .. "→" .. ship["torpedo"][2] |
| + | end |
| + | local row6 = "<tr>" .. Armorinfo .. Torpedoinfo .. "</tr>" |
| + | -- Evasion & AA |
| + | local Evasioninfo = |
| + | statLabel .. |
| + | "EVA [[File:IcoEvasion.png|Evasion]]</th>" .. statBox .. ship["evasion"][1] .. "→" .. ship["evasion"][2] .. "</td>" |
| + | local AAinfo = statLabel .. "AA [[File:IcoAA.png|Anti-Air]]</th>" .. statBox |
| + | if ship["aa"] == 0 then |
| + | AAinfo = AAinfo .. ship["aa"] |
| + | else |
| + | AAinfo = AAinfo .. ship["aa"][1] .. "→" .. ship["aa"][2] |
| + | end |
| + | local row7 = "<tr>" .. Evasioninfo .. AAinfo .. "</tr>" |
| + | -- Planes & ASW |
| + | local aircraftTotal = getTotalAircraft(ship) |
| + | local Planeinfo = statLabel .. "PLA [[File:IcoAircraft.png|Aircraft]]</th>" .. statBox .. aircraftTotal .. "</td>" |
| + | local ASWinfo = statLabel .. "ASW [[File:IcoASW.png|Anti-Submarine Warfare]]</th>" .. statBox |
| + | if ship["asw"] == 0 then |
| + | ASWinfo = ASWinfo .. ship["asw"] |
| + | else |
| + | ASWinfo = ASWinfo .. ship["asw"][1] .. "→" .. ship["asw"][2] |
| + | end |
| + | local row8 = "<tr>" .. Planeinfo .. ASWinfo .. "</tr>" |
| + | -- Speed & LOS |
| + | local Speedinfo = statLabel .. "SPD [[File:IcoSpeed.png|Speed]]</th>" .. statBox .. ship["spd"] .. "</td>" |
| + | local LOSinfo = |
| + | statLabel .. |
| + | "LOS [[File:IcoLOS.png|Line of Sight]]</th>" .. statBox .. ship["los"][1] .. "→" .. ship["los"][2] .. "</td>" |
| + | local row9 = "<tr>" .. Speedinfo .. LOSinfo .. "</tr>" |
| + | -- Range & Luck |
| + | local Rangeinfo = statLabel .. "RGE [[File:IcoRange.png|Range]]</th>" .. statBox .. ship["range"] .. "</td>" |
| + | local Luckinfo = |
| + | statLabel .. "LUK [[File:IcoLuck.png|Luck]]</th>" .. statBox .. ship["luck"][1] .. "→" .. ship["luck"][2] .. "</td>" |
| + | local row10 = "<tr>" .. Rangeinfo .. Luckinfo .. "</tr>" |
| + | local StatTable = |
| + | "<table>" .. row1 .. row2 .. row3 .. row4 .. row5 .. row6 .. row7 .. row8 .. row9 .. row10 .. "</table>" |
| + | return StatTable |
| end | | end |
| | | |
− | function shipmodule.KanmusuInfo(frame) -- Kanmusu Info Template | + | local function renderEquipment(ship) |
− | local shipNum = shipmodule.getIDNum(frame)
| + | local equipHeader = "" |
− | local shipInfo = assert(shipmodule.data[shipNum], "KanMusu ID " .. shipNum .. " doesn't have a database entry")
| + | local planeStyle = '<td style="width: 25%; white-space: nowrap; text-align: center; vertical-align: top;">' |
− | local upperTable = shipmodule.makeStatBox(frame) | + | local equipStyle = "" |
− | local DetailTable = shipmodule.EquipmentBox(frame) .. '<table style="width: 100%">' .. shipmodule.ModernizationBox(frame) .. shipmodule.getArtVoice(frame) .. '</table>' | + | if ship["aircraft"] ~= "" then |
− | local shipInfoBox = '<div style="display: inline-block; vertical-align: top;"><table style="{{border-radius|10px 10px 10px 10px}} border: 1px solid #aaaaaa; min-width: 495px">' | + | local equipHeader1 = |
− | shipInfoBox = shipInfoBox .. '<tr><td>' .. upperTable .. '</td></tr>' | + | '<th style="width: 25%; white-space: nowrap; {{border-radius|12px 4px 4px 12px}} background-color: #efe6d7; color: #a3965c;">Aircraft</th>' |
− | shipInfoBox = shipInfoBox .. '<tr><td>' .. DetailTable .. '</td></tr></table></div>' .. shipmodule.createCategories(frame)
| + | local equipHeader2 = |
− | return shipInfoBox | + | '<th style="width: 75%; white-space: nowrap; {{border-radius|4px 12px 12px 4px}} background-color: #efe6d7; color: #a3965c; vertical-align: baseline;">Equipment</th>' |
| + | equipHeader = equipHeader1 .. equipHeader2 |
| + | equipStyle = '<td style="width: 75%; max-width: 375px; text-align: center; vertical-align: baseline;">' |
| + | else |
| + | equipHeader = |
| + | '<th style="white-space: nowrap; {{border-radius|12px 12px 12px 12px}} background-color: #efe6d7; color: #a3965c; vertical-align: baseline;">Equipment</th>' |
| + | equipStyle = '<td style="white-space: nowrap; text-align: center; vertical-align: baseline;">' |
| + | end |
| + | local numRows = math.max(4, U.isize(ship["equip"])) |
| + | local equipTable = "" |
| + | for i = 1, numRows, 1 do |
| + | local equipRow = "<tr>" |
| + | if ship["aircraft"] ~= "" then |
| + | if ship["aircraft"][i] ~= nil then |
| + | equipRow = equipRow .. planeStyle .. ship["aircraft"][i] .. "</td>" .. equipStyle |
| + | else |
| + | equipRow = equipRow .. planeStyle .. "</td>" .. equipStyle |
| + | end |
| + | if ship["equip"] ~= "" then |
| + | if ship["equip"][i] == "" or ship["equip"][i] == "Unequipped" then |
| + | equipRow = equipRow .. "-Unequipped-</td></tr>" |
| + | elseif ship["equip"][i] == nil then |
| + | equipRow = equipRow .. "''-Locked-''</td></tr>" |
| + | else |
| + | if string.find(ship["equip"][i], "%★") then |
| + | local a, b = string.match(ship["equip"][i], "^(.+)★(.+)$") |
| + | equipRow = equipRow .. "[[" .. a .. "|" .. a .. "★" .. b .. "]]</td></tr>" |
| + | else |
| + | equipRow = equipRow .. "[[" .. ship["equip"][i] .. "]]</td></tr>" |
| + | end |
| + | end |
| + | else |
| + | equipRow = equipRow .. "''-Locked-''</td></tr>" |
| + | end |
| + | else |
| + | equipRow = equipRow .. equipStyle |
| + | if ship["equip"] ~= "" then |
| + | if ship["equip"][i] == "" or ship["equip"][i] == "Unequipped" then |
| + | equipRow = equipRow .. "-Unequipped-</td></tr>" |
| + | elseif ship["equip"][i] == nil then |
| + | equipRow = equipRow .. "''Locked''</td></tr>" |
| + | else |
| + | if string.find(ship["equip"][i], "%★") then |
| + | local a, b = string.match(ship["equip"][i], "^(.+)★(.+)$") |
| + | equipRow = equipRow .. "[[" .. a .. "|" .. a .. "★" .. b .. "]]</td></tr>" |
| + | else |
| + | equipRow = equipRow .. "[[" .. ship["equip"][i] .. "]]</td></tr>" |
| + | end |
| + | end |
| + | else |
| + | equipRow = equipRow .. "''Locked''</td></tr>" |
| + | end |
| + | end |
| + | equipTable = equipTable .. equipRow |
| + | end |
| + | return '<table style="width: 100%">' .. equipHeader .. equipTable .. "</table>" |
| end | | end |
| | | |
− | function shipmodule.makeStatBox(frame) | + | local function renderModernization(ship) |
− | local shipNum = shipmodule.getIDNum(frame)
| + | local RscHeader = |
− | | + | '<th style="width: 25%; white-space: nowrap; {{border-radius|12px 4px 4px 12px}} background-color: #3baef5; color: #ffffff; padding-left: 5px; padding-right: 5px; text-align: right;">' |
− | local shipInfo = assert(shipmodule.data[shipNum], "KanMusu ID " .. shipNum .. " doesn't have a database entry") | + | local RscData = '<td style="width: 25%; white-space: nowrap; text-align: center;">' |
− | | + | local RscData2 = '<td colspan="3" style="width: 75%; white-space: nowrap; text-align: center;">' |
− | local shipName = shipInfo.name[3]
| + | -- Construction info |
− | local CardImg = '<div class="top-image">[[File:Ship Card ' .. shipName .. '.png|218x300px|' .. shipName .. ' Card]]</div>'
| + | local constrheader = "" |
− | local CardDmgImg = '<div class="bottom-image">[[File:Ship Card ' .. shipName .. ' Damaged.png|218x300px|' .. shipName .. ' Damaged Card]]</div>'
| + | local constrdata = "" |
− | local BannerImg = '<div class="top-image">[[File:Ship Banner ' .. shipName .. '.png|160px|' .. shipName .. ' Banner]]</div>'
| + | if ship["remodellv"] ~= nil and ship["remodellv"] ~= "" then |
− | local BannerDmgImg = '<div class="bottom-image">[[File:Ship Banner ' .. shipName .. ' Damaged.png|160px|' .. shipName .. ' Damaged Banner]]</div>'
| + | constrheader = "Remodel Level" |
− | | + | constrdata = ship["remodellv"] |
− | local Cards = '<td rowspan="10" class="double-image" style="width:218px;height:300px">' .. CardDmgImg .. CardImg .. '</td>'
| + | else |
− | local Banners = '<td colspan="3" class="double-image" style="width:160px;height:40px">' .. BannerDmgImg .. BannerImg .. '</td>'
| + | constrheader = '<span class="explain-dash" title="h:mm">Build Time</span>' |
− | -- frame:extensionTag('slideshow', CardImg .. CardDmgImg, { sequence = 'forward', transition = 'fade', refresh = '10000', center = 'true' })
| + | constrdata = |
− | -- frame:extensionTag('slideshow', BannerImg .. BannerDmgImg, { sequence = 'forward', transition = 'fade', refresh = '10000', center = 'true' })
| + | type(ship.buildtime) ~= "table" and "??" or |
− | | + | string.format( |
− | local sortNo = shipInfo.sortno or U.split(shipNum, '-')[1] or '?'
| + | "%s (%s)", |
− | local row1 = '<tr>' .. Cards .. '<th style="text-align: center;">' .. sortNo .. '</th>' .. Banners .. '</tr>'
| + | formatBuildtime(ship.buildtime[1]), |
− | | + | ship.buildtime[2] and ship.buildtime[3] and "Normal, LSC" or ship.buildtime[2] and "Normal" or |
− | -- Formatting Japanese
| + | ship.buildtime[3] and "LSC" or |
− | local kanji, form
| + | "Unbuildable" |
− | local formNum = mw.ustring.find(shipmodule.data[shipNum]["name"][1], "[乙改甲航]")
| + | ) |
− | if formNum == nil then
| + | end |
− | if mw.ustring.find(shipmodule.data[shipNum]["name"][1], "%szwei") ~= nil then
| + | local remodelinfo = "" |
− | formNum = mw.ustring.find(shipmodule.data[shipNum]["name"][1], "%szwei")
| + | if ship.remodelreq and ship.remodelreq ~= "" then |
− | kanji = mw.ustring.sub(shipmodule.data[shipNum]["name"][1], 1, formNum - 1)
| + | remodelinfo = |
− | form = " zwei"
| + | string.format( |
− | elseif mw.ustring.find(shipmodule.data[shipNum]["name"][1], "%sdrei") ~= nil then
| + | "[[File:IcoAmmo.png|18px|Ammo]] %d [[File:IcoSteel.png|18px|Steel]] %d", |
− | formNum = mw.ustring.find(shipmodule.data[shipNum]["name"][1], "%sdrei")
| + | ship.remodelreq[2], |
− | kanji = mw.ustring.sub(shipmodule.data[shipNum]["name"][1], 1, formNum - 1)
| + | ship.remodelreq[1] |
− | form = " drei"
| + | ) |
− | elseif mw.ustring.find(shipmodule.data[shipNum]["name"][1], "%sdue") ~= nil then
| + | if ship.remodelbp then |
− | formNum = mw.ustring.find(shipmodule.data[shipNum]["name"][1], "%sdue")
| + | remodelinfo = |
− | kanji = mw.ustring.sub(shipmodule.data[shipNum]["name"][1], 1, formNum - 1)
| + | remodelinfo .. |
− | form = " due"
| + | " " .. |
− | elseif mw.ustring.find(shipmodule.data[shipNum]["name"][1], "%sдва") ~= nil then
| + | string.format("[[File:Item Icon Remodel Blueprint.png|25px|Blueprint|link=Blueprints]] %d", ship.remodelbp) |
− | formNum = mw.ustring.find(shipmodule.data[shipNum]["name"][1], "%sдва")
| + | end |
− | kanji = mw.ustring.sub(shipmodule.data[shipNum]["name"][1], 1, formNum - 1)
| + | if ship.remodelcatapult then |
− | form = " два"
| + | remodelinfo = |
− | elseif mw.ustring.find(shipmodule.data[shipNum]["name"][1], "%sMk.II") ~= nil then
| + | remodelinfo .. |
− | if mw.ustring.find(shipmodule.data[shipNum]["name"][1], "%sMk.II Mod.2") ~= nil then
| + | " " .. |
− | formNum = mw.ustring.find(shipmodule.data[shipNum]["name"][1], "%sMk.II Mod.2")
| + | string.format( |
− | kanji = mw.ustring.sub(shipmodule.data[shipNum]["name"][1], 1, formNum - 1)
| + | "[[File:Item Icon Prototype Flight Deck Catapult.png|25px|Prototype Flight Deck Catapult|link=Prototype Flight Deck Catapult]] %d", |
− | form = " Mk.II Mod.2"
| + | ship.remodelcatapult |
− | else
| + | ) |
− | formNum = mw.ustring.find(shipmodule.data[shipNum]["name"][1], "%sMk.II")
| + | end |
− | kanji = mw.ustring.sub(shipmodule.data[shipNum]["name"][1], 1, formNum - 1)
| + | if ship.remodelar then |
− | form = " Mk.II"
| + | remodelinfo = |
− | end
| + | remodelinfo .. |
− | elseif mw.ustring.find(shipmodule.data[shipNum]["name"][1], "%sреволюция") ~= nil then -- Gangut "Kai" exception
| + | " " .. |
− | kanji = mw.text.split(shipmodule.data[shipNum]["name"][1], "%s")[1] .. '<br/>' .. mw.text.split(shipmodule.data[shipNum]["name"][1], "%s")[2]
| + | string.format("[[File:Item Icon Action Report.png|25px|Action Report|link=Action Report]] %d", ship.remodelar) |
− | form = ""
| + | end |
− | else
| + | if ship.remodeldevmat or ship.remodelconmat or ship.remodelgunmat or ship.remodelairmat or ship.remodelarmmat or ship.remodelboiler or ship.remodelscrew then |
− | kanji = shipmodule.data[shipNum]["name"][1]
| + | remodelinfo = remodelinfo .. "<br>" |
− | form = ""
| + | end |
− | end
| + | if ship.remodeldevmat then |
− | else
| + | remodelinfo = |
− | kanji = mw.ustring.sub(shipmodule.data[shipNum]["name"][1], 1, formNum - 1)
| + | remodelinfo .. " " .. string.format("[[File:IcoDevmat.png|18px|Development Material]] %d", ship.remodeldevmat) |
− | form = mw.ustring.sub(shipmodule.data[shipNum]["name"][1], formNum , -1)
| + | end |
− | end
| + | if ship.remodelconmat then |
− |
| + | remodelinfo = |
− | local JaName = ""
| + | remodelinfo .. " " .. string.format("[[File:IcoConmat.png|18px|Construction Material]] %d", ship.remodelconmat) |
− | if shipNum == "147" or shipNum == "311" or shipNum == "312" or shipNum == "313" or shipNum == "313a" or shipNum == "316" then --Russian ship markup
| + | end |
− | JaName = '<ruby lang="ru" xml:lang="ru"><rb>' .. kanji .. '</rb><rp> (</rp><rt lang="ja">' .. shipmodule.data[shipNum]["name"][2] .. '</rt><rp>) </rp></ruby>' .. frame:expandTemplate{ title = 'lang', args = { 'ru' , form } }
| + | if ship.remodelgunmat then |
− | else
| + | remodelinfo = |
− | JaName = frame:expandTemplate{ title = 'ruby-ja', args = { kanji , shipmodule.data[shipNum]["name"][2] } } .. frame:expandTemplate{ title = 'lang', args = { 'ja' , form } }
| + | remodelinfo .. |
− | end
| + | " " .. |
− | | + | string.format( |
− | -- Summary of basic ship info | + | "[[File:Item Icon New Model Gun Mount Improvement Material.png|18px|New Model Gun Mount Improvement Material|link=New Model Gun Development Material]] %d", |
− | local row2 = '<tr><th colspan="2">' .. JaName .. '</th><th colspan="2">' .. shipmodule.data[shipNum]["name"][3] .. '</th></tr>'
| + | ship.remodelgunmat |
− | local row3 = '<tr><td colspan="4" style="text-align: center;">' .. shipmodule.data[shipNum]["class"] .. ' Class ' .. shipmodule.data[shipNum]["type"] .. '</td></tr>'
| + | ) |
− | local row4 = '<tr><td colspan="4"><hr style="border: 0; height: 1px; background-image: linear-gradient(to right, rgba(0,0,0,0), rgba(0,0,0,0.75), rgba(0,0,0,0));" /></td></tr>'
| + | end |
− | | + | if ship.remodelairmat then |
− | -- Ship stats table | + | remodelinfo = |
− | local statLabel = '<th style="width: 65px; {{border-radius|12px 4px 4px 12px}} padding-left: 5px; padding-right: 5px; background-color: #eae1d1; color: #a3965c; text-align: right; vertical-align: baseline;">' | + | remodelinfo .. |
− | local statBox = '<td style="{{border-radius|4px 12px 12px 4px}} padding-left: 5px; padding-right: 5px; border: 1px solid #a3965c; text-align: left; vertical-align: baseline;">'
| + | " " .. |
− | | + | string.format( |
− | local hp = shipmodule.data[shipNum]["hp"][1]
| + | "[[File:Item Icon New Model Aerial Armament Material.png|18px|New Model Aerial Armament Material|link=New Model Aviation Development Material]] %d", |
− | local maxHp = shipmodule.data[shipNum]["hp"][2]
| + | ship.remodelairmat |
− | local HPinfo | + | ) |
− | if maxHp then | |
− | local marriedHp = getMarriedHp(hp, maxHp) | |
− | local maxModHp = math.min(hp + 2, maxHp)
| |
− | local maxModMarriedHp = math.min(marriedHp + 2, maxHp)
| |
− | local hpSpan1 = tooltip(hp, string.format('%d with DE modernization', maxModHp))
| |
− | local hpSpan2 = tooltip(marriedHp, string.format('Married, %d with DE modernization', maxModMarriedHp))
| |
− | HPinfo = statLabel .. 'HP [[File:IcoHP.png|HP]]</th>' .. statBox .. hpSpan1 .. '→' .. hpSpan2 .. '</td>'
| |
− | else
| |
− | HPinfo = statLabel .. 'HP [[File:IcoHP.png|HP]]</th>' .. statBox .. hp .. '</td>'
| |
| end | | end |
− | | + | if ship.remodelarmmat then |
− | local FPinfo = statLabel .. 'FP [[File:IcoAtk.png|Firepower]]</th>' .. statBox .. shipmodule.data[shipNum]["fp"][1] .. '→' .. shipmodule.data[shipNum]["fp"][2] .. '</td>' | + | remodelinfo = |
− | | + | remodelinfo .. |
− | local row5 = '<tr>' .. HPinfo .. FPinfo .. '</tr>'
| + | " " .. |
− | | + | string.format( |
− | -- Armor & Torpedo
| + | "[[File:Item Icon New Model Armament Material.png|18px|New Model Armament Material|link=New Model Armament Material]] %d", |
− | local Armorinfo = statLabel .. 'ARM [[File:IcoArmor.png|Armor]]</th>' .. statBox .. shipmodule.data[shipNum]["armor"][1] .. '→' .. shipmodule.data[shipNum]["armor"][2] .. '</td>'
| + | ship.remodelarmmat |
− | local Torpedoinfo = statLabel .. 'TORP [[File:IcoTorpedo.png|Torpedo]]</th>' .. statBox
| + | ) |
− | if shipmodule.data[shipNum]["torpedo"] == 0 then
| |
− | Torpedoinfo = Torpedoinfo .. shipmodule.data[shipNum]["torpedo"]
| |
− | else
| |
− | Torpedoinfo = Torpedoinfo .. shipmodule.data[shipNum]["torpedo"][1] .. '→' .. shipmodule.data[shipNum]["torpedo"][2]
| |
| end | | end |
− | | + | if ship.remodelboiler then |
− | local row6 = '<tr>' .. Armorinfo .. Torpedoinfo .. '</tr>' | + | remodelinfo = |
− | | + | remodelinfo .. |
− | -- Evasion & AA
| + | " " .. |
− | local Evasioninfo = statLabel .. 'EVA [[File:IcoEvasion.png|Evasion]]</th>' .. statBox .. shipmodule.data[shipNum]["evasion"][1] .. '→' .. shipmodule.data[shipNum]["evasion"][2] .. '</td>'
| + | string.format( |
− | local AAinfo = statLabel .. 'AA [[File:IcoAA.png|Anti-Air]]</th>' .. statBox
| + | "[[File:Item Icon New Model High Temperature High Pressure Boiler.png|18px|New Model High Temperature High Pressure Boiler|link=New Model High Temperature High Pressure Boiler]] %d", |
− | if shipmodule.data[shipNum]["aa"] == 0 then
| + | ship.remodelboiler |
− | AAinfo = AAinfo .. shipmodule.data[shipNum]["aa"]
| + | ) |
− | else
| |
− | AAinfo = AAinfo .. shipmodule.data[shipNum]["aa"][1] .. '→' .. shipmodule.data[shipNum]["aa"][2]
| |
| end | | end |
− | | + | if ship.remodelscrew then |
− | local row7 = '<tr>' .. Evasioninfo .. AAinfo .. '</tr>' | + | remodelinfo = |
− | | + | remodelinfo .. " " .. string.format("[[File:Item Icon Improvement Material.png|18px|Improvement Material|link=Improvement]] %d", ship.remodelscrew) |
− | -- Planes & ASW
| |
− | local aircraftTotal = shipdb.TotalAircraft(frame)
| |
− | local Planeinfo = statLabel .. 'PLA [[File:IcoAircraft.png|Aircraft]]</th>' .. statBox .. aircraftTotal .. '</td>'
| |
− | local ASWinfo = statLabel .. 'ASW [[File:IcoASW.png|Anti-Submarine Warfare]]</th>' .. statBox
| |
− | if shipmodule.data[shipNum]["asw"] == 0 then
| |
− | ASWinfo = ASWinfo .. shipmodule.data[shipNum]["asw"]
| |
− | else
| |
− | ASWinfo = ASWinfo .. shipmodule.data[shipNum]["asw"][1] .. '→' .. shipmodule.data[shipNum]["asw"][2]
| |
| end | | end |
| + | end |
| + | -- Construction & Remodel |
| + | local row11 = "" |
| + | if constrheader == "Build Time" then |
| + | row11 = |
| + | "<tr>" .. RscHeader .. constrheader .. "</th>" .. RscData .. constrdata .. '</td><td colspan="2"> </td></tr>' |
| + | else |
| + | row11 = |
| + | "<tr>" .. |
| + | RscHeader .. |
| + | constrheader .. |
| + | "</th>" .. |
| + | RscData .. |
| + | constrdata .. "</td>" .. RscHeader .. "Remodel Req</th>" .. RscData .. remodelinfo .. "</td></tr>" |
| + | end |
| + | -- Consumption |
| + | local consfuel = "[[File:IcoFuel.png|18px|Fuel]] " .. ship["consumption"][1] |
| + | local consammo = "[[File:IcoAmmo.png|18px|Ammo]] " .. ship["consumption"][2] |
| + | local row12 = "<tr>" .. RscHeader .. "Consumption</th>" .. RscData .. consfuel .. " " .. consammo .. "</td>" |
| + | -- Scrap Info |
| + | local scrapfuel = "[[File:IcoFuel.png|18px|Fuel]] " .. ship["dismantle"][1] |
| + | local scrapammo = "[[File:IcoAmmo.png|18px|Ammo]] " .. ship["dismantle"][2] |
| + | local scrapsteel = "[[File:IcoSteel.png|18px|Steel]] " .. ship["dismantle"][3] |
| + | local scrapbauxite = "[[File:IcoBauxite.png|18px|Bauxite]] " .. ship["dismantle"][4] |
| + | local scrapinfo = scrapfuel .. " " .. scrapammo .. " " .. scrapsteel .. " " .. scrapbauxite |
| + | local row12 = row12 .. RscHeader .. "Dismantle</th>" .. RscData .. scrapinfo .. "</td></tr>" |
| + | -- Modernization |
| + | local modFP = "[[File:IcoAtkRemodel.png|25px|Firepower]] " .. ship["modernization"][1] |
| + | local modTorp = "[[File:IcoTorpedoRemodel.png|25px|Torpedo]] " .. ship["modernization"][2] |
| + | local modAA = "[[File:IcoAARemodel.png|25px|Anti-Air]] " .. ship["modernization"][3] |
| + | local modArmor = "[[File:IcoArmorRemodel.png|25px|Armor]] " .. ship["modernization"][4] |
| + | local modLuck = "" |
| + | if ship["modernization"][5] ~= nil and ship["modernization"][5] ~= "" then |
| + | modLuck = "[[File:IcoLuckRemodel.png|25px|Luck]] " .. ship["modernization"][5] |
| + | end |
| + | local modInfo = modFP .. " " .. modTorp .. " " .. modAA .. " " .. modArmor |
| + | if modLuck ~= "" then |
| + | modInfo = modInfo .. " " .. modLuck |
| + | end |
| + | local row13 = "<tr>" .. RscHeader .. "Modernization</th>" .. RscData2 .. modInfo .. "</td></tr>" |
| + | return row13 .. row11 .. row12 |
| + | end |
| | | |
− | local row8 = '<tr>' .. Planeinfo .. ASWinfo .. '</tr>'
| + | local function renderArtists(ship) |
− | | + | local RscHeader = |
− | -- Speed & LOS | + | '<th style="width: 25%; white-space: nowrap; {{border-radius|12px 4px 4px 12px}} background-color: #3baef5; color: #ffffff; padding-left: 5px; padding-right: 5px; text-align: right;">' |
− | local Speedinfo = statLabel .. 'SPD [[File:IcoSpeed.png|Speed]]</th>' .. statBox .. shipmodule.data[shipNum]["spd"] .. '</td>' | + | local RscData = '<td style="width: 25%; white-space: nowrap; text-align: center;">' |
− | local LOSinfo = statLabel .. 'LOS [[File:IcoLOS.png|Line of Sight]]</th>' .. statBox .. shipmodule.data[shipNum]["los"][1] .. '→' .. shipmodule.data[shipNum]["los"][2] .. '</td>' | + | local illustrator = |
− | | + | ship["artist"] ~= "Unknown" and ship["artist"] ~= "" and |
− | local row9 = '<tr>' .. Speedinfo .. LOSinfo .. '</tr>'
| + | ("[[:Category:" .. ship["artist"] .. "|" .. ship["artist"] .. "]]") or |
− | | + | "Unknown" |
− | -- Range & Luck | + | local voiceactor = |
− | local Rangeinfo = statLabel .. 'RGE [[File:IcoRange.png|Range]]</th>' .. statBox .. shipmodule.data[shipNum]["range"] .. '</td>'
| + | ship["seiyuu"] ~= "Unknown" and ship["seiyuu"] ~= "" and |
− | local Luckinfo = statLabel .. 'LUK [[File:IcoLuck.png|Luck]]</th>' .. statBox .. shipmodule.data[shipNum]["luck"][1] .. '→' .. shipmodule.data[shipNum]["luck"][2] .. '</td>'
| + | ("[[:Category:" .. ship["seiyuu"] .. "|" .. ship["seiyuu"] .. "]]") or |
| + | "Unknown" |
| + | return RscHeader .. |
| + | "Illustrator</th>" .. RscData .. illustrator .. "</td>" .. RscHeader .. "Seiyuu</th>" .. RscData .. voiceactor .. "</td>" |
| + | end |
| | | |
− | local row10 = '<tr>' .. Rangeinfo .. Luckinfo .. '</tr>'
| + | local function renderCategories(ship) |
− | local StatTable = '<table>' .. row1 .. row2 .. row3 .. row4 .. row5 .. row6 .. row7 .. row8 .. row9 .. row10 .. '</table>'
| + | local categories = "[[Category:Ships]][[Category:" .. ship["class"] .. "]][[Category:" .. ship["type"] .. "s]]" |
− | return StatTable
| + | if ship["artist"] ~= "Unknown" and ship["artist"] ~= "" then |
| + | categories = categories .. "[[Category:" .. ship["artist"] .. "]]" |
| + | end |
| + | if ship["seiyuu"] ~= "Unknown" and ship["seiyuu"] ~= "" then |
| + | categories = categories .. "[[Category:" .. ship["seiyuu"] .. "]]" |
| + | end |
| + | return categories |
| end | | end |
| | | |
− | function shipmodule.EquipmentBox(frame) | + | local function renderReversion(ship) --Copy paste mess by Chocolatecravinghobo. Shows information/cost for models that remodel/revert to a previous remodel |
− | local shipNum = shipmodule.getIDNum(frame)
| + | --- Souya hardcode fix |
− | | + | if ship["reversionto"] == "Souya " then |
− | local shipInfo = assert(shipmodule.data[shipNum], "KanMusu ID " .. shipNum .. " doesn't have a database entry")
| + | ship.reversionto = ship.reversionto .. "(AGS)" |
− | | + | end |
− | -- Equipment table
| + | |
− | local equipHeader = ''
| + | local reversionHeader = "" |
− | local planeStyle = '<td style="width: 25%; white-space: nowrap; text-align: center; vertical-align: top;">'
| + | local reversionStyle = "" |
− | local equipStyle = ''
| + | local reversionHeader = |
− | if shipmodule.data[shipNum]["aircraft"] ~= "" then
| + | '<th colspan="4" style="width: 75%; white-space: nowrap; {{border-radius|12px 12px 12px 12px}} background-color: #3baef5; color: #ffffff; vertical-align: baseline;"> Reversible to ' .. ship.reversionto .. "</th>" |
− | equipHeader1 = '<th style="width: 25%; white-space: nowrap; {{border-radius|12px 4px 4px 12px}} background-color: #efe6d7; color: #a3965c;">Aircraft</th>'
| + | local reversionStyle = '<td style="white-space: nowrap; text-align: center; vertical-align: baseline;">' |
− | equipHeader2 = '<th style="width: 75%; white-space: nowrap; {{border-radius|4px 12px 12px 4px}} background-color: #efe6d7; color: #a3965c; vertical-align: baseline;">Equipment</th>'
| + | local RscHeader = |
− | equipHeader = equipHeader1 .. equipHeader2
| + | '<th style="width: 25%; white-space: nowrap; {{border-radius|12px 4px 4px 12px}} background-color: #3baef5; color: #ffffff; padding-left: 5px; padding-right: 5px; text-align: right;">' |
− | equipStyle = '<td style="width: 75%; max-width: 375px; text-align: center; vertical-align: baseline;">'
| + | local RscData = '<td style="width: 25%; white-space: nowrap; text-align: center;">' |
− | else | + | -- Construction info |
− | equipHeader = '<th style="white-space: nowrap; {{border-radius|12px 12px 12px 12px}} background-color: #efe6d7; color: #a3965c; vertical-align: baseline;">Equipment</th>'
| + | local reversionlvheader = "" |
− | equipStyle = '<td style="white-space: nowrap; text-align: center; vertical-align: baseline;">'
| + | local reversionlvdata = "" |
| + | if ship["reversionlv"] ~= nil and ship["reversionlv"] ~= "" then |
| + | reversionlvheader = "Reversion Level" |
| + | reversionlvdata = ship["reversionlv"] |
| + | end |
| + | local reversioninfo = "" |
| + | if ship.reversionreq and ship.reversionreq ~= "" then |
| + | reversioninfo = |
| + | string.format( |
| + | "[[File:IcoAmmo.png|18px|Ammo]] %d [[File:IcoSteel.png|18px|Steel]] %d", |
| + | ship.reversionreq[2], |
| + | ship.reversionreq[1] |
| + | ) |
| + | if ship.reversionbp then |
| + | reversioninfo = |
| + | reversioninfo .. |
| + | " " .. |
| + | string.format("[[File:Item Icon Remodel Blueprint.png|25px|Blueprint|link=Blueprints]] %d", ship.reversionbp) |
| + | end |
| + | if ship.reversioncatapult then |
| + | reversioninfo = |
| + | reversioninfo .. |
| + | " " .. |
| + | string.format( |
| + | "[[File:Item Icon Prototype Flight Deck Catapult.png|25px|Prototype Flight Deck Catapult|link=Prototype Flight Deck Catapult]] %d", |
| + | ship.reversioncatapult |
| + | ) |
| + | end |
| + | if ship.reversionar then |
| + | reversioninfo = |
| + | reversioninfo .. |
| + | " " .. |
| + | string.format("[[File:Item Icon Action Report.png|25px|Action Report|link=Action Report]] %d", ship.reversionar) |
| end | | end |
− | | + | if ship.reversiondevmat or ship.reversionconmat or ship.reversiongunmat or ship.reversionairmat or ship.reversionarmmat or ship.reversionboiler or ship.reversionscrew then |
− | local numRows = math.max(4, U.isize(shipmodule.data[shipNum]["equip"]))
| + | reversioninfo = reversioninfo .. "<br>" |
− | local equipTable = '' | |
− | for i = 1, numRows, 1 do
| |
− | local equipRow = '<tr>'
| |
− | if shipmodule.data[shipNum]["aircraft"] ~= "" then
| |
− | if shipmodule.data[shipNum]["aircraft"][i] ~= nil then
| |
− | equipRow = equipRow .. planeStyle .. shipmodule.data[shipNum]["aircraft"][i] .. '</td>' .. equipStyle
| |
− | else
| |
− | equipRow = equipRow .. planeStyle .. '</td>' .. equipStyle
| |
− | end
| |
− | if shipmodule.data[shipNum]["equip"] ~= "" then
| |
− | if shipmodule.data[shipNum]["equip"][i] == "" or shipmodule.data[shipNum]["equip"][i] == "Unequipped" then
| |
− | equipRow = equipRow .. '-Unequipped-</td></tr>'
| |
− | elseif shipmodule.data[shipNum]["equip"][i] == nil then
| |
− | equipRow = equipRow .. '\'\'-Locked-\'\'</td></tr>'
| |
− | else
| |
− | if string.find(shipmodule.data[shipNum]["equip"][i], "%★") then
| |
− | a,b = string.match(shipmodule.data[shipNum]["equip"][i], "^(.+)★(.+)$")
| |
− | equipRow = equipRow .. '[[' .. a .. '|' .. a .. '★' .. b .. ']]</td></tr>'
| |
− | else
| |
− | equipRow = equipRow .. '[[' .. shipmodule.data[shipNum]["equip"][i] .. ']]</td></tr>'
| |
− | end
| |
− | end
| |
− | else
| |
− | equipRow = equipRow .. '\'\'-Locked-\'\'</td></tr>'
| |
− | end
| |
− | else
| |
− | equipRow = equipRow .. equipStyle
| |
− | if shipmodule.data[shipNum]["equip"] ~= "" then
| |
− | if shipmodule.data[shipNum]["equip"][i] == "" or shipmodule.data[shipNum]["equip"][i] == "Unequipped" then
| |
− | equipRow = equipRow .. '-Unequipped-</td></tr>'
| |
− | elseif shipmodule.data[shipNum]["equip"][i] == nil then
| |
− | equipRow = equipRow .. '\'\'Locked\'\'</td></tr>'
| |
− | else
| |
− | if string.find(shipmodule.data[shipNum]["equip"][i], "%★") then
| |
− | a,b = string.match(shipmodule.data[shipNum]["equip"][i], "^(.+)★(.+)$")
| |
− | equipRow = equipRow .. '[[' .. a .. '|' .. a .. '★' .. b .. ']]</td></tr>'
| |
− | else
| |
− | equipRow = equipRow .. '[[' .. shipmodule.data[shipNum]["equip"][i] .. ']]</td></tr>'
| |
− | end
| |
− | end
| |
− | else
| |
− | equipRow = equipRow .. '\'\'Locked\'\'</td></tr>'
| |
− | end
| |
− | end
| |
− | equipTable = equipTable .. equipRow
| |
| end | | end |
− | return '<table style="width: 100%">' .. equipHeader .. equipTable .. '</table>' | + | if ship.reversiondevmat then |
− | end
| + | reversioninfo = |
− | | + | reversioninfo .. " " .. string.format("[[File:IcoDevmat.png|18px|Development Material]] %d", ship.reversiondevmat) |
− | function shipmodule.ModernizationBox(frame)
| |
− | local shipNum = shipmodule.getIDNum(frame)
| |
− | local shipInfo = assert(shipmodule.data[shipNum], "KanMusu ID " .. shipNum .. " doesn't have a database entry")
| |
− | | |
− | local RscHeader = '<th style="width: 25%; white-space: nowrap; {{border-radius|12px 4px 4px 12px}} background-color: #3baef5; color: #ffffff; padding-left: 5px; padding-right: 5px; text-align: right;">'
| |
− | local RscData = '<td style="width: 25%; white-space: nowrap; text-align: center;">'
| |
− | local RscData2 = '<td colspan="3" style="width: 75%; white-space: nowrap; text-align: center;">'
| |
− | | |
− | -- Construction info
| |
− | local constrheader = ''
| |
− | local constrdata = ''
| |
− | | |
− | if shipInfo["remodellv"] ~= nil and shipInfo["remodellv"] ~= "" then
| |
− | constrheader = 'Remodel Level'
| |
− | constrdata = shipInfo["remodellv"]
| |
− | else
| |
− | constrheader = 'Build Time'
| |
− | if shipInfo["buildtime"] == nil or shipInfo["buildtime"] == "" then
| |
− | constrdata = 'Not Buildable'
| |
− | else
| |
− | constrdata = shipInfo["buildtime"]
| |
− | end
| |
| end | | end |
− | | + | if ship.reversionconmat then |
− | local remodelinfo = '' | + | reversioninfo = |
− | if shipInfo.remodelreq and shipInfo.remodelreq ~= '' then
| + | reversioninfo .. " " .. string.format("[[File:IcoConmat.png|18px|Construction Material]] %d", ship.reversionconmat) |
− | remodelinfo = string.format('[[File:IcoSteel.png|18px|Steel]] %d [[File:IcoAmmo.png|18px|Ammo]] %d', shipInfo.remodelreq[1], shipInfo.remodelreq[2])
| |
− | if shipInfo.remodelbp then
| |
− | remodelinfo = remodelinfo .. ' ' .. string.format('[[File:Item Icon Remodel Blueprint.png|25px|Blueprint|link=Blueprints]] %d', shipInfo.remodelbp)
| |
− | end
| |
− | if shipInfo.remodelcatapult then
| |
− | remodelinfo = remodelinfo .. ' ' .. string.format('[[File:Item Icon Prototype Flight Deck Catapult.png|25px|Prototype Flight Deck Catapult]] %d', shipInfo.remodelcatapult)
| |
− | end
| |
− | if shipInfo.remodelar then
| |
− | remodelinfo = remodelinfo .. ' ' .. string.format('[[File:Item Icon Action Report.png|25px|Action Report]] %d', shipInfo.remodelar)
| |
− | end
| |
− | if shipInfo.remodeldevmat or shipInfo.remodelconmat or shipInfo.remodelgunmat or shipInfo.remodelairmat then
| |
− | remodelinfo = remodelinfo .. '<br>'
| |
− | end
| |
− | if shipInfo.remodeldevmat then
| |
− | remodelinfo = remodelinfo .. ' ' .. string.format('[[File:IcoDevmat.png|18px|Development Material]] %d', shipInfo.remodeldevmat)
| |
− | end
| |
− | if shipInfo.remodelconmat then | |
− | remodelinfo = remodelinfo .. ' ' .. string.format('[[File:IcoConmat.png|18px|Construction Material]] %d', shipInfo.remodelconmat)
| |
− | end
| |
− | if shipInfo.remodelgunmat then
| |
− | remodelinfo = remodelinfo .. ' ' .. string.format('[[File:Item Icon New Model Gun Mount Improvement Material.png|18px|New Model Gun Mount Improvement Material]] %d', shipInfo.remodelgunmat)
| |
− | end
| |
− | if shipInfo.remodelairmat then
| |
− | remodelinfo = remodelinfo .. ' ' .. string.format('[[File:Item Icon New Model Aerial Armament Material.png|18px|New Model Aerial Armament Material]] %d', shipInfo.remodelairmat)
| |
− | end
| |
− | if shipInfo.remodelarmmat then
| |
− | remodelinfo = remodelinfo .. ' ' .. string.format('[[File:Item Icon New Model Armament Material.png|18px|New Model Armament Material]] %d', shipInfo.remodelarmmat)
| |
− | end
| |
| end | | end |
− | | + | if ship.reversiongunmat then |
− | -- Construction & Remodel
| + | reversioninfo = |
− | local row11 = ''
| + | reversioninfo .. |
− | if constrheader == 'Build Time' then
| + | " " .. |
− | row11 = '<tr>' .. RscHeader .. constrheader .. '</th>' .. RscData .. constrdata .. '</td><td colspan="2"> </td></tr>' | + | string.format( |
− | else
| + | "[[File:Item Icon New Model Gun Mount Improvement Material.png|18px|New Model Gun Mount Improvement Material|link=New Model Gun Development Material]] %d", |
− | row11 = '<tr>' .. RscHeader .. constrheader .. '</th>' .. RscData .. constrdata .. '</td>' .. RscHeader .. 'Remodel Req</th>' .. RscData .. remodelinfo .. '</td></tr>'
| + | ship.reversiongunmat |
| + | ) |
| end | | end |
− | | + | if ship.reversionairmat then |
− | -- Consumption | + | reversioninfo = |
− | local consfuel = '[[File:IcoFuel.png|18px|Fuel]] ' .. shipInfo["consumption"][1]
| + | reversioninfo .. |
− | local consammo = '[[File:IcoAmmo.png|18px|Ammo]] ' .. shipInfo["consumption"][2]
| + | " " .. |
− | | + | string.format( |
− | local row12 = '<tr>' .. RscHeader .. 'Consumption</th>' .. RscData .. consfuel .. ' ' .. consammo .. '</td>'
| + | "[[File:Item Icon New Model Aerial Armament Material.png|18px|New Model Aerial Armament Material|link=New Model Aviation Development Material]] %d", |
− | | + | ship.reversionairmat |
− | -- Scrap Info
| + | ) |
− | local scrapfuel = '[[File:IcoFuel.png|18px|Fuel]] ' .. shipInfo["dismantle"][1]
| |
− | local scrapammo = '[[File:IcoAmmo.png|18px|Ammo]] ' .. shipInfo["dismantle"][2]
| |
− | local scrapsteel = '[[File:IcoSteel.png|18px|Steel]] ' .. shipInfo["dismantle"][3]
| |
− | local scrapbauxite = '[[File:IcoBauxite.png|18px|Bauxite]] ' .. shipInfo["dismantle"][4]
| |
− | local scrapinfo = scrapfuel .. ' ' .. scrapammo .. ' ' .. scrapsteel .. ' ' .. scrapbauxite
| |
− | local row12 = row12 .. RscHeader .. 'Dismantle</th>' .. RscData .. scrapinfo .. '</td></tr>'
| |
− | | |
− | -- Modernization
| |
− | local modFP = '[[File:IcoAtkRemodel.png|25px|Firepower]] ' .. shipInfo["modernization"][1]
| |
− | local modTorp = '[[File:IcoTorpedoRemodel.png|25px|Torpedo]] ' .. shipInfo["modernization"][2]
| |
− | local modAA = '[[File:IcoAARemodel.png|25px|Anti-Air]] ' .. shipInfo["modernization"][3]
| |
− | local modArmor = '[[File:IcoArmorRemodel.png|25px|Armor]] ' .. shipInfo["modernization"][4]
| |
− | local modLuck = ''
| |
− | if shipInfo["modernization"][5] ~= nil and shipInfo["modernization"][5] ~= "" then
| |
− | -- modLuck = '[[File:IcoLuck|18px|Luck]] ' .. shipInfo["modernization"][5]
| |
− | modLuck = '[[File:IcoLuckRemodel.png|25px|Luck]] ' .. shipInfo["modernization"][5] -- Just a placeholder
| |
| end | | end |
− | | + | if ship.reversionarmmat then |
− | local modInfo = modFP .. ' ' .. modTorp .. ' ' .. modAA .. ' ' .. modArmor
| + | reversioninfo = |
− | if modLuck ~= '' then
| + | reversioninfo .. |
− | modInfo = modInfo .. ' ' .. modLuck
| + | " " .. |
| + | string.format( |
| + | "[[File:Item Icon New Model Armament Material.png|18px|New Model Armament Material|link=New Model Armament Material]] %d", |
| + | ship.reversionarmmat |
| + | ) |
| end | | end |
− | local row13 = '<tr>' .. RscHeader .. 'Modernization</th>' .. RscData2 .. modInfo .. '</td></tr>' | + | if ship.reversionboiler then |
− | -- return '<table style="width: 100%">' .. row13 .. row11 .. row12 .. '</table>'
| + | reversioninfo = |
− | return row13 .. row11 .. row12
| + | reversioninfo .. |
− | end
| + | " " .. |
− | | + | string.format( |
− | function shipmodule.getArtVoice(frame)
| + | "[[File:Item Icon New Model High Temperature High Pressure Boiler.png|18px|New Model High Temperature High Pressure Boiler|link=New Model High Temperature High Pressure Boiler]] %d", |
− | local shipNum = shipmodule.getIDNum(frame)
| + | ship.reversionboiler |
− | local shipInfo = assert(shipmodule.data[shipNum], "KanMusu ID " .. shipNum .. " doesn't have a database entry")
| + | ) |
− | local RscHeader = '<th style="width: 25%; white-space: nowrap; {{border-radius|12px 4px 4px 12px}} background-color: #3baef5; color: #ffffff; padding-left: 5px; padding-right: 5px; text-align: right;">'
| |
− | local RscData = '<td style="width: 25%; white-space: nowrap; text-align: center;">'
| |
− | local illustrator = ''
| |
− | local voiceactor = ''
| |
− | if shipmodule.data[shipNum]["artist"] ~= "Unknown" and shipmodule.data[shipNum]["artist"] ~= "" then
| |
− | illustrator = '[[:Category:' .. shipmodule.data[shipNum]["artist"] .. '|' .. shipmodule.data[shipNum]["artist"] .. ']]'
| |
− | else
| |
− | illustrator = 'Unknown'
| |
| end | | end |
− | art = RscHeader .. 'Artist</th>' .. RscData .. illustrator .. '</td>'
| + | if ship.reversionscrew then |
− | if shipmodule.data[shipNum]["seiyuu"] ~= "Unknown" and shipmodule.data[shipNum]["seiyuu"] ~= "" then | + | reversioninfo = reversioninfo .. " " .. string.format( |
− | voiceactor = '[[:Category:' .. shipmodule.data[shipNum]["seiyuu"] .. '|' .. shipmodule.data[shipNum]["seiyuu"] .. ']]'
| + | "[[File:Item Icon Improvement Material.png|18px|Improvement Material|link=Improvement]] %d", |
− | else
| + | ship.reversionscrew |
− | voiceactor = 'Unknown'
| + | ) |
| end | | end |
− | voice = RscHeader .. 'Seiyuu</th>' .. RscData .. voiceactor .. '</td>' | + | end |
− | --local row14 = '<table style="width: 100%">' .. art .. voice .. '</table>'
| + | -- Reversion |
− | return art .. voice
| + | local row14 = "" |
| + | local row15 = "" |
| + | if ship.reversionlv ~= "" then |
| + | row14 = "<tr>" .. reversionHeader .. "</tr>"-- .. reversionStyle |
| + | row15 = |
| + | "<tr>" .. |
| + | RscHeader .. |
| + | reversionlvheader .. |
| + | "</th>" .. |
| + | RscData .. |
| + | reversionlvdata .. "</td>" .. RscHeader .. "Reversion Req</th>" .. RscData .. reversioninfo .. "</td></tr>" |
| + | end |
| + | return row14 .. row15 |
| end | | end |
| | | |
− | function shipmodule.createCategories(frame)
| |
− | local shipNum = shipmodule.getIDNum(frame)
| |
− |
| |
− | local shipInfo = assert(shipmodule.data[shipNum], "KanMusu ID " .. shipNum .. " doesn't have a database entry")
| |
| | | |
− | local cat = '[[Category:Ships]]'
| + | -- Converting to legacy data format |
− | cat = cat .. '[[Category:' .. shipmodule.data[shipNum]["class"] .. ' Class]][[Category:' .. shipmodule.data[shipNum]["type"] .. 's]]'
| + | |
− | if shipmodule.data[shipNum]["artist"] ~= "Unknown" and shipmodule.data[shipNum]["artist"] ~= "" then
| + | local ShipData = require("Module:Data/Ship") |
− | cat = cat .. '[[Category:' .. shipmodule.data[shipNum]["artist"] .. ']]'
| + | local shipsByNo = require("Module:Collection/ShipsByNo") |
− | end
| + | local shipsById = require("Module:Collection/ShipsByApiId") |
− | if shipmodule.data[shipNum]["seiyuu"] ~= "Unknown" and shipmodule.data[shipNum]["seiyuu"] ~= "" then
| + | local Ship = require("Module:Ship") |
− | cat = cat .. '[[Category:' .. shipmodule.data[shipNum]["seiyuu"] .. ']]'
| + | |
− | end
| + | local function minMaxStats(a, b) |
− | return cat
| + | return a == nil and b == nil and {'??', '??'} or (a == false or a == 0) and (b == false or b == 0) and 0 or {a or '??', b or '??'} |
| end | | end |
| | | |
− | function shipmodule.KanmusuList(frame) | + | local function trueIsOne(x) |
− | local shipType = frame.args[1]
| + | return x == true and 1 or x |
− | local shipListTable = '<table class="wikitable filterable sortable" style="width: 100%; min-width: 800px;"><tr>'
| |
− | shipListTable = shipListTable .. '<th style="text-align: center; background-color: SpringGreen;" class="unfilterable" data-sort-type="number">ID</th>'
| |
− | shipListTable = shipListTable .. '<th style="text-align: center; background-color: SpringGreen;" class="unfilterable unsortable">Name</th>'
| |
− | shipListTable = shipListTable .. '<th style="text-align: center; background-color: SpringGreen;" class="unfilterable unsortable">Class</th>'
| |
− | shipListTable = shipListTable .. '<th style="text-align: center; background-color: SpringGreen;" class="unsortable">Type</th>'
| |
− | shipListTable = shipListTable .. '<th style="text-align: center; vertical-align: middle; background-color: LightCoral;" class="unfilterable">[[File:IcoAtk.png|Firepower]]</th>'
| |
− | shipListTable = shipListTable .. '<th style="text-align: center; vertical-align: middle; background-color: LightSkyBlue;" class="unfilterable">[[File:IcoTorpedo.png|Torpedo]]</th>'
| |
− | shipListTable = shipListTable .. '<th style="text-align: center; vertical-align: middle; background-color: SandyBrown;" class="unfilterable">[[File:IcoAA.png|Anti-Air]]</th>'
| |
− | shipListTable = shipListTable .. '<th style="text-align: center; vertical-align: middle; background-color: Seashell;" class="unfilterable">[[File:IcoASW.png|Anti-Submarine Warfare]]</th>'
| |
− | shipListTable = shipListTable .. '<th style="text-align: center; vertical-align: middle; background-color: Aquamarine;" class="unfilterable">[[File:IcoLOS.png|Line of Sight]]</th>'
| |
− | shipListTable = shipListTable .. '<th style="text-align: center; vertical-align: middle; background-color: PaleGreen;" class="unfilterable">[[File:IcoLuck.png|Luck]]</th>'
| |
− | shipListTable = shipListTable .. '<th style="text-align: center; vertical-align: middle; background-color: Pink;" class="unfilterable">[[File:IcoHP.png|HP]]</th>'
| |
− | shipListTable = shipListTable .. '<th style="text-align: center; vertical-align: middle; background-color: Yellow;" class="unfilterable">[[File:IcoArmor.png|Armor]]</th>'
| |
− | shipListTable = shipListTable .. '<th style="text-align: center; vertical-align: middle; background-color: Violet;" class="unfilterable">[[File:IcoEvasion.png|Evasion]]</th>'
| |
− | shipListTable = shipListTable .. '<th style="text-align: center; vertical-align: middle; background-color: Silver;" class="unfilterable">[[File:IcoAircraft.png|Aircraft]]</th>'
| |
− | shipListTable = shipListTable .. '<th style="text-align: center; vertical-align: middle; background-color: Aqua;" class="unsortable">[[File:IcoSpeed.png|Speed|link=]]</th>'
| |
− | shipListTable = shipListTable .. '<th style="text-align: center; background-color: SpringGreen;" class="unsortable">[[File:IcoRange.png|Range|link=]]</th>'
| |
− | shipListTable = shipListTable .. '<th style="text-align: center; background-color: SpringGreen;" class="unfilterable">[[File:IcoFuel.png|Fuel Consumption]]</th>'
| |
− | shipListTable = shipListTable .. '<th style="text-align: center; background-color: SpringGreen;" class="unfilterable">[[File:IcoAmmo.png|Ammo Consumption]]</th></tr>'
| |
− | local IDList = shipdb.getSortedIDList()
| |
− | for num, id in pairs(IDList) do
| |
− | if shipType ~= nil then
| |
− | if shipType == shipmodule.data[id]["type"] then
| |
− | shipListTable = shipListTable .. shipmodule.KanmusuListEntry(id, frame.args[2] ~= nil)
| |
− | end
| |
− | else
| |
− | shipListTable = shipListTable .. shipmodule.KanmusuListEntry(id, frame.args[2] ~= nil)
| |
− | end
| |
− | end
| |
− | shipListTable = shipListTable .. '</table>'
| |
− | return shipListTable
| |
| end | | end |
| | | |
− | function shipmodule.KanmusuListEntry(id, printMax) -- Kanmusu List Table | + | local function loadShipData(key) |
− | local strings = '<tr>'
| + | local ship = Ship(shipsById[(U.find(shipsByNo, ShipData[key] or key, "name") or {}).id] or key) |
− | local aircraftTotal = 0
| + | local data = {} |
− | if shipmodule.data[id]["aircraft"] ~= "" then
| + | data.id = ship:id() or '???' |
− | local aircraftslot = {0, 0, 0, 0}
| + | data.no = ship:true_id() |
− | for i = 1, 4, 1 do
| + | data.name = {ship:japanese_name() or "", ship:reading() or "", ship:name() or ""} |
− | if shipmodule.data[id]["aircraft"][i] ~= nil then
| + | local class = ship:class() |
− | aircraftslot[i] = shipmodule.data[id]["aircraft"][i]
| + | data.class = class and class:name() or "???" |
− | else
| + | data.display_class = ship._display_class |
− | aircraftslot[i] = 0
| + | data.type = ship:formatted_type() or "" |
− | end
| + | data.spd = ship:formatted_speed() or "" |
− | end
| + | data.range = ship:formatted_range() or "" |
− | aircraftTotal = aircraftslot[1] + aircraftslot[2] + aircraftslot[3] + aircraftslot[4]
| + | data.rarity = ship:rarity() or "" |
− | else
| + | data.hp = minMaxStats(ship:hp(), ship:hp_max()) |
− | aircraftTotal = 0
| + | data.fp = minMaxStats(ship:firepower(), ship:firepower_max()) |
− | end
| + | data.armor = minMaxStats(ship:armor(), ship:armor_max()) |
− |
| + | data.torpedo = minMaxStats(ship:torpedo(), ship:torpedo_max()) |
− | --finding name of wiki page of ship
| + | data.aa = minMaxStats(ship:aa(), ship:aa_max()) |
− | shipname = shipmodule.data[id]["name"][3]
| + | data.luck = minMaxStats(ship:luck(), ship:luck_max()) |
− | pagename = shipname
| + | data.evasion = minMaxStats(ship:evasion(), ship:evasion_max()) |
− | if string.sub(id,1,-2) == "Mist" then -- fleet of fog check
| + | data.asw = minMaxStats(ship:asw(), ship:asw_max()) |
− | if string.sub(id, -1) == '1' then
| + | data.los = minMaxStats(ship:los(), ship:los_max()) |
− | pagename = 'Iona_(fog)'
| + | data.aircraft = {} |
− | elseif string.sub(id, -1) == '2' then
| + | data.equip = {} |
− | pagename = 'Takao_(fog)'
| + | for _, v in ipairs(ship._equipment) do |
− | elseif string.sub(id, -1) == '3' then
| + | table.insert(data.equip, (v.equipment == nil and '?' or v.equipment or '') .. (v.stars and string.format(' ★+%d', v.stars) or '')) |
− | pagename = 'Haruna_(fog)'
| + | table.insert(data.aircraft, v.size or "") |
− | else
| + | end |
− | pagename = 'Fleet of Fog'
| + | data.artist = ship:artist() or "" |
− | end
| + | if data.artist == 'Shimada Humikane' then |
− | else
| + | data.artist = 'Shimada Fumikane' |
− | shipbasename = mw.text.split(shipname, '%s')[1]
| + | end |
− | --Chitose/Chiyoda-Kou check; submarines should be unaffected
| + | data.seiyuu = ship:voice_actor() or "" |
− | if mw.text.split(shipbasename, '%p')[2] ~= nil and mw.text.split(shipbasename, '%p')[2] == "Kou" then
| + | data.buildtime = { |
− | shipbasename = mw.text.split(shipbasename, '%p')[1]
| + | ship._build_time or "", |
− | end
| + | ship._buildable == true or false, |
− | --Prinz/Graf/Teste check (for ship names that are 2 or more words)
| + | ship._buildable_lsc == true or false |
− | if mw.text.split(shipname, '%s')[2] ~= nil and not (mw.text.split(shipname, '%s')[2] == "Kai" or
| + | } |
− | mw.text.split(shipname, '%s')[2] == "A" or mw.text.split(shipname, '%s')[2] == "zwei" or
| + | data.remodellv = ship:remodel_level() or "" |
− | mw.text.split(shipname, '%s')[2] == "drei" or mw.text.split(shipname, '%s')[2] == "Due" or
| + | data.consumption = {ship:fuel() or "", ship:ammo() or ""} |
− | mw.text.split(shipname, '%s')[2] == "Dva") then
| + | data.remodelreq = not ship._remodel_steel and not ship._remodel_ammo and '' or {ship._remodel_steel or 0, ship._remodel_ammo or 0} |
− | shipbasename = shipbasename .. ' ' .. mw.text.split(shipname, '%s')[2]
| + | data.dismantle = { |
− | end
| + | ship._scrap_fuel or 0, |
− | pagename = shipbasename
| + | ship._scrap_ammo or 0, |
− | end
| + | ship._scrap_steel or 0, |
| + | ship._scrap_baux or 0, |
| + | } |
| + | data.modernization = { |
| + | ship._firepower_mod or 0, |
| + | ship._torpedo_mod or 0, |
| + | ship._aa_mod or 0, |
| + | ship._armor_mod or 0, |
| + | ship._luck_mod or '', |
| + | } |
| + | data.remodelbp = trueIsOne(ship._remodel_blueprint) |
| + | data.remodelcatapult = trueIsOne(ship._remodel_catapult) |
| + | data.remodelar = trueIsOne(ship._remodel_report) |
| + | data.remodelgunmat = trueIsOne(ship._remodel_gunmat) |
| + | data.remodelairmat = trueIsOne(ship._remodel_airmat) |
| + | data.remodelarmmat = trueIsOne(ship._remodel_armament) |
| + | data.remodelboiler = trueIsOne(ship._remodel_boiler) |
| + | data.remodeldevmat = trueIsOne(ship._remodel_development_material) |
| + | data.remodelconmat = trueIsOne(ship._remodel_construction_material) |
| + | data.remodelscrew = trueIsOne(ship._remodel_screw) |
| + | |
| + | data.reversible = trueIsOne(ship._reversible) |
| + | data.reversionto = ship:remodel_to() or "" |
| + | data.reversionto = data.reversionto:gsub("/", " ") |
| + | data.reversionbp = trueIsOne(ship._remodel_to_blueprint) |
| + | data.reversionlv = ship:remodel_to_level() or "" |
| + | data.reversionreq = not ship._remodel_to_steel and not ship._remodel_to_ammo and '' or {ship._remodel_to_steel or 0, ship._remodel_to_ammo or 0} |
| + | data.reversionbp = trueIsOne(ship._remodel_to_blueprint) |
| + | data.reversioncatapult = trueIsOne(ship._remodel_to_catapult) |
| + | data.reversionar = trueIsOne(ship._remodel_to_report) |
| + | data.reversiongunmat = trueIsOne(ship._remodel_to_gunmat) |
| + | data.reversionairmat = trueIsOne(ship._remodel_to_airmat) |
| + | data.reversionarmmat = trueIsOne(ship._remodel_to_armament) |
| + | data.reversionboiler = trueIsOne(ship._remodel_to_boiler) |
| + | data.reversiondevmat = trueIsOne(ship._remodel_to_development_material) |
| + | data.reversionconmat = trueIsOne(ship._remodel_to_construction_material) |
| + | data.reversionscrew = trueIsOne(ship._remodel_to_screw) |
| + | return data |
| + | end |
| | | |
− | statLevel = 1 --base stat
| + | local function render(frame) |
− | if printMax then
| + | local ship = loadShipData(frame.args[1]) |
− | statLevel = 2 --max stat
| + | return '<div style="display:inline-block;vertical-align:top"><table style="{{border-radius|10px 10px 10px 10px}} border:1px solid #aaaaaa;min-width:495px"><tr><td>' .. |
− | end
| + | renderStats(ship) .. |
− |
| + | "</td></tr><tr><td>" .. |
− | strings = strings .. '<td style="text-align: center;">' .. id .. '</td>'
| + | renderEquipment(ship) .. |
− | strings = strings .. '<td style="text-align: center;">[[' .. pagename .. '|' .. shipname ..']]</td>'
| + | '<table style="width:100%">' .. |
− | strings = strings .. '<td style="text-align: center;">' .. shipmodule.data[id]["class"] .. '</td>'
| + | renderModernization(ship) .. |
− | strings = strings .. '<td style="text-align: center;">' .. shipmodule.data[id]["type"] .. '</td>'
| + | renderArtists(ship) .. |
− | strings = strings .. '<td style="text-align: center; background-color: #f0bbbb;">' .. shipmodule.data[id]["fp"][statLevel] .. '</td>'
| + | renderReversion(ship) .. "</table></td></tr></table></div>" .. renderCategories(ship) |
− | if shipmodule.data[id]["torpedo"] == 0 then
| |
− | strings = strings .. '<td style="text-align: center; background-color: #99eefa;">' .. shipmodule.data[id]["torpedo"] .. '</td>'
| |
− | else | |
− | strings = strings .. '<td style="text-align: center; background-color: #99eefa;">' .. shipmodule.data[id]["torpedo"][statLevel] .. '</td>'
| |
− | end
| |
− | if shipmodule.data[id]["aa"] == 0 then
| |
− | strings = strings .. '<td style="text-align: center; background-color: #faccaa;">' .. shipmodule.data[id]["aa"] .. '</td>'
| |
− | else
| |
− | strings = strings .. '<td style="text-align: center; background-color: #faccaa;">' .. shipmodule.data[id]["aa"][statLevel] .. '</td>'
| |
− | end
| |
− | if shipmodule.data[id]["asw"] == 0 then
| |
− | strings = strings .. '<td style="text-align: center; background-color: #fff5ee;">' .. shipmodule.data[id]["asw"] .. '</td>'
| |
− | else
| |
− | strings = strings .. '<td style="text-align: center; background-color: #fff5ee;">' .. shipmodule.data[id]["asw"][statLevel] .. '</td>' | |
− | end
| |
− | strings = strings .. '<td style="text-align: center; background-color: #afffee;">' .. shipmodule.data[id]["los"][statLevel] .. '</td>'
| |
− | strings = strings .. '<td style="text-align: center; background-color: #cbfbcb;">' .. shipmodule.data[id]["luck"][statLevel] .. '</td>'
| |
− | strings = strings .. '<td style="text-align: center; background-color: #ffe0eb;">' .. shipmodule.data[id]["hp"][statLevel] .. '</td>'
| |
− | strings = strings .. '<td style="text-align: center; background-color: #ffffaa;">' .. shipmodule.data[id]["armor"][statLevel] .. '</td>'
| |
− | strings = strings .. '<td style="text-align: center; background-color: #eeccee;">' .. shipmodule.data[id]["evasion"][statLevel] .. '</td>'
| |
− | strings = strings .. '<td style="text-align: center; background-color: #d9d9d9;">' .. aircraftTotal .. '</td>'
| |
− | strings = strings .. '<td style="text-align: center; background-color: #aaffff;">' .. shipmodule.data[id]["spd"] .. '</td>'
| |
− | strings = strings .. '<td style="text-align: center;">' .. shipmodule.data[id]["range"] .. '</td>'
| |
− | strings = strings .. '<td style="text-align: center;">' .. shipmodule.data[id]["consumption"][1] .. '</td>'
| |
− | strings = strings .. '<td style="text-align: center;">' .. shipmodule.data[id]["consumption"][2] .. '</td></tr>'
| |
− | return strings
| |
| end | | end |
| | | |
− | local function numToID(num) | + | local function test() |
− | return num < 10 and "00" .. num or num < 100 and "0" .. num or tostring(num)
| + | return render({args = {"Brooklyn"}}) |
| end | | end |
| | | |
− | function shipmodule.CardList()
| + | -- print(p.test()) |
− | firstID = 1
| |
− | maxID = -1
| |
− | for KanMusuID, KanMusuData in pairs(shipmodule.data) do
| |
− | if tonumber(KanMusuID) ~= nil and tonumber(KanMusuID) > maxID then
| |
− | maxID = tonumber(KanMusuID)
| |
− | end
| |
− | end
| |
− | IDRange = math.ceil(maxID / 10) * 10
| |
− | wikipage = ""
| |
− | while firstID < IDRange do
| |
− | wikipage = wikipage .. "<h2>No. " .. tostring(firstID) .. "-" .. tostring(firstID+9) .. "</h2>"
| |
− | for i = 0, 9 do
| |
− | x = firstID + i
| |
− | shipID = numToID(x)
| |
− | if not shipmodule.data[shipID] then
| |
− | wikipage = wikipage .. "[[File:blank.png|150px]]"
| |
− | else
| |
− | local shipName = shipmodule.data[shipID].name[3]
| |
− | wikipage = wikipage .. "[[File:Ship Card " .. shipName .. ".png|150px|link=" .. shipdb.getWikiPage(shipID) .. "]]"
| |
− | end
| |
− | if x % 5 == 0 then
| |
− | wikipage = wikipage .. "<br>"
| |
− | end
| |
− | end
| |
− | wikipage = wikipage .. "<br>"
| |
− | firstID = firstID + 10
| |
− | end
| |
− | return wikipage
| |
− | end
| |
| | | |
− | return shipmodule | + | return {KanmusuInfo = render, test = test} |