这是一份纯文档层:在不改动任何源码的前提下,为这份淘米老服务端源码加一层中文地图,方便挖宝、协议比对与学习开发。 本项目最终目的:为 摩尔庄园离线复活(moleworld-server / MoleWorld-offline)提供参照。
🆕 两个新增亮点:① 深度档案 —— 逐模块讲清"每个部分实际在运行时干什么"(进程拓扑、调用流、关键函数);② 🥚 工程师彩蛋 —— 从源码里挖到的吐槽、玩笑、TODO、走马灯密码、
fuck_version_check之类的人味遗留。
是什么 —— 上海淘米(TaoMee, Inc. ShangHai)2007–2013 年间的网页 Flash 页游服务端真源码(C/C++ 为主),含多款游戏服务端 + 一整套公司级基础设施。证据:作者头注 Author: xcwen, xcwenn@gmail.com / jim@taomee.com、Company: TaoMee.Inc;mole/flashpolicy 是 Flash socket 策略服(铁证它服务的是 Flash 网页客户端);mole/online/changelog 记录 2008 感恩节摩尔餐厅等版本。
不是什么(请勿被误导):
- ❌ 不含任何客户端(无
.swf/.fla/.as,无美术/动画资产)。 - ❌ 不是 iOS 手游版的后端。这是网页 Flash 版后端;手游(cocos2d / 5.x)协议可能已演进,只能参照对照,不能假设一致。
- ❌ 不含数据库实际数据(建表多、游戏侧种子数据几乎为 0,详见 内容/数据专题)。
规模 —— 12 个顶层模块 + 2 个框架包,约 1.1 万个文件 / 近百万行 C/C++ /工作树约 318MB;年代:核心 2007 → 大扩张 2010–2011 → 内容配置延续到 ~2012–2013。
四张框架图,点开可看大图。看不清就读文字版:价值地图 · 架构 deep/mole.md · 协议 protocol.md。
① 12 模块全景 —— 每个目录到底是干啥的
② 摩尔庄园后端运行架构 + 一次请求怎么跑
③ 协议怎么读:命令字 cmdid + 报文头
④ 游戏代号对照(纠正两处长期误传)
本仓库的主角是摩尔庄园(mole)。下面 6 张图从「鸟瞰」一路深入到「一次请求的一生」,覆盖全部 17 个子目录 + 玩法 + 数据 + 协议。图看不清就点开看大图;逐文件逐函数的文字深挖见 deep/mole.md。
建议顺序:A 思维导图(全局)→ B 进程拓扑(谁连谁)→ C 玩法地图(代码在哪)→ D 数据层(怎么存)→ E 请求时序(怎么跑)→ F 内容数据(挖什么)。
接入 / 核心 online / 玩法子系统 / 数据层 / 周边服务 / 内容数据 / 协议 / 底座,右侧每条都对应真实目录或文件。
客户端 → 接入层 → 逻辑层 → 数据层 → 存储,外加旁路服务与贯穿全场的底座。
核心机制:收包 →
dispatch[cmdid]函数指针表 → 对应 handler。下面按玩法域分组,全是mole/online/*.c真实文件。
cache_serv 内存态(1800s 回写)→ dbsvr 按 cmdid 选库类型 → 按
userid%100选 100 库之一 → 库内再分表 → MySQL。
从点一下喂食,到全屏玩家看到拉姆长属性,逐步追真实函数/命令字(
pet.c+ dbsvr)。
mole/online/conf的 151 个 XML 按域分组;标 ★ 的可几乎原样喂给 moleworld-server。
挖宝前先记住"哪个目录是哪款游戏"。早期口口相传的 baseline 有两处错,本文档已据淘米自有的 gameid 字典与分库路由表逐一更正:
- 权威字典:common-tools/linux/anticheat/trunk/docs/gameid
- 权威路由:dbser/proxy_route.h(
enum_route_type把每段 cmdid 映射到一个业务库)
| 目录 | 真实游戏(gameid) | baseline 旧说法 | 结论 |
|---|---|---|---|
mole |
摩尔庄园(id 1) | 摩尔庄园 | ✅ 正确 |
mole2 |
摩尔庄园2 / 摩尔大冒险(id 8) | 摩尔庄园2 | ✅ 正确 |
gf |
功夫派 KungFu Pai(id 6) | ❌→✅ 更正:货币"功夫豆"、怪物木人/木王/铜人;小花仙是另一款 xhx(id 5),不在本仓库 |
|
monster |
淘米小怪兽(id 13) | ❌→✅ 更正:养成+社区玩法,见 小怪兽机器部署图.doc;赛尔号是 pea |
|
pea |
赛尔号 Seer(id 2) | 赛尔号(+pea) | ✅ 正确(pea 才是赛尔号:pet.xml 里"马龙赠送的精灵") |
boke |
卜克 / POP 解密类(id 12) | 社区/聊天 | ◐ 细化:是独立游戏《卜克》,克隆自摩尔庄园2 代码 |
字典里还有不在本仓库的游戏:
小花仙(5)、DUDU(4)、摩尔勇士(7)、赛尔2(10)、派派、哈奇(21)等——它们只在共享路由/登录配置里被引用,源码未泄漏。
评级 = 该模块的绝对代码价值(与各模块文档内的 ★ 一致);"对摩尔复活"列才是本项目的挖宝优先级。
| 模块 | 评级 | 游戏 / 角色 | 源码量 | 对摩尔复活 | 关键挖宝点 | 文档 |
|---|---|---|---|---|---|---|
mole |
★★★ | 摩尔庄园(id1)主服务端全套 | ~32 万行 | 直用+参照 | proto.h 协议字典、online/conf 内容、gamesvr/dbsvr/cache | mole.md |
gf |
★★★ | 功夫派(id6)完整游戏 | ~22 万行 | 参照 | battle_svr/skills/stage 全套;XML 最全(522) | gf.md |
mole2 |
★★★ | 摩尔庄园2(id8)/跨服 | ~12 万行 | 参照(conf 可直用) | clothes.xml、batrserv 内嵌 Lua AI、跨服调度 | mole2.md |
c |
★★ | 基础设施·共享 C/C++ 底座 | ~22 万行* | 参照 | net-io-server(epoll 反应堆)、shmq、通用包头范式 | c.md |
libtaomee |
★★ | 基础设施·内部框架库 | ~3.9 万行 | 参照(读/编译 mole 必需) | shmq/tlog/crypt/qdes(协议加密)/inet | libtaomee.md |
dbser |
★★ | 基础设施·分库分表路由库 | ~0.4 万行 | 参照(信息密度极高) | proxy_route.h=全平台"分库地图"+gameid | dbser.md |
monster |
★★ | 淘米小怪兽(id13)养成社区 | ~5 万行 | 参照(平行架构) | 玩法与摩尔近(种植/小屋/连连看) | monster.md |
boke |
★★ | 卜克/POP(id12) | ~3.7 万行 | 参照(mole2 代码旁证) | gen_proto(XML 生成协议)、聊天/词库 | boke.md |
pic_server |
★★ | 基础设施·图片服 | ~2.5 万行 | 参照 | 上传/缩略图/CDN 回源(相册/头像) | pic_server.md |
common-tools |
★★ | 基础设施·运维/反作弊 | ~3 万行 | 参照(gameid 字典在此) | anticheat/gameproxy、通用 main_login | common-tools.md |
pea |
★ | 赛尔号(id2)精灵对战 | ~4.4 万行 | 弱相关 | pet.xml 战斗数值/技能/成长曲线 | pea.md |
itl |
★ | 基础设施·运维监控平台 | ~8.5 万行 | 弱相关 | 42 个 sql/触发器、中文需求/Visio 文档 | itl.md |
reload |
— | 配置热加载小工具(8 文件/144 行) | 极小 | 弱 | 仅供参考,无单独文档 | — |
*
c的 22 万行含c/library下大量trunk/tags/branches版本副本;cloc去重后唯一代码约 5.4 万行。 评级相对 baseline 的微调:dbser/boke/pic_server/common-tools由 ★→★★(都是被摩尔庄园 gamesvr 直接复用、且信息密度高的共享基础设施);monster保持 ★★ 但游戏身份更正为小怪兽。
- 协议罗塞塔石碑 —— mole/dbsvr/include/proto.h(15003 行,1300+ 命令字,其中约 700 个带写库标志
NEED_UPDATE)。所有 cmdid 的中文注释在此。→ 协议专题 - 游戏内容数据本身 —— mole/online/conf/items.xml(1.26MB / 9958 件物品)、maps.xml、questions.xml、拉姆养成
lahm_*、挖宝活动DigTreasure*/TD2011*。→ 内容/数据专题 - 分库地图 + 游戏字典 —— dbser/proxy_route.h 把每段 cmdid 映射到业务库(摩尔.餐厅/许愿池/诺亚舟/小屋/神奇密码…),是"摩尔庄园有哪些子系统"的全景图。
- 内部框架(全源) —— Libtaomee-0.7.5.tar.gz + Libtaomee++-0.7.2.tar.gz:shmq 共享内存队列、tlog 日志、crypt/qdes 协议加密。
- 表结构 —— 全仓 42 个
.sql(99 张 CREATE TABLE + 173 个触发器,但游戏侧 INSERT 种子≈0)。
- 先读本页 → mole.md(摩尔庄园整体架构:flashpolicy→login→online→cache→dbsvr)。
- 想知道某部分实际在跑什么 → 深度档案 deep/mole.md(进程拓扑、调用流、"喂拉姆"端到端链路)。
- 再读 协议专题 protocol.md(看懂 cmdid 怎么编码/路由)。
- 然后 内容/数据专题 content-data.md(物品/地图/答题/活动数据在哪、什么格式)。
- 想编译/理解底层:libtaomee.md + c.md。
- 想轻松一下 → 🥚 工程师彩蛋。
# 在仓库根执行;把 PROVE 换成你关心的关键词(中文注释也能搜)
grep -nE '#define[[:space:]].*_CMD' mole/dbsvr/include/proto.h | grep -i prove
grep -n '美誉' mole/dbsvr/include/proto.h # 按中文注释找- cmdid 是 16-bit 十六进制;形如
#define XXX_CMD (0xB475 | NEED_UPDATE)。 NEED_UPDATE = 0x0100表示该协议会写库;RROTO_ROUTE_FIELD = 0xFC00(高 6 bit)是分库路由位。机制详解见 protocol.md。
- 摩尔庄园核心内容全在 mole/online/conf/(152 个文件,几乎全是 XML)。
- 物品表 schema、答题题库、活动配置的字段含义与样例 → content-data.md。
- 协议对照:以 cmdid 为锚点,在 proto.h 里反查同名/同段命令字与中文语义;注意网页版与 iOS 版包头/字节序/加密可能不同,先对齐"层",再比字段。方法见 protocol.md 的"与 iOS 手游协议比对"一节。
- 数据直用:items/maps/swap/exchange/答题/拉姆/活动等 XML 可几乎原样作为 moleworld-server 的权威配置导入;DB 表结构只能参照(无实际数据)。详见 content-data.md。
- Flash 客户端:无任何
.swf/.fla/.as(=0);美术/动画资产仅零碎几张图。 - 数据库实际数据:有建表/触发器,但游戏侧种子/世界数据几乎为 0(玩家存档表是运行时由 C 代码
sprintf动态建的,不在.sql里)。 - 版本历史:无
.svn/git 历史(原始为一次性快照)。 - 架构/编译/部署文档:几乎没有(只有零星 readme/changelog 与 itl 的中文需求/Visio)。
- 外部依赖环境:依赖
libtaomee/libtaomee++/async_serv/glib/libxml2/内嵌 Lua等,开箱即编译跑不通。 - 范围外:iOS 手游后端、2013 年后内容、
小花仙/派派/DUDU等其它淘米游戏的源码。
- 本仓库:
moleworld-dev/taomee-server-leak,fork 自chenbk85/taomee(经 GitHub API 核实 parent 关系;两者最后推送均停在 2013-01-25)。 - 代码作者:淘米工程师
xcwen(xcwenn@gmail.com)/jim@taomee.com(见各proto.h/源码头注;最早Created: 2007年11月01日)。 - 上传链:据公开线索由第三方搬运到 GitHub、再被多人镜像囤积(具体搬运者身份本文未独立核实,待证)。
- 本文档层:由自动化扫描 + 多代理逐模块阅读真实文件生成,所有结论尽量给出可点击的源码
#L行号佐证;不确定处标注"(推测/待证)"。
- 本仓库内的服务端源码、配置与文档资料,著作权归上海淘米网络科技有限公司及相关权利人所有。
- 本仓库及本中文文档层仅用于 lost-media 数字存档与技术学习研究,不含任何游戏客户端、美术资产或可直接运营的数据,不提供任何可商用的完整服务。
- 配置文件中残留的历史明文内网 IP / 数据库口令等仅为历史考据,请勿用于任何实际系统。
- 若相关权利人提出异议,请联系仓库维护者,我们将配合处理或下架。
专题
- 协议专题 · protocol.md —— cmdid 总表/分类、
NEED_UPDATE/路由位机制、与 iOS 协议比对方法。 - 内容/数据专题 · content-data.md —— conf XML 与 42 个 sql 的格式与可挖内容。
- 🥚 工程师彩蛋 · easter-eggs.md —— 全仓挖到的吐槽/玩笑/TODO/明文凭据(已脱敏)/GM 后门/ASCII 艺术等"人味遗留"。
模块文档(概览)
- 摩尔庄园系:mole.md · mole2.md
- 其它游戏:gf.md(功夫派) · monster.md(小怪兽) · pea.md(赛尔号) · boke.md(卜克)
- 基础设施:c.md · libtaomee.md · dbser.md · pic_server.md · common-tools.md · itl.md
概览文档回答"是什么/值不值得挖";深度档案回答"它实际在运行时干什么"——逐进程/子目录拆解职责、调用流、关键函数(带源码行号),mole/gf/mole2 还追了端到端调用流(从 Flash 客户端到落 MySQL)。
- 摩尔庄园系:deep/mole.md(含"喂拉姆"全链路) · deep/mole2.md(七进程 + C↔Lua 怪物 AI + 跨服撮合)
- 其它游戏:deep/gf.md(实时动作战斗伤害公式 + BOSS AI 工厂) · deep/monster.md · deep/pea.md · deep/boke.md
- 基础设施:deep/c.md(net-io-server 回调生命周期) · deep/libtaomee.md(shmq/qdes) · deep/dbser.md(逐
ROUTE_解读分库地图) · deep/pic_server.md · deep/common-tools.md · deep/itl.md