🌟 | 現在、 鉄壁ヘッドショットには対応済みです。 鉄壁HSは通常HSと同じダメージになります。LMG及びDMR、チャージライフル、ハンマーポイント弾を除き、すべてのダメージ値が一致していることを確認しています。 |
「モジュール:WeaponInfobox」の版間の差分
ナビゲーションに移動
検索に移動
(ヘルメットの効果を表記) |
(スカルピアサーライフリングへの対応) |
||
128行目: | 128行目: | ||
local hlm2 = convertDecimalToFractional(0.4 + 0.6 * stat.headshot) | local hlm2 = convertDecimalToFractional(0.4 + 0.6 * stat.headshot) | ||
local hlm3 = convertDecimalToFractional(0.5 + 0.5 * stat.headshot) | local hlm3 = convertDecimalToFractional(0.5 + 0.5 * stat.headshot) | ||
local sprm = stat.skullpiercer_rifling or 1 | |||
local headText | local headText | ||
if frame ~= nil then | if frame ~= nil then | ||
135行目: | 136行目: | ||
.. frame:expandTemplate { title = 'Rare', args = { hlm2 }} .. ' → ' | .. frame:expandTemplate { title = 'Rare', args = { hlm2 }} .. ' → ' | ||
.. frame:expandTemplate { title = 'Epic', args = { hlm3 }} .. '倍' | .. 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 | else | ||
headText = '頭 ' | headText = '頭 ' | ||
141行目: | 156行目: | ||
.. hlm2 .. ' → ' | .. hlm2 .. ' → ' | ||
.. hlm3 .. '倍' | .. 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 | end | ||
2021年1月29日 (金) 09:35時点における版
このモジュールについての説明文ページを モジュール: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