加入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
|
||||
{
|
||||
content: "P&D Formation Maker";
|
||||
content: "P&D Dash Formation";
|
||||
}
|
||||
label[for="qr-data-type-pdc"]::before
|
||||
{
|
||||
content: "P&D Damage Caculater (PDC)";
|
||||
}
|
||||
label[for="qr-data-type-pdchu"]::before {
|
||||
content: "Valeria (pdchu)";
|
||||
label[for="qr-data-type-sanbon-v1"]::before {
|
||||
content: "Sanbon v1 URL";
|
||||
}
|
||||
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
|
||||
{
|
||||
content: "パズドラダッシュフォーメーション";
|
||||
content: "P&D Dash Formation";
|
||||
}
|
||||
label[for="qr-data-type-pdc"]::before
|
||||
{
|
||||
content: "パズドラダメージ計算 (PDC)";
|
||||
}
|
||||
label[for="qr-data-type-pdchu"]::before {
|
||||
content: "Valeria (pdchu)";
|
||||
label[for="qr-data-type-sanbon-v1"]::before {
|
||||
content: "Sanbon v1 URL";
|
||||
}
|
||||
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
|
||||
{
|
||||
content: "퍼즐앤드래곤 대시 형성";
|
||||
content: "P&D Dash Formation";
|
||||
}
|
||||
label[for="qr-data-type-pdc"]::before
|
||||
{
|
||||
content: "퍼즐앤드래곤 데미지 카큐라터 (PDC)";
|
||||
}
|
||||
label[for="qr-data-type-pdchu"]::before {
|
||||
content: "Valeria (pdchu)";
|
||||
label[for="qr-data-type-sanbon-v1"]::before {
|
||||
content: "Sanbon v1 URL";
|
||||
}
|
||||
label[for="qr-data-type-paddb"]::before
|
||||
{
|
||||
|
|
|
@ -609,8 +609,8 @@ label[for="qr-data-type-pdc"]::before
|
|||
{
|
||||
content: "龍族拼圖傷害計算器 (PDC)";
|
||||
}
|
||||
label[for="qr-data-type-pdchu"]::before {
|
||||
content: "Valeria (pdchu)";
|
||||
label[for="qr-data-type-sanbon-v1"]::before {
|
||||
content: "Sanbon v1 網址";
|
||||
}
|
||||
label[for="qr-data-type-paddb"]::before
|
||||
{
|
||||
|
|
|
@ -537,6 +537,10 @@ label[for="real-time-change-card"]::after
|
|||
{
|
||||
content: "生成二维码:";
|
||||
}
|
||||
.sanbon-me-transfer::before
|
||||
{
|
||||
content: "Sanbon.me:";
|
||||
}
|
||||
|
||||
.read-qr-box .result-code::before {
|
||||
content: "代码 ";
|
||||
|
@ -608,8 +612,11 @@ label[for="qr-data-type-pdc"]::before
|
|||
{
|
||||
content: "智龙迷城伤害计算器 (PDC)";
|
||||
}
|
||||
label[for="qr-data-type-pdchu"]::before {
|
||||
content: "Valeria (pdchu)";
|
||||
label[for="qr-data-type-sanbon-v1"]::before {
|
||||
content: "Sanbon v1 网址";
|
||||
}
|
||||
label[for="qr-data-type-sanbon-v2"]::before {
|
||||
content: "Sanbon v2 测试脚本";
|
||||
}
|
||||
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;
|
||||
}
|
||||
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)
|
||||
{
|
||||
switch (type) {
|
||||
|
@ -635,6 +757,12 @@ Formation.prototype.getQrStr = function(type)
|
|||
case 'paddb': {
|
||||
return JSON.stringify(this.getPaddbQrObj());
|
||||
}
|
||||
case 'sanbon-v1': {
|
||||
return this.getSanbonV1Url();
|
||||
}
|
||||
case 'sanbon-v2': {
|
||||
return this.getSanbonV2Script();
|
||||
}
|
||||
case 'pdc':
|
||||
default: {
|
||||
return this.getPdcQrStr();
|
||||
|
@ -1977,6 +2105,11 @@ function initialize() {
|
|||
|
||||
let qrTypeRadio = qrSaveBox.qrDataType.find(radio=>radio.checked);
|
||||
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();};
|
||||
|
||||
|
@ -2038,11 +2171,13 @@ function initialize() {
|
|||
qrCodeFrame.refreshQrCode(this.value);
|
||||
}
|
||||
qrSaveBox.qrDataType = Array.from(qrSaveBox.querySelectorAll(".qr-data-type-radio"));
|
||||
qrSaveBox.qrDataType.forEach(radio=>radio.onclick = function(){
|
||||
let qrstr = formation.getQrStr(this.value);
|
||||
function changeOutputType(){
|
||||
const type = this.value;
|
||||
const qrstr = formation.getQrStr(type);
|
||||
qrSaveBox.qrStr.value = qrstr;
|
||||
qrSaveBox.qrStr.onchange();
|
||||
});
|
||||
}
|
||||
qrSaveBox.qrDataType.forEach(radio=>radio.onclick = changeOutputType);
|
||||
qrSaveBox.saveQrImg = qrSaveBox.querySelector(".save-qr-img");
|
||||
|
||||
qrCodeFrame.ondragenter = ()=>false;
|
||||
|
@ -5307,8 +5442,8 @@ function editBoxChangeMonId(id) {
|
|||
const latentSet = new Set(allowable_latent.common);
|
||||
allowable_latent.needAwoken.forEach(obj=>latentSet.add(obj.latent));
|
||||
card.types.filter(i => i >= 0)
|
||||
.map(type => typekiller_for_type.find(t=>t.type==type).allowableLatent)
|
||||
.forEach(tA => tA.forEach(t => latentSet.add(t)));
|
||||
.flatMap(type => typekiller_for_type.find(t=>t.type==type).allowableLatent)
|
||||
.forEach(t => latentSet.add(t));
|
||||
if (card.limitBreakIncr) {
|
||||
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",
|
||||
"51a45dedffded8db84da957b47a28c28"
|
||||
"d90f5ce95461961deeaaa207fc674932"
|
||||
],
|
||||
[
|
||||
"solo.html",
|
||||
"5dfa10024924d95cb1a32abd94a48418"
|
||||
"89d57551dff65751b97686e126d3672c"
|
||||
],
|
||||
[
|
||||
"style-monsterimages.css",
|
||||
|
@ -22855,7 +22855,7 @@ const cachesMap = new Map([
|
|||
],
|
||||
[
|
||||
"style.css",
|
||||
"10c3535a7ad7a4f3c01fa70c7c67d3b5"
|
||||
"ccf520aa5d5e653c9c874a4f6ef18dd5"
|
||||
],
|
||||
[
|
||||
"temp.js",
|
||||
|
@ -22867,7 +22867,7 @@ const cachesMap = new Map([
|
|||
],
|
||||
[
|
||||
"languages/en.css",
|
||||
"5c55ac4c8f478076425dc23c8e4b75c7"
|
||||
"890c22795207a7ce48d94b81cb1c2da9"
|
||||
],
|
||||
[
|
||||
"languages/en.js",
|
||||
|
@ -22875,7 +22875,7 @@ const cachesMap = new Map([
|
|||
],
|
||||
[
|
||||
"languages/ja.css",
|
||||
"6ac36a23d002754462c2d225c1b7cfab"
|
||||
"60212f96389d2dcd52704ddefca000d4"
|
||||
],
|
||||
[
|
||||
"languages/ja.js",
|
||||
|
@ -22883,7 +22883,7 @@ const cachesMap = new Map([
|
|||
],
|
||||
[
|
||||
"languages/ko.css",
|
||||
"0a845b5579580b336ed4e6b008026f2e"
|
||||
"31800c79d96f2fbf0a1c36cf978e5282"
|
||||
],
|
||||
[
|
||||
"languages/ko.js",
|
||||
|
@ -22895,7 +22895,7 @@ const cachesMap = new Map([
|
|||
],
|
||||
[
|
||||
"languages/zh-TW.css",
|
||||
"717ab281b26486b192defaa3bc068b15"
|
||||
"a2fb307399710d6c9dc0a21b902a3e3d"
|
||||
],
|
||||
[
|
||||
"languages/zh-TW.js",
|
||||
|
@ -22903,7 +22903,7 @@ const cachesMap = new Map([
|
|||
],
|
||||
[
|
||||
"languages/zh.css",
|
||||
"7320d52c192a768bd1d221073aa4573b"
|
||||
"b02ff6a7cffea9e8cc8ae869600e9775"
|
||||
],
|
||||
[
|
||||
"languages/zh.js",
|
||||
|
|
|
@ -1243,6 +1243,14 @@ const teamsCount = 1;
|
|||
<div class="qr-box"><img class="qr-code-image" /></div>
|
||||
<a download="" class="save-qr-img brown-button fa"><!--保存QR 图片--></a>
|
||||
</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="user">
|
||||
<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;
|
||||
}
|
||||
#qr-code-frame #sanbon-v2-script
|
||||
{
|
||||
width: calc(100% - 20px);
|
||||
height: 4em;
|
||||
resize: vertical;
|
||||
}
|
||||
|
||||
#qr-code-frame .read-qr-box::before,
|
||||
#qr-code-frame .save-qr-box::before,
|
||||
#qr-code-frame .sanbon-me-transfer::before,
|
||||
#qr-code-frame .paddb-team-edit::before
|
||||
{
|
||||
display: block;
|
||||
|
|
Loading…
Reference in New Issue