GeneratePetJsonCommand.php 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172
  1. <?php
  2. namespace App\Module\Pet\Commands;
  3. use App\Module\Pet\Models\PetConfig;
  4. use App\Module\Pet\Models\PetLevelConfig;
  5. use App\Module\Pet\Models\PetSkill;
  6. use Illuminate\Console\Command;
  7. use Illuminate\Support\Facades\Log;
  8. /**
  9. * 生成宠物配置表JSON数据命令
  10. *
  11. * 该命令用于从数据库中的宠物相关表生成宠物JSON数据文件,供客户端使用。
  12. * 生成的JSON文件包含宠物的基本信息、等级配置和技能配置等。
  13. * 该命令通常在宠物配置更新后运行,以确保客户端获取最新的宠物数据。
  14. */
  15. class GeneratePetJsonCommand extends Command
  16. {
  17. /**
  18. * 命令名称和签名
  19. *
  20. * @var string
  21. */
  22. protected $signature = 'pet:generate-json';
  23. /**
  24. * 命令描述
  25. *
  26. * @var string
  27. */
  28. protected $description = 'Generate pet configuration JSON files from database';
  29. /**
  30. * 生成宠物配置JSON数据
  31. *
  32. * @param bool $saveToFile 是否保存到文件
  33. * @return array 生成的数据
  34. */
  35. public static function generateJson()
  36. {
  37. try {
  38. // 生成宠物基础配置JSON
  39. $petConfigData = self::generatePetConfigJson();
  40. // 生成宠物等级配置JSON
  41. $petLevelConfigData = self::generatePetLevelConfigJson();
  42. // 生成宠物技能配置JSON
  43. $petSkillConfigData = self::generatePetSkillConfigJson();
  44. // 返回所有配置数据
  45. return [
  46. 'pet_config' => $petConfigData,
  47. 'pet_level_config' => $petLevelConfigData,
  48. 'pet_skill_config' => $petSkillConfigData,
  49. 'success' => true,
  50. 'generated_ts' => time()
  51. ];
  52. } catch (\Exception $e) {
  53. Log::error('Generate pet JSON failed: ' . $e->getMessage());
  54. return [
  55. 'success' => false,
  56. 'error' => $e->getMessage()
  57. ];
  58. }
  59. }
  60. /**
  61. * 生成宠物基础配置JSON
  62. */
  63. private static function generatePetConfigJson()
  64. {
  65. // 查询宠物配置表数据
  66. $petConfigs = PetConfig::all()
  67. ->map(function ($config) {
  68. return [
  69. 'id' => $config->id,
  70. 'pet_type' => $config->pet_type,
  71. 'grade_probability' => $config->grade_probability,
  72. 'display_attributes' => $config->display_attributes,
  73. 'numeric_attributes' => $config->numeric_attributes
  74. ];
  75. })
  76. ->toArray();
  77. // 准备完整数据,包含生成时间
  78. return [
  79. 'generated_ts' => time(),
  80. 'pets' => $petConfigs
  81. ];
  82. }
  83. /**
  84. * 生成宠物等级配置JSON
  85. */
  86. private static function generatePetLevelConfigJson()
  87. {
  88. // 查询宠物等级配置表数据
  89. $petLevelConfigs = PetLevelConfig::orderBy('level')
  90. ->get()
  91. ->map(function ($config) {
  92. return [
  93. 'level' => $config->level,
  94. 'exp_required' => $config->exp_required,
  95. 'skills' => $config->skills,
  96. 'display_attributes' => $config->display_attributes,
  97. 'numeric_attributes' => $config->numeric_attributes
  98. ];
  99. })
  100. ->toArray();
  101. // 准备完整数据,包含生成时间
  102. return [
  103. 'generated_ts' => time(),
  104. 'pet_levels' => $petLevelConfigs
  105. ];
  106. }
  107. /**
  108. * 生成宠物技能配置JSON
  109. */
  110. private static function generatePetSkillConfigJson()
  111. {
  112. // 查询宠物技能配置表数据
  113. $petSkills = PetSkill::all()
  114. ->map(function ($skill) {
  115. return [
  116. 'id' => $skill->id,
  117. 'skill_name' => $skill->skill_name,
  118. 'stamina_cost' => $skill->stamina_cost,
  119. 'cool_down' => $skill->cool_down,
  120. 'effect_desc' => $skill->effect_desc,
  121. 'min_level' => $skill->min_level
  122. ];
  123. })
  124. ->toArray();
  125. // 准备完整数据,包含生成时间
  126. return [
  127. 'generated_ts' => time(),
  128. 'pet_skills' => $petSkills
  129. ];
  130. }
  131. /**
  132. * 执行命令
  133. */
  134. public function handle()
  135. {
  136. $this->info('Generating pet configuration JSON files...');
  137. $result = self::generateJson();
  138. if ($result['success']) {
  139. $this->info('Successfully generated pet configuration JSON files.');
  140. // 显示生成的配置数据概要
  141. $this->info('Pet configs: ' . count($result['pet_config']['pets']));
  142. $this->info('Pet level configs: ' . count($result['pet_level_config']['pet_levels']));
  143. $this->info('Pet skill configs: ' . count($result['pet_skill_config']['pet_skills']));
  144. } else {
  145. $this->error('Failed to generate pet configuration JSON files: ' . $result['error']);
  146. }
  147. }
  148. }