石器时代 8.5 原版游戏代码结构分析报告 一、项目总体结构 stoneage/ ├── client-8.5/ # 客户端源码 (Visual Studio 项目, C++) ├── server-8.5/ # 服务端源码 (Linux/C, gcc 编译) │ ├── gmsv/ # 游戏主服务端 │ └── saac/ # 账号/数据中心服务端 ├── 客户端lua文件/ # 客户端 Lua 脚本 ├── 服务器端lua文件/ # 服务端 Lua 脚本 ├── setup.cf # 服务端主配置文件 ├── acserv.cf # 账号服务端配置 ├── CSA.sql # 数据库建表 SQL └── sql.cf # SQL 配置 二、客户端代码结构 (client-8.5/client_source_code) 2.1 核心目录 目录 用途 关键文件 system/ 核心游戏系统 (57个源文件) gamemain.cpp, netmain.cpp, login.cpp, map.cpp, battleproc.cpp, menu.cpp, pc.cpp, character.cpp, chat.cpp systeminc/ 核心头文件 (58个头文件) pc.h, character.h, map.h, battleproc.h, menu.h, version.h, netmain.h oft/ 动画/渲染系统 oft.cpp(动画管理), work.cpp(工作函数), pat_dat.cpp ohta/ 高层任务处理 ohta.cpp, ohta_proc.cpp wgs/ 网络加密通信层 message.cpp(消息格式), descrypt.cpp(加密解密), tea.cpp(TEA加密), Ping.cpp newproto/ 协议层 protocol.cpp/h(516行,220+协议定义), autil.cpp/h(协议工具) mylua/ 客户端 Lua 引擎 winlua.cpp, sa.cpp, lssproto.cpp, ServerList.cpp other/ 辅助工具 trade.cpp(交易), ItemsMall.cpp(商城), GetMacAddress.h, md5_encrypt.cpp sdk/ 外部 SDK (DirectX等) curl/ HTTP 库 libcurl openssl/ 加密库 MD5等 detours/ Hook 库 Microsoft Detours 2.2 客户端核心数据结构 (pc.h) 玩家角色 (PC) 结构体 — 这是最核心的数据结构: PC { // 基础属性 graNo, faceGraNo // 图形编号 id, dir // ID, 方向 hp, maxHp, mp, maxMp // 生命值, 魔法值 vital, str, tgh, dex // 体力, 力量, 韧性, 敏捷 exp, maxExp, level // 经验, 等级 atk, def, quick, charm, luck // 攻防速魅幸 earth, water, fire, wind // 四元素属性 gold // 金币 // 物品系统 item[MAX_ITEM] // 道具栏 (5装备位+15背包×3页) itempool[MAX_ITEM] // 寄放道具 // 宠物系统 battlePetNo // 战斗出战宠物 selectPetNo[5] // 选择的5只宠物 mailPetNo // 邮件宠物 // 社交系统 familyName // 家族名 channel // 频道 trade_confirm // 交易确认状态 // 家族系统 familyleader // 家族职务 familySprite // 家族精灵(庄园) big4fm // 四大庄园标识 // 职业系统 (7.0+) profession_class // 职业类型(战士/法师/猎人) profession_level // 职业等级 profession_skill_point // 技能点 // 其他系统 ridePetNo, ridePetName // 骑宠 transmigration // 转生次数 titleNo // 称号编号 status, etcFlag // 状态/标志位 } 宠物 (PET) 结构体: PET { graNo, hp, maxHp, mp, maxMp exp, maxExp, level atk, def, quick, ai earth, water, fire, wind // 四元素 maxSkill, trn(转生数), fusion(融合标志) name, freeName, useFlag item[MAX_PET_ITEM] // 宠物装备(头/翼/牙/身/背/爪/脚) } 装备栏位枚举: 装备: HEAD, BODY, ARM, DECORATION1, DECORATION2, BELT, SHIELD, SHOES, GLOVE (共9个栏位) 宠物装备: HEAD, WING, TOOTH, PLATE, BACK, CLAW, FOOT (7个栏位) 2.3 客户端核心文件功能 文件 行数 功能 gamemain.cpp 1484 游戏主循环,帧率控制,状态机管理 login.cpp 21687 最大文件 — 登录流程,角色创建/选择/删除,服务器选择 menu.cpp 22835 第二大文件 — 所有UI菜单(状态/道具/宠物/技能/交易/银行/邮件等) map.cpp 6157 地图渲染,移动,碰撞检测,视野管理 pc.cpp 1681 玩家数据管理,属性初始化,宠物/道具/技能管理 battleproc.cpp 1172 战斗流程控制,遇敌,战斗动画 character.cpp 4051 角色对象管理(包括NPC/玩家/宠物的显示) chat.cpp 1567 聊天系统(多频道,聊天历史,屏蔽词) netmain.cpp 661 网络连接管理,Socket操作 field.cpp - 大地图渲染(地面物件) pattern.cpp - 角色动作帧管理 save.cpp - 存档系统 三、服务端代码结构 (server-8.5/gmsv) 3.1 核心模块 目录/文件 文件数 功能 battle/ 10 战斗系统(battle.c 11328行!, battle_command.c 1251行, battle_ai.c, battle_item.c, battle_magic.c, pet_skill.c, profession_skill.c) char/ 25 角色系统(char.c 11543行!, char_base.c 4559行, char_walk.c, char_talk.c, char_item.c, char_party.c, trade.c 24个源文件, pet.c, pet_event.c, family.c, skill.c, title.c, encounter.c, enemy.c, chatroom.c, addressbook.c) item/ 5 物品系统(item.c 2502行, item_event.c, item_gen.c) magic/ 5 魔法系统(magic.c 916行, magic_base.c, magic_field.c) npc/ 77 NPC系统(77个NPC类型!) map/ 5 地图系统(map_deal.c, map_util.c, readmap.c, map_warppoint.c) lua/ 193 LuaJIT 引擎完整源码 mylua/ 25 服务端 Lua 绑定层 npc_lua/ 18 NPC Lua 接口(npc_lua_battle.c, npc_lua_char.c, npc_lua_item.c, npc_lua_map.c, etc.) include/ 152 所有头文件 3.2 服务端核心文件 文件 行数 功能 lssproto_serv.c 3894 协议处理核心 — 解码客户端消息,分发到各处理函数 char.c 11543 角色管理主文件(登录,登出,行走,物品使用,交易,家族等) char_base.c 4559 角色基础数据管理(骑宠表296条!) battle.c 11328 战斗引擎(回合制,伤害计算,AI,状态效果等) battle_command.c 1251 战斗指令解析(攻击/防御/捕捉/逃跑/宠物/物品等) item.c 2502 物品数据管理(属性,类型,装备效果) magic.c 916 魔法使用逻辑(回复/属性变化/状态/复活/攻击魔法) main.c - 服务端入口,主循环 net.c - 网络层(epoll) epollnet.c - epoll 网络模型 callfromcli.c - 客户端消息处理入口 callfromac.c - 账号服务器消息处理入口 configfile.c - 配置文件解析 3.3 服务端核心数据结构 角色(Char) 结构体 — 对应客户端PC,包含更丰富的服务端逻辑字段: Char { // 基础数据: id, name, hp, mp, str, tgh, dex, etc. // 位置: floor, x, y, dir // 战斗: battleindex, battlemode // 家族: fmindex, fmrank, fmsprite // 职业: profession_class, profession_level // NPC特有: whichtype, npcworkint[10], npcarg } 战斗(BATTLE) 结构体: BATTLE { type (P_vs_E, P_vs_P, E_vs_E, WATCH, DP_BATTLE, BOSS_BATTLE) mode (NONE, INIT, BATTLE, FINISH, STOP, WATCHBC...) flg (状态标志) entry[BATTLE_ENTRY_MAX] // 最多10(或12)个参战单位 } 四、协议设计和网络通信 4.1 协议架构 协议层由三部分组成:
- WGS层 (wgs/): 底层通信 — 消息格式化(message.cpp),TEA加密(tea.cpp),DES加密(descrypt.cpp)
- LSS层 (lssproto): RPC协议层 — 客户端lssproto_cli.cpp + 服务端lssproto_serv.c
- 新协议层 (newproto/): 增强协议 — protocol.cpp/h中定义的 SaDispatchMessage 4.2 协议列表 (220+ 条协议) 按功能分类: 移动/地图类: 编号 协议 方向 0-1 W/W2 S→C
2 XYD C→S 3-4 EV C↔S 42-43 CA/CD S→C 37-39 MC/M/M S→C/C→S/S→C 70 SP C→S 战斗类: 编号 协议 方向 12-13 RS/RD S→C 14-15 B C↔S 16 SKD C→S 54-55 KS C↔S 93-94 FM C↔S 97 BM C→S 107 PETST C↔S 103-104 CS C↔S 物品/装备类: 编号 协议 方向 22 I S→C 23 MI C→S 24 SI S→C 17 ID C→S 18 PI C→S 19-20 DI/DG C→S 21 DP C→S 127 PET_ITEM C→S 角色/社交类: 编号 协议 方向 25-26 MSG C↔S 27 PMSG C→S 28 PME S→C 29-33 AB/ABI/DAB/AAB C↔S 34 L C→S 35-36 TK C↔S 40-41 C C↔S 44 R S→C 登录/角色管理类: 编号 协议 方向 71-72 CLIENTLOGIN C↔S 73-74 CREATENEWCHAR C↔S 75-76 CHARDELETE C↔S 77-78 CHARLOGIN C↔S 79-80 CHARLIST C↔S 81-82 CHARLOGOUT C↔S 魔法/技能类: 编号 协议 方向 50-51 HL C↔S 52-53 PR C↔S 56 AC C→S 57 MU C→S 58-59 PS C↔S 101 NC S→C 110-111 BATTLESKILL C↔S 扩展系统类: 编号 协议 方向 95 WO S→C 112-113 CHATROOM C↔S 116-117 STREET_VENDOR C↔S 120-121 JOBDAILY C↔S 122-123 TEACHER_SYSTEM C↔S 126 FIREWORK S→C 128 MOVE_SCREEN S→C 131-132 THEATER C↔S 133-134 MAGICCARD S→C 139-140 PKLIST C↔S 141 SIGNDAY C→S 200 DENGON S→C 201-202 SAMENU C↔S 208-209 SHOPOK C↔S 210-211 FAMILYBADGE C↔S 212-213 CHARTITLE C↔S 218-219 VB C↔S 220 RIDEQUERY C→S 221-222 PETSKINS C↔S 4.3 通信机制
- 传输层: TCP Socket (非阻塞, epoll)
- 加密: TEA加密 + DES加密 + 个人密钥(PersonalKey)
- 消息格式: &;[PID];[参数计数];[参数1];[参数2];...& (8字节对齐)
- 连接模式: WGS中转服务 → 游戏服务器直连
- 账号验证: SAAC (StoneAge Account Center) 独立服务, MySQL存储 五、NPC 系统 (77个NPC类型) NPC类型 文件 商店类 npc_itemshop.c, npc_petshop.c, npc_petskillshop.c, npc_vipshop.c, npc_newvipshop.c, npc_simpleshop.c, npc_poolitemshop.c, npc_itemchange.c 传送类 npc_warp.c, npc_warpman.c, npc_transerman.c, npc_bus.c, npc_ship.c, npc_airplane.c 家族类 npc_familyman.c, npc_fmpkman.c, npc_fmpkcallman.c, npc_fmwarpman.c, npc_fmhealer.c, npc_fmletter.c, npc_fmdengon.c, npc_fmchallenge.c, npc_manorsman.c 娱乐类 npc_gamblemaster.c, npc_gambleroulette.c, npc_gamblebank.c, npc_quiz.c, npc_janken.c, npc_magiccard.c, npc_luckyman.c 功能类 npc_healer.c, npc_savepoint.c, npc_bankman.c, npc_exchangeman.c, npc_makepair.c, npc_riderman.c, npc_doorman.c 战斗类 npc_npcenemy.c, npc_autopk.c, npc_duelranking.c 宠物类 npc_petmaker.c, npc_petracemaster.c, npc_petracepet.c, npc_petfusion.c, npc_freepetskillshop.c 社交类 npc_signboard.c, npc_storyteller.c, npc_mic.c, npc_msg.c, npc_dengon.c, npc_charm.c, npc_bodylan.c 系统类 npc_sysinfo.c, npc_timeman.c, npc_scheduleman.c, npc_checkman.c, npc_roomadminnew.c 导师类 npc_transmigration.c 摆摊类 npc_pauctionman.c 日常类 npc_welfare.c, npc_dayaction.c 六、核心游戏功能特性总结 6.1 角色系统
- 属性体系: HP/MP/体力/力量/韧性/敏捷/攻/防/速/魅/幸
- 四元素: 地/水/火/风(相互克制)
- 转生系统: 最高支持6转,每次转生属性重置并成长
- 职业系统 (7.0+): 战士/法师/猎人三大职业,26级职业等级上限
- 称号系统: 图形称号 + 文字称号
- 装备栏位: 头/身/臂/装饰×2/腰带/盾/鞋/手套 = 9个 6.2 宠物系统
- 携带: 最多5只宠物
- 战斗: 宠物可出战(前后排)
- 骑乘: 296种骑宠组合表,骑宠有等级和转生要求
- 融合/进化: 宠物融合系统(人龙进化)
- 宠物装备: 7个装备栏位(头/翼/牙/身/背/爪/脚)
- 宠物技能: 大量被动/主动技能
- 宠物祝福: buff系统
- 宠物皮肤: 皮肤更换系统 6.3 战斗系统
- 模式: 遇敌制(步数触发),回合制
- 类型: PVE/PVP/观战/DP赛/BOSS战
- 阵容: 标准5v5,可扩展至6v6或40人
- 指令: 攻击/防御/捕捉/逃跑/道具/技能/宠物出退
- 宠物技能: 50+种技能(连续攻击/蓄力攻击/守护/抢夺/状态变化等)
- 职业技能: 战士/法师/猎人各有独特技能树
- 魔法: 回复/属性变化/状态变化/复活/攻击魔法/变身/召唤龙
- AI: 自动战斗AI系统
- 观战: 可观看他人战斗
- 异常状态: 中毒/麻痹/睡眠/石化/混乱/醉酒/沉默 6.4 物品系统
- 类型: 拳/斧/棍/矛/弓/盾/头盔/铠甲/手镯/脚链/项链/戒指/腰带/耳环/鼻环/护身符/回旋镖/投石索/投掷石/料理/金属/宝石/材料/宠物装备等
- 属性: 攻击/防御/敏捷/HP/MP/幸运/魅力/回避/元素
- 堆叠: 可堆叠物品
- 耐久: 物品有损坏和最大损坏度
- 精炼: 精炼系统
- 强化: 物品强化
- 凿孔/镶嵌: 宝石镶嵌系统
- 法宝: 特殊道具系统 6.5 社交系统
- 组队: 最多5人(或8人)组队
- 家族/公会: 1000个家族,100人上限,族长/长老/成员职务,频道系统(5频道)
- 名片/好友: 多页名片册,在线状态显示
- 交易: 双方确认的交易系统,支持物品/宠物/金币
- 邮件: 普通邮件+宠物邮件
- 摆摊: 玩家间交易
- 聊天室: 频道聊天 6.6 多频道系统
- 队伍频道/密语频道/家族频道/职业频道/世界频道/星球频道/聊天室/对话储存 6.7 地图系统
- 格式: Tile-based, 包含 tile/parts/event/hitMap 四层
- 云层效果: 地图云雾效果
- 特殊动画: 环境动画(水中生物/定点动画/随机动画)
- 寻路: 网格式寻路,碰撞检测
- 视野: 按屏幕可见范围渲染
- 天空岛: 特殊地图类型 6.8 家族/庄园系统
- 十大庄园: 庄园争夺战
- 家族PK: 家族间战斗
- 庄园规则: 家族贡献/税收
- 家族徽章: 视觉化家族标识
- 家族频道: 家族内部通信 6.9 扩展系统 (8.0-8.5新增)
- 天使的召唤: 特殊任务系统
- 导师系统: 老玩家带新玩家
- 讨伐魔军: PvE活动系统
- 百人无双: 大型战斗
- 每日活动: 每日任务
- 魔法牌: 卡牌小游戏
- 剧场: 剧情演出功能
- 排行榜: 各类排名NPC
- 签到系统: 每日签到
- 公告系统: 服务器公告
- 商城: 道具商城 6.10 AI/挂机系统
- 自动战斗AI
- 自动遇敌
- 自动喊话 6.11 Lua 脚本系统
- 客户端Lua: 界面定制/窗口管理/标题管理/地图逻辑
- 服务端Lua: NPC逻辑/战斗逻辑/角色操作/物品操作/地图操作/SQL操作
- 使用 LuaJIT 引擎(高性能JIT编译)
- Lua绑定层: 25个绑定模块,覆盖游戏所有系统 6.12 安全系统
- TEA + DES + 个人密钥 加密
- VMProtect SDK 反调试
- MAC 地址验证
- 封包大小检查
- IP 限制和同IP登录限制
- VMP (VMProtect) 保护 七、服务端配置系统 (setup.cf) 关键配置项:
- 网络: 端口19065, fd数1000, 角色数800, 宠物数30000, NPC数45000, 物品数50000, 战斗数500
- 战斗: 战斗速度2000ms, 回合延迟200ms, 经验倍率
- 骑宠: 等级要求140, 转生要求
- 安全: 封包大小检查(登录前300/登录后800), 同IP限制
- 数据: SAAC账号服务端端口10001, MySQL数据库存储
- 活动: 自动PK/六合彩/幸运星等活动配置
- VIP: VIP战斗经验倍率/VIP显示控制
总结: 石器时代8.5是一个功能非常丰富的2D回合制MMORPG,客户端约3万行C++代码,服务端约4-5万行C代码。核心系统包括: 角色/宠物/战斗/物品/魔法/社交/家族/职业等,支持220+条协议通信,77种NPC类型,大量Lua脚本扩展。整个系统从4.0到8.5经历了多次大版本迭代,功能层层叠加。
评论
评论功能即将上线,敬请期待。