Module:沙盒/盐棋/Sandbox1:修订间差异
小 (try 2) |
小 (find) |
||
第1行: | 第1行: | ||
local p={cfg=nil} | local p={cfg=nil} | ||
local L={ | |||
{version="v1.0.0c",date="2021.5.18"}, | |||
{version="v1.1.0",date="2021.6.22"}, | |||
{version="v1.2.0",date="2021.9.16"}, | |||
{version="v1.3.0",date="2022.2.24"}, | |||
} | |||
local postscript={MobileTime={}, | |||
NSTime={[""]=L[1],["groovecoaster"]=L[2],["observer"]=L[3],["alice"]=L[3], | |||
["enchantedlove"]=L[3],["take"]=L[3],["lifeispiano"]=L[3],["lapis"]=L[3],["purpleverse"]=L[3],["turbocharger"]=L[3],["vandalism"]=L[3],["glow"]=L[3], | |||
["musedash"]=L[4],["observer_append_2"]=L[4],["single_append_1"]=L[4],["single_append_2"]=L[4],["energysynergymatrix"]=L[4],["bluecomet"]=L[4],["hivemind"]=L[4],["kyogenkigo"]=L[4],}, | |||
duration={}} | |||
local W=mw | local W=mw | ||
第37行: | 第48行: | ||
bpm_base=byd["bpm_base"], | bpm_base=byd["bpm_base"], | ||
bg=byd["bg"], | bg=byd["bg"], | ||
duration=postscript.duration[info["id"]], | |||
} | } | ||
end | end | ||
第72行: | 第83行: | ||
cfgPush("jacketOverride","sunset") | cfgPush("jacketOverride","sunset") | ||
end | end | ||
return info | |||
end | |||
local function MobileTimeFilter(info) | |||
local searcher=function (x) | |||
return {version=string.match(W.getCurrentFrame():expandTemplate{ title = ":版本更新日志" }, | |||
"(v%d%.%d%d?%.%d%d?)%s*|%s*" .. W.language.getContentLanguage():formatDate("Y%.n%.j","@"..x) .. "%D"), | |||
date=os.date("(%Y/%m/%d)", x)} | |||
end | |||
p.cfg["stamp"]=searcher(info["date"]) or postscript.MobileTime[info["id"]] | |||
p.cfg["stampbyd"]=searcher(opChain(function ()return info["difficulties"][4]["date"] end)) | |||
p.cfg["err"]=p.cfg["stamp"]==nil or(info["difficulties"][4]~=nil and p.cfg["stampbyd"]==nil) | |||
return info | |||
end | |||
local function NSTimeFilter(info) | |||
p.cfg["stamp"]=postscript.NSTime[info["set"]] or postscript.NSTime[info["id"]] or postscript.NSTime[""] | |||
p.cfg["err"]=p.cfg["stamp"]==nil | |||
return info | return info | ||
end | end | ||
第95行: | 第124行: | ||
function p.GetSong(args) | function p.GetSong(args) | ||
local Mobile = QuerySong(LoadJson("Songlist"),args['曲名'],args['id'],BGFilter,TitleFilter,JacketFilter,AudioFilter) | local Mobile = QuerySong(LoadJson("Songlist"),args['曲名'],args['id'],BGFilter,TitleFilter,JacketFilter,AudioFilter,MobileTimeFilter) | ||
local NS = QuerySong(LoadJson("Songlist NS"),args['曲名'],args['id'],NSBydFilter, | local NS = QuerySong(LoadJson("Songlist NS"),args['曲名'],args['id'],NSBydFilter,NSTimeFilter) | ||
Mobile.__config.version=string.match( | Mobile.__config.version=string.match( | ||
W.getCurrentFrame():expandTemplate{ title = ":版本更新日志" }, | W.getCurrentFrame():expandTemplate{ title = ":版本更新日志" }, |
2022年5月8日 (日) 01:26的版本
可在Module:沙盒/盐棋/Sandbox1/doc创建此模块的帮助文档
local p={cfg=nil}
local L={
{version="v1.0.0c",date="2021.5.18"},
{version="v1.1.0",date="2021.6.22"},
{version="v1.2.0",date="2021.9.16"},
{version="v1.3.0",date="2022.2.24"},
}
local postscript={MobileTime={},
NSTime={[""]=L[1],["groovecoaster"]=L[2],["observer"]=L[3],["alice"]=L[3],
["enchantedlove"]=L[3],["take"]=L[3],["lifeispiano"]=L[3],["lapis"]=L[3],["purpleverse"]=L[3],["turbocharger"]=L[3],["vandalism"]=L[3],["glow"]=L[3],
["musedash"]=L[4],["observer_append_2"]=L[4],["single_append_1"]=L[4],["single_append_2"]=L[4],["energysynergymatrix"]=L[4],["bluecomet"]=L[4],["hivemind"]=L[4],["kyogenkigo"]=L[4],},
duration={}}
local W=mw
local function opChain(tar)
local status,result=pcall(tar)
if status then return result else return nil end
end
local function LoadJson(filename)
return W.text.jsonDecode(W.getCurrentFrame():expandTemplate{ title = filename })
end
local function cfgPush(key,val)
if val~=nil then
if p.cfg[key]==nil then
p.cfg[key]={}
end
p.cfg[key][#p.cfg[key]+1]=val
end
end
local function NSBydFilter(info)
local NsBydSet={["tempestissimo"] = true}
if not NsBydSet[info["id"]] then
info["difficulties"][4] = nil
end
return info
end
local function AudioFilter(info)
if opChain(function ()return info["difficulties"][4]["audioOverride"] end) then
local byd=info["difficulties"][4]
p.cfg["bydSongOverride"]={
title_localized=byd["title_localized"]["en"],
artist=byd["artist"],
bpm=byd["bpm"],
bpm_base=byd["bpm_base"],
bg=byd["bg"],
duration=postscript.duration[info["id"]],
}
end
return info
end
local function BGFilter(info)
assert(info["bg"] and info["side"],"'bg'字段必须存在")
local board={[0]="light",[1]="conflict"}
if info["bg"]=="" then info["bg"] = "base_"..board[info["side"]]
else-- aterlbus
p.cfg["bgOverride"]=info["difficulties"][3]["bg"]
end
return info
end
local function TitleFilter(info)
assert(info["title_localized"]["en"],"'en'字段必须存在")
cfgPush("title",info["title_localized"]["en"])
cfgPush("title",info["title_localized"]["ja"])
cfgPush("title",info["title_localized"]["zh-Hans"])
return info
end
local function JacketFilter(info)
if opChain(function ()return info["difficulties"][4]["jacketOverride"] end) then
cfgPush("jacketOverride","byd")
p.cfg.jacketDesigner=info["difficulties"][4]["jacketDesigner"]
elseif info["difficulties"][1]["jacketOverride"] then-- stager, avril, lanota2
cfgPush("jacketOverride","pstprs")
elseif info["jacket_localized"] then-- solitarydream
cfgPush("jacketOverride","lang")
elseif info["difficulties"][3]["jacket_night"] then-- melodyoflove
cfgPush("jacketOverride","sunset")
end
return info
end
local function MobileTimeFilter(info)
local searcher=function (x)
return {version=string.match(W.getCurrentFrame():expandTemplate{ title = ":版本更新日志" },
"(v%d%.%d%d?%.%d%d?)%s*|%s*" .. W.language.getContentLanguage():formatDate("Y%.n%.j","@"..x) .. "%D"),
date=os.date("(%Y/%m/%d)", x)}
end
p.cfg["stamp"]=searcher(info["date"]) or postscript.MobileTime[info["id"]]
p.cfg["stampbyd"]=searcher(opChain(function ()return info["difficulties"][4]["date"] end))
p.cfg["err"]=p.cfg["stamp"]==nil or(info["difficulties"][4]~=nil and p.cfg["stampbyd"]==nil)
return info
end
local function NSTimeFilter(info)
p.cfg["stamp"]=postscript.NSTime[info["set"]] or postscript.NSTime[info["id"]] or postscript.NSTime[""]
p.cfg["err"]=p.cfg["stamp"]==nil
return info
end
function QuerySong(json,key,queryById,...)
local searcher
if queryById then
-- quon, ifi, aiueoon
searcher = function (x)return x['id']end
else
key = W.text.decode(key,true)
searcher = function (x)return W.ustring.gsub(x['title_localized']['en'],"^%l",W.ustring.upper)end
end
for _, song in ipairs(json["songs"]) do
if searcher(song) == key then
p.cfg = {}
for _, filter in ipairs({...}) do filter(song) end
song.__config=p.cfg
return song
end
end
end
function p.GetSong(args)
local Mobile = QuerySong(LoadJson("Songlist"),args['曲名'],args['id'],BGFilter,TitleFilter,JacketFilter,AudioFilter,MobileTimeFilter)
local NS = QuerySong(LoadJson("Songlist NS"),args['曲名'],args['id'],NSBydFilter,NSTimeFilter)
Mobile.__config.version=string.match(
W.getCurrentFrame():expandTemplate{ title = ":版本更新日志" },
"(v%d%.%d%d?%.%d%d?)%s*|%s*" .. W.language.getContentLanguage():formatDate("Y%.n%.j","@"..Mobile["date"]) .. "%D")
local main=Mobile or NS
if Mobile and NS then
--
end
return W.text.jsonEncode({Mobile=Mobile, NS=NS, args=args},W.text.JSON_PRETTY)
end
return p