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

模块:Equip info/index

来自少前百科GFwiki
跳转至: 导航搜索

此模块的文档可以在模块: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