🌟 | 現在、 鉄壁ヘッドショットには対応済みです。 鉄壁HSは通常HSと同じダメージになります。LMG及びDMR、チャージライフル、ハンマーポイント弾を除き、すべてのダメージ値が一致していることを確認しています。 |
モジュール:WeaponInfobox/Spread
ナビゲーションに移動
検索に移動
このモジュールについての説明文ページを モジュール:WeaponInfobox/Spread/doc に作成できます
local p = {} local cfg = mw.loadData('Module:WeaponInfobox/configuration') local function isAllKickOnFireZero(k) return k.stand_hip == 0 and k.stand_ads == 0 and k.crouch_hip == 0 and k.crouch_ads == 0 and k.air_hip == 0 and k.air_ads == 0 end local function hasSecondDecimalPlace(num) return math.floor(10 * num) ~= 10 * num end local function getFormatString1(num) return string.format('%.1f°', num) end local function getFormatString2(num) return string.format('%.2f°', num) end local function getDiffFormatString1(num) if num <= 0 then return '-' else return string.format('%+.1f°', num) end end local function getDiffFormatString2(num) if num == 0 then return '-' else return string.format('%+.2f°', num) end end local function getFormatStringFunction(stat) if hasSecondDecimalPlace(stat.stand_hip) or hasSecondDecimalPlace(stat.stand_hip_run) or hasSecondDecimalPlace(stat.stand_hip_sprint) or hasSecondDecimalPlace(stat.stand_ads) or hasSecondDecimalPlace(stat.crouch_hip) or hasSecondDecimalPlace(stat.crouch_ads) or hasSecondDecimalPlace(stat.air_hip) or hasSecondDecimalPlace(stat.air_ads) or hasSecondDecimalPlace(stat.max_kick.stand_hip) or hasSecondDecimalPlace(stat.max_kick.stand_ads) or hasSecondDecimalPlace(stat.max_kick.crouch_hip) or hasSecondDecimalPlace(stat.max_kick.crouch_ads) or hasSecondDecimalPlace(stat.max_kick.air_hip) or hasSecondDecimalPlace(stat.max_kick.air_ads) then return getFormatString2 else return getFormatString1 end end local function getDiffFormatStringFunction(stat) if hasSecondDecimalPlace(stat.kick_on_fire.stand_hip) or hasSecondDecimalPlace(stat.kick_on_fire.stand_ads) or hasSecondDecimalPlace(stat.kick_on_fire.crouch_hip) or hasSecondDecimalPlace(stat.kick_on_fire.crouch_ads) or hasSecondDecimalPlace(stat.kick_on_fire.air_hip) or hasSecondDecimalPlace(stat.kick_on_fire.air_ads) then return getDiffFormatString2 else return getDiffFormatString1 end end function p.renderSpread(stat, lang) local spread = cfg[lang].spread local getFormatString = getFormatStringFunction(stat) local getDiffFormatString = getDiffFormatStringFunction(stat) local tbl = mw.html.create('table') :addClass('intable') :css('font-size', '92%') local header = tbl:tag('tr') :tag('th') :attr('colspan', 3) :wikitext(spread.state.name) :done() :tag('th') :wikitext(spread.first_shot) :done() local hideKickOnFire = isAllKickOnFireZero(stat.kick_on_fire) if not hideKickOnFire then header:tag('th') :wikitext(spread.increment) :done() :tag('th') :wikitext(spread.maximum) end -- Hipfire local hipfire = tbl:tag('tr') :tag('th') :addClass(spread.state.hip_class) :attr('rowspan', 5) :tag('span') :wikitext(spread.state.hip) :done() :done() :tag('th') :addClass(spread.state.stand_class) :attr('rowspan', 3) :tag('span') :wikitext(spread.state.stand) :done() :done() :tag('th') :wikitext(spread.state.still) :done() :tag('td') :addClass('cell-type-number') :attr('align', 'right') :wikitext(getFormatString(stat.stand_hip)) :done() if not hideKickOnFire then hipfire :tag('td') :addClass('cell-type-number') :attr('align', 'right') :attr('rowspan', 3) :wikitext(getDiffFormatString(stat.kick_on_fire.stand_hip)) :done() :tag('td') :addClass('cell-type-number') :attr('align', 'right') :wikitext(getFormatString(stat.stand_hip + stat.max_kick.stand_hip)) end local run = tbl:tag('tr') :tag('th') :wikitext(spread.state.run) :done() :tag('td') :addClass('cell-type-number') :attr('align', 'right') :wikitext(getFormatString(stat.stand_hip_run)) :done() if not hideKickOnFire then run:tag('td') :addClass('cell-type-number') :attr('align', 'right') :wikitext(getFormatString(stat.stand_hip_run + stat.max_kick.stand_hip)) end local sprint = tbl:tag('tr') :tag('th') :wikitext(spread.state.sprint) :done() :tag('td') :addClass('cell-type-number') :attr('align', 'right') :wikitext(getFormatString(stat.stand_hip_sprint)) :done() if not hideKickOnFire then sprint:tag('td') :addClass('cell-type-number') :attr('align', 'right') :wikitext(getFormatString(stat.stand_hip_sprint + stat.max_kick.stand_hip)) end -- Hipfire while crouching local crouch = tbl:tag('tr') :tag('th') :attr('colspan', 2) :wikitext(spread.state.crouch) :done() :tag('td') :addClass('cell-type-number') :attr('align', 'right') :wikitext(getFormatString(stat.crouch_hip)) :done() if not hideKickOnFire then crouch :tag('td') :addClass('cell-type-number') :attr('align', 'right') :wikitext(getDiffFormatString(stat.kick_on_fire.crouch_hip)) :tag('td') :addClass('cell-type-number') :attr('align', 'right') :wikitext(getFormatString(stat.crouch_hip + stat.max_kick.crouch_hip)) end -- Hipfire in the air local air = tbl:tag('tr') :tag('th') :attr('colspan', 2) :wikitext(spread.state.air) :done() :tag('td') :addClass('cell-type-number') :attr('align', 'right') :wikitext(getFormatString(stat.air_hip)) :done() if not hideKickOnFire then air:tag('td') :addClass('cell-type-number') :attr('align', 'right') :wikitext(getDiffFormatString(stat.kick_on_fire.air_hip)) :tag('td') :addClass('cell-type-number') :attr('align', 'right') :wikitext(getFormatString(stat.air_hip + stat.max_kick.air_hip)) end -- ADS if stat.stand_ads == stat.crouch_ads and stat.kick_on_fire.stand_ads == stat.kick_on_fire.crouch_ads and stat.max_kick.stand_ads == stat.max_kick.crouch_ads then local ads = tbl:tag('tr') :tag('th') :addClass(spread.state.ads_class) :attr('rowspan', 3) :tag('span') :wikitext(spread.state.ads) :done() :done() :tag('th') :attr('colspan', 2) :wikitext(spread.state.standcrouch) :done() :tag('td') :addClass('cell-type-number') :attr('align', 'right') :wikitext(getFormatString(stat.stand_ads)) :done() if not hideKickOnFire then ads :tag('td') :addClass('cell-type-number') :attr('align', 'right') :wikitext(getDiffFormatString(stat.kick_on_fire.stand_ads)) :tag('td') :addClass('cell-type-number') :attr('align', 'right') :wikitext(getFormatString(stat.stand_ads + stat.max_kick.stand_ads)) end else local hipads = tbl:tag('tr') :tag('th') :addClass(spread.state.ads_class) :attr('rowspan', 3) :tag('span') :wikitext(spread.state.ads) :done() :done() :tag('th') :attr('colspan', 2) :wikitext(spread.state.stand) :done() :tag('td') :addClass('cell-type-number') :attr('align', 'right') :wikitext(getFormatString(stat.stand_ads)) :done() if not hideKickOnFire then hipads :tag('td') :addClass('cell-type-number') :attr('align', 'right') :wikitext(getDiffFormatString(stat.kick_on_fire.stand_ads)) :tag('td') :addClass('cell-type-number') :attr('align', 'right') :wikitext(getFormatString(stat.stand_ads + stat.max_kick.stand_ads)) end -- ADS while crouching local crouchads = tbl:tag('tr') :tag('th') :attr('colspan', 2) :wikitext(spread.state.crouch) :done() :tag('td') :addClass('cell-type-number') :attr('align', 'right') :wikitext(getFormatString(stat.crouch_ads)) :done() if not hideKickOnFire then crouchads :tag('td') :addClass('cell-type-number') :attr('align', 'right') :wikitext(getDiffFormatString(stat.kick_on_fire.crouch_ads)) :tag('td') :addClass('cell-type-number') :attr('align', 'right') :wikitext(getFormatString(stat.crouch_ads + stat.max_kick.crouch_ads)) end end -- ADS in the air local airads = tbl:tag('tr') :tag('th') :attr('colspan', 2) :wikitext(spread.state.air) :done() :tag('td') :addClass('cell-type-number') :attr('align', 'right') :wikitext(getFormatString(stat.air_ads)) :done() if not hideKickOnFire then airads :tag('td') :addClass('cell-type-number') :attr('align', 'right') :wikitext(getDiffFormatString(stat.kick_on_fire.air_ads)) :tag('td') :addClass('cell-type-number') :attr('align', 'right') :wikitext(getFormatString(stat.air_ads + stat.max_kick.air_ads)) end return tbl end function p._main(name, lang) lang = lang or 'ja' local stat = mw.loadData('Module:Stat/Weapon')[name].spread local node = p.renderSpread(stat, lang) return tostring(node) end return p