返回首页

fantasyland — 多人在线 RPG 游戏服务端

fantasyland — 多人在线 RPG 游戏服务端

所属团队

社区项目

我的角色

服务端核心开发

周期

2022.06 - 2024.08

工具与技术

PawnC++MySQLJSON 配置驱动HTTP

背景

一个持续运营两年多的多人在线 RPG 服务端:玩法每周都在变,但世界心跳不能停。6 万行服务端逻辑靠"事件驱动主循环 + 数据驱动配置"组织——核心循环固定不动,玩法全部挂在钩子和配置上。我主要负责 NPC/AI 框架、服务端权威战斗与道具背包链路。

事件驱动主循环示意(占位图)
NPC 状态机框架示意(占位图)

我解决了什么

  • 服务端框架:全局钩子 + 模块注册分层解耦,主循环按固定 tick(世界心跳 960ms,另有 60s/180s 分级任务)统一分发进入、周期更新与断线事件;实体统一走 ID 池化与空闲槽位复用,长周期运行不膨胀
  • NPC 状态机框架:"槽位核心层 + 通用状态机 + 类型行为层"三层拆分——通用层以 50ms 节拍驱动 FREE / AGGRESSIVE / FLEE / INCAR / FOCUS 五态迁移,类型层通过受击、进范围、目标死亡、威胁变化等钩子注册行为,新增怪物不动核心;寻路基于节点连通图,NPC 不再挤在同一条固定路线
  • 槽位复用与流式生成:启动时一次性预创建 100 个 NPC 槽位,生成只取空闲槽位并重置状态;回收不销毁实体,而是"雪藏"到保留世界,让名字牌、AI 定时器、仇恨目标等外部引用不悬空;刷怪由区域流式生成器按概率表补量,玩家离开 300 米先移交、移交不了才回收
  • BOSS 战 AI:每个 BOSS 独立持有选目标 / AI 更新 / 施法三条定时器,回收槽位时统一销毁,杜绝"幽灵定时器";每 BOSS 一张威胁表(枪击 / 枪伤 / 近战 / 偷窃四类权重),法术带读条与打断,血量按阶段切换技能池,召唤小兵按归属关系级联解除
  • 数据驱动与运营:道具、掉落、合成、NPC 动线全部配置化(声明式道具注册、概率掉落表、JSON 合成配方),并开发了游戏内寻路节点编辑器,策划可自助维护动线;持久化用 MySQL 连接池 + 异步查询回调,"变更才写 + 分级批量刷盘",IO 不阻塞主循环

结果

服务器稳定运营两年多,累计 2000+ 注册用户、社区日活 30 人在线。这个项目是我对"长生命周期服务端"理解的起点——实体池化、状态机分层、配置驱动这些模式,后来在比特鹰的集群分片里又用了一遍。