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

「モジュール:WeaponInfobox/Spread」の版間の差分

提供:Apex Data
ナビゲーションに移動 検索に移動
(クイックドローホルスターが有効な場合の桁数も判定するロジックを追加)
(腰だめ拡散の非表示機能を実装)
4行目: 4行目:
local cfg = mw.loadData('Module:WeaponInfobox/configuration')
local cfg = mw.loadData('Module:WeaponInfobox/configuration')


local aw = require('Module:Utility/Library')
local iu = require('Module:Utility/Image')
local iu = require('Module:Utility/Image')


53行目: 54行目:
end
end


local function getFormatStringFunction(stat, qkdw)
local function getFormatStringFunction(stat, qkdw, hasHipfire)
if (qkdw and hasSecondDecimalPlace(qkdw.stand_hip))
if (qkdw and hasSecondDecimalPlace(qkdw.stand_hip))
or (qkdw and hasSecondDecimalPlace(qkdw.stand_hip_run))
or (qkdw and hasSecondDecimalPlace(qkdw.stand_hip_run))
or hasSecondDecimalPlace(stat.stand_hip)
or (hasHipfire and hasSecondDecimalPlace(stat.stand_hip))
or hasSecondDecimalPlace(stat.stand_hip_run)
or (hasHipfire and hasSecondDecimalPlace(stat.stand_hip_run))
or hasSecondDecimalPlace(stat.stand_hip_sprint)
or (hasHipfire and hasSecondDecimalPlace(stat.stand_hip_sprint))
or hasSecondDecimalPlace(stat.stand_ads)
or hasSecondDecimalPlace(stat.stand_ads)
or hasSecondDecimalPlace(stat.crouch_hip)
or (hasHipfire and hasSecondDecimalPlace(stat.crouch_hip))
or hasSecondDecimalPlace(stat.crouch_ads)
or hasSecondDecimalPlace(stat.crouch_ads)
or hasSecondDecimalPlace(stat.air_hip)
or (hasHipfire and hasSecondDecimalPlace(stat.air_hip))
or hasSecondDecimalPlace(stat.air_ads)
or hasSecondDecimalPlace(stat.air_ads)
or hasSecondDecimalPlace(stat.max_kick.stand_hip)
or (hasHipfire and hasSecondDecimalPlace(stat.max_kick.stand_hip))
or hasSecondDecimalPlace(stat.max_kick.stand_ads)
or hasSecondDecimalPlace(stat.max_kick.stand_ads)
or hasSecondDecimalPlace(stat.max_kick.crouch_hip)
or (hasHipfire and hasSecondDecimalPlace(stat.max_kick.crouch_hip))
or hasSecondDecimalPlace(stat.max_kick.crouch_ads)
or hasSecondDecimalPlace(stat.max_kick.crouch_ads)
or hasSecondDecimalPlace(stat.max_kick.air_hip)
or (hasHipfire and hasSecondDecimalPlace(stat.max_kick.air_hip))
or hasSecondDecimalPlace(stat.max_kick.air_ads) then
or hasSecondDecimalPlace(stat.max_kick.air_ads) then
return getFormatString2
return getFormatString2
76行目: 77行目:
end
end


