| 🌟 | 現在、 鉄壁HSは通常HSと同じダメージになります。LMG及びDMR、チャージライフル、ハンマーポイント弾を除き、すべてのダメージ値が一致していることを確認しています。 |
モジュール:WeaponInfobox
ナビゲーションに移動
検索に移動
このモジュールについての説明文ページを モジュール:WeaponInfobox/doc に作成できます
local p = {}
local stat = require('Module:Stat/Weapon')
local getArgs -- lazily initialized
local function renderRow(table, name, item)
local row = table:tag('tr')
row:tag('th'):wikitext(name)
row:tag('td'):wikitext(item)
end
local CategoryDict = {
assault_rifle = "アサルトライフル",
sub_machine_gun = "サブマシンガン",
light_machine_gun = "ライトマシンガン",
sniper = "スナイパーライフル",
shotgun = "ショットガン",
pistol = "ピストル",
}
local function renderCategory(table, name, stat)
local category = CategoryDict[stat]
renderRow(table, name, category)
end
local AmmoDict = {
light = "ライト",
heavy = "ヘビー",
energy = "エネルギー",
sniper = "スナイパー",
shotgun = "ショットガン",
special_light = "専用ライト",
special_heavy = "専用ヘビー",
special_energy = "専用エネルギー",
special_sniper = "専用スナイパー",
special_shotgun = "専用ショットガン",
}
local function renderAmmo(table, name, stat, frame)
local ammo = AmmoDict[stat]
if frame ~= nil then
renderRow(
table,
'弾薬',
frame:expandTemplate { title = 'Ammo', args = { ammo, size = 28 }} .. ' ' .. ammo .. 'アモ')
else
renderRow(table, name, ammo .. 'アモ')
end
end
local function convertDecimalToFractional(num)
local integer = math.floor(num)
local decimal = tonumber(string.format("%.3f", num - integer))
local decimalText
if decimal == 0.125 then
decimalText = '⅛'
elseif decimal == 0.2 then
decimalText = '⅕'
elseif decimal == 0.25 then
decimalText = '¼'
elseif decimal == 1/3 then
decimalText = '⅓'
elseif decimal == 0.375 then
decimalText = '⅜'
elseif decimal == 0.4 then
decimalText = '⅖'
elseif decimal == 0.5 then
decimalText = '½'
elseif decimal == 0.6 then
decimalText = '⅗'
elseif decimal == 0.625 then
decimalText = '⅝'
elseif decimal == 2/3 then
decimalText = '⅔'
elseif decimal == 0.75 then
decimalText = '¾'
elseif decimal == 0.8 then
decimalText = '⅘'
elseif decimal == 0.875 then
decimalText = '⅞'
else
decimalText = ''
end
if decimalText == '' then
return tostring(num)
elseif integer == 0 then
return decimalText
else
return tostring(integer) .. decimalText
end
end
local function renderMode(table, name, stat)
local mode = nil
if stat.auto then
mode = 'オート'
end
if stat.burst > 1 then
if mode == nil then
mode = stat.burst .. '点バースト'
else
mode = mode .. ',' .. stat.burst .. '点バースト'
end
end
if stat.single then
if mode == nil then
mode = '単発'
else
mode = mode .. ',単発'
end
end
renderRow(table, name, mode)
end
local function renderDamage(table, name, stat, ammo, pellet, frame)
local base = stat.base
local item
if pellet ~= nil then
item = tostring(base) .. ' × ' .. tostring(pellet) .. '片'
else
item = tostring(base)
end
local head = convertDecimalToFractional(stat.headshot)
local hlm1 = convertDecimalToFractional(0.2 + 0.8 * stat.headshot)
local hlm2 = convertDecimalToFractional(0.4 + 0.6 * stat.headshot)
local hlm3 = convertDecimalToFractional(0.5 + 0.5 * stat.headshot)
local sprm = stat.skullpiercer_rifling or 1
local headText
if frame ~= nil then
headText = '頭 '
.. head .. ' → '
.. frame:expandTemplate { title = 'Common', args = { hlm1 }} .. ' → '
.. frame:expandTemplate { title = 'Rare', args = { hlm2 }} .. ' → '
.. frame:expandTemplate { title = 'Epic', args = { hlm3 }} .. '倍'
if sprm > 1 then
local spr0 = convertDecimalToFractional(sprm)
local spr1 = convertDecimalToFractional(0.2 + 0.8 * sprm)
local spr2 = convertDecimalToFractional(0.4 + 0.6 * sprm)
local spr3 = convertDecimalToFractional(0.5 + 0.5 * sprm)
headText = headText
.. '<br>'
.. frame:expandTemplate { title = 'Hopup', args = { "スカルピアサーライフリング", size = 16 }}
.. ' '
.. spr0 .. ' → '
.. frame:expandTemplate { title = 'Common', args = { spr1 }} .. ' → '
.. frame:expandTemplate { title = 'Rare', args = { spr2 }} .. ' → '
.. frame:expandTemplate { title = 'Epic', args = { spr3 }} .. '倍'
end
else
headText = '頭 '
.. head .. ' → '
.. hlm1 .. ' → '
.. hlm2 .. ' → '
.. hlm3 .. '倍'
if sprm > 1 then
local spr0 = convertDecimalToFractional(sprm)
local spr1 = convertDecimalToFractional(0.2 + 0.8 * sprm)
local spr2 = convertDecimalToFractional(0.4 + 0.6 * sprm)
local spr3 = convertDecimalToFractional(0.5 + 0.5 * sprm)
headText = headText
.. '<br>スカピ '
.. spr0 .. ' → '
.. spr1 .. ' → '
.. spr2 .. ' → '
.. spr3 .. '倍'
end
end
local leg = convertDecimalToFractional(stat.legshot)
local legText = '脚 ' .. leg .. '倍'
local ul = mw.html.create('ul')
ul:tag('li'):wikitext(headText)
ul:tag('li'):wikitext(legText)
renderRow(table, name, item .. tostring(ul))
end
local function renderMagazine(table, name, stat, frame)
if type(stat) == 'table' then
local text
if frame ~= nil then
text = stat[1] .. ' → '
.. frame:expandTemplate { title = 'Common', args = { stat[2] }} .. ' → '
.. frame:expandTemplate { title = 'Rare', args = { stat[3] }} .. ' → '
.. frame:expandTemplate { title = 'Epic', args = { stat[4] }}
else
text = stat[1] .. ' → '
.. stat[2] .. ' → '
.. stat[3] .. ' → '
.. stat[4]
end
renderRow(table, name, text)
elseif type(stat) == 'number' then
if stat == math.huge then
renderRow(table, name, '∞')
else
renderRow(table, name, stat)
end
else
renderRow(table, name, '???')
end
end
local function renderTable(args, frame)
local weaponStat = stat[args.name]
local table = mw.html.create('table')
renderCategory(table, '種類', weaponStat.category)
renderAmmo(table, '弾薬', weaponStat.ammo, frame)
renderMode(table, '射撃モード', weaponStat.mode)
renderDamage(table, 'ダメージ', weaponStat.damage, weaponStat.ammo, weaponStat.pellet, frame)
renderMagazine(table, '装填数', weaponStat.magazine, frame)
return table
end
function p._main(args, frame)
return tostring(renderTable(args, frame))
end
function p.main(frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
args = getArgs(frame)
return p._main(args, frame)
end
return p