# 分解和合成系统优化总结 ## 完成的工作 ### 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 (金币返还率) └── ItemDismantleResult (分解结果) ├── result_item_id (产出物品) ├── min_quantity/max_quantity (数量范围) └── base_chance (基础概率) ``` ### 新系统架构 #### 统一的组系统架构 ``` ItemRecipe/ItemDismantleRule ├── consume_group_id → GameConsumeGroup (消耗组) │ └── GameConsumeItem[] (消耗项列表) ├── reward_group_id → GameRewardGroup (奖励组) │ └── GameRewardItem[] (奖励项列表) └── condition_group_id → GameConditionGroup (条件组) └── GameConditionItem[] (条件项列表) ``` ## 主要优势 ### 1. 统一性 - **架构一致**:合成和分解系统使用相同的组管理方式 - **数据结构统一**:消耗、奖励、条件的处理方式完全一致 - **代码复用**:可以共享相同的服务层和验证逻辑 ### 2. 灵活性 - **消耗多样化**:支持物品、货币、经验等多种消耗类型 - **奖励丰富化**:支持随机奖励、权重配置、必中奖励 - **条件复杂化**:支持多种条件的组合和逻辑运算 ### 3. 可维护性 - **配置与逻辑分离**:游戏平衡调整只需修改配置数据 - **组可复用**:同一个组可以被多个规则/配方使用 - **清晰的数据结构**:便于理解和维护 ### 4. 扩展性 - **新类型支持**:易于添加新的消耗、奖励、条件类型 - **业务逻辑扩展**:为未来的功能扩展预留了空间 - **向后兼容**:保留了对旧系统的兼容性 ## JSON数据结构变化 ### 新的合成配方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结构 ```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. 数据库更新 ```sql -- 更新合成配方表 source database/sql/update_item_recipes_for_groups.sql; -- 更新分解规则表 source database/sql/update_item_dismantle_rules_for_groups.sql; ``` ### 2. 创建示例数据 ```bash # 创建示例合成配方 php artisan recipes:create-samples # 创建示例分解规则 php artisan dismantle:create-samples ``` ### 3. 验证功能 - 访问后台合成配方管理页面:`/admin/game-items-recipes` - 访问后台分解规则管理页面:`/admin/game-items-dismantle-rules` - 测试创建、编辑、查看功能 ### 4. 生成JSON配置 ```bash # 生成新的合成配方JSON php artisan recipe:generate-json # 生成新的分解规则JSON php artisan dismantle:generate-json ``` ## 注意事项 ### 1. 数据迁移 - 由于结构变化较大,现有数据将被保留但需要重新配置 - 建议先备份现有数据 - 旧的材料表和结果表数据仍然保留,用于兼容性 ### 2. 依赖服务 - 需要确保 `ConsumeService`、`RewardService` 和 `ConditionService` 的相关方法已实现 - 如果方法不存在,需要先实现或临时注释相关代码 ### 3. 物品数据 - 示例中引用的物品ID需要确保存在 - 如果物品不存在,需要先创建相应的物品数据 ## 后续建议 ### 1. 完善服务层 - 实现完整的组系统服务方法 - 添加缓存机制提高性能 - 完善错误处理和日志记录 ### 2. 扩展功能 - 添加批量操作功能 - 支持更多的消耗、奖励、条件类型 - 添加预览和模拟功能 ### 3. 测试完善 - 编写单元测试和集成测试 - 进行性能测试 - 验证JSON生成的正确性 ## 总结 通过这次优化,合成和分解系统已经完全统一到组系统架构下,不仅提供了更强的功能性和灵活性,还为未来的功能扩展奠定了坚实的基础。新系统的设计理念将有助于整个游戏系统的一致性和可维护性。