local function getDiffFormatStringFunction(stat)
local function getDiffFormatStringFunction(stat, hasHipfire)
if hasSecondDecimalPlace(stat.kick_on_fire.stand_hip)
if (hasHipfire and hasSecondDecimalPlace(stat.kick_on_fire.stand_hip))
or hasSecondDecimalPlace(stat.kick_on_fire.stand_ads)
or hasSecondDecimalPlace(stat.kick_on_fire.stand_ads)
or hasSecondDecimalPlace(stat.kick_on_fire.crouch_hip)
or (hasHipfire and hasSecondDecimalPlace(stat.kick_on_fire.crouch_hip))
or hasSecondDecimalPlace(stat.kick_on_fire.crouch_ads)
or hasSecondDecimalPlace(stat.kick_on_fire.crouch_ads)
or hasSecondDecimalPlace(stat.kick_on_fire.air_hip)
or (hasHipfire and hasSecondDecimalPlace(stat.kick_on_fire.air_hip))
or hasSecondDecimalPlace(stat.kick_on_fire.air_ads) then
or hasSecondDecimalPlace(stat.kick_on_fire.air_ads) then
return getDiffFormatString2
return getDiffFormatString2
120行目: 121行目:
function p.renderSpread(stat, quickdraw_holster, lang)
function p.renderSpread(stat, quickdraw_holster, lang)
local spread = cfg[lang].spread
local spread = cfg[lang].spread
local getFormatString = getFormatStringFunction(stat, quickdraw_holster)
local hasHipfire = aw.isNumberAndGreaterThanOrEqualToZero(stat.stand_hip)
local getDiffFormatString = getDiffFormatStringFunction(stat)
local getFormatString = getFormatStringFunction(stat, quickdraw_holster, hasHipfire)
local getDiffFormatString = getDiffFormatStringFunction(stat, hasHipfire)
local layout
local layout
if quickdraw_holster then
if quickdraw_holster then
172行目: 174行目:
-- Hipfire
-- Hipfire
local hipfire = tbl:tag('tr')
if hasHipfire then
:tag('th')
local hipfire = tbl:tag('tr')
:addClass(spread.state.hip_class)
:tag('th')
:attr('rowspan', layout.hip_rowspan)
:addClass(spread.state.hip_class)
:tag('span')
:attr('rowspan', layout.hip_rowspan)
:wikitext(spread.state.hip)
:tag('span')
:wikitext(spread.state.hip)
:done()
:done()
:done()
:done()
:tag('th')
:tag('th')
:addClass(spread.state.stand_class)
:addClass(spread.state.stand_class)
:attr('rowspan', layout.stand_rowspan)
:attr('rowspan', layout.stand_rowspan)
:tag('span')
:tag('span')
:wikitext(spread.state.stand)
:wikitext(spread.state.stand)
:done()
:done()
:done()
:done()
:tag('th')
:tag('th')
:attrIf(quickdraw_holster, { colspan = 2 })
:attrIf(quickdraw_holster, { colspan = 2 })
:wikitext(spread.state.still)
:wikitext(spread.state.still)
:done()
:tag('td')
:addClass('cell-type-number')
:attr('align', 'right')
:wikitext(getFormatString(stat.stand_hip))
:done()
if not hideKickOnFire then
hipfire
:tag('td')
:addClass('cell-type-number')
:attr('align', 'right')
:attr('rowspan', layout.stand_rowspan)
:wikitext(getDiffFormatString(stat.kick_on_fire.stand_hip))
:done()
:done()
:tag('td')
:tag('td')
:addClass('cell-type-number')
:addClass('cell-type-number')
:attr('align', 'right')
:attr('align', 'right')
:wikitext(getFormatString(stat.stand_hip + stat.max_kick.stand_hip))
:wikitext(getFormatString(stat.stand_hip))
end
if quickdraw_holster then
local quickhip = tbl:tag('tr')
:tag('th')
:css('border-top', '0 none transparent')
:wikitext('  ')
:done()
:done()
if not hideKickOnFire then
hipfire
:tag('td')
:addClass('cell-type-number')
:attr('align', 'right')
:attr('rowspan', layout.stand_rowspan)
:wikitext(getDiffFormatString(stat.kick_on_fire.stand_hip))
:done()
:tag('td')
:addClass('cell-type-number')
:attr('align', 'right')
:wikitext(getFormatString(stat.stand_hip + stat.max_kick.stand_hip))
end
if quickdraw_holster then
local quickhip = tbl:tag('tr')
:tag('th')
:css('border-top', '0 none transparent')
:wikitext('  ')
:done()
:tag('th')
:wikitext(iu.hopup('quickdraw_holster'))
:done()
:tag('td')
:addClass('cell-type-number')
:attr('align', 'right')
:wikitext(getFormatString(quickdraw_holster.stand_hip))
:done()
if not hideKickOnFire then
quickhip:tag('td')
:addClass('cell-type-number')
:attr('align', 'right')
:wikitext(getFormatString(quickdraw_holster.stand_hip + stat.max_kick.stand_hip))
end
end
local run = tbl:tag('tr')
:tag('th')
:tag('th')
:wikitext(iu.hopup('quickdraw_holster'))
:attrIf(quickdraw_holster, { colspan = 2 })
:wikitext(spread.state.run)
:done()
:done()
:tag('td')
:tag('td')
:addClass('cell-type-number')
:addClass('cell-type-number')
:attr('align', 'right')
:attr('align', 'right')
:wikitext(getFormatString(quickdraw_holster.stand_hip))
:wikitext(getFormatString(stat.stand_hip_run))
:done()
:done()
if not hideKickOnFire then
if not hideKickOnFire then
quickhip:tag('td')
run:tag('td')
:addClass('cell-type-number')
:addClass('cell-type-number')
:attr('align', 'right')
:attr('align', 'right')
:wikitext(getFormatString(quickdraw_holster.stand_hip + stat.max_kick.stand_hip))
:wikitext(getFormatString(stat.stand_hip_run + stat.max_kick.stand_hip))
end
end
end
if quickdraw_holster then
local run = tbl:tag('tr')
local quickrun = tbl:tag('tr')
:tag('th')
:tag('th')
:attrIf(quickdraw_holster, { colspan = 2 })
:css('border-top', '0 none transparent')
:wikitext(spread.state.run)
:wikitext('  ')
:done()
:done()
:tag('td')
:tag('th')
:addClass('cell-type-number')
:wikitext(iu.hopup('quickdraw_holster'))
:attr('align', 'right')
:done()
:wikitext(getFormatString(stat.stand_hip_run))
:tag('td')
:done()
:addClass('cell-type-number')
if not hideKickOnFire then
:attr('align', 'right')
run:tag('td')
:wikitext(getFormatString(quickdraw_holster.stand_hip_run))
:addClass('cell-type-number')
:done()
:attr('align', 'right')
if not hideKickOnFire then
:wikitext(getFormatString(stat.stand_hip_run + stat.max_kick.stand_hip))
quickrun:tag('td')
end
:addClass('cell-type-number')
:attr('align', 'right')
if quickdraw_holster then
:wikitext(getFormatString(quickdraw_holster.stand_hip_run + stat.max_kick.stand_hip))
local quickrun = tbl:tag('tr')
end
:tag('th')
end
:css('border-top', '0 none transparent')
:wikitext('  ')
local sprint = tbl:tag('tr')
:done()
:tag('th')
:tag('th')
:wikitext(iu.hopup('quickdraw_holster'))
:attrIf(quickdraw_holster, { colspan = 2 })
:wikitext(spread.state.sprint)
:done()
:done()
:tag('td')
:tag('td')
:addClass('cell-type-number')
:addClass('cell-type-number')
:attr('align', 'right')
:attr('align', 'right')
:wikitext(getFormatString(quickdraw_holster.stand_hip_run))
:wikitext(getFormatString(stat.stand_hip_sprint))
:done()
:done()
if not hideKickOnFire then
if not hideKickOnFire then
quickrun:tag('td')
sprint:tag('td')
:addClass('cell-type-number')
:addClass('cell-type-number')
:attr('align', 'right')
:attr('align', 'right')
:wikitext(getFormatString(quickdraw_holster.stand_hip_run + stat.max_kick.stand_hip))
:wikitext(getFormatString(stat.stand_hip_sprint + stat.max_kick.stand_hip))
end
end
-- Hipfire while crouching
local crouch = tbl:tag('tr')
:tag('th')
:attr('colspan', layout.hipads_colspan)
:wikitext(spread.state.crouch)
:done()
renderKickOnFireCell(crouch, stat, 'crouch_hip', env)
-- Hipfire in the air
local air = tbl:tag('tr')
:tag('th')
:attr('colspan', layout.hipads_colspan)
:wikitext(spread.state.air)
:done()
renderKickOnFireCell(air, stat, 'air_hip', env)
end
end
local sprint = tbl:tag('tr')
:tag('th')
:attrIf(quickdraw_holster, { colspan = 2 })
:wikitext(spread.state.sprint)
:done()
:tag('td')
:addClass('cell-type-number')
:attr('align', 'right')
:wikitext(getFormatString(stat.stand_hip_sprint))
:done()
if not hideKickOnFire then
sprint:tag('td')
:addClass('cell-type-number')
:attr('align', 'right')
:wikitext(getFormatString(stat.stand_hip_sprint + stat.max_kick.stand_hip))
end
-- Hipfire while crouching
local crouch = tbl:tag('tr')
:tag('th')
:attr('colspan', layout.hipads_colspan)
:wikitext(spread.state.crouch)
:done()
renderKickOnFireCell(crouch, stat, 'crouch_hip', env)
-- Hipfire in the air
local air = tbl:tag('tr')
:tag('th')
:attr('colspan', layout.hipads_colspan)
:wikitext(spread.state.air)
:done()
renderKickOnFireCell(air, stat, 'air_hip', env)
-- ADS
-- ADS

