加入sanbon的数据跳转功能
This commit is contained in:
parent
eb2cc9751e
commit
82ae4060f8
|
@ -653,14 +653,14 @@ body:not(.external-link-support) #external-support::after
|
||||||
|
|
||||||
label[for="qr-data-type-pdf"]::before
|
label[for="qr-data-type-pdf"]::before
|
||||||
{
|
{
|
||||||
content: "P&D Formation Maker";
|
content: "P&D Dash Formation";
|
||||||
}
|
}
|
||||||
label[for="qr-data-type-pdc"]::before
|
label[for="qr-data-type-pdc"]::before
|
||||||
{
|
{
|
||||||
content: "P&D Damage Caculater (PDC)";
|
content: "P&D Damage Caculater (PDC)";
|
||||||
}
|
}
|
||||||
label[for="qr-data-type-pdchu"]::before {
|
label[for="qr-data-type-sanbon-v1"]::before {
|
||||||
content: "Valeria (pdchu)";
|
content: "Sanbon v1 URL";
|
||||||
}
|
}
|
||||||
label[for="qr-data-type-paddb"]::before
|
label[for="qr-data-type-paddb"]::before
|
||||||
{
|
{
|
||||||
|
|
|
@ -611,14 +611,14 @@ body:not(.external-link-support) #external-support::after
|
||||||
|
|
||||||
label[for="qr-data-type-pdf"]::before
|
label[for="qr-data-type-pdf"]::before
|
||||||
{
|
{
|
||||||
content: "パズドラダッシュフォーメーション";
|
content: "P&D Dash Formation";
|
||||||
}
|
}
|
||||||
label[for="qr-data-type-pdc"]::before
|
label[for="qr-data-type-pdc"]::before
|
||||||
{
|
{
|
||||||
content: "パズドラダメージ計算 (PDC)";
|
content: "パズドラダメージ計算 (PDC)";
|
||||||
}
|
}
|
||||||
label[for="qr-data-type-pdchu"]::before {
|
label[for="qr-data-type-sanbon-v1"]::before {
|
||||||
content: "Valeria (pdchu)";
|
content: "Sanbon v1 URL";
|
||||||
}
|
}
|
||||||
label[for="qr-data-type-paddb"]::before
|
label[for="qr-data-type-paddb"]::before
|
||||||
{
|
{
|
||||||
|
|
|
@ -591,14 +591,14 @@ body:not(.external-link-support) #external-support::after
|
||||||
|
|
||||||
label[for="qr-data-type-pdf"]::before
|
label[for="qr-data-type-pdf"]::before
|
||||||
{
|
{
|
||||||
content: "퍼즐앤드래곤 대시 형성";
|
content: "P&D Dash Formation";
|
||||||
}
|
}
|
||||||
label[for="qr-data-type-pdc"]::before
|
label[for="qr-data-type-pdc"]::before
|
||||||
{
|
{
|
||||||
content: "퍼즐앤드래곤 데미지 카큐라터 (PDC)";
|
content: "퍼즐앤드래곤 데미지 카큐라터 (PDC)";
|
||||||
}
|
}
|
||||||
label[for="qr-data-type-pdchu"]::before {
|
label[for="qr-data-type-sanbon-v1"]::before {
|
||||||
content: "Valeria (pdchu)";
|
content: "Sanbon v1 URL";
|
||||||
}
|
}
|
||||||
label[for="qr-data-type-paddb"]::before
|
label[for="qr-data-type-paddb"]::before
|
||||||
{
|
{
|
||||||
|
|
|
@ -609,8 +609,8 @@ label[for="qr-data-type-pdc"]::before
|
||||||
{
|
{
|
||||||
content: "龍族拼圖傷害計算器 (PDC)";
|
content: "龍族拼圖傷害計算器 (PDC)";
|
||||||
}
|
}
|
||||||
label[for="qr-data-type-pdchu"]::before {
|
label[for="qr-data-type-sanbon-v1"]::before {
|
||||||
content: "Valeria (pdchu)";
|
content: "Sanbon v1 網址";
|
||||||
}
|
}
|
||||||
label[for="qr-data-type-paddb"]::before
|
label[for="qr-data-type-paddb"]::before
|
||||||
{
|
{
|
||||||
|
|
|
@ -537,6 +537,10 @@ label[for="real-time-change-card"]::after
|
||||||
{
|
{
|
||||||
content: "生成二维码:";
|
content: "生成二维码:";
|
||||||
}
|
}
|
||||||
|
.sanbon-me-transfer::before
|
||||||
|
{
|
||||||
|
content: "Sanbon.me:";
|
||||||
|
}
|
||||||
|
|
||||||
.read-qr-box .result-code::before {
|
.read-qr-box .result-code::before {
|
||||||
content: "代码 ";
|
content: "代码 ";
|
||||||
|
@ -608,8 +612,11 @@ label[for="qr-data-type-pdc"]::before
|
||||||
{
|
{
|
||||||
content: "智龙迷城伤害计算器 (PDC)";
|
content: "智龙迷城伤害计算器 (PDC)";
|
||||||
}
|
}
|
||||||
label[for="qr-data-type-pdchu"]::before {
|
label[for="qr-data-type-sanbon-v1"]::before {
|
||||||
content: "Valeria (pdchu)";
|
content: "Sanbon v1 网址";
|
||||||
|
}
|
||||||
|
label[for="qr-data-type-sanbon-v2"]::before {
|
||||||
|
content: "Sanbon v2 测试脚本";
|
||||||
}
|
}
|
||||||
label[for="qr-data-type-paddb"]::before
|
label[for="qr-data-type-paddb"]::before
|
||||||
{
|
{
|
||||||
|
|
145
script.js
145
script.js
|
@ -626,6 +626,128 @@ Formation.prototype.getPaddbQrObj = function(keepDataSource = true)
|
||||||
};
|
};
|
||||||
return qrObj;
|
return qrObj;
|
||||||
}
|
}
|
||||||
|
Formation.prototype.getSanbonV1Url = function()
|
||||||
|
{
|
||||||
|
const region = ((code)=>{
|
||||||
|
switch (code) {
|
||||||
|
case "ja": return "jp";
|
||||||
|
case "ko": return "kr";
|
||||||
|
case "en": return "na";
|
||||||
|
}
|
||||||
|
})(currentDataSource.code);
|
||||||
|
const sanbonUrl = new URL(`https://sanbon.me/${region}/team-builder`);
|
||||||
|
const search = sanbonUrl.searchParams;
|
||||||
|
//sanbon目前只支持单人队伍
|
||||||
|
const [members,assists,badge] = this.teams[0];
|
||||||
|
|
||||||
|
for (let i = 0; i < members.length; i++) {
|
||||||
|
const m = members[i], a = assists[i];
|
||||||
|
m.id > 0 && search.set(`${i}`, m.id);
|
||||||
|
m.sawoken > 0 && search.set(`${i}s`, m.sawoken);
|
||||||
|
m?.latent?.length > 0 && search.set(`${i}l`, m.latent.join());
|
||||||
|
a.id > 0 && search.set(`${i}a`, a.id);
|
||||||
|
}
|
||||||
|
badge > 0 && search.set(`badge`, badge & 0x7f);
|
||||||
|
|
||||||
|
return sanbonUrl;
|
||||||
|
}
|
||||||
|
Formation.prototype.getSanbonV2Script = function()
|
||||||
|
{
|
||||||
|
function translateRegion(code) {
|
||||||
|
switch (code) {
|
||||||
|
case "ja": return "jp";
|
||||||
|
case "ko": return "kr";
|
||||||
|
case "en": return "na";
|
||||||
|
}
|
||||||
|
};
|
||||||
|
function cardFlattened(card) {
|
||||||
|
if (typeof(card) == 'undefined') return 0;
|
||||||
|
const available_killers = {};
|
||||||
|
for (let i = 20; i <= 27; i++) {
|
||||||
|
available_killers[i] = false;
|
||||||
|
}
|
||||||
|
card.types.filter(i => i >= 0)
|
||||||
|
.flatMap(type => typekiller_for_type.find(t=>t.type==type).allowableLatent)
|
||||||
|
.forEach(t => available_killers[t] = true);
|
||||||
|
const o = {
|
||||||
|
region: translateRegion(currentDataSource.code),
|
||||||
|
num: card.id,
|
||||||
|
name: card.name,
|
||||||
|
rarity: card.rarity,
|
||||||
|
cost: card.cost,
|
||||||
|
attributes: card.attrs,
|
||||||
|
types: card.types,
|
||||||
|
awokens: card.awakenings,
|
||||||
|
super_awokens: card.superAwakenings,
|
||||||
|
available_killers: available_killers,
|
||||||
|
level_final: card.limitBreakIncr ? 120 : card.maxLevel,
|
||||||
|
stat_final: {
|
||||||
|
"hp": card.hp.max,
|
||||||
|
"atk": card.atk.max,
|
||||||
|
"rcv": card.rcv.max,
|
||||||
|
},
|
||||||
|
assistable: card.canAssist,
|
||||||
|
latent_extendable: card.is8Latent,
|
||||||
|
showing_active_skills: [],
|
||||||
|
showing_leader_skills: [],
|
||||||
|
}
|
||||||
|
return o;
|
||||||
|
}
|
||||||
|
//sanbon目前只支持单人队伍
|
||||||
|
const [members,assists,badge] = this.teams[0];
|
||||||
|
const scriptLines = [`(()=>{
|
||||||
|
"use strict";
|
||||||
|
const tbs = JSON.parse(sessionStorage.getItem("team-build-store"));
|
||||||
|
const team = tbs.state;
|
||||||
|
team.badge = ${badge & 0x7F};`];
|
||||||
|
|
||||||
|
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,
|
||||||
|
latentAwokens: m.latent.concat(),
|
||||||
|
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),
|
||||||
|
}
|
||||||
|
_members[i] = _m;
|
||||||
|
/*
|
||||||
|
scriptLines.push(`const m${i} = team.members[${i}];
|
||||||
|
m${i}.num = ${m.id};
|
||||||
|
m${i}.level = ${m.level};
|
||||||
|
m${i}.superAwoken = ${m.sawoken};
|
||||||
|
m${i}.latentAwokens = ${JSON.stringify(m.latent)};
|
||||||
|
m${i}.awokenCount = ${m.awoken};
|
||||||
|
m${i}.hpPlus = ${m.plus[0]};
|
||||||
|
m${i}.atkPlus = ${m.plus[1]};
|
||||||
|
m${i}.rcvPlus = ${m.plus[2]};
|
||||||
|
m${i}.assistNum = ${a.id};
|
||||||
|
m${i}.assistLevel = ${a.level};
|
||||||
|
m${i}.assistPlus = ${a.plus.every(p=>p>=99) ? 'true' : 'false'};
|
||||||
|
if (m${i}.flattened == 0) m${i}.flattened = {};
|
||||||
|
m${i}.flattened.awokens = ${JSON.stringify(m.card.awakenings)};
|
||||||
|
m${i}.flattened.super_awokens = ${JSON.stringify(m.card.superAwakenings)};
|
||||||
|
m${i}.flattened.available_killers = ${JSON.stringify(m.card.superAwakenings)};
|
||||||
|
if (m${i}.assistFlattened == 0) m${i}.assistFlattened = {};
|
||||||
|
m${i}.assistFlattened.awokens = ${JSON.stringify(a.id > 0 ? a.card.awakenings : [])};
|
||||||
|
m${i}.assistFlattened.super_awokens = ${JSON.stringify(a.id > 0 ? a.card.superAwakenings : [])};
|
||||||
|
`);*/
|
||||||
|
}
|
||||||
|
scriptLines.push(`team.members = ${JSON.stringify(_members)}`);
|
||||||
|
scriptLines.push(`sessionStorage.setItem("team-build-store", JSON.stringify(tbs));
|
||||||
|
location.reload();
|
||||||
|
})();`);
|
||||||
|
return scriptLines.join('\n');
|
||||||
|
}
|
||||||
Formation.prototype.getQrStr = function(type)
|
Formation.prototype.getQrStr = function(type)
|
||||||
{
|
{
|
||||||
switch (type) {
|
switch (type) {
|
||||||
|
@ -635,6 +757,12 @@ Formation.prototype.getQrStr = function(type)
|
||||||
case 'paddb': {
|
case 'paddb': {
|
||||||
return JSON.stringify(this.getPaddbQrObj());
|
return JSON.stringify(this.getPaddbQrObj());
|
||||||
}
|
}
|
||||||
|
case 'sanbon-v1': {
|
||||||
|
return this.getSanbonV1Url();
|
||||||
|
}
|
||||||
|
case 'sanbon-v2': {
|
||||||
|
return this.getSanbonV2Script();
|
||||||
|
}
|
||||||
case 'pdc':
|
case 'pdc':
|
||||||
default: {
|
default: {
|
||||||
return this.getPdcQrStr();
|
return this.getPdcQrStr();
|
||||||
|
@ -1977,6 +2105,11 @@ function initialize() {
|
||||||
|
|
||||||
let qrTypeRadio = qrSaveBox.qrDataType.find(radio=>radio.checked);
|
let qrTypeRadio = qrSaveBox.qrDataType.find(radio=>radio.checked);
|
||||||
if (qrTypeRadio) qrTypeRadio.onclick(); //打开二维码窗口就先产生二维码
|
if (qrTypeRadio) qrTypeRadio.onclick(); //打开二维码窗口就先产生二维码
|
||||||
|
|
||||||
|
//生成sanbon v1链接
|
||||||
|
qrCodeFrame.querySelector("#sanbon-v1-link").href = formation.getSanbonV1Url();
|
||||||
|
qrCodeFrame.querySelector("#sanbon-v2-script").value = formation.getSanbonV2Script();
|
||||||
|
|
||||||
};
|
};
|
||||||
qrCodeFrame.hide = function(){qrcodeReader.reset();};
|
qrCodeFrame.hide = function(){qrcodeReader.reset();};
|
||||||
|
|
||||||
|
@ -2038,11 +2171,13 @@ function initialize() {
|
||||||
qrCodeFrame.refreshQrCode(this.value);
|
qrCodeFrame.refreshQrCode(this.value);
|
||||||
}
|
}
|
||||||
qrSaveBox.qrDataType = Array.from(qrSaveBox.querySelectorAll(".qr-data-type-radio"));
|
qrSaveBox.qrDataType = Array.from(qrSaveBox.querySelectorAll(".qr-data-type-radio"));
|
||||||
qrSaveBox.qrDataType.forEach(radio=>radio.onclick = function(){
|
function changeOutputType(){
|
||||||
let qrstr = formation.getQrStr(this.value);
|
const type = this.value;
|
||||||
|
const qrstr = formation.getQrStr(type);
|
||||||
qrSaveBox.qrStr.value = qrstr;
|
qrSaveBox.qrStr.value = qrstr;
|
||||||
qrSaveBox.qrStr.onchange();
|
qrSaveBox.qrStr.onchange();
|
||||||
});
|
}
|
||||||
|
qrSaveBox.qrDataType.forEach(radio=>radio.onclick = changeOutputType);
|
||||||
qrSaveBox.saveQrImg = qrSaveBox.querySelector(".save-qr-img");
|
qrSaveBox.saveQrImg = qrSaveBox.querySelector(".save-qr-img");
|
||||||
|
|
||||||
qrCodeFrame.ondragenter = ()=>false;
|
qrCodeFrame.ondragenter = ()=>false;
|
||||||
|
@ -5307,8 +5442,8 @@ function editBoxChangeMonId(id) {
|
||||||
const latentSet = new Set(allowable_latent.common);
|
const latentSet = new Set(allowable_latent.common);
|
||||||
allowable_latent.needAwoken.forEach(obj=>latentSet.add(obj.latent));
|
allowable_latent.needAwoken.forEach(obj=>latentSet.add(obj.latent));
|
||||||
card.types.filter(i => i >= 0)
|
card.types.filter(i => i >= 0)
|
||||||
.map(type => typekiller_for_type.find(t=>t.type==type).allowableLatent)
|
.flatMap(type => typekiller_for_type.find(t=>t.type==type).allowableLatent)
|
||||||
.forEach(tA => tA.forEach(t => latentSet.add(t)));
|
.forEach(t => latentSet.add(t));
|
||||||
if (card.limitBreakIncr) {
|
if (card.limitBreakIncr) {
|
||||||
allowable_latent.v120.forEach(t => (t!==49 || t===49 && card.attrs[0]===6) && latentSet.add(t));
|
allowable_latent.v120.forEach(t => (t!==49 || t===49 && card.attrs[0]===6) && latentSet.add(t));
|
||||||
}
|
}
|
||||||
|
|
|
@ -22843,11 +22843,11 @@ const cachesMap = new Map([
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"script.js",
|
"script.js",
|
||||||
"51a45dedffded8db84da957b47a28c28"
|
"d90f5ce95461961deeaaa207fc674932"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"solo.html",
|
"solo.html",
|
||||||
"5dfa10024924d95cb1a32abd94a48418"
|
"89d57551dff65751b97686e126d3672c"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"style-monsterimages.css",
|
"style-monsterimages.css",
|
||||||
|
@ -22855,7 +22855,7 @@ const cachesMap = new Map([
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"style.css",
|
"style.css",
|
||||||
"10c3535a7ad7a4f3c01fa70c7c67d3b5"
|
"ccf520aa5d5e653c9c874a4f6ef18dd5"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"temp.js",
|
"temp.js",
|
||||||
|
@ -22867,7 +22867,7 @@ const cachesMap = new Map([
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"languages/en.css",
|
"languages/en.css",
|
||||||
"5c55ac4c8f478076425dc23c8e4b75c7"
|
"890c22795207a7ce48d94b81cb1c2da9"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"languages/en.js",
|
"languages/en.js",
|
||||||
|
@ -22875,7 +22875,7 @@ const cachesMap = new Map([
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"languages/ja.css",
|
"languages/ja.css",
|
||||||
"6ac36a23d002754462c2d225c1b7cfab"
|
"60212f96389d2dcd52704ddefca000d4"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"languages/ja.js",
|
"languages/ja.js",
|
||||||
|
@ -22883,7 +22883,7 @@ const cachesMap = new Map([
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"languages/ko.css",
|
"languages/ko.css",
|
||||||
"0a845b5579580b336ed4e6b008026f2e"
|
"31800c79d96f2fbf0a1c36cf978e5282"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"languages/ko.js",
|
"languages/ko.js",
|
||||||
|
@ -22895,7 +22895,7 @@ const cachesMap = new Map([
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"languages/zh-TW.css",
|
"languages/zh-TW.css",
|
||||||
"717ab281b26486b192defaa3bc068b15"
|
"a2fb307399710d6c9dc0a21b902a3e3d"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"languages/zh-TW.js",
|
"languages/zh-TW.js",
|
||||||
|
@ -22903,7 +22903,7 @@ const cachesMap = new Map([
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"languages/zh.css",
|
"languages/zh.css",
|
||||||
"7320d52c192a768bd1d221073aa4573b"
|
"b02ff6a7cffea9e8cc8ae869600e9775"
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
"languages/zh.js",
|
"languages/zh.js",
|
||||||
|
|
|
@ -1243,6 +1243,14 @@ const teamsCount = 1;
|
||||||
<div class="qr-box"><img class="qr-code-image" /></div>
|
<div class="qr-box"><img class="qr-code-image" /></div>
|
||||||
<a download="" class="save-qr-img brown-button fa"><!--保存QR 图片--></a>
|
<a download="" class="save-qr-img brown-button fa"><!--保存QR 图片--></a>
|
||||||
</div>
|
</div>
|
||||||
|
<div class="sanbon-me-transfer">
|
||||||
|
<div class="sanbon-v1">
|
||||||
|
<a id="sanbon-v1-link">Sanbon v1 URL</a>
|
||||||
|
</div>
|
||||||
|
<div class="sanbon-v2">
|
||||||
|
<label for="sanbon-v2-script"><a href="https://sanbon.me/v2/en-jp/team-builder" target="_blank">Sanbon v2</a> JavaScript (Test function, paste in Browser Console, Maybe Not available | 测试功能,粘贴到浏览器控制台,但基本无法使用)</label><br><textarea id="sanbon-v2-script"></textarea>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
<div class="paddb-team-edit">
|
<div class="paddb-team-edit">
|
||||||
<div class="user">
|
<div class="user">
|
||||||
<label for="paddb-username"></label><input id="paddb-username" type="text" placeholder="ID (2~12)">
|
<label for="paddb-username"></label><input id="paddb-username" type="text" placeholder="ID (2~12)">
|
||||||
|
|
|
@ -3533,9 +3533,16 @@ body:not(.external-link-support) #external-support::before
|
||||||
{
|
{
|
||||||
padding-bottom: 10px;
|
padding-bottom: 10px;
|
||||||
}
|
}
|
||||||
|
#qr-code-frame #sanbon-v2-script
|
||||||
|
{
|
||||||
|
width: calc(100% - 20px);
|
||||||
|
height: 4em;
|
||||||
|
resize: vertical;
|
||||||
|
}
|
||||||
|
|
||||||
#qr-code-frame .read-qr-box::before,
|
#qr-code-frame .read-qr-box::before,
|
||||||
#qr-code-frame .save-qr-box::before,
|
#qr-code-frame .save-qr-box::before,
|
||||||
|
#qr-code-frame .sanbon-me-transfer::before,
|
||||||
#qr-code-frame .paddb-team-edit::before
|
#qr-code-frame .paddb-team-edit::before
|
||||||
{
|
{
|
||||||
display: block;
|
display: block;
|
||||||
|
|
Loading…
Reference in New Issue