支持所有游戏按房间范围配置和运行

This commit is contained in:
pllx
2026-04-29 14:37:28 +08:00
parent 3672140987
commit 1607f57e3c
37 changed files with 1033 additions and 255 deletions
+30 -1
View File
@@ -9,6 +9,7 @@ let fishToken = null;
let autoFishing = false;
let autoFishCooldownTimer = null;
let autoFishCooldownCountdown = null;
let fishingCastPending = false;
/**
* 读取 CSRF Token。
@@ -199,6 +200,25 @@ function setFishingButton(text, disabled) {
button.disabled = disabled;
}
/**
* 判断当前是否已有进行中的钓鱼会话。
*
* 说明:
* - 手动点击抛竿后,在等待浮漂、等待点击、等待自动收竿期间都视为会话未结束。
* - 购买自动钓鱼卡后的自动接管,也必须避开这些中间态,避免重复抛竿。
*
* @returns {boolean}
*/
function hasActiveFishingSession() {
return Boolean(
fishingCastPending ||
fishToken ||
fishingTimer ||
fishingReelTimeout ||
document.getElementById("fishing-bobber"),
);
}
/**
* 启动自动钓鱼冷却倒计时(基于时间戳,不受浏览器后台节流影响)。
*
@@ -363,6 +383,11 @@ function hideAutoFishStopButton() {
* @returns {Promise<void>}
*/
export async function startFishing() {
if (hasActiveFishingSession()) {
return;
}
fishingCastPending = true;
setFishingButton("🎣 抛竿中...", true);
try {
@@ -381,6 +406,7 @@ export async function startFishing() {
return;
}
// 抛竿成功后进入正式钓鱼会话,由 token / timer 接管后续状态。
fishToken = data.token;
autoFishing = Boolean(data.auto_fishing);
appendFishingMessage(`<span style="color:#2563eb;font-weight:bold;">🎣【钓鱼】</span>${escapeHtml(data.message)}<span class="msg-time">(${timeText()})</span>`);
@@ -426,6 +452,8 @@ export async function startFishing() {
window.chatDialog?.alert?.(`网络错误:${error.message}`, "网络异常", "#cc4444");
removeBobber();
setFishingButton("🎣 钓鱼", false);
} finally {
fishingCastPending = false;
}
}
@@ -547,6 +575,7 @@ function clearAutoFishingTimers() {
*/
export function resetFishingBtn() {
autoFishing = false;
fishingCastPending = false;
clearAutoFishingTimers();
hideAutoFishStopButton();
@@ -573,7 +602,7 @@ export function checkAndAutoStartFishing() {
const minutesLeft = Number(window.chatContext?.autoFishingMinutesLeft || 0);
const initialCooldown = Number(window.chatContext?.fishingCooldownSeconds || 0);
if (minutesLeft <= 0 || autoFishing) {
if (minutesLeft <= 0 || autoFishing || hasActiveFishingSession()) {
return;
}