|
|
发表于 2026-8-23 02:27:34
|
显示全部楼层
2026-8-11
1.修复聊天广播功能(附近聊天、队伍聊天、悄悄话)
2.修复:startserver
3.实现单人anton团本
1. 进入团本频道
新增 Anton 团本频道定义:
频道 ID:200 游戏端口:10200 客户端环境类型:0x17 团本城镇:19
进入团本频道后:
角色出生在团本专用城镇。
团本频道位置不会写回普通频道的持久化位置。
普通频道读取到团本城镇位置时会回退到普通城镇。
团本频道禁止前往非团本城镇。
角色选择通知会携带对应的频道显示模式和频道类型。
2. 创建团本
客户端发送 CREATE_RAID 后:
校验监听端口是否为团本频道。
校验角色、会话和团本状态。
创建团本聚合对象。
将创建者设为团长和首个成员。
返回创建成功 ACK 和团本 ID。
下发成员列表、等待列表和团本修改通知。
下发入场费用、Buff 和怪物状态。
3. 成员与门禁
团本门禁分为两层:
城镇区域门禁
副本选择门禁
从团本待机区域进入攻坚区域时,必须已经加入团本。
进入副本选择界面时,必须同时满足:
当前连接属于团本频道。
玩家已经加入团本。
团本已经由团长启动。
团本处于允许进入副本的运行状态。
校验失败时恢复玩家当前区域,并发送拒绝结果和提示信息。
普通频道和普通副本不经过该限制。
4. 启动攻坚
团长发送 START_RAID 后:
校验团长权限和成员状态。
锁定并扣除团本入场资源。
设置开始准备倒计时。
切换到第一阶段。
下发团本状态、地图状态和剩余时间。
启动服务端权威攻坚超时。
5. 第一阶段
第一阶段覆盖 Anton 副本 ID:210-215
210 黑雾之源:开放 211 再生黑雾:关闭 212 震颤的大地:关闭 213 擎天之柱:关闭 214 震颤的大地:关闭 215 擎天之柱:关闭 216 舰炮防御:关闭
副本状态为:
0 = 开放 2 = 关闭 3 = 已通关或恢复等待
服务端负责:
判断当前阶段允许进入的副本。
记录成员进入和退出副本。
累计副本通关次数。
广播副本参与状态和地图状态。
更新怪物血量与团本态势。
达到阶段条件后关闭对应副本。
进入第一阶段奖励和休整流程。
广播 3 秒准备倒计时。
倒计时结束后扣除入场材料。
设置:
State = 2:当前阶段攻坚中
PhaseIndex = 0:第一阶段
阶段死亡数、延时、通关时间清零
团本副本不会走普通怪物掉落和普通翻牌奖励,避免与团本奖励重复发放。
实现了黑雾 4 次、震颤、擎天双路线、舰炮开启/恢复/失败重置;
具体机制:5.1. 黑雾之源 210
210 需要通关 4 次。
第 1 至第 3 次:只更新进度符号 50。
第 4 次通关后:
关闭 210。
开放 212、213、214、215。
将 211 设置为恢复等待状态。
设置黑雾相关符号。
给 212、214 启动 300 秒活动计时。
给 211 启动 300 秒恢复计时。
20 秒后开放 216 舰炮防御。
211 恢复完成后会重新开放,并获得:
240 秒被动黑雾计时;
480 秒活动计时。
被动计时结束后会设置黑雾被动符号。480 秒活动计时结束仍未处理,则执行第一阶段局部重置。
5.2. 震颤的大地 212、214
212 和 214 各自需要通关 1 次。
通关后:
取消当前活动计时。
关闭副本。
启动 150 秒恢复计时。
恢复后重新开放。
重新启动 300 秒活动计时。
如果恢复后 300 秒内仍未完成,会调用 ResetPhaseOneAsync,重置第一阶段局部进度。
5.3. 擎天之柱 213、215
213 和 215 各自需要通关 2 次。
第 1 次通关:只更新进度符号。
第 2 次通关:关闭该副本。
当 213 和 215 都达到 2 次后,调用 CompletePhaseOneAsync,第一阶段完成。
5.4. 舰炮防御 216
黑雾之源通关后,20 秒开放 216,并启动:
360 秒舰炮活动计时;
120 秒提示计时结束后,未通关通关则触发Meteo (火球/陨石)。
如果 216 在 360 秒内通关:
关闭 216。
设置成功符号 124。
清除 Meteo 符号。
启动 150 秒恢复计时。
恢复后重新开放 216。
重新启动 360 秒活动计时。
如果 360 秒内没有通关,执行 NavalCannonTimeoutAsync:
设置舰炮失败符号 125、102。
清空 213、215 的通关进度。
清空 212、213、214、215 的通关次数。
重新开放 212、213、214、215。
重新启动 212、214 的 300 秒计时。
重新启动 216 的 360 秒计时。
舰炮超时不会直接导致整个团本失败,只会回滚部分第一阶段进度。
5.5. 副本局部倒计时结束时的机制
单个副本计时结束后,通常不会直接结束团本:
副本 超时后果
211 调用第一阶段整体局部重置
212、214 调用第一阶段整体局部重置
216 重置震颤、擎天进度并重新开放相关副本
221 至 224 只是孵化场提示或恢复机制,不直接判团本失败
阶段总计时器 才会触发真正的攻坚失败
第一阶段局部重置 ResetPhaseOneAsync 会:
取消第一阶段所有局部计时器。
清空 210 至 216 的通关次数。
清空第一阶段进度符号。
设置失败提示符号。
恢复第一阶段初始副本状态。
重新开放 210。
重要的是:局部重置不会重置 2400 秒阶段总倒计时。玩家仍然继续消耗本阶段剩余时间。
6. 阶段奖励与休整
当 213、215 都完成两次后第一阶段成功:
冻结当前阶段结果。
根据阶段死亡次数计算排名。
从 PVF 团本配置中抽取金币、队伍翻牌和攻坚队奖励。
下发团本奖励列表。
等待玩家选择奖励卡。
完成奖励提交后进入阶段休整。
休整结束后准备下一阶段。
TryEnterPhaseBreak 将状态从 State=2 改为 State=3。
奖励仅发给本阶段至少参与并通关过一个副本的成员。
奖励配置读取路径:etc/raid/anton.etc
然后进入结果流程:
设置第一阶段成功符号 105。
向成员发送结果包,包括:
阶段编号;
阶段耗时;
死亡次数;
客户端显示等级;
是否有奖励资格。
播放结果动画。
客户端发送 RAID_MOVIE_SKIP 且 body 第一个字节为 1 后,进入翻牌阶段。
向每个队伍发送金币卡和队伍奖励卡列表。
玩家选择卡片后,服务端记录卡片占用,防止同队成员选同一张卡。
玩家 10 秒未选择时,服务端自动选择可用卡片。
卡片奖励发放到背包并持久化。
所有人完成选择后,等待 2 秒。
显示攻坚队奖励。
等待 5 秒后发放攻坚队奖励。
第一阶段奖励完成后:
State = 5 PhaseIndex = 0
State=5 表示第一阶段完成,正在阶段休整,等待第二阶段。
需要注意:当前代码的结果动画必须收到客户端“动画完成”请求后才开始翻牌。如果客户端一直不发送该请求,团本会停留在 State=3。 |
|