本WIKI由呜呜kurumi申请于2021年03月15日创建,编辑权限开放

如有内容错误,可以联系站长呜呜kurumi提交错误,赛马娘WIKI力求给大家带来最好的体验,也欢迎训练员们和我们一起建设
bugfix0531
全站通知:

模块:繁中比赛查询

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

此模块的文档可以在模块:繁中比赛查询/doc创建

local p={}
local d_fan = require('模块:繁中数据库内容')
local d_race = require('模块:繁中比赛数据库内容')

function setDefault (t, d)
      local mt = {__index = function () return d end}
      setmetatable(t, mt)
end

p["查找比赛ID"]=function(frame)
	local name=frame.args["name"]
	local d_text=d_race.text_data_29
	for q,w in pairs(d_text)do
		if(w.text==name)then 
			--mw.log('ID:'..string.sub(w.index, 1, -3).."yuan:"..w.index)
			frame:callParserFunction{name='#vardefine',args={"比赛ID",string.sub(w.index, 1, -3)}}
		end
	end
	return
end

p["比赛ID查赛场属性"]=function(frame)
	local Id=frame.args["id"]
	local course_id = ""
	local grade=0
	local distance = 0
	local race = d_race.race
	local free_point = d_race.single_mode_free_win_point
	local free_coin = d_race.single_mode_free_coin_race
	local mc_table = {["10001"]="札幌",["10002"]="函館",["10003"]="新潟",
		["10004"]="福島",["10005"]="中山",["10006"]="東京",["10007"]="中京",
		["10008"]="京都",["10009"]="阪神",["10010"]="小倉",["10101"]="大井",
		["10103"]="川崎",["10104"]="船橋",["10105"]="盛岡"
	}
	setDefault(mc_table, "(未知)")
	local turn_table = {["1"]="顺",["2"]="逆",["4"]="直"}
	setDefault(turn_table, "(未知)")
	local grade_table = {["100"]="GⅠ",["200"]="GⅡ",["300"]="GⅢ",["400"]="OP",
		["700"]="Pre-OP"}
	setDefault(grade_table, "(未知)")
	local typetable = {'','内','外','外'}
	local groundtable = {'草地','沙地'}
	
	for i,Rrace in pairs(race)do
		if(Id == Rrace.id)then
			frame:callParserFunction{name='#vardefine',args={"参赛人数",Rrace.entry_num}}
			mw.log('参赛人数:'..Rrace.entry_num..'赛程id:'..Rrace.course_set)
			grade = Rrace.grade
			frame:callParserFunction{name='#vardefine',args={"赛事等级",grade_table[Rrace.grade]}}
			course_id = Rrace.course_set
			frame:callParserFunction{name='#vardefine',args={"course_id",course_id}}
			break
		end
	end
	for j,Course in pairs(d_race.race_course_set)do
		if (course_id == Course.id)then
			-- 方向:1-右,2-左,4-直线
			-- 赛道:1-无,2-内,3-外,4-外→内
			-- 类型:1-草,2-泥
			--mw.log('距离:'..Course.distance..'场地类型:'..Course.ground.." 赛道"..Course.inout..' 方向:'..Course.turn.." 最短完成时间:"..Course.finish_time_min)
			distance = tonumber(Course.distance)
			if distance <= 1400 then
				frame:callParserFunction{name='#vardefine',args={"赛程","短距離"}}
			elseif distance <= 1800 then
				frame:callParserFunction{name='#vardefine',args={"赛程","一哩"}}
			elseif distance <= 2400 then
				frame:callParserFunction{name='#vardefine',args={"赛程","中距離"}}
			else
				frame:callParserFunction{name='#vardefine',args={"赛程","長距離"}}
			end
			frame:callParserFunction{name='#vardefine',args={"最短用时",tonumber(Course.finish_time_min)/10000 ..' ±'.. tonumber(Course.finish_time_min_random_range)/10000}}
			frame:callParserFunction{name='#vardefine',args={"最长用时",tonumber(Course.finish_time_max)/10000 ..' ±'.. tonumber(Course.finish_time_max_random_range)/10000}}
			frame:callParserFunction{name='#vardefine',args={"赛道",typetable[tonumber(Course.inout)]}}
			frame:callParserFunction{name='#vardefine',args={"赛场",mc_table[Course.race_track_id]}}
			frame:callParserFunction{name='#vardefine',args={"方向",turn_table[Course.turn]}}
			frame:callParserFunction{name='#vardefine',args={"长度",Course.distance}}
			frame:callParserFunction{name='#vardefine',args={"场地类型",groundtable[tonumber(Course.ground)]}}
		end
	end
	--[[
	for k,point in pairs(free_point)do
		if point.grade == grade then
			frame:callParserFunction{name='#vardefine',args={"排名"..point.order_min.."点数",point.point_num}}
		end
	end
	for l,coin in pairs(free_coin)do
		if coin.grade == grade then
			frame:callParserFunction{name='#vardefine',args={"排名"..coin.order_min.."商店币",coin.coin_num}}
		end
	end
	--]]
	return
