Module:Weapon: Difference between revisions

From Inkipedia, the Splatoon wiki
(untested Template:Weapon implementation)
 
m (Protected "Module:Weapon": Widely transcluded template ([Edit=Allow only autoconfirmed users] (indefinite) [Move=Allow only autoconfirmed users] (indefinite)))
 
(13 intermediate revisions by 2 users not shown)
Line 1: Line 1:
local mGameShortened = require('Module:GameShortened')
local p = {}
local p = {}
local gameShortened = require("Module:GameShortened")


function p.getFullName(name)
-- Local function for switch-like behavior to get full name
     local bomb_rush = "Bomb Rush"
local function getFullName(name)
    local burst = "Burst Bomb"
     local case_table = {
    local splat = "Splat Bomb"
        ["Bomb Rush"] = "Bomb Rush Splat Bomb",
    local suction = "Suction Bomb"
         ["Bomb Rush (Burst Bomb)"] = "Bomb Rush Burst Bomb",
    local seeker = "Seeker"
         ["Bomb Rush (Splat Bomb)"] = "Bomb Rush Splat Bomb",
    local bomb_rush_burst = bomb_rush .. " " .. burst
         ["Bomb Rush (Suction Bomb)"] = "Bomb Rush Suction Bomb",
    local bomb_rush_splat = bomb_rush .. " " .. splat
         ["Bomb Rush (Seeker)"] = "Bomb Rush Seeker",
    local bomb_rush_suction = bomb_rush .. " " .. suction
    local bomb_rush_seeker = bomb_rush .. " " .. seeker
    local result = {
        [bomb_rush_burst] = bomb_rush_burst,
         [bomb_rush_splat] = bomb_rush_splat,
        [bomb_rush_suction] = bomb_rush_suction,
        [bomb_rush_seeker] = bomb_rush_seeker,
        [bomb_rush] = bomb_rush_splat,
        [bomb_rush .. " (" .. burst .. ")"] = bomb_rush_burst,
         [bomb_rush .. " (" .. splat .. ")"] = bomb_rush_splat,
         [bomb_rush .. " (" .. suction .. ")"] = bomb_rush_suction,
         [bomb_rush .. " (" .. seeker .. ")"] = bomb_rush_seeker,
         ["Bomb Launcher"] = "Splat-Bomb Launcher",
         ["Bomb Launcher"] = "Splat-Bomb Launcher",
         ["Hero Gear"] = "Hero Shot Level 1",
         ["Hero Gear"] = "Hero Shot Level 1",
         ["?"] = "Random",
         ["?"] = "Random",
         ["??"] = "Random 2",
         ["??"] = "Random 2",
        ["Unknown"] = "Not Found"
     }
     }
     return result[name] or name
     return case_table[name] or name
end
end


function p.getLink(name, game_abbrev)
-- Local function for switch-like behavior to get link
    local bomb_rush = "Bomb Rush"
local function getLink(name, gameShort)
    local burst = "Burst Bomb"
-- If name starts with Bomb Rush
    local splat = "Splat Bomb"
if name:find("^Bomb Rush") then
    local suction = "Suction Bomb"
        return "Bomb Rush"
    local seeker = "Seeker"
end
    local bomb_rush_burst = bomb_rush .. " " .. burst
 
     local bomb_rush_splat = bomb_rush .. " " .. splat
     local case_table = {
    local bomb_rush_suction = bomb_rush .. " " .. suction
         ["Bomb Launcher"] = "Splat-Bomb Launcher",
    local bomb_rush_seeker = bomb_rush .. " " .. seeker
         ["Smallfry"] = "Smallfry (character)|Smallfry",
    local result = {
         [bomb_rush] = bomb_rush,
        [bomb_rush_burst] = bomb_rush,
        [bomb_rush_splat] = bomb_rush,
        [bomb_rush_suction] = bomb_rush,
        [bomb_rush_seeker] = bomb_rush,
        [bomb_rush .. " (" .. burst .. ")"] = bomb_rush,
        [bomb_rush .. " (" .. splat .. ")"] = bomb_rush,
         [bomb_rush .. " (" .. suction .. ")"] = bomb_rush,
        [bomb_rush .. " (" .. seeker .. ")"] = bomb_rush,
         ["Unarmed"] = "List of unarmed missions",
         ["Unarmed"] = "List of unarmed missions",
         ["Smallfry"] = "Smallfry (character)|Smallfry"
         ["?"] = gameShort == "S3" and "Salmon_Run_Next_Wave#Wildcard_rotation|Random" or "Salmon_Run#Wildcard_rotation|Random",
        ["??"] = gameShort == "S3" and "Salmon_Run_Next_Wave#Wildcard_rotation|Random Rare" or "Salmon_Run#Rare_weapon-only_rotation|Random Rare"
     }
     }
     if game_abbrev == 'S3' then
     return case_table[name] or name
    result['?'] = "Salmon Run Next Wave#Wildcard rotation|Random"
