Commit Graph

75 Commits

Author SHA1 Message Date
303c5e2a60 功能:自动钓鱼卡持续循环钓鱼
有自动钓鱼卡时:
- 点一次「钓鱼」自动循环:抛竿→收竿→冷却→抛竿...
- 冷却期间按钮显示倒计时「 冷却 Xs」
- 屏幕右下角显示「🛑 停止自动钓鱼」悬浮按钮
- 点击停止或卡到期后自动退出循环
- 出错时也自动停止循环
2026-03-01 16:26:15 +08:00
bd1e247fcf 优化:浮漂下沉动画延长至 1.5s,视觉更自然 2026-03-01 16:22:42 +08:00
63679a622f 功能:随机浮漂钓鱼防挂机 + 商店自动钓鱼卡
核心变更:
1. FishingController 重写
   - cast(): 生成随机浮漂坐标(x/y%) + 一次性 token
   - reel(): 必须携带 token 才能收竿(防脚本绕过)
   - 检测自动钓鱼卡剩余时间并返回给前端

2. 前端钓鱼逻辑重写
   - 抛竿后显示随机位置 🪝 浮漂动画(全屏飘动)
   - 鱼上钩时浮漂「下沉」动画,8秒内点击浮漂才能收竿
   - 超时未点击:鱼跑了,token 也失效
   - 持有自动钓鱼卡:自动点击,紫色提示剩余时间

3. 商店新增「🎣 自动钓鱼卡」分组
   - 3档:2h(800金)/8h(2500金)/24h(6000金)
   - 图标徽章显示剩余有效时间(紫色)
   - 购买后即时激活,无需手动操作

4. 数据库
   - shop_items.type 加 auto_fishing 枚举
   - shop_items.duration_minutes 新字段(分钟精度)
   - Seeder 写入 3 张卡数据

防挂机原理:按钮 → 浮漂随机位置,脚本无法固定坐标点击
2026-03-01 16:19:45 +08:00
58b63fa8d3 功能:大卡片/小卡片弹出时播放叮咚通知音
effect-sounds.js:
- 新增 ding() 函数:A5(880Hz) + E5(659Hz) 两音叮咚
  每音含基音×2.76铃铛泛音,快冲击+铃铛式衰减
  自动检查 chat_sound_muted 禁音标志
- 导出 ding 至返回对象,底部暴露 window.chatSound = {ding}

toast-notification.blade.php:
- chatToast.show() 中 appendChild 后调用 window.chatSound.ding()

scripts.blade.php:
- chatBanner.show() 开头调用 window.chatSound.ding()
2026-03-01 13:28:19 +08:00
dac7750fe1 功能:特效音效三项优化 + 禁音开关
音效改进(effect-sounds.js):
1. 雷电 - 三层合成更贴近真实:
   ①放电啪声(带通噪声 ~50ms)
   ②低频轰鸣(120→38Hz 扫频,快冲击 2s 衰减)
   ③极低频滚动余韵(55→22Hz,缓慢堆积 3.6s 长衰减)
2. 下雨 - 音量 0.40→0.15,时长与视觉效果统一(8000ms)
3. 下雪 - 移除风声,只保留五声音阶铃音(C/E/G/C)
   铃音加第二泛音(×2.76倍频)模拟真实铃铛共鸣感
   8次随机铃声分布在 10 秒内

禁音开关:
- input-bar.blade.php:悄悄话旁新增「🔇 禁音」复选框
- scripts.blade.php:toggleSoundMute() 函数,
  localStorage chat_sound_muted 持久化,
  DOMContentLoaded 恢复复选框状态
- effect-sounds.js:play() 先检查 chat_sound_muted 标志
2026-03-01 13:19:24 +08:00
3d7b86f06d 功能:奖励发放聊天室公告 + 右下角 Toast 通知卡片
后端(AdminCommandController::reward):
- 新增聊天室公开公告消息(系统公告,所有在场用户可见)
- 接收者私信附带 toast_notification 字段触发前端小卡片
- 公告文案:「🪙 [职务人] 向 [目标] 发放了 [N] 枚奖励金币!」

前端:
- 新建 chat/partials/toast-notification.blade.php:
  全局右下角 Toast 组件,window.chatToast.show() API
  支持 title/message/icon/color/duration/action 配置
  多条 Toast 从右下角向上堆叠,独立计时、独立关闭
- chat:message 事件监听中检测 toast_notification 字段,
  自动弹出右下角通知卡片(仅接收方可见)
- showFriendToast 迁移至 window.chatToast.show(),
  删除 80 行旧实现,代码量净减
- frame.blade.php 引入新 partial

