diff --git a/multi.html b/multi.html index 07241d4c..36681fea 100644 --- a/multi.html +++ b/multi.html @@ -855,6 +855,7 @@ const teamsCount = 2;
+
@@ -882,6 +883,14 @@ const teamsCount = 2;
  • +
    @@ -1508,21 +1517,6 @@ const teamsCount = 2;
    -
    - -
    - - -
    -
    -
    -
    -
    -
    -
    diff --git a/script.js b/script.js index b70ba22d..cced0ad6 100644 --- a/script.js +++ b/script.js @@ -1369,121 +1369,6 @@ Formation.prototype.getPaddbQrObj = function(keepDataSource = true) }; return qrObj; } -function sanbonTranslateRegion(code) { - switch (code) { - case "ja": return "jp"; - case "ko": return "kr"; - case "en": return "na"; - } -}; -Formation.prototype.getSanbonV2Script = function() -{ - const region = sanbonTranslateRegion(currentDataSource.code); - //sanbon目前只支持单人队伍 - const [members,assists,badge] = this.teams[0]; -const scriptLines = [`(async ()=>{ - "use strict"; - let buildId; - if (typeof __NEXT_DATA__ !== 'undefined') { - buildId = __NEXT_DATA__?.buildId; - } else { - const Zstr = window.__next_f.find(o=>o?.[1]?.startsWith("0:"))[1]; - const regRes = /"buildId":"([\\w\\-]+)"/ig.exec(Zstr); - buildId = regRes[1]; - } - if (!buildId) throw Error("buildId not found."); - - const region = "${region}"; - - async function fetchFlattened(id) { - if (id <= 0) return {}; - const url = new URL(location.origin); - url.pathname = \`/_next/data/\${buildId}/\${region}/monster/\${id}.json\`; - url.searchParams.set("lang_region", region); - url.searchParams.set("num", id); - const response = await fetch(url); - const json = await response.json(); - return json.pageProps.mon; - } - - const tbs = JSON.parse(sessionStorage.getItem("team-build-store")); - const team = tbs.state; - team.badge = ${Formation.sanbonBadgeMap.find(_badge=>_badge.pdf === badge)?.sanbon ?? badge};`]; - - const _members = {}; - for (let i = 0; i < members.length; i++) { - const m = members[i], a = assists[i]; - const _m = { - num: m.id, - level: m.level, - superAwoken: m.sawoken ?? 0, - latentAwokens: m.latent.concat().sort((a, b) => latentUseHole(b) - latentUseHole(a)), - awokenCount: m.awoken, - hpPlus: m.plus[0], - atkPlus: m.plus[1], - rcvPlus: m.plus[2], - assistNum: a.id, - assistLevel: a.level, - assistPlus: a?.plus?.every(p=>p>=99) ?? false, - // flattened: cardFlattened(m.card), - // assistFlattened: cardFlattened(a.card), - flattened: `(await fetchFlattened(${m.id}))`, - assistFlattened: `(await fetchFlattened(${a.id}))`, - } - _members[i] = _m; - } -scriptLines.push(`\tteam.members = ${JSON.stringify(_members,null,'\t').replace(/"(\(await fetchFlattened\(\d+\)\))"/igm, "$1")}`); -scriptLines.push(`\tsessionStorage.setItem("team-build-store", JSON.stringify(tbs)); -\tlocation.reload(); -})();`); - return scriptLines.join('\n'); -}; - -//sanbon的徽章对应数字 -Formation.sanbonBadgeMap = [ - {pdf:22,sanbon:15}, //除武器,全抗性(耐) - {pdf:23,sanbon:16}, //除武器,10SB(S+×5) - {pdf:24,sanbon:20}, //合作,英雄学院 - {pdf:25,sanbon:23}, //官桶,画师 - {pdf:26,sanbon:22}, //合作,高达 - {pdf:27,sanbon:24}, //转生成为史莱姆 - {pdf:28,sanbon:25}, //电击文库Index - {pdf:29,sanbon:26}, //奥特曼 - {pdf:PAD_PASS_BADGE,sanbon:1}, //月卡 -]; -Formation.prototype.getSanbonQrObj = function() -{ - //sanbon目前只支持单人队伍 - const [members,assists,badge] = this.teams[0]; - const obj = { - region: sanbonTranslateRegion(currentDataSource.code), - title: this.title ?? "", - content: this.detail ?? "", - //mons: assists.map(m=>m.id).concat(members.map(m=>m.id)), - data: { - badge: Formation.sanbonBadgeMap.find(_badge=>_badge.pdf === badge)?.sanbon ?? badge, - members: {}, //等待下面处理 - }, - }; - for (let i = 0; i < members.length; i++) { - const m = members[i], a = assists[i]; - const _m = { - num: m.id, - level: m.level, - superAwoken: m.sawoken ?? 0, - latentAwokens: m.latent.concat().sort((a, b) => latentUseHole(b) - latentUseHole(a)), - awokenCount: m.awoken, - hpPlus: m.plus[0], - atkPlus: m.plus[1], - rcvPlus: m.plus[2], - assistNum: a.id, - assistLevel: a.level, - assistPlus: a?.plus?.every(p=>p>=99) ?? false, - } - obj.data.members[i] = _m; - } - return obj; -}; //daddb的徽章对应数字 Formation.daddbBadgeMap = [ @@ -2463,30 +2348,6 @@ async function inputFromQrString(string) qrObj.paddbId = obj._id; return qrObjToUrl(qrObj); } - function sanbonObjToURL(obj, region) { - const newFotmation = sanbonFotmationToPdfFotmation(obj); - const qrObj = newFotmation.getPdfQrObj(false); - if (region == undefined) { - console.debug("从sanbon json数据中获取数据区域"); - region = obj.pageProps.members["0"].flattened.region; - } - switch (region) { - case "kr": { - qrObj.s = "ko"; - break; - } - case "na": { - qrObj.s = "en"; - break; - } - case "jp": - default: { - qrObj.s = "ja"; - break; - } - } - return qrObjToUrl(qrObj); - } //JSON 类 if (string.startsWith("{") && string.endsWith("}")) { //生成的二维码 @@ -2501,10 +2362,6 @@ async function inputFromQrString(string) re.type = "PADDB"; re.url = paddbObjToURL(obj) } - else if ("__N_SSG" in obj) { //SANBON的对象格式 - re.type = "SANBON"; - re.url = sanbonObjToURL(obj) - } else if (Array.isArray(obj?.staffs)) { //DADDB的对象格式 re.type = "DADDB"; const newFotmation = daddbFotmationToPdfFotmation(obj); @@ -2540,55 +2397,6 @@ async function inputFromQrString(string) //re.message = "错误的 网址 格式 | The illegal URL format"; } } - //sanbon.me 的网址格式,之后要调用脚本功能获取跨域JSON - else if(url.host == "sanbon.me" && url.pathname.includes(paddbPathPrefix)) { - const teamId = url.pathname.substring(url.pathname.indexOf(paddbPathPrefix) + paddbPathPrefix.length); - re.type = "SANBON"; - const txtStringInput = document.body.querySelector("#qr-code-frame .action-button-box .string-input"); //输入的字符串 - const btnExternalSupport = document.body.querySelector("#external-support"); - if (btnExternalSupport?.asyncGM_xmlhttpRequest) { - //获取 sanbon.me 的 buildId - const mainpageResponse = await btnExternalSupport.asyncGM_xmlhttpRequest({ - method: "GET", - url: "https://sanbon.me/", - }); - const domParser = new DOMParser(); - const sanbonMainpage = domParser.parseFromString(mainpageResponse.response, "text/html"); - const __NEXT_DATA__ = sanbonMainpage.getElementById("__NEXT_DATA__"); - const __NEXT_DATA__JSON = JSON.parse(__NEXT_DATA__.innerHTML); - const buildId = __NEXT_DATA__JSON.buildId; - console.debug("sanbon.me 网站当前的框架 buildId 是 %s",buildId); - - //获取队伍数据的访问链接 - const langString = url.pathname.substring(1, url.pathname.indexOf(paddbPathPrefix)); - const langReg = /(?:\w{2}\-)?(\w{2})$/i.exec(langString); //实际上只会有(en|ja|ko)\-(jp|na|kr) - const lang_region = langReg[1]; - const dataUrl = new URL("https://sanbon.me/"); - dataUrl.pathname = `/_next/data/${buildId}/${lang_region}/team/${teamId}.json`; - dataUrl.searchParams.set("lang_region", lang_region); - dataUrl.searchParams.set("code", teamId); - - console.debug("当前的 sanbon.me 队伍数据链接是 %o",dataUrl); - - const options = { - method: "GET", - url: dataUrl, - }; - const response = await btnExternalSupport.asyncGM_xmlhttpRequest(options); - try{ - let obj = JSON.parse(txtStringInput.value = response.response); - re.url = sanbonObjToURL(obj, lang_region); - } catch(error) { - console.error(error); - re.error = ERROR_illegal_JSON_format; - } - } else { - re.error = ERROR_Unsupported_format; - re.message = localTranslating.link_read_message.need_user_script; - re.url = ExternalLinkScriptURL; - re.urlName = localTranslating.link_read_message.user_script_link; - } - } //PADDB 的网址格式,之后要调用脚本功能获取跨域JSON else if(url.host == "paddb.net" && url.pathname.startsWith(paddbPathPrefix)) { const teamId = url.pathname.substring(url.pathname.indexOf(paddbPathPrefix) + paddbPathPrefix.length); @@ -2779,35 +2587,6 @@ function paddbFotmationToPdfFotmation(obj) } return f; } -//解析sanbon.me的数据 -function sanbonFotmationToPdfFotmation(obj) -{ - const team = obj.pageProps; - const f = new Formation(1, 6); - f.title = team.title; - f.detail = team.content; - const t = f.teams[0]; - - //队伍徽章 - t[2] = Formation.sanbonBadgeMap.find(badge=>badge.sanbon === team.badge)?.pdf ?? team.badge; - const members = t[0], assists = t[1]; - for (let i = 0; i< members.length; i++) { - const m = members[i], a = assists[i], dm = team.members[i]; - if (dm) { - m.id = dm.num; - m.level = dm.level; - m.plus = [dm.hpPlus, dm.atkPlus, dm.rcvPlus]; - m.awoken = dm.awokenCount; - m.sawoken = dm.superAwoken; - m.latent = dm.latentAwokens; - a.id = dm.assistNum; - a.awoken = Cards[a.id].awakenings.length; - a.plus = dm.assistPlus ? [99,99,99]:[0,0,0]; - a.level = dm.assistLevel; - } - } - return f; -} //解析DADDB的数据 function daddbFotmationToPdfFotmation(obj) { @@ -2996,10 +2775,6 @@ function initialize() { let qrTypeRadio = qrSaveBox.qrDataType.find(radio=>radio.checked); if (qrTypeRadio) qrTypeRadio.onclick(); //打开二维码窗口就先产生二维码 - //生成sanbon v1链接 - qrCodeFrame.querySelector("#sanbon-v2-link").href = `https://sanbon.me/${sanbonTranslateRegion(currentDataSource.code)}/team-builder`; - qrCodeFrame.querySelector("#sanbon-v2-script").value = formation.getSanbonV2Script(); - }; qrCodeFrame.hide = function(){qrcodeReader.reset();}; @@ -3350,52 +3125,6 @@ function initialize() { } this.disabled = false; } - - //sanbon.me数据上传 - //const sanbonTeamEdit = qrContent.querySelector(".sanbon-team-edit"); - const sanbonTeamId = document.querySelector("#sanbon-team-id"); - const sanbonSaveOrUpload = document.querySelector("#sanbon-save-or-upload-team"); - sanbonSaveOrUpload.onclick = async function(){ - this.disabled = true; - if (!btnExternalSupport?.asyncGM_xmlhttpRequest) { - alert(localTranslating.link_read_message.need_user_script); - return; - } - let obj = formation.getSanbonQrObj(); - let postBody = JSON.stringify(obj); - const options = { - method: "POST", - url: `https://sanbon.me/api/upload-team-v2`, - data: postBody, - headers: { - "Origin": "https://sanbon.me", - "Referer": `https://sanbon.me/${sanbonTranslateRegion(currentDataSource.code)}/team-builder/upload`, - "Content-Type": "application/json", - //如果只有ascii字符可以用postBody.length - "Content-Length": new Blob([postBody], {type: "application/json"}).size, - } - }; - const response = await btnExternalSupport.asyncGM_xmlhttpRequest(options); - if (response.status === 401) { - alert(localTranslating.link_read_message.paddb_unauthorized); - } else if (response.status === 200) { - try { - const result = JSON.parse(response.response); - console.debug("sanbon 数据上传返回结果:%o",result); - if (result.success) { - sanbonTeamId.value = `https://sanbon.me/${sanbonTranslateRegion(currentDataSource.code)}/team/${result.code}`; - alert(localTranslating.link_read_message.paddb_success); - } else { - alert(result.message); - } - } catch(e) { - alert(localTranslating.link_read_message.error[3]); - } - } else { - alert(localTranslating.link_read_message.error[0]); - } - this.disabled = false; - } const playerDataFrame = document.body.querySelector("#player-data-frame"); const btnPlayerData = controlBox.querySelector(`.btn-player-data`); diff --git a/service-worker.js b/service-worker.js index b697f550..eb92196e 100644 --- a/service-worker.js +++ b/service-worker.js @@ -6067,7 +6067,7 @@ const cachesMap = new Map([ ], [ "sound/voice/ja/padv2191.wav", - "143e052f3c15efaadaf7eaae277c68e7" + "d07c2fc9a621d4345c053f3d2187a937" ], [ "sound/voice/ja/padv2192.wav", @@ -29491,7 +29491,7 @@ const cachesMap = new Map([ ], [ "multi.html", - "06dfac154d6c8a3fdece2e5695481b03" + "98b39e54a83572b1f4152ecf70053d88" ], [ "script-custom_elements.js", @@ -29511,11 +29511,11 @@ const cachesMap = new Map([ ], [ "script.js", - "6e067dad55c4c110450cd0f1fd32cfef" + "b450f4ce283c8802f6e418a72d0fdc39" ], [ "solo.html", - "3b38841a6ed0189065986db5d40f5e03" + "e5a78c6b958828400095edd5a419f692" ], [ "style-monsterimages.css", @@ -29523,7 +29523,7 @@ const cachesMap = new Map([ ], [ "style.css", - "dfdca9305210f9a8d9dde03855a51650" + "34ab62d874338ceb3ca3d4f6b38b4b26" ], [ "temp.js", @@ -29531,7 +29531,7 @@ const cachesMap = new Map([ ], [ "triple.html", - "5c09b746fcb677cb0a468333d1ea4891" + "9fb90a3dfa2f1a30cb961425ecf489e5" ], [ "languages/en.css", @@ -29867,7 +29867,7 @@ const cachesMap = new Map([ ], [ "doc/images/bluestacks-vhd-mount-vhd-failed.webp", - "e41f2de6990b34ae7995a5acb0e3ea0c" + "7941862be127cb177b86ea4cc2877134" ], [ "doc/images/bluestacks-vhd-open-disk-management.webp", diff --git a/solo.html b/solo.html index 1eaeb5aa..6146d763 100644 --- a/solo.html +++ b/solo.html @@ -1255,21 +1255,6 @@ const teamsCount = 1;
    -
    - -
    - - -
    -
    -
    -
    -
    -
    -
    diff --git a/style.css b/style.css index 77caf7fd..3c41db0e 100644 --- a/style.css +++ b/style.css @@ -3653,47 +3653,28 @@ body:not(.external-link-support) #external-support::before { padding-bottom: 10px; } -#qr-code-frame #sanbon-v2-script -{ - width: calc(100% - 20px); - height: 4em; - resize: vertical; -} - #qr-code-frame :where( .read-qr-box, .save-qr-box, - .paddb-team-edit, - .sanbon-transfer, - .sanbon-team-edit, + .paddb-team-edit )::before { display: block; text-align: left; } body:not(.solo.external-link-support) :where( - .paddb-team-edit, - .sanbon-team-edit, + .paddb-team-edit ) { /*没有装插件的不显示PADDB上传功能*/ display: none; } -body.external-link-support .sanbon-transfer { - /*装了插件的不显示sanbon测试功能*/ - display: none; -} body.external-link-support #external-support{ /*装了插件的不显示请求装插件的消息*/ display: none; } -#paddb-team-id, -#sanbon-team-id { +#paddb-team-id{ width: 350px; } -.sanbon-transfer::before -{ - content: "Sanbon.me:(Defective test functionality)"; -} .qr-data-type-ul { display: flex; diff --git a/triple.html b/triple.html index 869ba225..09f470b0 100644 --- a/triple.html +++ b/triple.html @@ -2199,21 +2199,6 @@ const teamsCount = 3;
    -
    - -
    - - -
    -
    -
    -
    -
    -
    -