Changes

no edit summary
Line 2: Line 2:     
local U = require('Module:Core')
 
local U = require('Module:Core')
local JSON = require('Module:Core/JSON')
   
local loadData = require('Module:Data').load
 
local loadData = require('Module:Data').load
 
local getArgs = require('Module:GetArgs')
 
local getArgs = require('Module:GetArgs')
 +
local Ship = require('Module:Ship')
 
local ShipBattleCardKai = require('Module:ShipBattleCardKai')
 
local ShipBattleCardKai = require('Module:ShipBattleCardKai')
 
local EquipmentCardKai = require('Module:EquipmentCardKai')
 
local EquipmentCardKai = require('Module:EquipmentCardKai')
 
local ShipsByApiId = require('Module:Collection/ShipsByApiId')
 
local ShipsByApiId = require('Module:Collection/ShipsByApiId')
local EquipmentByApiId = require('Module:Collection/EquipmentByApiId')
     −
local function getShipCard(ship)
+
local function getShipCard(ship, hp, maxHp)
 +
    maxHp = maxHp or 999
 +
    local minHp = type(hp) == 'table' and U.imin(hp) or hp or maxHp or 999
 
     local id = tonumber(ship)
 
     local id = tonumber(ship)
 
     if id then
 
     if id then
 
         ship = ShipsByApiId[id]
 
         ship = ShipsByApiId[id]
 
     end
 
     end
     return ShipBattleCardKai:Asset({ ship, hd = true, size = '160px' })
+
     return ShipBattleCardKai:Asset({
 +
        ship,
 +
        hd = true,
 +
        size = '160px',
 +
        damaged = minHp / maxHp <= 0.5 and 'true' or 'false',
 +
        layers = minHp / maxHp <= 0.5 and 'smudge_medium status_medium_damage' or minHp / maxHp <= 0.75 and 'status_light_damage' or '',
 +
    })
 
end
 
end
   −
local function getEquipmentCard(eq)
+
local function getEquipmentCard(eq, cardSize)
    local id = tonumber(eq)
+
     return EquipmentCardKai:Asset({ eq, size = cardSize or '100px' })
    if id then
  −
        eq = EquipmentByApiId[id]
  −
    end
  −
     return EquipmentCardKai:Asset({ eq, size = '100px' })
   
end
 
end
   Line 35: Line 38:  
!Ship
 
!Ship
 
!Lv.
 
!Lv.
!colspan="4"|Equipment
+
!Equipment
 
![[File:Icon HP.png]]
 
![[File:Icon HP.png]]
 
![[File:Icon Gun.png]]
 
![[File:Icon Gun.png]]
Line 47: Line 50:  
]=]
 
]=]
   −
local fleetNames = require('Module:Fleet/Names')
+
local fleetNames = require('Module:FleetNames')
    
local function getFleetName(fleet, event)
 
local function getFleetName(fleet, event)
 
     local names = fleetNames[event] or {}
 
     local names = fleetNames[event] or {}
     if names[1] then
+
     if names == 'flagship' then
 +
        return Ship(fleet[1].ship):base_name() .. ' FS'
 +
    elseif names[1] then
 
         for _, f in ipairs(names) do
 
         for _, f in ipairs(names) do
 
             for i, ship in ipairs(f.ships) do
 
             for i, ship in ipairs(f.ships) do
Line 82: Line 87:     
local function formatHp(hps, maxHp)
 
local function formatHp(hps, maxHp)
     return string.format(
+
  local minHp = U.imin(hps)
        '<span class="explain" title="%s">~/%s</span>',
+
  if minHp / maxHp <= 0.5 then
        U.ijoin(hps, ', '),
+
     return string.format('{{color|red|{{tooltip|~/%s|%s}}}}', maxHp, U.ijoin(hps, ', '))
        maxHp
+
  elseif minHp / maxHp <= 0.75 then
    )
+
    return string.format('{{color|coral|{{tooltip|~/%s|%s}}}}', maxHp, U.ijoin(hps, ', '))
 +
  else
 +
    return string.format('{{tooltip|~/%s|%s}}', maxHp, U.ijoin(hps, ', '))
 +
  end
 +
end
 +
 
 +
local function formatVoice(e)
 +
  local file = type(e.voice) == 'number' and e.voice < 10 and
 +
    string.format('Ship Voice %s Spring 2019 Event Friend Fleet %s.ogg', e.ship, e.voice) or
 +
    string.format('Ship Voice %s %s.ogg', e.ship, e.voice)
 +
  return string.format('<span data-voice="%s">{{audio|file=%s}}</span>', file, file)
 
end
 
end
    
local function renderFriend(args, frame)
 
local function renderFriend(args, frame)
 
     -- local data = loadData('Fleet/Friend/' .. args.friend)
 
     -- local data = loadData('Fleet/Friend/' .. args.friend)
     local success, data = U.requireModule('Data/Fleet/Friend/' .. args.friend)
+
     local success, data = U.requireModule('Data/FriendFleet/' .. args.friend)
 
     if not success then
 
     if not success then
 
         return "''No data''"
 
         return "''No data''"
Line 97: Line 112:  
     local groups = {}
 
     local groups = {}
 
     for i, e in pairs(data) do
 
     for i, e in pairs(data) do
         if not args.map or U.ifind(e.maps, args.map) then
