打开主菜单
首页
随机
登录
设置
关于Arcaea中文维基
免责声明
搜索
查看“Module:沙盒/盐棋/Sandbox”的源代码
←
Module:沙盒/盐棋/Sandbox
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
local mad = require 'Module:AnotherData' local p = {} local linkPool = {} local mLink = {} local mSong = {} for _, song in ipairs(mad.listOf 'songs') do local query = mad.songQueryWrap(song) local link = query.linkTitle linkPool[link] = true mSong[song.id] = song mLink[song.id] = link end function p.world(frame) local world = mw.title.new('世界模式地图详表 (移动版' .. frame.args[1] .. ')'):getContent() local res = {} for name, wtb in world:gmatch '== *([^B].-) *==[^={]+(%b{})' do local tot for stair, reward in wtb:gmatch '| *(%d+)[0-9()%-| ]+(%b[])' do if linkPool[reward:sub(3, -3)] then tot = tot or tonumber(wtb:match '| *(%d+)[^\n]+\n|%-\n| *总计') - 1 table.insert(res, ('|-\n|%s||%s||%d/%d'):format(reward, name, tonumber(stair) - 1, tot)) end end end return table.concat(res, '\n') end local templates = { [0] = '$credit 残片', '$grade通关 $song_id $song_difficulty', '游玩 $song_id $song_difficulty', '$grade通关 $song_id $song_difficulty$times回', "$1 <br>'''或''' $2", '个人游玩潜力值 $rating 或以上', '通关$count首$rating$ratingPlus难度曲目', } local handlers = {} local linkize = '[[%s]]' function handlers.song_id(v) return linkize:format(mLink[v]) end function handlers.song_difficulty(v) return ({[0] = '[PST]', '[PRS]', '[FTR]', '[BYD]'})[v] end function handlers.grade(v) return v == 0 and '' or ('以 「%s」 或以上成绩'):format(({'C', 'B', 'A', 'AA', 'EX'})[v]) end function handlers.rating(v) return v > 13 and ('%.2f'):format(v / 100) or v end function handlers.ratingPlus(v) return v and '+' or '' end local function stringify(cond) return templates[cond.type]:gsub('%$([a-zA-Z12_]+)', function(k) local nk = tonumber(k) if nk then return stringify(cond.conditions[nk]) end if handlers[k] then return handlers[k](cond[k]) end return cond[k] end) end function p.main() local view = {} for _, chartUlk in ipairs(mad.listOf 'unlocks') do local id, rc = chartUlk.songId, chartUlk.ratingClass local row = view[id] if not row then row = {} view[id] = row end local cell = {} row[rc] = cell for _, cond in ipairs(chartUlk.condition) do local className if cond.type == 0 then className = 'ulk-frag' elseif cond.type <= 100 and cond.type ~= 5 then className = 'ulk-prev' end if className then table.insert(cell, mw.html.create 'span':addClass(className):wikitext(stringify(cond))) end end end local texts = {} local rowFormat = '|-\n|[[%s]]' .. ('||%s'):rep(3) local sectionCode = {unknown = 0, single = 1, free = 2, mainstory = 3, sidestory = 4, collab = 5} for id, row in pairs(view) do local song = mSong[id] local packItem = mad.packQueryWrap(song.set, 'mobile') local rowText = {} for i = 1, 3 do local cell = row[i] if not cell or #cell == 0 then rowText[i] = ' ' else rowText[i] = mw.allToString(unpack(cell)) end end table.insert(texts, { data = rowFormat:format(mLink[id], unpack(rowText)), pack = packItem['name'], sort = {sectionCode[packItem['section']], packItem['numero'], song.date}, }) end table.sort(texts, function(a, b) a, b = a.sort, b.sort for i = 1, 3 do local d = a[i] - b[i] if d ~= 0 then return d < 0 end end return false end) local hybrid = {} local pack for _, value in ipairs(texts) do if pack ~= value.pack then pack = value.pack table.insert(hybrid, '|-\n| colspan="4" |' .. pack) end table.insert(hybrid, value.data) end return table.concat(hybrid, '\n') end return p
本页使用的模板:
Module:沙盒/盐棋/Sandbox/doc
(
查看源代码
)
返回
Module:沙盒/盐棋/Sandbox
。