Merge branch 'master' of code.gitlink.org.cn:mapaler/PADDashFormation

This commit is contained in:
枫谷剑仙 2024-05-28 02:08:56 +08:00
commit ebc9b94cfd
9 changed files with 111 additions and 104 deletions

View File

@ -184,7 +184,7 @@
<span lang="zh">你保存的数据全部存于浏览器的本地 <em>IndexedDB</em> 内,不会被上传到服务器,因此更换浏览器就需要重新打开数据。</span> <span lang="zh">你保存的数据全部存于浏览器的本地 <em>IndexedDB</em> 内,不会被上传到服务器,因此更换浏览器就需要重新打开数据。</span>
<span lang="en">All of the data you save is stored in your browser's local <em>IndexedDB</em> and will not be uploaded to the server, so changing your browser will require you to reopen the data.</span> <span lang="en">All of the data you save is stored in your browser's local <em>IndexedDB</em> and will not be uploaded to the server, so changing your browser will require you to reopen the data.</span>
</p> </p>
<details> <details open>
<summary> <summary>
<h2 id="ios"> <h2 id="ios">
<span lang="zh">苹果用户</span> <span lang="zh">苹果用户</span>
@ -214,7 +214,7 @@
</p> </p>
<ul> <ul>
<li> <li>
<details> <details open>
<summary> <summary>
<h4> <h4>
<span lang="zh">蓝叠模拟器国际版</span> <span lang="zh">蓝叠模拟器国际版</span>
@ -240,7 +240,7 @@
</details> </details>
</li> </li>
<li> <li>
<details> <details open>
<summary> <summary>
<h4> <h4>
<span lang="zh">夜神模拟器国际版</span> <span lang="zh">夜神模拟器国际版</span>
@ -267,7 +267,7 @@
</li> </li>
</ul> </ul>
<details> <details open>
<summary> <summary>
<h3 id="multiple-devices"> <h3 id="multiple-devices">
<span lang="zh">如何实现多设备登录</span> <span lang="zh">如何实现多设备登录</span>
@ -276,7 +276,7 @@
</summary> </summary>
<h4> <h4>
<span lang="zh">从你的安卓设备中提取<code>data048.bin</code></span> <span lang="zh">从你的安卓设备中提取<code>data048.bin</code></span>
<span lang="en">Extract <code>data048 .bin</code> from your Android device</span> <span lang="en">Extract <code>data048.bin</code> from your Android device</span>
</h4> </h4>
<p> <p>
<span lang="zh">智龙迷城的账号唯一识别码(GUID)储存于<code>/data/data/jp.gungho.pad/files/data048.bin</code>中。</span> <span lang="zh">智龙迷城的账号唯一识别码(GUID)储存于<code>/data/data/jp.gungho.pad/files/data048.bin</code>中。</span>
@ -371,6 +371,40 @@
<br> <br>
<img src="images/player-ph-ab-unpack-open-zip.webp" alt="解包 AB-打开"><br> <img src="images/player-ph-ab-unpack-open-zip.webp" alt="解包 AB-打开"><br>
</p> </p>
<p>
<h5>
<span lang="zh">导出失败的可能原因</span>
<span lang="en">Possible reasons for export failures</span>
</h5>
<ul>
<li>
<span lang="zh">没有安装具有完整功能的 USB 驱动。</span>
<span lang="en">There is no fully functional USB driver installed.</span><br>
<span lang="zh">解决办法:</span><span lang="en">Solution:</span><br>
<span lang="zh">安装手机 OEM 厂商的最新刷机 USB 驱动程序。</span>
<span lang="en">Install the latest flash USB driver from your phone OEM.</span>
</li>
<li>
<span lang="zh">游戏不在前台。</span>
<span lang="en">The game is not in the foreground.</span><br>
<span lang="zh">解决办法:</span><span lang="en">Solution:</span><br>
<span lang="zh">运行并保持游戏界面在前台的时候运行备份命令。</span>
<span lang="en">Run and keep the game interface in the foreground while running the backup command.</span>
</li>
<li>
<span lang="zh">安卓版本过高。</span>
<span lang="en">The Android version is too high.</span><br>
<span lang="zh">因为此功能已被标记为“废弃”,高版本的安卓很可能不再支持非 root 导出。</span>
<span lang="en">Because this feature has been marked as "deprecated", it is likely that newer versions of Android will no longer support non-rooted exports。</span><br>
<span lang="zh">正确的导出大于 1KB。</span>
<span lang="en">A successful export is larger than 1KB.</span><br>
<img src="images/player-ph-ab-succeed-failed.webp" alt="解包 成功和失败的"><br>
<span lang="zh">解决办法:</span><span lang="en">Solution:</span><br>
<span lang="zh">安卓 13 用不了 <code>adb backup</code> 但是可以使用 <code>adb restore</code>,所以可以在低版本的安卓模拟器或老手机内登录游戏,然后使用 <code>adb backup</code> 备份,使用 <code>adb restore</code> 导入到手机。</span>
<span lang="en">Android 13 failed with <code>adb backup</code> but successfully use <code>adb restore</code>, so you can log in to the game in an Android emulator (or an older phone), then use <code>adb backup</code> to back up from emulator, and use <code>adb restore</code> to import to your phone.</span>
</li>
</ul>
</p>
<h4> <h4>
<span lang="zh"><code>data048.bin</code> 导入模拟器</span> <span lang="zh"><code>data048.bin</code> 导入模拟器</span>
<span lang="en">Import <code>data048.bin</code> into the simulator</span> <span lang="en">Import <code>data048.bin</code> into the simulator</span>
@ -381,7 +415,7 @@
</p> </p>
<ul> <ul>
<li> <li>
<details> <details open>
<summary> <summary>
<span lang="zh">蓝叠模拟器国际版</span> <span lang="zh">蓝叠模拟器国际版</span>
<span lang="en">BlueStacks</span> <span lang="en">BlueStacks</span>
@ -427,7 +461,7 @@
</details> </details>
</li> </li>
<li> <li>
<details> <details open>
<summary> <summary>
<span lang="zh">夜神模拟器国际版</span> <span lang="zh">夜神模拟器国际版</span>
<span lang="en">NoxPlayer</span> <span lang="en">NoxPlayer</span>
@ -475,7 +509,7 @@
<span lang="zh">然后你可以选择在安卓内使用 APP 和电脑上用代理软件两种方式抓包。</span> <span lang="zh">然后你可以选择在安卓内使用 APP 和电脑上用代理软件两种方式抓包。</span>
<span lang="en">You can then choose to sniffer in both use the APP within Android and proxy software on your PC.</span> <span lang="en">You can then choose to sniffer in both use the APP within Android and proxy software on your PC.</span>
</p> </p>
<details> <details open>
<summary> <summary>
<h3 id="use-HttpCanary"> <h3 id="use-HttpCanary">
<span lang="zh">使用 HttpCanary APP</span> <span lang="zh">使用 HttpCanary APP</span>
@ -577,7 +611,7 @@
</p> </p>
</details> </details>
<details> <details open>
<summary> <summary>
<h3 id="use-Fidder"> <h3 id="use-Fidder">
<span lang="zh">在电脑上使用 Fidder</span> <span lang="zh">在电脑上使用 Fidder</span>
@ -679,7 +713,7 @@ $str.ToString() | Out-File -Encoding ascii -FilePath $pem_name
</h4> </h4>
<ul> <ul>
<li> <li>
<details> <details open>
<summary> <summary>
<span lang="zh">蓝叠模拟器</span> <span lang="zh">蓝叠模拟器</span>
<span lang="en">BlueStacks</span> <span lang="en">BlueStacks</span>
@ -705,7 +739,7 @@ $str.ToString() | Out-File -Encoding ascii -FilePath $pem_name
</p> </p>
<ul> <ul>
<li> <li>
<details> <details open>
<summary> <summary>
<span lang="zh">如果你拥有<a href="https://www.diskgenius.cn/">DiskGenius专业版</a>,你可以使用它的编辑虚拟磁盘功能插入证书文件。</span> <span lang="zh">如果你拥有<a href="https://www.diskgenius.cn/">DiskGenius专业版</a>,你可以使用它的编辑虚拟磁盘功能插入证书文件。</span>
<span lang="en">If you have <a href="https://www.diskgenius.com/">DiskGenius Pro</a>, you can use its Edit Virtual Disk feature to insert certificate files.</span> <span lang="en">If you have <a href="https://www.diskgenius.com/">DiskGenius Pro</a>, you can use its Edit Virtual Disk feature to insert certificate files.</span>
@ -731,7 +765,7 @@ $str.ToString() | Out-File -Encoding ascii -FilePath $pem_name
</details> </details>
</li> </li>
<li> <li>
<details> <details open>
<summary> <summary>
<span lang="zh">使用免费软件 Ext2Fsd 读写 Ext4 格式。</span> <span lang="zh">使用免费软件 Ext2Fsd 读写 Ext4 格式。</span>
<span lang="en">Use the free software Ext2Fsd to read and write the Ext4 format.</span> <span lang="en">Use the free software Ext2Fsd to read and write the Ext4 format.</span>
@ -755,7 +789,7 @@ $str.ToString() | Out-File -Encoding ascii -FilePath $pem_name
<br> <br>
<img src="images/bluestacks-vhd-ext2fsd-tools-service.webp" alt="Ext2Fsd 是否打开服务"> <img src="images/bluestacks-vhd-ext2fsd-tools-service.webp" alt="Ext2Fsd 是否打开服务">
</p> </p>
<details> <details open>
<summary> <summary>
<span lang="zh">如果0.71、0.69和0.68版本都无法成功运行,那么也可以试试以 禁用驱动强制签名 模式启动才能运行。</span> <span lang="zh">如果0.71、0.69和0.68版本都无法成功运行,那么也可以试试以 禁用驱动强制签名 模式启动才能运行。</span>
<span lang="en">If versions 0.71, 0.69, and 0.68 fail to run, then you can also try to start in the Disable Driver Forced Signature mode.</span> <span lang="en">If versions 0.71, 0.69, and 0.68 fail to run, then you can also try to start in the Disable Driver Forced Signature mode.</span>
@ -840,7 +874,7 @@ $str.ToString() | Out-File -Encoding ascii -FilePath $pem_name
</details> </details>
</li> </li>
<li> <li>
<details> <details open>
<summary> <summary>
<span lang="zh">夜神模拟器</span> <span lang="zh">夜神模拟器</span>
<span lang="en">NoxPlayer</span> <span lang="en">NoxPlayer</span>
@ -886,7 +920,7 @@ $str.ToString() | Out-File -Encoding ascii -FilePath $pem_name
</h4> </h4>
<ul> <ul>
<li> <li>
<details> <details open>
<summary> <summary>
<span lang="zh">蓝叠模拟器</span> <span lang="zh">蓝叠模拟器</span>
<span lang="en">BlueStacks</span> <span lang="en">BlueStacks</span>
@ -937,7 +971,7 @@ $str.ToString() | Out-File -Encoding ascii -FilePath $pem_name
</details> </details>
</li> </li>
<li> <li>
<details> <details open>
<summary> <summary>
<span lang="zh">夜神模拟器</span> <span lang="zh">夜神模拟器</span>
<span lang="en">NoxPlayer</span> <span lang="en">NoxPlayer</span>

