• Welcome to the Kancolle Wiki!
  • If you have any questions regarding site content, account registration, etc., please visit the KanColle Wiki Discord

Changes

Jump to navigation Jump to search
Misc cleanup, slightly change basexp syntax
Line 23: Line 23:  
         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}]],
+
        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}]],
 
     },
 
     },
_column_cell_templates_basexp = {
+
    _column_cell_templates_basexp = {
 
         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}]],
         basexp = [[| style="text-align: center; background-color: ${bg_color}; color: ${color};" |${values.basexp}]],
+
         basexp = [[| style="text-align: center; background-color: ${bg_color}; color: ${color};" |${values.basexp}]],  
fleet = [[| style="width: 490px; background-color: ${bg_color};" |${values.fleet}]],
+
        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 48: Line 48:  
         "as",
 
         "as",
 
     },
 
     },
_columns_basexp = {
+
    _columns_basexp = {
 
         "node",
 
         "node",
 
         "formation",
 
         "formation",
"basexp",
+
    "basexp",
 
         "fleet",
 
         "fleet",
 
         "as",
 
         "as",
Line 110: Line 110:  
         color = self._boss_battle_color
 
         color = self._boss_battle_color
 
     end
 
     end
return { values = { basexp = row.basexp }, color = color }
+
    return { values = { basexp = row.basexp }, color = color }
 
end
 
end
 
   
 
   
Line 183: Line 183:  
     --4 = Amount of resources
 
     --4 = Amount of resources
 
     --5 = Formation
 
     --5 = Formation
--6 = Base node exp
+
    --6 = Base node exp
 
     --7 = Fleet building
 
     --7 = Fleet building
 
     local mode = 1
 
     local mode = 1
Line 193: Line 193:  
     local tags = {}
 
     local tags = {}
 
     local resource
 
     local resource
self._is_basexp = false
   
 
 
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 == 7 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, basexp, 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 = {}
+
            mode = 1
mode = 1
   
else
 
else
if mode == 1 then
+
    if mode == 1 then
    --First item should always be the node
+
        --First item should always be the node
    node = item_key
+
        node = item_key
    mode = 2
+
        mode = 2
elseif mode == 2 then
+
    elseif mode == 2 then
-- underscores should be exclusive to modifier specification during mode 2
+
        self._node_type = string.lower(string.match(item_key, "(.-)/") or item_key)
if mw.ustring.find(item_key, '_') then
+
        if mw.ustring.find(string.lower(item_key), "resource") or string.lower(item_key) == "storm" then
-- capture modifiers here, then trim them off the node type
+
            local split = mw.ustring.find(item_key, '/')
if mw.ustring.find(item_key, 'BaseEXP') then
+
            if split then
self._is_basexp = true
+
                tags[string.lower(mw.ustring.sub(item_key, 1, split - 1))] = true
end
+
                item_key = mw.ustring.sub(item_key, split + 1)
local nodetypesolo = mw.ustring.sub(item_key, 1, mw.ustring.find(item_key, '_') - 1)
+
            end
self._node_type = string.lower(string.match(nodetypesolo, "(.-)/") or nodetypesolo)
+
            tags[string.lower(item_key)] = true
item_key = nodetypesolo;
+
            mode = 3
else
+
        elseif string.lower(item_key) == "empty" then
self._node_type = string.lower(string.match(item_key, "(.-)/") or item_key)
+
            table.insert(self._items, node .. "/empty")
end
+
            mode = 1
    if mw.ustring.find(string.lower(item_key), "resource") or string.lower(item_key) == "storm" then
+
        elseif string.lower(item_key) == "select" then
        local split = mw.ustring.find(item_key, '/')
+
            table.insert(self._items, node .. "/select")
        if split then
+
            mode = 1
            tags[string.lower(mw.ustring.sub(item_key, 1, split - 1))] = true
+
        else
            item_key = mw.ustring.sub(item_key, split + 1)
+
            while mw.ustring.find(item_key, '/') do
        end
+
                local split = mw.ustring.find(item_key, '/')
        tags[string.lower(item_key)] = true
+
                tags[string.lower(mw.ustring.sub(item_key, 1, split - 1))] = true
        mode = 3
+
                item_key = mw.ustring.sub(item_key, split + 1)
    elseif string.lower(item_key) == "empty" then
+
            end
        table.insert(self._items, node .. "/empty")
+
            tags[string.lower(item_key)] = true
        mode = 1
+
            if tags.basexp then
    elseif string.lower(item_key) == "select" then
+
                -- used to communicate the need to account for node xp while building rows\
        table.insert(self._items, node .. "/select")
+
                self.is_basexp = true
        mode = 1
+
            end
    else
+
            mode = 5
        while mw.ustring.find(item_key, '/') do
+
        end
            local split = mw.ustring.find(item_key, '/')
  −
tags[string.lower(mw.ustring.sub(item_key, 1, split - 1))] = true
  −
            item_key = mw.ustring.sub(item_key, split + 1)
  −
        end
  −
        tags[string.lower(item_key)] = true
  −
        mode = 5
  −
    end
   
    elseif mode == 3 then
 
    elseif mode == 3 then
 
        resource = self:upcase(item_key)
 
        resource = self:upcase(item_key)
Line 263: Line 254:  
        mode = 6
 
        mode = 6
 
    else
 
    else
if mode == 6 and self._is_basexp then
+
        -- Only add basexp to the list of values if included as a tag
basexp = item_key
+
        if mode == 6 and tags.basexp then
mode = 7
+
            basexp = item_key
else
+
            mode = 7
--Fleets are of variable size, so we append onto a string until we hit the next node declaration
+
        else
local split = mw.ustring.find(item_key, '/')
+
            --Fleets are of variable size, so we append onto a string until we hit the next node declaration
local ship_name, ship_suffix
+
            local split = mw.ustring.find(item_key, '/')
if split then
+
            local ship_name, ship_suffix
ship_name = mw.ustring.sub(item_key, 1, split - 1)
+
            if split then
ship_suffix = mw.ustring.sub(item_key, split + 1)
+
                ship_name = mw.ustring.sub(item_key, 1, split - 1)
else
+
                ship_suffix = mw.ustring.sub(item_key, split + 1)
ship_name = item_key
+
            else
ship_suffix = ""
+
                ship_name = item_key
end
+
                ship_suffix = ""
+
            end
local ship = EnemyShip(ship_name, ship_suffix)
+
           
local ship_air_power = ship:air_power(tags.raid)
+
            local ship = EnemyShip(ship_name, ship_suffix)
+
            local ship_air_power = ship:air_power(tags.raid)
local ship_caption =
+
           
(ship:name() or "?")
+
            local ship_caption =
.. " (" .. Formatting:format_enemy_stat(ship:api_id()) .. "): "
+
                (ship:name() or "?")
.. (ship:armor() or "?") .. " Armor, " .. (ship:hp() or "?") .. " HP"
+
                .. " (" .. Formatting:format_enemy_stat(ship:api_id()) .. "): "
.. (ship_air_power ~= 0 and ", " .. (ship_air_power or "?") .. " AP" or "")
+
                .. (ship:armor() or "?") .. " Armor, " .. (ship:hp() or "?") .. " HP"
+
                .. (ship_air_power ~= 0 and ", " .. (ship_air_power or "?") .. " AP" or "")
table.insert(fleet, ShipBattleCardKai:get{
+
               
ship = ship,
+
            table.insert(fleet, ShipBattleCardKai:get{
caption = ship_caption,
+
                ship = ship,
link = ship:link(),
+
                caption = ship_caption,
flagship = #fleet == 0
+
                link = ship:link(),
})
+
                flagship = #fleet == 0
+
            })
if ship_air_power then
+
       
as_rating = as_rating + ship_air_power
+
            if ship_air_power then
else
+
                as_rating = as_rating + ship_air_power
as_complete = false
+
            else
end
+
                as_complete = false
if mode == 6 then
+
            end
    mode = 7
+
            if mode == 6 then
end
+
                mode = 7
end
+
            end
            end
+
        end
 +
    end
 
end
 
end
 
     end
 
     end
Line 315: Line 307:  
local row_values
 
local row_values
 
if type(item) == "string" then
 
if type(item) == "string" then
row_values = item
+
    row_values = item
 
else
 
else
local columnuse = nil
+
    local columnuse = nil
if self._is_basexp then
+
    if item.tags.basexp then
columnuse = self._columns_basexp
+
        columnuse = self._columns_basexp
else
+
    else
columnuse = self._columns
+
        columnuse = self._columns
end
+
    end
+
   
row_values = {}
+
    row_values = {}
for _, column in ipairs(columnuse) do
+
    for _, column in ipairs(columnuse) do
row_values[column] = self[column](self, item)
+
        row_values[column] = self[column](self, item)
end
+
    end
if index > 1 then
+
    if index > 1 then
    for _, column in ipairs(columnuse) do
+
        for _, column in ipairs(columnuse) do
    for i = index - 1, 1, -1 do
+
            for i = index - 1, 1, -1 do
        if column == "node" then
+
                if column == "node" then
    local previous_cell = self._data_rows[i][column]
+
                    local previous_cell = self._data_rows[i][column]
    if previous_cell then
+
                    if previous_cell then
        if row_values[column].values.node == previous_cell.values.node then
+
                        if row_values[column].values.node == previous_cell.values.node then
 
        previous_cell.rowspan = previous_cell.rowspan and previous_cell.rowspan + 1 or 2
 
        previous_cell.rowspan = previous_cell.rowspan and previous_cell.rowspan + 1 or 2
        row_values[column] = nil
+
        row_values[column] = nil
        else
+
        else
        row_values[column].rowspan = 1
+
            row_values[column].rowspan = 1
        row_values[column].colspan = 1
+
            row_values[column].colspan = 1
        end
+
        end
        break
+
        break
        end
+
    end
 
    end
 
    end
 
            end
 
            end
 
        end
 
        end
 
    else
 
    else
for _, column in ipairs(columnuse) do
+
        for _, column in ipairs(columnuse) do
    row_values[column].rowspan = 1
+
            row_values[column].rowspan = 1
    row_values[column].colspan = 1
+
            row_values[column].colspan = 1
end
+
        end
end
+
    end
 
end
 
end
 
table.insert(self._data_rows, row_values)
 
table.insert(self._data_rows, row_values)
Line 376: Line 368:  
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
  −
  −
function NodeInfo:is_basexp()
  −
return self._is_basexp
   
end
 
end
 
   
 
   
Line 386: Line 374:  
if self:is_simple_node_type() then
 
if self:is_simple_node_type() then
 
header_string = format{
 
header_string = format{
self._header_template_simple,
+
    self._header_template_simple,
node_type = self:format_node_type()
+
    node_type = self:format_node_type()
 
}
 
}
elseif self:is_basexp() then
+
elseif self._is_basexp then
 
header_string = format{
 
header_string = format{
self._header_template_basexp,
+
    self._header_template_basexp,
node_type = self:format_node_type()
+
    node_type = self:format_node_type()
 
}
 
}
 
else
 
else
 
header_string = format{
 
header_string = format{
self._header_template,
+
    self._header_template,
node_type = self:format_node_type()
+
    node_type = self:format_node_type()
 
}
 
}
 
end
 
end
Line 438: Line 426:  
     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
for index, row_values in ipairs(self._data_rows) do
+
    for index, row_values in ipairs(self._data_rows) do
if row_values ~= "break" 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
table.insert(self._rows, self._header)
+
    table.insert(self._rows, self._header)
 
elseif type(row_values) == "table" then
 
elseif type(row_values) == "table" then
 
    if row_values["node"] then
 
    if row_values["node"] then
Line 452: Line 440:  
        bg_color = "initial"
 
        bg_color = "initial"
 
    end
 
    end
if self._is_basexp then
+
    if self._is_basexp then
for _, column in ipairs(self._columns_basexp) do
+
        for _, column in ipairs(self._columns_basexp) do
if row_values[column] then
+
            if row_values[column] then
row_values[column].bg_color = bg_color
+
                row_values[column].bg_color = bg_color
end
+
            end
if row_values[column] then
+
            if row_values[column] then
table.insert(self._rows, format(self._column_cell_templates_basexp[column] or self._cell, row_values[column]))
+
                table.insert(self._rows, format(self._column_cell_templates_basexp[column] or self._cell, row_values[column]))
end
+
            end
end
+
        end
else
+
    else
for _, column in ipairs(self._columns) do
+
        for _, column in ipairs(self._columns) do
if row_values[column] then
+
            if row_values[column] then
row_values[column].bg_color = bg_color
+
                row_values[column].bg_color = bg_color
end
+
            end
if row_values[column] then
+
            if row_values[column] then
table.insert(self._rows, format(self._column_cell_templates[column] or self._cell, row_values[column]))
+
                table.insert(self._rows, format(self._column_cell_templates[column] or self._cell, row_values[column]))
end
+
            end
end
+
        end
end
+
  end
    elseif mw.ustring.find(row_values, '/') then
+
        elseif mw.ustring.find(row_values, '/') then
 
             --node/resource/amount/boss
 
             --node/resource/amount/boss
 
             local values = {}
 
             local values = {}
Line 500: Line 488:  
                 }})
 
                 }})
 
            end
 
            end
    end
+
        end
end
+
  end
 
     end
 
     end
 
end
 
end
Line 510: Line 498:  
table.insert(self._rows, self._table_end)
 
table.insert(self._rows, self._table_end)
 
if self._args["toggle_id"] then
 
if self._args["toggle_id"] then
        table.insert(self._rows, self._collapser_end)
+
    table.insert(self._rows, self._collapser_end)
 
     end
 
     end
 
end
 
end

Navigation menu