DEVELOPMENT.md:
- 新增 §7.9 chatToast 完整文档(API、使用场景、迁移说明)
- 原 chatBanner 章节编号改为 §7.10
2026-03-01 12:15:18 +08:00
5a7d1565e5 修复:channels.php 移除 int 类型提示,改用强转比较防兼容性问题
int $id 类型提示在某些 PHP 版本下对字符串参数可能失败,
统一改为 (int) 强转比较,与 App.Models.User.{id} 写法一致。
2026-03-01 01:54:19 +08:00
7bae5e56ff 修复:私有频道改用数字 ID,解决中文用户名导致 Pusher 频道名非法
错误原因:Pusher 频道名只允许 [a-zA-Z0-9_\-=@,.],
中文用户名(如「超级舞魅」)用于 private-user.{username} 导致
PusherException: Invalid channel name。

修复方案(改用数字 ID):
- FriendAdded/FriendRemoved 构造加 toUserId 参数
- broadcastOn() 改为 PrivateChannel('user.' . $toUserId)
- FriendController 传入 $target->id / $targetUser->id
- channels.php 鉴权改为 'user.{id}',核对 $user->id 数字相等
- frame.blade.php chatContext 加 userId
- scripts.blade.php Echo.private 改用 userId 订阅
2026-03-01 01:41:04 +08:00
a44a9ce242 修复:回加好友成功后大卡片自动关闭
quickFriendAction 是 async 函数,await 完成后
检查按钮文字是否为 '',1.5 秒后调用 close() 关闭 banner。
2026-03-01 01:33:41 +08:00
f951ec428d 重构:聊天室所有 alert() 改为 window.chatDialog.alert()
scripts.blade.php 全部 21 处原生 alert() 替换:
- 成功类 → chatDialog.alert(..., '提示', '#16a34a')
- 失败/错误类 → chatDialog.alert(..., '操作失败', '#cc4444')
- 网络异常类 → chatDialog.alert(..., '网络异常', '#cc4444')
- 连接断开/踢出 → chatDialog.alert(..., '连接警告', '#b45309')
- 一般提示 → chatDialog.alert(..., '提示', '#336699')

DEVELOPMENT.md 新增 §7.9 window.chatBanner 使用文档
2026-03-01 01:32:20 +08:00
5c53b8cf2f 功能:window.chatBanner 全局大卡片公共组件
前端:
- window.chatBanner.show(options) 全局 API,完全自定义:
  icon/title/name/body/sub/gradient/titleColor/autoClose/buttons
- window.chatBanner.close(id) 关闭指定 banner
- showFriendBanner / showAppointmentBanner 均改用 chatBanner 实现
- setupBannerNotification() 监听私有+房间频道的 BannerNotification 事件

后端:
- BannerNotification 事件(ShouldBroadcastNow),支持 user/room 双目标
- BannerBroadcastController(仅超级管理员路由,三层中间件保护)
- 内容字段 strip_tags 净化防 XSS,按钮 action 白名单校验

安全:
- window.chatBanner.show() 被人控制台调用只影响自己,无法推给他人
- HTTP 入口 POST /admin/banner/broadcast 仅超管可访问
2026-03-01 01:28:23 +08:00
779179af01 功能:好友添加通知改为居中大卡弹窗(同任命公告风格)
FriendAdded:
- 互相好友 → 绿色渐变大卡 + '你们现在互为好友 🎊',5秒自动消失
- 单向添加 → 蓝绿渐变大卡 + [ 回加好友] + [稍后再说] 按钮,手动关闭

FriendRemoved:保留右下角 Toast 通知

效果复用 appoint-pop 弹出动画关键帧
2026-03-01 01:09:37 +08:00
212f7a0096 功能:好友悄悄话内嵌快捷操作链接
后端:
- notifyOnlineUser 生成带内联 <a> 标签的内容
- added 未互相 → 嵌入 ' 回加好友' 链接
- removed 互相  → 嵌入 '🗑️ 同步移除' 链接
- 链接调用全局 quickFriendAction(act, username, el)

前端:
- 新增 window.quickFriendAction() 全局函数
- 防重复点击(dataset.done 标记)
- 成功后更新链接文字 ' 已回加' / ' 已移除',不刷新页面
2026-03-01 01:03:10 +08:00
3c2038e8fe 优化:好友通知弹窗根据互相状态显示不同内容
FriendAdded 事件:
- 新增 hasAddedBack 字段(B 是否已回加 A)
- Toast:已互相好友 → '你们现在互为好友 🎉'
- Toast:未回加 → '但你还没有添加对方为好友' + [ 回加] 一键操作按钮

