| 🌟 | 現在、 鉄壁HSは通常HSと同じダメージになります。LMG及びDMR、チャージライフル、ハンマーポイント弾を除き、すべてのダメージ値が一致していることを確認しています。 |
「モジュール:DamageTable」の版間の差分
ナビゲーションに移動
検索に移動
(書き出し精度の変更。) |
(ガンシールド有効時の確殺数の追加) |
||
| 40行目: | 40行目: | ||
end | end | ||
local function renderRow(table, name, damage, rowspan) | local function renderRow(table, name, damage, rowspan, rowspanForDamage) | ||
rowspan = rowspan or 0 | rowspan = rowspan or 0 | ||
rowspanForDamage = rowspanForDamage or 0 | |||
local row = table:tag('tr') | local row = table:tag('tr') | ||
| 61行目: | 62行目: | ||
:wikitext(name) | :wikitext(name) | ||
end | end | ||
row:tag('td'):attr('align', 'right'):wikitext(damage) | if rowspanForDamage == 1 then | ||
row:tag('td') | |||
:attr('align', 'right') | |||
:attr('rowspan', 2) | |||
:wikitext(damage) | |||
else | |||
row:tag('td'):attr('align', 'right'):wikitext(damage) | |||
end | |||
row:tag('td'):attr('align', 'right'):wikitext(math.ceil(100 / damage)) | row:tag('td'):attr('align', 'right'):wikitext(math.ceil(100 / damage)) | ||
row:tag('td'):attr('align', 'right'):wikitext(math.ceil(150 / damage)) | row:tag('td'):attr('align', 'right'):wikitext(math.ceil(150 / damage)) | ||
| 67行目: | 75行目: | ||
row:tag('td'):attr('align', 'right'):wikitext(math.ceil(200 / damage)) | row:tag('td'):attr('align', 'right'):wikitext(math.ceil(200 / damage)) | ||
row:tag('td'):attr('align', 'right'):wikitext(math.ceil(225 / damage)) | row:tag('td'):attr('align', 'right'):wikitext(math.ceil(225 / damage)) | ||
end | |||
local function renderRowForGunShiled(table, damage) | |||
local row = table:tag('tr') | |||
row:tag('th') | |||
:css('border-top', "0 none transparent") | |||
:css('border-bottom', "0 none transparent") | |||
:wikitext(' ') | |||
row:tag('th') | |||
:wikitext('+ガンシールド') | |||
local countForGunShiled = math.ceil(50 / damage) | |||
row:tag('td'):attr('align', 'right'):wikitext(countForGunShiled + math.ceil(100 / damage)) | |||
row:tag('td'):attr('align', 'right'):wikitext(countForGunShiled + math.ceil(150 / damage)) | |||
row:tag('td'):attr('align', 'right'):wikitext(countForGunShiled + math.ceil(175 / damage)) | |||
row:tag('td'):attr('align', 'right'):wikitext(countForGunShiled + math.ceil(200 / damage)) | |||
row:tag('td'):attr('align', 'right'):wikitext(countForGunShiled + math.ceil(225 / damage)) | |||
end | end | ||
| 115行目: | 140行目: | ||
'<span class="text-rarity text-rarity-epic">Lv.3</span>/<span class="text-rarity text-rarity-legendary">4 (x' .. hlmLv3Mul .. ')</span>', | '<span class="text-rarity text-rarity-epic">Lv.3</span>/<span class="text-rarity text-rarity-legendary">4 (x' .. hlmLv3Mul .. ')</span>', | ||
roundFunc(mul * round(hlmLv3Mul * baseDamage))) | roundFunc(mul * round(hlmLv3Mul * baseDamage))) | ||
if mul | |||
renderRow(table, "胴・脚", roundFunc(mul * baseDamage), 1) | local bodyDamage = roundFunc(mul * baseDamage) | ||
if mul == 1.05 then | |||
renderRow(table, "胴・脚", bodyDamage, 1) | |||
elseif mul == 0.85 then | |||
renderRow(table, "胴", bodyDamage, 2, 1) | |||
renderRowForGunShiled(table, bodyDamage) | |||
renderRow(table, "脚 (x" .. legMul .. ")", roundFunc(mul * round(legMul * baseDamage)), 1) | |||
else | else | ||
renderRow(table, "胴", | renderRow(table, "胴", bodyDamage, 1) | ||
renderRow(table, "脚 (x" .. legMul .. ")", roundFunc(mul * round(legMul * baseDamage)), 1) | renderRow(table, "脚 (x" .. legMul .. ")", roundFunc(mul * round(legMul * baseDamage)), 1) | ||
end | end | ||
2021年1月23日 (土) 01:08時点における版
このモジュールについての説明文ページを モジュール:DamageTable/doc に作成できます
local p = {}
local getArgs -- lazily initialized
local function round(num)
return math.floor(tonumber(string.format("%.3f", num)) + 0.5)
end
local function roundover(num)
return math.ceil(num - 0.5)
end
local function renderHeader(table, mul)
local row = table:tag('tr')
local cell = row:tag('th')
:attr('colspan', 2)
:attr('rowspan', 2)
if mul == 1 then
cell:wikitext('部位')
elseif mul == 1.05 then
cell:wikitext('部位 (小柄)')
elseif mul == 0.85 then
cell:wikitext('部位 (鉄壁)')
else
cell:wikitext('部位 (x' .. mul .. ')')
end
row:tag('th')
:attr('rowspan', 2)
:wikitext('ダメージ')
row:tag('th')
:attr('colspan', 5)
:wikitext('確殺数')
row = table:tag('tr')
row:tag('th'):wikitext('100<small> HP</small>')
row:tag('th'):wikitext('<span class="text-rarity text-rarity-common">150<small> HP</small></span>')
row:tag('th'):wikitext('<span class="text-rarity text-rarity-rare">175<small> HP</small></span>')
row:tag('th'):wikitext('<span class="text-rarity text-rarity-epic">200<small> HP</small></span>')
row:tag('th'):wikitext('<span class="text-rarity text-rarity-heirloom">225<small> HP</small></span>')
end
local function renderRow(table, name, damage, rowspan, rowspanForDamage)
rowspan = rowspan or 0
rowspanForDamage = rowspanForDamage or 0
local row = table:tag('tr')
if rowspan > 1 then
row:tag('th')
:attr('colspan', 2)
:css('border-bottom', "0 none transparent")
:wikitext(name)
elseif rowspan == 1 then
row:tag('th')
:attr('colspan', 2)
:wikitext(name)
else
row:tag('th')
:css('border-top', "0 none transparent")
:css('border-bottom', "0 none transparent")
:wikitext(' ')
row:tag('th')
:wikitext(name)
end
if rowspanForDamage == 1 then
row:tag('td')
:attr('align', 'right')
:attr('rowspan', 2)
:wikitext(damage)
else
row:tag('td'):attr('align', 'right'):wikitext(damage)
end
row:tag('td'):attr('align', 'right'):wikitext(math.ceil(100 / damage))
row:tag('td'):attr('align', 'right'):wikitext(math.ceil(150 / damage))
row:tag('td'):attr('align', 'right'):wikitext(math.ceil(175 / damage))
row:tag('td'):attr('align', 'right'):wikitext(math.ceil(200 / damage))
row:tag('td'):attr('align', 'right'):wikitext(math.ceil(225 / damage))
end
local function renderRowForGunShiled(table, damage)
local row = table:tag('tr')
row:tag('th')
:css('border-top', "0 none transparent")
:css('border-bottom', "0 none transparent")
:wikitext(' ')
row:tag('th')
:wikitext('+ガンシールド')
local countForGunShiled = math.ceil(50 / damage)
row:tag('td'):attr('align', 'right'):wikitext(countForGunShiled + math.ceil(100 / damage))
row:tag('td'):attr('align', 'right'):wikitext(countForGunShiled + math.ceil(150 / damage))
row:tag('td'):attr('align', 'right'):wikitext(countForGunShiled + math.ceil(175 / damage))
row:tag('td'):attr('align', 'right'):wikitext(countForGunShiled + math.ceil(200 / damage))
row:tag('td'):attr('align', 'right'):wikitext(countForGunShiled + math.ceil(225 / damage))
end
local function renderTable(args)
local mul = args.mul or 1
local roundFunc
if mul == 0.85 then
roundFunc = round
else
roundFunc = roundover
end
local baseDamage
if args.amped then
baseDamage = round(1.2 * (args.damage or 20))
else
baseDamage = args.damage or 20
end
local headMul = args.head or 2
local headDamage = round(headMul * baseDamage)
local legMul = args.leg or 0.8
local table = mw.html.create('table')
:addClass('wikitable')
renderHeader(table, mul)
renderRow(
table,
"頭 (x" .. headMul .. ")",
roundFunc(mul * headDamage),
4)
local hlmLv1Mul = 0.2 + 0.8 * headMul
renderRow(
table,
'<span class="text-rarity text-rarity-common">Lv.1 (x' .. hlmLv1Mul .. ')</span>',
roundFunc(mul * round(hlmLv1Mul * baseDamage)))
local hlmLv2Mul = 0.4 + 0.6 * headMul
renderRow(
table,
'<span class="text-rarity text-rarity-rare">Lv.2 (x' .. hlmLv2Mul .. ')</span>',
roundFunc(mul * round(hlmLv2Mul * baseDamage)))
local hlmLv3Mul = 0.5 + 0.5 * headMul
renderRow(
table,
'<span class="text-rarity text-rarity-epic">Lv.3</span>/<span class="text-rarity text-rarity-legendary">4 (x' .. hlmLv3Mul .. ')</span>',
roundFunc(mul * round(hlmLv3Mul * baseDamage)))
local bodyDamage = roundFunc(mul * baseDamage)
if mul == 1.05 then
renderRow(table, "胴・脚", bodyDamage, 1)
elseif mul == 0.85 then
renderRow(table, "胴", bodyDamage, 2, 1)
renderRowForGunShiled(table, bodyDamage)
renderRow(table, "脚 (x" .. legMul .. ")", roundFunc(mul * round(legMul * baseDamage)), 1)
else
renderRow(table, "胴", bodyDamage, 1)
renderRow(table, "脚 (x" .. legMul .. ")", roundFunc(mul * round(legMul * baseDamage)), 1)
end
return table
end
function p._main(args)
return tostring(renderTable(args))
end
function p.main(frame)
if not getArgs then
getArgs = require('Module:Arguments').getArgs
end
args = getArgs(frame)
-- fix arguments
args.damage = tonumber(args.damage)
args.head = tonumber(args.head)
args.leg = tonumber(args.leg)
args.mul = tonumber(args.mul)
args.amped = args.amped == 'true'
return p._main(args)
end
return p