🌟 | 現在、 鉄壁ヘッドショットには対応済みです。 鉄壁HSは通常HSと同じダメージになります。LMG及びDMR、チャージライフル、ハンマーポイント弾を除き、すべてのダメージ値が一致していることを確認しています。 |
モジュール:WeaponInfobox/Duration
ナビゲーションに移動
検索に移動
このモジュールについての説明文ページを モジュール: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