2021年8月14日 (土) 20:21時点における版

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

require('Module:Utility/mw.html Extensions')

local p = {}
local cfg = mw.loadData('Module:WeaponInfobox/configuration')

local aw = require('Module:Utility/Library')
local iu = require('Module:Utility/Image')

local function isAllKickOnFireZero(k)
	return k.stand_hip == 0
		and k.stand_ads == 0
		and k.crouch_hip == 0
		and k.crouch_ads == 0
		and k.air_hip == 0
		and k.air_ads == 0
end

local function isAllSpreadSame(k)
	return k.stand_hip_run == k.stand_hip
		and k.stand_hip_sprint == k.stand_hip
		and k.stand_ads == k.stand_hip
		and k.crouch_hip == k.stand_hip
		and k.crouch_ads == k.stand_hip
		and k.air_hip == k.stand_hip
		and k.air_ads == k.stand_hip
end

local function hasSecondDecimalPlace(num)
	return math.floor(10 * num) ~= 10 * num
end

local function getFormatString1(num)
	return string.format('%.1f°', num)
end

local function getFormatString2(num)
	return string.format('%.2f°', num)
end

local function getDiffFormatString1(num)
	if num <= 0 then
		return '-'
	else
		return string.format('%+.1f°', num)
	end
end

local function getDiffFormatString2(num)
	if num == 0 then
		return '-'
	else
		return string.format('%+.2f°', num)
	end
