打开主菜单
首页
随机
登录
设置
关于Arcaea中文维基
免责声明
搜索
查看“Module:SongCollectionMulti”的源代码
←
Module:SongCollectionMulti
因为以下原因,您没有权限编辑本页:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
local mad = require 'Module:AnotherData' local lang = mw.language.getContentLanguage() local frame = mw.getCurrentFrame() local p = {} local dates, versionNames = {}, {} -- 同曲目在双平台使用不同songid: local different_id = {['edenwacca']='eden'} -- 分离双平台页的曲包,value为后缀附加内容: '曲包'->' (xx版曲包)' ; ''->' (xx版)' local discrete_pack = {['Arcaea']='曲包', ['Memory Archive']=''} local function verQuery(sec) local date = tonumber(lang:formatDate('ymd', '@' .. sec)) - 1 if date > dates[#dates] then return '@' end local l, r = 1, #dates while l < r do local m = math.floor((l + r) / 2) if dates[m] < date then l = m + 1 else r = m end end return versionNames[l] end local function otherTitles(song) local res = {} local titleJa = song.title_localized.ja if titleJa then table.insert(res, ('<span lang="ja">-{%s}-</span>'):format(titleJa)) end table.insert(res, song.title_localized['zh-Hans']) for _, diff in ipairs(song.difficulties) do if diff.title_localized then table.insert(res, diff.title_localized.en .. ' ' .. mad.color { rc = diff.ratingClass + 1, -- 为什么没有设置成对应关系!?(恼) txt = ('[%s]'):format(({[3] = 'Beyond'})[diff.ratingClass]), inline = true }) end end return res end local cal = mw.loadJsonData 'Template:ComplexArtistsList.json' local trans = mw.loadJsonData 'Template:Transition.json' local function link(l, d) if d then return '[[' .. l .. '|' .. d .. ']]' else return '[[' .. l .. ']]' end end local function formatJapaneseText(text) return mw.ustring.gsub( text, '[一-龠ぁ-ゔァ-ヴー々〆〤ヶ]+', function(v) return ('<span lang="ja">-{%s}-</span>'):format(v) end ) end local onlyMobile = frame:expandTemplate{title = '仅', args = {'移动版', '', '图片角标'}} local onlyNS = frame:expandTemplate{title = '仅', args = {'NS版', '', '图片角标'}} local ctrlTouch = '[[文件:Icon Touch2.png|16px|top|触摸|link=]]' local ctrlJC = '[[文件:Icon Joy-Con2.png|16px|top|Joy-Con|link=]]' local sectionCode = {unknown = 0, free = 1, archive = 2, mainstory = 3, sidestory = 4, collab = 5, single = 6} local function main(args, durArgs) local view = {} -- local plat = 'mobile' -- 不对song下述提及的字段存在性做检验 local multi_song={} local ns_song={} local multi_id={} local mobile_id={} local ns_id={} for _, song in ipairs(mad.listOf('songs', 'mobile')) do mobile_id[song.id] = 1 multi_id[song.id] = 1 multi_song[song.id] = song end for _, song in ipairs(mad.listOf('songs', 'ns')) do ns_id[song.id] = 1 ns_song[song.id] = song if not multi_id[song.id] then multi_id[song.id] = 1 multi_song[song.id] = song end end for _,v in pairs(different_id) do multi_song[v] = nil end for _, song in pairs(multi_song) do local id = song.id local packItem = mad.packQueryWrap(song.set, 'mobile') local data = setmetatable({}, {__index = table}) local function input(...) return args[table.concat({id, ...}, '.')] end if id ~= 'lasteternity' then table.insert(view, { data = data, sort = {sectionCode[packItem['section']], packItem['numero'], song.date} }) end -- 平台 local display_plat = '' local NSid = id if mobile_id[id] then display_plat = display_plat .. '[[文件:Icon Smartphone.png|16px|link=曲目列表 (移动版)]]' end if ns_id[id] then display_plat = display_plat .. '[[文件:Icon Nintendo switch.png|16px|link=曲目列表 (Nintendo Switch版)]]' elseif different_id[id] then display_plat = display_plat .. '[[文件:Icon Nintendo switch.png|16px|link=曲目列表 (Nintendo Switch版)]]' NSid = different_id[id] end if display_plat == '' then display_plat = '无' end data:insert(display_plat) -- 图片 data:insert(id) -- 标题与副标题 otherTitles data:insert(input '标题' or table.concat({'[[' .. mad.linkTitle(song) .. ']]', unpack(otherTitles(song))}, '<br>')) -- 曲师 local artist = '' local artist_list = cal[string.gsub(song.artist, ' ' , '')] if artist_list then for _, data in ipairs(artist_list) do local display_ja = formatJapaneseText(data.display) if data.link then artist = artist .. link('曲师列表#' .. data.link, display_ja) else artist = artist .. display_ja end end else artist = formatJapaneseText(song.artist) artist = link('曲师列表#' .. song.artist, artist) end data:insert(input '音乐家' or artist) --曲包 local cc = 'Collaboration %- Collaboration' local ccl = 'Collaboration#Collaboration' local ccd = 'Collaboration' local pack_main = string.gsub(trans.packName[song.set] or packItem['name'], cc, ccl) local pack_md = string.gsub(pack_main, ccl, ccd) if mobile_id[id] and ns_id[NSid] then local song_ns = ns_song[NSid] packItem_ns = mad.packQueryWrap(song_ns.set, 'ns') local pack_ns = string.gsub(trans.packName[ns_song[NSid].set] or packItem_ns['name'], cc, ccl) local pack_nd = string.gsub(pack_ns, ccl, ccd) if pack_ns == pack_main then if discrete_pack[pack_main] then local pack_ml = pack_main .. (' (移动版%s)'):format(discrete_pack[pack_main]) local pack_nl = pack_ns .. (' (NS版%s)'):format(discrete_pack[pack_main]) -- pack_md = pack_md .. '<br /><small>(移动版)</small>' -- pack_nd = '<small>(NS版)</small>' -- pack = link(pack_ml, pack_md) .. onlyMobile .. '<br \>' ..link(pack_nl, pack_nd) .. onlyNS pack = link(pack_ml, pack_md) .. onlyMobile .. '<br \>--<br \>' ..link(pack_nl, pack_nd) .. onlyNS else pack = link(pack_main, pack_md) end else pack = link(pack_main, pack_md) .. onlyMobile .. '<br \>--<br \>' ..link(pack_ns, pack_nd) .. onlyNS end elseif mobile_id[id] then pack = link(pack_main, pack_md) .. onlyMobile else pack = link(pack_main, pack_md) .. onlyNS end data:insert(input '所属曲包' or pack) --其他信息 local bpm = tonumber(input 'BPM') or song.bpm_base data:insert((tonumber(song.bpm) ~= bpm and ('data-sort-value=%s|'):format(bpm) or '') .. song.bpm) data:insert(durArgs[id] or ' @ ') data:insert(song.version .. '.' .. (input '收录版本' or verQuery(song.date))) -- 难度等级 local main_lv = {} local lv_table ={} for _,diff in pairs(song.difficulties) do main_lv[diff.ratingClass] = diff.rating .. (diff.ratingPlus and '+' or '') end if mobile_id[id] and ns_id[NSid] then local song_ns = ns_song[NSid] local ns_lv = {} local c_chart = {} for _,diff in pairs(song_ns.difficulties) do ns_lv[diff.ratingClass] = diff.rating .. (diff.ratingPlus and '+' or '') if diff.has_controller_alt_chart then c_chart[diff.ratingClass] = 1 end end for i = 0, 4 do local lv if main_lv[i] and ns_lv[i] then if main_lv[i] == ns_lv[i] then lv = main_lv[i] .. (c_chart[i] and ('<br />' .. ctrlTouch .. ctrlJC) or '') else -- lv = main_lv[i] .. onlyMobile .. '<br />' .. ns_lv[i] .. (c_chart[i] and (ctrlTouch ..onlyNS .. '<br />' .. ns_lv[i] .. ctrlJC .. onlyNS) or onlyNS) lv = main_lv[i] .. onlyMobile .. '<br \>' .. ns_lv[i] .. onlyNS .. (c_chart[i] and ('<br />' .. ctrlTouch ..ctrlJC) or '') end elseif main_lv[i] then lv = main_lv[i] .. onlyMobile elseif ns_lv[i] then lv = ns_lv[i] .. onlyNS else lv = '/' end lv_table[i] = lv end else for i = 0, 4 do local lv = main_lv[i] or '/' lv_table[i] = lv end end -- 顺序:PST PRS FTR ETR BYD local lv_order = {0, 1, 2, 4, 3} for i=1, #lv_order do local j = lv_order[i] data:insert(input('等级', j) or lv_table[j]) end -- for i in {0, 1, 2, 4, 3} do -- data:insert(input('等级', i) or lv or '/') -- end end table.sort(view, 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 res = {} local template = '|-\n|%s' .. '||[[文件:Songs %s.jpg|75px]]' .. ('||%s'):rep(11) for idx, value in ipairs(view) do res[idx] = template:format(unpack(value.data)) end return table.concat(res, '\n') end function p.multi(frame) for record in mw.text.gsplit(frame.args._ver_, '%s') do local date, name = record:match '(%d+):(.*)' table.insert(dates, tonumber(date)) table.insert(versionNames, name) end return main(frame:getParent().args, frame.args) end return p
本页使用的模板:
Module:SongCollectionMulti/doc
(
查看源代码
)
返回
Module:SongCollectionMulti
。