「于世界交点之处,逢似曾相识之人」

本wiki目前不支持自由编辑,如果有兴趣参与wiki内容编辑,请加入WIKI建设群904200987(游戏交流勿加会被踢)
使用wiki的数据、图片、音频资源,或者搬运页面内容时,请注明出处。具体参照CC BY-NC-SA 4.0协议
感谢Hyacinth对本wiki提供的数据支持
编辑帮助BWIKI反馈

bugfix1001.2
全站通知:

模块:Character/TeaAchieves

来自白荆回廊Wiki
跳到导航 跳到搜索

此模块的文档可以在模块:Character/TeaAchieves/doc创建

local p = {}
local db = require('模块:同调者茶憩图鉴数据库')
local data = db.character_tea_achives_data
local recipe_data = db.unlock_dialog_recipe_data
local paddingZero = require('Module:CommonTools').padding_zero
local checkRecipeFavorLevel = require('Module:茶憩配方图鉴').check_recipe_favor_level

p['茶憩纪念函'] = function(frame)
	local character_name = frame.args['name']

	if character_name == nil or character_name == '' then
		return '错误:姓名不能为空'
	end

	-- 过滤数据
	local output_data = p.cleanData(data, character_name)
	if output_data == nil then
		local html = mw.html.create()
		html = html:node(frame:expandTemplate{title = '暂无数据'}):done()
		return html
	end

	-- 拼接表格
	local html = p.get_output_html(output_data, frame)

	return tostring(html)

end

function p.cleanData(dbData, name)
	local output_data_temp = nil
	local output_data = nil

	for i, v in pairs(dbData) do
		if v['character_name'] == name then
			output_data_temp = v
			break
		end
	end

	if output_data_temp == nil then
		return output_data
	end

	output_data = output_data_temp
	for i, achive in ipairs(output_data['achives']) do
		output_data['achives'][i]['level'] = ''
		output_data['achives'][i]['icon'] = ''

		if achive['title'] ~= '' then
			-- 如果存在食谱,计算默契值
			if achive['recipe'] ~= nil then
				output_data['achives'][i]['level'] = '【默契值' .. checkRecipeFavorLevel(name, achive['recipe']) .. '级】'
			elseif achive['title'] == '点单收集' and name == '龙晴' then
				output_data['achives'][i]['level'] = '【默契值18级】'
			elseif achive['title'] == '茶憩密话' and name == '豹富' then
				output_data['achives'][i]['level'] = '【默契值16级】'
			end
			-- 处理图标
			if name == '紫都' or name == '无咎' and name == '瓦卡莎' and name == '元桃桃' and name == '长谣' then
				output_data['achives'][i]['icon'] = '茶憩_成就_' .. name .. '_' .. achive['title'] .. '.png'
			else
				if i % 2 == 1 then
					output_data['achives'][i]['icon'] = '茶憩_成就_通用1.png'
				else
					if achive['title'] == '茶憩密话' then
						output_data['achives'][i]['icon'] = '茶憩_成就_通用3.png'
					else
						output_data['achives'][i]['icon'] = '茶憩_成就_通用2.png'
					end
				end
			end

		end
	end

	return output_data
end

function p.get_output_html(data, frame)
	-- 拼接展示html
	local html = mw.html.create()
	-- 拼接图鉴
	local invitation_0_html = p.get_invitation_0(data)
	local invitation_1_html = p.get_invitation_1(data)
	local invitation_2_html = p.get_invitation_2(data)
	local invitation_3_html = p.get_invitation_3(data)
	local invitation_4_html = p.get_invitation_4(data)
	local invitation_5_html = p.get_invitation_5(data)

	local acheives_table = p.get_acheives_html(data['achives'], data['character_name'])

	html = html:tag('div'):addClass('visible-lg visible-md visible-sm') --
					:tag('div'):attr('id', 'tabber-test'):addClass('tabber tabberlive') --
						:tag('div'):addClass('tabbertab'):attr('title', '0'):attr('data-hash', '0'):wikitext(invitation_0_html):done() --
						:tag('div'):addClass('tabbertab'):attr('title', '1'):attr('data-hash', '1'):cssText('display: none;'):wikitext(invitation_1_html):done() --
						:tag('div'):addClass('tabbertab'):attr('title', '2'):attr('data-hash', '2'):cssText('display: none;'):wikitext(invitation_2_html):done() --
						:tag('div'):addClass('tabbertab'):attr('title', '3'):attr('data-hash', '3'):cssText('display: none;'):wikitext(invitation_3_html):done() --
						:tag('div'):addClass('tabbertab'):attr('title', '4'):attr('data-hash', '4'):cssText('display: none;'):wikitext(invitation_4_html):done() --
						:tag('div'):addClass('tabbertab'):attr('title', '5'):attr('data-hash', '5'):cssText('display: none;'):wikitext(invitation_5_html):done() --
					:done() --
				:done() -- 拼接表格(小屏和中屏显示)
				:tag('div'):addClass('hidden-lg hidden-md hidden-sm'):node(acheives_table):done();
	return html
