全站通知:
模块:种马因子解析
刷
历
编
跳到导航
跳到搜索
此模块的文档可以在模块:种马因子解析/doc创建
-- 种马分享库:解析种马因子
local p={};
local JSON = require('模块:JSON.lua');
local Seed_array = {};
local json;
function splitString(input, delimiter)
-- 根据特定分割符将字符串切分为数组
input = tostring(input)
delimiter = tostring(delimiter)
if (delimiter == "") then return false end
local pos, arr = 0, {}
for st, sp in function() return string.find(input, delimiter, pos, true) end do
table.insert(arr, string.sub(input, pos, st - 1))
pos = sp + 1
end
table.insert(arr, string.sub(input, pos))
return arr
end
function getShortName(Japanese)
-- 获取因子简称
local str = string.sub(Japanese,1,3)
if( str == "ス")then
str2 = string.sub(Japanese,1,6)
if( str2 == "スピ")then
return "速"
else
return "耐"
end
elseif(str == "パ")then
return "力"
elseif(str == "賢")then
return "智"
elseif(str == "芝")then
return "草"
elseif(str == "ダ")then
return "泥"
elseif(str == "マ")then
return "英"
elseif(str == "長")then
return "长"
-- 繁中
elseif(str == "持")then
return "耐"
elseif(str == "意")then
return "根"
elseif(str == "沙")then
return "泥"
elseif(str == "領")then
return "逃"
elseif(str == "前")then
return "先"
elseif(str == "居")then
return "差"
elseif(str == "後")then
return "追"
elseif(str == "一")then
return "英"
-- 简中
elseif(str == "毅")then
return "根"
elseif(str == "领")then
return "逃"
elseif(str == "跟")then
return "先"
elseif(str == "后")then
return "追"
else
return str;
end
end
-- 以下为旧版本方案,该方案仍在线上,需保留
function getScenario(white_seed)
-- 从白因子寻找剧本因子
local index,iend = string.find(white_seed,"URAシナリオ")
if(index) ~= nil then
return {"URA",tonumber(string.sub(white_seed,iend+1,iend+1))}
end
local index,iend = string.find(white_seed,"URA劇本")
if(index) ~= nil then
return {"URA",tonumber(string.sub(white_seed,iend+1,iend+1))}
end
local index,iend = string.find(white_seed,"URA剧本")
if(index) ~= nil then
return {"URA",tonumber(string.sub(white_seed,iend+1,iend+1))}
end
index,iend = string.find(white_seed,"アオハル杯シナリオ")
if(index) ~= nil then
return {"AO",tonumber(string.sub(white_seed,iend+1,iend+1))}
end
index,iend = string.find(white_seed,"青春盃劇本")
if(index) ~= nil then
return {"AO",tonumber(string.sub(white_seed,iend+1,iend+1))}
end
index,iend = string.find(white_seed,"青春杯剧本")
if(index) ~= nil then
return {"AO",tonumber(string.sub(white_seed,iend+1,iend+1))}
end
index,iend = string.find(white_seed,"クライマックスシナリオ")
if(index) ~= nil then
return {"CLI",tonumber(string.sub(white_seed,iend+1,iend+1))}
end
index,iend = string.find(white_seed,"巔峰賽劇本")
if(index) ~= nil then
return {"CLI",tonumber(string.sub(white_seed,iend+1,iend+1))}
end
index,iend = string.find(white_seed,"巅峰赛剧本")
if(index) ~= nil then
return {"CLI",tonumber(string.sub(white_seed,iend+1,iend+1))}
end
index,iend = string.find(white_seed,"グランドライブシナリオ")
if(index) ~= nil then
return {"GL",tonumber(string.sub(white_seed,iend+1,iend+1))}
end
index,iend = string.find(white_seed,"グランドマスターズシナリオ")
if(index) ~= nil then
return {"GS",tonumber(string.sub(white_seed,iend+1,iend+1))}
end
return {-1,-1}
end
function addSeed_array(seed_str,seed_name)
if(Seed_array[seed_str]) ~= nil then
Seed_array[seed_str] = Seed_array[seed_str] + tonumber(string.sub(json[seed_name],-1))
else
Seed_array[seed_str] = tonumber(string.sub(json[seed_name],-1))
end
end
function addSeed_num(seed_str,seed_num)
if(Seed_array[seed_str]) ~= nil then
Seed_array[seed_str] = Seed_array[seed_str] + seed_num
else
Seed_array[seed_str] = seed_num
end
end
function add_factor_num(str_list, suffix)
local factor_array = splitString(str_list,",")
for i = 1, #factor_array do
-- mw.logObject(factor_array[i])
factor_name = string.sub(factor_array[i], 1, -2);
-- SMW中的属性名不能包含诸如!?*.等字符,因此需要做替换
-- 正则会出现编码问题,需要一个个替换
factor_name = string.gsub(factor_name,"!","!");
factor_name = string.gsub(factor_name,"?","?");
factor_name = string.gsub(factor_name,"*","x");
factor_name = string.gsub(factor_name,"%.","_");
factor_name = string.gsub(factor_name,"=","_");
addSeed_num(factor_name..suffix,
tonumber(string.sub(factor_array[i],-1)))
end
end
p["获取JSON属性"]=function(frame)
json = JSON:decode(frame.args["JSON"]);
add_factor_num(json["代表赛马娘白因子"],"(本)")
add_factor_num(json["代表赛马娘白因子"],"(总)")
add_factor_num(json["赛马娘祖辈A白因子"],"(总)")
add_factor_num(json["赛马娘祖辈B白因子"],"(总)")
add_factor_num(json["代表赛马娘绿因子"],"(本)")
add_factor_num(json["代表赛马娘绿因子"],"(总)")
add_factor_num(json["赛马娘祖辈A绿因子"],"(总)")
add_factor_num(json["赛马娘祖辈B绿因子"],"(总)")
-- 本体因子
Seed_array["种本"..getShortName(json["代表赛马娘蓝因子"])] = tonumber(string.sub(json["代表赛马娘蓝因子"],-1))
Seed_array["种本"..getShortName(json["代表赛马娘红因子"])] = tonumber(string.sub(json["代表赛马娘红因子"],-1))
local Scenario = getScenario(json["代表赛马娘白因子"])
if Scenario[1] ~= -1 then
Seed_array["种本"..Scenario[1]] = Scenario[2]
end
-- 总因子
Seed_array["种总"..getShortName(json["代表赛马娘蓝因子"])] = tonumber(string.sub(json["代表赛马娘蓝因子"],-1))
Seed_array["种总"..getShortName(json["代表赛马娘红因子"])] = tonumber(string.sub(json["代表赛马娘红因子"],-1))
Scenario = getScenario(json["代表赛马娘白因子"])
if Scenario[1] ~= -1 then
Seed_array["种总"..Scenario[1]] = Scenario[2]
end
local seed_str = "种总"..getShortName(json["赛马娘祖辈A蓝因子"])
addSeed_array(seed_str,"赛马娘祖辈A蓝因子")
seed_str = "种总"..getShortName(json["赛马娘祖辈B蓝因子"])
addSeed_array(seed_str,"赛马娘祖辈B蓝因子")
seed_str = "种总"..getShortName(json["赛马娘祖辈A红因子"])
addSeed_array(seed_str,"赛马娘祖辈A红因子")
seed_str = "种总"..getShortName(json["赛马娘祖辈B红因子"])
addSeed_array(seed_str,"赛马娘祖辈B红因子")
Scenario = getScenario(json["赛马娘祖辈A白因子"])
if Scenario[1] ~= -1 then
addSeed_num("种总"..Scenario[1],Scenario[2])
end
Scenario = getScenario(json["赛马娘祖辈B白因子"])
if Scenario[1] ~= -1 then
addSeed_num("种总"..Scenario[1],Scenario[2])
end
-- 输出最终结果
-- mw.logObject(Seed_array)
for key, value in pairs(Seed_array) do
frame:callParserFunction{name='#set',args={key,value}}
-- mw.log(key,value)
end
return
end
return p
--调试用↓
--frame = {}
--frame["args"] ={}
--frame.args["JSON"]="{ \"主题色\": \"粉\", \"头像\": \"真机伶\", \"昵称\": \"中野六海\", \"UID\": \"419839232\", \"服务器\": \"日服\" , \"代表赛马娘名\": \"超级小海湾\", \"代表赛马娘蓝因子\": \"スピード3\", \"代表赛马娘绿因子\": \"ピュリティオブハート1\", \"代表赛马娘红因子\": \"先行3\", \"代表赛马娘白因子\": \"有馬記念*1,おひとり.様○1,ペースアップ?1,深呼吸!1,アオハル杯シナリオ!?.*2\", \"赛马娘祖辈A名\": \"鲁道夫象征\", \"赛马娘祖辈A蓝因子\": \"スタミナ3\", \"赛马娘祖辈A绿因子\": \"汝、皇帝の神威を見よ1\", \"赛马娘祖辈A红因子\": \"中距離1\", \"赛马娘祖辈A白因子\": \"日本ダービー2,有馬記念1,末脚1,URAシナリオ2\", \"赛马娘祖辈B名\": \"目白麦昆\", \"赛马娘祖辈B蓝因子\": \"スタミナ3\", \"赛马娘祖辈B绿因子\": \"貴顕の使命を果たすべく1\", \"赛马娘祖辈B红因子\": \"逃げ3\", \"赛马娘祖辈B白因子\": \"有馬記念2,徹底マーク○2,コーナー回復○2,逃げ直線○2,ふり絞り2,URAシナリオ3\", \"支援卡名\": \"【燦爛】メジロラモーヌ\", \"支援卡突破\": \"4\", \"支援卡等级\": \"50\", \"是否展示\": \"是\", \"备注\":\"速3耐6先3逃3,URA5,青春杯2\"}"
--p["获取JSON属性"](frame)