• 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
m
no edit summary
Line 216: Line 216:  
self.ammo = ship.ammo or 1
 
self.ammo = ship.ammo or 1
 
return self
 
return self
 +
 +
end
 +
 +
-- * Table utils.
 +
 +
local format = require('Module:StringInterpolation').format
 +
local Formatting = require('Module:Formatting')
 +
local StatIcons = require('Module:StatIcons')
 +
local Ship = require('Module:Ship')
 +
 +
local equipment = {
 +
DD = {
 +
main = {
 +
{ firepower = 3, rank = 10, k = 1 },
 +
{ firepower = 3, rank = 10, k = 1 },
 +
},
 +
torpedo = {
 +
-- Quint/53
 +
{ torpedo = 12, rank = 10, k = 1 },
 +
{ torpedo = 12, rank = 10, k = 1 },
 +
{ torpedo = 12, rank = 10, k = 1 },
 +
},
 +
},
 +
CL = {
 +
-- 20.3 #3
 +
main = {
 +
{ firepower = 10, rank = 10, k = 1 },
 +
{ firepower = 10, rank = 10, k = 1 },
 +
},
 +
torpedo = {
 +
{ torpedo = 12, rank = 10, k = 1 },
 +
{ torpedo = 12, rank = 10, k = 1 },
 +
{ torpedo = 12, rank = 10, k = 1 },
 +
},
 +
},
 +
CLT = {
 +
main = {
 +
-- OTO
 +
{ firepower = 8, rank = 10, k = 1 },
 +
{ firepower = 8, rank = 10, k = 1 },
 +
-- Hyouteki
 +
{ torpedo = 12 },
 +
},
 +
torpedo = {
 +
{ torpedo = 12, rank = 10, k = 1 },
 +
{ torpedo = 12, rank = 10, k = 1 },
 +
{ torpedo = 12 },
 +
},
 +
},
 +
CA = {
 +
main = {
 +
-- 20.3 #3
 +
{ firepower = 10, rank = 10, k = 1 },
 +
{ firepower = 10, rank = 10, k = 1 },
 +
-- FuMO
 +
{ firepower = 3 },
 +
},
 +
torpedo = {
 +
{ torpedo = 12, rank = 10, k = 1 },
 +
{ torpedo = 12, rank = 10, k = 1 },
 +
{ torpedo = 12, rank = 10, k = 1 },
 +
{ torpedo = 12, rank = 10, k = 1 },
 +
},
 +
mixed = {
 +
},
 +
},
 +
}
 +
 +
local normalized_type_code = {
 +
DD = "DD",
 +
CL = "CL",
 +
CLT = "CLT",
 +
FBB = "BB",
 +
BB = "BB",
 +
CAV = "CA",
 +
BBV = "BB",
 +
CVL = "CV",
 +
CV = "CV",
 +
CVB = "CV",
 +
}
 +
 +
local type_code_to_template = {
 +
DD = "main",
 +
CL = "main",
 +
CLT = "main",
 +
CA = "main",
 +
FBB = "main",
 +
BB = "main",
 +
CAV = "main_aviation",
 +
BBV = "main_aviation",
 +
CVL = "carrier",
 +
CV = "carrier",
 +
CVB = "carrier",
 +
-- SS = "submarine",
 +
-- SSV = "submarine_aviation",
 +
-- AV = "...",
 +
-- AO = "...",
 +
}
 +
 +
function format_damage(ship_, type_code, damage_type_fn, equip_setup, night_attack, spotting)
 +
local combat = Combat:new(night_attack)
 +
local normal_damage = combat:damage(damage_type_fn(combat, Ship:new(ship_, {}, night_attack)))
 +
local normal_damage_string =
 +
normal_damage >= combat.cap
 +
and string.format('<span style="color:red;">%s</span>', normal_damage)
 +
or normal_damage
 +
local equip = equipment[type_code][equip_setup]
 +
spotting = spotting or 1
 +
local equip_damage_pre = combat:damage(damage_type_fn(combat, Ship:new(ship_, equip, night_attack)))
 +
local equip_damage = combat:damage(damage_type_fn(combat, Ship:new(ship_, equip, night_attack, spotting)))
 +
local equip_damage_string =
 +
equip_damage_pre >= combat.cap
 +
and string.format('<span style="color:red;">%s</span>', equip_damage)
 +
or equip_damage
 +
return
 +
night_attack
 +
and string.format("%s", equip_damage_string)
 +
or string.format("%s, %s", normal_damage_string, equip_damage_string)
 +
end
 +
 +
