dsh-boot-suite 2.15.15 → 2.15.16
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/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,8 @@
|
|
|
1
|
+
## [2.15.16] — 2026-11-02
|
|
2
|
+
|
|
3
|
+
- **掉线彩蛋不再硬切配音**:如果掉线正好触发在某句配音播放期间,先等这句播完(含中文字幕)再弹出彩蛋,不会出现「语音没说完、字幕先消失」;有 0.9s 兜底超时与动画结束保护。
|
|
4
|
+
- 版本号 2.15.16,构建号 cw-64。
|
|
5
|
+
|
|
1
6
|
## [2.15.15] — 2026-11-02
|
|
2
7
|
|
|
3
8
|
- **重连提示音接入插件配音效果**:`voice-reconnect` 现在与其余配音一样走「配音效果」(AI 机械音/机器人/无线电/老电视/低沉),不再是无效果的原声。
|
package/lib/client.js
CHANGED
|
@@ -269,7 +269,7 @@ window.__ModuleLoader__.load({
|
|
|
269
269
|
—— 桌面端走浏览器半侧自举时没有 1,就靠这一条
|
|
270
270
|
3) 下面这个常量:两份都没拿到时的兜底,别让面板显示 undefined
|
|
271
271
|
版本号本身只在 lib/index.js 里读一次,这里不重复维护。 */
|
|
272
|
-
var FALLBACK_VERSION = '2.15.
|
|
272
|
+
var FALLBACK_VERSION = '2.15.16'
|
|
273
273
|
/* 手动选包成功后置 true:让还在后台跑的“浏览器下载监听”不要再弹第二次更新器 */
|
|
274
274
|
var __manualUpdateApplied = false
|
|
275
275
|
function readInjectedVersion() {
|
|
@@ -2022,7 +2022,7 @@ window.__ModuleLoader__.load({
|
|
|
2022
2022
|
/* 每次改客户端就把这个号 +1。
|
|
2023
2023
|
有了它在控制台一眼就能判断"浏览器里跑的是不是最新那份" ——
|
|
2024
2024
|
排查问题时,分不清是代码问题还是旧包,会白猜一轮。 */
|
|
2025
|
-
var BUILD = 'cw-
|
|
2025
|
+
var BUILD = 'cw-64'
|
|
2026
2026
|
|
|
2027
2027
|
function log() {
|
|
2028
2028
|
try {
|
package/package.json
CHANGED
|
@@ -179,7 +179,7 @@ $('prevFrame').onclick=()=>{pause();seek(t-1/60)};$('nextFrame').onclick=()=>{pa
|
|
|
179
179
|
var st=show?((cfg.voice&&cfg.voice.subs&&cfg.voice.subs.line4)||''):'';
|
|
180
180
|
renderVoiceRow(eggRow,eggSub,vh,st,show);
|
|
181
181
|
}
|
|
182
|
-
var shown=false,done=false,rolled=false,v3Ended=false,waitStart=0,v4Timer=null,replayTimer=null,eggShownAt=0;
|
|
182
|
+
var shown=false,done=false,rolled=false,v3Ended=false,waitStart=0,v4Timer=null,replayTimer=null,eggShownAt=0,eggWait=false,eggWaitTimer=null;
|
|
183
183
|
var hit=q.get('egg')==='1'||Math.random()<EGG_CHANCE;
|
|
184
184
|
function stopVoice(){voiceDuck(false);activeVoice=null;window.__DSH_ACTIVE_VOICE__='';window.__DSH_CUE__='';window.__DSH_CUE_UNTIL__=0;cueGate=false;if(cueFailTimer){clearTimeout(cueFailTimer);cueFailTimer=null}Object.keys(aud).forEach(function(k){var a=aud[k];try{a.pause();a.currentTime=0}catch(e){}});if(v4Timer){clearTimeout(v4Timer);v4Timer=null}if(replayTimer){clearTimeout(replayTimer);replayTimer=null}}
|
|
185
185
|
function playKey(k,offset){var a=aud[k];if(a&&!played[k]){played[k]=true;attachVoiceFx(k);try{a.currentTime=Math.max(0,offset||0);a.play().catch(function(){});activeVoice=k;window.__DSH_ACTIVE_VOICE__=k}catch(e){}voiceDuck(true);}}
|
|
@@ -193,7 +193,7 @@ $('prevFrame').onclick=()=>{pause();seek(t-1/60)};$('nextFrame').onclick=()=>{pa
|
|
|
193
193
|
});
|
|
194
194
|
}
|
|
195
195
|
function showEgg(){
|
|
196
|
-
if(shown||done)return; shown=true; rolled=true; playing=false;
|
|
196
|
+
if(shown||done)return; shown=true; rolled=true; playing=false;eggWait=false;if(eggWaitTimer){clearTimeout(eggWaitTimer);eggWaitTimer=null}
|
|
197
197
|
stopVoice();
|
|
198
198
|
bgmSig(false);
|
|
199
199
|
eggEl.classList.add('on'); eggEl.setAttribute('aria-hidden','false'); try{document.body.classList.add('egg-on')}catch(e){}
|
|
@@ -221,7 +221,21 @@ $('prevFrame').onclick=()=>{pause();seek(t-1/60)};$('nextFrame').onclick=()=>{pa
|
|
|
221
221
|
(function watch(){
|
|
222
222
|
if(!done){
|
|
223
223
|
if(playing&&!cueGate){sched.forEach(function(e){if(t>=e[0])playKey(e[1]);});}
|
|
224
|
-
|
|
224
|
+
/* v2.15.16:掉线彩蛋若正好赶上某句配音,先等这句播完再弹出,避免语音和字幕被硬切断(有兜底超时)。 */
|
|
225
|
+
if(!rolled&&playing&&!shown&&t>=eggAt){
|
|
226
|
+
if(!hit){rolled=true;}
|
|
227
|
+
else if(!eggWait&&activeVoice&&aud[activeVoice]&&!aud[activeVoice].paused&&!aud[activeVoice].ended){
|
|
228
|
+
var eggA=aud[activeVoice], eggLeft=(+eggA.duration||0)-(+eggA.currentTime||0);
|
|
229
|
+
if(isFinite(eggLeft)&&eggLeft>0.05&&t+eggLeft<=cfg.duration-0.25){
|
|
230
|
+
eggWait=true;
|
|
231
|
+
(function(a){
|
|
232
|
+
var fired=false,fin=function(){if(fired)return;fired=true;eggWait=false;eggWaitTimer=null;rolled=true;showEgg();};
|
|
233
|
+
a.addEventListener('ended',fin,{once:true});
|
|
234
|
+
eggWaitTimer=setTimeout(fin,eggLeft*1000+900);
|
|
235
|
+
})(eggA);
|
|
236
|
+
} else {rolled=true;showEgg();}
|
|
237
|
+
} else if(!eggWait){rolled=true;showEgg();}
|
|
238
|
+
}
|
|
225
239
|
if(shown){var elap=(window.__EGG_T!=null?window.__EGG_T:(performance.now()-eggShownAt)/1000);eggVoice(elap-eggLineAt);}
|
|
226
240
|
if(!shown&&t>=cfg.duration-0.02){if(!waitStart){waitStart=performance.now();window.__WAIT_START__=waitStart;}var waitVoice=(!mute&&aud.orig3&&!v3Ended&&(performance.now()-waitStart<4000));if(!waitVoice)flashDone();}
|
|
227
241
|
}
|
package/test/smoke-package.mjs
CHANGED
|
@@ -115,4 +115,7 @@ if (!bigfishApp.includes('cueFailTimer')) throw new Error('重连提示音缺少
|
|
|
115
115
|
if (!bigfishApp.includes("attachVoiceFx('reconnect')")) throw new Error('重连提示音未接入配音效果')
|
|
116
116
|
if (!bigfishApp.includes("[20.0,'line3',3.300]")) throw new Error('app.js 默认时间线未把 line3 顺延到 20.0s')
|
|
117
117
|
if (!bigfishCfg.includes("[20.0,'line3',3.300]")) throw new Error('config.js 时间线未把 line3 顺延到 20.0s')
|
|
118
|
+
/* v2.15.16:掉线彩蛋等当前配音播完再弹出,不硬切语音/字幕 */
|
|
119
|
+
if (!bigfishApp.includes('掉线彩蛋若正好赶上某句配音')) throw new Error('app.js 缺少彩蛋等待当前配音播完的逻辑')
|
|
120
|
+
if (!bigfishApp.includes('eggWait=true')) throw new Error('app.js 缺少 eggWait 等待状态')
|
|
118
121
|
console.log('ok package.json version=' + pkg.version + ',无 BOM,关键文件齐全(含更新前回滚 checkpoint)');
|
|
@@ -463,7 +463,7 @@ ok(intervals.every((t) => t.cleared) || intervals.length === 0, '旧的 interval
|
|
|
463
463
|
intervals.map((t) => (t.cleared ? 'cleared' : 'live')).join(','))
|
|
464
464
|
|
|
465
465
|
console.log('\n=== ⑦ v2.13.0 测试钩子 / BUILD ===')
|
|
466
|
-
ok(mod.__BUILD === 'cw-
|
|
466
|
+
ok(mod.__BUILD === 'cw-64', '__BUILD = cw-64(排查浏览器跑的是不是新包)', String(mod.__BUILD))
|
|
467
467
|
ok(mod.__VIDEO_ID === 'dsh-cw-video', '__VIDEO_ID = dsh-cw-video', String(mod.__VIDEO_ID))
|
|
468
468
|
ok(typeof mod.__startShuffle === 'function', '__startShuffle 导出')
|
|
469
469
|
ok(typeof mod.__stopShuffle === 'function', '__stopShuffle 导出')
|