+
         if not args.map and not args.node or U.ifind(e.maps, args.map) or U.ifind(e.notes, args.node) then
 
             local fleetType = getFleetName(e.fleet, args.friend)
 
             local fleetType = getFleetName(e.fleet, args.friend)
 
             groups[fleetType] = groups[fleetType] or {}
 
             groups[fleetType] = groups[fleetType] or {}
Line 108: Line 123:  
         local fleets = groups[fleetType]
 
         local fleets = groups[fleetType]
 
         table.sort(fleets, function(a, b)
 
         table.sort(fleets, function(a, b)
 +
            local node1 = U.ijoin(a.notes, ', ')
 +
            local node2 = U.ijoin(b.notes, ', ')
 
             local l1 = table.getn(a.fleet)
 
             local l1 = table.getn(a.fleet)
 
             local l2 = table.getn(b.fleet)
 
             local l2 = table.getn(b.fleet)
 
             local ships1 = U.ijoin(U.imap(a.fleet, function (e) return e.ship end), ', ')
 
             local ships1 = U.ijoin(U.imap(a.fleet, function (e) return e.ship end), ', ')
 
             local ships2 = U.ijoin(U.imap(b.fleet, function (e) return e.ship end), ', ')
 
             local ships2 = U.ijoin(U.imap(b.fleet, function (e) return e.ship end), ', ')
             if ships1 == ships2 then
+
             if node1 == node2 then
                return l1 < l2
+
                if ships1 == ships2 then
 +
                    return l1 < l2
 +
                end
 +
                return ships1 < ships2
 
             end
 
             end
             return ships1 < ships2
+
             return node1 < node2
 
         end)
 
         end)
 
         table.insert(result, string.format('{{!}}-{{!}} %s =', fleetType))
 
         table.insert(result, string.format('{{!}}-{{!}} %s =', fleetType))
Line 121: Line 141:  
         for i, fleet in ipairs(fleets) do
 
         for i, fleet in ipairs(fleets) do
 
             table.insert(result, string.format('|-| %s =', 'Variant ' .. i))
 
             table.insert(result, string.format('|-| %s =', 'Variant ' .. i))
             if fleet.p2w then
+
            local fleetNote = ''
                 table.insert(result, '**P2W**, ')
+
             if table.getn(fleet.notes) > 0 then
 +
                 fleetNote = fleetNote .. U.ijoin(fleet.notes, ', ')
 
             end
 
             end
             if fleet.f2p then
+
             if fleet.f2p and fleet.f2p > 0 then
                 table.insert(result, '**F2P**, ')
+
                 fleetNote = fleetNote .. ", '''{{color|green|{{tooltip|Regular|"  .. fleet.f2p ..  " samples}}}}'''"
 
             end
 
             end
             if table.getn(fleet.notes) > 0 then
+
            if fleet.p2w and fleet.p2w > 0 then
                 table.insert(result, U.ijoin(fleet.notes, '<br>'))
+
                fleetNote = fleetNote .. ", '''{{color|red|{{tooltip|Powerful|"  .. fleet.p2w ..  " samples}}}}'''"
             end              
+
            end
 +
             if table.getn(fleet.voices or {}) > 0 then
 +
                 fleetNote = fleetNote .. ' ' .. U.ijoin(U.imap(fleet.voices[1], formatVoice), ' ')
 +
             end
 +
            table.insert(result, fleetNote)
 
             table.insert(result, tableHeaderFriend)
 
             table.insert(result, tableHeaderFriend)
 +
            local maxSlots = U.imax(U.imap(fleet.fleet, function(ship) return #ship.equipment end))
 +
            local cardSize = maxSlots == 5 and '60px' or maxSlots == 4 and '80px' or '100px'
 
             for j, ship in ipairs(fleet.fleet) do
 
             for j, ship in ipairs(fleet.fleet) do
 
                 table.insert(result, string.format(
 
                 table.insert(result, string.format(
                     '|-\n|%s||%s||%s||%s||%s||%s||%s||%s||%s||%s||%s',
+
                     '|-\n|%s||%s||style="text-align:left;white-space:nowrap"|%s||%s||%s||%s||%s||%s',
                     getShipCard(ship.ship),
+
                     getShipCard(ship.ship, ship.hp, ship.maxHp),
 
                     ship.level,
 
                     ship.level,
                     ship.equipment[1] and getEquipmentCard(ship.equipment[1]) or 'style="background:grey;width:100px"| ',
+
                     U.ijoin(U.imap(ship.equipment, function(eq) return getEquipmentCard(eq, cardSize) end)),
                    ship.equipment[2] and getEquipmentCard(ship.equipment[2]) or 'style="background:grey;width:100px"| ',
  −
                    ship.equipment[3] and getEquipmentCard(ship.equipment[3]) or 'style="background:grey;width:100px"| ',
  −
                    ship.equipment[4] and getEquipmentCard(ship.equipment[4]) or 'style="background:grey;width:100px"| ',
   
                     type(ship.hp) == 'table' and formatHp(ship.hp, ship.maxHp) or ship.hp ~= ship.maxHp and string.format('%s/%s', ship.hp, ship.maxHp) or ship.maxHp,
 
                     type(ship.hp) == 'table' and formatHp(ship.hp, ship.maxHp) or ship.hp ~= ship.maxHp and string.format('%s/%s', ship.hp, ship.maxHp) or ship.maxHp,
 
                     ship.firepower,
 
                     ship.firepower,
cssedit, gkautomate
6,926

edits