Warframe Wiki
Nie podano opisu zmian
Nie podano opisu zmian
Linia 1: Linia 1:
-- FIX: 2 pocisków
 
 
 
--
 
--
 
local weapon_data = mw.loadData("Module:Weapon/data")
 
local weapon_data = mw.loadData("Module:Weapon/data")
Linia 106: Linia 104:
 
return weap_data["normal_attack"]["fire_rate"]
 
return weap_data["normal_attack"]["fire_rate"]
 
else
 
else
return weap_data["normal_attack"]["fire_rate"] .. " pocisków na sekundę"
+
return weap_data["normal_attack"]["fire_rate"] .. " " .. utils.make_polish_plural("pocisków", weap_data["normal_attack"]["fire_rate"]) .. " na sekundę"
 
end
 
end
 
end,
 
end,
 
["multishot"] = function(weapon_name)
 
["multishot"] = function(weapon_name)
 
local pellet_count = get_weapon_data(weapon_name)["normal_attack"]["multishot"]
 
local pellet_count = get_weapon_data(weapon_name)["normal_attack"]["multishot"]
return pellet_count and pellet_count .. " odłamków" -- Ensure pellet_count is not nil
+
return pellet_count and pellet_count .. " " .. utils.make_polish_plural("odłamków", pellet_count) -- Ensure pellet_count is not nil
 
end,
 
end,
 
["accuracy"] = function(weapon_name)
 
["accuracy"] = function(weapon_name)
Linia 126: Linia 124:
 
["mag_capacity"] = function(weapon_name)
 
["mag_capacity"] = function(weapon_name)
 
local mag = get_weapon_data(weapon_name)["mag_capacity"]
 
local mag = get_weapon_data(weapon_name)["mag_capacity"]
return mag and mag .. " pocisków" -- Ensure mag is not nil
+
return mag and mag .. " " .. utils.make_polish_plural("pocisków", mag) -- Ensure mag is not nil
 
end,
 
end,
 
["max_ammo"] = function(weapon_name)
 
["max_ammo"] = function(weapon_name)
 
local max_ammo = get_weapon_data(weapon_name)["max_ammo"]
 
local max_ammo = get_weapon_data(weapon_name)["max_ammo"]
return max_ammo and max_ammo .. " pocisków" -- Ensure max_ammo is not nil
+
return max_ammo and max_ammo .. " " .. utils.make_polish_plural("pocisków", max_ammo) -- Ensure max_ammo is not nil
 
end,
 
end,
 
["reload"] = function(weapon_name)
 
["reload"] = function(weapon_name)

Wersja z 07:23, 9 sie 2018

Dokumentacja dla tego modułu może zostać utworzona pod nazwą Moduł:Weapon/opis

--
local weapon_data = mw.loadData("Module:Weapon/data")
local icon = require("Module:I")
local utils = require("Module:Utils")
local module_export = {}

local physical_damage_types = { "impact", "puncture", "slash" }
local elemental_damage_types = { "" }
local weapon_names = utils.table_keys(weapon_data["weapons"])

local function get_weapon_data(weapon_name)
    return weapon_data["weapons"][weapon_name] or {}
end

local function is_weapon(name)
    return utils.contains(weapon_names, name)
end

local function is_melee(weapon_name)
    local weap_data = get_weapon_data(weapon_name)
    return weap_data.typ == "Broń Biała Archwing" or weap_data.typ == "Broń Biała"
end

local function is_physical(val)
    return utils.contains(physical_damage_types, val)
end

local function is_elemental(val)
    return not is_physical(val)
end

local function get_damage_bias(damage)
    local max_damage = 0
    local max_damage_type = nil
    local total_damage = utils.sum(utils.unpack_any_table(damage))
    for k, v in pairs(damage) do
        if(max_damage < v) then
            max_damage = v
            max_damage_type = k
        end
    end

    return max_damage / total_damage, max_damage_type
end

local function get_elemental_type(weapon_name, attack_type)
    local data = get_weapon_data(weapon_name)[attack_type .. "_attack"]
    if(data == nil or data["damage"] == nil) then return nil end
    for k, v in pairs(data["damage"]) do
        if is_elemental(k) then 
            return k
        end
    end
    return nil -- no elemental damage
end

