公会团本联机同步 private

公会团本联机同步

本栏目只讲 emBattleType.GameGuildPveBoss = 15。重点不是玩法策划,而是一个公会的多个客户端怎样进入同一个 Battle Actor、怎样获得当前战场、怎样持续同步、怎样重连,以及战斗结束后怎样和 Lobby/Redis 对账。

  • 阅读同步时要区分两条权威边界:Battle 保存共享实体/属性/结算并负责校验转发;当前 Host 客户端运行怪物 AI 和移动技能决策。

返回技术文档目录

一句话模型

团本不是每个成员各开一份副本,而是一个公会在当前 Boss 轮次复用同一个 BattleId。这个 BattleId 最终定位到战斗服中的一个 BattleGuildPveBoss Actor。

公会轮次与入口:Lobby + Redis
实时战斗真相:BattleGuildPveBoss Actor
客户端画面:SceneInfo 首帧 + AddEntity 快照 + 后续增量包
flowchart LR
    C1[公会成员 A] --> L[Lobby]
    C2[公会成员 B] --> L
    L --> R[(公会 Redis)]
    L --> M[BattleMgr]
    M --> B[BattleGuildPveBoss Actor]
    C1 <--> B
    C2 <--> B
    B -->|约 5 秒一次 Boss 摘要| R
    B -->|结算| L

阅读顺序

顺序页面解决的问题
1创建、BattleId 路由与中途加入为什么所有公会成员能进入同一场战斗
2首帧快照、AOI 与实时增量新客户端怎样看到已经打了一半的 Boss 与队友
3断线重连、复活与结算网络断开、团灭和胜利时各端怎样收口
4并发锁、故障边界与排错当前实现能保证什么,不能保证什么,代码里有哪些风险

四条最重要的结论

  1. BattleGuildPveBoss 继承 BattleStateSync,所以移动、属性、技能、Buff、伤害、实体创建/删除并不是团本专用协议,而是复用通用战斗状态同步。
  2. Redis 里的 curRoundInfo 不是实时战斗存档。实时 Boss HP 通过 SyncProperty 等战斗包送给场内客户端;Redis 只保存约 5 秒粒度的跨服务摘要。
  3. 当前代码有“重连到还活着的 Actor”的能力,但没有“Battle Actor 崩溃后按 Redis 快照重建原战斗”的完整能力。
  4. 团本怪物不是由独立 Battle 服务器运行完整 AI:Battle 保存 Monster 和控制权,服务端选出的 Host 客户端运行 EnemyStateMachine,再把移动、状态和位置同步回 Battle。

核心源码

客户端

  • Assets/Code/Game/UI/Generated/UIGuildBossPanel/UIGuildBossPanel.cs
  • Assets/Code/Game/World/Modules/Gameplay/Class/GuildBoss.cs
  • Assets/Code/Game/Temp/CS_ReceiveBattleGameDataSystem.cs
  • Assets/Code/Game/Temp/StateSyncSystem.cs
  • Assets/Code/Game/Temp/BattleDataSyncSystem.cs
  • Assets/Code/Game/Temp/ReviveSystem.cs
  • Assets/Code/Game/Temp/SettlementSystem.cs

服务端

  • Server/NodeLobby/SystemBattle/SystemBattle.cs
  • Server/NodeLobby/SystemLobby/ComLobbyStatus.cs
  • Server/NodeLobby/GameGuild/ComGameGuild.cs
  • Server/NodeBattle/Root.cs
  • Server/NodeBattle/Room/Battle/GamePlay/BattleGuildPveBoss.cs
  • Server/NodeBattle/Room/Battle/BattleStateSync.cs
  • Server/NodeBattle/Handle/BattleStateSyncEvent.cs
  • Server/NodeBattle/Handle/HandleMessage.cs
  • Server/NodeBattle/BattleEntity/SceneComponent/CellMgr.cs

协议

  • Packet_tool/Packet_Battle.proto
  • Packet_tool/Packet_Battling.proto
  • Packet_tool/Packet_Common.proto
  • Packet_tool/ServerBattleMgr.proto
  • Packet_tool/ServerPacket.proto

下一篇:创建、BattleId 路由与中途加入

文章