6,571
次編輯
(// Edit via Wikiplus) |
(// Edit via Wikiplus) |
||
行 11: | 行 11: | ||
end | end | ||
function p.packName(id) | |||
-- 将曲包ID转换为曲包名称。 | |||
-- 传入Songlist中定义的曲包ID,返回Packlist中的曲包ID。如果Template:Transition.json中存在转换,则使用转换后的名称。 | |||
-- 检查 曲包ID → 曲包名称 转换表是否存在转换规则 。 | |||
-- | local covList = mw.text.jsonDecode(mw.getCurrentFrame():expandTemplate{ title = 'Packlist' })["packName"] | ||
local covList = | if covList[id] then return covList[id] end | ||
if covList[ | |||
-- 判断变量是否已有值,为多次调用预备。 | |||
-- 变量为全局变量 | |||
if packlist == nil then | if packlist == nil then | ||
packlist = mw.text.jsonDecode(mw.getCurrentFrame():expandTemplate{ title = 'Packlist' }) | packlist = mw.text.jsonDecode(mw.getCurrentFrame():expandTemplate{ title = 'Packlist' }) | ||
行 42: | 行 30: | ||
end | end | ||
function p. | function p.unlockText(songId) | ||
-- 还未编写好的函数。目的:传入Songid,检索unlock,返回一个解锁要求文本的字符串。 | |||
-- 变量为全局变量 | |||
if unlock == nil | |||
then | |||
unlock = mw.text.jsonDecode(mw.getCurrentFrame():expandTemplate{ title = 'Packlist' }) | |||
end | |||
local result = {} | local result = {} | ||
for i, k in ipairs(json) do | for i, k in ipairs(json) do | ||
if k['songId'] == songId then | if k['songId'] == songId then | ||
result[tonumber(k['ratingClass'] + 1)] = k['conditions'] | result[tonumber(k['ratingClass'] + 1)] = k['conditions'] | ||
-- coding... | |||
end | end | ||
end | end | ||
行 53: | 行 49: | ||
end | end | ||
function jsonAssayForSingleSong(json, index, typed) | |||
-- 传入JSON文件,索引值和索引值类型(索引是ID还是曲名)。分析JSON文件以获得曲目信息 ,返回的是一个查找单一曲目中信息的函数 。仅获取单一曲目的信息。table中的索引名请查看下方switch表。 | |||
function | |||
-- 传入JSON文件,索引值和索引值类型(索引是ID还是曲名)。分析JSON文件以获得曲目信息。仅获取单一曲目的信息。table中的索引名请查看下方switch表。 | |||
-- Songlist是以数字为索引值,因此遍历Songlist,直到发现需要找的曲目,将信息存入info变量中。 | -- Songlist是以数字为索引值,因此遍历Songlist,直到发现需要找的曲目,将信息存入info变量中。 | ||
local s, info = "", {} | local s, info = "", {} | ||
-- 如果模式是ID则遍历songlist直至发现id值为索引值为止,并获取内容。曲名同理。 | -- 如果模式是ID则遍历songlist直至发现id值为索引值为止,并获取内容。曲名同理。 | ||
if | if typed == "id" then | ||
for i, k in ipairs(json['songs']) do | for i, k in ipairs(json['songs']) do | ||
if k['id'] == index then list[index] = k end | if k['id'] == index then list[index] = k end | ||
行 212: | 行 195: | ||
end | end | ||
function p. | function p.singleSongInformation(index, indexTyped, platform) | ||
-- 传入曲名或ID,获得一个查阅信息的函数 | -- 传入曲名或ID,获得一个查阅信息的函数。直接在下一个模块使用。 | ||
if id then | -- index:曲目的索引字符串,和typed一致 indexTyped:id或name,查找曲目的索引值类型 platform:mobile或ns | ||
if platfrom == "mobile" | |||
then | |||
if indexTyped == "id" then | |||
return jsonAssayForSingleSong(mw.text.jsonDecode(mw.getCurrentFrame():expandTemplate{ title = 'Songlist.json' } ), id, 'id') | |||
else | |||
return jsonAssayForSingleSong(mw.text.jsonDecode(mw.getCurrentFrame():expandTemplate{ title = 'Songlist.json' } ), name, 'name') | |||
end | |||
else | else | ||
return | if indexTyped == "id" then | ||
return jsonAssayForSingleSong(mw.text.jsonDecode(mw.getCurrentFrame():expandTemplate{ title = 'Songlist NS.json' } ), id, 'id') | |||
else | |||
return jsonAssayForSingleSong(mw.text.jsonDecode(mw.getCurrentFrame():expandTemplate{ title = 'Songlist NS.json' } ), name, 'name') | |||
end | |||
end | end | ||
end | end | ||
function | function jsonAssayForAllSong(json, indexTyped) | ||
-- 传 | -- 传 入JSON文件 ,获得一个 通过索引值 查 找指定曲目指定 信息的函数。 与jsonAssayForSingleSong不同,本函数可以同时查找多个函数。 | ||
if id then | -- 索引值由 下一 步函数 使用 来指定,但是索引类型必须刚开始就指定 。 (id或name) | ||
local s, info = "", {} | |||
if typed == "id" then | |||
for i, k in ipairs(json['songs']) do | |||
info[k['id']] = k | |||
end | |||
else | else | ||
for i, k in ipairs(json['songs']) do | |||
info[k['title_localized']['en']] = k | |||
end | |||
end | end | ||
-- 此处返回一个函数用于查询内容。 | |||
return function(index, key) | |||
-- 如果info无值即无法在songlist中查找到索引值,则返回nil。 | |||
if info[index] == nil | |||
then | |||
mw.log( '无法在Songlist中发现目标,索引值为:'..index ) | |||
return nil | |||
end | |||
-- 此处定义一个switch table以达到switch函数的效用。如果需要查找的参数在switch中不存在,返回nil。 | |||
local switch = { | |||
["id"] = function() return info[index]["id"] end, | |||
["title"] = function() return info[index]['title_localized']['en'] end, | |||
["artist"] = function() return info[index]["artist"] end, | |||
["bpm"] = function() return info[index]["bpm"] end, | |||
["set"] = function() return info[index]["set"] end, | |||
["side"] = function() return info[index]["side"] end, | |||
["date"] = function() return info[index]["date"] end, | |||
["version"] = function() return info[index]["version"] end, | |||
["bg"] = function() | |||
if info[index]["bg"] ~= "" then | |||
return info[index]["bg"] | |||
else | |||
if info[index]["side"] == 0 then | |||
return 'base_light' | |||
else | |||
if info[index]['side'] ==1 then | |||
return 'base_conflict' | |||
else | |||
return 'undefined' | |||
end | |||
end | |||
end | |||
end, | |||
["pstChartDesigner"] = function() | |||
return info[index]["difficulties"][1]['chartDesigner'] | |||
end, | |||
["pstJacketDesigner"] = function() | |||
return info[index]["difficulties"][1]['jacketDesigner'] | |||
end, | |||
["pstRating"] = function() | |||
return info[index]["difficulties"][1]['rating'] | |||
end, | |||
["prsChartDesigner"] = function() | |||
return info[index]["difficulties"][2]['chartDesigner'] | |||
end, | |||
["prsJacketDesigner"] = function() | |||
return info[index]["difficulties"][2]['jacketDesigner'] | |||
end, | |||
["prsRating"] = function() | |||
return info[index]["difficulties"][2]['rating'] | |||
end, | |||
["ftrChartDesigner"] = function() | |||
return info[index]["difficulties"][3]['chartDesigner'] | |||
end, | |||
["ftrJacketDesigner"] = function() | |||
return info[index]["difficulties"][3]['jacketDesigner'] | |||
end, | |||
["ftrRating"] = function() | |||
if info[index]["difficulties"][3]['ratingPlus'] then | |||
return info[index]["difficulties"][3]['rating'] .. '+' | |||
else | |||
return info[index]["difficulties"][3]['rating'] | |||
end | |||
end, | |||
["bydChartDesigner"] = function() | |||
if info[index]["difficulties"][4] then | |||
return info[index]["difficulties"][4]['chartDesigner'] | |||
end | |||
end, | |||
["bydJacketDesigner"] = function() | |||
if info[index]["difficulties"][4] then | |||
return info[index]["difficulties"][4]['jacketDesigner'] | |||
end | |||
end, | |||
["bydRating"] = function() | |||
if info[index]["difficulties"][4] then | |||
return info[index]["difficulties"][4]['rating'] | |||
end | |||
end, | |||
["pstChange"] = function() | |||
if info[index]["difficulties"][1] then | |||
return info[index]["difficulties"][1]['has_controller_alt_chart'] | |||
end | |||
end, | |||
["prsChange"] = function() | |||
if info[index]["difficulties"][2] then | |||
return info[index]["difficulties"][2]['has_controller_alt_chart'] | |||
end | |||
end, | |||
["ftrChange"] = function() | |||
if info[index]["difficulties"][3] then | |||
return info[index]["difficulties"][3]['has_controller_alt_chart'] | |||
end | |||
end, | |||
["bydAudioChange"] = function() | |||
if info[index]["difficulties"][4] then | |||
return info[index]["difficulties"][4]['audioOverride'] | |||
end | |||
end, | |||
["bydBg"] = function() | |||
if info[index]["difficulties"][4] then | |||
return info[index]["difficulties"][4]['bg'] | |||
end | |||
end, | |||
["bydBPM"] = function() | |||
if info[index]["difficulties"][4] then | |||
return info[index]["difficulties"][4]['bpm'] | |||
end | |||
end, | |||
["bydArtist"] = function() | |||
if info[index]["difficulties"][4] then | |||
return info[index]["difficulties"][4]['artist'] | |||
end | |||
end | |||
} | |||
if switch[key] == nil | |||
then | |||
mw.log( '未定义的索引类型,请检查是否拼写错误。' ) | |||
return nil | |||
end | |||
return switch[key]() | |||
end | |||
end | |||
function p.allSongInformation(index, platform) | |||
-- 传入曲名或ID,获得一个查阅信息的函数。直接在下一个模块使用。 | |||
-- index:曲目的索引字符串,和typed一致 typed:id或name,查找曲目的索引值类型 platform:mobile或ns | |||
if platfrom == "mobile" | |||
then | |||
if typed == "id" then | |||
return jsonAssayForSingleSong(mw.text.jsonDecode(mw.getCurrentFrame():expandTemplate{ title = 'Songlist.json' } ), 'id') | |||
else | |||
return jsonAssayForSingleSong(mw.text.jsonDecode(mw.getCurrentFrame():expandTemplate{ title = 'Songlist.json' } ), 'name') | |||
end | |||
else | |||
if typed == "id" then | |||
return jsonAssayForSingleSong(mw.text.jsonDecode(mw.getCurrentFrame():expandTemplate{ title = 'Songlist NS.json' } ), 'id') | |||
else | |||
return jsonAssayForSingleSong(mw.text.jsonDecode(mw.getCurrentFrame():expandTemplate{ title = 'Songlist NS.json' } ), 'name') | |||
end | |||
end | |||
end | |||
p.Song_Query = makeInvokeFunc('_Song_Query') | |||
function p._Song_Query(songIndexType, songIndex, attributeName, platform) | |||
return p.singleSongInformation(songIndex, songIndexType, platform)(attributeName) | |||
end | end | ||
return p | return p |