end

function p.get_invitation_0(data)
	local html = mw.html.create()
	html = html:tag('div'):addClass('character-tea--invitation-1') --
					:tag('div'):addClass('character-tea--invitation-bg') --
						:wikitext('[[文件:茶憩_图鉴_背景_' .. data['character_name'] .. '_00.png|class=img-fit|link=]]') --
					:done() --
				:done();
	return tostring(html)

end
function p.get_invitation_1(data)
	local html = mw.html.create()
	html = html:tag('div'):addClass('character-tea--invitation-2') --
					:tag('div'):addClass('character-tea--invitation-bg'):wikitext('[[文件:茶憩_图鉴_背景_' .. data['character_name'] .. '_01.png|class=img-fit|link=]]'):done() --
					:tag('div'):addClass('character-tea--info-1') --
						:tag('div'):addClass('character-tea--info-1-bg'):wikitext('[[文件:UI_茶憩_图鉴_套餐描述_01.png|class=img-character-tea--info-1-bg|link=]]'):done() --
						:tag('div'):addClass('character-tea--info-1-title'):wikitext('套餐内含:'):done() --
						:tag('div'):addClass('character-tea--info-1-text'):wikitext(data['combo_content']):done() --
					:done() --
					:tag('div'):addClass('character-tea--info-2') --
						:tag('div'):addClass('character-tea--info-2-bg'):wikitext('[[文件:UI_茶憩_图鉴_套餐描述_02.png|class=img-fit|link=]]'):done() --
						:tag('div'):addClass('character-tea--info-2-text'):wikitext(data['combo_notes']):done() --
					:done() --
				:done();
	return tostring(html)
end

function p.get_invitation_2(data)
	local html = p.get_invitation_recipe(data['character_name'], '02', data['achives'][1], data['achives'][2])
	return tostring(html)
end

function p.get_invitation_3(data)
	local html = p.get_invitation_recipe(data['character_name'], '03', data['achives'][3], data['achives'][4])
	return tostring(html)
end

function p.get_invitation_4(data)
	local html = p.get_invitation_recipe(data['character_name'], '04', data['achives'][5], data['achives'][6])
	return tostring(html)
end

function p.get_invitation_5(data)
	local html = p.get_invitation_recipe(data['character_name'], '05', data['achives'][7], data['achives'][8])
	return tostring(html)
end

