打开主菜单
首页
随机
登录
设置
关于Arcaea中文维基
免责声明
搜索
查看“Module:沙盒/盐棋/Sandbox1”的源代码
←
Module:沙盒/盐棋/Sandbox1
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
local checkType = require 'libraryUtil'.checkType local lang = mw.language.getContentLanguage() local p = {} local srcFileName = { ['songs'] = {'Songlist.json', 'Songlist NS.json'}, ['packs'] = {'Packlist.json', 'Packlist NS'}, ['unlocks'] = {'Unlocks.json', 'Unlocks NS'}, } function p.listOf(type, platform) return mw.text.jsonDecode(mw.title.new(srcFileName[type][platform == 'ns' and 2 or 1], 'Template'):getContent())[type] end local commonExpr = { title = '.title_localized.en', pstChartDesigner = '.difficulties.1.chartDesigner', pstJacketDesigner = '.difficulties.1.jacketDesigner', pstRating = '.difficulties.1.rating', prsChartDesigner = '.difficulties.2.chartDesigner', prsJacketDesigner = '.difficulties.2.jacketDesigner', prsRating = '.difficulties.2.rating', ftrChartDesigner = '.difficulties.3.chartDesigner', ftrJacketDesigner = '.difficulties.3.jacketDesigner', -- ftrRating bydChartDesigner = '.difficulties.4?chartDesigner', bydJacketDesigner = '.difficulties.4?jacketDesigner', -- bydRating pstChange = '.difficulties.1.has_controller_alt_chart', prsChange = '.difficulties.2.has_controller_alt_chart', ftrChange = '.difficulties.3.has_controller_alt_chart', bydAudioChange = '.difficulties.4?audioOverride', bydBg = '.difficulties.4?bg', bydBPM = '.difficulties.4?bpm', bydArtist = '.difficulties.4?artist', bydTitle = '.difficulties.4?title_localized?en', bydDate = '.difficulties.4?date', } local commonFunc = {} function commonFunc.ftrRating(obj) local diff = obj.difficulties[3] return diff.rating .. (diff.ratingPlus and '+' or '') end function commonFunc.bydRating(obj) local diff = obj.difficulties[4] if not diff then return nil end return diff.rating .. (diff.ratingPlus and '+' or '') end function commonFunc.linkName(obj) local trans = mw.loadJsonData 'Template:Transition.json' local name = obj.title_localized.en local res = trans.songNameToDisplayName[name] if res then return res end res = trans.sameName[name] if res then return res[obj.id] end end function commonFunc.linkTitle(obj) local res = {commonFunc.linkName(obj)} table.insert(res, obj.title_localized.en) return table.concat(res, '|') end local function chain(obj, expr) for op, sKey in expr:gmatch '([.?])([^.?]+)' do if op == '?' and obj == nil then break end local key = tonumber(sKey) or sKey obj = obj[key] end return obj end local function songQuery(t, prop) checkType('songQuery', 2, prop, 'string') local obj = getmetatable(t)._info_ if next(obj) == nil then return nil end local expr = commonExpr[prop] if expr then return chain(obj, expr) end local func = commonFunc[prop] if func then return func(obj) end if not prop:match '^[.?]' then return t[prop] end return chain(obj, prop) end function p.songQueryWrap(song) checkType('songQueryWrap', 1, song, 'table') return setmetatable({}, {__call = songQuery, __index = songQuery, _info_ = song}) end ---传入曲名或ID,获得一个查阅信息的函数。直接在下一个模块使用。 ---@param index string 曲目的索引,和typed一致 ---@param indexType 'id'|'name' 查找曲目的索引值类型 ---@param platform 'mobile'|'ns' ---@return table function p.singleSongInformation(index, indexType, platform) local lSong = p.listOf('songs', platform) local sKey = index local tar = {} if indexType == 'id' then for _, k in ipairs(lSong) do if k.id == sKey then tar = k break end end else sKey = lang:ucfirst(index) for _, k in ipairs(lSong) do if lang:ucfirst(k.title_localized.en) == sKey then tar = k break end end end if next(tar) == nil then mw.log('无法在Songlist中发现目标,索引值为:' .. index) end return p.songQueryWrap(tar) end local mPlatFormPackData = {} local function mobileSection(pack) return pack.section end local function nsSection(pack) if pack.pack_parent then return nil end if mw.loadJsonData 'Template:Transition.json'.packName[pack.id] then return 'collab' end return ({'free', 'mainstory', 'sidestory'})[pack.section] end local function factPackData(platform) local sectionOf = platform == 'ns' and nsSection or mobileSection local res = {single = {name = 'Memory Archive', section = 'single', numero = 0}} for idx, pack in ipairs(p.listOf('packs', platform)) do --- 单个曲包查询的数据结构 local item = {_parentId_ = pack.pack_parent, name = pack.name_localized.en, section = sectionOf(pack), numero = idx} res[pack.id] = item end for _, item in pairs(res) do local parentId = item._parentId_ local parent if parentId then parent = res[parentId] if item.name:match 'Collaboration Chapter' then item.name = parent.name .. ' ' .. item.name end end item.section = item.section or parent.section end return res end function p.packQueryWrap(id, platform) local packData = mPlatFormPackData[platform] if not packData then packData = factPackData(platform) mPlatFormPackData[platform] = packData end -- return id and packData[id] or packData return packData[id] or {name = '请更新plst', section = 'unknown'} end return p
本页使用的模板:
Module:沙盒/盐棋/Sandbox1/doc
(
查看源代码
)
返回
Module:沙盒/盐棋/Sandbox1
。