| 🌟 | 現在、 鉄壁HSは通常HSと同じダメージになります。LMG及びDMR、チャージライフル、ハンマーポイント弾を除き、すべてのダメージ値が一致していることを確認しています。  | 
「モジュール:DamageTables」の版間の差分
		
		
		
		
		
		ナビゲーションに移動
		検索に移動
		
				
		
		
	
 (デフォルトプリセットの差し替え)  | 
				 (lowprofile, fortified, ampedCoverのデータをpresetから参照するように変更)  | 
				||
| 50行目: | 50行目: | ||
local copiedStringValues = {  | local copiedStringValues = {  | ||
	skullpiercerrarity = 'legendary',  | 	skullpiercerrarity = 'legendary',  | ||
}  | }  | ||
| 99行目: | 98行目: | ||
	args2.caption = name  | 	args2.caption = name  | ||
	args2.mul = mul  | 	args2.mul = mul  | ||
	args2.shieldinfo = args.shieldinfo  | |||
	if opts.useDisruptor then  | 	if opts.useDisruptor then  | ||
		args2.disruptor      = args.disruptor  | 		args2.disruptor      = args.disruptor  | ||
| 134行目: | 134行目: | ||
	-- init value  | 	-- init value  | ||
	local initValues = {  | 	local initValues = {  | ||
		lowprofile =   | 		lowprofile = nil,  | ||
		fortified =   | 		fortified = nil,  | ||
		disruptor = 1,  | 		disruptor = 1,  | ||
		hammerpoint = 1,  | 		hammerpoint = 1,  | ||
		passthrough = 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  | 	-- fix arguments  | ||
| 145行目: | 150行目: | ||
		args[key] = aw.getAsNumber(args[key], value)  | 		args[key] = aw.getAsNumber(args[key], value)  | ||
	end  | 	end  | ||
	args.amped = aw.getAsBoolean(args.amped,   | 	args.amped = aw.getAsBoolean(args.amped, shieldinfo.ampedCover)  | ||
	-- build node  | 	-- build node  | ||
| 176行目: | 181行目: | ||
	-- low profile  | 	-- low profile  | ||
	local lowprofile = args.lowprofile or shieldinfo.lowprofile  | |||
	if lowprofile > 1 then  | |||
		builder  | 		builder  | ||
			:append('</div>\n')  | 			:append('</div>\n')  | ||
| 182行目: | 188行目: | ||
			:append('<div class="group-container">\n')  | 			:append('<div class="group-container">\n')  | ||
		appendGroupTables(builder, '小柄', args, 1,   | 		appendGroupTables(builder, '小柄', args, 1, lowprofile, frame, { notCreateNewGroup = true })  | ||
		if args.passthrough < 1 then  | 		if args.passthrough < 1 then  | ||
			local caption = string.format('小柄+貫通 (x%s)', args.passthrough)  | 			local caption = string.format('小柄+貫通 (x%s)', args.passthrough)  | ||
			appendGroupTables(builder, caption, args, 1,   | 			appendGroupTables(builder, caption, args, 1, a.lowprofile, frame, { 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,   | 				appendGroupTables(builder, '小柄+' .. args[varname], args, i, lowprofile, frame, 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+貫通 (x%s)', args[varname], args.passthrough)  | ||
					appendGroupTables(builder, caption, args, i,   | 					appendGroupTables(builder, caption, args, i, lowprofile, frame, { usePassthrough = true })  | ||
				end  | 				end  | ||
			end  | 			end  | ||
| 199行目: | 205行目: | ||
		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,   | 			appendGroupTables(builder, caption, args, 1, lowprofile, frame, { 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,   | 			appendGroupTables(builder, caption, args, 1, lowprofile, frame, { useHammerpoint = true })  | ||
		end  | 		end  | ||
	end  | 	end  | ||
	-- fortified  | 	-- fortified  | ||
	local fortified = args.fortified or shieldinfo.fortified  | |||
	if fortified < 1 then  | |||
		builder  | 		builder  | ||
			:append('</div>\n')  | 			:append('</div>\n')  | ||
| 214行目: | 221行目: | ||
			:append('<div class="group-container">\n')  | 			:append('<div class="group-container">\n')  | ||
		appendGroupTables(builder, '鉄壁', args, 1,   | 		appendGroupTables(builder, '鉄壁', args, 1, fortified, frame, { notCreateNewGroup = true })  | ||
		if args.passthrough < 1 then  | 		if args.passthrough < 1 then  | ||
			local caption = string.format('鉄壁+貫通 (x%s)', args.passthrough)  | 			local caption = string.format('鉄壁+貫通 (x%s)', args.passthrough)  | ||
			appendGroupTables(builder, caption, args, 1,   | 			appendGroupTables(builder, caption, args, 1, fortified, frame, { 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,   | 				appendGroupTables(builder, '鉄壁+' .. args[varname], args, i, fortified, frame, 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+貫通 (x%s)', args[varname], args.passthrough)  | ||
					appendGroupTables(builder, caption, args, i,   | 					appendGroupTables(builder, caption, args, i, fortified, frame, { usePassthrough = true })  | ||
				end  | 				end  | ||
			end  | 			end  | ||
| 231行目: | 238行目: | ||
		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,   | 			appendGroupTables(builder, caption, args, 1, fortified, frame, { 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,   | 			appendGroupTables(builder, caption, args, 1, fortified, frame, { useHammerpoint = true })  | ||
		end  | 		end  | ||
	end  | 	end  | ||
2021年5月8日 (土) 11:02時点における版
このモジュールについての説明文ページを モジュール:DamageTables/doc に作成できます
local p = {}
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',
}
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, frame, 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, frame))
	
	if args.amped then
		local ampedCover = inu.tactical('amped_cover')
		if name == '通常' 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)
	-- init value
	local initValues = {
		lowprofile = nil,
		fortified = nil,
		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)
	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, '通常', args, 1, 1, frame, { notCreateNewGroup = true })
	if args.passthrough < 1 then
		local caption = string.format('貫通 (x%s)', args.passthrough)
		appendGroupTables(builder, caption, args, 1, 1, frame, { 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, frame, empty)
			if args.passthrough < 1 then
				local caption = string.format('%s+貫通 (x%s)', args[varname], args.passthrough)
				appendGroupTables(builder, caption, args, i, 1, frame, { 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, frame, { 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, frame, { useHammerpoint = true })
	end
	
	-- low profile
	local lowprofile = args.lowprofile or shieldinfo.lowprofile
	if lowprofile > 1 then
		builder
			:append('</div>\n')
			:append('=== [[小柄]] ===\n')
			:append('<div class="group-container">\n')
		
		appendGroupTables(builder, '小柄', args, 1, lowprofile, frame, { notCreateNewGroup = true })
		if args.passthrough < 1 then
			local caption = string.format('小柄+貫通 (x%s)', args.passthrough)
			appendGroupTables(builder, caption, args, 1, a.lowprofile, frame, { 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, lowprofile, frame, empty)
				if args.passthrough < 1 then
					local caption = string.format('小柄+%s+貫通 (x%s)', args[varname], args.passthrough)
					appendGroupTables(builder, caption, args, i, lowprofile, frame, { 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, frame, { 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, frame, { useHammerpoint = true })
		end
	end
	
	-- fortified
	local fortified = args.fortified or shieldinfo.fortified
	if fortified < 1 then
		builder
			:append('</div>\n')
			:append('=== [[鉄壁]] ===\n')
			:append('<div class="group-container">\n')
		
		appendGroupTables(builder, '鉄壁', args, 1, fortified, frame, { notCreateNewGroup = true })
		if args.passthrough < 1 then
			local caption = string.format('鉄壁+貫通 (x%s)', args.passthrough)
			appendGroupTables(builder, caption, args, 1, fortified, frame, { 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, fortified, frame, empty)
				if args.passthrough < 1 then
					local caption = string.format('鉄壁+%s+貫通 (x%s)', args[varname], args.passthrough)
					appendGroupTables(builder, caption, args, i, fortified, frame, { 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, frame, { 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, frame, { 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