FriendRemoved 事件:
- 新增 hadAddedBack 字段(之前是否互相好友)
- Toast:之前互相好友 → 提示 + [🗑️ 同步移除] 一键操作按钮
- Toast:单向好友 → 简单通知,无操作按钮

Toast 改进:
- 右上角 × 关闭按钮
- 快捷操作按钮支持 fetch 直接请求
- 完成后显示结果并自动关闭,延时改为 8 秒
2026-03-01 00:54:10 +08:00
700ab9def4 feat: 好友系统全实现
后端:
- FriendController:add/remove/status/index 四个接口
- FriendAdded / FriendRemoved 广播事件(私有频道)
- channels.php 注册 user.{username} 私有频道鉴权
- routes/web.php 注册好友路由
- ChatController::init() 修复 DutyLog 在 return 后执行的 bug
- ChatController::notifyFriendsOnline() 上线时悄悄话通知好友

前端:
- user-actions:写私信 → 加好友/删好友按钮(动态状态)
- toggleFriend() 方法 + fetchUser 后加载好友状态
- scripts:监听私有频道 FriendAdded/FriendRemoved
- showFriendToast() 右下角浮窗通知(5秒自动消失)
- global-dialog 加 fdSlideIn 动画
2026-03-01 00:48:51 +08:00
91b569ffd3 修复:离开按钮 confirm 弹窗在 Chrome 闪烁消失
将 beforeunload 改为 pagehide 事件:
- pagehide 在页面关闭/刷新时触发,但不会弹原生「离开网站」确认框
- 与原生 confirm() 不产生冲突,Chrome/Edge 行为一致
- leaveRoom() 设 _manualLeave 标记,pagehide 里不重复发 beacon
2026-03-01 00:18:46 +08:00
0f5b8a4f52 修复:Chrome 点击离开时出现原生"离开网站"弹窗闪烁
主动调用 remove 移除 beforeunload 监听后再导航,
Chrome 不再触发原生确认框,Edge 行为不变
2026-03-01 00:16:34 +08:00
1caaec5601 修复:关闭浏览器时 leave 不触发导致勤务日志不结算
- 新增 sendLeaveBeacon(),使用 navigator.sendBeacon 发送 leave 请求
- beforeunload 事件:关闭标签/浏览器/刷新均自动结算
- visibilitychange 事件:切到后台 30 秒后自动结算,切回来取消
- sendBeacon 比 fetch 更可靠,浏览器关闭时也能确保请求发出
2026-03-01 00:12:47 +08:00
5f30220609 feat: 任命/撤销通知系统 + 用户名片UI优化
- 任命/撤销事件增加 type 字段区分类型
- 任命:全屏礼花 + 紫色弹窗 + 紫色系统消息
- 撤销:灰色弹窗 + 灰色系统消息,无礼花
- 消息分发:操作者/被操作者显示在私聊面板,其他人显示在公屏
- 系统消息加随机鼓励语(各5条轮换)
- ChatStateService 修复 Redis key 前缀扫描问题(getAllActiveRoomIds)
- 用户名片折叠优化:管理员视野、职务履历均可折叠
- 管理操作 + 职务操作合并为「🔧 管理操作」折叠区
- 悄悄话改为「🎁 送礼物」按钮,礼物面板内联展开
2026-02-28 23:44:38 +08:00
3f5d0e9539 功能:自动存点通知实现滚动替换,新消息到来时自动删除旧的通知,保持包厢窗口整洁 2026-02-28 11:56:42 +08:00
0ff64d2737 修复:增强 scripts.blade.php 的 JS 健壮性,解决因 DOM 元素缺失导致的执行中断及变量未初始化问题 2026-02-28 11:22:18 +08:00
28d402d204 修复:重写本地清屏逻辑,使用 localStorage 记录拉取游标,避免进房带历史功能导致清屏失效 2026-02-28 11:20:34 +08:00
cb2e962116 优化:与AI聊天不再阻塞全局发言锁,允许在AI思考期间继续在公屏聊天 2026-02-28 11:12:51 +08:00
e7436e7898 修复:与AI聊天或其他特定错误拦截后,发送消息按钮永久失灵的问题 2026-02-27 17:45:18 +08:00
f37530fa0e UI:聊天消息移除硬编码 font-size,统一继承用户设置的字体大小 2026-02-27 16:33:40 +08:00
6a8ba4fbc8 功能:单次特效卡支持赠送——送礼弹框、广播给指定用户/全员、公屏系统消息、购买后关闭商店展示特效 2026-02-27 16:19:21 +08:00
8ac540c65b 重构:商店从右侧 Tab 移至工具栏按钮弹窗,新增 2 列网格卡片布局 2026-02-27 16:06:15 +08:00
9c8f7b1a95 UI: 商店面板重新设计——紧凑卡片、渐变配色、悬浮特效、绝对定位适配窄侧边栏 2026-02-27 16:02:22 +08:00
7fb86bfe21 Feat: 商店功能完整实现(单次特效卡888/周卡8888/改名卡5000,含购买、周卡覆盖、改名黑名单) 2026-02-27 15:57:12 +08:00
094181b826 Fix: 防止Enter重复发送(IME输入法防穿透+_isSending防重入锁) 2026-02-27 14:53:45 +08:00
a3d0d6cec5 Feat: 输入栏增加字号选择器,自动应用到聊天窗口并持久化到localStorage 2026-02-27 14:46:49 +08:00
4668c163aa Feat: 管理员进入聊天室自动触发烟花+公屏欢迎公告 2026-02-27 14:34:04 +08:00
709e0d4975 Feat: 实现全屏特效系统(烟花/下雨/雷电),管理员一键触发全房间广播 2026-02-27 14:14:35 +08:00
adab033afc Feat: 系统播报用户头像改为像素军号图标(钓鱼播报/星海小博士/送花播报等) 2026-02-27 13:48:18 +08:00
4b231c19f7 Fix: 升级播报改为金色左边框轻量样式,与站长公告红框区分开 2026-02-27 13:44:24 +08:00
5d1e7e26e2 Feat: 鱼上钩通知中的[拉竿]文字支持点击触发拉竿操作 2026-02-27 13:03:05 +08:00
f9a1c7f6bc Feat: 优化动作语句语法,情绪型加着/地,动作型加了,使聊天发言更自然流畅 2026-02-27 12:58:31 +08:00
caecceba1b Fix: 系统存点通知改回悄悄话私信,避免多人刷屏;前端单独渲染为绿色通知条无头像 2026-02-27 12:53:30 +08:00
638bc9deda Feat: 优化自动存点通知样式,系统消息不显示头像,改为绿色左边框简洁条形 2026-02-27 12:51:29 +08:00
954ffada0a UI: 恢复公告时间戳内联显示,附在内容正后方 2026-02-27 11:11:33 +08:00
5b3378389b UI: 优化全屏公告样式,将发送时间移动至右下角并防止时间文本重复显示 2026-02-27 11:09:36 +08:00
0aed0827de UI: 将 mix-blend-mode 应用到所有用户的头像,解决白底问题 2026-02-27 11:05:42 +08:00
53e357418e UI: 修复AI小班长头像的白色背景,使用 mix-blend-mode 使其透明化 2026-02-27 11:04:46 +08:00
d7b52f8419 Fix: 隔离AI头像,防止普通用户使用,并修复聊天公屏图像的调用 2026-02-27 10:57:46 +08:00
74217896d1 Feature: 调整AI聊天机器人的形象为“AI小班长”并更新了军人卡通风格头像 2026-02-27 10:54:41 +08:00
0f1c336d06 UI调整: 管理员徽章样式改为更节省宽度的将官军功章 (🎖️) 2026-02-27 10:22:20 +08:00
9f0270be12 UI改进: 为具有军人背景的聊天室更换管理员徽章风格为“★最高统帅★”红底金字金属铭牌 2026-02-27 10:20:04 +08:00
df57258aff UI调整: 聊天室右侧在线名单图标显示逻辑调整为互斥展示,管理员具有最高展示优先级 2026-02-27 10:14:56 +08:00
b72e2a5936 优化:送花消息改为普通通知样式 + 在收花人私聊屏显示
- from_user 从'系统传音'改为'送花播报',不再使用红色公告样式
- to_user 从'大家'改为收花人用户名,消息在收花人 say2 显示
- 礼物图片渲染逻辑移到普通系统用户分支
2026-02-27 01:09:26 +08:00
c5cc55fc84 功能:送花/礼物系统完整开发
- 新增 Gift 模型和 gifts 数据表(7种默认花卉,各有图片/金币/魅力配置)
- 7张花卉图片生成并存放于 public/images/gifts/
- 名片弹窗新增送礼物 UI:图片选择列表、金币/魅力标注、数量选择
- sendFlower 控制器方法:按 gift_id 查找礼物、扣金币、加魅力、广播消息
- 聊天消息渲染支持显示礼物图片(含弹跳动画效果)
- 后台可在 gifts 表中管理花卉类型(名称、图标、图片、金币、魅力、排序、启禁用)
2026-02-27 01:01:56 +08:00