prts-moonlit 1.2.2 → 1.2.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/gacha.html CHANGED
@@ -1148,17 +1148,17 @@ document.addEventListener('pointerdown',function(){ac()},{once:true});
1148
1148
  wxhr(url(),JSON.stringify({v:1,u:acct.u,c:acct.c||0,t:t,data:snap()}),function(){st('✔ 已上传 · 后台校验…');setTimeout(function(){verify(t)},600);});
1149
1149
  }
1150
1150
  function verify(t){
1151
- fetch(url()+'?ts='+Date.now(),{cache:'no-store'}).then(function(r){return r.text()}).then(function(x){
1151
+ var x2=new XMLHttpRequest();x2.open('GET',url()+'?ts='+Date.now(),true);x2.timeout=20000;x2.onload=function(){try{var x=x2.responseText;
1152
1152
  x=(x||'').replace(/=$/,'');
1153
1153
  try{var rb=JSON.parse(x);if(rb.t===t){st('✔ 已同步 '+clock());return;}}catch(e){}
1154
1154
  if(!window.__pv){window.__pv=1;setTimeout(function(){push(1);},800);}
1155
1155
  else{window.__pv=0;st('⚠ 上传好像没送达(此浏览器限制跨域)——数据还在本机,可换 Safari 或用存档码');}
1156
- }).catch(function(){st('⚠ 校验失败(可能网络受限)');});
1156
+ }catch(e){st('⚠ 校验失败(可能网络受限)');}};x2.onerror=x2.ontimeout=function(){st('⚠ 校验失败(可能网络受限)');};x2.send();
1157
1157
  }
1158
1158
  function pull(manual){
1159
1159
  if(!acct||!acct.k)return;
1160
1160
  if(manual)st('↻ 同步中…');
1161
- fetch(url()+'?ts='+Date.now(),{cache:'no-store'}).then(function(r){return r.text()}).then(function(x){
1161
+ var x2=new XMLHttpRequest();x2.open('GET',url()+'?ts='+Date.now(),true);x2.timeout=20000;x2.onload=function(){try{var x=x2.responseText;
1162
1162
  x=(x||'').replace(/=$/,'');
1163
1163
  if(!x){if(manual)st('☁ 云端还没有存档——点「云端上传」把本机数据传上去');return;}
1164
1164
  var rb;try{rb=JSON.parse(x)}catch(e){st('⚠ 云端数据格式异常');return;}
@@ -1173,7 +1173,7 @@ document.addEventListener('pointerdown',function(){ac()},{once:true});
1173
1173
  st(same2?'✔ 已是最新 '+clock():'☁ 云端比本机旧——点「云端上传」可覆盖云端');
1174
1174
  }
1175
1175
  else{st('✔ 已是云端最新');}
1176
- }).catch(function(){st('⚠ 云端连接失败');});
1176
+ }catch(e){st('⚠ 云端数据格式异常');}};x2.onerror=x2.ontimeout=function(){st('⚠ 云端连接失败');};x2.send();
1177
1177
  }
1178
1178
  function logout(){localStorage.removeItem(LS);acct=null;}
1179
1179
  var CSS='.acWrap{position:fixed;inset:0;z-index:9998;background:rgba(3,6,14,.66);display:none;align-items:center;justify-content:center}.acWrap.on{display:flex}'+
@@ -1228,7 +1228,7 @@ document.addEventListener('pointerdown',function(){ac()},{once:true});
1228
1228
  st('✦ 仓库已创建,正在上传本机数据…');render();push();return;
1229
1229
  }
1230
1230
  st('↻ 查找云端仓库…');
