🌟現在、鉄壁 鉄壁ヘッドショットには対応済みです。
鉄壁HSは通常HSと同じダメージになります。LMG及びDMR、チャージライフル、ハンマーポイント弾を除き、すべてのダメージ値が一致していることを確認しています。

「モジュール:DamageTables」の版間の差分

提供:Apex Data
ナビゲーションに移動 検索に移動
(言語設定機能の追加)
(ローカライズ機能の実装)
1行目: 1行目:
local p = {}
local p = {}
local cfg = mw.loadData('Module:DamageTables/configuration')


local aw = require('Module:Utility/Library')
local aw = require('Module:Utility/Library')
88行目: 89行目:
end
end


local function appendGroupTables(builder, name, args, idx, mul, frame, opts)
local function appendGroupTables(builder, name, args, idx, mul, ctx, opts)
if not opts.notCreateNewGroup then
if not opts.notCreateNewGroup then
builder
builder
115行目: 116行目:
args2.passthroughsup = args.passthrough
args2.passthroughsup = args.passthrough
end
end
builder:append(DamageTable._main(args2, frame))
builder:append(DamageTable._main(args2, ctx.frame))
if args.amped then
if args.amped then
local ampedCover = inu.tactical('amped_cover')
local ampedCover = inu.tactical('amped_cover', { lang = ctx.lang })
if name == '通常' then
if name == ctx.res.normal then
args2.caption = ampedCover
args2.caption = ampedCover
else
else
133行目: 134行目:


