Line 1: |
Line 1: |
| local BaseTable = require('Module:BaseTable') | | local BaseTable = require('Module:BaseTable') |
| local Ship = require('Module:Ship') | | local Ship = require('Module:Ship') |
| + | local ShipBattleCardKai = require('Module:ShipBattleCardKai') |
| local ShipCardKai = require('Module:ShipCardKai') | | local ShipCardKai = require('Module:ShipCardKai') |
| local Equipment = require('Module:Equipment') | | local Equipment = require('Module:Equipment') |
| local Formatting = require('Module:Formatting') | | local Formatting = require('Module:Formatting') |
− | local format = require('Module:StringInterpolation').format | + | local format = require('Module:Core').format |
| | | |
| local NanaminFleet = BaseTable({ | | local NanaminFleet = BaseTable({ |
| _item_class = Ship, | | _item_class = Ship, |
| _equip_class = Equipment, | | _equip_class = Equipment, |
− | _equip_bg = "whitesmoke", | + | _equip_icon_bg = "#8DCDEE", |
| + | _equip_bg = "#E4F3FB", |
| + | _equip_locked_bg = "#CDDBE2", |
| + | _extra_cells_bg = "#98D2F0", |
| + | _table_start = [[{|]], |
| _header_template = nil, | | _header_template = nil, |
− | _calculated_cell_template = [[| colspan="4" style="background: whitesmoke;" |Effective Line of Sight: ${elos} / Fighter Power: ${fighter_power}]], | + | _calculated_cell_template = [[| colspan="6" style="background: ${bg_color}; text-align: center; font-weight: bold;" |Effective Line of Sight: ${elos} // Fighter Power: ${fighter_power}]], |
| + | _added_cell_template = [[| colspan="6" style="background: ${bg_color}; text-align: center; font-weight: bold;" |${content}]], |
| _column_cell_templates = { | | _column_cell_templates = { |
− | ship = [[| rowspan="4" style="background: transparent;" |${values.ship_card}]], | + | ship = [[| rowspan="4" style="background: white;" |${values.ship_card}]], |
− | equips = [[| style="background: whitesmoke; width: 15px;" |${values.equip_icon} | + | equips = [[| style="background: ${values.icon_bg_color}; width: 15px;" |${values.equip_icon} |
− | | style="background: whitesmoke; width: 175px; font-size: 5px; text-align: center;" |${values.equip_link}]], | + | | style="background: ${values.equip_bg_color}; width: 175px;text-align: center;" |${values.equip_link}]], |
− | ship2 = [[| rowspan="4" style="background: transparent;" |${values.ship_card}]], | + | ship2 = [[| rowspan="4" style="background: white;" |${values.ship_card}]], |
− | equips2 = [[| style="background: whitesmoke; width: 15px;" |${values.equip_icon} | + | equips2 = [[| style="background: ${values.icon_bg_color}; width: 15px;" |${values.equip_icon} |
− | | style="background: whitesmoke; width: 175px; font-size: 5px; text-align: center;" |${values.equip_link}]] | + | | style="background: ${values.equip_bg_color}; width: 175px; text-align: center;" |${values.equip_link}]] |
| }, | | }, |
| _columns = { | | _columns = { |
Line 28: |
Line 34: |
| _blank = "Empty_ship_slot.png", | | _blank = "Empty_ship_slot.png", |
| _default_size = "120x165px", | | _default_size = "120x165px", |
| + | _route = "", |
| _elos = 0, | | _elos = 0, |
− | _fighter_power = 0 | + | _fighter_power = 0, |
| + | _hq_lvl = 0 |
| }) | | }) |
| | | |
| function NanaminFleet:create_table_prep() | | function NanaminFleet:create_table_prep() |
| self._size = self._args.image_size or self._default_size | | self._size = self._args.image_size or self._default_size |
| + | |
| + | self._hq_lvl = tonumber(self._args["!hq"]) |
| + | |
| + | --Get bracket of 5 |
| + | self._hq_lvl = self._hq_lvl - (self._hq_lvl % 5) + 5 |
| + | if self._hq_lvl % 5 == 0 then |
| + | self._hq_lvl = self._hq_lvl + 5 |
| + | end |
| + | |
| + | self._route = self._args["!route"] |
| end | | end |
| | | |
Line 43: |
Line 61: |
| value = Formatting:format_image{self._blank, size = self._size} | | value = Formatting:format_image{self._blank, size = self._size} |
| else | | else |
− | value = ShipCardKai:card{ship = row[1], size = self._size, link = row[1]:link(), caption = row[1]:name()} | + | value = ShipCardKai:get{ship = row[1], size = self._size, link = row[1]:link(), caption = row[1]:name()} |
| end | | end |
| return {values = {ship_card = value}, bg_color = self._transparent, text_align = self._center_align} | | return {values = {ship_card = value}, bg_color = self._transparent, text_align = self._center_align} |
Line 54: |
Line 72: |
| | | |
| function NanaminFleet:equips(row) | | function NanaminFleet:equips(row) |
− | local value, icon | + | local value, icon, equip_bg_color |
| if row[2] == false then | | if row[2] == false then |
| value = "- Unequipped -" | | value = "- Unequipped -" |
| icon = "" | | icon = "" |
| + | equip_bg_color = self._equip_bg |
| + | elseif row[2] == "locked" then |
| + | value = "- Locked -" |
| + | icon = "" |
| + | equip_bg_color = self._equip_locked_bg |
| else | | else |
| value = Formatting:format_link(row[2]:link()) | | value = Formatting:format_link(row[2]:link()) |
| icon = Formatting:format_image{Formatting:format_equipment_icon(row[2]:icon()), size = "22x22px"} | | icon = Formatting:format_image{Formatting:format_equipment_icon(row[2]:icon()), size = "22x22px"} |
| + | equip_bg_color = self._equip_bg |
| end | | end |
− | return {values = {equip_link = value, equip_icon = icon}, bg_color = self._equip_bg, text_align = self._center_align} | + | return {values = {equip_link = value, equip_icon = icon, icon_bg_color = self._equip_icon_bg, equip_bg_color = equip_bg_color}, bg_color = self._equip_bg, text_align = self._center_align} |
| end | | end |
| | | |
Line 75: |
Line 99: |
| return item_key | | return item_key |
| else | | else |
− | ship_name = mw.ustring.sub(item_key, 1, split - 1) | + | local ship_name = mw.ustring.sub(item_key, 1, split - 1) |
− | ship_suffix = mw.ustring.sub(item_key, split + 1, -1) | + | local ship_suffix_and_los = mw.ustring.sub(item_key, split + 1, -1) |
| + | local ship_suffix = mw.ustring.sub(ship_suffix_and_los, 1, mw.ustring.find(ship_suffix_and_los, '/') - 1) |
| if ship_suffix == "Regular" then | | if ship_suffix == "Regular" then |
| ship_suffix = nil | | ship_suffix = nil |
Line 87: |
Line 112: |
| local row1, row2, row3, row4 = {}, {}, {}, {} | | local row1, row2, row3, row4 = {}, {}, {}, {} |
| local ship_item1, ship_item2 | | local ship_item1, ship_item2 |
| + | |
| for index, item_key in ipairs(self._args) do | | for index, item_key in ipairs(self._args) do |
| local item | | local item |
Line 92: |
Line 118: |
| if item_key == "-" then | | if item_key == "-" then |
| item = false | | item = false |
| + | elseif item_key == "!-" then |
| + | item = "locked" |
| else | | else |
| if mw.ustring.find(item_key, '/') then | | if mw.ustring.find(item_key, '/') then |
| item = self._item_class(self:process_item_key(item_key)) | | item = self._item_class(self:process_item_key(item_key)) |
| + | |
| if ship_item1 == nil then | | if ship_item1 == nil then |
| ship_item1 = item | | ship_item1 = item |
Line 100: |
Line 129: |
| ship_item2 = item | | ship_item2 = item |
| end | | end |
| + | |
| + | local los = mw.ustring.sub(item_key, mw.ustring.find(item_key, '/') + 1) |
| + | los = tonumber(mw.ustring.sub(los, mw.ustring.find(los, '/') + 1)) |
| + | self._elos = self._elos + math.sqrt(los) * 1.69 |
| else | | else |
| item = self._equip_class(self:process_item_key(item_key)) | | item = self._equip_class(self:process_item_key(item_key)) |
Line 107: |
Line 140: |
| + Carrier-based Recon Plane LoS x (1.66) + Recon Seaplane LoS x (2.00) | | + Carrier-based Recon Plane LoS x (1.66) + Recon Seaplane LoS x (2.00) |
| + Seaplane Bomber LoS x (1.78) + Small Radar LoS x (1.00) + Large Radar LoS x (0.99) | | + Seaplane Bomber LoS x (1.78) + Small Radar LoS x (1.00) + Large Radar LoS x (0.99) |
− | + Searchlight LoS x (0.91) + √(base LoS of each ship) x (1.69) | + | + Searchlight LoS x (0.91) + √(base LoS of each ship) * (1.69) |
| + (HQ Lv. rounded up to the next multiple of 5) x (-0.61)--]] | | + (HQ Lv. rounded up to the next multiple of 5) x (-0.61)--]] |
− | local ship | + | --HQ level portion done just before insertion into table |
| + | local ship = {} |
| if (index - 1) % 10 < 5 then | | if (index - 1) % 10 < 5 then |
| ship = ship_item1 | | ship = ship_item1 |
Line 126: |
Line 160: |
| [29] = 0.91 | | [29] = 0.91 |
| } | | } |
− | if multiplier[item:type()] ~= nil then | + | if multiplier[item:type()] ~= nil and item:los() then |
| self._elos = self._elos + (item:los() * multiplier[item:type()]) | | self._elos = self._elos + (item:los() * multiplier[item:type()]) |
| end | | end |
− | self._fighter_power = self._fighter_power + math.floor(math.sqrt(select(2, ship:slot(slot_number)))) | + | if item:type() == 6 or item:type() == 7 or item:type() == 8 or item:type() == 11 then |
| + | if ship:slot(slot_number) and item:aa() then |
| + | mw.log("Adding " .. tostring(item:aa()) .. " from " .. ship:name() .. ", slot " .. tostring(slot_number)) |
| + | self._fighter_power = self._fighter_power + math.floor(math.sqrt(select(2, ship:slot(slot_number))) * item:aa()) |
| + | end |
| + | end |
| end | | end |
| end | | end |
Line 153: |
Line 192: |
| table.insert(self._items, row4) | | table.insert(self._items, row4) |
| row1, row2, row3, row4 = {}, {}, {}, {} | | row1, row2, row3, row4 = {}, {}, {}, {} |
| + | ship_item1 = nil |
| end | | end |
| end | | end |
− | table.insert(self._items, "extra")
| |
| end | | end |
| | | |
Line 163: |
Line 202: |
| local row_values = {} | | local row_values = {} |
| for _, column in ipairs(self._columns) do | | for _, column in ipairs(self._columns) do |
− | local value = self[column](self, item) | + | if type(item) == "string" then |
− | if value then
| + | row_values = item |
− | row_values[column] = value
| + | else |
− | row_values[column].rowspan = item.class ~= nil and 4 or 1 | + | local value = self[column](self, item) |
− | row_values[column].colspan = 1
| + | if value then |
| + | row_values[column] = value |
| + | end |
| end | | end |
| end | | end |
Line 176: |
Line 217: |
| function NanaminFleet:build_rows() | | function NanaminFleet:build_rows() |
| for index, row_values in ipairs(self._data_rows) do | | for index, row_values in ipairs(self._data_rows) do |
− | if row_values ~= "break" and row_values ~= "extra" then | + | if row_values ~= "break" then |
| table.insert(self._rows, self._row_starter) | | table.insert(self._rows, self._row_starter) |
| if row_values == "header" then | | if row_values == "header" then |
Line 186: |
Line 227: |
| end | | end |
| end | | end |
− | else
| |
− | table.insert(self._rows,
| |
− | format{self._cell,
| |
− | colspan = #self._columns, rowspan = 1,
| |
− | text_align = self._args[self._custom_row_prefix .. row_values .. self._text_align_suffix] or self._start_align,
| |
− | bg_color = self._args[self._custom_row_prefix .. row_values .. self._bg_color_suffix] or self._transparent,
| |
− | values = {
| |
− | value = self._args[self._custom_row_prefix .. row_values .. self._content_suffix] or "",
| |
− | },
| |
− | }
| |
− | )
| |
| end | | end |
− | elseif row_values == "extra" then
| |
− | table.insert(self._rows, format{self._calculated_cell_template,
| |
− | elos = self._elos,
| |
− | fighter_power = self._fighter_power
| |
− | })
| |
| end | | end |
− | end
| + | end |
| + | --Anything that's added after the table ends |
| + | table.insert(self._rows, self._row_starter) |
| + | table.insert(self._rows, format{self._calculated_cell_template, |
| + | elos = string.format("%.2f", self._elos - (self._hq_lvl * 0.61)), |
| + | fighter_power = self._fighter_power, |
| + | bg_color = self._extra_cells_bg, |
| + | }) |
| + | table.insert(self._rows, self._row_starter) |
| + | table.insert(self._rows, format{self._added_cell_template, |
| + | content = "Route Taken: " .. self._route, |
| + | bg_color = self._extra_cells_bg, |
| + | }) |
| + | if self._args["!difficulty"] then |
| + | table.insert(self._rows, self._row_starter) |
| + | table.insert(self._rows, format{self._added_cell_template, |
| + | content = "Difficulty Chosen: " .. self._args["!difficulty"], |
| + | bg_color = self._extra_cells_bg, |
| + | }) |
| + | end |
| + | if self._args["!drops"] then |
| + | table.insert(self._rows, self._row_starter) |
| + | --Drops will be a bunch of ship names separated by / |
| + | local drops_str = self._args["!drops"] |
| + | local drops = {} |
| + | while mw.ustring.find(drops_str, '/') do |
| + | local split = mw.ustring.find(drops_str, '/') |
| + | local ship = Ship(mw.ustring.sub(drops_str, 1, split - 1), "") |
| + | local battle_card = ShipBattleCardKai:get{ship = ship, link = ship:link(), caption = ship:name()} |
| + | table.insert(drops, battle_card) |
| + | drops_str = mw.ustring.sub(drops_str, split + 1) |
| + | end |
| + | local ship = Ship(drops_str, "") |
| + | local battle_card = ShipBattleCardKai:get{ship = ship, link = ship:link(), caption = ship:name()} |
| + | table.insert(drops, battle_card) |
| + | |
| + | local content = "Notable Drops<br />" |
| + | for i = 1, #drops do |
| + | content = content .. drops[i] .. " " |
| + | if i % 4 == 0 then |
| + | content = mw.ustring.sub(content, 1, -2) |
| + | content = content .. "<br />" |
| + | end |
| + | end |
| + | table.insert(self._rows, format{self._added_cell_template, |
| + | content = content, |
| + | bg_color = self._extra_cells_bg, |
| + | }) |
| + | end |
| end | | end |
| | | |
| return NanaminFleet | | return NanaminFleet |