🌟現在、鉄壁 鉄壁ヘッドショットには対応済みです。
鉄壁HSは通常HSと同じダメージになります。LMG及びDMR、チャージライフル、ハンマーポイント弾を除き、すべてのダメージ値が一致していることを確認しています。

「モジュール:WeaponNavbox」の版間の差分

提供:Apex Data
ナビゲーションに移動 検索に移動
(分類による武器一覧の生成ロジックを追加)
(武器が存在しない場合にエラーが出る不具合の修正)
 
(同じ利用者による、間の22版が非表示)
1行目: 1行目:
local p = {}
local p = {}


local formatter -- lazily initialized
local table = require('Module:TableExtensions')
local aw = require('Module:Utility/Library')
local iu = require('Module:Utility/Image')
local nu = require('Module:Utility/Name')
local getArgs -- lazily initialized


local function stringStarts(str, start)
local function createRow(tbl, text)
return string.sub(str, 1, string.len(start)) == start
return tbl:tag('tr')
end
 
local TypeDict = {
assault_rifle = "アサルトライフル",
sub_machine_gun = "サブマシンガン",
light_machine_gun = "ライトマシンガン",
sniper = "スナイパーライフル",
shotgun = "ショットガン",
pistol = "ピストル",
}
local function createRowForType(tbl, name, weaponsByType)
local type = TypeDict[name]
local page = '武器#' .. type
local list = tbl:tag('tr')
:tag('th')
:tag('th')
:wikitext('[[' .. page .. '|' .. type .. ']]')
:wikitext(text)
:done()
:done()
:tag('td')
:tag('td')
:addClass('tpl-navbox-list')
:tag('ul')
:tag('ul')
:addClass('tpl-navbox-list')
end
for _, value in ipairs(weaponsByType) do
 
list:tag('li')
local function createRowForType(lang)
:wikitext(string.format('[[%s]]', value))
return function(tbl, name, num)
local type = nu.type(name, lang, num)
return createRow(tbl, type)
end
end
end
end


local AmmoDict = {
local function createRowForAmmo(lang)
light = "ライト",
return function(tbl, name)
heavy = "ヘビー",
local item
energy = "エネルギー",
local opts = { size = 20 }
sniper = "スナイパー",
if name == 'special' then
shotgun = "ショットガン",
item = string.format(
}
'%s <span class="text-ammo-special">%s</span>',
local function createRowForAmmo(tbl, name, weaponsByAmmo)
iu.ammo('special_sniper', opts),
local item
nu.type('supply_drop', lang))
if name == 'special' then
else
item = formatter:ammo('専用スナイパー', 20) .. ' ケアパッケージ'
item = string.format(
else
'%s <span class="text-ammo-%s">%s</span>',
local ammo = AmmoDict[name]
iu.ammo(name, opts),
local page = '弾による武器一覧#' .. ammo .. 'アモ'
name,
item = formatter:ammo(ammo, 20, page) .. ' [[' .. page .. '|' .. ammo .. 'アモ]]'
nu.ammo(name, lang))
end
return createRow(tbl, item)
end
end
end
local list = tbl:tag('tr')
 
:tag('th')
local function getCreateRowForNumbers(fmt)
:wikitext(item)
return function(tbl, num)
:done()
return createRow(tbl, fmt(num))
:tag('td')
:tag('ul')
:addClass('tpl-navbox-list')
for _, value in ipairs(weaponsByAmmo) do
list:tag('li')
:wikitext(string.format('[[%s]]', value))
end
end
end
end


