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

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

提供:Apex Data
ナビゲーションに移動 検索に移動
(弾薬のテンプレート変更による画像呼び出しの引数を変更)
(ヘッドショット倍率による武器一覧の生成ロジックを追加)
1行目: 1行目:
local p = {}
local p = {}


local aw = require('Module:Utility/Library')
local formatter -- lazily initialized
local formatter -- lazily initialized


local function stringStarts(str, start)
local function stringStarts(str, start)
return string.sub(str, 1, string.len(start)) == start
return string.sub(str, 1, string.len(start)) == start
end
local function createRow(tbl, text)
return tbl:tag('tr')
:tag('th')
:wikitext(text)
:done()
:tag('td')
:tag('ul')
:addClass('tpl-navbox-list')
end
end


15行目: 26行目:
pistol = "ピストル",
pistol = "ピストル",
}
}
local function createRowForType(tbl, name, weaponsByType)
local function createRowForType(tbl, name)
local type = TypeDict[name]
local type = TypeDict[name]
local list = tbl:tag('tr')
return createRow(tbl, type)
:tag('th')
:wikitext(type)
:done()
:tag('td')
:tag('ul')
:addClass('tpl-navbox-list')
for _, value in ipairs(weaponsByType) do
list:tag('li')
:wikitext(string.format('[[%s]]', value))
end
end
end


37行目: 38行目:
shotgun = "ショットガンアモ",
shotgun = "ショットガンアモ",
}
}
local function createRowForAmmo(tbl, name, weaponsByAmmo)
local function createRowForAmmo(tbl, name)
local item
local item
if name == 'special' then
if name == 'special' then
46行目: 47行目:
end
end
local list = tbl:tag('tr')
return createRow(tbl, item)
:tag('th')
end
:wikitext(item)
 
:done()
local function createRowForHSMultiplier(tbl, hsmul)
:tag('td')
return createRow(tbl, string.format('%s倍', hsmul))
:tag('ul')
:addClass('tpl-navbox-list')
for _, value in ipairs(weaponsByAmmo) do
list:tag('li')
:wikitext(string.format('[[%s]]', value))
end
end
end


69行目: 64行目:
:wikitext('武器')
:wikitext('武器')
for _, name in ipairs(keys) do
for _, name in ipairs(keys) do
fn(tbl, name, names[name])
local list = fn(tbl, name)
for _, value in ipairs(names[name]) do
list:tag('li')
:wikitext(string.format('[[%s]]', value))
end
end
end
return tbl:done()
return tbl:done()
111行目: 110行目:
{ 'light', 'heavy', 'energy', 'sniper', 'shotgun', 'special' },
{ 'light', 'heavy', 'energy', 'sniper', 'shotgun', 'special' },
weaponsByAmmos, createRowForAmmo)
weaponsByAmmos, createRowForAmmo)
end
local function renderNavboxByHSMultiplier()
local stat = mw.loadData('Module:Stat/Weapon')
local weaponsByHSMultipliers = {}
for key, value in pairs(stat) do
if weaponsByHSMultipliers[value.damage.headshot] == nil then
weaponsByHSMultipliers[value.damage.headshot] = {}
end
table.insert(weaponsByHSMultipliers[value.damage.headshot], key)
end
local keys = aw.getTableKeys(weaponsByHSMultipliers)
table.sort(keys)
return renderNavbox(
keys,
weaponsByHSMultipliers, createRowForHSMultiplier)
end
end


121行目: 138行目:
formatter = require('Module:Utility/Formatter').new(frame)
formatter = require('Module:Utility/Formatter').new(frame)
return tostring(renderNavboxByAmmo(args))
return tostring(renderNavboxByAmmo(args))
end
function p.byhsmul(frame)
formatter = require('Module:Utility/Formatter').new(frame)
return tostring(renderNavboxByHSMultiplier(args))
end
end


return p
return p

2021年2月15日 (月) 11:16時点における版

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

local p = {}

local aw = require('Module:Utility/Library')
local formatter -- lazily initialized

local function stringStarts(str, start)
	return string.sub(str, 1, string.len(start)) == start
end

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

local TypeDict = {
	assault_rifle = "アサルトライフル",
	sub_machine_gun = "サブマシンガン",
	light_machine_gun = "ライトマシンガン",
	sniper = "スナイパーライフル",
	shotgun = "ショットガン",
	pistol = "ピストル",
}
local function createRowForType(tbl, name)
	local type = TypeDict[name]
	return createRow(tbl, type)
end

local AmmoDict = {
	light = "ライトアモ",
	heavy = "ヘビーアモ",
	energy = "エネルギーアモ",
	sniper = "スナイパーアモ",
	shotgun = "ショットガンアモ",
}
local function createRowForAmmo(tbl, name)
	local item
	if name == 'special' then
		item = formatter:ammo('専用スナイパーアモ', 20) .. ' 物資投下'
	else
		local ammo = AmmoDict[name]
		item = string.format('%s %s', formatter:ammo(ammo, 20), ammo)
	end
	
	return createRow(tbl, item)
end

local function createRowForHSMultiplier(tbl, hsmul)
	return createRow(tbl, string.format('%s倍', hsmul))
end

local function renderNavbox(keys, names, fn)
	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 list = fn(tbl, name)
		for _, value in ipairs(names[name]) do
			list:tag('li')
				:wikitext(string.format('[[%s]]', value))
		end
	end
	return tbl:done()
end

local function renderNavboxByType()
	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', 'sniper', 'shotgun', 'pistol' },
		weaponsByTypes, createRowForType)
end

local function renderNavboxByAmmo()
	local stat = mw.loadData('Module:Stat/Weapon')
	
	local weaponsByAmmos = {}
	for key, value in pairs(stat) do
		local target
		if 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', 'special' },
		weaponsByAmmos, createRowForAmmo)
end

local function renderNavboxByHSMultiplier()
	local stat = mw.loadData('Module:Stat/Weapon')
	
	local weaponsByHSMultipliers = {}
	for key, value in pairs(stat) do
		if weaponsByHSMultipliers[value.damage.headshot] == nil then
			weaponsByHSMultipliers[value.damage.headshot] = {}
		end
		table.insert(weaponsByHSMultipliers[value.damage.headshot], key)
	end
	
	local keys = aw.getTableKeys(weaponsByHSMultipliers)
	table.sort(keys)
	return renderNavbox(
		keys,
		weaponsByHSMultipliers, createRowForHSMultiplier)
end

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

function p.byammo(frame)
	formatter = require('Module:Utility/Formatter').new(frame)
	return tostring(renderNavboxByAmmo(args))
end

function p.byhsmul(frame)
	formatter = require('Module:Utility/Formatter').new(frame)
	return tostring(renderNavboxByHSMultiplier(args))
end

return p