• 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
another item attempt. doesn't work. revert if needed.
Line 9: Line 9:  
local EquipmentCardKai = require("Module:EquipmentCardKai")
 
local EquipmentCardKai = require("Module:EquipmentCardKai")
 
local EquipmentGraphicKai = require("Module:EquipmentGraphicKai")
 
local EquipmentGraphicKai = require("Module:EquipmentGraphicKai")
local EquipmentCollection = require("Module:Collection/Equipment")
+
local EquipmentCollection = require("Module:Data/Equipment")
local AllEquipmentCollection = require("Module:Collection/EquipmentByApiId")
+
local ItemCollection = require('Module:Collection/Items')
 +
-- local AllEquipmentCollection = require("Module:Collection/EquipmentByApiId")
 
local Development = require("Module:Development")
 
local Development = require("Module:Development")
 
local ShipsByApiId = require("Module:Collection/ShipsByApiId")
 
local ShipsByApiId = require("Module:Collection/ShipsByApiId")
Line 21: Line 22:  
local target = nil
 
local target = nil
 
local equipment = nil
 
local equipment = nil
local filterArgs = {}
  −
local sorted = false
   
local sequence = nil
 
local sequence = nil
 
local sequence_length = nil
 
local sequence_length = nil
 
local sequence_position = nil
 
local sequence_position = nil
local env = {}
+
-- local sorted = false
 +
-- local env = {}
    
local enumerating_functions = {
 
local enumerating_functions = {
Line 32: Line 32:  
     base_names = function() return require('Module:Collection/ShipsBase') end,
 
     base_names = function() return require('Module:Collection/ShipsBase') end,
 
     all_names = function() return require('Module:Collection/Ships') end,
 
     all_names = function() return require('Module:Collection/Ships') end,
 +
    remodel_names = function()
 +
    local all_names = require('Module:Collection/Ships')
 +
    local base_names = require('Module:Collection/ShipsBase')
 +
    local result = {}
 +
    for _, name in ipairs(all_names) do
 +
    if not U.includes(base_names, name) then
 +
    local ship = Ship(name)
 +
    if ship._implementation_date then
 +
    table.insert(result, name)
 +
    end
 +
    end
 +
    end
 +
    return result
 +
    end,
 
     enemy = function() return require('Module:Collection/EnemyShips') end,
 
     enemy = function() return require('Module:Collection/EnemyShips') end,
     equipment = function() return U.imap(EquipmentCollection, function(e) return e._name end) end,
+
     equipment = function()
 +
    equipment = true
 +
    return U.imap(EquipmentCollection, function(e) return e._name end)
 +
    end,
 +
    item = function()
 +
    item = true
 +
    return U.imap(ItemCollection, function(e) return e._name end)
 +
    end,
 +
    --[[
 
     allEquipment = function()
 
     allEquipment = function()
 +
    equipment = true
 
         local result = {}
 
         local result = {}
 
         for i = 1, 700 do
 
         for i = 1, 700 do
Line 44: Line 67:  
     end,
 
     end,
 
     enemyEquipment = function()
 
     enemyEquipment = function()
 +
    equipment = true
 
         local result = {}
 
         local result = {}
 
         for i = 501, 700 do
 
         for i = 501, 700 do
Line 52: Line 76:  
         return result
 
         return result
 
     end,
 
     end,
 +
    ]]--
 
}
 
}
   Line 102: Line 127:  
     end,
 
     end,
 
     code = function(obj) return equipment and Formatting:format_equipment_type(obj:type()) or Formatting:format_ship_code(obj:type()) end,
 
     code = function(obj) return equipment and Formatting:format_equipment_type(obj:type()) or Formatting:format_ship_code(obj:type()) end,
 +
    code_link = function(obj) return string.format("[[%s]]", Formatting:format_ship_code(obj:type())) end,
 
     type = function(obj) return equipment and Formatting:format_equipment_type(obj:type()) or Formatting:format_ship_type(obj:type()) end,
 
     type = function(obj) return equipment and Formatting:format_equipment_type(obj:type()) or Formatting:format_ship_type(obj:type()) end,
 
     icon = function(obj)
 
     icon = function(obj)
