XtGameKit/README.md

122 lines
6.2 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# XtGameKit
基于 **ET 9.0 + YIUI** 框架的 SLG/养成业务包集合,包含:英雄系统、酒馆(抽卡)、通用背包、配置加载、数据持久化、跨模块 Invoke 契约。
本仓库**只放自研业务包与设计文档****不放 ET 框架本体**(用户拉到本地后请自行从 ET 框架仓库拉取 `cn.etetet.*`)。
---
## 一、仓库目录
```
XtGameKit/
├── Packages/ # 8 个自研 cn.xt.* 包
│ ├── cn.xt.hero/ # 英雄系统(召唤/升级/培养)
│ ├── cn.xt.heroinvoke/ # 英雄系统跨包 Invoke 契约
│ ├── cn.xt.bag/ # 通用背包(万物皆 Item
│ ├── cn.xt.baginvoke/ # 背包跨包 Invoke 契约
│ ├── cn.xt.gacha/ # 酒馆(抽卡) = Tavern
│ ├── cn.xt.gachainvoke/ # 酒馆跨包 Invoke 契约
│ ├── cn.xt.config/ # 配置加载占位Luban 接入点)
│ └── cn.xt.db/ # 数据持久化Mongo/Memory 双实现 + 脏写)
├── Doc/ # 设计与移植规格文档
│ ├── Hero-System-Guide.md # 英雄系统使用指南
│ ├── Bag-System-Guide.md # 背包系统使用指南
│ ├── GM-Commands.md # GM 指令一览(含 YIUI GM 面板)
│ ├── Item-Design-Rule.md # Universal Item 设计准则
│ ├── Logging-Guide.md # 三层日志Business / Audit / Error
│ ├── Luban-Guide.md # Luban 配置接入流程
│ ├── ROK-Hero-Spec.md # ROK Hero 1:1 业务规则规格
│ ├── ROK-Bag-Spec.md # ROK Bag 业务规则规格
│ ├── ROK-Equip-Spec.md # ROK 装备业务规则规格
│ ├── ROK-HeroAcquire-Spec.md # ROK 英雄获取业务规则规格
│ ├── ROK-Spec-Index.md # ROK 规格总入口
│ ├── ROK-Config-Source.md # ROK 配置来源审计
│ ├── ROK-Luban-Field-Mapping.md # ROK→Luban 字段映射
│ ├── ET-Packages-Audit.md # ET 现有包审计(避免造轮子)
│ └── Server-Setup.md # 服务端部署
├── openspec/
│ └── changes/
│ └── port-rok-hero-bag-system/ # OpenSpec 提案 / 设计 / specs / tasks
└── .cursor/
└── skills/
└── et-framework-dev/ # ET 框架开发指南(分析器规则 / 程序集分层 / Proto 工作流)
```
---
## 二、模块概览
| 包 | 作用 | 关键入口 |
|---|---|---|
| `cn.xt.hero` | 英雄获取/升级/属性 | `HeroComponent`, GM `Hero-召唤` |
| `cn.xt.bag` | 通用 Item 仓库(万物皆 Item | `BagComponent.AddItem / RemoveItem` |
| `cn.xt.gacha` | 抽卡 = 酒馆 | `GachaComponent`, `C2G_GachaDraw` |
| `cn.xt.config` | Luban 配置占位 + 加载 fallback | `cfg.Tables` |
| `cn.xt.db` | 数据持久化(玩家加载/脏写/Flush | `IDBComponent`, `MongoDBComponent`, `MemoryDBComponent`, `DBSaveComponent` |
| `cn.xt.*invoke` | 跨包调用契约 | Pure interface/types无业务逻辑 |
### 设计原则
1. **业务包不依赖框架包以外的东西**:自家包之间只允许 `cn.xt.* → cn.xt.*invoke`,禁止业务直接 ref 业务实现。
2. **Mongo 服务端 + Memory 客户端**`MongoDBComponent``#if DOTNET || UNITY_EDITOR || UNITY_STANDALONE_*` 包住,客户端打包自动落到 `MemoryDBComponent`
3. **持久化走脏写**`DBSaveComponent.MarkDirty(player)` 标脏,固定节奏 Flush玩家下线/进程退出时也 Flush。
4. **GM 双轨**:服务器 `cn.etetet.console` + 客户端 `cn.etetet.yiuigm`,所有 GM 命令都两侧可用。
---
## 三、依赖(**框架包不在本仓库**
8 个 `cn.xt.*` 包在 `package.json` 里都依赖了 ET 框架包;你需要在自己工程的 `Packages/` 同级目录下,从 ET 官方仓库拉到这些包:
| `cn.xt.*` 需要的依赖 | 出处 |
|---|---|
| `cn.etetet.core` (>= 3.0.3) | ET 官方 |
| `cn.etetet.login` (>= 3.0.0) | ET 官方 |
| `cn.etetet.console` (>= 3.0.0) | ET 官方 |
| `cn.etetet.logging` (>= 0.0.1) | ET 官方 |
| `cn.etetet.yiuigm` (>= 3.0.4) | ET 官方(仅 `cn.xt.hero/bag/gacha` 需要) |
> 拉取方式:建议把 ET 官方仓库整体 clone 到 `Packages/` 同级(典型路径形如 `Packages/cn.etetet.*/`),或在 `manifest.json` 里以 `file:` / git 形式引用。
### 包间依赖(自家 → 自家)
```
cn.xt.hero ──> cn.xt.bag, cn.xt.config
cn.xt.gacha ──> cn.xt.bag
其余 cn.xt.* 包 之间无依赖(含 *invoke 几个零依赖契约包)
```
---
## 四、快速集成
1. 把整个 `Packages/` 目录的内容拷进新工程的 `Packages/`(保持目录名)
2. 从 ET 官方拉取 `cn.etetet.*` 框架包,放在同一 `Packages/`
3.`Packages/manifest.json` 里把这些包都登记进去(或用 `file:` 引用本地路径)
4. Unity 打开工程 → 等 UPM 解析 → 编译
5. 跑工程:登录后用 `Hero-召唤` GM 命令验证
---
## 五、文档怎么读
- **新人入门** → `Doc/Hero-System-Guide.md` + `Doc/Bag-System-Guide.md`
- **改业务** → `Doc/ROK-Spec-Index.md``ROK-*-Spec.md`
- **接 Luban** → `Doc/Luban-Guide.md` + `Doc/ROK-Luban-Field-Mapping.md`
- **改 GM** → `Doc/GM-Commands.md`
- **改持久化 / 日志** → `Doc/Logging-Guide.md`
- **看决策史** → `openspec/changes/port-rok-hero-bag-system/proposal.md``design.md`
- **避免 ET 踩坑** → `.cursor/skills/et-framework-dev/SKILL.md`
---
## 六、未推送内容(明确说明)
- ET 框架本体 `cn.etetet.*`(请到 ET 官方 git 拉)
- 服务器密钥/密码(`server_connect.md` 已**显式排除**
- 包名迁移工具 `tools/package-namespace-migrator.py`(属本机一次性脚本)
- 项目工程Unity 主工程 `Assets/``Library/` 等)