1231
- fetch(BASE+k+'?ts='+Date.now(),{cache:'no-store'}).then(function(r){return r.text()}).then(function(x){
1231
+ var x3=new XMLHttpRequest();x3.open('GET',BASE+k+'?ts='+Date.now(),true);x3.timeout=20000;x3.onload=function(){try{var x=x3.responseText;
1232
1232
  x=(x||'').replace(/=$/,'');
1233
1233
  if(x&&x.length>2){
1234
1234
  var rb=null;try{rb=JSON.parse(x)}catch(e){}if(!rb){acct=null;localStorage.removeItem(LS);st('⚠ 云端数据异常——没敢覆盖');return;}
@@ -1239,7 +1239,7 @@ document.addEventListener('pointerdown',function(){ac()},{once:true});
1239
1239
  b.setAttribute('data-mode','create');b.textContent='✦ 没找到仓库——点此以本机数据创建';
1240
1240
  st('(如果是新账号,创建后本机数据会上传成初始存档)');
1241
1241
  }
1242
- }).catch(function(){st('⚠ 云端连接失败,稍后再试');});
1242
+ }catch(e){st('⚠ 云端连接失败,稍后再试');}};x3.onerror=x3.ontimeout=function(){st('⚠ 云端连接失败,稍后再试');};x3.send();
1243
1243
  };
1244
1244
  var pl=g('#acPull');if(pl)pl.onclick=function(){pull(1)};
1245
1245
  var pu=g('#acPush');if(pu)pu.onclick=function(){if(acct&&acct.k)push();};
@@ -1300,7 +1300,7 @@ document.addEventListener('pointerdown',function(){ac()},{once:true});
1300
1300
  btn.addEventListener('click',open);
1301
1301
  setInterval(function(){if(acct&&acct.k){var c=canon();if(c!==lastSnap){lastSnap=c;clearTimeout(pq);pq=setTimeout(push,900);}}},2000);
1302
1302
  if(acct&&acct.k){setTimeout(function(){pull(false);},250);}
1303
- var APP_VER='1.2.2';
1303
+ var APP_VER='1.2.4';
1304
1304
  function _verCmp(a,b){var x=String(a).split('.'),y=String(b).split('.');for(var i=0;i<3;i++){var p=parseInt(x[i]||'0',10),q=parseInt(y[i]||'0',10);if(p!==q)return p-q}return 0}
