◆少前百科是非盈利性、非官方的少女前线维基百科。 ◆如果您发现某些内容错误/空缺,请勇于修正/添加!参与进来其实很容易!点这里 加入少前百科。 ◆有任何意见、建议、纠错,欢迎在 GFwiki:反馈与建议 提出和讨论。编辑事务讨论QQ群:597764980,微博@GFwiki少前百科 ◆To foreigners,You can use twitter to contact us. |
模块:Equip info
此模块的文档可以在模块: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 infobox = require('Module:Infobox').infobox 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>%+d<span></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 = {}, {} 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} else fixed[i] = edata[v] end end end div:wikitext(addFixed(fixed)) local gtable = div:tag('table') addGrowing(growing, gtable) 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 addInfobox() local typeinfo = tdata[edata.etype] local fitguns = {} if edata.fits ~= nil then for _, v in ipairs(edata.fits) do fitguns[#fitguns+1] = '[[' + xdata[v][1] + ']]' end end local params = { image = '[[File:' .. edata.code .. '.png]]', label1 = '类型', data1 = cats[typeinfo.category] .. '/' .. typeinfo.name, label2 = '星级', data2 = edata.rank, label3 = '适用人形', data3 = table.concat(fitguns, '、'), label4 = '限定装备', data4 = edata.is_addition == 1 and '是' or '否' } root:wikitext(infobox(params)) 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