| 🌟 | 現在、  鉄壁ヘッドショットには対応済みです。 鉄壁HSは通常HSと同じダメージになります。LMG及びDMR、チャージライフル、ハンマーポイント弾を除き、すべてのダメージ値が一致していることを確認しています。 | 
「モジュール:DamageTable」の版間の差分
		
		
		
		
		
		ナビゲーションに移動
		検索に移動
		
				
		
		
	
|  (ガンシールド有効時の確殺数の追加) |  (ガンシールドに対するダメージ値が誤っていた問題を修正) | ||
| 40行目: | 40行目: | ||
| end | end | ||
| local function renderRow(table, name, damage, rowspan | local function renderRow(table, name, damage, rowspan) | ||
| 	rowspan = rowspan or 0 | 	rowspan = rowspan or 0 | ||
| 	rowspanForDamage = rowspanForDamage or 0 | 	rowspanForDamage = rowspanForDamage or 0 | ||
| 62行目: | 62行目: | ||
| 			:wikitext(name) | 			:wikitext(name) | ||
| 	end | 	end | ||
| 	row:tag('td'):attr('align', 'right'):wikitext(damage) | |||
| 	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)) | ||
| 77行目: | 70行目: | ||
| end | end | ||
| local function renderRowForGunShiled(table, damage) | local function renderRowForGunShiled(table, damage, baseDamage) | ||
| 	local row = table:tag('tr') | 	local row = table:tag('tr') | ||
| 	row:tag('th') | 	row:tag('th') | ||
| 86行目: | 79行目: | ||
| 		:wikitext('+ガンシールド') | 		:wikitext('+ガンシールド') | ||
| 	local countForGunShiled = math.ceil(50 /  | 	local countForGunShiled = math.ceil(50 / baseDamage) | ||
| 	row:tag('td'):attr('align', 'right'):wikitext(baseDamage) | |||
| 	row:tag('td'):attr('align', 'right'):wikitext(countForGunShiled + math.ceil(100 / 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(150 / damage)) | ||
| 145行目: | 139行目: | ||
| 		renderRow(table, "胴・脚", bodyDamage, 1) | 		renderRow(table, "胴・脚", bodyDamage, 1) | ||
| 	elseif mul == 0.85 then | 	elseif mul == 0.85 then | ||
| 		renderRow(table, "胴", bodyDamage, 2 | 		renderRow(table, "胴", bodyDamage, 2) | ||
| 		renderRowForGunShiled(table, bodyDamage) | 		renderRowForGunShiled(table, bodyDamage, baseDamage) | ||
| 		renderRow(table, "脚 (x" .. legMul .. ")", roundFunc(mul * round(legMul * baseDamage)), 1) | 		renderRow(table, "脚 (x" .. legMul .. ")", roundFunc(mul * round(legMul * baseDamage)), 1) | ||
| 	else | 	else | ||
2021年1月23日 (土) 01:13時点における版
このモジュールについての説明文ページを モジュール: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)
	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
	row:tag('td'):attr('align', 'right'):wikitext(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(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, baseDamage)
	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 / baseDamage)
	row:tag('td'):attr('align', 'right'):wikitext(baseDamage)
	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)
		renderRowForGunShiled(table, bodyDamage, baseDamage)
		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