end

--1)根据比赛名称(text)从text_data_29中找到比赛ID(race_instance_id)
--2)根据比赛ID(race_instance_id)从single_mode_program中找到比赛详情ID(race_program_id)
--3)根据比赛详情ID(race_program_id)从single_mode_race_group中找到比赛组ID(race_group_id)
--4)根据比赛组ID(race_group_id)从single_mode_route_race中找到赛马娘的ID(race_set_id)

p["比赛找赛马娘"]=function(frame)
	local umamsm_num = 0
	local umamsm_array = {}
	local race_ID=frame.args["id"]
	local single_mode_program = d_race.single_mode_program
	local single_mode_race_group = d_race.single_mode_race_group
	local single_mode_route_race = d_race.single_mode_route_race
	for i,program in pairs(single_mode_program)do
		local riID = string.sub(program.race_instance_id, 1, -3)
		if (riID==race_ID)then  
			mw.log('比赛ID:'..riID)
			--2)根据比赛ID(race_instance_id)从single_mode_program中找到比赛详情ID(race_program_id)
			for j,group in pairs(single_mode_race_group)do
				if (group.race_program_id == program.id)then
					mw.log('比赛详情ID:'..group.race_program_id )
				    --3)根据比赛详情ID(race_program_id)从single_mode_race_group中找到比赛组ID(race_group_id)
				    local last_uma = 0
					for k,race in pairs(single_mode_route_race)do
						if (race.condition_id == group.race_group_id)then
							--mw.log('比赛组ID:'..race.condition_id )
						    --4)根据比赛组ID(race_group_id)从single_mode_route_race中找到赛马娘的ID(race_set_id)
						    mw.log('赛马娘ID:'..race.race_set_id)
						    if (last_uma == race.race_set_id)then
						    	umamsm_num = umamsm_num - 1
						    end
						    last_uma=race.race_set_id
						    umamsm_num = umamsm_num + 1
						    umamsm_array[umamsm_num] = race.race_set_id
						    --[[
						    for i,character in pairs (translate_text.translate_data_6_6)do
								if (race.race_set_id==character.index)then
									mw.log('赛马娘中文名:'..character.translate)
									--frame:callParserFunction{name='#vardefine',args={"赛马娘A"..umamsm_num,character.translate}}
									umamsm_array[umamsm_num] = character.translate
								end
						    end
							--]]
						end
					end
				end
			end
		end
	end
	local output = ""
	for k, v in pairs(umamsm_array) do
		output = output..v.."、"
	end
	frame:callParserFunction{name='#vardefine',args={"赛马娘A",string.sub(output,0,-4)}}
	mw.log("赛马娘A",string.sub(output,0,-4))
	return
end
--好大的一个三角形,小伙伴们千万不要学着这么写!!