local function renderNavbox(keys, names, fn)
local function renderNavbox(keys, names, fn, stat, fmt)
fmt = fmt or function(value, name)
return string.format('[[%s]]', value)
end
local tbl = mw.html.create('table')
local tbl = mw.html.create('table')
:addClass('tpl-navbox-table')
:addClass('tpl-navbox-table')
71行目: 65行目:
:wikitext('武器')
:wikitext('武器')
for _, name in ipairs(keys) do
for _, name in ipairs(keys) do
fn(tbl, name, names[name])
local target = names[name]
if target then
local list = fn(tbl, name, #target)
for _, value in ipairs(target) do
list:tag('li')
:wikitext(fmt(value, stat))
end
end
end
end
return tbl:done()
return tbl:done()
end
end


local function renderNavboxByType()
local function formatAmmoText(value, stat)
local ammoraw = stat[value].ammo
local ammo
if aw.stringstarts(ammoraw, 'special_') then
ammo = 'special'
else
ammo = ammoraw
end
return string.format('[[%s|<span class="text-ammo text-ammo-%s">%s</span>]]', value, ammo, value)
end
 
local function renderNavboxByType(args)
local stat = mw.loadData('Module:Stat/Weapon')
local stat = mw.loadData('Module:Stat/Weapon')
87行目: 99行目:
end
end
return renderNavbox(
return renderNavbox(
{ 'assault_rifle', 'sub_machine_gun', 'light_machine_gun', 'sniper', 'shotgun', 'pistol' },
{ 'assault_rifle', 'sub_machine_gun', 'light_machine_gun', 'marksman_weapon', 'sniper', 'shotgun', 'pistol', 'ultimate' },
weaponsByTypes, createRowForType)
weaponsByTypes, createRowForType(args.lang), stat, formatAmmoText)
end
end


local function renderNavboxByAmmo()
local function renderNavboxByAmmo(args)
local stat = mw.loadData('Module:Stat/Weapon')
local stat = mw.loadData('Module:Stat/Weapon')
97行目: 109行目:
for key, value in pairs(stat) do
for key, value in pairs(stat) do
local target
local target
if stringStarts(value.ammo, "special_") then
if aw.stringstarts(value.ammo, "special_") then
if weaponsByAmmos.special == nil then
if weaponsByAmmos.special == nil then
weaponsByAmmos.special = {}
weaponsByAmmos.special = {}
111行目: 123行目:
end
end
return renderNavbox(
return renderNavbox(
{ 'light', 'heavy', 'energy', 'sniper', 'shotgun', 'special' },
{ 'light', 'heavy', 'energy', 'sniper', 'shotgun', 'arrows', 'special' },
weaponsByAmmos, createRowForAmmo)
weaponsByAmmos, createRowForAmmo(args.lang))
end
 
local function renderNavboxByNumbers(args, selector, formatter)
local stat = mw.loadData('Module:Stat/Weapon')
local weaponsByNumbers = {}
for key, value in pairs(stat) do
local num = selector(value)
if weaponsByNumbers[num] == nil then
weaponsByNumbers[num] = {}
end
table.insert(weaponsByNumbers[num], key)
end
local keys = table.keys(weaponsByNumbers)
table.sort(keys)
return renderNavbox(
keys,
weaponsByNumbers, getCreateRowForNumbers(formatter), stat, formatAmmoText)
end
 
local function preload(frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
local args = getArgs(frame)
args.lang = args.lang or 'ja'
return args
end
end


function p.bytype(frame)
function p.bytype(frame)
formatter = require('Module:Utility/Formatter').new(frame)
local args = preload(frame)
return tostring(renderNavboxByType(args))
return tostring(renderNavboxByType(args))
end
end


function p.byammo(frame)
function p.byammo(frame)
formatter = require('Module:Utility/Formatter').new(frame)
local args = preload(frame)
return tostring(renderNavboxByAmmo(args))
return tostring(renderNavboxByAmmo(args))
end
local function formatMultiplier(num)
return string.format('%s倍', num)
end
function p.byhsmul(frame)
local args = preload(frame)
local selector = function(stat)
return stat.damage.headshot_charged or stat.damage_head_scale or 2
end
return tostring(renderNavboxByNumbers(args, selector, formatMultiplier))
end
function p.bylsmul(frame)
local args = preload(frame)
local selector = function(stat)
return stat.damage.legshot_charged or stat.damage_legs_scale or 0.8
end
return tostring(renderNavboxByNumbers(args, selector, formatMultiplier))
end
end


return p
return p

2022年8月10日 (水) 12:25時点における最新版

このモジュールについての説明文ページを モジュール:WeaponNavbox/doc に作成できます

local p = {}

local table = require('Module:TableExtensions')
local aw = require('Module:Utility/Library')
local iu = require('Module:Utility/Image')
local nu = require('Module:Utility/Name')
local getArgs -- lazily initialized

local function createRow(tbl, text)
	return tbl:tag('tr')
		:tag('th')
			:wikitext(text)
			:done()
		:tag('td')
			:addClass('tpl-navbox-list')
			:tag('ul')
end

local function createRowForType(lang)
	return function(tbl, name, num)
		local type = nu.type(name, lang, num)
		return createRow(tbl, type)
	end
end

local function createRowForAmmo(lang)
	return function(tbl, name)
		local item
		local opts = { size = 20 }
		if name == 'special' then
			item = string.format(
				'%s <span class="text-ammo-special">%s</span>',
				iu.ammo('special_sniper', opts),
				nu.type('supply_drop', lang))
		else
			item = string.format(
				'%s <span class="text-ammo-%s">%s</span>',
				iu.ammo(name, opts),
				name,
				nu.ammo(name, lang))
		end
		
		return createRow(tbl, item)
	end
end

local function getCreateRowForNumbers(fmt)
	return function(tbl, num)
		return createRow(tbl, fmt(num))
	end
end

local function renderNavbox(keys, names, fn, stat, fmt)
	fmt = fmt or function(value, name)
		return string.format('[[%s]]', value)
	end
	
	local tbl = mw.html.create('table')
			:addClass('tpl-navbox-table')
			:addClass('tpl-navbox-table-containstitle')
	tbl:tag('tr')
		:tag('th')
			:attr('colspan', 2)
			:addClass('tpl-navbox-table-title')
			:wikitext('武器')
	for _, name in ipairs(keys) do
		local target = names[name]
		if target then
			local list = fn(tbl, name, #target)
			for _, value in ipairs(target) do
				list:tag('li')
					:wikitext(fmt(value, stat))
			end
		end
	end
	return tbl:done()
end

local function formatAmmoText(value, stat)
	local ammoraw = stat[value].ammo
	local ammo
	if aw.stringstarts(ammoraw, 'special_') then
		ammo = 'special'
	else
		ammo = ammoraw
	end
	return string.format('[[%s|<span class="text-ammo text-ammo-%s">%s</span>]]', value, ammo, value)
end

local function renderNavboxByType(args)
	local stat = mw.loadData('Module:Stat/Weapon')
	
	local weaponsByTypes = {}
	for key, value in pairs(stat) do
		if weaponsByTypes[value.category] == nil then
			weaponsByTypes[value.category] = {}
		end
		table.insert(weaponsByTypes[value.category], key)
	end
	return renderNavbox(
		{ 'assault_rifle', 'sub_machine_gun', 'light_machine_gun', 'marksman_weapon', 'sniper', 'shotgun', 'pistol', 'ultimate' },
		weaponsByTypes, createRowForType(args.lang), stat, formatAmmoText)
end

local function renderNavboxByAmmo(args)
	local stat = mw.loadData('Module:Stat/Weapon')
	
	local weaponsByAmmos = {}
	for key, value in pairs(stat) do
		local target
		if aw.stringstarts(value.ammo, "special_") then
			if weaponsByAmmos.special == nil then
				weaponsByAmmos.special = {}
			end
			target = weaponsByAmmos.special
		else
			if weaponsByAmmos[value.ammo] == nil then
				weaponsByAmmos[value.ammo] = {}
			end
			target = weaponsByAmmos[value.ammo]
		end
		table.insert(target, key)
	end
	return renderNavbox(
		{ 'light', 'heavy', 'energy', 'sniper', 'shotgun', 'arrows', 'special' },
		weaponsByAmmos, createRowForAmmo(args.lang))
end

local function renderNavboxByNumbers(args, selector, formatter)
	local stat = mw.loadData('Module:Stat/Weapon')
	
	local weaponsByNumbers = {}
	for key, value in pairs(stat) do
		local num = selector(value)
		if weaponsByNumbers[num] == nil then
			weaponsByNumbers[num] = {}
		end
		table.insert(weaponsByNumbers[num], key)
	end
	
	local keys = table.keys(weaponsByNumbers)
	table.sort(keys)
	return renderNavbox(
		keys,
		weaponsByNumbers, getCreateRowForNumbers(formatter), stat, formatAmmoText)
end

local function preload(frame)
	if not getArgs then
		getArgs = require('Module:Arguments').getArgs
	end
	
	local args = getArgs(frame)
	args.lang = args.lang or 'ja'
	return args
end

function p.bytype(frame)
	local args = preload(frame)
	return tostring(renderNavboxByType(args))
end

function p.byammo(frame)
	local args = preload(frame)
	return tostring(renderNavboxByAmmo(args))
end

local function formatMultiplier(num)
	return string.format('%s倍', num)
end

function p.byhsmul(frame)
	local args = preload(frame)
	local selector = function(stat)
		return stat.damage.headshot_charged or stat.damage_head_scale or 2
	end
	return tostring(renderNavboxByNumbers(args, selector, formatMultiplier))
end

function p.bylsmul(frame)
	local args = preload(frame)
	local selector = function(stat)
		return stat.damage.legshot_charged or stat.damage_legs_scale or 0.8
	end
	return tostring(renderNavboxByNumbers(args, selector, formatMultiplier))
end

return p