end
    result['??'] = "Salmon Run Next Wave#Wildcard rotation|Random Rare"
 
else
local function extractArg(args, namedKey, positionalIndex, defaultValue)
result['?'] = "Salmon Run#Wildcard rotation|Random"
     return args[namedKey] or args[positionalIndex] or defaultValue
result['??'] = "Salmon Run#Rare weapon-only rotation|Random Rare"
end
     return result[name] or name
end
end


function p.main(frame)
function p.main(frame)
local game = frame:getParent().args[1] or frame:getParent().args['game']
-- Extract args from frame
local category = frame:getParent().args[2] or frame:getParent().args['category']
    local parentArgs = frame:getParent().args
local name = frame:getParent().args[3] or frame:getParent().args['name']
    local icononly = parentArgs['icononly'] or parentArgs[4] == "icononly" or parentArgs[5] == "icononly" or false
local size = frame:getParent().args[4] or frame:getParent().args['size'] or "24px"
    local size = parentArgs['size'] or  
local icononly = frame:getParent().args[5] or frame:getParent().args['icononly'] or false
                (parentArgs[4] ~= "icononly" and parentArgs[4]) or  
local variant = frame:getParent().args[6] or frame:getParent().args['var']
                (parentArgs[5] ~= "icononly" and parentArgs[5]) or "24"
 
local abbrev = mGameShortened.main(game)
    local args = {
local full_name = p.getFullName(name)
        game = extractArg(parentArgs, 'game', 1, ""),
local weapon_file = "[[File:" .. abbrev .. " Weapon " .. category .. " " .. full_name
        category = extractArg(parentArgs, 'category', 2, ""),
    if variant then
        name = extractArg(parentArgs, 'name', 3, ""),
    weapon_file = weapon_file .. "_" .. variant
        icononly = icononly,
    end
        size = size,
weapon_file = weapon_file .. ".png|" .. size
        variant = extractArg(parentArgs, 'var', nil, "")
if not name == "None" then
    }
weapon_file = weapon_file .. "|link=" .. p.getLink(name, abbrev)
 
end
    return p.getWeapon(args)
end
weapon_file = weapon_file .. "]]"
 
-- Main function
if not icononly then
function p.getWeapon(args)
weapon_file = weapon_file .. " [[" .. p.getLink(name, abbrev) .. "]]"
    local gameShort = gameShortened.getGame(args.game)
end
 
return weapon_file
    -- Construct the file name using getFullName()
    local fileName = string.format("%s_Weapon_%s_%s%s.png", gameShort, args.category, getFullName(args.name), (args.variant and args.variant ~= "" and ("_" .. args.variant) or ""))
 
    -- Construct the output
    local output = string.format('[[File:%s|%spx|link=%s]]', fileName, args.size or 24, getLink(args.name, gameShort))
 
    if not args.icononly then
        -- Add textual representation
        output = output .. " [[" .. getLink(args.name, gameShort) .. "]]"
    end
 
    return output
end
end


return p
return p

Latest revision as of 07:12, 11 February 2024

Displays an inline weapon icon with a text link.

Usage

{{Weapon|<game>|<category>|<name>|<size>|<icononly>}}

Parameters

Parameter Type Status Description
game Unnamed Required The game that the ability belongs to. Must be one of the following:
  • S for Splatoon
  • S2 for Splatoon 2
  • S3 for Splatoon 3
category Unnamed Required The type of weapon. Must be one of the following:
  • Main
  • Sub
  • Special
name Unnamed Required The English name of the weapon.
  • For Bomb Rush, specify the bomb type after "Bomb Rush", with or without parentheses like Bomb Rush Burst Bomb or Bomb Rush (Burst Bomb).
  • For random weapons in Salmon Run, simply use a question mark: ? for the green random weapon and ?? for the yellow random weapon.
size Unnamed Optional The pixel width for the icon. The default size is 24.
icononly Unnamed Optional If present, the text label will be omitted.
var Named Optional If present, the variant name will be appended to the file name, to choose between different variants of the same weapon's icons.

