◆少前百科是非盈利性、非官方的少女前线维基百科。
◆如果您发现某些内容错误/空缺,请勇于修正/添加!参与进来其实很容易!点这里 加入少前百科
◆有任何意见、建议、纠错,欢迎在 GFwiki:反馈与建议 提出和讨论。编辑事务讨论QQ群:597764980,微博@GFwiki少前百科
◆To foreigners,You can use twitter to contact us.
Icon Nyto Silver.png

更改

跳转至: 导航搜索

模块:Gun info

添加7,027字节2023年9月25日 (一) 21:59
无编辑摘要
local p = {}
local args = {}
local rootsuper
local gundata
local mid
local data
local bdata = {}
local infobox etdata = requiremw.loadData('Module:Equip info/type data')local odata = mw.loadData('Module:InfoboxGun info/obtain data')local skindata = mw.infoboxloadData('Module:Gun info/skin data')
local guntype = { {'手枪', '冲锋枪', '步枪', '突击步枪', '机枪', '霰弹枪', [0] = '所有枪种'},
{'HG', 'SMG', 'RF', 'AR', 'MG', 'SG'} }
local attrs = {'伤害', '射速', '命中', '回避', '暴击率', '技能冷却速度', '', '护甲'}
local bonuses = {'pow', 'hit', 'dodge', 'speed', 'rate', 'critical_harm_rate',
'critical_percent', 'armor_piercing', 'armor', 'night_view_percent', 'bullet_number_up'}
local cardstyles = ''
 
local function makeCard(d, f, p)
local cats = {'配件', '弹匣', '人形'}
local typeinfo = etdata[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 = #bonuses, 1, -1 do
local v = bonuses[i]
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,
['页面'] = p ~= nil and d.altname or d.name,
['名称'] = d.name,
['类别'] = cats[typeinfo.category],
['类型'] = typeinfo.name,
['描述'] = mw.ustring.gsub(desc, '<%%>', '<span>%</span>')
}}
end
 
