maimaiDX - real break count

Show real break count

当前为 2023-04-22 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name        maimaiDX - real break count
// @namespace   esterTion
// @match       https://maimaidx-eng.com/maimai-mobile/record/*
// @match       https://maimaidx.jp/maimai-mobile/record/*
// @grant       none
// @version     1.35.01
// @author      -
// @description Show real break count
// ==/UserScript==

// createElement
function _(e,t,i){var a=null;if("text"===e)return document.createTextNode(t);a=document.createElement(e);for(var n in t)if("style"===n)for(var o in t.style)a.style[o]=t.style[o];else if("className"===n)a.className=t[n];else if("event"===n)for(var o in t.event)a.addEventListener(o,t.event[o]);else a.setAttribute(n,t[n]);if(i)if("string"==typeof i)a.innerHTML=i;else if(Array.isArray(i))for(var l=0;l<i.length;l++)null!=i[l]&&a.appendChild(i[l]);return a}

const data = [[10070,"ジングルベル","SEGA Sound Unit [H.]",[0,0,[60,77,427],[61,125,929]]],[10190,"モザイクロール","DECO*27",[0,0,[16,31,462],[25,67,726]]],[10235,"火炎地獄","山根ミチル",[[3,11,148],[2,18,252],[11,27,543],[68,70,824]]],[10302,"ケロ⑨destiny","Silver Forest",[0,[6,7,255],[34,44,430],[5,70,691]]],[10315,"深海少女","ゆうゆ",[0,[8,12,268],[13,21,344],[8,23,714]]],[10316,"M.S.S.Planet","M.S.S Project",[[4,10,126],[5,13,308],[13,39,429],[22,37,700]]],[10404,"響縁","豚乙女",[0,[4,22,302],[14,21,519],0]],[10625,"Maxi","Nizikawa",[[6,8,202],[10,16,366],0,[53,118,907]]],[11228,"星めぐり、果ての君へ。","TAKU1175 ft.駄々子",[0,0,0,0,[13,18,842]]],[11452,"ホシシズク","森羅万象",[[1,4,197],[10,12,412],[9,21,667],[3,64,867]]],[11453,"Rainbow Rush Story","いるかアイス feat.ちょこ",[[2,3,173],[8,15,362],[18,24,474],[38,62,904]]],[11454,"Tricolor⁂circuS","ああ…翡翠茶漬け…",[0,[5,7,298],0,[21,55,924]]],[11455,"[X]","Blacklolita",[[8,26,201],[7,8,364],0,[59,89,999]]],[11456,"分解収束テイル","un:c・konoco×cosMo@暴走P",[[2,6,165],[10,16,394],[21,28,669],[47,62,1056]]],[11457,"mystique as iris","かねこちはる",[0,[3,7,463],[52,71,742],[55,62,1167]]],[11458,"Rising on the horizon","TAG",[[9,15,231],[14,16,331],[8,21,656],[79,82,946]]],[11459,"You Mean the World to Me","Mameyudoufu feat. Shully",[[2,4,160],[2,4,336],[10,36,523],[5,10,684]]],[11460,"Neon Kingdom","litmus*",[[3,5,180],[6,14,317],[12,14,500],0]],[11461,"#狂った民族2 PRAVARGYAZOOQA","DJ Raisei",[[14,44,244],[3,6,355],[104,250,502],[35,53,963]]],[11462,"VSpook!","s-don",[[13,19,256],[5,26,402],0,[90,156,1095]]],[11463,"RIFFRAIN","夏代孝明",[0,[6,8,298],[10,14,383],[8,21,611]]],[11464,"Falling","シノ feat.しほ",[0,[2,5,304],[8,9,453],[25,33,634]]],[11465,"ピリオドサイン","Ponchi♪ feat.はぁち",[0,[6,14,337],[7,21,500],[21,31,724]]],[11466,"群青シグナル","テヅカ feat. 獅子神レオナ",[[2,4,236],[2,20,443],[21,39,652],[26,32,978]]],[11467,"Beat Opera op.1","bermei.inazawa",[0,0,[4,6,500],[14,19,763]]],[11468,"星見草","秋田 真典",[[3,7,188],[2,6,350],[18,28,520],[21,32,817]]],[11469,"\"411Ψ892\"","Tanchiky",[0,[7,10,382],[26,85,631],[55,103,945]]],[11470,"康莊大道","Spiegel vs Yukino",[0,0,[35,42,735],[64,114,1129]]],[11471,"蜘蛛の糸","きくお×cosMo@暴走P feat.影縫英",[[2,8,224],[6,8,364],[30,95,698],[12,35,1052]]],[11472,"Don't Fight The Music","黒魔",[0,[4,16,410],[14,17,751],[63,148,1089]]],[11473,"Catch Me If You Can","曲:TAKU INOUE/歌:早乙女 彩華(CV:中島 唯)",[[3,4,264],[4,5,325],0,[26,40,840]]],[11474,"MAGNETAR GIRL","Yu-dachi",[[7,11,209],0,[12,37,518],[24,33,931]]],[11475,"SUPER AMBULANCE","AJURIKA",[0,[8,9,433],[11,13,648],[60,125,1030]]],[11477,"Ghost Dance","亜沙 feat.くろくも",[[2,4,166],0,[2,20,522],[15,28,859]]],[11478,"電光石火","HiTECH NINJA",[[6,8,195],[11,17,424],[20,24,691],[41,50,1047]]],[11479,"Hainuwele","ETIA.",[[13,15,239],0,[13,17,674],[31,77,1030]]],[11480,"アノーイング!さんさんウィーク!","五十嵐双葉(CV:楠木ともり)、桜井桃子(CV:早見沙織)、黒部夏美(CV:青山玲菜)、月城モナ(CV:古賀葵)",[[2,3,84],[6,12,174],[3,10,331],[32,33,548]]],[11481,"アニマル","DECO*27",[0,[4,10,434],[14,83,678],[22,82,941]]],[11482,"ジレンマ","DECO*27",[[1,3,161],[3,15,410],[23,50,611],[23,27,874]]],[11483,"踊","Ado",[[2,9,137],[4,11,315],[8,18,479],[13,33,707],[38,81,843]]],[11484,"残響散歌","Aimer",[[4,7,162],[2,8,373],[19,38,547],0]],[11485,"フォニイ","ツミキ feat.音楽的同位体 可不(KAFU)",[[2,6,121],[2,6,303],[18,24,520],[12,26,622],[14,43,753]]],[11486,"ヴィラン","flower・てにをは",[[1,2,90],[3,7,233],[5,7,377],[7,15,572],[21,49,679]]],[11487,"EYE","Kanaria",[[2,20,109],[4,8,335],0,[28,86,795]]],[11488,"スカーレット警察のゲットーパトロール24時","七条レタスグループ",[[1,2,117],[4,16,252],[4,38,307],[5,35,711]]],[11489,"田中","立秋 feat.ちょこ",[[3,5,186],[2,10,359],[11,14,661],[33,46,892]]],[11490,"Random","Sobrem × Silentroom",[[1,5,170],[6,8,262],[17,19,478],[31,46,786]]],[11491,"Luminaria","Lime",[[5,7,206],[5,7,353],[60,75,691],[37,45,832]]],[11492,"群青讃歌","Eve / 初音ミク、星乃一歌、花里みのり、小豆沢こはね、天馬司、宵崎奏「プロジェクトセカイ カラフルステージ! feat. 初音ミク」",[0,0,[6,10,335],[4,17,385]]],[11493,"セカイ","DECO*27 × 堀江晶太(kemu) / 初音ミク、星乃一歌、天馬司、宵崎奏「プロジェクトセカイ カラフルステージ! feat. 初音ミク」",[[2,4,102],[2,4,211],[14,18,360],[8,30,553]]],[11494,"ワーワーワールド","Giga & Mitchie M / 初音ミク、花里みのり、小豆沢こはね「プロジェクトセカイ カラフルステージ! feat. 初音ミク」",[[3,6,122],[4,12,239],[2,8,371],[15,22,558]]],[11495,"銀のめぐり","SYNC.ART'S feat. 3L",[0,0,[20,37,475],[28,42,653]]],[11496,"Destiny Runner","さわわ",[[1,6,223],0,[16,26,667],[51,52,985]]],[11497,"アマカミサマ","名取さな",[0,[2,6,326],[2,10,429],[6,17,701]]],[11498,"モンダイナイトリッパー!","名取さな",[[2,6,189],[2,3,334],[9,27,531],[24,56,839]]],[11499,"マーシャル・マキシマイザー","柊マグネタイト feat.音楽的同位体 可不(KAFU)",[[1,4,190],[2,4,368],[12,28,581],[24,32,867]]],[11500,"秋の未確認生物","子牛 feat.音街ウナ",[[2,7,204],[6,30,364],[6,21,609],[17,103,899]]],[11501,"Dive into the ZONe","ぞん子",[[4,8,153],[18,20,349],[20,55,493],[44,50,751]]],[11502,"エナドリおいしいソング","冥堂院・アレクサンドル・ヴィクトリア・リヒテンシュタイン・聖斗 feat.TINOP",[[3,7,175],[6,8,343],[10,39,509],[38,46,677]]],[11503,"Baddest","樋口楓",[[2,4,239],[8,10,357],[6,63,583],[41,66,1030]]],[11504,"ばかみたい【Taxi Driver Edition】","桐生一馬(黒田崇矢)",[0,0,[5,7,215],[2,35,278]]],[11505,"れっつ!みらくる☆はーどこあっ!","Laur feat.みしゃも",[[9,11,221],[17,21,421],[8,119,625],[81,110,1093]]],[11506,"Blank Paper (Prod. TEMPLIME)","日高零奈・東雲和音・茅野ふたば「電音部」",[0,0,[10,18,385],[26,36,801]]],[11507,"In my world (Prod. KOTONOHOUSE)","鳳凰火凛・瀬戸海月・大賀ルキア「電音部」",[0,0,[13,24,429],0]],[11508,"アイム・マイヒーロー","Ino(chronoize) feat. 柳瀬マサキ",[[2,5,119],0,[4,20,374],[13,15,775]]],[11509,"NightTheater","わかどり",[[5,8,138],[2,14,342],[19,45,541],[34,61,823]]],[11510,"キュートなカノジョ","syudou feat.音楽的同位体 可不(KAFU)",[[2,5,148],[4,11,279],[11,18,446],[29,48,680]]],[11511,"へべれけジャンキー","syudou",[[3,10,132],[4,22,268],[11,16,421],[18,40,735]]],[11512,"きゅうくらりん","いよわ",[[3,7,185],0,[40,50,630],[27,48,859]]],[11513,"回る空うさぎ","Orangestar",[0,[3,7,256],[8,10,298],0]],[11514,"Lost Desire","Powerless feat. Sennzai",[0,[4,26,384],[16,77,574],[73,102,926]]],[11516,"Aegleseeker","Silentroom vs Frums",[0,[8,20,390],[17,21,665],[25,80,1084]]],[11517,"最強STRONGER","REDALiCE vs USAO",[[25,27,278],[12,20,426],[24,30,789],[73,80,1069]]],[11518,"ボッカデラベリタ","柊キライ",[[4,5,167],0,[33,69,539],[17,29,796]]],[11519,"『んっあっあっ。』","SLAVE.V-V-R",[[6,10,159],[7,19,279],[12,28,484],[21,94,897]]],[11520,"独りんぼエンヴィー","koyori(電ポルP)",[0,[8,10,299],[7,8,379],[12,25,606]]],[11521,"ロータスイーター","青栗鼠",[[1,4,120],[7,23,318],[4,33,479],0]],[11523,"ViRTUS","Hiro",[0,[6,16,426],[34,36,713],[39,65,1063]]],[11524,"Alice's Suitcase","Endorfin.",[[2,4,174],[2,18,350],[5,18,477],[23,27,786]]],[11525,"ピュグマリオンの咒文","アリスシャッハと魔法の楽団",[[5,7,179],[4,8,308],[41,55,519],[38,76,844]]],[11526,"トノサマビーム","ぼっちぼろまる",[0,[16,18,341],[10,19,579],[36,66,869]]],[11527,"enchanted wanderer","linear ring",[0,[4,6,286],[7,15,446],[18,27,594]]],[11528,"Comet Panto Men!","MYUKKE.",[[1,6,210],[8,12,379],[26,59,628],[27,32,912]]],[11529,"ツムギボシ","大国奏音 feat.timao",[0,[11,19,376],[12,23,626],[44,62,992]]],[11530,"VeRForTe αRtE:VEiN","orangentle",[[2,5,227],[21,33,374],[19,85,654],[40,85,1064]]],[11532,"ヱデン","koyori(電ポルP)",[0,0,[2,18,461],[13,17,655]]],[11533,"にゃーにゃー冒険譚","黒魔",[0,[10,14,403],[45,69,641],[42,84,1085]]],[11549,"Trrricksters!!","s-don vs. 翡乃イスカ",[[1,12,250],[8,11,369],[32,69,775],[81,168,1153]]],[11550,"FLUFFY FLASH","Kobaryo",[[7,8,228],0,[15,20,659],[20,25,988]]],[11555,"ヒバリ","HIMEHINA",[0,[8,9,220],[9,17,398],[6,28,649]]],[11556,"Hello, Hologram","HIMEHINA",[[1,2,212],[5,7,335],[11,32,550],[46,100,897]]],[11557,"不機嫌なスリーカード","HIMEHINA",[0,[6,12,314],[10,35,431],[11,37,559]]],[11558,"神っぽいな","ピノキオピー",[0,[4,10,228],[7,13,324],[6,12,486],[15,25,563]]],[11559,"魔法少女とチョコレゐト","ピノキオピー",[[3,5,158],[18,34,292],[20,21,370],[12,27,620]]],[11560,"阿修羅ちゃん","Ado",[[2,6,142],0,[10,36,486],[57,69,711]]],[11561,"おとせサンダー","ぼっちぼろまる",[0,[2,7,340],[12,44,568],[11,42,727],[24,29,976]]],[11562,"ロウワー","ぬゆり",[[2,4,113],[4,10,249],[6,14,384],[9,22,573],[18,26,759]]],[11563,"キャットラビング","香椎モイミ",[0,[10,14,257],[9,12,368],[12,28,625]]],[11564,"リスペク風神","ビートまりおとまろん",[[2,8,142],[6,11,283],[9,36,550],[45,53,855]]],[11565,"Let you DIVE!","HARDCORE TANO*C & エリザベス(CV:大西沙織)",[0,0,[7,32,522],[14,39,596]]],[11566,"Knight Rider","USAO",[0,0,[14,29,573],[6,35,876]]],[11568,"INTERNET OVERDOSE","Aiobahn feat. KOTOKO",[[1,4,171],[6,13,356],[13,35,538],[24,105,822]]],[11569,"魂のルフラン","高橋洋子 [covered by 光吉猛修]",[[2,3,107],[6,10,207],[15,28,299],[18,27,468]]],[11570,"Shooting Shower~DANCE TIME(シンディ)~","Sammy Sound Team",[[12,14,146],[6,8,225],[21,25,312],[20,40,552]]],[11571,"Lights of Muse","Ayatsugu_Otowa",[[2,6,126],[8,10,283],[4,19,460],[7,31,652]]],[11572,"tape/stop/night","Sugar & Co.",[[5,6,133],0,[8,16,416],[6,14,563]]],[11573,"Final Step!","Lime",[[3,5,189],0,[8,19,576],[44,67,859]]],[11574,"The 90's Decision","MYUKKE.",[0,0,[28,52,526],[28,65,694]]],[11575,"僕の和風本当上手","ボス",[0,[4,6,404],[23,25,650],[33,59,1173]]],[11576,"Cthugha","USAO",[0,[15,20,473],[41,72,759],[68,81,1168]]],[11594,"BULK UP (GAME EXCLUSIVE EDIT)","USAO & Yuta Imai",[[4,8,202],[8,9,397],[39,43,644],[60,177,944]]]]

