GenerateFarmShrineConfigJson.php 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293
  1. <?php
  2. namespace App\Module\Farm\Commands;
  3. use App\Module\Farm\Models\FarmShrineConfig;
  4. use App\Module\Game\DCache\FarmShrineJsonConfig;
  5. use Illuminate\Console\Command;
  6. use Illuminate\Support\Facades\Log;
  7. /**
  8. * 生成神像配置表JSON数据命令
  9. *
  10. * 该命令用于从数据库中的神像配置表生成JSON数据文件,供客户端使用。
  11. * 生成的JSON文件包含神像的基本信息,如类型、名称、描述、持续时间等。
  12. * 该命令通常在神像配置数据更新后运行,以确保客户端获取最新的配置数据。
  13. */
  14. class GenerateFarmShrineConfigJson extends Command
  15. {
  16. /**
  17. * 命令名称
  18. *
  19. * @var string
  20. */
  21. protected $signature = 'farm:generate-shrine-json';
  22. /**
  23. * 命令描述
  24. *
  25. * @var string
  26. */
  27. protected $description = '生成神像配置JSON文件';
  28. /**
  29. * 生成神像配置JSON数据
  30. *
  31. * @return array|bool 生成的数据或失败标志
  32. */
  33. public static function generateJson()
  34. {
  35. try {
  36. // 获取所有神像配置
  37. $configs = FarmShrineConfig::orderBy('buff_type')->get();
  38. // 准备JSON数据
  39. $jsonData = [
  40. 'generated_ts' => time(),
  41. 'shrine_configs' => []
  42. ];
  43. foreach ($configs as $config) {
  44. $jsonData['shrine_configs'][] = [
  45. 'id' => $config->id,
  46. 'buff_type' => $config->buff_type,
  47. 'name' => $config->name,
  48. 'description' => $config->description,
  49. 'duration_hours' => $config->duration_hours,
  50. 'item_id' => $config->item_id,
  51. 'display_attributes' => $config->display_attributes,
  52. 'numeric_attributes' => $config->numeric_attributes,
  53. ];
  54. }
  55. return $jsonData;
  56. } catch (\Exception $e) {
  57. Log::error('Generate farm_shrine.json failed: ' . $e->getMessage());
  58. if (php_sapi_name() === 'cli') {
  59. echo "Error: Generate farm_shrine.json failed: {$e->getMessage()}\n";
  60. }
  61. return false;
  62. }
  63. }
  64. /**
  65. * 执行命令
  66. *
  67. * @return int
  68. */
  69. public function handle()
  70. {
  71. $this->info('Generating farm_shrine.json...');
  72. $result = FarmShrineJsonConfig::getData([], true);
  73. $this->info('Successfully generated farm_shrine.json with ' . count($result['shrine_configs']) . ' shrine configs.');
  74. return 0;
  75. }
  76. }