local function putEquipments()
local root = super:tag('div'):attr('id', 'equip-container')
local function copy(t)
local ret = {}
for i, v in ipairs(t) do ret[i] = v end
return ret
end
local equips = {
{{1, 4, 13, 16}, {2, 6}, {3,10}},
{{3, 9, 10}, {2, 6}, {1, 1, 2, 3, 4, 13}},
{{2, 5}, {1, 1, 2, 3, 13}, {3, 15}},
{{1, 1, 2, 3, 4, 13}, {2, 8}, {3, 9, 10}},
{{2, 5, 17}, {1, 1, 2, 3, 16}, {3, 14, 21}},
{{3, 11}, {2, 7}, {1, 1, 2, 3, 4, 22}}
}
local defaults = equips[gundata.guntype]
local catnames = {'配件', '弹匣', '人形'}
root:newline():wikitext('=== 装备 ==='):newline()
local edata = {}
for i = 1,3 do edata[i] = gundata['equip' .. tostring(i)] and
copy(gundata['equip' .. tostring(i)]) or defaults[i] end
local equipTable = root:tag('table')
for i = 1,3 do
local tr = equipTable:tag('tr')
for j = 1,3 do
local td = tr:tag('td')
if i == 1 then td:wikitext(
'[[File:Equip_cat_' .. tostring(edata[j][1]) .. '.png|link=]]')
elseif i == 2 then td:wikitext(catnames[edata[j][1]])
else
local etypes = {}
for k = 2,#(edata[j]) do etypes[k-1] = etdata[edata[j][k]].name end
td:wikitext('可装备', table.concat(etypes, '/'))
end
end
end
local ex = gundata.exclusives
if ex[1] then
local frame = mw.getCurrentFrame()
cardstyles = frame:extensionTag{
name = 'templatestyles', args = { src = '模板:装备/card.css' }
}
local eqdata = mw.loadData('Module:Equip info/data')
local exTable = root:tag('table'):tag('tr')
local cols = {}
for i = 1,3 do cols[#cols+1] = exTable:tag('td') end
for _,v in ipairs(ex) do
local e = eqdata[v]
cols[etdata[e.etype].category]:wikitext(makeCard(e, frame))
end
end
end
local function serveSkillInfo(order, ismod)
local root = mw.html.create()
local id = (ismod and moddata or gundata)['skill' .. order]
local group = math.floor(id/1e5) == 1 and '1' or 'other'
end
skilldata = bdata[group][id]
local skill = root:tag('table'):attr{ id = 'skill' .. order .. (ismod and 'mod' or ''), class = 'skill-table',
['data-cd'] = skilldata.cd_time,
['data-cd-start'] = skilldata.start_cd_time }:addClass('skill' .. order)
if skilldata.vals then skill:attr('data-val', skilldata.vals) end
local signature = skill:tag('tr'):attr('class', 'skill-signature')
local icon = signature:tag('td')
icon:attr('rowspan', 2)
:wikitext('[[fileFile:icon Skill IconSkill ' .. skilldata.code .. '.png|48px|link=]]')
local skillname = signature:tag('td')
skillname:wikitext(skilldata.name)
if order == '2' or then skillname:tag('span'):wikitext('改型2解锁') elseif ismod then skillname:tag('span'):wikitext('心智升级改型1强化') end
local lvcd = skill:tag('tr'):tag('td'):attr('class', 'skill-lvcd')
lvcd:tag('span'):wikitext('等级10')
desc:tag('p'):wikitext((string.gsub(v, '\n', '<br>'))) end
end
return tostring(root)
end
local function putSkills()
local root= super:tag('div'):attr('id', 'skill-container') root:newline():wikitext('=== 技能 ===') root:newline() root:wikitext(serveSkillInfo('1')) if gundata.ismod ['mod'] then root:wikitext(serveSkillInfo('1', true)) root:wikitext(serveSkillInfo('2', true)) endend local function addChibi() local root = mw.html.create() root:newline():wikitext('== 战斗形象 =='):newline() local div = root:tag('div'):addClass('dollSpineBox') local argTable = {'ChibiCostumeSwitcher', target = 'TDollChibiAnimation'} local guncode = string.gsub(gundata.code, ' ', '_') if moddata then argTable['costumes.mod'] = '心智升级' end for _, v in ipairs(gundata.skins) do local skin = skindata[v] if skin then local skincode = guncode .. '_' .. tostring(v) argTable['costumes.' .. skincode] = skin.name end
end
rootlocal frame = mw.getCurrentFrame() div:wikitext(frame:callParserFunction('#widget', argTable)) div:tag('div'):addClass('tdoll_chibi'):newlineattr{ id = 'TDollChibiAnimation', ['data-tdoll-id'] = guncode } return tostring(root)
end
local function addImages()
local root = super:tag('div'):attr('id', 'image-container') root:newline():wikitext('== 人形外观 ==') root:newline()
local guncode = string.gsub(gundata.code, ' ', '_')
local skindata classdata = mw.loadData('Module:Gun info/skin_dataskinclass_data')
local control = root:tag('div'):attr('id', 'unit-showcase-control')
control:tag('div'):attr('id', 'unit-image-selected')
if moddata then
local moditem = menu:tag('li')
:attr('data-skincode', guncode .. 'Mod'):wikitext('心智升级')
local l2dmod = {[55] = 1, [56] = 1, [57] = 1, [65] = 1, [101] = 1,
[103] = 1, [122] = 1, [143] = 1}
if l2dmod[gundata.id] then moditem:addClass('live2d1') :wikitext( '<div></div><div><span>心智升级</span></div><div class="live2d1"></div>') else moditem:wikitext('心智升级') end
end
for _, v in ipairs(gundata.skins) do
local skin = skindata[v]
if skin then
local skincode = guncode .. '_' .. tostring(v)
local skinclass = classdata[skin.class_id] local item = menu:tag('li'):attr('data-skincode', skincode) local tdiv = item:tag('div') if skinclass then tdiv:addClass('theme' .. tostring(skinclass.theme_type)) end local scdiv = item:tag('div') scdiv:tag('span'):wikitext(skin.name) itemif skinclass then scdiv:tag('span'):wikitext(skindataskinclass.skin_classes[skin.class]name) end local ldiv = item:tag('div') local skintype = tostring(skin['type'] item:attr('data-skincode', skincode) if skintype ~= 0 'nil' then item:addClass('live2d' .. tostringskintype) ldiv:addClass('live2d' .. skintype))
end
end
showcase:tag('div'):attr('id', 'unit-image-display')
:done():tag('div'):attr('id', 'live2d-control'):cssText('display:none')
root:newline()
end
effect_text:wikitext('<br>')
effect_text:wikitext(concatEffects(anames, avals, i)) end end
end
 
local function r2fs(r)
local f = math.floor(1500/r)
return f, string.format('%.2g', f/30)
end
local function addCombatInfo()
local root = super:tag('div'):attr('id', 'stat-container')
local gtype = gundata.guntype
local speeds = {15,12,7,10,4,6}
local crits = {20,5,40,20,5,40}
local targets = {{0}, {4}, {1}, {2}, {6}, {5}}
root:newline():wikitext('== 战斗数据 =='):newline()
local ratios = { gundata.life, gundata.power, gundata.rate,
gundata.hit, gundata.dodge, gundata.armor or 0 }
end
local attrtable = root:tag('div'):attr('id', 'attr-table')
attrtable:newline():wikitext([[
{|
|+生命
|-
!×1!!×2!!×3!!×4!!×5
|-id="hp-tr"
| || || || ||
|}]]):newline()
local gtable = attrtable:tag('table'):attr('id', 'growing2')
gtable:tag('tr'):tag('th'):attr{id = 'growth', colspan = 5}:wikitext'成长'
gtable:tag('tr'):tag('td'):attr{id = 'grow-td', colspan = 5}
local gaid1 = {1, 2, 3, 5, 9}
local gaid2 = {1, 3, 4, 2, 8}
local gthr = gtable:tag('tr')
for i = 1, 5 do
local gth = gthr:tag('th'):attr('id', bonuses[gaid1[i]]):wikitext(attrs[gaid2[i]])
if i == 4 and gundata.max_rate then
local f = mw.getCurrentFrame()
gth:tag('span'):addClass('max-rate'):wikitext(f:expandTemplate{
title='popup', args={['内容']=string.format(
'射速上限:%d(攻击间隔%d帧/%s秒)',
gundata.max_rate, r2fs(gundata.max_rate))
}})
end
if i == 4 and moddata and moddata.max_rate then
local f = mw.getCurrentFrame()
gth:tag('span'):addClass('max-rate-mod'):wikitext(
f:expandTemplate{title='popup', args={['内容']=string.format(
'射速上限:%d(攻击间隔%d帧/%s秒)',
moddata.max_rate, r2fs(moddata.max_rate))
}
}) end
end
local gtdr = gtable:tag('tr')
for i = 1, 5 do gtdr:tag('td'):attr('id', bonuses[gaid1[i]] .. '-td') end
attrtable:newline():wikitext(string.format([[
{|
!id="ap"|穿甲!!id="round"|弹量!!id="speed"|移速!!id="crit"|暴击!!id="critpow"|暴伤
|-
|15||data-attr="%d" data-mod="%d"|%s||%s||data-attr="%d" data-mod="%d"|%s%%||150%%
|}]],
gundata.round or 0,
makeEffectTable(self_pos, effect_poses, moddata.effect_target or targets[gtype], moddata.effect, container)
end
root:newline()
putSkills()
end
local function addInfobox()
local root = mw.html.create('div'):addClass('dollinfo') local modrank = {'', '4', '4', '5', '6'} local orgdata = mw.loadData('Module:Gun info/org data') local org, org2 = orgdata[math.floor(gundata.org/100)], orgdata[gundata.org] local illustars, cv rank = gundata.illu or '', gundata.cv or ''rank root:wikitext(infobox{local isextra = mid > 1000 above local weapon = guntype[1][gundata.name,guntype] if isextra then stars = '<span>★</span> EXTRA' else label1 for i = 1, rank do stars = stars .. '编号<span>★</span>',end data1 if moddata then for i = gundata.idrank+1,modrank[rank] do label2 stars = '武器类型<span>☆</span>',.. stars end end end data2 local obtains = guntype{} for _, v in ipairs(gundata.obtain) do obtains[#obtains+1]= odata[v] end if gundata.obtain[1] == 1 or gundata.guntypeobtain[1],== 2 then label3 obtains[#obtains+1] = '稀有度制造用时:',.. mw.getContentLanguage() data3 = tostring :formatDuration(gundata.rankproduce_time) .. end root:wikitext(moddata and '(心智升级:' string.format([=[<div id="dollnum">NO. modrank%d</div><div id="dollrar">%s</div><div id="dollwph">%s武器</div><div id="dollwpd">[[gundataFile:图标-%s.rankpng|link=]] %s</div><div id="dollpic"><div>[[File:Icon_No.%d%s. png|link=]]</div></div><div id="dollilh">形象设计</div><div id="dollild">%s</div><div id="dollcvh">配音</div><div id="dollcvd">%s</div><div id="dolldph">部门</div><div id="dolldpd">%s</div><div id="dollobh">入编渠道</div><div id="dollobd">%s</div><div id="dollinh">介绍</div><div id="dollind">%s</div>]=], mid, stars, isextra and '' or '烙印', weapon, isextra and weapon or (args['武器'] or gundata.name), label4 = mid, moddata and '_Mod' or '', gundata.illu or '不明', gundata.cv or '所属部门不明', data4 = org and string.format('[[内部一览/%s|%s]]-%s', org, org, org2), label5 = or '作画', data5 = stringtable.formatconcat(obtains, '[[立绘画师一览#%s|%s]]<br>', illu, illu), label6 = args['配音介绍', data6 = string.format(] or '[[角色配音一览#%s|%s]]', cv, cv)) }) return tostring(root:newline()
end
local function _gunInfo()
if mid = tonumber(args[1]) if mid < 1000 then
data = mw.loadData('Module:Gun info/data')
else
data = mw.loadData('Module:Gun info/data extra')
end
gundata = data[tonumber(args[1])mid]
if gundata == nil then
return '<p style="color:red">未找到编号对应的战术人形信息,请检查编号是否正确及' ..
'<a href="/w/Module:Gun_info/data">Module:Gun info/data</a>的数据是否为最新。</p>'
end
if gundata.['mod '] == 1 then
local moddataOrig = mw.loadData('Module:Gun info/data mod')[tonumber(args[1])+20000]
moddata = {}
for k,v in pairs(moddataOrig) do moddata[k] = v end for k,v in pairs(gundata) do moddata[k] = moddataOrigmoddata[k] or v end if gundata[k] .max_rate and not moddata.max_rate then moddata.max_rate = gundata.max_rate end
end
local root = mw.html.create() root:wikitext(addInfobox()) addInfoboxsuper = root:tag('div'):attr('id', 'doll-container')
addImages()
addCombatInfo()
putSkills()
putEquipments()
root:wikitext(addChibi())
local templatestyles = mw.getCurrentFrame():extensionTag{
name = 'templatestyles', args = { src = '模板:战术人形信息/styles.css' }
}
return cardstyles .. templatestyles .. tostring(root)
end

导航菜单