Examples

Markup

* {{Weapon|S|Special|Bomb Rush}}
* {{Weapon|S|Special|Bomb Rush (Seeker)|48}}
* {{Weapon|S2|Main|Splattershot|icononly}}
* {{Weapon|S2|Main|Splattershot|48|icononly}}
* {{Weapon|S2|Main|?}}
* {{Weapon|S2|Main|??}}
* {{Weapon|S3|Main|?}}
* {{Weapon|S3|Main|??}}
* {{Weapon|S3|Main|Splattershot|icononly}}
* {{Weapon|S3|Main|Splattershot|48|icononly}}
* {{Weapon|S|Sub|Splat Bomb|icononly}}
* {{Weapon|S2|Sub|Splat Bomb|icononly}}
* {{Weapon|S3|Sub|Splat Bomb|icononly}}
* {{Weapon|S|Special|Bomb Rush Splat Bomb|icononly}}
* {{Weapon|S|Special|Killer Wail}} 
* {{Weapon|S3|Main|Hero Shot Replica|var=2D Current|icononly}}

Output


local p = {}
local gameShortened = require("Module:GameShortened")

-- Local function for switch-like behavior to get full name
local function getFullName(name)
    local case_table = {
        ["Bomb Rush"] = "Bomb Rush Splat Bomb",
        ["Bomb Rush (Burst Bomb)"] = "Bomb Rush Burst Bomb",
        ["Bomb Rush (Splat Bomb)"] = "Bomb Rush Splat Bomb",
        ["Bomb Rush (Suction Bomb)"] = "Bomb Rush Suction Bomb",
        ["Bomb Rush (Seeker)"] = "Bomb Rush Seeker",
        ["Bomb Launcher"] = "Splat-Bomb Launcher",
        ["Hero Gear"] = "Hero Shot Level 1",
        ["?"] = "Random",
        ["??"] = "Random 2",
        ["Unknown"] = "Not Found"
    }
    return case_table[name] or name
end

-- Local function for switch-like behavior to get link
local function getLink(name, gameShort)
	-- If name starts with Bomb Rush
	if name:find("^Bomb Rush") then
        return "Bomb Rush"
	end

    local case_table = {
        ["Bomb Launcher"] = "Splat-Bomb Launcher",
        ["Smallfry"] = "Smallfry (character)|Smallfry",
        ["Unarmed"] = "List of unarmed missions",
        ["?"] = gameShort == "S3" and "Salmon_Run_Next_Wave#Wildcard_rotation|Random" or "Salmon_Run#Wildcard_rotation|Random",
        ["??"] = gameShort == "S3" and "Salmon_Run_Next_Wave#Wildcard_rotation|Random Rare" or "Salmon_Run#Rare_weapon-only_rotation|Random Rare"
    }
    return case_table[name] or name
end

local function extractArg(args, namedKey, positionalIndex, defaultValue)
    return args[namedKey] or args[positionalIndex] or defaultValue
end

function p.main(frame)
	-- Extract args from frame
    local parentArgs = frame:getParent().args
    local icononly = parentArgs['icononly'] or parentArgs[4] == "icononly" or parentArgs[5] == "icononly" or false
    local size = parentArgs['size'] or 
                 (parentArgs[4] ~= "icononly" and parentArgs[4]) or 
                 (parentArgs[5] ~= "icononly" and parentArgs[5]) or "24"

    local args = {
        game = extractArg(parentArgs, 'game', 1, ""),
        category = extractArg(parentArgs, 'category', 2, ""),
        name = extractArg(parentArgs, 'name', 3, ""),
        icononly = icononly,
        size = size,
        variant = extractArg(parentArgs, 'var', nil, "")
    }

    return p.getWeapon(args)
end

-- Main function
function p.getWeapon(args)
    local gameShort = gameShortened.getGame(args.game)

    -- Construct the file name using getFullName()
    local fileName = string.format("%s_Weapon_%s_%s%s.png", gameShort, args.category, getFullName(args.name), (args.variant and args.variant ~= "" and ("_" .. args.variant) or ""))

    -- Construct the output
    local output = string.format('[[File:%s|%spx|link=%s]]', fileName, args.size or 24, getLink(args.name, gameShort))

    if not args.icononly then
        -- Add textual representation
        output = output .. " [[" .. getLink(args.name, gameShort) .. "]]"
    end

    return output
end

return p