Module:NanaminFunctions

Revision as of 21:53, 29 April 2015 by Nanamin (talk | contribs)

Documentation for this module may be created at Module:NanaminFunctions/doc

local Ship = require("Module:Ship")

local NanaminFunctions = {}

function NanaminFunctions.split(haystack, needle)
    local special_inputs = {
        "381mm/50 Triple Gun Mount",
        "381mm/50 Triple Gun Mount Kai",
    }
    local result = {}
    while mw.ustring.find(haystack, needle) do
        local split = mw.ustring.find(haystack, needle)
        local input = mw.ustring.sub(haystack, 1, split - 1)
        
        for _, value in pairs(special_inputs) do
            if mw.ustring.sub(haystack, 1, #value) == value then
                input = mw.ustring.sub(haystack, 1, #value)
                haystack = mw.ustring.sub(haystack, split + 1)
                split = mw.ustring.find(haystack, needle) or 0
                break
            end
        end
        
        table.insert(result, input)
        haystack = mw.ustring.sub(haystack, split + 1)
        if split == 0 then haystack = "" end
    end
    if haystack ~= "" then table.insert(result, haystack) end
    return result
end

function NanaminFunctions.add_to_fighter_power(current_fp, equip, planes)
    --Only fighter planes, dive bombers, torpedo bombers and seaplane bombers with an AA stat are counted
    local types_allowed = { [6] = true, [7] = true, [8] = true, [11] = true }
    if types_allowed[equip:type()] and equip:aa() then
        current_fp = current_fp + math.floor(math.sqrt(planes) * equip:aa())
    end
    return current_fp
end

function NanaminFunctions.add_to_elos_ship(current_elos, entry, use_los)
    if entry[3] == nil then return current_elos end
    local ship = Ship(entry[1], entry[2])
    local los = ship:los() or 0
    local los_max = ship:los_max() or los
    if use_los then
        los = tonumber(entry[3])
    else
        los = math.floor(los + ((los_max - los) * tonumber(entry[3]) / 99))
    end
    return current_elos + math.sqrt(los) * 1.69
end

function NanaminFunctions.add_to_elos(current_elos, equip)
    --[[Effective LoS = Dive Bomber LoS x (1.04) + Torpedo Bomber LoS x (1.37)
    + Carrier-based Recon Plane LoS x (1.66) + Recon Seaplane LoS x (2.00)
    + Seaplane Bomber LoS x (1.78) + Small Radar LoS x (1.00) + Large Radar LoS x (0.99)
    + Searchlight LoS x (0.91) + √(base LoS of each ship) * (1.69)
    + (HQ Lv. rounded up to the next multiple of 5) x (-0.61)--]]
    local multiplier = { [7] = 1.04, [8] = 1.04, [9] = 1.66, [10] = 2.00, [11] = 1.78, [12] = 1.00, [13] = 0.99, [29] = 0.91 }
    if multiplier[equip:type()] ~= nil and equip:los() then
        current_elos = current_elos + (equip:los() * multiplier[equip:type()])
    end
    return current_elos
end

function NanaminFunctions.get_hq_bracket(hq_level)
    local bracket = tonumber(hq_level or 0)
 
    --Get bracket of 5
    bracket = bracket - (bracket % 5) + 5
    if tonumber(hq_level or 0) % 5 == 0 then
        bracket = bracket + 5
    end
    
    return bracket
end

function NanaminFunctions.process_legacy_name(name)
    local names = {
        ["12cm Naval Gun"] = "12cm Single Gun Mount",
        ["12.7cm Naval Gun"] = "12.7cm Single Gun Mount",
        ["14cm Naval Gun"] = "14cm Single Gun Mount",
        ["15.5cm Triple Gun Mount (Main)"] = "15.5cm Triple Gun Mount",
        ["20.3cm(no.2) Twin Gun Mount"] = "20.3cm (No.2) Twin Gun Mount",
        ["20.3cm(no.3) Twin Gun Mount"] = "20.3cm (No.3) Twin Gun Mount",
        ["SKC34 20.3cm Twin Cannon"] = "SKC34 20.3cm Twin Gun Mount",
        ["Prototype 41cm Triple Cannon"] = "Prototype 41cm Triple Gun Mount",
        ["Prototype 51cm Twin Cannon"] = "Prototype 51cm Twin Gun Mount",
        ["15.2cm Naval Gun"] = "15.2cm Single Gun Mount",
        ["15.5cm Triple Gun Mount (Secondary)"] = "15.5cm Triple Secondary Gun Mount",
        ["15cm Twin Gun Mount"] = "15cm Twin Secondary Gun Mount",
        ["8cm Twin High-angle Mount"] = "8cm High-angle Gun",
        ["10cm Twin High-angle Mount"] = "10cm Twin High-angle Gun Mount",
        ["10cm Twin High-angle Gun Mount (Carriage)"] = "10cm Twin High-angle Carriage Mount",
        ["10cm Twin High-angle Mount + Anti-Aircraft Fire Director"] = "10cm Twin High-angle Gun Mount + Anti-Aircraft Fire Director",
        ["12.7cm High-angle Mount"] = "12.7cm Single High-angle Gun Mount",
        ["12.7cm Twin High-angle Mount"] = "12.7cm Twin High-angle Gun Mount",
        ["12.7cm Twin High-angle Mount (Late Model)"] = "12.7cm Twin High-angle Gun Mount (Late Model)",
        ["12.7cm Twin High-angle Mount + Anti-Aircraft Fire Director"] = "12.7cm High-angle Gun + Anti-Aircraft Fire Director",
        ["12.7mm Machine Gun"] = "12.7mm Single Machine Gun Mount",
        ["25mm Autocannon"] = "25mm Single Autocannon Mount",
        ["BI-type 40mm Twin Machine Gun"] = "Type Bi 40mm Twin Autocannon Mount",
        ["61cm Quad Torpedo Mount"] = "61cm Quadruple Torpedo Mount",
        ["61cm Quad Oxygen Torpedo Mount"] = "61cm Quadruple (Oxygen) Torpedo Mount",
        ["61cm Quint Oxygen Torpedo Mount"] = "61cm Quintuple (Oxygen) Torpedo Mount",
        ["53cm Hull-mount O2 Torpedoes"] = "53cm Bow (Oxygen) Torpedo Mount",
        ["53cm Submarine Bow Torpedo Mount (8 tubes)"] = "Submarine 53cm Bow Torpedo Mount (8 tubes)",
        ["Type A Ko-hyoteki"] = "Kouhyouteki",
        ["Type 21 Zero Fighter"] = "Type 0 Fighter Model 21",
        ["Type 21 Zero Fighter (Skilled)"] = "Type 0 Fighter Model 21 (Skilled)",
        ["Type 52 Zero Fighter"] = "Type 0 Fighter Model 52",
        ["Zero Fighter Type 52 Type C (601 Air Group)"] = "Zero Fighter Model 52C (601 Air Group)",
        ["Shiden Kai 2"] = "Shiden Kai Ni",
        ["Type 62 Zero Fighter-bomber"] = "Type 0 Fighter Model 62 (Fighter-bomber)",
        ["Type 2 Recon Aircraft"] = "Type 2 Reconnaissance Aircraft",
        ["Type 0 Recon Seaplane"] = "Type 0 Reconnaissance Seaplane",
        ["Type 98 Recon Seaplane (Night Recon)"] = "Type 98 Reconnaissance Seaplane (Night Recon)",
        ["Ka-type Observation Autogyro"] = "No. Ka Observation Autogyro",
        ["Type 3 Spotter/Liaison (ASW)"] = "Type 3 Command Liaison Aircraft (ASW)",
        ["Type 22 Surface RADAR Kai 4"] = "No. 22 Surface Radar Kai Yon",
        ["Type 13 AIR RADAR Kai"] = "No. 13 Air Radar Kai",
        ["Type 21 Air RADAR Kai"] = "No. 21 Air Radar Kai",
        ["Type 93 Passive SONAR"] = "Type 93 Passive Sonar",
        ["Type 3 SONAR"] = "Type 3 Active Sonar",
        ["Type 0 Passive SONAR"] = "Type 0 Passive Sonar",
        ["Type 94 Depth Charge"] = "Type 94 Depth Charge Projector",
        ["Type 3 Depth Charge"] = "Type 3 Depth Charge Projector",
        ["Type 91 Armor-Piercing (AP) Shell"] = "Type 91 Armor Piercing Shell",
        ["Type 1 Armor-Piercing (AP) Shell"] = "Type 1 Armor Piercing Shell",
        ["Improved Steam Turbine"] = "Improved Kanhon Type Turbine",
        ["Enhanced Steam Boiler"] = "Enhanced Kanhon Type Boiler",
        ["New High Pressure-Temperature Steam Boiler"] = "New Model High Temperature High Pressure Boiler",
        ["Anti-torpedo Bulge (Medium)"] = "Extension Bulge (Medium)",
        ["Anti-torpedo Bulge (Large)"] = "Extension Bulge (Large)",
        ["Drum Canister"] = "Drum Canister (Transport Use)",
    }
    
    --Radar/sonar names without any special pieces
    name = name:gsub("^Type%s(.+)%sRADAR$", "No. %1 Radar")
    
    name = names[name] or name
    return name
end

return NanaminFunctions