| 🌟 | 現在、 鉄壁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