首页 / 资讯中心 / 文章详情

MMORPG基础支撑模块

MMORPG基础支撑模块 ★ FEATURED ARTICLE
基础支撑 整个逻辑服的底座业务模块角色、战斗、Boss、行会、副本全部依赖它本身不实现任何玩法只提供稳定、统一的基础设施能力。PlayerMgr、SyncMgrAOI视野同步、TimerMgr、LogMgr、ConfigMgr、GMMgr 下面逐个拆解【职责、输入输出、核心能力、边界、常见坑】1. PlayerMgr 玩家会话管理器最核心底座职责管理玩家线上会话实例 玩家数据持久化加载/落地是玩家进入服务器的入口和出口。上线流程接管网关推送玩家登录消息校验token/账号从MySQL加载玩家基础数据、背包、任务等在内存创建玩家对象p {uid, conn, gate_id, ...}建立 uid - player 映射触发玩家进入事件给各个业务Mgr回调Boss加载扫荡解锁、活动、组队缓存等。下线/断线处理正常下线、网关断开、踢人、跨场景切线触发下线回调执行数据落地保存到DB清理该玩家绑定的临时资源Buff、副本引用、仇恨、场景实体。会话路由 消息转发对外提供接口GetPlayerByUid(uid)、SendMsg(p, proto名, data)封装发给网关的消息业务层不用关心gate连接、二进制打包细节。数据持久化调度定时自动存盘比如5min一次减少DB压力下线强制落地做脏标记只有数据改动才写入DB避免全量刷库。踢下线、顶号处理同一个账号异地登录顶掉旧会话GM踢人、违规封禁踢人。边界它不做的事❌不计算属性、不发奖励、不处理战斗只负责“拿到玩家对象”和“存数据”。核心对外接口PlayerMgr.LoadPlayer(uid) PlayerMgr.SavePlayer(p, force) PlayerMgr.KickPlayer(uid, reason) PlayerMgr.GetPlayerByUid(uid) PlayerMgr.SendMsg(p, proto_name, msg_data)2. SyncMgr / AOI 视野同步管理器场景同步底座常用格子AOIGrid区别于四叉树所有场景实体玩家、怪物、NPC、掉落物都由它管理视野。职责实体注册、移除玩家进场景、怪物刷新 → 加入AOI格子怪物死亡、玩家切图、实体销毁 → 从AOI移除。视野广播核心当实体移动、放技能、扣血、变身找到这个实体视野格子内所有玩家推送同步协议协议EnterView、LeaveView、EntityMove、HpMpChange、施法动画。视野进入/离开推送A看到B进入视野 → A收到B实体信息B走出A视野 → A收到实体消失包。隔离不同地图实例公共场景、副本instance互相隔离AOI不跨实例广播个人Boss、组队副本隔离就是靠这个。边界❌不做战斗判定、不做伤害计算只负责“谁能看见谁消息该推给谁”BattleMgr算出伤害后调用SyncMgr广播血量变化而不是Battle自己遍历玩家。3. ConfigMgr 配置管理器数据表底座职责统一加载、缓存、校验所有策划配置表全服只读。启动阶段加载全部csv/excel导出的配置boss_cfg、drop_cfg、skill_cfg、equip_cfg、quest_cfg、map_cfg统一索引按id快速查找启动自检配置合法性校验比如boss引用的drop_id不存在启动报错支持热更可选部分配置不停服重载策划改掉落不用重启服务器封装读取接口业务层不再手写读文件、解析csv。边界❌不写配置、不修改配置只读运行时不能修改cfg数据业务规则全部写在配置里代码只读实现策划配表驱动。-- 业务层直接拿 local cfg config.boss_cfg[boss_id]4. TimerMgr 定时器管理器时间底座职责服务端统一时间调度器替代到处写while循环、sleep所有延时/周期逻辑走这里。 两类定时器一次性延迟定时器5秒后关闭组队Boss副本、Buff结束、复活倒计时、奖励延时发放周期定时器每5秒扫描超时副本、每分钟清理过期掉落、定时快照排行榜、定时活动状态检测关键能力基于服务端时间戳不受客户端时间篡改统一帧调度可选帧模式防止定时器风暴支持取消定时器比如Buff提前驱散就要删掉这个timer日志追踪防止内存泄漏忘记cancel导致大量回调。边界❌ 不实现业务逻辑只到点调用你注册的回调函数。例如TeamBossMgr注册一个timer扫描超时副本TimerMgr只负责准时回调。5. LogMgr 流水日志管理器对账底座职责标准化业务流水埋点、日志落地用于后台统计、玩家申诉、对账、外挂排查、GM查询。统一日志分级Info、Warn、Error、Debug结构化业务流水击杀Boss日志、扫荡日志、分配奖励日志、交易、充值、物品消耗区分控制台日志运维看业务流水入库给运营后台查询就是你之前写的boss_sweep_log、team_boss_kill_log统一格式固定字段 uid、time、module、event、参数json运营后台可以直接解析。边界❌日志模块不做业务判断只记录不能靠LogMgr去回滚道具日志是凭证不是数据源。6. GMMgr GM指令管理器运维后台底座职责给运维/策划提供服务器内调试入口线上运营、测试专用通道注册GM指令/additem、/levelup、/resetbosscnt、/teleport、/kick权限校验区分超级GM、普通策划GM限制高危指令参数解析、调用对应业务模块接口返回执行结果给前端GM面板/聊天窗口。边界❌ GM只调用已有业务接口不重新实现一套发放、刷怪逻辑比如刷物品依然调用BackpackMgr.GiveReward。✅ 一句话区分底座模块 vs 业务模块基础支撑模块提供能力找玩家、发消息、计时、读配置、广播视野、记日志业务模块实现玩法组队、Boss扫荡、战斗、掉落、行会、任务依赖关系精简版ConfigMgr TimerMgr LogMgr ↓ PlayerMgr SyncMgr GMMgr ↓ 所有业务MgrBattle、TeamBoss、Guild、Quest...补充为什么要单独拆一层而不是散写统一收口比如以后想换数据库、换AOI算法、换网关协议只改底座上层Boss/战斗代码几乎不动方便监控所有消息出口、DB存盘、定时器集中性能监控、埋点很好加规范统一所有模块发消息、打日志、读配置走同一套API不会每个人写一套风格。
阅读完成 · 觉得有帮助?
咨询建站