🌟 | 現在、 鉄壁ヘッドショットには対応済みです。 鉄壁HSは通常HSと同じダメージになります。LMG及びDMR、チャージライフル、ハンマーポイント弾を除き、すべてのダメージ値が一致していることを確認しています。 |
「モジュール:WeaponNavbox」の版間の差分
ナビゲーションに移動
検索に移動
(弾薬のテンプレート変更による画像呼び出しの引数を変更) |
(ヘッドショット倍率による武器一覧の生成ロジックを追加) |
||
1行目: | 1行目: | ||
local p = {} | local p = {} | ||
local aw = require('Module:Utility/Library') | |||
local formatter -- lazily initialized | local formatter -- lazily initialized | ||
local function stringStarts(str, start) | local function stringStarts(str, start) | ||
return string.sub(str, 1, string.len(start)) == start | return string.sub(str, 1, string.len(start)) == start | ||
end | |||
local function createRow(tbl, text) | |||
return tbl:tag('tr') | |||
:tag('th') | |||
:wikitext(text) | |||
:done() | |||
:tag('td') | |||
:tag('ul') | |||
:addClass('tpl-navbox-list') | |||
end | end | ||
15行目: | 26行目: | ||
pistol = "ピストル", | pistol = "ピストル", | ||
} | } | ||
local function createRowForType(tbl, name | local function createRowForType(tbl, name) | ||
local type = TypeDict[name] | local type = TypeDict[name] | ||
return createRow(tbl, type) | |||
end | end | ||
37行目: | 38行目: | ||
shotgun = "ショットガンアモ", | shotgun = "ショットガンアモ", | ||
} | } | ||
local function createRowForAmmo(tbl, name | local function createRowForAmmo(tbl, name) | ||
local item | local item | ||
if name == 'special' then | if name == 'special' then | ||
46行目: | 47行目: | ||
end | end | ||
return createRow(tbl, item) | |||
end | |||
local function createRowForHSMultiplier(tbl, hsmul) | |||
return createRow(tbl, string.format('%s倍', hsmul)) | |||
end | end | ||
69行目: | 64行目: | ||
:wikitext('武器') | :wikitext('武器') | ||
for _, name in ipairs(keys) do | for _, name in ipairs(keys) do | ||
fn(tbl, name, names[name]) | local list = fn(tbl, name) | ||
for _, value in ipairs(names[name]) do | |||
list:tag('li') | |||
:wikitext(string.format('[[%s]]', value)) | |||
end | |||
end | end | ||
return tbl:done() | return tbl:done() | ||
111行目: | 110行目: | ||
{ 'light', 'heavy', 'energy', 'sniper', 'shotgun', 'special' }, | { 'light', 'heavy', 'energy', 'sniper', 'shotgun', 'special' }, | ||
weaponsByAmmos, createRowForAmmo) | weaponsByAmmos, createRowForAmmo) | ||
end | |||
local function renderNavboxByHSMultiplier() | |||
local stat = mw.loadData('Module:Stat/Weapon') | |||
local weaponsByHSMultipliers = {} | |||
for key, value in pairs(stat) do | |||
if weaponsByHSMultipliers[value.damage.headshot] == nil then | |||
weaponsByHSMultipliers[value.damage.headshot] = {} | |||
end | |||
table.insert(weaponsByHSMultipliers[value.damage.headshot], key) | |||
end | |||
local keys = aw.getTableKeys(weaponsByHSMultipliers) | |||
table.sort(keys) | |||
return renderNavbox( | |||
keys, | |||
weaponsByHSMultipliers, createRowForHSMultiplier) | |||
end | end | ||
121行目: | 138行目: | ||
formatter = require('Module:Utility/Formatter').new(frame) | formatter = require('Module:Utility/Formatter').new(frame) | ||
return tostring(renderNavboxByAmmo(args)) | return tostring(renderNavboxByAmmo(args)) | ||
end | |||
function p.byhsmul(frame) | |||
formatter = require('Module:Utility/Formatter').new(frame) | |||
return tostring(renderNavboxByHSMultiplier(args)) | |||
end | end | ||
return p | return p |
2021年2月15日 (月) 11:16時点における版
このモジュールについての説明文ページを モジュール:WeaponNavbox/doc に作成できます
local p = {} local aw = require('Module:Utility/Library') local formatter -- lazily initialized local function stringStarts(str, start) return string.sub(str, 1, string.len(start)) == start end local function createRow(tbl, text) return tbl:tag('tr') :tag('th') :wikitext(text) :done() :tag('td') :tag('ul') :addClass('tpl-navbox-list') end local TypeDict = { assault_rifle = "アサルトライフル", sub_machine_gun = "サブマシンガン", light_machine_gun = "ライトマシンガン", sniper = "スナイパーライフル", shotgun = "ショットガン", pistol = "ピストル", } local function createRowForType(tbl, name) local type = TypeDict[name] return createRow(tbl, type) end local AmmoDict = { light = "ライトアモ", heavy = "ヘビーアモ", energy = "エネルギーアモ", sniper = "スナイパーアモ", shotgun = "ショットガンアモ", } local function createRowForAmmo(tbl, name) local item if name == 'special' then item = formatter:ammo('専用スナイパーアモ', 20) .. ' 物資投下' else local ammo = AmmoDict[name] item = string.format('%s %s', formatter:ammo(ammo, 20), ammo) end return createRow(tbl, item) end local function createRowForHSMultiplier(tbl, hsmul) return createRow(tbl, string.format('%s倍', hsmul)) end local function renderNavbox(keys, names, fn) local tbl = mw.html.create('table') :addClass('tpl-navbox-table') :addClass('tpl-navbox-table-containstitle') tbl:tag('tr') :tag('th') :attr('colspan', 2) :addClass('tpl-navbox-table-title') :wikitext('武器') for _, name in ipairs(keys) do local list = fn(tbl, name) for _, value in ipairs(names[name]) do list:tag('li') :wikitext(string.format('[[%s]]', value)) end end return tbl:done() end local function renderNavboxByType() local stat = mw.loadData('Module:Stat/Weapon') local weaponsByTypes = {} for key, value in pairs(stat) do if weaponsByTypes[value.category] == nil then weaponsByTypes[value.category] = {} end table.insert(weaponsByTypes[value.category], key) end return renderNavbox( { 'assault_rifle', 'sub_machine_gun', 'light_machine_gun', 'sniper', 'shotgun', 'pistol' }, weaponsByTypes, createRowForType) end local function renderNavboxByAmmo() local stat = mw.loadData('Module:Stat/Weapon') local weaponsByAmmos = {} for key, value in pairs(stat) do local target if stringStarts(value.ammo, "special_") then if weaponsByAmmos.special == nil then weaponsByAmmos.special = {} end target = weaponsByAmmos.special else if weaponsByAmmos[value.ammo] == nil then weaponsByAmmos[value.ammo] = {} end target = weaponsByAmmos[value.ammo] end table.insert(target, key) end return renderNavbox( { 'light', 'heavy', 'energy', 'sniper', 'shotgun', 'special' }, weaponsByAmmos, createRowForAmmo) end local function renderNavboxByHSMultiplier() local stat = mw.loadData('Module:Stat/Weapon') local weaponsByHSMultipliers = {} for key, value in pairs(stat) do if weaponsByHSMultipliers[value.damage.headshot] == nil then weaponsByHSMultipliers[value.damage.headshot] = {} end table.insert(weaponsByHSMultipliers[value.damage.headshot], key) end local keys = aw.getTableKeys(weaponsByHSMultipliers) table.sort(keys) return renderNavbox( keys, weaponsByHSMultipliers, createRowForHSMultiplier) end function p.bytype(frame) formatter = require('Module:Utility/Formatter').new(frame) return tostring(renderNavboxByType(args)) end function p.byammo(frame) formatter = require('Module:Utility/Formatter').new(frame) return tostring(renderNavboxByAmmo(args)) end function p.byhsmul(frame) formatter = require('Module:Utility/Formatter').new(frame) return tostring(renderNavboxByHSMultiplier(args)) end return p