Warframe Wiki
Nie podano opisu zmian
Nie podano opisu zmian
Linia 73: Linia 73:
 
return bullet_speed
 
return bullet_speed
 
else
 
else
return bullet_speed .. "m/s"
+
return bullet_speed and bullet_speed .. "m/s" -- Ensure bullet_speed is not nil
 
end
 
end
 
end,
 
end,
 
["zasieg"] = function(weapon_name)
 
["zasieg"] = function(weapon_name)
return get_weapon_data(weapon_name).zasieg .. "m"
+
local range = get_weapon_data(weapon_name).zasieg
  +
return range and range .. "m"
 
end,
 
end,
 
["halasliwosc"] = function(weapon_name)
 
["halasliwosc"] = function(weapon_name)
Linia 91: Linia 92:
 
end,
 
end,
 
["wielostrzal"] = function(weapon_name)
 
["wielostrzal"] = function(weapon_name)
local pelletCount = get_weapon_data(weapon_name).wielostrzal
+
local pellet_count = get_weapon_data(weapon_name).wielostrzal
return pelletCount and pelletCount .. " odłamków"
+
return pellet_count and pellet_count .. " odłamków" -- Ensure pellet_count is not nil
 
end,
 
end,
 
["celnosc"] = function(weapon_name)
 
["celnosc"] = function(weapon_name)
Linia 104: Linia 105:
 
end,
 
end,
 
["magazynek"] = function(weapon_name)
 
["magazynek"] = function(weapon_name)
return get_weapon_data(weapon_name).magazynek .. " pocisków"
+
local mag = get_weapon_data(weapon_name).magazynek
  +
return mag and mag .. " pocisków" -- Ensure mag is not nil
 
end,
 
end,
 
["maks_amunicja"] = function(weapon_name)
 
["maks_amunicja"] = function(weapon_name)
return get_weapon_data(weapon_name).maks_amunicja .. " pocisków"
+
local max_ammo = get_weapon_data(weapon_name).maks_amunicja
  +
return max_ammo and max_ammo .. " pocisków" -- Ensure max_ammo is not nil
 
end,
 
end,
 
["przeladowanie"] = function(weapon_name)
 
["przeladowanie"] = function(weapon_name)
return get_weapon_data(weapon_name).przeladowanie .. "s"
+
local reload = get_weapon_data(weapon_name).przeladowanie
  +
return reload and reload .. "s" -- Ensure reload is not nil
 
end,
 
end,
 
["normal_obrazenia"] = function(weapon_name)
 
["normal_obrazenia"] = function(weapon_name)

Wersja z 16:12, 8 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 function get_weapon_data(weapon_name)
    return weapon_data["weapons"][weapon_name] or {}
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 get_damage_bias(damage)
    local max_damage = 0
    local max_damage_type = nil
    local total_damage = utils.sum(unpack(damage))
    for k, v in 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 getters = {
    -- Image
    ["obraz"] = function(weapon_name)
        local image = get_weapon_data(weapon_name).obraz
        if image ~= nil then
            return image
        else
            return "Panel.png"
        end
    end,

    -- Headers
    ["normal_attack_header"] = function(weapon_name)
        return get_weapon_data(weapon_name)["normal_attack"]["header"]
    end,
    ["secondary_attack_header"] = function(weapon_name)
        return get_weapon_data(weapon_name)["secondary_attack"]["header"]
    end,

    -- Fields
    ["mistrzostwo"] = function(weapon_name)
        local mastery = get_weapon_data(weapon_name).mistrzostwo
        if(mastery ~= nil) then
            return mastery
        else
            return 0
        end
    end,
    ["kategoria"] = function(weapon_name)
        return get_weapon_data(weapon_name).kategoria
    end,
    ["typ"] = function(weapon_name)
        return get_weapon_data(weapon_name).typ
    end,
    ["tryb"] = function(weapon_name)
        return get_weapon_data(weapon_name).tryb
    end,
    ["typ_amunicji"] = function(weapon_name)
        return get_weapon_data(weapon_name).typ_amunicji
    end,
    ["szybkosc_pocisku"] = function(weapon_name)
        local bullet_speed = get_weapon_data(weapon_name).normal_attack.szybkosc_pocisku
        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,
    ["zasieg"] = function(weapon_name)
        local range = get_weapon_data(weapon_name).zasieg
        return range and range .. "m"
    end,
    ["halasliwosc"] = function(weapon_name)
        return get_weapon_data(weapon_name).halasliwosc
    end,
    ["szybkostrzelnosc"] = function(weapon_name)
        local weap_data = get_weapon_data(weapon_name)
        if(is_melee(weapon_name)) then
            return weap_data.normal_attack.szybkostrzelnosc
        else
            return weap_data.normal_attack.szybkostrzelnosc .. " pocisków na sekundę"
        end
    end,
    ["wielostrzal"] = function(weapon_name)
        local pellet_count = get_weapon_data(weapon_name).wielostrzal
        return pellet_count and pellet_count .. " odłamków" -- Ensure pellet_count is not nil
    end,
    ["celnosc"] = function(weapon_name)
        return get_weapon_data(weapon_name).celnosc
    end,
    ["przyblizenie"] = function(weapon_name)
        return get_weapon_data(weapon_name).przyblizenie
    end,
    ["rozrzut"] = function(weapon_name)
        return get_weapon_data(weapon_name).rozrzut
    end,
    ["magazynek"] = function(weapon_name)
        local mag = get_weapon_data(weapon_name).magazynek
        return mag and mag .. " pocisków" -- Ensure mag is not nil
    end,
    ["maks_amunicja"] = function(weapon_name)
        local max_ammo = get_weapon_data(weapon_name).maks_amunicja
        return max_ammo and max_ammo .. " pocisków" -- Ensure max_ammo is not nil
    end,
    ["przeladowanie"] = function(weapon_name)
        local reload = get_weapon_data(weapon_name).przeladowanie
        return reload and reload .. "s" -- Ensure reload is not nil
    end,
    ["normal_obrazenia"] = function(weapon_name)
        local damage = get_weapon_data(weapon_name).normal_attack.normal_obrazenia
        local damage_bias, damage_bias_type = get_damage_bias(damage)
        return utils.sum(unpack(damage)) .. " (" .. utils.to_percent(damage_bias) .. icon.proc(damage_bias_type) ..")"
    end,
    ["mornal_zywiol"] = function(weapon_name)
        return get_weapon_data(weapon_name).normal_attack.zywiol
    end,
    ["normal_zywiol_typ"] = function(weapon_name)
        return get_weapon_data(weapon_name).normal_attack.zywiol_typ
    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[attack_type:lower() .. "_" .. field_name:lower()](weapon_name)
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]
    
    -- 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