1305
1305
  function chkVer(){
1306
1306
  try{
package/index.html CHANGED
@@ -542,7 +542,7 @@ img.av{filter:saturate(1.1) contrast(1.05) -webkit-user-drag:none}
542
542
  <div class="bnews" id="newsBar" data-act="news" style="cursor:pointer">
543
543
  <div class="hd">BREAKING NEWS</div>
544
544
  <div class="bx">
545
- <div style="font-size:.82em;line-height:1.4;font-weight:800;color:#ff5f57">版本 v1.2.2 正式上线!<br><span style="opacity:.75;font-size:.82em;font-weight:400;color:#ffd23f">点此查看使用教程与更新内容 ↗</span></div>
545
+ <div style="font-size:.82em;line-height:1.4;font-weight:800;color:#ff5f57">版本 v1.2.4 正式上线!<br><span style="opacity:.75;font-size:.82em;font-weight:400;color:#ffd23f">点此查看使用教程与更新内容 ↗</span></div>
546
546
  </div>
547
547
  </div>
548
548
 
@@ -2484,8 +2484,8 @@ V.ledger=function(){LG.load();LG.paint()};
2484
2484
  /* ================= 战绩数据(WHALE_STATS)=================
2485
2485
  本块由 /var/minis/shared/whale/sync_record_stats.py 从 战绩簿 自动生成。
2486
2486
  更新流程:改 shared/whale/战绩.md → 跑 sync_record_stats.py → 本块自动重写 */
2487
- /*WHALE_STATS:BEGIN —— 由 sync_record_stats.py 自动生成于 2026-09-27 02:16;改数据请改 战绩.md 后重跑本脚本 */
2488
- var WHALE_STATS={"updated":"","stats":[],"reports":[],"mine":[]};
2487
+ /*WHALE_STATS:BEGIN —— 由 sync_record_stats.py 自动生成于 2026-09-27 06:32;改数据请改 战绩.md 后重跑本脚本 */
2488
+ var WHALE_STATS={"updated":"2026-09-27","stats":[["报备次数","7"],["累计抽数","24,213"],["累计六星","726"],["综合出率","2.998%"],["违约","0 次"],["单发最欧","1 抽"]],"reports":[{"d":"2026-09-26","pool":"池子未确认(主人「好像半周年」)","n":"10,000","six":"288","rate":"2.88%","gap":"34.7 抽","note":"✅ 数据有效——6★ 基础率与池子无关;理论 2.889% / 34.61 抽,偏差仅 −0.009pp ✅ 后来由数字反推:2.88% 更贴近非联动池(2.889%)而非联动池(3.00%)→ 主人的直觉正确"},{"d":"2026-09-26","pool":"彩虹六号联动(井 5/120)","n":"10,000","six":"321","rate":"3.21%","gap":"31.1 抽","note":"联动池理论 ~3.02%(含 120 硬保底),+1.1σ ✓ 正常;最欧 1 抽(一发入魂);5★ 767 个 = 7.67%(理论 8%,−3.7σ ⚠️ 偏门样本或抄录误差;20 万抽对照实测 7.985%,系统无问题)"},{"d":"2026-09-26","pool":"标准寻访(模拟器一键报备)","n":"13","six":"1","rate":"7.69%","gap":"13.0 抽","note":"🍀 唯一一彩恰落第 13 抽(未触软保底,纯运气);期望 0.26~0.38 个 → +1~1.5σ 小欧;5★×2(期望 1.04)"},{"d":"2026-09-26","pool":"P3R 联动(井 15/120)","n":"600","six":"16","rate":"2.67%","gap":"36.6 抽","note":"联动池理论 ~3.02%(含 120 硬保底);期望 18.12 个 → −0.51σ 正常波动(略非);5★ 45 个 = 7.50%(理论 8%,−0.45σ);最非 66 抽(未触软保底)· 最欧 4 抽;注:16 个六星里若有 UP 需主人补报是哪位干员"},{"d":"2026-09-27","pool":"标准寻访(模拟器)","n":"1,500","six":"37","rate":"2.47%","gap":"39.1 抽","note":"标准池理论 ~2.89%(2% 基础+软保底),期望 43.3 个 → −0.97σ 正常偏非;5★ 127 个 = 8.47%(理论 8%,+0.67σ ✓);最非 70 抽(刷新最非记录,前值 66,仍未触 99 硬保底)· 最欧 2 抽(单发总记录仍是 1 抽)"},{"d":"2026-09-27","pool":"Ave Mujica 联动(井 42/120 · 📮一键报备)","n":"1,600","six":"45","rate":"2.81%","gap":"35.5 抽","note":"联动池理论 ~3.02%(含 120 硬保底),期望 48.3 个 → −0.48σ 正常偏非;5★ 123 个 = 7.69%(理论 8%,−0.46σ 正常);最非 64 抽 · 最欧 3 抽(单发总记录仍 1 抽)"},{"d":"2026-09-27","pool":"Ave Mujica 联动(井 59/120)","n":"500","six":"18","rate":"3.60%","gap":"24.5 抽","note":"联动池理论 ~3.02%(含 120 硬保底),期望 15.1 个 → +0.76σ 正常偏欧;5★ 27 个 = 5.40%(理论 8%,−2.14σ ⚠️ 五星大非号角);最非 58 抽 · 最欧 2 抽(单发总记录仍 1 抽)"},{"d":"2026-09-26","pool":"彩虹六号联动(1 亿抽大样本)","n":"100,000,000","six":"3,036,676","rate":"3.03668%","gap":"—","note":"五批 × 2000 万,共约 76 秒。保底触发 248,381 次(0.248%)。概率再分配账目精确守恒:6★ 多出 +1.03668pp = 5★ −0.0193pp + 4★ −0.13008pp + 3★ −0.8873pp"}],"mine":[{"d":"2026-09-26","pool":"Ave Mujica 联动","n":"120","got":"丰川祥子(6★)","note":"踩中 120 硬保底最后一抽"},{"d":"2026-09-26","pool":"中坚寻访","n":"550","got":"斯卡蒂(6★)","note":"无 UP 无井,纯抽;期望 1660"},{"d":"2026-09-26","pool":"周年限定","n":"70","got":"可露希尔 + 凯尔希·思衡托","note":"70 抽两个六星,全 UP 组"}]};
2489
2489
  /*WHALE_STATS:END*/
2490
2490
 
2491
2491
  /* ================= VIEW: RECORDS(战绩)================= */
@@ -2641,7 +2641,7 @@ function tshuffle(a){for(var i=a.length-1;i>0;i--){var j=Math.floor(Math.random(
2641
2641
  var TARO_NOW=[];
2642
2642
  function openNews(){
2643
2643
  var h='<div class="box"><div class="tag rd">NOTICE</div>'+
2644
- '<div style="margin-top:6px;font-weight:900;font-size:1.08em">版本 v1.2.2 正式上线!</div>'+
2644
+ '<div style="margin-top:6px;font-weight:900;font-size:1.08em">版本 v1.2.4 正式上线!</div>'+
2645
2645
  '<div style="font-size:.78em;opacity:.7;margin-top:3px">鲸鲸的养成计划 · PRTS 终端 · 2026-09-27</div></div>'+
2646
2646
  '<div class="box" style="margin-top:10px"><div class="tag">使用教程</div>'+
2647
2647
  '<div style="font-size:.82em;line-height:1.8;margin-top:6px">'+
@@ -2651,7 +2651,11 @@ function openNews(){
2651
2651
  '④ 云存档:点 @ 登录 →「云端导入」接回数据 /「云端上传」备份上云;也有「本地存档码」跨设备搬运<br>'+
2652
2652
  '⑤ 恢复出厂:@ 面板内「清空本机存档」,一键清空本机数据(云端不受影响)<br>'+'⑥ AI 对话:01 里保存 API 配置(地址/Key/模型)→ 和「人格」开聊;采购中心的券可直接在对话里使用<br>'+'⑦ 意见箱:@ 面板里的 📮 直达云端,说什么都能被鲸鲸收到</div></div>'+
2653
2653
  '<div class="box" style="margin-top:10px"><div class="tag">免责声明</div><div style="font-size:.76em;line-height:1.75;margin-top:6px;opacity:.8">本站为个人学习与娱乐项目,无商业运营、无任何支付功能。AI 功能需自备 API 密钥,生成内容仅供参考;数据保存在你的设备与私有云存档中,可随时一键清空。</div></div>'+
2654
- '<div class="box" style="margin-top:10px"><div class="tag">更新内容 · v1.2.2</div>'+
2654
+ '<div class="box" style="margin-top:10px"><div class="tag">更新内容 · v1.2.4</div>'+
2655
+ '<div style="font-size:.82em;line-height:1.8;margin-top:6px">✦ 对话输入修复:聊天打字时按「删除键」不再误触返回主页<br>✦ 战绩簿刷新:Ave Mujica 联动 1600 抽入账(累计 24,213 抽 · 726 彩 · 2.998%)</div></div>'+
2656
+ '<div class="box" style="margin-top:10px"><div class="tag">里程碑 · v1.2.3</div>'+
2657
+ '<div style="font-size:.82em;line-height:1.8;margin-top:6px">✦ 云端同步加固:开屏拉取 / 云端导入 / 登录校验 / 上传校验全部换用更稳的传输通道——弱网与受限环境也能把存档稳稳拉回来</div></div>'+
2658
+ '<div class="box" style="margin-top:10px"><div class="tag">里程碑 · v1.2.2</div>'+
2655
2659
  '<div style="font-size:.82em;line-height:1.8;margin-top:6px">✦ 本地密码本:@ 面板 🔐 · 只存本机、主口令加密、永不上云<br>✦ 收件箱:意见与战绩直达站内,主人专属(📬)<br>✦ AI 推理调节:对话页 ⚙ 新增 推理强度 / 温度 / 上限<br>✦ 账本余额校准:「💳 实际余额」自己填,主页余额同步跟动</div></div>'+
2656
2660
  '<div class="box" style="margin-top:10px"><div class="tag">里程碑 · v1.2.1</div>'+
2657
2661
  '<div style="font-size:.82em;line-height:1.8;margin-top:6px">✦ 意见箱上岗:@ 面板 📮 写信直达云端信箱,鲸鲸定期收信<br>✦ 一键报备:寻访战绩直传云端;和 AI 聊一句自动打卡<br>✦ API Key 加密保存:密文落盘、聊天照常<br>✦ 版本哨兵:新版上线自动提醒「点此刷新更新」<br>✦ 公开招募下线(九宫格重排 01-09)· 免责声明上站</div></div>'+
@@ -2895,6 +2899,8 @@ document.addEventListener('click',function(e){
2895
2899
 
2896
2900
  /* ================= KEYBOARD ================= */
2897
2901
  document.addEventListener('keydown',function(e){
2902
+ var _tg=e&&e.target,_tt=_tg&&_tg.tagName?_tg.tagName.toUpperCase():'';
2903
+ if(_tt==='INPUT'||_tt==='TEXTAREA'||(_tg&&_tg.isContentEditable)){return;}
2898
2904
  if($('#view').classList.contains('on')){
2899
2905
  if(e.key==='Escape'||e.key==='Backspace'){e.preventDefault();closeView()}
2900
2906
  return;
@@ -2991,7 +2997,7 @@ boot();
2991
2997
  (function(){
2992
2998
  var B=document.getElementById('petB'),bub=document.getElementById('petBub'),txt=document.getElementById('petTxt');
2993
2999
  if(!B)return;
2994
- var L=['鲸鲸~','主人~','捏到了!再捏一下嘛','今日宜抽卡','小鱼干 +1!','BUILD v1.2.2 已就位','账单同步了吗?','过场动画,好看吧?','晚安前记得说晚安哦','鲸鲸在看家…','要摸摸头吗?','别熬夜啦,主人'];
3000
+ var L=['鲸鲸~','主人~','捏到了!再捏一下嘛','今日宜抽卡','小鱼干 +1!','BUILD v1.2.4 已就位','账单同步了吗?','过场动画,好看吧?','晚安前记得说晚安哦','鲸鲸在看家…','要摸摸头吗?','别熬夜啦,主人'];
2995
3001
  var last=-1,ht=0;
2996
3002
  function say(){
2997
3003
  var i;do{i=Math.floor(Math.random()*L.length)}while(i===last);
@@ -3026,7 +3032,7 @@ boot();
3026
3032
  setInterval(function(){if(document.visibilityState==='visible')say()},36000);
3027
3033
  })();
3028
3034
  </script>
3029
- <div style="position:fixed;left:10px;bottom:5px;font-size:9px;letter-spacing:.14em;color:#4cc9ff;opacity:.5;z-index:45;font-family:ui-monospace,Menlo,monospace;pointer-events:none">BUILD v1.2.2</div>
3035
+ <div style="position:fixed;left:10px;bottom:5px;font-size:9px;letter-spacing:.14em;color:#4cc9ff;opacity:.5;z-index:45;font-family:ui-monospace,Menlo,monospace;pointer-events:none">BUILD v1.2.4</div>
3030
3036
 
3031
3037
  <!-- ===== SYSTEM LOGIN 云存档 ===== -->
3032
3038
  <script>
@@ -3131,17 +3137,17 @@ boot();
3131
3137
  wxhr(url(),JSON.stringify({v:1,u:acct.u,c:acct.c||0,t:t,data:snap()}),function(){st('✔ 已上传 · 后台校验…');setTimeout(function(){verify(t)},600);});
3132
3138
  }
3133
3139
  function verify(t){
3134
- fetch(url()+'?ts='+Date.now(),{cache:'no-store'}).then(function(r){return r.text()}).then(function(x){
3140
+ var x2=new XMLHttpRequest();x2.open('GET',url()+'?ts='+Date.now(),true);x2.timeout=20000;x2.onload=function(){try{var x=x2.responseText;
3135
3141
  x=(x||'').replace(/=$/,'');
3136
3142
  try{var rb=JSON.parse(x);if(rb.t===t){st('✔ 已同步 '+clock());return;}}catch(e){}
3137
3143
  if(!window.__pv){window.__pv=1;setTimeout(function(){push(1);},800);}
3138
3144
  else{window.__pv=0;st('⚠ 上传好像没送达(此浏览器限制跨域)——数据还在本机,可换 Safari 或用存档码');}
3139
- }).catch(function(){st('⚠ 校验失败(可能网络受限)');});
3145
+ }catch(e){st('⚠ 校验失败(可能网络受限)');}};x2.onerror=x2.ontimeout=function(){st('⚠ 校验失败(可能网络受限)');};x2.send();
3140
3146
  }
3141
3147
  function pull(manual){
3142
3148
  if(!acct||!acct.k)return;
3143
3149
  if(manual)st('↻ 同步中…');
3144
- fetch(url()+'?ts='+Date.now(),{cache:'no-store'}).then(function(r){return r.text()}).then(function(x){
3150
+ var x2=new XMLHttpRequest();x2.open('GET',url()+'?ts='+Date.now(),true);x2.timeout=20000;x2.onload=function(){try{var x=x2.responseText;
3145
3151
  x=(x||'').replace(/=$/,'');
3146
3152
  if(!x){if(manual)st('☁ 云端还没有存档——点「云端上传」把本机数据传上去');return;}
3147
3153
  var rb;try{rb=JSON.parse(x)}catch(e){st('⚠ 云端数据格式异常');return;}
@@ -3156,7 +3162,7 @@ boot();
3156
3162
  st(same2?'✔ 已是最新 '+clock():'☁ 云端比本机旧——点「云端上传」可覆盖云端');
3157
3163
  }
3158
3164
  else{st('✔ 已是云端最新');}
3159
- }).catch(function(){st('⚠ 云端连接失败');});
3165
+ }catch(e){st('⚠ 云端数据格式异常');}};x2.onerror=x2.ontimeout=function(){st('⚠ 云端连接失败');};x2.send();
3160
3166
  }
3161
3167
  function logout(){localStorage.removeItem(LS);acct=null;}
3162
3168
  var CSS='.acWrap{position:fixed;inset:0;z-index:9998;background:rgba(3,6,14,.66);display:none;align-items:center;justify-content:center}.acWrap.on{display:flex}'+
@@ -3211,7 +3217,7 @@ boot();
3211
3217
  st('✦ 仓库已创建,正在上传本机数据…');render();push();return;
3212
3218
  }
3213
3219
  st('↻ 查找云端仓库…');
3214
- fetch(BASE+k+'?ts='+Date.now(),{cache:'no-store'}).then(function(r){return r.text()}).then(function(x){
3220
+ var x3=new XMLHttpRequest();x3.open('GET',BASE+k+'?ts='+Date.now(),true);x3.timeout=20000;x3.onload=function(){try{var x=x3.responseText;
3215
3221
  x=(x||'').replace(/=$/,'');
3216
3222
  if(x&&x.length>2){
3217
3223
  var rb=null;try{rb=JSON.parse(x)}catch(e){}if(!rb){acct=null;localStorage.removeItem(LS);st('⚠ 云端数据异常——没敢覆盖');return;}
@@ -3222,7 +3228,7 @@ boot();
3222
3228
  b.setAttribute('data-mode','create');b.textContent='✦ 没找到仓库——点此以本机数据创建';
3223
3229
  st('(如果是新账号,创建后本机数据会上传成初始存档)');
3224
3230
  }
3225
- }).catch(function(){st('⚠ 云端连接失败,稍后再试');});
3231
+ }catch(e){st('⚠ 云端连接失败,稍后再试');}};x3.onerror=x3.ontimeout=function(){st('⚠ 云端连接失败,稍后再试');};x3.send();
3226
3232
  };
3227
3233
  var pl=g('#acPull');if(pl)pl.onclick=function(){pull(1)};
3228
3234
  var pu=g('#acPush');if(pu)pu.onclick=function(){if(acct&&acct.k)push();};
@@ -3283,7 +3289,7 @@ boot();
3283
3289
  btn.addEventListener('click',open);
3284
3290
  setInterval(function(){if(acct&&acct.k){var c=canon();if(c!==lastSnap){lastSnap=c;clearTimeout(pq);pq=setTimeout(push,900);}}},2000);
3285
3291
  if(acct&&acct.k){setTimeout(function(){pull(false);},250);}
3286
- var APP_VER='1.2.2';
3292
+ var APP_VER='1.2.4';
3287
3293
  function _verCmp(a,b){var x=String(a).split('.'),y=String(b).split('.');for(var i=0;i<3;i++){var p=parseInt(x[i]||'0',10),q=parseInt(y[i]||'0',10);if(p!==q)return p-q}return 0}
3288
3294
  function chkVer(){
3289
3295
  try{
package/ledger.html CHANGED
@@ -1137,17 +1137,17 @@ window.LEDGER_BACKUP = [];
1137
1137
  wxhr(url(),JSON.stringify({v:1,u:acct.u,c:acct.c||0,t:t,data:snap()}),function(){st('✔ 已上传 · 后台校验…');setTimeout(function(){verify(t)},600);});
1138
1138
  }
1139
1139
  function verify(t){
1140
- fetch(url()+'?ts='+Date.now(),{cache:'no-store'}).then(function(r){return r.text()}).then(function(x){
1140
+ var x2=new XMLHttpRequest();x2.open('GET',url()+'?ts='+Date.now(),true);x2.timeout=20000;x2.onload=function(){try{var x=x2.responseText;
1141
1141
  x=(x||'').replace(/=$/,'');
1142
1142
  try{var rb=JSON.parse(x);if(rb.t===t){st('✔ 已同步 '+clock());return;}}catch(e){}
1143
1143
  if(!window.__pv){window.__pv=1;setTimeout(function(){push(1);},800);}
1144
1144
  else{window.__pv=0;st('⚠ 上传好像没送达(此浏览器限制跨域)——数据还在本机,可换 Safari 或用存档码');}
1145
- }).catch(function(){st('⚠ 校验失败(可能网络受限)');});
1145
+ }catch(e){st('⚠ 校验失败(可能网络受限)');}};x2.onerror=x2.ontimeout=function(){st('⚠ 校验失败(可能网络受限)');};x2.send();
1146
1146
  }
1147
1147
  function pull(manual){
1148
1148
  if(!acct||!acct.k)return;
1149
1149
  if(manual)st('↻ 同步中…');
1150
- fetch(url()+'?ts='+Date.now(),{cache:'no-store'}).then(function(r){return r.text()}).then(function(x){
1150
+ var x2=new XMLHttpRequest();x2.open('GET',url()+'?ts='+Date.now(),true);x2.timeout=20000;x2.onload=function(){try{var x=x2.responseText;
1151
1151
  x=(x||'').replace(/=$/,'');
1152
1152
  if(!x){if(manual)st('☁ 云端还没有存档——点「云端上传」把本机数据传上去');return;}
1153
1153
  var rb;try{rb=JSON.parse(x)}catch(e){st('⚠ 云端数据格式异常');return;}
@@ -1162,7 +1162,7 @@ window.LEDGER_BACKUP = [];
1162
1162
  st(same2?'✔ 已是最新 '+clock():'☁ 云端比本机旧——点「云端上传」可覆盖云端');
1163
1163
  }
1164
1164
  else{st('✔ 已是云端最新');}
1165
- }).catch(function(){st('⚠ 云端连接失败');});
1165
+ }catch(e){st('⚠ 云端数据格式异常');}};x2.onerror=x2.ontimeout=function(){st('⚠ 云端连接失败');};x2.send();
1166
1166
  }
1167
1167
  function logout(){localStorage.removeItem(LS);acct=null;}
1168
1168
  var CSS='.acWrap{position:fixed;inset:0;z-index:9998;background:rgba(3,6,14,.66);display:none;align-items:center;justify-content:center}.acWrap.on{display:flex}'+
@@ -1217,7 +1217,7 @@ window.LEDGER_BACKUP = [];
1217
1217
  st('✦ 仓库已创建,正在上传本机数据…');render();push();return;
1218
1218
  }
1219
1219
  st('↻ 查找云端仓库…');
1220
- fetch(BASE+k+'?ts='+Date.now(),{cache:'no-store'}).then(function(r){return r.text()}).then(function(x){
1220
+ var x3=new XMLHttpRequest();x3.open('GET',BASE+k+'?ts='+Date.now(),true);x3.timeout=20000;x3.onload=function(){try{var x=x3.responseText;
1221
1221
  x=(x||'').replace(/=$/,'');
1222
1222
  if(x&&x.length>2){
1223
1223
  var rb=null;try{rb=JSON.parse(x)}catch(e){}if(!rb){acct=null;localStorage.removeItem(LS);st('⚠ 云端数据异常——没敢覆盖');return;}
@@ -1228,7 +1228,7 @@ window.LEDGER_BACKUP = [];
1228
1228
  b.setAttribute('data-mode','create');b.textContent='✦ 没找到仓库——点此以本机数据创建';
1229
1229
  st('(如果是新账号,创建后本机数据会上传成初始存档)');
1230
1230
  }
1231
- }).catch(function(){st('⚠ 云端连接失败,稍后再试');});
1231
+ }catch(e){st('⚠ 云端连接失败,稍后再试');}};x3.onerror=x3.ontimeout=function(){st('⚠ 云端连接失败,稍后再试');};x3.send();
1232
1232
  };
1233
1233
  var pl=g('#acPull');if(pl)pl.onclick=function(){pull(1)};
1234
1234
  var pu=g('#acPush');if(pu)pu.onclick=function(){if(acct&&acct.k)push();};
@@ -1289,7 +1289,7 @@ window.LEDGER_BACKUP = [];
1289
1289
  btn.addEventListener('click',open);
1290
1290
  setInterval(function(){if(acct&&acct.k){var c=canon();if(c!==lastSnap){lastSnap=c;clearTimeout(pq);pq=setTimeout(push,900);}}},2000);
1291
1291
  if(acct&&acct.k){setTimeout(function(){pull(false);},250);}
1292
- var APP_VER='1.2.2';
1292
+ var APP_VER='1.2.4';
1293
1293
  function _verCmp(a,b){var x=String(a).split('.'),y=String(b).split('.');for(var i=0;i<3;i++){var p=parseInt(x[i]||'0',10),q=parseInt(y[i]||'0',10);if(p!==q)return p-q}return 0}
1294
1294
  function chkVer(){
1295
1295
  try{
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prts-moonlit",
3
- "version": "1.2.2",
3
+ "version": "1.2.4",
4
4
  "description": "ARKNIGHTS x P3R Moonlit PRTS terminal (personal toy site)",
5
5
  "license": "MIT"
6
6
  }