| 🌟 | 現在、 鉄壁HSは通常HSと同じダメージになります。LMG及びDMR、チャージライフル、ハンマーポイント弾を除き、すべてのダメージ値が一致していることを確認しています。 |
「モジュール:WeaponInfobox/Duration」の版間の差分
ナビゲーションに移動
検索に移動
(ページの作成:「require('Module:Utility/mw.html Extensions') local p = {} local cfg = mw.loadData('Module:WeaponInfobox/configuration') local attachment = mw.loadData('Module:Stat/Attac…」) |
(物資投下武器判定の不具合を修正) |
||
| 238行目: | 238行目: | ||
end | end | ||
local canModdedLoader = stat.category == 'light_machine_gun' or stat.ammo == 'minigun' | local canModdedLoader = stat.category == 'light_machine_gun' or stat.ammo == 'minigun' | ||
local isSpecial = aw.stringstarts(stat.ammo, 'special_') and not stat.ammo == 'special_sniper' | local isSpecial = aw.stringstarts(stat.ammo, 'special_') and not (stat.ammo == 'special_sniper') | ||
local tbl = mw.html.create('table') | local tbl = mw.html.create('table') | ||
2021年8月5日 (木) 18:43時点における版
このモジュールについての説明文ページを モジュール:WeaponInfobox/Duration/doc に作成できます
require('Module:Utility/mw.html Extensions')
local p = {}
local cfg = mw.loadData('Module:WeaponInfobox/configuration')
local attachment = mw.loadData('Module:Stat/Attachment')
local aw = require('Module:Utility/Library')
local iu = require('Module:Utility/Image')
local formatter -- lazily initialized
local function renderMultipleRow(tbl, name, default, common, rare, epic, opts)
opts = opts or {}
opts.separator = opts.separator or ' - '
local row = tbl:tag('tr')
:addClassIf(opts.class and type(opts.class) == 'string', opts.class)
:tag('th')
:attrIf(opts.headerAlign and type(opts.headerAlign) == 'string', { align = opts.headerAlign })
:wikitext(name)
:done()
:tag('td')
:addClass('cell-type-number')
:attr('align', 'left')
:wikitext(default)
:done()
:tag('td'):wikitext(opts.separator):done()
:tag('td')
:addClass('cell-type-number')
:attr('align', 'left')
:wikitext(formatter:common(common))
:done()
:tag('td'):wikitext(opts.separator):done()
:tag('td')
:addClass('cell-type-number')
:attr('align', 'left')
:wikitext(formatter:rare(rare))
:done()
:tag('td'):wikitext(opts.separator):done()
:tag('td')
:addClass('cell-type-number')
:attr('align', 'left')
:wikitext(formatter:epic(epic))
:done()
if opts.footer ~= nil then
row:tag('td')
:attrIf(opts.footerAlign and type(opts.footerAlign) == 'string', { align = opts.footerAlign }, { align = 'left' })
:attrIf(opts.footerColspan and type(opts.footerColspan) == 'number', { colspan = opts.footerColspan })
:wikitext(opts.footer)
end
return row
end
local function renderDurationWithStock(stat, duration, stock, canModdedLoader, tbl)
-- Reload
if aw.isNumber(stat.time.reload.tactical) then
renderMultipleRow(
tbl,
duration.reload.name,
string.format(duration.reload.format, stat.time.reload.tactical),
string.format(duration.reload.format, stat.time.reload.tactical * stock.reload[1]),
string.format(duration.reload.format, stat.time.reload.tactical * stock.reload[2]),
string.format(duration.reload.format, stat.time.reload.tactical * stock.reload[3]),
{ footer = duration.reload.unit })
if canModdedLoader then
renderMultipleRow(
tbl,
iu.passive('modded_loader') .. ' ',
string.format(duration.reload.format, stat.time.reload.tactical * 0.75),
string.format(duration.reload.format, stat.time.reload.tactical * 0.75 * stock.reload[1]),
string.format(duration.reload.format, stat.time.reload.tactical * 0.75 * stock.reload[2]),
string.format(duration.reload.format, stat.time.reload.tactical * 0.75 * stock.reload[3]),
{ class = 'no-list-style', headerAlign = 'right', footer = duration.reload.unit })
end
-- Reload (Empty)
if aw.isNumber(stat.time.reload.full) and stat.time.reload.tactical ~= stat.time.reload.full then
renderMultipleRow(
tbl,
duration.reloadempty.name,
string.format(duration.reloadempty.format, stat.time.reload.full),
string.format(duration.reloadempty.format, stat.time.reload.full * stock.reload[1]),
string.format(duration.reloadempty.format, stat.time.reload.full * stock.reload[2]),
string.format(duration.reloadempty.format, stat.time.reload.full * stock.reload[3]),
{ footer = duration.reload.unit })
if canModdedLoader then
renderMultipleRow(
tbl,
iu.passive('modded_loader') .. ' ',
string.format(duration.reloadempty.format, stat.time.reload.full * 0.75),
string.format(duration.reloadempty.format, stat.time.reload.full * 0.75 * stock.reload[1]),
string.format(duration.reloadempty.format, stat.time.reload.full * 0.75 * stock.reload[2]),
string.format(duration.reloadempty.format, stat.time.reload.full * 0.75 * stock.reload[3]),
{ class = 'no-list-style', headerAlign = 'right', footer = duration.reload.unit })
end
end
end
-- Zoom In
if aw.isNumber(stat.time.zoom_in) then
renderMultipleRow(
tbl,
duration.zoomin.name,
string.format(duration.zoomin.format, stat.time.zoom_in),
string.format(duration.zoomin.format, stat.time.zoom_in * stock.zoom[1]),
string.format(duration.zoomin.format, stat.time.zoom_in * stock.zoom[2]),
string.format(duration.zoomin.format, stat.time.zoom_in * stock.zoom[3]),
{ footer = duration.zoomin.unit })
end
-- Zoom Out
if aw.isNumber(stat.time.zoom_out) then
renderMultipleRow(
tbl,
duration.zoomout.name,
string.format(duration.zoomout.format, stat.time.zoom_out),
string.format(duration.zoomout.format, stat.time.zoom_out * stock.zoom[1]),
string.format(duration.zoomout.format, stat.time.zoom_out * stock.zoom[2]),
string.format(duration.zoomout.format, stat.time.zoom_out * stock.zoom[3]),
{ footer = duration.zoomout.unit })
end
end
local function renderRow(tbl, name, num, opts)
opts = opts or {}
opts.separator = opts.separator or ' - '
local row = tbl:tag('tr')
:addClassIf(opts.class and type(opts.class) == 'string', opts.class)
:tag('th')
:attrIf(opts.headerAlign and type(opts.headerAlign) == 'string', { align = opts.headerAlign })
:wikitext(name)
:done()
:tag('td')
:addClass('cell-type-number')
:attr('align', 'left')
:wikitext(num)
:done()
if opts.footer ~= nil then
row:tag('td')
:attrIf(opts.footerAlign and type(opts.footerAlign) == 'string', { align = opts.footerAlign }, { align = 'left' })
:attrIf(opts.footerColspan and type(opts.footerColspan) == 'number', { colspan = opts.footerColspan })
:wikitext(opts.footer)
end
return row
end
local function renderDurationWithoutStock(stat, duration, stock, canModdedLoader, tbl, isSpecial)
-- Reload
if aw.isNumber(stat.time.reload.tactical) then
local reload
if isSpecial then
reload = stat.time.reload.tactical * stock.reload[3]
else
reload = stat.time.reload.tactical
end
renderRow(
tbl,
duration.reload.name,
string.format(duration.reload.format, reload),
{ footer = duration.reload.unit })
if canModdedLoader then
renderRow(
tbl,
iu.passive('modded_loader') .. ' ',
string.format(duration.reload.format, reload * 0.75),
{ class = 'no-list-style', headerAlign = 'right', footer = duration.reload.unit })
end
-- Reload (Empty)
if aw.isNumber(stat.time.reload.full) and stat.time.reload.tactical ~= stat.time.reload.full then
local reloadempty
if isSpecial then
reloadempty = stat.time.reload.full * stock.reload[3]
else
reloadempty = stat.time.reload.full
end
renderRow(
tbl,
duration.reloadempty.name,
string.format(duration.reloadempty.format, reloadempty),
{ footer = duration.reload.unit })
if canModdedLoader then
renderRow(
tbl,
iu.passive('modded_loader') .. ' ',
string.format(duration.reloadempty.format, reloadempty * 0.75),
{ class = 'no-list-style', headerAlign = 'right', footer = duration.reload.unit })
end
end
end
-- Zoom In
if aw.isNumber(stat.time.zoom_in) then
local zoomin
if isSpecial then
zoomin = stat.time.zoom_in * stock.zoom[3]
else
zoomin = stat.time.zoom_in
end
renderRow(
tbl,
duration.zoomin.name,
string.format(duration.zoomin.format, zoomin),
{ footer = duration.zoomin.unit })
end
-- Zoom Out
if aw.isNumber(stat.time.zoom_out) then
local zoomout
if isSpecial then
zoomout = stat.time.zoom_out * stock.zoom[3]
else
zoomout = stat.time.zoom_out
end
renderRow(
tbl,
duration.zoomout.name,
string.format(duration.zoomout.format, zoomout),
{ footer = duration.zoomout.unit })
end
end
function p.renderDuration(stat, lang)
formatter = require('Module:Utility/Formatter').new(frame)
local duration = cfg[lang].duration
local stock
if stat.ammo == 'sniper' then
stock = attachment.sniper_stock
else
stock = attachment.standard_stock
end
local canModdedLoader = stat.category == 'light_machine_gun' or stat.ammo == 'minigun'
local isSpecial = aw.stringstarts(stat.ammo, 'special_') and not (stat.ammo == 'special_sniper')
local tbl = mw.html.create('table')
:addClass('condensedtable')
:addClass('listtable')
if not stat.attachments.stock or isSpecial then
renderDurationWithoutStock(stat, duration, stock, canModdedLoader, tbl, isSpecial)
else
renderDurationWithStock(stat, duration, stock, canModdedLoader, tbl)
end
return tbl
end
function p._main(name, lang)
lang = lang or 'ja'
local stat = mw.loadData('Module:Stat/Weapon')[name]
local node = p.renderDuration(stat, lang)
return tostring(node)
end
return p