DISMANTLE_RECIPE_OPTIMIZATION_SUMMARY.md 7.2 KB

分解和合成系统优化总结

完成的工作

1. 分解系统优化

  • ✅ 更新了 ItemDismantleRule 模型,集成消耗组、奖励组和条件组
  • ✅ 添加了新的字段:name、code、description、consume_group_id、reward_group_id、condition_group_id、sort_order
  • ✅ 更新了业务逻辑方法,使用组系统进行验证和奖励发放
  • ✅ 完全重构了 DismantleRuleController 后台管理

2. 合成系统优化

  • ✅ 更新了 ItemRecipe 模型,集成消耗组、奖励组和条件组
  • ✅ 移除了旧的字段,添加了新的关系方法
  • ✅ 完全重构了 RecipeController 后台管理

3. JSON生成命令优化

  • ✅ 更新了 GenerateDismantleJsonCommand,支持新的组系统数据结构
  • ✅ 更新了 GenerateRecipeJsonCommand,支持新的组系统数据结构
  • ✅ 保留了对旧系统的兼容性支持

4. 数据库结构优化

  • ✅ 创建了分解规则表的迁移SQL文件
  • ✅ 创建了合成配方表的迁移SQL文件
  • ✅ 添加了必要的索引和约束

5. 示例和文档

  • ✅ 创建了示例分解规则创建命令
  • ✅ 创建了示例合成配方创建命令
  • ✅ 提供了完整的使用说明和最佳实践

系统架构对比

旧系统架构

合成系统

ItemRecipe (配方)
├── result_item_id (产出物品)
├── result_quantity (产出数量)
├── coin_cost (金币消耗)
├── unlock_condition (解锁条件)
└── ItemRecipeMaterial (材料列表)
    ├── item_id (物品ID)
    ├── quantity (数量)
    └── is_consumed (是否消耗)

分解系统

ItemDismantleRule (分解规则)
├── item_id/category_id (适用范围)
├── priority (优先级)
├── coin_return_rate (金币返还率)
└── reward_group_id (奖励组) ← 新的奖励系统

注意:ItemDismantleResult表已废弃,现在使用奖励组系统。

新系统架构

统一的组系统架构

ItemRecipe/ItemDismantleRule
├── consume_group_id → GameConsumeGroup (消耗组)
│   └── GameConsumeItem[] (消耗项列表)
├── reward_group_id → GameRewardGroup (奖励组)
│   └── GameRewardItem[] (奖励项列表)
└── condition_group_id → GameConditionGroup (条件组)
    └── GameConditionItem[] (条件项列表)

主要优势

1. 统一性

  • 架构一致:合成和分解系统使用相同的组管理方式
  • 数据结构统一:消耗、奖励、条件的处理方式完全一致
  • 代码复用:可以共享相同的服务层和验证逻辑

2. 灵活性

  • 消耗多样化:支持物品、货币、经验等多种消耗类型
  • 奖励丰富化:支持随机奖励、权重配置、必中奖励
  • 条件复杂化:支持多种条件的组合和逻辑运算

3. 可维护性

  • 配置与逻辑分离:游戏平衡调整只需修改配置数据
  • 组可复用:同一个组可以被多个规则/配方使用
  • 清晰的数据结构:便于理解和维护

4. 扩展性

  • 新类型支持:易于添加新的消耗、奖励、条件类型
  • 业务逻辑扩展:为未来的功能扩展预留了空间
  • 向后兼容:保留了对旧系统的兼容性

JSON数据结构变化

新的合成配方JSON结构

{
  "generated_ts": 1732896000,
  "recipes": [
    {
      "id": 1,
      "name": "木板制作",
      "code": "wood_plank_craft",
      "description": "将木材加工成木板",
      "success_rate": 1.0,
      "cooldown_seconds": 0,
      "sort_order": 100,
      "consume_group": {
        "id": 1,
        "name": "木板制作消耗",
        "items": [
          {
            "consume_type": 1,
            "target_id": 33,
            "quantity": 1
          }
        ]
      },
      "reward_group": {
        "id": 1,
        "name": "木板制作奖励",
        "is_random": false,
        "random_count": 0,
        "items": [
          {
            "reward_type": 1,
            "target_id": 34,
            "quantity": 4,
            "weight": 1.0,
            "is_guaranteed": true
          }
        ]
      }
    }
  ]
}

新的分解规则JSON结构

{
  "generated_ts": 1732896000,
  "dismantle_rules": [
    {
      "id": 1,
      "name": "高级装备分解",
      "code": "advanced_equipment_dismantle",
      "description": "分解高级装备获得稀有材料",
      "rule_type": "category",
      "category_id": 2,
      "priority": 20,
      "sort_order": 50,
      "consume_group": {
        "id": 1,
        "name": "高级装备分解消耗",
        "items": [
          {
            "consume_type": 1,
            "target_id": 50,
            "quantity": 1
          }
        ]
      },
      "reward_group": {
        "id": 2,
        "name": "高级装备分解奖励",
        "is_random": true,
        "random_count": 2,
        "items": [
          {
            "reward_type": 1,
            "target_id": 51,
            "quantity": 3,
            "weight": 60.0,
            "is_guaranteed": false
          }
        ]
      },
      "condition_group": {
        "id": 1,
        "name": "高级装备分解条件",
        "logic_type": 1,
        "items": [
          {
            "condition_type": 1,
            "target_id": 0,
            "operator": 4,
            "value": 10
          }
        ]
      }
    }
  ]
}

需要执行的步骤

1. 数据库更新

-- 更新合成配方表
source database/sql/update_item_recipes_for_groups.sql;

-- 更新分解规则表
source database/sql/update_item_dismantle_rules_for_groups.sql;

2. 创建示例数据

# 创建示例合成配方
php artisan recipes:create-samples

# 创建示例分解规则
php artisan dismantle:create-samples

3. 验证功能

  • 访问后台合成配方管理页面:/admin/game-items-recipes
  • 访问后台分解规则管理页面:/admin/game-items-dismantle-rules
  • 测试创建、编辑、查看功能

4. 生成JSON配置

# 生成新的合成配方JSON
php artisan recipe:generate-json

# 生成新的分解规则JSON
php artisan dismantle:generate-json

注意事项

1. 数据迁移

  • 由于结构变化较大,现有数据将被保留但需要重新配置
  • 建议先备份现有数据
  • 旧的材料表和结果表数据仍然保留,用于兼容性

2. 依赖服务

  • 需要确保 ConsumeServiceRewardServiceConditionService 的相关方法已实现
  • 如果方法不存在,需要先实现或临时注释相关代码

3. 物品数据

  • 示例中引用的物品ID需要确保存在
  • 如果物品不存在,需要先创建相应的物品数据

后续建议

1. 完善服务层

  • 实现完整的组系统服务方法
  • 添加缓存机制提高性能
  • 完善错误处理和日志记录

2. 扩展功能

  • 添加批量操作功能
  • 支持更多的消耗、奖励、条件类型
  • 添加预览和模拟功能

3. 测试完善

  • 编写单元测试和集成测试
  • 进行性能测试
  • 验证JSON生成的正确性

总结

通过这次优化,合成和分解系统已经完全统一到组系统架构下,不仅提供了更强的功能性和灵活性,还为未来的功能扩展奠定了坚实的基础。新系统的设计理念将有助于整个游戏系统的一致性和可维护性。