--感谢大佬的代码和详尽注释! 学着补充了找比赛奖励的函数
--1)根据比赛ID(race_instance_id)从single_mode_program中找到奖励组ID(reward_set_id)
--2)根据奖励组ID(reward_set_id)从single_mode_reward_set中找到物品ID(item_id). reward_type="2"为首次夺得第一名奖励; reward_type="1"为通常奖励

p["比赛找奖励"]=function(frame)
	local race_ID=frame.args["id"]
	local item_array = {}
	
	local single_mode_program = d_race.single_mode_program
	local single_mode_reward_set = d_race.single_mode_reward_set
	local single_mode_fan_count = d_race.single_mode_fan_count
	local race = d_race.race
	local course_set = d_race.race_course_set
	local race_trophy = d_race.race_trophy
	for i,program in pairs(single_mode_program)do
		local item_num = 0
		local riID = string.sub(program.race_instance_id, 1, -3)
		if (riID == race_ID)then
			--mw.log('比赛ID:'..riID)
			local last_item = 0
			for j, set in pairs(single_mode_reward_set)do
				if (set.reward_set_id == program.reward_set_id and set.reward_type == "1")then
					--mw.log('奖励组ID:'..set.reward_set_id)
					if (last_item == set.item_id)then
						item_num = item_num - 1
					end
					last_item = set.item_id
					item_num = item_num + 1
					--mw.log('物品ID:'..set.item_id)
					item_array[item_num] = string.format("%05d",set.item_id)
				end
			end
			for f, fan_set in pairs(single_mode_fan_count)do
				if program.fan_set_id == fan_set.fan_set_id then
					frame:callParserFunction{name='#vardefine',args={"排名"..fan_set.order.."粉丝奖励",fan_set.fan_count}}
				end
			end
			frame:callParserFunction{name='#vardefine',args={"参加所需粉丝数",program.need_fan_count}}
		end
	end
	for l, r in pairs(race)do
		if (r.id == race_ID)then
			for m, n in pairs(course_set)do
				if (r.course_set == n.id)then
					frame:callParserFunction{name='#vardefine',args={"race_track",n.race_track_id}}
					break
				end
			end
		end
	end
	local output = ""
	for k, v in pairs(item_array) do
		output = output..v.."、"
	end
	frame:callParserFunction{name='#vardefine',args={"奖励",output}}
	--mw.log("奖励ID:",output)
	return
end

p["比赛属性"]=function(frame)
	local race_ID=frame.args["id"]
	local id = race_ID.."01"
	local race = d_race.race
	local fan_name = d_fan.text_data_28
	local fan_nickname = d_fan.text_data_29
	local race_course_set = d_race.race_course_set
	local race_course_set_status = d_race.race_course_set_status
	local Sstatus = {"速度","持久力","力量","意志力","智力"}
	local Rstatus = ""
	for i,Rrace in pairs(race)do
		if(race_ID == Rrace.id)then
			for j,c_set in pairs(race_course_set)do
				if(c_set.id == Rrace.course_set)then
					if(c_set.course_set_status_id == "0")then
						break
					end
					for k,CSset in pairs(race_course_set_status)do
						if(CSset.course_set_status_id == c_set.course_set_status_id)then
							Rstatus = Rstatus..Sstatus[tonumber(CSset.target_status_1)]
							if(CSset.target_status_2 ~= "0")then
								Rstatus = Rstatus.."、"..Sstatus[tonumber(CSset.target_status_2)]
							end
							break
						end
					end
				end
			end
		end
	end
	frame:callParserFunction{name='#vardefine',args={"比赛属性",Rstatus}}
	-- 繁中
	for j,name in pairs(fan_name)do
		if id == name.index then
			frame:callParserFunction{name='#vardefine',args={"繁译名",name.text}}
			break
		end
	end
	for k,nickname in pairs(fan_nickname)do
		if id == nickname.index then
			frame:callParserFunction{name='#vardefine',args={"繁译简称",nickname.text}}
			break
		end
	end
end

return p