| Line 1: |
Line 1: |
| − | local format = require("Module:Utils").format | + | local format = require("Module:Core").format |
| | local BaseData = require("Module:BaseData") | | local BaseData = require("Module:BaseData") |
| | local Formatting = require("Module:Formatting") | | local Formatting = require("Module:Formatting") |
| Line 29: |
Line 29: |
| | [7] = "Cut-in: Torpedo", | | [7] = "Cut-in: Torpedo", |
| | [8] = "Bombing", | | [8] = "Bombing", |
| | + | [9] = "Cut-in: Carrier", |
| | }, | | }, |
| | _night_battle_attack_counts = { | | _night_battle_attack_counts = { |
| Line 260: |
Line 261: |
| | function Self._is_active_midget_submarine(equipment) | | function Self._is_active_midget_submarine(equipment) |
| | return equipment:id() == 41 or equipment:id() == 541 | | return equipment:id() == 41 or equipment:id() == 541 |
| | + | end |
| | + | |
| | + | function ShipCapabilities:_is_night_aviation_personnel(equipment) |
| | + | return equipment:id() == 258 |
| | + | or equipment:id() == 259 |
| | + | or equipment:id() == 608 |
| | end | | end |
| | | | |
| Line 293: |
Line 300: |
| | if ship_name:match("Lycoris Princess") or ship_name:match("Abyssal Jellyfish Princess") then | | if ship_name:match("Lycoris Princess") or ship_name:match("Abyssal Jellyfish Princess") then |
| | return 1 | | return 1 |
| | + | elseif ship:id() == 1964 then |
| | + | return 9 |
| | else | | else |
| | return 8 | | return 8 |
| Line 317: |
Line 326: |
| | return nil | | return nil |
| | end | | end |
| | + | --[[ |
| | + | local has_bomber_planes = false |
| | + | for i = 1, self._ship:slots_length() do |
| | + | local equipment, size = self._ship:slot(i) |
| | + | if equipment and self:_is_bomber(equipment) and size and size > 0 then |
| | + | has_bomber_planes = true |
| | + | break |
| | + | end |
| | + | end |
| | + | ]]-- |
| | local is_installation_bbv = self._ship:speed() == 0 and self._ship:type() == 10 | | local is_installation_bbv = self._ship:speed() == 0 and self._ship:type() == 10 |
| | if not self:_is_carrier() and not is_installation_bbv then | | if not self:_is_carrier() and not is_installation_bbv then |
| Line 501: |
Line 520: |
| | -- Or basic attack power for night battle attack, including night special attack, anti-installation and contact modifiers. | | -- Or basic attack power for night battle attack, including night special attack, anti-installation and contact modifiers. |
| | function ShipCapabilities:night_battle(vs_installation, contact) | | function ShipCapabilities:night_battle(vs_installation, contact) |
| − | local main_guns, secondary_guns, torpedoes, has_planes, firepower, torpedo = 0, 0, 0, false, self._ship:firepower_leveled(), self._ship:torpedo_leveled() | + | local main_guns, secondary_guns, torpedoes, has_planes, has_night_aviation_personnel, firepower, torpedo = 0, 0, 0, false, self._ship:night_aviation_personnel(), self._ship:firepower_leveled(), self._ship:torpedo_leveled() |
| | if not firepower or not torpedo then | | if not firepower or not torpedo then |
| | return nil | | return nil |
| Line 525: |
Line 544: |
| | equipment_torpedo = 0 | | equipment_torpedo = 0 |
| | end | | end |
| | + | elseif self:_is_night_aviation_personnel(equipment) then |
| | + | has_night_aviation_personnel = true |
| | end | | end |
| | if equipment_firepower then | | if equipment_firepower then |
| Line 567: |
Line 588: |
| | elseif main_guns + secondary_guns >= 2 and firepower > 0 then | | elseif main_guns + secondary_guns >= 2 and firepower > 0 then |
| | return 3, ((firepower + torpedo) * anti_installation_modifier + anti_installation_bonus) * 1.2 | | return 3, ((firepower + torpedo) * anti_installation_modifier + anti_installation_bonus) * 1.2 |
| | + | -- WIP: just a hack for enemy CVs, no plane checked, only NF + NTB (120%) supported |
| | + | elseif self:_is_carrier(self._ship) and has_night_aviation_personnel then |
| | + | return 9, ((firepower + torpedo) * anti_installation_modifier + anti_installation_bonus) * 1.2 |
| | -- Single Attack, Single Torpedo and Bombing are actually same | | -- Single Attack, Single Torpedo and Bombing are actually same |
| | else | | else |
| Line 599: |
Line 623: |
| | local is_player_submarine = not is_enemy and self:_is_submarine() | | local is_player_submarine = not is_enemy and self:_is_submarine() |
| | if | | if |
| | + | self._ship:opening_torpedo() == true or |
| | not is_enemy_submarine and self:_find_equipment(Self._is_active_midget_submarine) or | | not is_enemy_submarine and self:_find_equipment(Self._is_active_midget_submarine) or |
| | is_player_submarine and self._ship:level() and self._ship:level() >= 10 or | | is_player_submarine and self._ship:level() and self._ship:level() >= 10 or |
| Line 688: |
Line 713: |
| | -- Basic attack power for opening airstrike (returns an array with attack values per each bomber). | | -- Basic attack power for opening airstrike (returns an array with attack values per each bomber). |
| | function ShipCapabilities:opening_airstrike() | | function ShipCapabilities:opening_airstrike() |
| − | if not self:_is_aviation_ship() then
| |
| − | return false
| |
| − | end
| |
| | local airstrikes = {} | | local airstrikes = {} |
| | for i = 1, self._ship:slots_length() or 0 do | | for i = 1, self._ship:slots_length() or 0 do |