修改逻辑可能适用于其他ORCSOFT游戏

 

## 文件 1:`system/gamesystem/SysMacro.ks`

### 修改位置:`[¥]` 宏内 `[if exp="f.音声再生"]` 块

```diff
 [if exp="f.音声再生"]
- [ ws buf=&global.CHARA1_BUF cond="kag.autoMode && kag.se[global.CHARA1_BUF].volume2!=0"]
- [ ws buf=&global.CHARA2_BUF cond="kag.autoMode && kag.se[global.CHARA2_BUF].volume2!=0"]
- [ fadeoutse buf=&global.CHARA1_BUF time=100]
- [ fadeoutse buf=&global.CHARA2_BUF time=100]
+ [if exp="kag.autoMode"]
+ [ ws buf=&global.CHARA1_BUF cond="kag.se[global.CHARA1_BUF].volume2!=0"]
+ [ ws buf=&global.CHARA2_BUF cond="kag.se[global.CHARA2_BUF].volume2!=0"]
+ [endif]
 ;//---------------------
```

- 删除了 2 行 `[fadeoutse]`(直接淡出停止语音)
- 把 `[ws]`(等待语音结束)用 `[if exp="kag.autoMode"]` 包裹,确保只在自动模式的点击推进时才等待语音,不会在手动模式误触发

---

## 文件 2:`system/CustomMainWindow.tjs`

### 修改位置:`hideHistory()` 函数

```diff
 function hideHistory() {
+    var wasShowing = historyShowing;
     historyLayer.dispUninit();
     historyShowing = false;
     if(typeof this.showHistoryMenuItem != "undefined")
         showHistoryMenuItem.checked = false;
     setMenuAccessibleAll();
     lastHistoryHiddenTick = System.getTickCount();
     conductor.trigger('history');

-    if(!tf.設定中) {
+    if(wasShowing && !tf.設定中) {
         for(var i=0; i<kag.se.count; i++) {
             if(i==global.CHARA1_BUF || i==global.CHARA2_BUF)
                 kag.se[i].stop();
             else
                 kag.se[i].volume = 100;
         }
     }
     showMessageLayerByUser();
 }
```

- 加了一行 `var wasShowing = historyShowing`(在 `historyShowing = false` 之前保存状态)
- 把 `if(!tf.設定中)` 改为 `if(wasShowing && !tf.設定中)`
- 这样 `hideHistory()` 只有**在真正关闭历史记录窗口时**才会停语音,不会被普通文本推进时误触发

| 中断源 | 触发条件 | 对应修复 |
|--------|---------|---------|
| `[¥]` 中的 `fadeoutse` | 点击推进文本时直接淡出 | `SysMacro.ks` 删掉这2行 |
| `defaultRunHandler()` → `hideHistory()` | 每次页面等待→恢复时**无条件**停语音 | `CustomMainWindow.tjs` 加 `wasShowing` 守卫 |

2026-07-04 22:35:23
分享
登陆 后方可回复, 如果您还没有账号请先 注册