Files
zeling_v2/Docs/DesignSpec/12_EconomySystem.md
2026-05-08 11:04:00 +08:00

166 lines
4.9 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.
# 12 · 经济系统规范
> **所属文档集** [← 返回索引](./README.md)
> **摘要**Geo 货币体系、商店系统、掉落经济平衡与消费循环设计。
---
## 目录
1. [经济设计原则](#1-经济设计原则)
2. [Geo 货币体系](#2-geo-货币体系)
3. [商店系统](#3-商店系统)
4. [物品数据模型](#4-物品数据模型)
5. [经济平衡参数](#5-经济平衡参数)
6. [经济事件目录](#6-经济事件目录)
---
## 1. 经济设计原则
| 原则 | 说明 |
|------|------|
| **单一货币** | 只有 Geo避免多货币系统带来的混乱 |
| **死亡有意义** | 遗骸机制使 Geo 有风险感,强化决策权重 |
| **非强制消费** | 所有商店物品为锦上添花,不买也能通关 |
| **价格成长** | 后期物品价格随区域进程递增 |
---
## 2. Geo 货币体系
### 2.1 Geo 获取来源
| 来源 | 数量范围 | 说明 |
|------|---------|------|
| 击杀普通敌人 | 1-15 | 随敌人等级变化 |
| 击杀精英怪 | 20-60 | |
| 击杀 Boss | 100-500 | |
| 拾取 GeoCache 收集品 | 固定值 | 地图中隐藏的 Geo 堆 |
| 出售物品 | 物品定价 50% | 部分物品可出售 |
| 完成 NPC 任务 | 任务奖励 | |
### 2.2 Geo 消耗途径
| 途径 | 数量范围 | 说明 |
|------|---------|------|
| 商店购买护符 | 100-1200 | 主要消耗 |
| 商店购买消耗品 | 20-200 | |
| Notch 扩展 | 递增150/300/500...| 扩展护符槽位 |
| 门控通行费 | 固定值 | 某些区域收费通道 |
| NPC 服务 | 固定值 | 特殊 NPC 的服务费 |
### 2.3 Geo 上限
| 规则 | 说明 |
|------|------|
| 携带上限 | 无上限(设计上不设置)|
| 遗骸上限 | 携带量全部转为遗骸 |
| 显示格式 | 整数,无小数点 |
---
## 3. 商店系统
### 3.1 商店数据模型
```
DataModel ShopData {
shopId : ID
shopkeeperNpcId : ID // 关联 NPC
──────────────────────────────────
inventory : List<ShopItemEntry>
refreshCondition: Optional<RefreshCondition> // 何时刷新库存
welcomeText : String
}
DataModel ShopItemEntry {
itemId : Ref<ItemData>
basePrice : Integer
stock : Optional<Integer> // null = 无限库存
availableCondition: Optional<GateCondition> // 解锁条件null=始终可购)
discountFlags : Optional<Flags<DiscountSource>> // 折扣来源
}
```
### 3.2 购买流程
```
玩家在商店 UI 选择物品并确认购买:
→ 检查玩家 Geo >= itemPrice
├─ 不足 → 显示"Geo 不足"提示,取消
└─ 足够 →
→ 扣除 playerGeo -= itemPrice
→ 将物品加入玩家库存(或直接应用效果)
→ 若有 stockstock -= 1
→ stock == 0 时,从列表中移除该项
→ 发出 OnShopPurchase 事件
```
---
## 4. 物品数据模型
```
DataModel ItemData {
itemId : ID
displayName : String
description : String
──────────────────────────────────
itemType : ItemType // 护符/消耗品/关键道具/图鉴
stackable : Boolean
maxStack : Optional<Integer> // null = 无限叠加
──────────────────────────────────
useEffect : Optional<Ref<UseEffectData>> // 使用效果(消耗品)
sellValue : Optional<Integer> // null = 不可出售
}
```
### 4.1 物品类型
| 类型 | 说明 | 叠加 |
|------|------|------|
| `Charm` | 护符,装备型 | 不叠加(每种只有 1 个)|
| `Consumable` | 消耗品,使用即激活效果 | 叠加,最多 9 个/槽 |
| `KeyItem` | 关键道具,推进剧情/开门 | 不叠加 |
| `LoreItem` | 世界观物品,加入图鉴 | 不叠加 |
| `Map` | 区域地图碎片 | 不叠加 |
---
## 5. 经济平衡参数
### 5.1 区域 Geo 密度(参考)
| 游戏阶段 | 单次刷怪平均 Geo | 护符平均价格 |
|---------|---------------|------------|
| 早期区域1-2 区)| 5-20 | 100-300 |
| 中期区域3-4 区)| 15-50 | 400-700 |
| 后期区域5+ 区)| 40-120 | 800-1200 |
> **平衡原则**:购买一件中期护符约需清扫 2-3 个房间的敌人,不应过长也不应过短。
### 5.2 Notch 扩展价格表
| 第 N 次扩展 | 价格Geo|
|-----------|-----------|
| 1 | 150 |
| 2 | 300 |
| 3 | 500 |
| 4 | 800 |
| 5 | 1200 |
| 6+ | 递增 500/次 |
---
## 6. 经济事件目录
| 事件 | 触发时机 | 载荷 |
|------|---------|------|
| `OnGeoChanged` | Geo 数量变化 | `delta: Integer, newTotal: Integer` |
| `OnShopOpened` | 打开商店 | `shopId` |
| `OnShopPurchase` | 完成购买 | `shopId, itemId, price` |
| `OnItemAcquired` | 获得任何物品 | `itemId, source` |
| `OnItemUsed` | 使用消耗品 | `itemId` |
| `OnNotchExpanded` | 扩展护符槽 | `newNotchCount, geoCost` |