-- 生成3-6页通用方法
function p.get_invitation_recipe(characterName, page, achieve1, achieve2)
	local html = mw.html.create()
	local recipe1 = mw.html.create()
	local recipe2 = mw.html.create()
	local hint1 = mw.html.create()
	local hint2 = mw.html.create()

	-- 处理配方1
	recipe1 = recipe1:tag('div'):addClass('character-tea--invitation-icon'):wikitext('[[文件:' .. achieve1['icon'] .. '|class=img-fit|link=]]'):done() --
						:tag('div'):addClass('character-tea--invitation-hint1 bili-tt'):attr('data-type', '$茶憩成就描述'):attr('data-name', characterName .. '-' .. achieve1['title']) --
						:wikitext('[[文件:UI_茶憩_图鉴_提示.png|link=]]') --
					:done() --
					:tag('div'):addClass('character-tea--invitation-title') --
						:tag('span'):cssText('font-size:0.9cqw;'):wikitext(achieve1['level']):done() --
						:wikitext(achieve1['title']):done() --
	if achieve1['recipe'] ~= nil then
		recipe1 = recipe1:tag('ul'):addClass('character-tea--invitation-recipe')
		for _i, v in ipairs(achieve1['recipe']) do
			recipe1 = recipe1:tag('li'):wikitext(' [[文件:UI_茶憩_成就_配方_列表项.png|10px|link=]] ' .. v):done();
		end
		recipe1 = recipe1:done()
	else
		recipe1 = recipe1:tag('div'):addClass('character-tea--invitation-detail'):wikitext(achieve1['detail']):done()
	end

	-- 处理配方2
	if achieve2['title'] == '' then
	else
		recipe2 = recipe2:tag('div'):addClass('character-tea--invitation-icon'):wikitext('[[文件:' .. achieve2['icon'] .. '|class=img-fit|link=]]'):done() --
						:tag('div'):addClass('character-tea--invitation-hint1 bili-tt'):attr('data-type', '$茶憩成就描述'):attr('data-name', characterName .. '-' .. achieve2['title']) --
							:wikitext('[[文件:UI_茶憩_图鉴_提示.png|link=]]') --
						:done() --
						:tag('div'):addClass('character-tea--invitation-title') --
							:tag('span'):cssText('font-size:0.9cqw;'):wikitext(achieve2['level']):done() --
							:wikitext(achieve2['title']):done() --
		if achieve2['recipe'] ~= nil then
			recipe2 = recipe2:tag('ul'):addClass('character-tea--invitation-recipe')
			for _i, v in ipairs(achieve2['recipe']) do
				recipe2 = recipe2:tag('li'):wikitext(' [[文件:UI_茶憩_成就_配方_列表项.png|10px|link=]] ' .. v):done();
			end
			recipe2 = recipe2:done()
		else
			recipe2 = recipe2:tag('div'):addClass('character-tea--invitation-detail'):wikitext(achieve2['detail']):done()
		end

	end

	-- 总体拼接

	html = html:tag('div'):addClass('character-tea--invitation-3') --
					:tag('div'):addClass('character-tea--invitation-bg'):wikitext('[[文件:茶憩_图鉴_背景_' .. characterName .. '_' .. page .. '.png|class=img-fit|link=]]'):done() --
					:tag('div'):addClass('character-tea--invitation-right') --
						:tag('div'):addClass('character-tea--invitation-right-1'):node(recipe1):done() --
						:tag('div'):addClass('character-tea--invitation-right-2'):node(recipe2):done() --
					:done()
				:done()
	return html
end

function p.get_acheives_html(data, character_name)
	local acheives_html = mw.html.create()

	acheives_html = acheives_html:tag('table'):addClass('wikitable'):cssText('margin:0;width:100%;') --
	:tag('tr') --
		:tag('th'):cssText('width:30%;min-width:120px;'):wikitext('成就'):done() --
		:tag('th'):addClass('hidden-xs'):cssText('width:40%;'):wikitext('提示'):done() --
		:tag('th'):wikitext('配方'):done() --
	:done()

	for _i, v in ipairs(data) do
		if v['title'] ~= '' then
			local recipe = ''
			if v['recipe'] ~= nil and #v['recipe'] ~= 0 then
				for _k, x in ipairs(v['recipe']) do
					recipe = recipe .. '<li>' .. x .. '</li>'
				end
			else
				recipe = v['detail']
			end

			acheives_html = acheives_html:tag('tr') --
											:tag('td'):wikitext(v['title']):tag('div'):wikitext(v['level']):done():done() --
											:tag('td'):addClass('hidden-xs'):wikitext(v['hint']):done() --
											:tag('td'):addClass('hidden-xs tea-achieve--recipe'):wikitext(recipe):done() --
											:tag('td'):addClass('visible-xs tea-achieve--recipe'):cssText('position:relative;') --
												:tag('span'):addClass('bili-tt'):attr('data-type', '$茶憩成就描述'):attr('data-name', character_name .. '-' .. v['title']):wikitext(recipe):done() --
											:done() --
										:done()
		end
	end

	acheives_html = acheives_html:done();

	return acheives_html
end

return p