本WIKI由呜呜kurumi申请于2021年03月15日创建,编辑权限开放
本站简中服内容急速更新中,如有内容错误,可以联系站长呜呜kurumi提交错误,赛马娘WIKI力求给大家带来最好的体验,也欢迎训练员们和我们一起建设

全站通知:

模块:数据库

来自赛马娘WIKI_BWIKI_哔哩哔哩
跳到导航 跳到搜索

这个模块用于调用模块:数据库内容中的内容,设置所需要的变量。
当传入参数为空时,将会从数据库中读取数值。
调用模块并传入参数→模块从数据库读取内容→如果传入参数非空则覆盖变量
请在模板最前端调用模块。

可用技能

本模块会设置可用技能的相关变量。

调用模块

模板:赛马娘中调用该模块:

{{#invoke:数据库|可用技能|id={{{ID|}}}|3星固有技能={{{3星固有技能|}}}|低星固有技能={{{低星固有技能|}}}|初始技能={{{初始技能|}}}|觉醒LV2解锁={{{觉醒LV2解锁|}}}|觉醒LV3解锁={{{觉醒LV3解锁|}}}|觉醒LV4解锁={{{觉醒LV4解锁|}}}|觉醒LV5解锁={{{觉醒LV5解锁|}}}}}

使用变量

模块会设置变量:低星固有技能、3星固有技能、初始技能、觉醒LV2解锁、觉醒LV3解锁、觉醒LV4解锁、觉醒LV5解锁

使用{{#var:变量名}}调用变量。
例如:
{{#var:低星固有技能}}
当数据库为空时,{{#var:低星固有技能}}与{{{低星固有技能|}}}是一样的。

local p={}
local d = require('模块:数据库内容')
--[[
local d_skill = require('模块:技能数据库内容')
local d_rrace = require('模块:比赛数据库内容')
local d_fan = require('模块:繁中数据库内容')
local data_skill_set = require('模块:技能组数据库内容')
local translate_text = require('模块:文本数据库')
local fan = require('模块:技能繁中数据库内容')
]]--
function setDefault (t, d)
      local mt = {__index = function () return d end}
      setmetatable(t, mt)
end

function addToSet(set, key)
    set[key] = true
end

p["ID查角色中文名"]=function(frame)
	local character_id=frame.args["角色ID"]
	local character_text = require('模块:文本数据库').translate_data_6_6
	for i,character in pairs (character_text)do
		if (character_id==character.index)then
			--mw.log(character.translate)
			frame:callParserFunction{name='#vardefine',args={'中文名',character.translate}}
		end
	end
	return
end
p["可用技能"]=function(frame)
	local id=frame.args["id"] 
	local rarity=frame.args["rarity"] 
	local data=d.available_skill_set
	local data2=d.card_rarity_data
	local data3=require('模块:技能组数据库内容').skill_set
	local d_up_des = require('模块:进化数据库').skill_upgrade_description
	local dskill=''
	local up_table = {['3']=1,['5']=1}
	for _,v in pairs (data) do
		if(v.available_skill_set_id==id)then 
			if(v.need_rank=='0')then 
				dskill=dskill.. v.skill_id ..'、'
			else 	
				frame:callParserFunction{name='#vardefine',args={'觉醒LV'..v.need_rank..'解锁',v.skill_id}} 
				for rank, _ in pairs(up_table)do
					if(v.need_rank == rank)then 
						for _,des in pairs(d_up_des)do 
							if(des.card_id == id and des.rank == v.need_rank)then 
								frame:callParserFunction{name='#vardefine',args={'觉醒LV'..v.need_rank..'进化'..up_table[rank],des.skill_id}}
								up_table[rank] = up_table[rank] + 1
							end 
						end 
					end 
				end
			end
		end
	end
	frame:callParserFunction{name='#vardefine',args={'初始技能',dskill:gsub('、$','')}}
	for _,v in pairs(data2)do
		if(id==v.card_id)then
			if(v.rarity==rarity)then
				for j,k in pairs(data3)do
					if(v.skill_set==k.id)then
						frame:callParserFunction{name='#vardefine',args={'低星固有技能',k.skill_id1}}
						break
					end
				end
			
			elseif(v.rarity=='3')then
				for j,k in pairs(data3)do
					if(v.skill_set==k.id)then
						frame:callParserFunction{name='#vardefine',args={'3星固有技能',k.skill_id1}}
						break
					end
				end
				break
			end
		end
	end
end
--①根据赛马娘的ID(race_set_id)从single_mode_route_race中找到比赛组ID(race_group_id)
--②根据比赛组ID(race_group_id)从single_mode_race_group中找到比赛详情ID(race_program_id)
--③根据比赛详情ID(race_program_id)从single_mode_program中找到比赛ID(race_instance_id)
--④根据比赛ID(race_instance_id)从text_data_29中找到比赛名称(text)
p["育成目标"]=function(frame)
	local id=frame.args["id"]  --赛马娘的ID
	local d_race=d.single_mode_route_race  --育成比赛目标
	local d_data=d.single_mode_program     --记录了比赛详细信息
	local d_group=d.single_mode_race_group --用于连接比赛组ID(race_group_id)和比赛详情ID(race_program_id)
	local d_text=require('模块:比赛数据库内容').text_data_29  --记录了比赛名称和比赛index
	for i,v in pairs (d_race) do
		if(v.race_set_id==id)then --在育成比赛目标中的race_set_id就是赛马娘的id
			local v1=v.condition_value_1
			local v2=v.condition_value_2
			local ctype=v.condition_type --训练类型。2代表指定名次以内,3代表集成多少粉丝?
			local cid=v.condition_id --训练ID,也就是上面的比赛组ID(race_group_id)
			local alter=''
			local ttype=v.target_type
			
			if(ttype =='3')then break end --遍历到目标为URA比赛时停止
			if(v.determine_race ~='0')then --判定是否有分歧路线
				alter = '(有分歧路线)'
			end
			local year = '第'..tostring(math.ceil(tonumber(v.turn)/24))..'年 '
			local month = tostring(math.floor(((tonumber(v.turn)-1)%24)/2)+1)..'月 '
			local half='前半' if(tonumber(v.turn)%2==0)then half='后半'end
			frame:callParserFunction{name='#vardefine',args={'目标'..v.sort_id..'时间',year..month..half}}
			for j,k in pairs(d_group)do
				if(ctype=="2")then 
					if(cid=='100')then 
						--mw.log(string.format('GⅠレースで%s回%s着以内に入着する',v2,v1) )
						frame:callParserFunction{name='#vardefine',args={'目标'..v.sort_id,string.format('GⅠレースで%s回%s着以内に入着する',v2,v1) }}
					elseif(cid=='200')then
						frame:callParserFunction{name='#vardefine',args={'目标'..v.sort_id,string.format('GⅡ以上で%s回%s着以内に入着する',v2,v1) }}
					elseif(cid=='300')then
						frame:callParserFunction{name='#vardefine',args={'目标'..v.sort_id,string.format('GⅢ 以上で%s回%s着以内に入着する',v2,v1) }}
					end
				break 
				end
				if(ctype=="3")then --mw.log(string.format('ファンを%s人集める',v1)) 
					frame:callParserFunction{name='#vardefine',args={'目标'..v.sort_id,string.format('ファンを%s人集める',v1)}} 
					frame:callParserFunction{name='#vardefine',args={'目标'..v.sort_id..'条件',string.format('粉丝数%s人以上',v1)}}
				break 
				end
				if(k.race_group_id==cid)then  --k是d_group,即single_mode_race_group,用于连接比赛组ID(race_group_id)和比赛详情ID(race_program_id)
					for m,n in pairs(d_data)do  --d_data是single_mode_program,记录了比赛详情
						if(n.id==k.race_program_id)then
							local fans=n.need_fan_count
							if(n.grade_rate_id ~= '900')then--输出比赛id, 屏蔽出道战
								frame:callParserFunction{name='#vardefine',args={'目标'..v.sort_id..'id',string.sub(n.race_instance_id, 1 ,4)}}
							end
							for q,w in pairs(d_text)do
								if(w.index==n.race_instance_id)then
									if(v1=='0')then --mw.log(w.text..'に出走')
										frame:callParserFunction{name='#vardefine',args={'目标'..v.sort_id,w.text..'に出走'..alter}}
									else 
										if(v1~='1')then v1=v1..'着以内' else v1=v1..'着'end
										frame:callParserFunction{name='#vardefine',args={'目标'..v.sort_id,w.text..'で'..v1..alter}}
										--mw.log(month..half)
									end
									if(fans~='0')then 
										frame:callParserFunction{name='#vardefine',args={'目标'..v.sort_id..'条件',string.format('粉丝数%s人以上',fans)}}
										--mw.log(string.format('粉丝数%s人以上',fans))
									end
									break
								end
							end
							break
						end
					end
					break 
				end
			end
		end
	end
	for i,v in pairs (frame.args)do
		if(v~="")then frame:callParserFunction{name='#vardefine',args={i,v}}end
	end
	return
end



p["PT评价比"]=function(frame)
	local id = frame.args["id"]
	local rarity = frame.args["稀有度"]
	local grade_value = frame.args["评价分"]
	local skill_pt = 0
	local d_skillnp = d.single_mode_skill_need_point
	local d_data = require('模块:技能数据库内容').skill_data
	local frontsk_id2 = '0'
	local frontsk_id = '0'
	local ratio = 0
	frontsk_id = frame.args["前置技能id"]
	if rarity ~='独特' and rarity ~= '剧情' then
		for k,q in pairs (d_skillnp) do
			if(q.id == id )then
				skill_pt = q.need_skill_point
				frame:callParserFunction{name='#vardefine',args={'技能消耗PT',q.need_skill_point}}
				break
			end
		end
	end
	if(frontsk_id ~= "0")then
		for i,v in pairs (d_data) do
			if(v.id == frontsk_id)then
				if(v.group_rate == '2')then
					for m,n in pairs (d_data) do
						if(n.group_id == v.group_id and n.group_rate == '1')then
							frontsk_id2 = n.id
							break
						end
					end
					break
				end
			end
		end
		for j,w in pairs (d_skillnp) do
			if(w.id == frontsk_id )then
				skill_pt = skill_pt + w.need_skill_point
				break
			end
		end
		if(frontsk_id2 ~= "0")then
			for j,w in pairs (d_skillnp) do
				if(w.id == frontsk_id2 )then
					skill_pt = skill_pt + w.need_skill_point
					break
				end
			end
		end
	end
	if grade_value == "" then 
		grade_value = 0
	end
	ratio = grade_value / skill_pt
	if(ratio < 0)then
		ratio = 0 - ratio
	end
	frame:callParserFunction{name='#vardefine',args={'PT评价比',string.format("%.2f",ratio)}}
	frame:callParserFunction{name='#vardefine',args={'所需PT',skill_pt}}
	return
end

p["技能信息"]=function(frame)
	local id = frame.args["id"]
	local d_data = require('模块:技能数据库内容').skill_data
	local d_skill_text = require('模块:技能组数据库内容').text_data_48
	local d_fan_name = require('模块:技能繁中数据库内容').text_data_47
	local d_available =  require('模块:数据库内容').available_skill_set
	local d_up_des = require('模块:进化数据库').skill_upgrade_description
	local d_up_con = require('模块:进化数据库').skill_upgrade_condition
	local d_up_text = require('模块:进化数据库').text_data_290
	local d_up_textcn = require('模块:进化条件').text_cn_290
	local abi_table = {["1"]="被动(速度)",["2"]="被动(耐力)",["3"]="被动(力量)",["4"]="被动(毅力)",
		["5"]="被动(智力)",["8"]="视野",["9"]="耐力恢复",["10"]="出闸",["13"]="心态",["14"]="出迟时长",["21"]="速度",
		["22"]="即时速度",["27"]="速度",["28"]="切换跑道",["29"]="焦躁概率",["31"]="加速度",["35"]="(未知)",["37"]="触发金技"}
	setDefault(abi_table, "(未知)")
	local target_table = {}
	setDefault(target_table, false)
	addToSet(target_table, "1")
	addToSet(target_table, "21")
	addToSet(target_table, "22")
	local ability_value, ability_value_f = 0, 0
	local ability_time, ability_time_f = "", ""
	local ability_type, ability_type_f = "", ""
	local ability_value_2, ability_value_2_f = 0, 0
	local ability_type_2, ability_type_2_f = "", ""
	local cooldown_time_1 = 0
	local ability_time_2, ability_time_2_f = "", ""
	local skill_text, skill_text_f = "", ""
	local condition, condition_f = "", ""
	local pre_condition, pre_condition_f = "", ""
	local up_skill = ""
	local icon_id = 0
	local front_id = 0
	local after_id = 0
	--检查是否有进化技能
	local is_first = true
	for _,avai_set in pairs(d_available)do 
		if(avai_set.skill_id == id)then 
			if(avai_set.need_rank == "3" or avai_set.need_rank == "5")then 
				for _,des in pairs(d_up_des)do 
					if(des.card_id == avai_set.available_skill_set_id and des.rank == avai_set.need_rank)then 
						if is_first then 
							up_skill = up_skill..des.skill_id 
							is_first = false
						else 
							up_skill = up_skill..','..des.skill_id 
						end 
					end 
				end 
			end 
		end 
	end 
	frame:callParserFunction{name='#vardefine',args={'进化后技能id', up_skill}}
	--技能进化信息
	if(tonumber(id)/100000000 > 0)then 
		for _,ddes in pairs(d_up_des)do 
			if(ddes.skill_id == id)then 
				frame:callParserFunction{name='#vardefine',args={'进化角色id', ddes.card_id}}
				frame:callParserFunction{name='#vardefine',args={'进化角色等级', ddes.rank}}
				for _,con in pairs(d_up_con)do 
					if (con.description_id == id)then 
						for _,up_text in pairs(d_up_text)do 
							if(up_text.index == con.id)then 
								frame:callParserFunction{name='#vardefine',args={'进化条件_'..con.num..'_'..con.sub_num, up_text.text}}
								for _,cn_text in pairs(d_up_textcn)do 
									if(up_text.index == cn_text.index)then 
										frame:callParserFunction{name='#vardefine',args={'进化条件_'..con.num..'_'..con.sub_num..'中文', cn_text.text_cn}}
										break
									end 
								end 
								break
							end 
						end
						
					end 
				end 
				for _,aavai_set in pairs(d_available)do 
					if(aavai_set.available_skill_set_id == ddes.card_id and aavai_set.need_rank == ddes.rank)then 
						frame:callParserFunction{name='#vardefine',args={'进化前技能id', aavai_set.skill_id}}
						break
					end 
				end 
			end 
		end 
	end 
	
	--技能信息
	for i,v in pairs (d_data) do
		if(v.id == id)then
			frame:callParserFunction{name='#vardefine',args={'评价分',v.grade_value}}
			--
			frame:callParserFunction{name='#vardefine',args={'group_id',v.group_id}}
			frame:callParserFunction{name='#vardefine',args={'group_rate',v.group_rate}}
			icon_id = v.icon_id
			--持续时间
			ability_value = tonumber(v.float_ability_value_1_1)/10000
			if(v.float_ability_time_1 == "0")then
				ability_time = "瞬时"
			elseif(v.float_ability_time_1 == "-1")then
				ability_time = "始终"
			else
				ability_time = tonumber(v.float_ability_time_1)/10000
			end
			
			cooldown_time_1 = tonumber(v.float_cooldown_time_1)
			if cooldown_time_1 ~= 0 then  
				cooldown_time_1 = cooldown_time_1/10000
			end
			--前置
			if(v.precondition_1 ~= "")then
				pre_condition = v.precondition_1
				if(v.condition_2 ~= "")then 
					pre_condition = "条件1前置: "..pre_condition
				end
				if(v.precondition_2 ~= "")then
					pre_condition = pre_condition.."<br>条件2前置: "..v.precondition_2
				end
				pre_condition = string.gsub(pre_condition,'&',' &')
				pre_condition = string.gsub(pre_condition,'@',' @')
				frame:callParserFunction{name='#vardefine',args={'前置条件',pre_condition}}
			end
			--触发条件1,一般不为空
			condition = v.condition_1
			if target_table[v.target_type_1_1]then
				ability_type = abi_table[v.ability_type_1_1]
			elseif v.target_type_1_1 == "11" then 
				ability_type = '队友('..abi_table[v.ability_type_1_1]..')'
			else
				ability_type = '妨害('..abi_table[v.ability_type_1_1]..')'
			end
			if(v.float_ability_value_1_2 ~= "0")then
				ability_value = ability_value.."、"..tonumber(v.float_ability_value_1_2)/10000
				if target_table[v.target_type_1_2]then
					ability_type = ability_type.."、"..abi_table[v.ability_type_1_2]
				else
					ability_type = ability_type.."、"..'妨害('..abi_table[v.ability_type_1_2]..')'
				end
			end
			if(v.float_ability_value_1_3 ~= "0")then
				ability_value = ability_value.."、"..tonumber(v.float_ability_value_1_3)/10000
				if target_table[v.target_type_1_3]then
					ability_type = ability_type.."、"..abi_table[v.ability_type_1_3]
				else
					ability_type = ability_type.."、"..'妨害('..abi_table[v.ability_type_1_3]..')'
				end
			end
			--触发条件2
			if(v.condition_2 ~= "")then
				ability_value_2 = tonumber(v.float_ability_value_2_1)/10000
				if(v.float_ability_time_2 == "0")then
					ability_time_2 = "瞬时"
				elseif(v.float_ability_time_2 == "-1")then
					ability_time_2 = "始终"
				else
					ability_time_2 = tonumber(v.float_ability_time_2)/10000
				end
				if target_table[v.target_type_2_1]then
					ability_type_2 = abi_table[v.ability_type_2_1]
				else
					ability_type_2 = '妨害('..abi_table[v.ability_type_2_1]..')'
				end
				if(v.float_ability_value_2_2 ~= "0")then
					ability_value_2 = ability_value_2.."、"..tonumber(v.float_ability_value_2_2)/10000
					if target_table[v.target_type_2_2]then
						ability_type_2 = ability_type_2.."、"..abi_table[v.ability_type_2_2]
					else
						ability_type_2 = ability_type_2.."、"..'妨害('..abi_table[v.ability_type_2_2]..')'
					end
				end
				if(v.float_ability_value_2_3 ~= "0")then
					ability_value_2 = ability_value_2.."、"..tonumber(v.float_ability_value_2_3)/10000
					if target_table[v.target_type_2_3]then
						ability_type_2 = ability_type_2.."、"..abi_table[v.ability_type_2_3]
					else
						ability_type_2 = ability_type_2.."、"..'妨害('..abi_table[v.ability_type_2_3]..')'
					end
				end
				
				ability_value = "条件1: "..ability_value.."<br>".."条件2: "..ability_value_2
				ability_time = "条件1: "..ability_time.."<br>".."条件2: "..ability_time_2
				condition = "条件1: "..condition.."<br>".."条件2: "..v.condition_2
				ability_type = "条件1: "..ability_type.."<br>".."条件2: "..ability_type_2
			end
			--判断稀有度
			if string.sub(id,1,1) =='9' then
				frame:callParserFunction{name='#vardefine',args={'稀有度','普通·继承'}}
			elseif string.sub(v.icon_id,-1) =='2' then
				frame:callParserFunction{name='#vardefine',args={'稀有度','传说'}}
			elseif string.sub(v.icon_id,-1) =='3' then 
				frame:callParserFunction{name='#vardefine',args={'稀有度','独特'}}
			elseif string.sub(v.icon_id,-1) =='6' then 
				frame:callParserFunction{name='#vardefine',args={'稀有度','进化'}}	
			else 
				frame:callParserFunction{name='#vardefine',args={'稀有度','普通'}}
			end
			--图标颜色
			if string.sub(v.icon_id,-1) =='4'then
				frame:callParserFunction{name='#vardefine',args={'图标颜色','紫色'}}
			elseif string.sub(v.icon_id,1,1) == '1' then
				frame:callParserFunction{name='#vardefine',args={'图标颜色','绿色'}}
			elseif string.sub(v.icon_id,1,1) == '3' then
				frame:callParserFunction{name='#vardefine',args={'图标颜色','红色'}}
			elseif string.sub(v.icon_id,1,1) == '2' and (string.sub(v.icon_id,3,4) == '02'or string.sub(v.icon_id,3,4) == '11' )then
				frame:callParserFunction{name='#vardefine',args={'图标颜色','蓝色'}}
			else
				frame:callParserFunction{name='#vardefine',args={'图标颜色','黄色'}}
			end
			--查找前后置技能
			if(v.group_rate == "2")then
				for j,k in pairs (d_data) do
					if(k.group_id == v.group_id and k.group_rate == "1")then
						front_id = k.id
					end
					if(k.group_id == v.group_id and k.group_rate == "3")then
						after_id = k.id
					end
				end
			elseif(v.group_rate == "1")then
				for j,k in pairs (d_data) do
					if(k.group_id == v.group_id and k.group_rate == "2")then
						after_id = k.id
						break
					end
				end
			elseif(v.group_rate == "3")then
				for j,k in pairs (d_data) do
					if(k.group_id == v.group_id and k.group_rate == "2")then
						front_id = k.id
						break
					end
				end
			end
			break
		end
	end
	condition=string.gsub(condition,'&',' &')
	condition=string.gsub(condition,'@',' @')
	--日文技能描述
	for num, jp_text in pairs (d_skill_text)do
		if jp_text.index == id then
			skill_text = string.gsub(jp_text.text,'\n','<br>')
			break
		end
	end
	frame:callParserFunction{name='#vardefine',args={'技能描述',skill_text}}
	frame:callParserFunction{name='#vardefine',args={'前置技能id',front_id}}
	frame:callParserFunction{name='#vardefine',args={'可解锁技能id',after_id}}
	frame:callParserFunction{name='#vardefine',args={'触发代码',condition}}
	frame:callParserFunction{name='#vardefine',args={'技能数值',ability_value}}
	frame:callParserFunction{name='#vardefine',args={'持续时间',ability_time}}
	frame:callParserFunction{name='#vardefine',args={'冷却时间',cooldown_time_1}}
	frame:callParserFunction{name='#vardefine',args={'技能类型',ability_type}}
	frame:callParserFunction{name='#vardefine',args={'图标icon',icon_id}}
	
	--繁中技能名称
	for nu, fan_name in pairs(d_fan_name)do
		if fan_name.index == id then
			frame:callParserFunction{name='#vardefine',args={'繁译名',fan_name.text}}
			frame:callParserFunction{name='#vardefine',args={'简化名',fan_name.text_hans}}
			break
		end
	end
end

p["繁中技能信息"]=function(frame)
	local id = frame.args["id"]
	local d_data = require('模块:技能数据库内容').skill_data
	local d_fan_data = require('模块:技能繁中数据库内容').skill_data
	local d_skill_text = require('模块:技能组数据库内容').text_data_48
	local d_fan_text = require('模块:技能繁中数据库内容').text_data_48
	local d_fan_name = require('模块:技能繁中数据库内容').text_data_47
	local abi_table = {["1"]="被动(速度)",["2"]="被动(耐力)",["3"]="被动(力量)",["4"]="被动(毅力)",
		["5"]="被动(智力)",["8"]="视野",["9"]="耐力恢复",["10"]="出闸",["13"]="心态",["14"]="出迟时长",["21"]="速度",
		["22"]="即时速度",["27"]="速度",["28"]="切换跑道",["29"]="焦躁概率",["31"]="加速度",["35"]="(未知)",["37"]="触发金技"}
	setDefault(abi_table, "(未知)")
	local target_table = {}
	setDefault(target_table, false)
	addToSet(target_table, "1")
	addToSet(target_table, "21")
	addToSet(target_table, "22")
	local ability_value, ability_value_f = 0, 0
	local ability_time, ability_time_f = "", ""
	local ability_type, ability_type_f = "", ""
	local ability_value_2, ability_value_2_f = 0, 0
	local cooldown_time_1 = 0
	local ability_time_2, ability_time_2_f = "", ""
	local skill_text, skill_text_f = "", ""
	local condition, condition_f = "", ""
	local pre_condition, pre_condition_f = "", ""
	local icon_id = 0
	local front_id = 0
	local after_id = 0
	for i,v in pairs (d_data) do
		if(v.id == id)then
			frame:callParserFunction{name='#vardefine',args={'评价分',v.grade_value}}
			--
			frame:callParserFunction{name='#vardefine',args={'group_id',v.group_id}}
			frame:callParserFunction{name='#vardefine',args={'group_rate',v.group_rate}}
			icon_id = v.icon_id
			--[[
			--持续时间
			ability_value = tonumber(v.float_ability_value_1_1)/10000
			if(v.float_ability_time_1 == "0")then
				ability_time = "瞬时"
			elseif(v.float_ability_time_1 == "-1")then
				ability_time = "始终"
			else
				ability_time = tonumber(v.float_ability_time_1)/10000
			end
			
			
			--触发条件1,一般不为空
			condition = v.condition_1
			if target_table[v.target_type_1_1]then
				ability_type = abi_table[v.ability_type_1_1]
			else
				ability_type = '妨害('..abi_table[v.ability_type_1_1]..')'
			end
			if(v.float_ability_value_1_2 ~= "0")then
				ability_value = ability_value.."、"..tonumber(v.float_ability_value_1_2)/10000
				if target_table[v.target_type_1_2]then
					ability_type = ability_type.."、"..abi_table[v.ability_type_1_2]
				else
					ability_type = ability_type.."、"..'妨害('..abi_table[v.ability_type_1_2]..')'
				end
			end
			if(v.float_ability_value_1_3 ~= "0")then
				ability_value = ability_value.."、"..tonumber(v.float_ability_value_1_3)/10000
				if target_table[v.target_type_1_3]then
					ability_type = ability_type.."、"..abi_table[v.ability_type_1_3]
				else
					ability_type = ability_type.."、"..'妨害('..abi_table[v.ability_type_1_3]..')'
				end
			end
			--触发条件2
			if(v.condition_2 ~= "")then
				ability_value_2 = tonumber(v.float_ability_value_2_1)/10000
				if(v.float_ability_time_2 == "0")then
					ability_time_2 = "瞬时"
				elseif(v.float_ability_time_2 == "-1")then
					ability_time_2 = "始终"
				else
					ability_time_2 = tonumber(v.float_ability_time_2)/10000
				end
				
				ability_value = "条件1: "..ability_value.."<br>".."条件2: "..ability_value_2
				ability_time = "条件1: "..ability_time.."<br>".."条件2: "..ability_time_2
				condition = "条件1: "..condition.."<br>".."条件2: "..v.condition_2
				if v.target_type_2_1=='1'then
					ability_type = "条件1: "..ability_type.."<br>".."条件2: "..abi_table[v.ability_type_2_1]
				else
					ability_type = "条件1: "..ability_type.."<br>".."条件2: "..'妨害('..abi_table[v.ability_type_2_1]..')'
				end
			end
			--]]
			--判断稀有度
			if string.sub(id,1,1) =='9' then
				frame:callParserFunction{name='#vardefine',args={'稀有度','普通·继承'}}
			elseif string.sub(v.icon_id,-1) =='2' then
				frame:callParserFunction{name='#vardefine',args={'稀有度','传说'}}
			elseif string.sub(v.icon_id,-1) =='3' then 
				frame:callParserFunction{name='#vardefine',args={'稀有度','独特'}}
			elseif string.sub(v.icon_id,-1) =='6' then 
				frame:callParserFunction{name='#vardefine',args={'稀有度','进化'}}	
			else 
				frame:callParserFunction{name='#vardefine',args={'稀有度','普通'}}
			end
			--图标颜色
			if string.sub(v.icon_id,-1) =='4'then
				frame:callParserFunction{name='#vardefine',args={'图标颜色','紫色'}}
			elseif string.sub(v.icon_id,1,1) == '1' then
				frame:callParserFunction{name='#vardefine',args={'图标颜色','绿色'}}
			elseif string.sub(v.icon_id,1,1) == '3' then
				frame:callParserFunction{name='#vardefine',args={'图标颜色','红色'}}
			elseif string.sub(v.icon_id,1,1) == '2' and (string.sub(v.icon_id,3,4) == '02'or string.sub(v.icon_id,3,4) == '11' )then
				frame:callParserFunction{name='#vardefine',args={'图标颜色','蓝色'}}
			else
				frame:callParserFunction{name='#vardefine',args={'图标颜色','黄色'}}
			end
			--查找前后置技能
			if(v.group_rate == "2")then
				for j,k in pairs (d_data) do
					if(k.group_id == v.group_id and k.group_rate == "1")then
						front_id = k.id
					end
					if(k.group_id == v.group_id and k.group_rate == "3")then
						after_id = k.id
					end
				end
			elseif(v.group_rate == "1")then
				for j,k in pairs (d_data) do
					if(k.group_id == v.group_id and k.group_rate == "2")then
						after_id = k.id
						break
					end
				end
			elseif(v.group_rate == "3")then
				for j,k in pairs (d_data) do
					if(k.group_id == v.group_id and k.group_rate == "2")then
						front_id = k.id
						break
					end
				end
			end
			break
		end
	end
	condition=string.gsub(condition,'&',' &')
	condition=string.gsub(condition,'@',' @')
	frame:callParserFunction{name='#vardefine',args={'前置技能id',front_id}}
	frame:callParserFunction{name='#vardefine',args={'可解锁技能id',after_id}}
	frame:callParserFunction{name='#vardefine',args={'触发代码',condition}}
	frame:callParserFunction{name='#vardefine',args={'技能类型',ability_type}}
	frame:callParserFunction{name='#vardefine',args={'图标icon',icon_id}}
	
	--繁中技能信息
	for ord,skill in pairs (d_fan_data) do
		if(skill.id == id)then
			frame:callParserFunction{name='#vardefine',args={'评价分_繁',skill.grade_value}}
			--持续时间
			ability_value_f = tonumber(skill.float_ability_value_1_1)/10000
			if(skill.float_ability_time_1 == "0")then
				ability_time_f = "瞬时"
			elseif(skill.float_ability_time_1 == "-1")then
				ability_time_f = "始终"
			else
				ability_time_f = tonumber(skill.float_ability_time_1)/10000
			end
			
			cooldown_time_1 = tonumber(skill.float_cooldown_time_1)
			if cooldown_time_1 ~= 0 then  
				cooldown_time_1 = cooldown_time_1/10000
			end
			--前置
			if(skill.precondition_1 ~= "")then
				pre_condition_f = skill.precondition_1
				if(skill.precondition_2 ~= "")then
					pre_condition_f = "条件1前置:"..pre_condition_f.."<br>条件2前置:"..skill.precondition_2
				end
				pre_condition_f = string.gsub(pre_condition_f,'&',' &')
				pre_condition_f = string.gsub(pre_condition_f,'@',' @')
				frame:callParserFunction{name='#vardefine',args={'前置条件_繁',pre_condition_f}}
			end
			--触发条件1,一般不为空
			condition_f = skill.condition_1
			if target_table[skill.target_type_1_1]then
				ability_type_f = abi_table[skill.ability_type_1_1]
			else
				ability_type_f = '妨害('..abi_table[skill.ability_type_1_1]..')'
			end
			if(skill.float_ability_value_1_2 ~= "0")then
				ability_value_f = ability_value_f.."、"..tonumber(skill.float_ability_value_1_2)/10000
				if target_table[skill.target_type_1_2]then
					ability_type_f = ability_type_f.."、"..abi_table[skill.ability_type_1_2]
				else
					ability_type_f = ability_type_f.."、"..'妨害('..abi_table[skill.ability_type_1_2]..')'
				end
			end
			if(skill.float_ability_value_1_3 ~= "0")then
				ability_value_f = ability_value_f.."、"..tonumber(skill.float_ability_value_1_3)/10000
				if target_table[skill.target_type_1_3]then
					ability_type_f = ability_type_f.."、"..abi_table[skill.ability_type_1_3]
				else
					ability_type_f = ability_type_f.."、"..'妨害('..abi_table[skill.ability_type_1_3]..')'
				end
			end
			--触发条件2
			if(skill.condition_2 ~= "")then
				ability_value_2_f = tonumber(skill.float_ability_value_2_1)/10000
				if(skill.float_ability_time_2 == "0")then
					ability_time_2_f = "瞬时"
				elseif(skill.float_ability_time_2 == "-1")then
					ability_time_2_f = "始终"
				else
					ability_time_2_f = tonumber(skill.float_ability_time_2)/10000
				end
				
				ability_value_f = "条件1: "..ability_value_f.."<br>".."条件2: "..ability_value_2_f
				ability_time_f = "条件1: "..ability_time_f.."<br>".."条件2: "..ability_time_2_f
				condition_f = "条件1: "..condition_f.."<br>".."条件2: "..skill.condition_2
				if skill.target_type_2_1=='1'then
					ability_type_f = "条件1: "..ability_type_f.."<br>".."条件2: "..abi_table[skill.ability_type_2_1]
				else
					ability_type_f = "条件1: "..ability_type_f.."<br>".."条件2: "..'妨害('..abi_table[skill.ability_type_2_1]..')'
				end
			end
			break
		end
	end
	--繁中技能描述
	for ni, fan_text in pairs (d_fan_text)do
		if fan_text.index == id then
			skill_text_f = string.gsub(fan_text.text,'\n','<br>')
			break
		end
	end
	--繁中技能名称
	for nu, fan_name in pairs(d_fan_name)do
		if fan_name.index == id then
			frame:callParserFunction{name='#vardefine',args={'繁译名',fan_name.text}}
			frame:callParserFunction{name='#vardefine',args={'简化名',fan_name.text_hans}}
			break
		end
	end
	condition_f=string.gsub(condition_f,'&',' &')
	condition_f=string.gsub(condition_f,'@',' @')
	frame:callParserFunction{name='#vardefine',args={'技能描述_繁',skill_text_f}}
	frame:callParserFunction{name='#vardefine',args={'触发代码_繁',condition_f}}
	frame:callParserFunction{name='#vardefine',args={'技能数值_繁',ability_value_f}}
	frame:callParserFunction{name='#vardefine',args={'持续时间_繁',ability_time_f}}
	frame:callParserFunction{name='#vardefine',args={'冷却时间_繁',cooldown_time_1}}
	frame:callParserFunction{name='#vardefine',args={'技能类型_繁',ability_type_f}}
end

p["支援卡小故事"]=function(frame)
	local id = frame.args["id"]
	local d_story = require('模块:文本数据库内容').text_data_88
	for j,story in pairs(d_story)do
		if id == story.index then
			frame:callParserFunction{name='#vardefine',args={'小故事J', story.text}}
			break
		end
	end
end

p["支援卡ao"]=function(frame)
	local id = frame.args["id"]
	local d_data = d.single_mode_scout_chara
	local ranks = {"G","F","E","D","C","B","A"}
	for i,v in pairs (d_data) do
		if(v.support_card_id == id)then
			frame:callParserFunction{name='#vardefine',args={'ao速度',v.speed}}
			frame:callParserFunction{name='#vardefine',args={'ao速度上限',v.speed_limit}}
			frame:callParserFunction{name='#vardefine',args={'ao耐力',v.stamina}}
			frame:callParserFunction{name='#vardefine',args={'ao耐力上限',v.stamina_limit}}
			frame:callParserFunction{name='#vardefine',args={'ao力量',v.pow}}
			frame:callParserFunction{name='#vardefine',args={'ao力量上限',v.pow_limit}}
			frame:callParserFunction{name='#vardefine',args={'ao毅力',v.guts}}
			frame:callParserFunction{name='#vardefine',args={'ao毅力上限',v.guts_limit}}
			frame:callParserFunction{name='#vardefine',args={'ao智力',v.wiz}}
			frame:callParserFunction{name='#vardefine',args={'ao智力上限',v.wiz_limit}}
			frame:callParserFunction{name='#vardefine',args={'ao草地适性',ranks[tonumber(v.proper_ground_turf)]}}
			frame:callParserFunction{name='#vardefine',args={'ao泥地适性',ranks[tonumber(v.proper_ground_dirt)]}}
			frame:callParserFunction{name='#vardefine',args={'ao短距离适性',ranks[tonumber(v.proper_distance_short)]}}
			frame:callParserFunction{name='#vardefine',args={'ao英里赛适性',ranks[tonumber(v.proper_distance_mile)]}}
			frame:callParserFunction{name='#vardefine',args={'ao中距离适性',ranks[tonumber(v.proper_distance_middle)]}}
			frame:callParserFunction{name='#vardefine',args={'ao长距离适性',ranks[tonumber(v.proper_distance_long)]}}
			frame:callParserFunction{name='#vardefine',args={'ao逃适性',ranks[tonumber(v.proper_running_style_nige)]}}
			frame:callParserFunction{name='#vardefine',args={'ao先行适性',ranks[tonumber(v.proper_running_style_senko)]}}
			frame:callParserFunction{name='#vardefine',args={'ao差行适性',ranks[tonumber(v.proper_running_style_sashi)]}}
			frame:callParserFunction{name='#vardefine',args={'ao追适性',ranks[tonumber(v.proper_running_style_oikomi)]}}
			break
		end
	end
end

p["觉醒材料"]=function(frame)
	local id = frame.args["id"]
	local d_data = d.card_talent_upgrade
	for i,v in pairs (d_data) do
		if(v.talent_group_id == id)then
			frame:callParserFunction{name='#vardefine',args={'觉醒lv'..v.talent_level.."物品1",string.format("%05d", v.item_id_1) }}
			frame:callParserFunction{name='#vardefine',args={'觉醒lv'..v.talent_level.."物品1数量",v.item_num_1}}
			frame:callParserFunction{name='#vardefine',args={'觉醒lv'..v.talent_level.."物品2",string.format("%05d", v.item_id_2) }}
			frame:callParserFunction{name='#vardefine',args={'觉醒lv'..v.talent_level.."物品2数量",v.item_num_2}}
			frame:callParserFunction{name='#vardefine',args={'觉醒lv'..v.talent_level.."物品3",string.format("%05d", v.item_id_3) }}
			frame:callParserFunction{name='#vardefine',args={'觉醒lv'..v.talent_level.."物品3数量",v.item_num_3}}
			frame:callParserFunction{name='#vardefine',args={'觉醒lv'..v.talent_level.."物品4",string.format("%05d", v.item_id_4) }}
			frame:callParserFunction{name='#vardefine',args={'觉醒lv'..v.talent_level.."物品4数量",v.item_num_4}}
			frame:callParserFunction{name='#vardefine',args={'觉醒lv'..v.talent_level.."物品5",string.format("%05d", v.item_id_5) }}
			frame:callParserFunction{name='#vardefine',args={'觉醒lv'..v.talent_level.."物品5数量",v.item_num_5}}
			frame:callParserFunction{name='#vardefine',args={'觉醒lv'..v.talent_level.."物品6",string.format("%05d", v.item_id_6) }}
			frame:callParserFunction{name='#vardefine',args={'觉醒lv'..v.talent_level.."物品6数量",v.item_num_6}}
		end
	end
end

p["星级天赋"]=function(frame)
	local id = frame.args["id"]
	local d_data = d.card_rarity_data
	local s_data = d.card_data
	local ranks = {"G","F","E","D","C","B","A"}
	for i,v in pairs (d_data) do
		if(v.card_id == id)then
			frame:callParserFunction{name='#vardefine',args={v.rarity..'星速度',v.speed}}
			frame:callParserFunction{name='#vardefine',args={v.rarity..'星耐力',v.stamina}}
			frame:callParserFunction{name='#vardefine',args={v.rarity..'星力量',v.pow}}
			frame:callParserFunction{name='#vardefine',args={v.rarity..'星毅力',v.guts}}
			frame:callParserFunction{name='#vardefine',args={v.rarity..'星智力',v.wiz}}
			if(v.rarity == '3')then
				frame:callParserFunction{name='#vardefine',args={'短距离天赋',ranks[tonumber(v.proper_distance_short)]}}
				frame:callParserFunction{name='#vardefine',args={'英里赛天赋',ranks[tonumber(v.proper_distance_mile)]}}
				frame:callParserFunction{name='#vardefine',args={'中距离天赋',ranks[tonumber(v.proper_distance_middle)]}}
				frame:callParserFunction{name='#vardefine',args={'长距离天赋',ranks[tonumber(v.proper_distance_long)]}}
				frame:callParserFunction{name='#vardefine',args={'逃天赋',ranks[tonumber(v.proper_running_style_nige)]}}
				frame:callParserFunction{name='#vardefine',args={'先行天赋',ranks[tonumber(v.proper_running_style_senko)]}}
				frame:callParserFunction{name='#vardefine',args={'差天赋',ranks[tonumber(v.proper_running_style_sashi)]}}
				frame:callParserFunction{name='#vardefine',args={'追天赋',ranks[tonumber(v.proper_running_style_oikomi)]}}
				frame:callParserFunction{name='#vardefine',args={'草地天赋',ranks[tonumber(v.proper_ground_turf)]}}
				frame:callParserFunction{name='#vardefine',args={'泥地天赋',ranks[tonumber(v.proper_ground_dirt)]}}
			end
		end
	end
	for m,n in pairs (s_data) do
		if(n.id == id)then
			frame:callParserFunction{name='#vardefine',args={'速度成长率',n.talent_speed}}
			frame:callParserFunction{name='#vardefine',args={'耐力成长率',n.talent_stamina}}
			frame:callParserFunction{name='#vardefine',args={'力量成长率',n.talent_pow}}
			frame:callParserFunction{name='#vardefine',args={'毅力成长率',n.talent_guts}}
			frame:callParserFunction{name='#vardefine',args={'智力成长率',n.talent_wiz}}
			frame:callParserFunction{name='#vardefine',args={'初始星级',n.default_rarity}}
			break
		end
	end
end

p["繁中角色实装状态"]=function(frame)
	local id = frame.args["id"]
	local d_fan_status = require('模块:繁中数据库内容').text_data_5
	local chr_status = false
	for i,chr in pairs(d_fan_status)do
		if id == chr.index then
			chr_status = true
			break
		end
	end
	if chr_status then
		frame:callParserFunction{name='#vardefine',args={'繁中状态','已实装'}}
	else
		frame:callParserFunction{name='#vardefine',args={'繁中状态','未实装'}}
	end
end

return p