CreateSampleDismantleRules.php 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195
  1. <?php
  2. namespace App\Console\Commands;
  3. use Illuminate\Console\Command;
  4. use Illuminate\Support\Facades\DB;
  5. use App\Module\Game\Models\GameConsumeGroup;
  6. use App\Module\Game\Models\GameConsumeItem;
  7. use App\Module\Game\Models\GameRewardGroup;
  8. use App\Module\Game\Models\GameRewardItem;
  9. use App\Module\Game\Models\GameConditionGroup;
  10. use App\Module\Game\Models\GameConditionItem;
  11. use App\Module\GameItems\Models\ItemDismantleRule;
  12. class CreateSampleDismantleRules extends Command
  13. {
  14. /**
  15. * The name and signature of the console command.
  16. *
  17. * @var string
  18. */
  19. protected $signature = 'dismantle:create-samples';
  20. /**
  21. * The console command description.
  22. *
  23. * @var string
  24. */
  25. protected $description = '创建示例分解规则(使用组系统)';
  26. /**
  27. * Execute the console command.
  28. */
  29. public function handle()
  30. {
  31. $this->info('开始创建示例分解规则...');
  32. try {
  33. DB::beginTransaction();
  34. // 创建基础物品分解规则
  35. $this->createBasicItemDismantleRule();
  36. // 创建高级装备分解规则
  37. $this->createAdvancedEquipmentDismantleRule();
  38. DB::commit();
  39. $this->info('示例分解规则创建完成!');
  40. } catch (\Exception $e) {
  41. DB::rollBack();
  42. $this->error('创建失败: ' . $e->getMessage());
  43. return 1;
  44. }
  45. return 0;
  46. }
  47. /**
  48. * 创建基础物品分解规则
  49. */
  50. private function createBasicItemDismantleRule()
  51. {
  52. $this->info('创建基础物品分解规则...');
  53. // 1. 创建奖励组
  54. $rewardGroup = GameRewardGroup::create([
  55. 'name' => '基础物品分解奖励',
  56. 'code' => 'basic_item_dismantle_reward',
  57. 'description' => '分解基础物品获得的奖励',
  58. 'is_random' => false, // 全部发放
  59. ]);
  60. // 添加奖励项:获得一些基础材料
  61. GameRewardItem::create([
  62. 'group_id' => $rewardGroup->id,
  63. 'reward_type' => 1, // 物品类型
  64. 'target_id' => 33, // 木材ID
  65. 'quantity' => 1,
  66. 'weight' => 1.0,
  67. 'is_guaranteed' => true,
  68. ]);
  69. // 2. 创建分解规则
  70. ItemDismantleRule::create([
  71. 'name' => '基础物品分解',
  72. 'code' => 'basic_item_dismantle',
  73. 'description' => '分解基础物品,获得原材料',
  74. 'item_id' => null, // 通用规则,不限定特定物品
  75. 'category_id' => 1, // 假设分类ID为1的是基础物品
  76. 'consume_group_id' => null, // 无额外消耗
  77. 'reward_group_id' => $rewardGroup->id,
  78. 'condition_group_id' => null, // 无条件限制
  79. 'priority' => 10,
  80. 'sort_order' => 100,
  81. 'is_active' => true,
  82. ]);
  83. $this->line(' - 基础物品分解规则创建完成');
  84. }
  85. /**
  86. * 创建高级装备分解规则
  87. */
  88. private function createAdvancedEquipmentDismantleRule()
  89. {
  90. $this->info('创建高级装备分解规则...');
  91. // 1. 创建消耗组(需要分解工具)
  92. $consumeGroup = GameConsumeGroup::create([
  93. 'name' => '高级装备分解消耗',
  94. 'code' => 'advanced_equipment_dismantle_consume',
  95. 'description' => '分解高级装备需要的工具',
  96. ]);
  97. // 添加消耗项:需要分解工具
  98. GameConsumeItem::create([
  99. 'group_id' => $consumeGroup->id,
  100. 'consume_type' => 1, // 物品类型
  101. 'target_id' => 50, // 分解工具ID(需要先创建)
  102. 'quantity' => 1,
  103. ]);
  104. // 2. 创建奖励组
  105. $rewardGroup = GameRewardGroup::create([
  106. 'name' => '高级装备分解奖励',
  107. 'code' => 'advanced_equipment_dismantle_reward',
  108. 'description' => '分解高级装备获得的奖励',
  109. 'is_random' => true, // 随机发放
  110. 'random_count' => 2, // 随机选择2个奖励
  111. ]);
  112. // 添加奖励项:随机获得高级材料
  113. GameRewardItem::create([
  114. 'group_id' => $rewardGroup->id,
  115. 'reward_type' => 1, // 物品类型
  116. 'target_id' => 51, // 高级金属ID(需要先创建)
  117. 'quantity' => 3,
  118. 'weight' => 60.0, // 60%概率
  119. 'is_guaranteed' => false,
  120. ]);
  121. GameRewardItem::create([
  122. 'group_id' => $rewardGroup->id,
  123. 'reward_type' => 1, // 物品类型
  124. 'target_id' => 52, // 稀有宝石ID(需要先创建)
  125. 'quantity' => 1,
  126. 'weight' => 30.0, // 30%概率
  127. 'is_guaranteed' => false,
  128. ]);
  129. GameRewardItem::create([
  130. 'group_id' => $rewardGroup->id,
  131. 'reward_type' => 2, // 货币类型
  132. 'target_id' => 1, // 金币ID
  133. 'quantity' => 100,
  134. 'weight' => 100.0, // 100%概率
  135. 'is_guaranteed' => true,
  136. ]);
  137. // 3. 创建条件组
  138. $conditionGroup = GameConditionGroup::create([
  139. 'name' => '高级装备分解条件',
  140. 'code' => 'advanced_equipment_dismantle_condition',
  141. 'description' => '分解高级装备的条件',
  142. 'logic_type' => 1, // 全部满足
  143. ]);
  144. // 添加条件项:玩家等级≥10
  145. GameConditionItem::create([
  146. 'group_id' => $conditionGroup->id,
  147. 'condition_type' => 1, // 假设1为玩家等级条件
  148. 'target_id' => 0, // 玩家等级不需要target_id
  149. 'operator' => 4, // 大于等于
  150. 'value' => 10,
  151. ]);
  152. // 4. 创建分解规则
  153. ItemDismantleRule::create([
  154. 'name' => '高级装备分解',
  155. 'code' => 'advanced_equipment_dismantle',
  156. 'description' => '分解高级装备,需要分解工具,有机会获得稀有材料',
  157. 'item_id' => null, // 通用规则
  158. 'category_id' => 2, // 假设分类ID为2的是高级装备
  159. 'consume_group_id' => $consumeGroup->id,
  160. 'reward_group_id' => $rewardGroup->id,
  161. 'condition_group_id' => $conditionGroup->id,
  162. 'priority' => 20,
  163. 'sort_order' => 50,
  164. 'is_active' => true,
  165. ]);
  166. $this->line(' - 高级装备分解规则创建完成');
  167. }
  168. }