◆少前百科是非盈利性、非官方的少女前线维基百科。 ◆如果您发现某些内容错误/空缺,请勇于修正/添加!参与进来其实很容易!点这里 加入少前百科。 ◆有任何意见、建议、纠错,欢迎在 GFwiki:反馈与建议 提出和讨论。编辑事务讨论QQ群:597764980,微博@GFwiki少前百科 ◆To foreigners,You can use twitter to contact us. |
“模块:Equip info”的版本间的差异
第165行: | 第165行: | ||
local infobox = root:tag('div'):addClass('equip-infobox') | local infobox = root:tag('div'):addClass('equip-infobox') | ||
local fitguns = {} | local fitguns = {} | ||
− | if | + | if edata.fits ~= nil then |
− | for _, v in ipairs( | + | for _, v in ipairs(edata) do fitguns[#fitguns+1] = '<li>[[' .. xdata[v][1] .. ']]</li>' end |
end | end | ||
infobox:wikitext(makeCard(edata, mw.getCurrentFrame())) | infobox:wikitext(makeCard(edata, mw.getCurrentFrame())) |
2023年4月6日 (四) 01:11的版本
此模块的文档可以在模块:Equip info/doc创建
local p = {} local root local data = mw.loadData('Module:Equip info/data') local tdata = mw.loadData('Module:Equip info/type data') local xdata = mw.loadData('Module:Gun info/ex data') local odata = mw.loadData('Module:Gun info/obtain data') local edata local bonuses = {'pow', 'hit', 'dodge', 'speed', 'rate', 'critical_harm_rate', 'critical_percent', 'armor_piercing', 'armor', 'night_view_percent', 'bullet_number_up'} local titles = {{'Pow', '伤害'}, {'Hit', '命中'}, {'Dodge', '回避'}, {'Move', '移速'}, {'Rate', '射速'}, {'CtPow', '暴伤'}, {'Ct', '暴击'}, {'AP', '穿甲'}, {'Armor', '护甲'}, {'Night', '夜战'}, {'Bullet', '弹量'}} local cats = {'配件', '弹匣', '人形'} local equip local function formattime(seconds) local minutes = math.floor(seconds/60) local hour = math.floor(minutes/60) minutes = minutes - hour*60 return string.format('%02d:%02d:00', hour, minutes) end local function addObtain() equip:tag('h2'):addClass('obtain-tab'):wikitext('获取途径') local div = equip:tag('div'):addClass('equip-obtain') for _, v in ipairs(edata.obtain) do div:tag('p'):wikitext(odata[v]) end if edata.develop_duration then div:tag('div'):addClass('equip-develop'):wikitext( mw.getCurrentFrame():expandTemplate{ title='fa', args={'clock', size='30px'} }, '<span>制造用时</span>', '<span>' .. formattime(edata.develop_duration) .. '</span>') end end local function addGrowing(growing, gtable) local thead = gtable:tag('tr') thead:tag('th'):wikitext('强化等级') for i, _ in ipairs(bonuses) do if growing[i] ~= nil then thead:tag('th'):wikitext( string.format('[[File:Data %s.png|link=]]%s', unpack(titles[i]))) end end for lv = 0, 10 do local tr = gtable:tag('tr') tr:tag('td'):wikitext(lv) for i, _ in ipairs(bonuses) do if growing[i] ~= nil then local range, bonus = unpack(growing[i]) local td = tr:tag('td') if range[1] == range[2] then td:wikitext('+', math.floor(range[1]*(1+bonus*lv/1e4))) else td:wikitext(string.format('<span>%+d</span><span>%+d</span>', math.floor(range[1]*(1+bonus*lv/1e4)), math.floor(range[2]*(1+bonus*lv/1e4)))) end end end end end local function addFixed(fixed) local con = mw.html.create() for i, _ in ipairs(bonuses) do if fixed[i] ~= nil then local p = con:tag('p') p:wikitext(string.format('[[File:Data %s.png|link=]]%s', unpack(titles[i]))) local vals = fixed[i] p:wikitext(string.format('<span%s>%+d</span>', vals[1] < 0 and ' style="color:red"' or '', vals[1])) if vals[1] ~= vals[2] then p:tag('sub'):wikitext('校准率0%') p:wikitext(string.format('<span style="color:#ffb400">%+d</span>', vals[2])) p:tag('sub'):wikitext('校准率100%') end end end if edata.sp_desc ~= nil then con:tag('p'):addClass('equip-sp'):wikitext( '[[File:特殊技能icon.png|link=]]', edata.sp_desc) end return tostring(con) end local function addSpec() equip:tag('h2'):addClass('spec-tab'):wikitext('装备数据') local div = equip:tag('div'):addClass('equip-spec') local fixed, growing, hasGrowing = {}, {}, false for i, v in ipairs(bonuses) do if edata[v] ~= nil then local bonus = edata.max_level ~= 0 and edata.bonus_type[v] or nil if bonus ~= nil then growing[i] = {edata[v], bonus} hasGrowing = true else fixed[i] = edata[v] end end end div:wikitext(addFixed(fixed)) if hasGrowing then local gtable = div:tag('table') addGrowing(growing, gtable) end end local function bannerLeft() local left = mw.html.create('div') local ex, ext = 'ex', '专属' if edata.fits == nil then ex, ext = 'general', '通用' end left:wikitext(string.format( '[[File:%s_equipment_icon.png|link=]]<span class="cat cat-%s">%s装备</span>', ex, ex, ext)) local fits = left:tag('div'):addClass('equip-fits-' .. ex) if ex == 'ex' then if edata.fits[2] == nil then fits:wikitext(xdata[edata.fits[1]][1]) else fits:wikitext('多人专属') end else local types = tdata[edata.etype].fit_gun_type local gtypes = {'手枪', '冲锋枪', '狙击枪', '突击步枪', '机枪', '霰弹枪'} for _, v in ipairs(types) do fits:wikitext(string.format( '<abbr title="%s">[[File:反色图标平面-%s.png|link=]]</abbr>', (mw.ustring.gsub(gtypes[v], '狙击', '步')), gtypes[v])) end end return tostring(left) end local function addBanner() local banner = equip:tag('div'):addClass('equip-banner') local front = banner:tag('div'):addClass('equip-banner-front') front:wikitext(bannerLeft()) front:tag('div'):addClass('equip-banner-sep') local right = front:tag('div'):addClass('equip-banner-right') right:tag('p'):wikitext(edata.intro) if edata.fits == nil then right:tag('div'):addClass('equip-note'):wikitext('*可能存在特殊人形不受枪种限制') end banner:tag('span'):addClass('equip-banner-back1'):wikitext('DATASHEET') banner:tag('span'):addClass('equip-banner-back2'):wikitext('装备详情') end local function makeCard(d, f) local typeinfo = tdata[d.etype] local desc = d.desc local dollar = (mw.ustring.find(desc, '$', 1, true)) if mw.ustring.sub(desc, dollar-4, dollar-1) == '<hr>' then desc = mw.ustring.gsub(desc, '$', '') else desc = mw.ustring.gsub(desc, '$', '<hr>') end for i, v in ipairs(bonuses) do if d[v] ~= nil and mw.ustring.find(desc, v) ~= nil then local rpl = d[v][2] if d.bonus_type ~= nil and d.bonus_type[v] ~= nil then rpl = math.floor(rpl*(1+d.bonus_type[v]/1000)) end desc = mw.ustring.gsub(desc, v, string.format('span>%d</span', rpl)) end end return f:expandTemplate{title = '装备/card', args = { ['类型图标'] = typeinfo.code, ['星级'] = d.rank, ['代号'] = d.code, ['名称'] = d.name, ['类别'] = cats[typeinfo.category], ['类型'] = typeinfo.name, ['描述'] = mw.ustring.gsub(desc, '<%>', '<span>%</span>') }} end local function addInfobox() local infobox = root:tag('div'):addClass('equip-infobox') local fitguns = {} if edata.fits ~= nil then for _, v in ipairs(edata) do fitguns[#fitguns+1] = '<li>[[' .. xdata[v][1] .. ']]</li>' end end infobox:wikitext(makeCard(edata, mw.getCurrentFrame())) if #fitguns > 0 then infobox:tag('table') :tag('tr'):tag('th'):wikitext('适用人形'):done():done() :tag('tr'):tag('td'):tag('ul'):wikitext(table.concat(fitguns)) end end local function _equipInfo(id) root = mw.html.create() edata = data[id] addInfobox() equip = root:tag('div'):addClass('equip') addBanner() addSpec() addObtain() local styles = mw.getCurrentFrame():extensionTag{ name = 'templatestyles', args = { src = '模板:装备/styles.css' } } return styles .. tostring(root) end function p.equipInfo(frame) local args = frame == mw.getCurrentFrame() and frame:getParent().args or frame return _equipInfo(tonumber(args[1])) end return p