◆少前百科是非盈利性、非官方的少女前线维基百科。 ◆如果您发现某些内容错误/空缺,请勇于修正/添加!参与进来其实很容易!点这里 加入少前百科。 ◆有任何意见、建议、纠错,欢迎在 GFwiki:反馈与建议 提出和讨论。编辑事务讨论QQ群:597764980,微博@GFwiki少前百科 ◆To foreigners,You can use twitter to contact us. |
“模块:Equip info/index”的版本间的差异
(未显示同一用户的12个中间版本) | |||
第2行: | 第2行: | ||
local data = mw.loadData('Module:Equip info/data') | local data = mw.loadData('Module:Equip info/data') | ||
local tdata = mw.loadData('Module:Equip info/type data') | local tdata = mw.loadData('Module:Equip info/type data') | ||
− | local | + | local gdata0 = mw.loadData('Module:Gun info/data') |
+ | local gdata1 = mw.loadData('Module:Gun info/data extra') | ||
+ | local odata = mw.loadData('Module:Gun info/obtain data') | ||
local cats = {'配件', '弹匣', '人形'} | local cats = {'配件', '弹匣', '人形'} | ||
+ | local gtypes = {'HG', 'SMG', 'RF', 'AR', 'MG', 'SG'} | ||
local bonuses = { | local bonuses = { | ||
{'pow', 'atk'}, {'rate', 'rate'}, {'hit', 'acc'}, {'dodge', 'eva'}, | {'pow', 'atk'}, {'rate', 'rate'}, {'hit', 'acc'}, {'dodge', 'eva'}, | ||
第10行: | 第13行: | ||
{'bullet_number_up', 'bullet'}, {'night_view_percent', 'night'} | {'bullet_number_up', 'bullet'}, {'night_view_percent', 'night'} | ||
} | } | ||
+ | local obtains = {[0] = '', [3] = '主线战役', [5] = '每月签到', [302] = '限时活动', | ||
+ | [3001] = '装备制造', [3003] = '机密商店', [3016] = '心智升级', | ||
+ | [3028] = '前进营地', [3047] = '限时活动'} | ||
local root | local root | ||
+ | local frame | ||
+ | local finds = function(s) | ||
+ | return function(p) return mw.ustring.find(s, p) ~= nil end | ||
+ | end | ||
+ | |||
+ | local function findObtain(id) | ||
+ | local ostr = odata[id] | ||
+ | local findo = finds(ostr) | ||
+ | if findo('签到') then return '每月签到' | ||
+ | elseif id == 3096 then return '灰域探查' | ||
+ | elseif findo('积分') then return '排行奖励' | ||
+ | elseif findo('常驻') then return '常驻活动' | ||
+ | elseif findo('限时') then return '限时活动' | ||
+ | end | ||
+ | return '限时活动' | ||
+ | end | ||
+ | |||
+ | local function changeName(s, t) | ||
+ | local dicts = {['1'] = '第一代', ['2'] = '第二代'} | ||
+ | local usub = mw.ustring.sub | ||
+ | local stripped = usub(s, 2) | ||
+ | local nd = (mw.ustring.find(stripped, '%D')) | ||
+ | local d, a = usub(stripped, 1, nd-1), usub(stripped, nd) | ||
+ | if t == 7 then return d .. '号' .. a | ||
+ | else return dicts[d] .. a end | ||
+ | end | ||
local function createDataRow(k) | local function createDataRow(k) | ||
local edata = data[k] | local edata = data[k] | ||
+ | local uname = edata.name | ||
+ | if finds(uname)('#') then uname = changeName(uname, edata.etype) end | ||
local base = { | local base = { | ||
['data-id'] = k, | ['data-id'] = k, | ||
['data-name-ingame'] = edata.name, | ['data-name-ingame'] = edata.name, | ||
− | ['data-url'] = tostring(mw.uri.localUrl( | + | ['data-url'] = tostring(mw.uri.localUrl(uname)), |
['data-equip-class1'] = cats[tdata[edata.etype].category], | ['data-equip-class1'] = cats[tdata[edata.etype].category], | ||
['data-equip-class2'] = tdata[edata.etype].name, | ['data-equip-class2'] = tdata[edata.etype].name, | ||
['data-base-skill'] = edata.sp_desc ~= nil and 1 or 0, | ['data-base-skill'] = edata.sp_desc ~= nil and 1 or 0, | ||
− | ['data-avatar'] = edata.code .. '.png' | + | ['data-avatar'] = frame:callParserFunction('filepath', edata.code .. '.png') |
} | } | ||
for _, v in ipairs(bonuses) do | for _, v in ipairs(bonuses) do | ||
第32行: | 第66行: | ||
else base['data-base-' .. k2] = 0 end | else base['data-base-' .. k2] = 0 end | ||
end | end | ||
− | if edata.fits ~= nil then for i, v in ipairs(edata.fits) do | + | if edata.fits ~= nil then |
− | + | local gdata = edata.fits[1] < 1000 and gdata0 or gdata1 | |
+ | base['data-equip-dolltype'] = gtypes[gdata[edata.fits[1]].guntype] | ||
+ | for i, v in ipairs(edata.fits) do | ||
+ | base['data-equip-dollname' .. tostring(i)] = gdata[v].name | ||
+ | end | ||
+ | end | ||
+ | local isAct, oarray = false, {} | ||
+ | for _, v in ipairs(edata.obtain) do | ||
+ | oarray[#oarray+1] = obtains[v] or findObtain(v) | ||
+ | if oarray[#oarray] == '常驻活动' then | ||
+ | isAct = true | ||
+ | break | ||
+ | end | ||
+ | end | ||
+ | if isAct then base['data-obtain'] = '常驻活动' | ||
+ | elseif #oarray > 1 and oarray[1] == oarray[2] then base['data-obtain'] = oarray[1] | ||
+ | else base['data-obtain'] = table.concat(oarray, '/') end | ||
root:tag('div'):addClass('equipdata'):attr(base) | root:tag('div'):addClass('equipdata'):attr(base) | ||
end | end | ||
− | function p.equipIndex() | + | local function getKeys(a) |
+ | local ks = {} | ||
+ | if a == nil then for k, _ in pairs(data) do ks[#ks+1] = k end | ||
+ | elseif a == 'ex' then for k, v in pairs(data) do | ||
+ | if v.fits ~= nil then ks[#ks+1] = k end | ||
+ | end | ||
+ | else for k, v in pairs(data) do | ||
+ | if v.fits == nil then ks[#ks+1] = k end | ||
+ | end | ||
+ | end | ||
+ | return ks | ||
+ | end | ||
+ | |||
+ | function p.equipIndex(f) | ||
root = mw.html.create() | root = mw.html.create() | ||
− | local | + | local a = f.args[1] |
− | + | local ks = getKeys(a ~= nil and mw.text.trim(a) or nil) | |
table.sort(ks, function(v1, v2) return v1 > v2 end) | table.sort(ks, function(v1, v2) return v1 > v2 end) | ||
+ | frame = mw.getCurrentFrame() | ||
for _, k in ipairs(ks) do createDataRow(k) end | for _, k in ipairs(ks) do createDataRow(k) end | ||
return tostring(root) | return tostring(root) | ||
end | end | ||
return p | return p |
2024年4月13日 (六) 01:34的最新版本
此模块的文档可以在模块:Equip info/index/doc创建
local p = {} local data = mw.loadData('Module:Equip info/data') local tdata = mw.loadData('Module:Equip info/type data') local gdata0 = mw.loadData('Module:Gun info/data') local gdata1 = mw.loadData('Module:Gun info/data extra') local odata = mw.loadData('Module:Gun info/obtain data') local cats = {'配件', '弹匣', '人形'} local gtypes = {'HG', 'SMG', 'RF', 'AR', 'MG', 'SG'} local bonuses = { {'pow', 'atk'}, {'rate', 'rate'}, {'hit', 'acc'}, {'dodge', 'eva'}, {'armor', 'armor'}, {'armor_piercing', 'ampierce'}, {'speed', 'move'}, {'critical_percent', 'criper'}, {'critical_harm_rate', 'crirate'}, {'bullet_number_up', 'bullet'}, {'night_view_percent', 'night'} } local obtains = {[0] = '', [3] = '主线战役', [5] = '每月签到', [302] = '限时活动', [3001] = '装备制造', [3003] = '机密商店', [3016] = '心智升级', [3028] = '前进营地', [3047] = '限时活动'} local root local frame local finds = function(s) return function(p) return mw.ustring.find(s, p) ~= nil end end local function findObtain(id) local ostr = odata[id] local findo = finds(ostr) if findo('签到') then return '每月签到' elseif id == 3096 then return '灰域探查' elseif findo('积分') then return '排行奖励' elseif findo('常驻') then return '常驻活动' elseif findo('限时') then return '限时活动' end return '限时活动' end local function changeName(s, t) local dicts = {['1'] = '第一代', ['2'] = '第二代'} local usub = mw.ustring.sub local stripped = usub(s, 2) local nd = (mw.ustring.find(stripped, '%D')) local d, a = usub(stripped, 1, nd-1), usub(stripped, nd) if t == 7 then return d .. '号' .. a else return dicts[d] .. a end end local function createDataRow(k) local edata = data[k] local uname = edata.name if finds(uname)('#') then uname = changeName(uname, edata.etype) end local base = { ['data-id'] = k, ['data-name-ingame'] = edata.name, ['data-url'] = tostring(mw.uri.localUrl(uname)), ['data-equip-class1'] = cats[tdata[edata.etype].category], ['data-equip-class2'] = tdata[edata.etype].name, ['data-base-skill'] = edata.sp_desc ~= nil and 1 or 0, ['data-avatar'] = frame:callParserFunction('filepath', edata.code .. '.png') } for _, v in ipairs(bonuses) do local k1, k2 = unpack(v) if edata[k1] ~= nil then local b, bb = edata[k1][2], edata.bonus_type if edata.max_level == 0 or edata.rank == 2 or bb == nil or bb[k1] == nil then base['data-base-' .. k2] = b else base['data-base-' .. k2] = math.floor(b*(1+bb[k1]/1000)) end else base['data-base-' .. k2] = 0 end end if edata.fits ~= nil then local gdata = edata.fits[1] < 1000 and gdata0 or gdata1 base['data-equip-dolltype'] = gtypes[gdata[edata.fits[1]].guntype] for i, v in ipairs(edata.fits) do base['data-equip-dollname' .. tostring(i)] = gdata[v].name end end local isAct, oarray = false, {} for _, v in ipairs(edata.obtain) do oarray[#oarray+1] = obtains[v] or findObtain(v) if oarray[#oarray] == '常驻活动' then isAct = true break end end if isAct then base['data-obtain'] = '常驻活动' elseif #oarray > 1 and oarray[1] == oarray[2] then base['data-obtain'] = oarray[1] else base['data-obtain'] = table.concat(oarray, '/') end root:tag('div'):addClass('equipdata'):attr(base) end local function getKeys(a) local ks = {} if a == nil then for k, _ in pairs(data) do ks[#ks+1] = k end elseif a == 'ex' then for k, v in pairs(data) do if v.fits ~= nil then ks[#ks+1] = k end end else for k, v in pairs(data) do if v.fits == nil then ks[#ks+1] = k end end end return ks end function p.equipIndex(f) root = mw.html.create() local a = f.args[1] local ks = getKeys(a ~= nil and mw.text.trim(a) or nil) table.sort(ks, function(v1, v2) return v1 > v2 end) frame = mw.getCurrentFrame() for _, k in ipairs(ks) do createDataRow(k) end return tostring(root) end return p