全站通知:
模块:简中数据库
刷
历
编
跳到导航
跳到搜索
此模块的文档可以在模块:简中数据库/doc创建
local p={}
local d = require('模块:数据库内容')
local d_fan = require('模块:简中数据库内容')
--local fan_spcard = require('模块:繁中支援卡效果数据库内容')
function strsplit (inputstr, sep)
if sep == nil then
sep = "%s"
end
local t={}
for str in string.gmatch(inputstr, "([^"..sep.."]+)") do
table.insert(t, str)
end
return t
end
function setDefault (t, d)
local mt = {__index = function () return d end}
setmetatable(t, mt)
end
function addToSet(set, key)
set[key] = true
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 chr_id = string.sub(id,1,-3)
local fan_name = d_fan.text_data_6
local fan_nickname = d_fan.text_data_5
local fan_height = d_fan.text_data_158
local fan_weight = d_fan.text_data_9
local fan_bday = d_fan.text_data_157
local fan_cv = d_fan.text_data_7
local fan_intro = d_fan.text_data_144
local fan_motto = d_fan.text_data_163
for i,fname in pairs(fan_name)do
if chr_id == fname.index then
frame:callParserFunction{name='#vardefine',args={'简中名',fname.text}}
break
end
end
for j,intro in pairs(fan_intro)do
if chr_id == intro.index then
frame:callParserFunction{name='#vardefine',args={'简中简介',intro.text}}
break
end
end
for k,motto in pairs(fan_motto)do
if chr_id == motto.index then
frame:callParserFunction{name='#vardefine',args={'简中自介',motto.text}}
break
end
end
for l,fnick in pairs(fan_nickname)do
if id == fnick.index then
frame:callParserFunction{name='#vardefine',args={'简中昵称',string.sub(fnick.text,2,-2)}}
break
end
end
for m,height in pairs(fan_height)do
if chr_id == height.index then
frame:callParserFunction{name='#vardefine',args={'身高',height.text}}
break
end
end
for n,weight in pairs(fan_weight)do
if chr_id == weight.index then
frame:callParserFunction{name='#vardefine',args={'体重',weight.text}}
break
end
end
for o,bday in pairs(fan_bday)do
if chr_id == bday.index then
frame:callParserFunction{name='#vardefine',args={'生日',bday.text}}
break
end
end
for p,cv in pairs(fan_cv)do
if chr_id == cv.index then
frame:callParserFunction{name='#vardefine',args={'CV',cv.text}}
break
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=d_fan.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('在一级赛事中%s次进入前%s',v2,v1) }}
elseif(cid=='200')then
frame:callParserFunction{name='#vardefine',args={'目标'..v.sort_id,string.format('在二级赛事中%s次进入前%s',v2,v1) }}
elseif(cid=='300')then
frame:callParserFunction{name='#vardefine',args={'目标'..v.sort_id,string.format('在三级赛事中%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["支援卡信息"]=function(frame)
local id=frame.args["id"]
local fan_cardname = d_fan.text_data_75
local fan_story = d_fan.text_data_88
local fan_card = require('模块:简中支援卡效果数据库内容').support_card_data
local cname = ''
local title = ''
local chara = ''
local rarity = string.sub(id,1,1)
local command_table = {['101']='速度',['102']='力量',['103']='毅力',['105']='耐力',['106']='智力',['0']='友人'}
if rarity == '1'then
frame:callParserFunction{name='#vardefine',args={'稀有度', 'R'}}
elseif rarity == '2'then
frame:callParserFunction{name='#vardefine',args={'稀有度', 'SR'}}
elseif rarity == '3'then
frame:callParserFunction{name='#vardefine',args={'稀有度', 'SSR'}}
end
for i,cardname in pairs(fan_cardname)do
if id == cardname.index then
title = '【'..string.sub(strsplit(cardname.text,']')[1],2)..'】'
chara = strsplit(cardname.text,']')[2]
cname = title .. chara
frame:callParserFunction{name='#vardefine',args={'卡名', cname}}
frame:callParserFunction{name='#vardefine',args={'前缀', title}}
frame:callParserFunction{name='#vardefine',args={'关联角色', chara}}
break
end
end
for j,story in pairs(fan_story)do
if id == story.index then
frame:callParserFunction{name='#vardefine',args={'小故事', story.text}}
break
end
end
for k,card in pairs(fan_card)do
if id == card.id then
if card.command_id == "0" and card.support_card_type == "3" then
frame:callParserFunction{name='#vardefine',args={'类型', "团队"}}
else
frame:callParserFunction{name='#vardefine',args={'类型', command_table[card.command_id]}}
end
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
return p