local templates = {
 +
 +
main = [[{| class="wikitable sortable typography-xl-optout" style="width:100%;"
 +
! colspan="2" |
 +
! colspan="4" |Day Battle
 +
! colspan="5" |Night Battle
 +
|-
 +
!style="width:60px;"|Rank
 +
!style="width:80px;"|Name
 +
!${fp}
 +
!${torp}
 +
!<span title="Damage: normal attack without equipment, ${db_attack_note} with maxed equipment (all other modifiers = 1, see notes)">Hit</span>
 +
!<span title="Normal torpedo salvo damage, all modifiers = 1, see notes">Salvo</span>
 +
!${fp_plus_torp}
 +
!<span title="Maximal damage from double attack (combined)">DA</span>
 +
!<span title="Maximal damage from cut-in">CI</span>
 +
!${luck_minus_cap}
 +
!<span title="Torpedo/mixed cut-in rate, gun cut-in rate (only luck dependent part, no bonuses)">CI%</span>
 +
${rows}|}]],
 +
 +
    carrier = [[{| class="wikitable sortable typography-xl-optout" style="width:100%;"
 +
!style="width:60px;"|Rank
 +
!style="width:80px;"|Name
 +
!${fp}
 +
!<span title="Air Power with full >> Reppuu">Air Power</span>
 +
!<span title="">Aerial Hit</span>
 +
!<span title="">Shelling</span>
 +
${rows}|}]],
 +
 +
main_row = [[|-
 +
|${rank}
 +
|${name}
 +
|${fp}
 +
|${torp}
 +
|${db_attack}
 +
|${db_torp}
 +
|${fp_plus_torp}
 +
|${nb_da}
 +
|${nb_ci}
 +
|${luck_minus_cap}
 +
|${nb_ci_rate}
 +
]],
 +
 +
    carrier_row = [[|-
 +
|${rank}
 +
|${name}
 +
|${fp}
 +
|
 +
|
 +
|
 +
]],
 +
 +
}
 +
 +
local attacks = {
 +
DD = {
 +
spotting = 1,
 +
note = "normal attack",
 +
},
 +
CL = {
 +
spotting = Combat.modifier.spotting.double,
 +
note = "double attack",
 +
},
 +
CLT = {
 +
spotting = 1,
 +
note = "normal attack",
 +
},
 +
CA = {
 +
spotting = Combat.modifier.spotting.double,
 +
note = "double attack",
 +
},
 +
}
 +
 +
function Combat.header(frame)
 +
local type_code_ = frame.args["type"]
 +
local type_code = normalized_type_code[type_code_]
 +
local template = templates[type_code_to_template[type_code_]]
 +
return format{
 +
template,
 +
rows = frame.args[1] or "",
 +
db_attack_note = attacks[type_code].note or "?",
 +
fp = Formatting:format_image{StatIcons.firepower, caption = Formatting:format_stat_name("firepower")},
 +
torp = Formatting:format_image{StatIcons.torpedo, caption = Formatting:format_stat_name("torpedo")},
 +
fp_plus_torp =
 +
Formatting:format_image{StatIcons.firepower, caption = Formatting:format_stat_name("firepower")}
 +
.. "+" ..
 +
Formatting:format_image{StatIcons.torpedo, caption = Formatting:format_stat_name("torpedo")},
 +
luck_minus_cap =
 +
    '<span title="Luck cap">60</span>−' ..
 +
Formatting:format_image{StatIcons.luck, caption = Formatting:format_stat_name("luck")}
 +
}
 +
end
 +
 +
function Combat.row(frame)
 +
 +
local rank = frame.args[1]
 +
local ship_key = frame.args[2]
 +
local note = frame.args["note"]
 +
 +
local name, suffix = Ship:process_ship_key(ship_key)
 +
local ship = Ship:get_table(name, suffix)
 +
 +
if rank and name and ship and ship._type then
 +
 +
local type_code_ = Formatting:format_ship_code(ship._type)
 +
local type_code = normalized_type_code[type_code_]
 +
local template = templates[type_code_to_template[type_code_] .. "_row"]
 +
local luck_diff = 60 - ship._luck
 +
 +
return format{
 +
template,
 +
rank = rank,
 +
name = note and format{'[[${name}|<span title="${note}">${name}</span>]]<sup>?</sup>', name = name, note = note} or
 +
  string.format("[[%s]]", name),
 +
fp = ship._firepower_max,
 +
torp = ship._torpedo_max,
 +
fp_plus_torp = ship._firepower_max + (ship._torpedo_max or 0),
 +
db_attack = format_damage(ship, type_code, Combat.shelling, "main", nil, attacks[type_code].spotting),
 +
db_torp = format_damage(ship, type_code, Combat.torpedo, "torpedo"),
 +
nb_da = format_damage(ship, type_code, Combat.night_battle, "main", Combat.modifier.night_attack.double),
 +
nb_ci = format_damage(ship, type_code, Combat.night_battle, "torpedo", Combat.modifier.night_attack.cut_in.torpedo),
 +
luck_minus_cap = luck_diff < 0 and "−" .. -luck_diff or luck_diff,
 +
nb_ci_rate = string.format(
 +
"%s%%, %s%%",
 +
Combat.nb_cut_in_rate(ship, Combat.nb_cut_in_types.torpedo),
 +
Combat.nb_cut_in_rate(ship, Combat.nb_cut_in_types.main)),
 +
}
 +
else
 +
return ""
 +
end
    
end
 
end
    
return Combat
 
return Combat
cssedit, gkautomate
7,064

edits

Navigation menu