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

全站通知:

模块:种马因子解析

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

此模块的文档可以在模块:种马因子解析/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)