function main() {
  if (location.pathname === '/maimai-mobile/record/playlogDetail/') {
    if (document.querySelector('.playlog_music_kind_icon').src.split('/').reverse()[0] !== "music_dx.png") return;
    const block = document.querySelector('.playlog_notes_detail tr:last-of-type > th').appendChild(_('div', { className: 't_c', style: {fontSize: '9px', lineHeight: '0.8rem'}}));
    const title = document.querySelector('.music_img').parentNode.parentNode.firstElementChild.textContent.trim();
    const artist = null;
    const dxs = parseInt(document.querySelector('.playlog_scoreline').nextElementSibling.textContent.split('/')[1].trim().replace(/,/g, ''));
    const level = ['basic', 'advanced', 'expert', 'master', 'remaster'].indexOf(document.querySelector('.music_img').parentNode.parentNode.className.split('_')[1]);
    appendRealBreakSearch(block, title, artist, dxs, level)
  }
  else if (location.pathname === '/maimai-mobile/record/musicDetail/') {
    if (document.querySelector('.music_detail_table').previousElementSibling.previousElementSibling.firstElementChild.firstElementChild.src.split('/').reverse()[0] !== "music_dx.png") return;
    const title = document.querySelector('.music_detail_table').previousElementSibling.previousElementSibling.children[1].textContent.trim();
    const artist = document.querySelector('.music_detail_table').previousElementSibling.previousElementSibling.children[3].textContent.trim();
    const dxs = null;
    const lvlRows = document.querySelector('.music_detail_table').children[0].children;
    for (let i=0; i<lvlRows.length; i++) {
      const block = lvlRows[i].appendChild(_('div', { className: 'p_r' }, [_('div', { className: 'p_a f_10 t_c', style: { right: '309px', top: '35px', width: '74px' } })])).children[0]
      const level = i;
      appendRealBreakSearch(block, title, artist, dxs, level)
    }
  }
  else if (location.pathname === '/maimai-mobile/record/') {
    [...document.querySelectorAll('.playlog_result_innerblock')].forEach(i => {
      if (i.parentNode.previousElementSibling.src.split('/').reverse()[0] !== "music_dx.png") return;
      const block = i.parentNode.querySelector('form').insertBefore(_('span', { className: 'f_16 v_t p_r_10', style: { display: 'inline-block', lineHeight: '38px', color: 'white', textShadow: 'black 1px 1px 0, black -1px -1px 0, black -1px 1px 0, black 1px -1px 0, black 0px 1px 0, black 0-1px 0, black -1px 0 0, black 1px 0 0' }}), i.parentNode.querySelector('form').childNodes[0]);
      const title = i.parentNode.parentNode.previousElementSibling.textContent.trim();
      const artist = null;
      const dxs = parseInt(i.children[0].textContent.split('/')[1].trim().replace(/,/g, ''));
      const level = ['basic', 'advanced', 'expert', 'master', 'remaster'].indexOf(i.parentNode.parentNode.parentNode.className.split('_')[1]);
      appendRealBreakSearch(block, title, artist, dxs, level, true)
    })
  } else {
    [...document.querySelectorAll('.music_name_block')].forEach(i => {
      if (i.parentNode.querySelector('.music_kind_icon').src.split('/').reverse()[0] !== "music_dx.png") return;
      const block = i.appendChild(_('span', { className: 'f_r'}));
      const title = i.textContent.trim();
      const artist = null;
      const dxs = 0;
      const level = ['basic', 'advanced', 'expert', 'master', 'remaster'].indexOf(i.parentNode.parentNode.className.split('_')[1]);
      appendRealBreakSearch(block, title, artist, dxs, level, true)
    })
  }
}

function appendRealBreakSearch(block, title, artist, dxs, level, addPercent = false) {
  const titleMatch = data.filter(i => i[1] === title)
  if (titleMatch.length == 0) return block.remove();
  if (titleMatch.length == 1) return appendRealBreak(block, titleMatch[0], level, addPercent);
  if (artist != null) {
    const artistMatch = titleMatch.filter(i => i[2] === artist)
    if (artistMatch.length == 1) return appendRealBreak(block, artistMatch[0], level, addPercent);
    return block.remove();
  }
  const dxsMatch = titleMatch.filter(i => i[3][level] && i[3][level][2] === dxs)
  if (dxsMatch.length == 1) return appendRealBreak(block, dxsMatch[0], level, addPercent);
  return block.remove();
}
function appendRealBreak(block, info, level, addPercent) {
  if (!info[3][level]) return block.remove();
  block.style.cursor = 'default';
  block.textContent = (addPercent?`${(info[3][level][0]/info[3][level][1]*100).toFixed(2)}% `:'')+`${info[3][level][0]}/${info[3][level][1]}`
}

main();