function p._main(args, frame)
function p._main(args, frame)
-- load resources
local lang = args.lang or 'ja'
args.lang = lang
local res = cfg[lang]
local ctx = {
frame = frame,
lang = lang,
cfg = cfg,
res = res,
}
-- init value
-- init value
local initValues = {
local initValues = {
160行目: 172行目:
builder:append('<div class="group-container">\n')
builder:append('<div class="group-container">\n')
appendGroupTables(builder, '通常', args, 1, 1, frame, { notCreateNewGroup = true })
appendGroupTables(builder, res.normal, args, 1, 1, ctx, { notCreateNewGroup = true })
if args.passthrough < 1 then
if args.passthrough < 1 then
local caption = string.format('貫通 (x%s)', args.passthrough)
local caption = string.format(cfg.caption_format, res.piercing_shots, args.passthrough)
appendGroupTables(builder, caption, args, 1, 1, frame, { notCreateNewGroup = not args.amped, usePassthrough = true })
appendGroupTables(builder, caption, args, 1, 1, ctx, { notCreateNewGroup = not args.amped, usePassthrough = true })
end
end
for i = 2, maxcount do
for i = 2, maxcount do
local varname = string.format('name%d', i)
local varname = string.format('name%d', i)
if args[varname] then
if args[varname] then
appendGroupTables(builder, args[varname], args, i, 1, frame, empty)
appendGroupTables(builder, args[varname], args, i, 1, ctx, empty)
if args.passthrough < 1 then
if args.passthrough < 1 then
local caption = string.format('%s+貫通 (x%s)', args[varname], args.passthrough)
local caption = string.format('%s%s' .. cfg.caption_format, args[varname], cfg.separator, res.piercing_shots, args.passthrough)
appendGroupTables(builder, caption, args, i, 1, frame, { notCreateNewGroup = not args.amped, usePassthrough = true })
appendGroupTables(builder, caption, args, i, 1, ctx, { notCreateNewGroup = not args.amped, usePassthrough = true })
end
end
end
end
177行目: 189行目:
if args.disruptor > 1 then
if args.disruptor > 1 then
local caption = string.format('%s <span class="text-rarity text-rarity-epic">ディスラプター弾 (x%s)</span>', iu.hopup('disruptor_rounds'), args.disruptor)
local caption = string.format('%s <span class="text-rarity text-rarity-epic">ディスラプター弾 (x%s)</span>', iu.hopup('disruptor_rounds'), args.disruptor)
appendGroupTables(builder, caption, args, 1, 1, frame, { useDisruptor = true })
appendGroupTables(builder, caption, args, 1, 1, ctx, { useDisruptor = true })
end
end
if args.hammerpoint > 1 then
if args.hammerpoint > 1 then
local caption = string.format('%s <span class="text-rarity text-rarity-epic">ハンマーポイント弾 (x%s)</span>', iu.hopup('hammerpoint_rounds'), args.hammerpoint)
local caption = string.format('%s <span class="text-rarity text-rarity-epic">ハンマーポイント弾 (x%s)</span>', iu.hopup('hammerpoint_rounds'), args.hammerpoint)
appendGroupTables(builder, caption, args, 1, 1, frame, { useHammerpoint = true })
appendGroupTables(builder, caption, args, 1, 1, ctx, { useHammerpoint = true })
end
end
189行目: 201行目:
builder
builder
:append('</div>\n')
:append('</div>\n')
:append('=== [[小柄]] ===\n')
:append(string.format(cfg.passive_park, res.lowprofile))
:append('<div class="group-container">\n')
:append('<div class="group-container">\n')
appendGroupTables(builder, '小柄', args, 1, lowprofile, frame, { notCreateNewGroup = true })
appendGroupTables(builder, res.lowprofile, args, 1, lowprofile, ctx, { notCreateNewGroup = true })
if args.passthrough < 1 then
if args.passthrough < 1 then
local caption = string.format('小柄+貫通 (x%s)', args.passthrough)
local caption = string.format('%s%s' .. cfg.caption_format, res.lowprofile, cfg.separator, res.piercing_shots, args.passthrough)
appendGroupTables(builder, caption, args, 1, lowprofile, frame, { notCreateNewGroup = not args.amped, usePassthrough = true })
appendGroupTables(builder, caption, args, 1, lowprofile, ctx, { notCreateNewGroup = not args.amped, usePassthrough = true })
end
end
for i = 2, maxcount do
for i = 2, maxcount do
local varname = string.format('name%d', i)
local varname = string.format('name%d', i)
if args[varname] then
if args[varname] then
appendGroupTables(builder, '小柄+' .. args[varname], args, i, lowprofile, frame, empty)
local caption = string.format('%s%s%s', res.lowprofile, cfg.separator, args[varname])
appendGroupTables(builder, caption, args, i, lowprofile, ctx, empty)
if args.passthrough < 1 then
if args.passthrough < 1 then
local caption = string.format('小柄+%s+貫通 (x%s)', args[varname], args.passthrough)
local caption = string.format('%s%s%s%s' .. cfg.caption_format, res.lowprofile, cfg.separator, args[varname], cfg.separator, res.piercing_shots, args.passthrough)
appendGroupTables(builder, caption, args, i, lowprofile, frame, { notCreateNewGroup = not args.amped, usePassthrough = true })
appendGroupTables(builder, caption, args, i, lowprofile, ctx, { notCreateNewGroup = not args.amped, usePassthrough = true })
end
end
end
end
209行目: 222行目:
if args.disruptor > 1 then
if args.disruptor > 1 then
local caption = string.format('小柄+%s <span class="text-rarity text-rarity-epic">ディスラプター弾 (x%s)</span>', iu.hopup('disruptor_rounds'), args.disruptor)
local caption = string.format('小柄+%s <span class="text-rarity text-rarity-epic">ディスラプター弾 (x%s)</span>', iu.hopup('disruptor_rounds'), args.disruptor)
appendGroupTables(builder, caption, args, 1, lowprofile, frame, { useDisruptor = true })
appendGroupTables(builder, caption, args, 1, lowprofile, ctx, { useDisruptor = true })
end
end
if args.hammerpoint > 1 then
if args.hammerpoint > 1 then
local caption = string.format('小柄+%s <span class="text-rarity text-rarity-epic">ハンマーポイント弾 (x%s)</span>', iu.hopup('hammerpoint_rounds'), args.hammerpoint)
local caption = string.format('小柄+%s <span class="text-rarity text-rarity-epic">ハンマーポイント弾 (x%s)</span>', iu.hopup('hammerpoint_rounds'), args.hammerpoint)
appendGroupTables(builder, caption, args, 1, lowprofile, frame, { useHammerpoint = true })
appendGroupTables(builder, caption, args, 1, lowprofile, ctx, { useHammerpoint = true })
end
end
end
end
222行目: 235行目:
builder
builder
:append('</div>\n')
:append('</div>\n')
:append('=== [[鉄壁]] ===\n')
:append(string.format(cfg.passive_park, res.fortified))
:append('<div class="group-container">\n')
:append('<div class="group-container">\n')
appendGroupTables(builder, '鉄壁', args, 1, fortified, frame, { notCreateNewGroup = true })
appendGroupTables(builder, res.fortified, args, 1, fortified, ctx, { notCreateNewGroup = true })
if args.passthrough < 1 then
if args.passthrough < 1 then
local caption = string.format('鉄壁+貫通 (x%s)', args.passthrough)
local caption = string.format('%s%s' .. cfg.caption_format, res.fortified, cfg.separator, res.piercing_shots, args.passthrough)
appendGroupTables(builder, caption, args, 1, fortified, frame, { notCreateNewGroup = not args.amped, usePassthrough = true })
appendGroupTables(builder, caption, args, 1, fortified, ctx, { notCreateNewGroup = not args.amped, usePassthrough = true })
end
end
for i = 2, maxcount do
for i = 2, maxcount do
local varname = string.format('name%d', i)
local varname = string.format('name%d', i)
if args[varname] then
if args[varname] then
appendGroupTables(builder, '鉄壁+' .. args[varname], args, i, fortified, frame, empty)
local caption = string.format('%s%s%s', res.fortified, cfg.separator, args[varname])
appendGroupTables(builder, caption, args, i, fortified, ctx, empty)
if args.passthrough < 1 then
if args.passthrough < 1 then
local caption = string.format('鉄壁+%s+貫通 (x%s)', args[varname], args.passthrough)
local caption = string.format('%s%s%s%s' .. cfg.caption_format, res.fortified, cfg.separator, args[varname], cfg.separator, res.piercing_shots, args.passthrough)
appendGroupTables(builder, caption, args, i, fortified, frame, { notCreateNewGroup = not args.amped, usePassthrough = true })
appendGroupTables(builder, caption, args, i, fortified, ctx, { notCreateNewGroup = not args.amped, usePassthrough = true })
end
end
end
end
242行目: 256行目:
if args.disruptor > 1 then
if args.disruptor > 1 then
local caption = string.format('鉄壁+%s <span class="text-rarity text-rarity-epic">ディスラプター弾 (x%s)</span>', iu.hopup('disruptor_rounds'), args.disruptor)
local caption = string.format('鉄壁+%s <span class="text-rarity text-rarity-epic">ディスラプター弾 (x%s)</span>', iu.hopup('disruptor_rounds'), args.disruptor)
appendGroupTables(builder, caption, args, 1, fortified, frame, { useDisruptor = true })
appendGroupTables(builder, caption, args, 1, fortified, ctx, { useDisruptor = true })
end
end
if args.hammerpoint > 1 then
if args.hammerpoint > 1 then
local caption = string.format('鉄壁+%s <span class="text-rarity text-rarity-epic">ハンマーポイント弾 (x%s)</span>', iu.hopup('hammerpoint_rounds'), args.hammerpoint)
local caption = string.format('鉄壁+%s <span class="text-rarity text-rarity-epic">ハンマーポイント弾 (x%s)</span>', iu.hopup('hammerpoint_rounds'), args.hammerpoint)
appendGroupTables(builder, caption, args, 1, fortified, frame, { useHammerpoint = true })
appendGroupTables(builder, caption, args, 1, fortified, ctx, { useHammerpoint = true })
end
end
end
end

2021年5月9日 (日) 18:39時点における版

このモジュールについての説明文ページを モジュール:DamageTables/doc に作成できます

local p = {}
local cfg = mw.loadData('Module:DamageTables/configuration')

local aw = require('Module:Utility/Library')
local iu = require('Module:Utility/Image')
local inu = require('Module:Utility/ImageWithName')
local DamageTable = require('Module:DamageTable')
local getArgs -- lazily initialized

local indexableValues = {
	damage = 20,
	beamdamage = 0,
	ticks = 0,
	pellet = 1,
	head = 2,
	leg = 0.8,
	rps = 0,
}

local copiedValues = {
	damagemin = 1000,
	damagemax = 0,
	beamdamagemin = 0,
	beamdamagemax = 0,
	pelletmin = 0,
	pelletmax = 0,
	headmax = -1,
	legmin = 0,
	mulmin = 0.85,
	mulmax = 1.05,
	skullpiercer = 1,
	rpsratio1 = 0,
	rpsratio2 = 0,
	rpsratio3 = 0,
	raise = 0,
	reload = 0,
	reloadratio2 = 0.95,
	reloadratio3 = 0.9,
	extmag0 = 0,
	extmag1 = 0,
	extmag2 = 0,
	extmag3 = 0,
}

local copiedBooleanValues = {
	round = false,
	amped = false,
	forcegunshield = false,
}

local copiedStringValues = {
	skullpiercerrarity = 'legendary',
	lang = 'ja',
}

local function rebuildArguments(base, idx, mul)
	local ret = {}
	
	-- 再構築する変数
	for key, value in pairs(indexableValues) do
		local temp = aw.getAsNumber(base[key .. idx], -1)
		if temp < 0 then
			temp = aw.getAsNumber(base[key], -1)
			
			if temp < 0 then
				temp = value
			end
		end
		
		ret[key] = temp
	end
	
	-- コピーする変数
	for key, value in pairs(copiedValues) do
		local temp = aw.getAsNumber(base[key], -1)
		if temp < 0 then
			temp = value
		end
		ret[key] = temp
	end
	for key, value in pairs(copiedBooleanValues) do
		ret[key] = aw.getAsBoolean(base[key], value)
	end
	for key, value in pairs(copiedStringValues) do
		ret[key] = base[key] or value
	end
	
	return ret
end

local function appendGroupTables(builder, name, args, idx, mul, ctx, opts)
	if not opts.notCreateNewGroup then
		builder
			:append('</div>\n')
			:append('<div class="group-container">\n')
	end
	
	local args2 = rebuildArguments(args, idx, mul)
	args2.amped = false
	args2.caption = name
	args2.mul = mul
	args2.shieldinfo = args.shieldinfo
	if opts.useDisruptor then
		args2.disruptor      = args.disruptor
	else
		args2.disruptorsup   = args.disruptor
	end
	if opts.useHammerpoint then
		args2.hammerpoint    = args.hammerpoint
	else
		args2.hammerpointsup = args.hammerpoint
	end
	if opts.usePassthrough then
		args2.passthrough    = args.passthrough
	else
		args2.passthroughsup = args.passthrough
	end
	builder:append(DamageTable._main(args2, ctx.frame))
	
	if args.amped then
		local ampedCover = inu.tactical('amped_cover', { lang = ctx.lang })
		if name == ctx.res.normal then
			args2.caption = ampedCover
		else
			args2.caption = string.format('%s+%s', name, ampedCover)
		end
		args2.amped = true
		builder:append(DamageTable._main(args2, frame))
	end
end

local maxcount = 5
local empty = {}

function p._main(args, frame)
	-- load resources
	local lang = args.lang or 'ja'
	args.lang = lang
	local res = cfg[lang]
	local ctx = {
		frame = frame,
		lang = lang,
		cfg = cfg,
		res = res,
	}
	
	-- init value
	local initValues = {
		lowprofile = -1,
		fortified = -1,
		disruptor = 1,
		hammerpoint = 1,
		passthrough = 1,
	}
	
	-- load shield info
	args.shieldpreset = args.shieldpreset or 'removelowprofile'
	local shieldinfo = require('Module:Stat/Shield')[args.shieldpreset]
	args.shieldinfo = shieldinfo
	
	-- fix arguments
	for key, value in pairs(initValues) do
		args[key] = aw.getAsNumber(args[key], value)
		if args[key] == -1 then
			args[key] = nil
		end
	end
	args.amped = aw.getAsBoolean(args.amped, shieldinfo.ampedCover)
	
	-- build node
	local builder = require('Module:Utility/StringBuilder').new()
	builder:append('<div class="group-container">\n')
	
	appendGroupTables(builder, res.normal, args, 1, 1, ctx, { notCreateNewGroup = true })
	if args.passthrough < 1 then
		local caption = string.format(cfg.caption_format, res.piercing_shots, args.passthrough)
		appendGroupTables(builder, caption, args, 1, 1, ctx, { notCreateNewGroup = not args.amped, usePassthrough = true })
	end
	for i = 2, maxcount do
		local varname = string.format('name%d', i)
		if args[varname] then
			appendGroupTables(builder, args[varname], args, i, 1, ctx, empty)
			if args.passthrough < 1 then
				local caption = string.format('%s%s' .. cfg.caption_format, args[varname], cfg.separator, res.piercing_shots, args.passthrough)
				appendGroupTables(builder, caption, args, i, 1, ctx, { notCreateNewGroup = not args.amped, usePassthrough = true })
			end
		end
	end
	if args.disruptor > 1 then
		local caption = string.format('%s <span class="text-rarity text-rarity-epic">ディスラプター弾 (x%s)</span>', iu.hopup('disruptor_rounds'), args.disruptor)
		appendGroupTables(builder, caption, args, 1, 1, ctx, { useDisruptor = true })
	end
	if args.hammerpoint > 1 then
		local caption = string.format('%s <span class="text-rarity text-rarity-epic">ハンマーポイント弾 (x%s)</span>', iu.hopup('hammerpoint_rounds'), args.hammerpoint)
		appendGroupTables(builder, caption, args, 1, 1, ctx, { useHammerpoint = true })
	end
	
	-- low profile
	local lowprofile = args.lowprofile or shieldinfo.lowprofile
	if lowprofile > 1 then
		builder
			:append('</div>\n')
			:append(string.format(cfg.passive_park, res.lowprofile))
			:append('<div class="group-container">\n')
		
		appendGroupTables(builder, res.lowprofile, args, 1, lowprofile, ctx, { notCreateNewGroup = true })
		if args.passthrough < 1 then
			local caption = string.format('%s%s' .. cfg.caption_format, res.lowprofile, cfg.separator, res.piercing_shots, args.passthrough)
			appendGroupTables(builder, caption, args, 1, lowprofile, ctx, { notCreateNewGroup = not args.amped, usePassthrough = true })
		end
		for i = 2, maxcount do
			local varname = string.format('name%d', i)
			if args[varname] then
				local caption = string.format('%s%s%s', res.lowprofile, cfg.separator, args[varname])
				appendGroupTables(builder, caption, args, i, lowprofile, ctx, empty)
				if args.passthrough < 1 then
					local caption = string.format('%s%s%s%s' .. cfg.caption_format, res.lowprofile, cfg.separator, args[varname], cfg.separator, res.piercing_shots, args.passthrough)
					appendGroupTables(builder, caption, args, i, lowprofile, ctx, { notCreateNewGroup = not args.amped, usePassthrough = true })
				end
			end
		end
		if args.disruptor > 1 then
			local caption = string.format('小柄+%s <span class="text-rarity text-rarity-epic">ディスラプター弾 (x%s)</span>', iu.hopup('disruptor_rounds'), args.disruptor)
			appendGroupTables(builder, caption, args, 1, lowprofile, ctx, { useDisruptor = true })
		end
		if args.hammerpoint > 1 then
			local caption = string.format('小柄+%s <span class="text-rarity text-rarity-epic">ハンマーポイント弾 (x%s)</span>', iu.hopup('hammerpoint_rounds'), args.hammerpoint)
			appendGroupTables(builder, caption, args, 1, lowprofile, ctx, { useHammerpoint = true })
		end
	end
	
	-- fortified
	local fortified = args.fortified or shieldinfo.fortified
	if fortified < 1 then
		builder
			:append('</div>\n')
			:append(string.format(cfg.passive_park, res.fortified))
			:append('<div class="group-container">\n')
		
		appendGroupTables(builder, res.fortified, args, 1, fortified, ctx, { notCreateNewGroup = true })
		if args.passthrough < 1 then
			local caption = string.format('%s%s' .. cfg.caption_format, res.fortified, cfg.separator, res.piercing_shots, args.passthrough)
			appendGroupTables(builder, caption, args, 1, fortified, ctx, { notCreateNewGroup = not args.amped, usePassthrough = true })
		end
		for i = 2, maxcount do
			local varname = string.format('name%d', i)
			if args[varname] then
				local caption = string.format('%s%s%s', res.fortified, cfg.separator, args[varname])
				appendGroupTables(builder, caption, args, i, fortified, ctx, empty)
				if args.passthrough < 1 then
					local caption = string.format('%s%s%s%s' .. cfg.caption_format, res.fortified, cfg.separator, args[varname], cfg.separator, res.piercing_shots, args.passthrough)
					appendGroupTables(builder, caption, args, i, fortified, ctx, { notCreateNewGroup = not args.amped, usePassthrough = true })
				end
			end
		end
		if args.disruptor > 1 then
			local caption = string.format('鉄壁+%s <span class="text-rarity text-rarity-epic">ディスラプター弾 (x%s)</span>', iu.hopup('disruptor_rounds'), args.disruptor)
			appendGroupTables(builder, caption, args, 1, fortified, ctx, { useDisruptor = true })
		end
		if args.hammerpoint > 1 then
			local caption = string.format('鉄壁+%s <span class="text-rarity text-rarity-epic">ハンマーポイント弾 (x%s)</span>', iu.hopup('hammerpoint_rounds'), args.hammerpoint)
			appendGroupTables(builder, caption, args, 1, fortified, ctx, { useHammerpoint = true })
		end
	end
	
	-- close tag
	builder:append('</div>')
	
	return tostring(builder)
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