Line 111: Line 137:  
             end
 
             end
 
         else
 
         else
             return obj.icon and ([[<span data-sort-value="]] .. (obj._type or '0') .. [=[">[[File:]=] .. Formatting:format_equipment_icon(obj:icon()) .. "]]</span>") or ''
+
        return obj.icon and ([=[[[File:]=] .. Formatting:format_equipment_icon(obj:icon()) .. "]]") or ''
 +
             -- return obj.icon and ([[<span data-sort-value="]] .. (obj._type or '0') .. [=[">[[File:]=] .. Formatting:format_equipment_icon(obj:icon()) .. "]]</span>") or ''
 
         end
 
         end
 
     end,
 
     end,
 
     icon_damaged = function(obj) return string.format("[[File:Ship Icon %s Damaged.png|100px]]", obj:name()) end,
 
     icon_damaged = function(obj) return string.format("[[File:Ship Icon %s Damaged.png|100px]]", obj:name()) end,
     link = function(obj) return string.format("[[%s]]", obj:name()) end,
+
     link = function(obj) return string.format("[[%s]]", equipment and obj:name() or obj:unique_name()) end,
    --[[
  −
    link = function(obj)
  −
        if obj._dummy then
  −
            local link = ShipsByApiId[obj._api_id]
  −
            if link then
  −
                link = link:gsub('/', ' ')
  −
            end
  −
            return link and Formatting:format_link(link) or ''
  −
        else
  −
            return Formatting:format_link(obj:link())
  −
        end
  −
    end,
  −
    ]]--
   
     class = function(ship) return ship:class() and ship:class():name() or "?" end,
 
     class = function(ship) return ship:class() and ship:class():name() or "?" end,
 
     implementation_date = function(ship)
 
     implementation_date = function(ship)
Line 142: Line 156:  
     card = function(obj)
 
     card = function(obj)
 
     if not obj or not obj.lua_name then
 
     if not obj or not obj.lua_name then
     return ' '
+
     if equipment then --attempted to stop equipment from being filtered out, as equip cards weren't showing up. Don't know if this only works for equip and if I broke the original funtion's intention. This may not work at filtering out errors -chocolatecravinghobo
 +
    else
 +
    return ' '
 +
    end
 
     end
 
     end
 
         if obj.hp then
 
         if obj.hp then
Line 179: Line 196:  
         end
 
         end
 
     end,
 
     end,
     scrap = function(eq)
+
     scrap_string = function(eq)
 
         local scrap = eq:scrap()
 
         local scrap = eq:scrap()
 
         return string.format("%s/%s/%s/%s", scrap.fuel or 0, scrap.ammo or 0, scrap.steel or 0, scrap.bauxite or 0)
 
         return string.format("%s/%s/%s/%s", scrap.fuel or 0, scrap.ammo or 0, scrap.steel or 0, scrap.bauxite or 0)
Line 186: Line 203:  
     development_rate = function(eq) return Development.formatRates(eq) end,
 
     development_rate = function(eq) return Development.formatRates(eq) end,
 
     development_hq = function(eq) return Development.formatHQ(eq) end,
 
     development_hq = function(eq) return Development.formatHQ(eq) end,
     backMinusRarity = function(ship) return ship:back() - ship:rarity() end,
+
     backMinusRarity = function(ship) return (ship:back() or 0) - (ship:rarity() or 0) end,
 
     rarity_bg = function(ship)
 
     rarity_bg = function(ship)
 
         return string.format('style="background:%s"|%s<br>%s', Formatting:format_ship_back(ship:rarity()), ship:rarity() or '??', Formatting:format_ship_rarity(ship:rarity()))
 
         return string.format('style="background:%s"|%s<br>%s', Formatting:format_ship_back(ship:rarity()), ship:rarity() or '??', Formatting:format_ship_rarity(ship:rarity()))
Line 192: Line 209:  
     back_bg = function(ship)
 
     back_bg = function(ship)
 
         return string.format('style="background:%s"|%s<br>%s', Formatting:format_ship_back(ship:back()), ship:back() or '??', Formatting:format_ship_rarity(ship:back()))
 
         return string.format('style="background:%s"|%s<br>%s', Formatting:format_ship_back(ship:back()), ship:back() or '??', Formatting:format_ship_rarity(ship:back()))
 +
    end,
 +
    same_day_remodel_links = function(ship)
 +
    local result = { string.format("[[%s]]", ship:name()) }
 +
    local visited = {}
 +
visited[ship:name()] = true
 +
    while true do
 +
    local next = ship:remodel_to()
 +
    if not next then break end
 +
    ship = Ship(next)
 +
    if ship._implementation_date then break end
 +
    if visited[ship:name()] then break end
 +
    visited[ship:name()] = true
 +
    table.insert(result, string.format("[[%s]]", ship:name()))
 +
    end
 +
    return table.concat(result, ", ")
 
     end,
 
     end,
 
}
 
}
Line 207: Line 239:     
local function format_value(key, ship, target)
 
local function format_value(key, ship, target)
    local formatting_function = formatting_functions[key]
+
local keys = mw.text.split(key, "%s*%.%s*")
    if formatting_function then
+
local result = ship
        return formatting_function(ship, target)
+
for _, key in ipairs(keys) do
    end
+
    local formatting_function = formatting_functions[key]
    --[[
+
    if formatting_function then
    if shipCapabilities[key] then
+
        result = formatting_function(result, target)
        local a, b = shipCapabilities[key](shipCapabilities)
+
    else
        return format_lua(b or a)
+
    local lua = result[key] or result['_' .. key]
    end
+
    if type(lua) == "function" then
    ]]--
+
        result = lua(result)
    local lua = ship[key]
+
    else
    if type(lua) == "function" then
+
        result = lua
        return format_lua(lua(ship))
+
    end
    else
+
    end
        return format_lua(lua)
+
if type(result) ~= 'table' then
    end
+
return format_lua(result)
 +
end
 +
    --[[
 +
    if shipCapabilities[key] then
 +
        local a, b = shipCapabilities[key](shipCapabilities)
 +
        return format_lua(b or a)
 +
    end
 +
    ]]--
 +
end
 +
return format_lua(result)
 
end
 
end
   Line 358: Line 399:  
local function interpret(args_)
 
local function interpret(args_)
 
args = args_
 
args = args_
 +
local filterArgs = {}
 
     for _, arg in ipairs(args) do
 
     for _, arg in ipairs(args) do
 
     local prefix = string.sub(arg, 1, 1)
 
     local prefix = string.sub(arg, 1, 1)
 
     if prefix == "~" then
 
     if prefix == "~" then
     local kv = mw.text.split(string.sub(arg, 2), "%s*~%s*")
+
    -- ~x.y.z~a.b.c means obj.x.y.z == a or obj.x.y.z == b or obj.x.y.z == c
     local xs = mw.text.split(kv[2], "%s*,%s*")
+
    -- obj.x.y.z can be obj:x():y():z(), etc.
     table.insert(filterArgs, {kv[1], xs})
+
     local ksvs = mw.text.split(string.sub(arg, 2), "%s*~%s*")
 +
     local ks = mw.text.split(ksvs[1], "%s*%.%s*")
 +
    local vs = mw.text.split(ksvs[2], "%s*,%s*")
 +
     table.insert(filterArgs, {ks, vs})
 
     end
 
     end
 
     end
 
     end
Line 375: Line 420:  
        sequence = {}
 
        sequence = {}
 
        for _, e in ipairs(enumerating_function()) do
 
        for _, e in ipairs(enumerating_function()) do
        local ship = Ship(e)
+
        local ship
 +
        if equipment or item then
 +
        ship = Equipment(e)
 +
        else
 +
        ship = Ship(e)
 +
        end
 
        if #filterArgs > 0 then
 
        if #filterArgs > 0 then
 
    local test = true
 
    local test = true
for _, kv in ipairs(filterArgs) do
+
for _, ksvs in ipairs(filterArgs) do
 
local test2 = false
 
local test2 = false
for _, e2 in ipairs(kv[2]) do
+
 
if tostring(ship[kv[1]](ship)) == e2 then
+
local obj = ship
 +
for _, k in ipairs(ksvs[1]) do
 +
local g = obj[k]
 +
if type(g) == 'function' then
 +
obj = g(obj)
 +
if type(obj) == 'nil' then
 +
obj = '??'
 +
break
 +
end
 +
elseif type(g) == 'table' then
 +
obj = g
 +
else
 +
obj = g
 +
break
 +
end
 +
end
 +
local v1 = tostring(obj)
 +
 
 +
for _, v2 in ipairs(ksvs[2]) do
 +
if v1 == v2 then
 
test2 = true
 
test2 = true
 
break
 
break
 
end
 
end
 
end
 
end
 +
 
if not test2 then
 
if not test2 then
 
test = false
 
test = false
Line 401: Line 471:  
sequence_length = #sequence
 
sequence_length = #sequence
 
        end
 
        end
    elseif prefix == "?" then
+
    elseif prefix == '!' then
 +
    local name = string.sub(arg, 2)
 +
    local obj = Ship(name)
 +
    if not obj:hp() then
 +
    equipment = true
 +
    obj = Equipment(name)
 +
    end
 +
    sequence = {}
 +
    table.insert(sequence, obj)
 +
        sequence_position = 1
 +
sequence_length = 1
 +
    elseif arg == "#" or prefix == "?" then
 
    table.insert(actions, string.sub(arg, 2))
 
    table.insert(actions, string.sub(arg, 2))
 
    end
 
    end
Line 411: Line 492:  
   local x = a[sort](a)
 
   local x = a[sort](a)
 
   local y = b[sort](b)
 
   local y = b[sort](b)
 +
  if x == nil then return true end
 +
  if y == nil then return false end
 
   if x < y then return true end
 
   if x < y then return true end
 
   if x > y then return false end
 
   if x > y then return false end
Line 424: Line 507:  
     end
 
     end
 
         for _, arg in ipairs(actions) do
 
         for _, arg in ipairs(actions) do
            local value = ship and format_arg(format_value(arg, ship)) -- interpret_arg(arg)
+
        if arg == '' then
            if value then
+
        if args.format == "table" then
                table.insert(values, value)
+
        table.insert(values, "|-\n")
 +
        end
 +
        else
 +
            local value = ship and format_arg(format_value(arg, ship)) -- interpret_arg(arg)
 +
            if value then
 +
                table.insert(values, value)
 +
            end
 
             end
 
             end
 
         end
 
         end
Line 433: Line 522:  
end
 
end
    +
local function test()
 +
mw.log(interpret({"@base_names", "~is_battleship~true", "?link", sort = "type,id"}))
 +
mw.log(interpret({"@base_names", "~class.name~Kagerou Class", "?link", sort = "type,id"}))
 +
mw.log(interpret({"!Saiun", "?icon"}))
 +
mw.log(interpret({"!Ayanami", "?scrap_string", "?scrap.fuel", "?scrap_fuel", "?_scrap_fuel"}))
 +
mw.log(interpret({'@all_names', '~class.name~Akizuki Class', '?api_id', '?banner', '?link', '?japanese_name', '?code_link', '?class_number', '?firepower_max', '?torpedo_max', '?night_battle_power', '?aa_max', '?asw_max', '?los_max', '?luck', '?hp', '?armor_max', '?evasion_max', '?slots', '?fuel', '?ammo', sort = 'class_number,rarity,api_id'}))
 +
end
 +
 +
-- print(p.test())
 
return {
 
return {
 
format = function(frame) return interpret(U.getTemplateArgs(frame).explicit) end,
 
format = function(frame) return interpret(U.getTemplateArgs(frame).explicit) end,
test = function() mw.log(interpret({"@base_names", "~is_battleship~true", "?link", sort = "type,id"})) end,
+
test = test,
 
}
 
}
advmod, cssedit, Interface administrators, janitor, Moderators, prechecked, Widget editors
7,932

edits

Navigation menu