Module:ShipInfoboxGenerator: Difference between revisions
From Corsair Cove Official Wiki
No edit summary |
No edit summary |
||
| Line 169: | Line 169: | ||
-- CREW ITERATION | -- CREW ITERATION | ||
for _, entry in ipairs(crew_types) do | for _, entry in ipairs(crew_types) do | ||
local pirate_name = entry.type | local pirate_name = string.gsub(entry.type, "'", "") | ||
local pirate_qty = entry.qty | local pirate_qty = entry.qty | ||
local pirate_icon = frame:preprocess( | local pirate_icon = frame:preprocess( | ||
| Line 177: | Line 177: | ||
out = out .. "<div class='cc-infobox-ship-crew-row-col'>" | out = out .. "<div class='cc-infobox-ship-crew-row-col'>" | ||
out = out .. "<div>" .. pirate_name .. "</div>" | out = out .. "<div>" .. pirate_name .. "</div>" | ||
if pirate_name ~= "Swabbies" then | |||
out = out .. "<div class='cc-infobox-ship-crew-row-col-advanced'>" | |||
end | |||
out = out .. "<div>" .. pirate_icon .. "</div>" | out = out .. "<div>" .. pirate_icon .. "</div>" | ||
out = out .. "<div>" .. pirate_qty .. "</div>" | out = out .. "<div>" .. pirate_qty .. "</div>" | ||
Revision as of 14:10, 7 August 2026
Documentation for this module may be created at Module:ShipInfoboxGenerator/doc
local p = {}
local buildingData = mw.loadData("Module:BuildingData")
local resourceData = mw.loadData("Module:ResourceData")
local principleData = mw.loadData("Module:PrincipleData")
local GenericIcon = require("Module:GenericIcon")
local shipData = require("Module:Ship_data.lua")
local function titleCase(str)
return str:gsub("(%a)([%w']*)", function(first, rest)
return first:upper() .. rest:lower()
end)
end
function p.makeInfobox(frame)
local name = frame.args.name or frame.args[1] or ""
if name == "" then
return "'''Error:''' No ship name provided"
end
local ship = shipData.get_ship_by_name(name)
if ship == nil then
return "'''Error:''' Ship not found in data\n\nDebug name: " .. tostring(name) .. "\nDebug ship: nil"
end
local tier = ship.tier
local principle_path = ship.principle_path
local class = ship.class
local hybrid_path = ship.hybrid_path
local icon_filename = ship.icon_filename
local pier = ship.pier
local description = ship.description
local construction_costs = ship.construction_costs
local crew_types = ship.crew_types
local stats_base = ship.stats_base
local stats_crew_bonuses = ship.stats_crew_bonuses
if principle_path == "NONE" then
principle_path = ""
end
local principle_name = titleCase(principle_path)
local hybrid_name = titleCase(hybrid_path)
local ship_icon = frame:preprocess(
"{{Ship tier icon|" .. tier .. "|path=" .. principle_name .. "|size=md}}")
-- OUTPUT STRING
local out = ""
-- HEADER
out = out .. "<div class='cc-infobox-ship'>"
out = out .. "<div class='cc-infobox-ship-header'>"
out = out .. "<div class='cc-infobox-ship-header-tier'>" .. ship_icon .. "</div>"
out = out .. "<div class='cc-infobox-ship-header-name'><span>" .. name .. "</span></div>"
-- PRINCIPLE
if principle_name == "Notoriety" then
out = out .. "<div class='cc-infobox-ship-header-class cc-panel-recolor-notoriety'>"
out = out .. "<span>Prowler"
if hybrid_name ~= "None" then
out = out .. "+"
end
out = out .. " Tier " .. tier
out = out .. "</span></div>"
end
if principle_name == "Empire" then
out = out .. "<div class='cc-infobox-ship-header-class cc-panel-recolor-empire'>"
out = out .. "<span>Destroyer"
if hybrid_name ~= "None" then
out = out .. "+"
end
out = out .. " Tier " .. tier
out = out .. "</span></div>"
end
if principle_name == "Seafaring" then
out = out .. "<div class='cc-infobox-ship-header-class cc-panel-recolor-seafaring'>"
out = out .. "<span>Hunter"
if hybrid_name ~= "None" then
out = out .. "+"
end
out = out .. " Tier " .. tier
out = out .. "</span></div>"
end
if principle_name == "Wealth" then
out = out .. "<div class='cc-infobox-ship-header-class cc-panel-recolor-wealth'>"
out = out .. "<span>Reaver"
if hybrid_name ~= "None" then
out = out .. "+"
end
out = out .. " Tier " .. tier
out = out .. "</span></div>"
end
-- ICON
out = out .. "<div class='cc-infobox-ship-header-icon'>"
out = out .. "[[File:" .. icon_filename .. "|x128px]]</div>"
-- DESCRIPTION
out = out .. "<div class='cc-infobox-ship-header-description'>" .. description .. "</div>"
-- HEADER END
out = out .. "</div>"
-- STATS
out = out .. "<div class='cc-infobox-ship-stats'>"
out = out .. "<div class='cc-infobox-ship-stats-title'>Stats</div><hr>"
-- MAIN STATS
local healthIcon = GenericIcon.icon_link({
args = {"Health", size = "sm"}
})
local crewIcon = GenericIcon.icon_link({
args = {"Crew", size = "sm"}
})
local suppliesIcon = GenericIcon.icon_link({
args = {"Supplies", size = "sm"}
})
out = out .. "<div class='cc-infobox-ship-stats-fullrow'>"
out = out .. "<div>" .. healthIcon .. "</div><div>" .. stats_base[1].qty .. "</div></div>"
out = out .. "<div class='cc-infobox-ship-stats-fullrow'>"
out = out .. "<div>" .. crewIcon .. "</div><div>" .. stats_base[2].qty .. "</div></div>"
out = out .. "<div class='cc-infobox-ship-stats-fullrow'>"
out = out .. "<div>" .. suppliesIcon .. "</div><div>" .. stats_base[3].qty .. "</div></div>"
-- COMBAT STATS
local gunIcon = GenericIcon.just_icon({
args = {"Guns", size = "sm"}
})
local boardingIcon = GenericIcon.just_icon({
args = {"Boarding Damage", size = "sm"}
})
local speedIcon = GenericIcon.just_icon({
args = {"Speed", size = "sm"}
})
local manoeuvrabilityIcon = GenericIcon.just_icon({
args = {"Manoeuvrability", size = "sm"}
})
local armourIcon = GenericIcon.just_icon({
args = {"Armour", size = "sm"}
})
out = out .. "<div class='cc-infobox-ship-stats-rowofstats'>"
out = out .. "<div class='cc-infobox-ship-stats-row-col'>"
out = out .. "<div>Base</div>"
out = out .. "<div class='cc-ship-stat-max'>Max</div></div>"
out = out .. "<div class='cc-infobox-ship-stats-row-col'>"
out = out .. "<div>" .. gunIcon .. "</div><div>" .. stats_base[4].qty .. "</div></div>"
out = out .. "<div class='cc-infobox-ship-stats-row-col'>"
out = out .. "<div>" .. boardingIcon .. "</div><div>" .. stats_base[5].qty .. "</div></div>"
out = out .. "<div class='cc-infobox-ship-stats-row-col'>"
out = out .. "<div>" .. speedIcon .. "</div><div>" .. stats_base[6].qty .. "</div></div>"
out = out .. "<div class='cc-infobox-ship-stats-row-col'>"
out = out .. "<div>" .. manoeuvrabilityIcon .. "</div><div>" .. stats_base[7].qty .. "</div></div>"
out = out .. "<div class='cc-infobox-ship-stats-row-col'>"
out = out .. "<div>" .. armourIcon .. "</div><div>" .. stats_base[8].qty .. "</div></div>"
out = out .. "</div>"
-- CREW
out = out .. "<div class='cc-infobox-ship-crew'>"
out = out .. "<div class='cc-infobox-ship-crew-title'>Crew</div><hr>"
-- CREW ITERATION
for _, entry in ipairs(crew_types) do
local pirate_name = string.gsub(entry.type, "'", "")
local pirate_qty = entry.qty
local pirate_icon = frame:preprocess(
"{{Pirate icon|" .. pirate_name .. "|size=md}}")
out = out .. "<div class='cc-infobox-ship-crew-row'>"
out = out .. "<div class='cc-infobox-ship-crew-row-col'>"
out = out .. "<div>" .. pirate_name .. "</div>"
if pirate_name ~= "Swabbies" then
out = out .. "<div class='cc-infobox-ship-crew-row-col-advanced'>"
end
out = out .. "<div>" .. pirate_icon .. "</div>"
out = out .. "<div>" .. pirate_qty .. "</div>"
out = out .. "</div></div>"
end
out = out .. "</div>"
-- CONSTRUCTION
local pier_name = titleCase(pier)
local pier_icon = "T Button SelectionBorder Default.png"
if buildingData[pier_name] then
pier_icon = buildingData[pier_name].building_icon_filename or pier_icon
end
out = out .. "<div class='cc-infobox-ship-construction'>"
out = out .. "<div class='cc-infobox-ship-construction-title'>Construction</div><hr>"
out = out .. "<div class='cc-infobox-ship-construction-pier'>"
out = out .. "[[File:" .. pier_icon .. "|x32px|" .. pier_name .. "]] [[" .. pier_name .. "]]</div>"
out = out .. "<div class='cc-infobox-ship-construction-table'>\n{|\n"
for i, entry in ipairs(construction_costs) do
local resource = titleCase(entry.resource)
local resource_qty = entry.qty
local resource_icon = "T Button SelectionBorder Default.png"
if resourceData[resource] then
resource_icon = resourceData[resource].icon_file or resource_icon
end
if i == 5 then
out = out .. "{|\n"
end
out = out .. "|class='cc-infobox-ship-construction-qty'| <span>" .. resource_qty .. "</span> "
out = out .. "|| <span>[[File:" .. resource_icon .. "|x32px"
out = out .. "|link=" .. resource .. "|" .. resource .. "]]</span> "
out = out .. "||<span>" .. resource .. "</span>\n"
out = out .. "|style='min-width: 32px;'| \n"
if i == 2 then
out = out .. "|-\n"
end
if i == 4 or i == 5 then
out = out .. "|}\n"
end
end
-- UNLOCK
local tier_table = {
[2] = 3,
[3] = 7,
[4] = 12,
[5] = 20,
[6] = 30,
}
out = out .. "<div class='cc-infobox-ship-unlock'>"
out = out .. "<div class='cc-infobox-ship-unlock-title'>Unlock</div><hr>"
out = out .. "<div class='cc-infobox-ship-unlock-requirements'>"
out = out .. "<div>Spend points:</div>"
out = out .. "<div class='cc-infobox-ship-unlock-requirements-points'>"
if principle_name == "Wealth" then
out = out .. "<div class='cc-infobox-ship-unlock-requirements-points-wealth'>"
out = out .. "[[File:T_ICO_VEC_P_Wealth.png|x24px|link=Wealth|Wealth]]"
end
if principle_name == "Notoriety" then
out = out .. "<div class='cc-infobox-ship-unlock-requirements-points-notoriety'>"
out = out .. "[[File:T_ICO_VEC_P_Notoriety1.png|x24px|link=Notoriety|Notoriety]]"
end
if principle_name == "Empire" then
out = out .. "<div class='cc-infobox-ship-unlock-requirements-points-empire'>"
out = out .. "[[File:T_ICO_VEC_P_Empire2.png|x24px|link=Empire|Empire]]"
end
if principle_name == "Seafaring" then
out = out .. "<div class='cc-infobox-ship-unlock-requirements-points-seafaring'>"
out = out .. "[[File:T_ICO_VEC_P_Sea.png|x24px|link=Seafaring|Seafaring]]"
end
out = out .. "<span>" .. tier_table[tonumber(tier)] .. "</span></div>"
if hybrid_name == "Wealth" then
out = out .. "<div class='cc-infobox-ship-unlock-requirements-points-wealth'>"
out = out .. "[[File:T_ICO_VEC_P_Wealth.png|x24px|link=Wealth|Wealth]]"
end
if hybrid_name == "Notoriety" then
out = out .. "<div class='cc-infobox-ship-unlock-requirements-points-notoriety'>"
out = out .. "[[File:T_ICO_VEC_P_Notoriety1.png|x24px|link=Notoriety|Notoriety]]"
end
if hybrid_name == "Empire" then
out = out .. "<div class='cc-infobox-ship-unlock-requirements-points-empire'>"
out = out .. "[[File:T_ICO_VEC_P_Empire2.png|x24px|link=Empire|Empire]]"
end
if hybrid_name == "Seafaring" then
out = out .. "<div class='cc-infobox-ship-unlock-requirements-points-seafaring'>"
out = out .. "[[File:T_ICO_VEC_P_Sea.png|x24px|link=Seafaring|Seafaring]]"
end
if hybrid_name ~= "None" then
out = out .. "<span>" .. tier_table[tonumber(tier)] .. "</span></div>"
end
out = out .. "</div></div></div>"
-- END
out = out .. "</div>"
return out
end
return p