end

local function getFormatStringFunction(stat, qkdw, hasHipfire)
	if (qkdw and hasSecondDecimalPlace(qkdw.stand_hip))
	or (qkdw and hasSecondDecimalPlace(qkdw.stand_hip_run))
	or (hasHipfire and hasSecondDecimalPlace(stat.stand_hip))
	or (hasHipfire and hasSecondDecimalPlace(stat.stand_hip_run))
	or (hasHipfire and hasSecondDecimalPlace(stat.stand_hip_sprint))
	or hasSecondDecimalPlace(stat.stand_ads)
	or (hasHipfire and hasSecondDecimalPlace(stat.crouch_hip))
	or hasSecondDecimalPlace(stat.crouch_ads)
	or (hasHipfire and hasSecondDecimalPlace(stat.air_hip))
	or hasSecondDecimalPlace(stat.air_ads)
	or (hasHipfire and hasSecondDecimalPlace(stat.max_kick.stand_hip))
	or hasSecondDecimalPlace(stat.max_kick.stand_ads)
	or (hasHipfire and hasSecondDecimalPlace(stat.max_kick.crouch_hip))
	or hasSecondDecimalPlace(stat.max_kick.crouch_ads)
	or (hasHipfire and hasSecondDecimalPlace(stat.max_kick.air_hip))
	or hasSecondDecimalPlace(stat.max_kick.air_ads) then
		return getFormatString2
	else
		return getFormatString1
	end
end

local function getDiffFormatStringFunction(stat, hasHipfire)
	if (hasHipfire and hasSecondDecimalPlace(stat.kick_on_fire.stand_hip))
	or hasSecondDecimalPlace(stat.kick_on_fire.stand_ads)
	or (hasHipfire and hasSecondDecimalPlace(stat.kick_on_fire.crouch_hip))
	or hasSecondDecimalPlace(stat.kick_on_fire.crouch_ads)
	or (hasHipfire and hasSecondDecimalPlace(stat.kick_on_fire.air_hip))
	or hasSecondDecimalPlace(stat.kick_on_fire.air_ads) then
		return getDiffFormatString2
	else
		return getDiffFormatString1
	end
end

