Line 5: |
Line 5: |
| local Formatting = require('Module:Formatting') | | local Formatting = require('Module:Formatting') |
| local ShipBattleCardKai = require("Module:ShipBattleCardKai") | | local ShipBattleCardKai = require("Module:ShipBattleCardKai") |
− | | + | |
| local NodeInfo = BaseTable({ | | local NodeInfo = BaseTable({ |
| _item_class = EnemyShip, | | _item_class = EnemyShip, |
Line 11: |
Line 11: |
| _header_template = [[!# | | _header_template = [[!# |
| !Formation | | !Formation |
| + | !Base EXP |
| !${node_type} | | !${node_type} |
| !AD/AP<br>AS/AS+]], | | !AD/AP<br>AS/AS+]], |
Line 18: |
Line 19: |
| node = [[| colspan="${colspan}" rowspan="${rowspan}" style="text-align: center; color: ${color}; background-color: ${bg_color};" |${values.node}]], | | node = [[| colspan="${colspan}" rowspan="${rowspan}" style="text-align: center; color: ${color}; background-color: ${bg_color};" |${values.node}]], |
| formation = [[| style="text-align: center; background-color: ${bg_color}; color: ${color};" |${values.formation}]], | | formation = [[| style="text-align: center; background-color: ${bg_color}; color: ${color};" |${values.formation}]], |
− | fleet = [[| style="width: 490px; background-color: ${bg_color};" |${values.fleet}]], | + | basexp = [[| style="text-align: center; background-color: ${bg_color}; color: ${color};" |${values.basexp}]], |
| + | fleet = [[| style="width: 490px; background-color: ${bg_color};" |${values.fleet}]], |
| as = [[| style="text-align: center; background-color: ${bg_color}; color: ${color};" |${values.as}]], | | as = [[| style="text-align: center; background-color: ${bg_color}; color: ${color};" |${values.as}]], |
| }, | | }, |
Line 33: |
Line 35: |
| "node", | | "node", |
| "formation", | | "formation", |
| + | "basexp", |
| "fleet", | | "fleet", |
| "as", | | "as", |
Line 48: |
Line 51: |
| _maelstrom_node_bg_color = "initial", | | _maelstrom_node_bg_color = "initial", |
| }) | | }) |
− | | + | |
| function NodeInfo:node(row) | | function NodeInfo:node(row) |
| local color, bg_color = "initial", "initial" | | local color, bg_color = "initial", "initial" |
Line 74: |
Line 77: |
| return { values = { node = Formatting:japanese_text(row.node) }, color = color, bg_color = bg_color } | | return { values = { node = Formatting:japanese_text(row.node) }, color = color, bg_color = bg_color } |
| end | | end |
− | | + | |
| function NodeInfo:formation(row) | | function NodeInfo:formation(row) |
| if row.tags.final then | | if row.tags.final then |
Line 86: |
Line 89: |
| end | | end |
| | | |
| + | function NodeInfo:basexp(row) |
| + | return { values = { basexp = row.basexp } } |
| + | end |
| + | |
| function NodeInfo:fleet(row) | | function NodeInfo:fleet(row) |
| return { values = { fleet = row.fleet } } | | return { values = { fleet = row.fleet } } |
| end | | end |
− | | + | |
| function NodeInfo:as(row) | | function NodeInfo:as(row) |
| color = "initial" | | color = "initial" |
Line 97: |
Line 104: |
| return { values = { as = row.as }, color = color } | | return { values = { as = row.as }, color = color } |
| end | | end |
− | | + | |
| function NodeInfo:upcase(str) | | function NodeInfo:upcase(str) |
| str = str:gsub("(%s)(%l)", function(a, b) return a .. string.upper(b) end) | | str = str:gsub("(%s)(%l)", function(a, b) return a .. string.upper(b) end) |
Line 103: |
Line 110: |
| return str | | return str |
| end | | end |
− | | + | |
− | function NodeInfo:insert_item(node, formation, fleet, as, tags, as_complete) | + | function NodeInfo:insert_item(node, formation, basexp, fleet, as, tags, as_complete) |
| --[=[ | | --[=[ |
| -- Can give weird results when major contributors to air power are unknown | | -- Can give weird results when major contributors to air power are unknown |
Line 132: |
Line 139: |
| node = node, | | node = node, |
| formation = formation, | | formation = formation, |
| + | basexp = basexp, |
| fleet = fleet, | | fleet = fleet, |
| as = air_string, | | as = air_string, |
Line 137: |
Line 145: |
| }) | | }) |
| end | | end |
− | | + | |
| function NodeInfo:create_items() | | function NodeInfo:create_items() |
| --Modes are as follows: | | --Modes are as follows: |
Line 145: |
Line 153: |
| --4 = Amount of resources | | --4 = Amount of resources |
| --5 = Formation | | --5 = Formation |
− | --6 = Fleet building | + | --6 = Base node exp |
| + | --7 = Fleet building |
| local mode = 1 | | local mode = 1 |
− |
| + | |
− | local node, formation = nil, nil | + | local node, formation, basexp = nil, nil, 0 |
| local fleet = {} | | local fleet = {} |
| local as_rating, as_complete = 0, true | | local as_rating, as_complete = 0, true |
− |
| + | |
| local tags = {} | | local tags = {} |
| local resource | | local resource |
| for index, item_key in ipairs(self._args) do | | for index, item_key in ipairs(self._args) do |
| if item_key == "-" then | | if item_key == "-" then |
− | if mode == 6 then --We're at a break and have built a full row; time to insert it | + | if mode == 7 then --We're at a break and have built a full row; time to insert it |
− | self:insert_item(node, formation, table.concat(fleet, " "), as_rating, tags, as_complete) | + | self:insert_item(node, formation, basexp, table.concat(fleet, " "), as_rating, tags, as_complete) |
| end | | end |
− |
| + | |
| table.insert(self._items, "break") | | table.insert(self._items, "break") |
− |
| + | |
| fleet, as_rating, as_complete = {}, 0, true | | fleet, as_rating, as_complete = {}, 0, true |
| tags = {} | | tags = {} |
Line 211: |
Line 220: |
| mode = 6 | | mode = 6 |
| else | | else |
− | --Fleets are of variable size, so we append onto a string until we hit the next node declaration
| + | if mode == 6 and tonumber(item_key) then |
− | local split = mw.ustring.find(item_key, '/')
| + | basexp = item_key |
− | local ship_name, ship_suffix
| + | else |
− | if split then
| + | --Fleets are of variable size, so we append onto a string until we hit the next node declaration |
− | ship_name = mw.ustring.sub(item_key, 1, split - 1)
| + | local split = mw.ustring.find(item_key, '/') |
− | ship_suffix = mw.ustring.sub(item_key, split + 1)
| + | local ship_name, ship_suffix |
− | else
| + | if split then |
− | ship_name = item_key
| + | ship_name = mw.ustring.sub(item_key, 1, split - 1) |
− | ship_suffix = ""
| + | ship_suffix = mw.ustring.sub(item_key, split + 1) |
− | end
| + | else |
| + | ship_name = item_key |
| + | ship_suffix = "" |
| + | end |
| | | |
− | local ship = EnemyShip(ship_name, ship_suffix)
| + | local ship = EnemyShip(ship_name, ship_suffix) |
− | local ship_air_power = ship:air_power(tags.raid)
| + | local ship_air_power = ship:air_power(tags.raid) |
| | | |
− | local ship_caption =
| + | local ship_caption = |
− | (ship:name() or "?")
| + | (ship:name() or "?") |
− | .. " (" .. Formatting:format_enemy_stat(ship:api_id()) .. "): "
| + | .. " (" .. Formatting:format_enemy_stat(ship:api_id()) .. "): " |
− | .. (ship:armor() or "?") .. " Armor, " .. (ship:hp() or "?") .. " HP"
| + | .. (ship:armor() or "?") .. " Armor, " .. (ship:hp() or "?") .. " HP" |
− | .. (ship_air_power ~= 0 and ", " .. (ship_air_power or "?") .. " AP" or "")
| + | .. (ship_air_power ~= 0 and ", " .. (ship_air_power or "?") .. " AP" or "") |
| | | |
− | table.insert(fleet, ShipBattleCardKai:get{
| + | table.insert(fleet, ShipBattleCardKai:get{ |
− | ship = ship,
| + | ship = ship, |
− | caption = ship_caption,
| + | caption = ship_caption, |
− | link = ship:link(),
| + | link = ship:link(), |
− | flagship = #fleet == 0
| + | flagship = #fleet == 0 |
− | })
| + | }) |
| | | |
− | if ship_air_power then
| + | if ship_air_power then |
− | as_rating = as_rating + ship_air_power
| + | as_rating = as_rating + ship_air_power |
− | else
| + | else |
− | as_complete = false
| + | as_complete = false |
− | end
| + | end |
| + | if mode == 6 then |
| + | -- only check for the base node experience once |
| + | mode = 7 |
| + | end |
| + | end |
| end | | end |
| end | | end |
| end | | end |
− | if mode == 6 then | + | if mode == 7 then |
− | self:insert_item(node, formation, table.concat(fleet, " "), as_rating, tags, as_complete) | + | self:insert_item(node, formation, basexp, table.concat(fleet, " "), as_rating, tags, as_complete) |
| end | | end |
| end | | end |
− | | + | |
| function NodeInfo:create_data_rows() | | function NodeInfo:create_data_rows() |
| for index, item in ipairs(self._items) do | | for index, item in ipairs(self._items) do |
Line 289: |
Line 306: |
| end | | end |
| end | | end |
− | | + | |
| function NodeInfo:format_node_type() | | function NodeInfo:format_node_type() |
| local node_types = { | | local node_types = { |
Line 306: |
Line 323: |
| return self._args["comment"] or node_types[self._node_type] or "Fleet" | | return self._args["comment"] or node_types[self._node_type] or "Fleet" |
| end | | end |
− | | + | |
| function NodeInfo:is_simple_node_type() | | function NodeInfo:is_simple_node_type() |
| return self._node_type == 'resource' or self._node_type == 'storm' or self._node_type == 'empty' or self._node_type == 'select' | | return self._node_type == 'resource' or self._node_type == 'storm' or self._node_type == 'empty' or self._node_type == 'select' |
| end | | end |
− | | + | |
| function NodeInfo:create_header() | | function NodeInfo:create_header() |
| local header_string = format{ | | local header_string = format{ |
Line 319: |
Line 336: |
| self._header_bottom = header_string | | self._header_bottom = header_string |
| end | | end |
− | | + | |
| function NodeInfo:start_rows() | | function NodeInfo:start_rows() |
| self._rows = {} | | self._rows = {} |
− |
| + | |
| if self._args["toggle_id"] then | | if self._args["toggle_id"] then |
| table.insert(self._rows, format{self._collapser_template, | | table.insert(self._rows, format{self._collapser_template, |
Line 329: |
Line 346: |
| }) | | }) |
| end | | end |
− |
| + | |
| table.insert(self._rows, self._table_start) | | table.insert(self._rows, self._table_start) |
| table.insert(self._rows, self._header) | | table.insert(self._rows, self._header) |
| end | | end |
− | | + | |
| function NodeInfo:process_resource_node(resource, amount) | | function NodeInfo:process_resource_node(resource, amount) |
| --Amount may or may not be just numbers | | --Amount may or may not be just numbers |
| local action, units, node_type, bg_color = "Gained", "", "Resource", self._resource_node_bg_color | | local action, units, node_type, bg_color = "Gained", "", "Resource", self._resource_node_bg_color |
− |
| + | |
| if mw.ustring.sub(amount, 1, 1) == "-" then | | if mw.ustring.sub(amount, 1, 1) == "-" then |
| action = "Lost" | | action = "Lost" |
Line 344: |
Line 361: |
| bg_color = self._maelstrom_node_bg_color | | bg_color = self._maelstrom_node_bg_color |
| end | | end |
− |
| + | |
| if mw.ustring.find(amount, " ") then | | if mw.ustring.find(amount, " ") then |
| local split = mw.ustring.find(amount, " ") | | local split = mw.ustring.find(amount, " ") |
Line 350: |
Line 367: |
| amount = mw.ustring.sub(amount, 1, split - 1) | | amount = mw.ustring.sub(amount, 1, split - 1) |
| end | | end |
− |
| + | |
| local text = action .. " " .. amount .. " " .. resource .. " " .. units | | local text = action .. " " .. amount .. " " .. resource .. " " .. units |
| return text, node_type, bg_color | | return text, node_type, bg_color |
| end | | end |
− | | + | |
| function NodeInfo:build_rows() | | function NodeInfo:build_rows() |
| local bg_color | | local bg_color |
Line 409: |
Line 426: |
| end | | end |
| end | | end |
− | | + | |
| function NodeInfo:finish_rows() | | function NodeInfo:finish_rows() |
| table.insert(self._rows, self._row_starter) | | table.insert(self._rows, self._row_starter) |
Line 418: |
Line 435: |
| end | | end |
| end | | end |
− | | + | |
| U.registerTableTests(NodeInfo, { | | U.registerTableTests(NodeInfo, { |
| { "A", "Boss", "Line Ahead", "Northern Princess" } | | { "A", "Boss", "Line Ahead", "Northern Princess" } |
| }) | | }) |
| -- p.run_table_tests() | | -- p.run_table_tests() |
− | | + | |
| return NodeInfo | | return NodeInfo |