Binary file not shown.

After

Width:  |  Height:  |  Size: 4.5 KiB

View File

@ -10,10 +10,10 @@
{ {
"code": "en", "code": "en",
"ckey": { "ckey": {
"card": "3ab7deefdeb206da9ac56ea7c5c26078", "card": "a679a08d4fc8ca3fe261a26f4811465b",
"skill": "0a759c657e0a95a615245b3c76aa54c9" "skill": "02c3fbf00c669b45566717a9a77133fc"
}, },
"updateTime": 1716466745865 "updateTime": 1716553171360
}, },
{ {
"code": "ko", "code": "ko",

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

127
script.js
View File

@ -1074,11 +1074,12 @@ Formation.pdcBadgeMap = [
{pdf:13,pdc:17}, //防废 {pdf:13,pdc:17}, //防废
{pdf:14,pdc:16}, //防毒 {pdf:14,pdc:16}, //防毒
{pdf:PAD_PASS_BADGE,pdc:14}, //月卡 {pdf:PAD_PASS_BADGE,pdc:14}, //月卡
{pdf:22,pdc:20}, //无武器全抗性(耐) {pdf:22,pdc:20}, //除武器,全抗性(耐)
{pdf:23,pdc:21}, //无武器10SB(S+×5) {pdf:23,pdc:21}, //除武器,10SB(S+×5)
{pdf:24,pdc:22}, //英雄学院桶 {pdf:24,pdc:22}, //英雄学院桶
{pdf:25,pdc:23}, //画师桶 {pdf:25,pdc:23}, //画师桶
{pdf:26,pdc:24}, //高达桶 {pdf:26,pdc:24}, //高达桶
{pdf:27,pdc:25}, //转生成为史莱姆
]; ];
//pdc的潜觉对应数字 //pdc的潜觉对应数字
Formation.pdcLatentMap = [ Formation.pdcLatentMap = [
@ -1305,10 +1306,10 @@ Formation.prototype.getPaddbQrObj = function(keepDataSource = true)
return cardid > 9934 ; return cardid > 9934 ;
} }
//PADDB目前只支持单人队伍 //PADDB目前只支持单人队伍
const t = this.teams[0]; const [members,assists,badge] = this.teams[0];
let teamObj = { let teamObj = {
name: this.title, name: this.title,
badge: Formation.paddbBadgeMap.find(badge=>badge.pdf === t[2]).paddb, badge: Formation.paddbBadgeMap.find(badge=>badge.pdf === badge)?.paddb ?? badge,
memo: (this.detail || '') + '\n' + uploadMessage, memo: (this.detail || '') + '\n' + uploadMessage,
monsters: {}, monsters: {},
assists: {}, assists: {},
@ -1323,8 +1324,8 @@ Formation.prototype.getPaddbQrObj = function(keepDataSource = true)
} }
return mid; return mid;
} }
for (let i = 0; i < t[0].length; i++) { for (let i = 0; i < members.length; i++) {
const m = t[0][i], a = t[1][i]; const m = members[i], a = assists[i];
//计算基底的变身情况 //计算基底的变身情况
let num, transform; let num, transform;
if (m.card?.henshinFrom?.length > 0 //是变身 if (m.card?.henshinFrom?.length > 0 //是变身
@ -1346,7 +1347,7 @@ Formation.prototype.getPaddbQrObj = function(keepDataSource = true)
active_skill_level: m.skilllevel ?? Skills[m.card.activeSkillId].maxLevel, active_skill_level: m.skilllevel ?? Skills[m.card.activeSkillId].maxLevel,
transform: memberIdChange ? m.level : num, transform: memberIdChange ? m.level : num,
super_awoken: m.sawoken + 2, super_awoken: m.sawoken + 2,
latent_awokens: m.latent.map(n=>Formation.paddbLatentMap.find(latent=>latent.pdf === n).paddb), latent_awokens: m.latent.map(n=>Formation.paddbLatentMap.find(latent=>latent.pdf === n)?.paddb ?? latent),
}; };
let assistIdChange = changePadDbIdLevel(a.id); let assistIdChange = changePadDbIdLevel(a.id);
teamObj.assists[i] = a.id <= 0 ? null : { teamObj.assists[i] = a.id <= 0 ? null : {
@ -1361,7 +1362,7 @@ Formation.prototype.getPaddbQrObj = function(keepDataSource = true)
// password:"", // password:"",
name: this.title, name: this.title,
// "tags":[""], // "tags":[""],
mons: t[0].concat(t[1]).map(m=>m.id > 0 ? protectPadDbId(m.id, true) : ""), mons: members.concat(assists).map(m=>m.id > 0 ? protectPadDbId(m.id, true) : ""),
team: JSON.stringify(teamObj), team: JSON.stringify(teamObj),
}; };
return qrObj; return qrObj;
@ -1375,47 +1376,30 @@ function sanbonTranslateRegion(code) {
}; };
Formation.prototype.getSanbonV2Script = function() Formation.prototype.getSanbonV2Script = function()
{ {
function cardFlattened(card) { const region = sanbonTranslateRegion(currentDataSource.code);
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: sanbonTranslateRegion(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: [],
transforms: buildEvoTreeIdsArray(card),
}
return o;
}
//sanbon目前只支持单人队伍 //sanbon目前只支持单人队伍
const [members,assists,badge] = this.teams[0]; const [members,assists,badge] = this.teams[0];
const scriptLines = [`(()=>{ const scriptLines = [`(async ()=>{
"use strict"; "use strict";
const __NEXT_DATA__ = document.getElementById("__NEXT_DATA__");
const __NEXT_DATA__JSON = JSON.parse(__NEXT_DATA__.innerHTML);
const buildId = __NEXT_DATA__JSON.buildId;
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 tbs = JSON.parse(sessionStorage.getItem("team-build-store"));
const team = tbs.state; const team = tbs.state;
team.badge = ${Formation.sanbonBadgeMap.find(_badge=>_badge.pdf === badge)?.sanbon || badge};`]; team.badge = ${Formation.sanbonBadgeMap.find(_badge=>_badge.pdf === badge)?.sanbon ?? badge};`];
const _members = {}; const _members = {};
for (let i = 0; i < members.length; i++) { for (let i = 0; i < members.length; i++) {
@ -1432,46 +1416,28 @@ const scriptLines = [`(()=>{
assistNum: a.id, assistNum: a.id,
assistLevel: a.level, assistLevel: a.level,
assistPlus: a?.plus?.every(p=>p>=99) ?? false, assistPlus: a?.plus?.every(p=>p>=99) ?? false,
flattened: cardFlattened(m.card), // flattened: cardFlattened(m.card),
assistFlattened: cardFlattened(a.card), // assistFlattened: cardFlattened(a.card),
flattened: `(await fetchFlattened(${m.id}))`,
assistFlattened: `(await fetchFlattened(${a.id}))`,
} }
_members[i] = _m; _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(`\tteam.members = ${JSON.stringify(_members,null,'\t').replace(/"(\(await fetchFlattened\(\d+\)\))"/igm, "$1")}`);
scriptLines.push(`sessionStorage.setItem("team-build-store", JSON.stringify(tbs)); scriptLines.push(`\tsessionStorage.setItem("team-build-store", JSON.stringify(tbs));
location.reload(); \tlocation.reload();
})();`); })();`);
return scriptLines.join('\n'); return scriptLines.join('\n');
}; };
//paddb的徽章对应数字 //sanbon的徽章对应数字
Formation.sanbonBadgeMap = [ Formation.sanbonBadgeMap = [
{pdf:22,sanbon:15}, //除武器,全 {pdf:22,sanbon:15}, //除武器,全抗性(耐)
{pdf:23,sanbon:16}, //除武器10 SB {pdf:23,sanbon:16}, //除武器10SB(S+×5)
{pdf:24,sanbon:20}, //合作,英雄学院 {pdf:24,sanbon:20}, //合作,英雄学院
{pdf:25,sanbon:23}, //官桶,画师 {pdf:25,sanbon:23}, //官桶,画师
{pdf:27,sanbon:22}, //合作,高达 {pdf:26,sanbon:22}, //合作,高达
{pdf:27,sanbon:24}, //转生成为史莱姆
{pdf:PAD_PASS_BADGE,sanbon:1}, //月卡 {pdf:PAD_PASS_BADGE,sanbon:1}, //月卡
]; ];
Formation.prototype.getSanbonQrObj = function() Formation.prototype.getSanbonQrObj = function()
@ -1484,7 +1450,7 @@ Formation.prototype.getSanbonQrObj = function()
content: this.detail ?? "", content: this.detail ?? "",
//mons: assists.map(m=>m.id).concat(members.map(m=>m.id)), //mons: assists.map(m=>m.id).concat(members.map(m=>m.id)),
data: { data: {
badge: Formation.sanbonBadgeMap.find(_badge=>_badge.pdf === badge)?.sanbon || badge, badge: Formation.sanbonBadgeMap.find(_badge=>_badge.pdf === badge)?.sanbon ?? badge,
members: {}, //等待下面处理 members: {}, //等待下面处理
}, },
}; };
@ -1508,7 +1474,7 @@ Formation.prototype.getSanbonQrObj = function()
return obj; return obj;
}; };
//paddb的徽章对应数字 //daddb的徽章对应数字
Formation.daddbBadgeMap = [ Formation.daddbBadgeMap = [
{pdf:undefined,daddb:0}, //什么都没有 {pdf:undefined,daddb:0}, //什么都没有
{pdf:1,daddb:0}, //无限cost {pdf:1,daddb:0}, //无限cost
@ -1530,6 +1496,8 @@ Formation.daddbBadgeMap = [
{pdf:12,daddb:14}, //墨镜 {pdf:12,daddb:14}, //墨镜
{pdf:13,daddb:15}, //防废 {pdf:13,daddb:15}, //防废
{pdf:14,daddb:16}, //防毒 {pdf:14,daddb:16}, //防毒
{pdf:22,daddb:19}, //除武器,全抗性(耐)
{pdf:23,daddb:20}, //除武器10SB(S+×5)
{pdf:PAD_PASS_BADGE,daddb:18}, //月卡 {pdf:PAD_PASS_BADGE,daddb:18}, //月卡
]; ];
//paddb的潜觉对应数字 //paddb的潜觉对应数字
@ -1590,7 +1558,7 @@ Formation.prototype.getDaddbQrObj = function()
const [members,assists,badge] = this.teams[0]; const [members,assists,badge] = this.teams[0];
let teamObj = { let teamObj = {
name: this.title, name: this.title,
badge: Formation.daddbBadgeMap.find(_badge=>_badge.pdf === badge)?.daddb, badge: Formation.daddbBadgeMap.find(_badge=>_badge.pdf === badge)?.daddb ?? badge,
staffs: [], staffs: [],
} }
for (let i = 0; i < members.length; i++) { for (let i = 0; i < members.length; i++) {
@ -1599,7 +1567,7 @@ Formation.prototype.getDaddbQrObj = function()
staf: m.id || -1, staf: m.id || -1,
eq: a.id || -1, eq: a.id || -1,
sawak: m.sawoken || -1, sawak: m.sawoken || -1,
qawak: m.latent.map(n=>Formation.daddbLatentMap.find(latent=>latent.pdf === n)?.daddb), qawak: m.latent.map(n=>Formation.daddbLatentMap.find(latent=>latent.pdf === n)?.daddb ?? latent),
}; };
} }
return teamObj; return teamObj;
@ -2807,8 +2775,9 @@ function sanbonFotmationToPdfFotmation(obj)
f.title = team.title; f.title = team.title;
f.detail = team.content; f.detail = team.content;
const t = f.teams[0]; const t = f.teams[0];
//队伍徽章 //队伍徽章
t[2] = Formation.daddbBadgeMap.find(badge=>badge.sanbon === team.badge)?.pdf || team.badge; t[2] = Formation.sanbonBadgeMap.find(badge=>badge.sanbon === team.badge)?.pdf ?? team.badge;
const members = t[0], assists = t[1]; const members = t[0], assists = t[1];
for (let i = 0; i< members.length; i++) { for (let i = 0; i< members.length; i++) {
const m = members[i], a = assists[i], dm = team.members[i]; const m = members[i], a = assists[i], dm = team.members[i];

View File

@ -27603,7 +27603,7 @@ const cachesMap = new Map([
], ],
[ [
"script.js", "script.js",
"6bc01d0d3dd1a16a2652bd17bc04532f" "9693e440ea12bd7b170a4453055c5467"
], ],
[ [
"solo.html", "solo.html",
@ -27855,7 +27855,7 @@ const cachesMap = new Map([
], ],
[ [
"doc/export-player-data.html", "doc/export-player-data.html",
"aad6afca92f58cb444dc4991c3e3e154" "7b5e902b3b080c2173ab0fe0e4609e35"
], ],
[ [
"doc/index.html", "doc/index.html",
@ -28109,6 +28109,10 @@ const cachesMap = new Map([
"doc/images/player-ph-ab-backup.webp", "doc/images/player-ph-ab-backup.webp",
"0e4e1191a1312eaeac304fcffa25c68e" "0e4e1191a1312eaeac304fcffa25c68e"
], ],
[
"doc/images/player-ph-ab-succeed-failed.webp",
"9a0511d07105714ca367b55dbf307b37"
],
[ [
"doc/images/player-ph-ab-unpack-open-zip.webp", "doc/images/player-ph-ab-unpack-open-zip.webp",
"883f30ac4873640f8c66ca44c6e77176" "883f30ac4873640f8c66ca44c6e77176"