local function renderKickOnFireCell(row, stat, target, env)
	local base = stat[target]
	row:tag('td')
		:addClass('cell-type-number')
		:attr('align', 'right')
		:wikitext(env.getFormatString(stat[target]))
	
	if not env.hideKickOnFire then
		local incr = stat.kick_on_fire[target]
		if incr == 0 then
			row:tag('td')
				:addClass('disabled')
				:attr('align', 'center')
				:attr('colspan', 2)
				:wikitext(env.cfg.na)
		else
			row
				:tag('td')
					:addClass('cell-type-number')
					:attr('align', 'right')
					:wikitext(env.getDiffFormatString(incr))
				:tag('td')
					:addClass('cell-type-number')
					:attr('align', 'right')
					:wikitext(env.getFormatString(base + stat.max_kick[target]))
		end
	end
end

function p.renderSpread(stat, quickdraw_holster, lang)
	local spread = cfg[lang].spread
	local hasHipfire = aw.isNumberAndGreaterThanOrEqualToZero(stat.stand_hip)
	local getFormatString = getFormatStringFunction(stat, quickdraw_holster, hasHipfire)
	local getDiffFormatString = getDiffFormatStringFunction(stat, hasHipfire)
	local layout
	if quickdraw_holster then
		layout = {
			state_colspan  = 4,
			hip_rowspan    = 7,
			stand_rowspan  = 5,
			hipads_colspan = 3,
		}
	else
		layout = {
			state_colspan  = 3,
			hip_rowspan    = 5,
			stand_rowspan  = 3,
			hipads_colspan = 2,
		}
	end
	local hideKickOnFire = isAllKickOnFireZero(stat.kick_on_fire)
	local env = {
		cfg                 = spread,
		hideKickOnFire      = hideKickOnFire,
		getFormatString     = getFormatString,
		getDiffFormatString = getDiffFormatString,
	}
	
	if hideKickOnFire and isAllSpreadSame(stat) then
		return mw.html.create('span')
			:wikitext(getFormatString(stat.stand_hip))
	end
	
	local tbl = mw.html.create('table')
		:addClass('intable')
	
	local header = tbl:tag('tr')
		:tag('th')
			:attr('colspan', layout.state_colspan)
			:wikitext(spread.state.name)
			:done()
		:tag('th')
			:wikitext(spread.first_shot)
			:done()
	
	if not hideKickOnFire then
		header:tag('th')
				:wikitext(spread.increment)
				:done()
			:tag('th')
				:wikitext(spread.maximum)
	end
	
	-- Hipfire
	if hasHipfire then
		local hipfire = tbl:tag('tr')
			:tag('th')
				:addClass(spread.state.hip_class)
				:attr('rowspan', layout.hip_rowspan)
				:tag('span')
					:wikitext(spread.state.hip)
					:done()
				:done()
			:tag('th')
				:addClass(spread.state.stand_class)
				:attr('rowspan', layout.stand_rowspan)
				:tag('span')
					:wikitext(spread.state.stand)
					:done()
				:done()
			:tag('th')
				:attrIf(quickdraw_holster, { colspan = 2 })
				:wikitext(spread.state.still)
				:done()
			:tag('td')
				:addClass('cell-type-number')
				:attr('align', 'right')
				:wikitext(getFormatString(stat.stand_hip))
				:done()
		if not hideKickOnFire then
			hipfire
				:tag('td')
					:addClass('cell-type-number')
					:attr('align', 'right')
					:attr('rowspan', layout.stand_rowspan)
					:wikitext(getDiffFormatString(stat.kick_on_fire.stand_hip))
					:done()
				:tag('td')
					:addClass('cell-type-number')
					:attr('align', 'right')
					:wikitext(getFormatString(stat.stand_hip + stat.max_kick.stand_hip))
		end
		
		if quickdraw_holster then
			local quickhip = tbl:tag('tr')
				:tag('th')
					:css('border-top', '0 none transparent')
					:wikitext('&nbsp;&nbsp;')
					:done()
				:tag('th')
					:wikitext(iu.hopup('quickdraw_holster'))
					:done()
				:tag('td')
					:addClass('cell-type-number')
					:attr('align', 'right')
					:wikitext(getFormatString(quickdraw_holster.stand_hip))
					:done()
			if not hideKickOnFire then
				quickhip:tag('td')
					:addClass('cell-type-number')
					:attr('align', 'right')
					:wikitext(getFormatString(quickdraw_holster.stand_hip + stat.max_kick.stand_hip))
			end
		end
		
		local run = tbl:tag('tr')
			:tag('th')
				:attrIf(quickdraw_holster, { colspan = 2 })
				:wikitext(spread.state.run)
				:done()
			:tag('td')
				:addClass('cell-type-number')
				:attr('align', 'right')
				:wikitext(getFormatString(stat.stand_hip_run))
				:done()
		if not hideKickOnFire then
			run:tag('td')
				:addClass('cell-type-number')
				:attr('align', 'right')
				:wikitext(getFormatString(stat.stand_hip_run + stat.max_kick.stand_hip))
		end
		
		if quickdraw_holster then
			local quickrun = tbl:tag('tr')
				:tag('th')
					:css('border-top', '0 none transparent')
					:wikitext('&nbsp;&nbsp;')
					:done()
				:tag('th')
					:wikitext(iu.hopup('quickdraw_holster'))
					:done()
				:tag('td')
					:addClass('cell-type-number')
					:attr('align', 'right')
					:wikitext(getFormatString(quickdraw_holster.stand_hip_run))
					:done()
			if not hideKickOnFire then
				quickrun:tag('td')
					:addClass('cell-type-number')
					:attr('align', 'right')
					:wikitext(getFormatString(quickdraw_holster.stand_hip_run + stat.max_kick.stand_hip))
			end
		end
		
		local sprint = tbl:tag('tr')
			:tag('th')
				:attrIf(quickdraw_holster, { colspan = 2 })
				:wikitext(spread.state.sprint)
				:done()
			:tag('td')
				:addClass('cell-type-number')
				:attr('align', 'right')
				:wikitext(getFormatString(stat.stand_hip_sprint))
				:done()
		if not hideKickOnFire then
			sprint:tag('td')
				:addClass('cell-type-number')
				:attr('align', 'right')
				:wikitext(getFormatString(stat.stand_hip_sprint + stat.max_kick.stand_hip))
		end
		
		-- Hipfire while crouching
		local crouch = tbl:tag('tr')
			:tag('th')
				:attr('colspan', layout.hipads_colspan)
				:wikitext(spread.state.crouch)
				:done()
		renderKickOnFireCell(crouch, stat, 'crouch_hip', env)
		
		-- Hipfire in the air
		local air = tbl:tag('tr')
			:tag('th')
				:attr('colspan', layout.hipads_colspan)
				:wikitext(spread.state.air)
				:done()
		renderKickOnFireCell(air, stat, 'air_hip', env)
	end
	
	-- ADS
	if stat.stand_ads == stat.crouch_ads
		and stat.kick_on_fire.stand_ads == stat.kick_on_fire.crouch_ads
		and stat.max_kick.stand_ads == stat.max_kick.crouch_ads then
		local ads = tbl:tag('tr')
			:tag('th')
				:addClass(spread.state.ads_class)
				:attr('rowspan', 3)
				:tag('span')
					:wikitext(spread.state.ads)
					:done()
				:done()
			:tag('th')
				:attr('colspan', layout.hipads_colspan)
				:wikitext(spread.state.standcrouch)
				:done()
		renderKickOnFireCell(ads, stat, 'stand_ads', env)
	else
		local hipads = tbl:tag('tr')
			:tag('th')
				:addClass(spread.state.ads_class)
				:attr('rowspan', 3)
				:tag('span')
					:wikitext(spread.state.ads)
					:done()
				:done()
			:tag('th')
				:attr('colspan', layout.hipads_colspan)
				:wikitext(spread.state.stand)
				:done()
		renderKickOnFireCell(hipads, stat, 'stand_ads', env)
		
		-- ADS while crouching
		local crouchads = tbl:tag('tr')
			:tag('th')
				:attr('colspan', layout.hipads_colspan)
				:wikitext(spread.state.crouch)
				:done()
		renderKickOnFireCell(crouchads, stat, 'crouch_ads', env)
	end
	
	-- ADS in the air
	local airads = tbl:tag('tr')
		:tag('th')
			:attr('colspan', layout.hipads_colspan)
			:wikitext(spread.state.air)
			:done()
	renderKickOnFireCell(airads, stat, 'air_ads', env)
	
	return tbl
end

function p._main(name, lang)
	lang = lang or 'ja'
	
	local stat = mw.loadData('Module:Stat/Weapon')[name]
	local qkdw = stat.quickdraw_holster and stat.quickdraw_holster.spread
	local node = p.renderSpread(stat.spread, qkdw, lang)
	return tostring(node)
end

return p