local getters = {
    -- Image
    ["image"] = function(weapon_name)
        local image = get_weapon_data(weapon_name)["image"]
        return image or "Panel.png"
    end,

    -- Headers
    ["header"] = function(weapon_name, type)
        return (get_weapon_data(weapon_name)[type .. "_attack"] or {})["header"]
    end,

    -- Fields
    ["mastery"] = function(weapon_name)
        local mastery = get_weapon_data(weapon_name)["mastery"]
        return mastery or 0
    end,
    ["category"] = function(weapon_name)
        return get_weapon_data(weapon_name)["category"]
    end,
    ["type"] = function(weapon_name)
        return get_weapon_data(weapon_name)["type"]
    end,
    ["trigger"] = function(weapon_name)
        return get_weapon_data(weapon_name)["trigger"]
    end,
    ["ammo_type"] = function(weapon_name)
        return get_weapon_data(weapon_name)["ammo_type"]
    end,
    ["projectile_speed"] = function(weapon_name)
        local bullet_speed = get_weapon_data(weapon_name)["normal_attack"]["projectile_speed"]
        if(bullet_speed == "Hit-Scan") then
            return bullet_speed
        else
            return bullet_speed and bullet_speed .. "m/s" -- Ensure bullet_speed is not nil
        end
    end,
    ["range"] = function(weapon_name)
        local range = get_weapon_data(weapon_name)["range"]
        return range and range .. "m"
    end,
    ["noise_level"] = function(weapon_name)
        return get_weapon_data(weapon_name)["noise_level"]
    end,
    ["fire_rate"] = function(weapon_name)
        local weap_data = get_weapon_data(weapon_name)
        if(is_melee(weapon_name)) then
            return weap_data["normal_attack"]["fire_rate"]
        else
            return weap_data["normal_attack"]["fire_rate"] .. " " .. utils.make_polish_plural("pocisków", weap_data["normal_attack"]["fire_rate"]) .. " na sekundę"
        end
    end,
    ["multishot"] = function(weapon_name)
        local pellet_count = get_weapon_data(weapon_name)["normal_attack"]["multishot"]
        return pellet_count and pellet_count .. " " .. utils.make_polish_plural("odłamków", pellet_count) -- Ensure pellet_count is not nil
    end,
    ["accuracy"] = function(weapon_name)
        return get_weapon_data(weapon_name)["normal_attack"]["accuracy"]
    end,
    ["zoom"] = function(weapon_name)
        local zoom = get_weapon_data(weapon_name)["zoom"]
        if(type(zoom) == "table") then
            return utils.table_concat(zoom, '<br>')
        else
            return get_weapon_data(weapon_name)["zoom"]
        end
    end,
    ["mag_capacity"] = function(weapon_name)
        local mag = get_weapon_data(weapon_name)["mag_capacity"]
        return mag and mag .. " " .. utils.make_polish_plural("pocisków", mag) -- Ensure mag is not nil
    end,
    ["max_ammo"] = function(weapon_name)
        local max_ammo = get_weapon_data(weapon_name)["max_ammo"]
        return max_ammo and max_ammo .. " " .. utils.make_polish_plural("pocisków", max_ammo) -- Ensure max_ammo is not nil
    end,
    ["reload"] = function(weapon_name)
        local reload = get_weapon_data(weapon_name)["normal_attack"]["reload"]
        return reload and reload .. "s" -- Ensure reload is not nil
    end,
    ["spool"] = function(weapon_name)
        return get_weapon_data(weapon_name)["spool"];
    end,
    ["damage"] = function(weapon_name, attack_type)
        local damage = (get_weapon_data(weapon_name)[attack_type .. "_attack"] or {})["damage"]
        if(damage == nil) then return nil end
        local damage_bias, damage_bias_attack_type = get_damage_bias(damage)
        return utils.sum(utils.unpack_any_table(damage)) .. " (" .. icon.proc(utils.proc_to_polish(damage_bias_attack_type)) .. " " .. utils.to_percent(damage_bias) ..")"
    end,
    ["elemental_type"] = get_elemental_type,
    ["elemental"] = function(weapon_name, attack_type)
        local data = get_weapon_data(weapon_name)[attack_type .. "_attack"] or {}
        local element_type = get_elemental_type(weapon_name, attack_type)
        return element_type and data["damage"][element_type]
    end,
    ["slash"] = function(weapon_name, attack_type)
        local data = get_weapon_data(weapon_name)[attack_type .. "_attack"] or {}
        return data["damage"]["slash"]
    end,
    ["impact"] = function(weapon_name, attack_type)
        local data = get_weapon_data(weapon_name)[attack_type .. "_attack"] or {}
        return data["damage"]["impact"]
    end,
    ["puncture"] = function(weapon_name, attack_type)
        local data = get_weapon_data(weapon_name)[attack_type .. "_attack"] or {}
        return data["damage"]["puncture"]
    end,
}

local function get_value(weapon_name, field_name)
    return getters[field_name:lower()](weapon_name)
end

local function get_attack_value(weapon_name, attack_type, field_name)
    return getters[field_name:lower()](weapon_name, attack_type:lower())
end

function module_export.get_value(frame)
    -- Unpack params
    local weapon_name = frame.args[1]
    local field_name = frame.args[2]
    local attack_field_name = frame.args[3]
    
    if(weapon_name == nil or not is_weapon(weapon_name)) then
        return nil
    end

    -- Offload work to local func
    if(attack_field_name ~= nil and attack_field_name ~= "") then
        return get_attack_value(weapon_name, field_name, attack_field_name)
    else
        return get_value(weapon_name, field_name);
    end
end

function module_export.is_melee(frame)
    return is_melee(frame.args[1])
end

return module_export