| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- <?php
- namespace App\Module\Farm\Commands;
- use App\Module\Farm\Models\FarmSeed;
- use App\Module\Farm\Models\FarmFruitGrowthCycle;
- use Illuminate\Console\Command;
- /**
- * 生成种子配置表JSON数据命令
- *
- * 该命令用于从数据库中的种子表和种子产出表生成JSON数据文件,供客户端使用。
- * 生成的JSON文件包含种子的基本信息,如种子ID、名称、类型、生长时间、产量范围、灾害抵抗等,
- * 以及种子的产出配置信息。该命令通常在种子配置数据更新后运行,以确保客户端获取最新的配置数据。
- */
- class GenerateFarmSeedConfigJson extends Command
- {
- /**
- * 命令名称
- *
- * @var string
- */
- protected $signature = 'farm:generate-seed-json';
- /**
- * 命令描述
- *
- * @var string
- */
- protected $description = '生成种子配置JSON文件';
- /**
- * 生成种子配置JSON数据
- *
- * @return array|bool 生成的数据或失败标志
- */
- public static function generateJson()
- {
- try {
- // 获取所有种子配置,预加载产出关联
- $seeds = FarmSeed::with('outputs')->orderBy('id')->get();
- // 准备JSON数据
- $jsonData = [
- 'generated_ts' => time(),
- 'seeds' => [],
- 'fruit_growth_cycles' => []
- ];
- // 获取所有果实生长周期配置
- $fruitGrowthCycles = FarmFruitGrowthCycle::all()->keyBy('fruit_item_id');
- // 处理果实生长周期数据
- foreach ($fruitGrowthCycles as $fruitItemId => $cycle) {
- $jsonData['fruit_growth_cycles'][$fruitItemId] = [
- 'sprout_time' => $cycle->sprout_time,
- 'growth_time' => $cycle->growth_time,
- 'fruit_time' => $cycle->fruit_time, // 添加果实期时间
- 'mature_time' => $cycle->mature_time,
- 'wither_time' => $cycle->wither_time,
- ];
- }
- // 处理种子基本数据和产出数据
- foreach ($seeds as $seed) {
- // 获取种子的所有产出物品ID
- $seedOutputs = [];
- foreach ($seed->outputs as $output) {
- $seedOutputs[] = $output->item_id;
- }
- $jsonData['seeds'][] = [
- 'id' => $seed->id,
- 'name' => $seed->name,
- 'type' => $seed->type,
- 'seed_time' => $seed->seed_time,
- 'sprout_time' => $seed->sprout_time ?? 0, // 种子级别的发芽期时间
- 'growth_time' => $seed->growth_time ?? 0, // 种子级别的生长期时间
- 'fruit_time' => $seed->fruit_time ?? 0, // 种子级别的果实期时间
- 'mature_time' => $seed->mature_time ?? 0, // 种子级别的成熟期时间
- 'wither_time' => $seed->wither_time ?? 0, // 种子级别的枯萎期时间
- 'min_output' => $seed->min_output,
- 'max_output' => $seed->max_output,
- 'disaster_min_output' => $seed->disaster_min_output ?? 0,
- 'disaster_max_output' => $seed->disaster_max_output ?? 0,
- 'item_id' => $seed->item_id,
- 'disaster_resistance' => $seed->disaster_resistance,
- 'display_attributes' => $seed->display_attributes,
- 'seed_outputs' => $seedOutputs, // 直接在种子属性中包含产出物品ID数组
- ];
- }
- return $jsonData;
- } catch (\Exception $e) {
- if (php_sapi_name() === 'cli') {
- echo "Error: Generate farm_seed.json failed: {$e->getMessage()}\n";
- }
- return false;
- }
- }
- /**
- * 执行命令
- *
- * @return int
- */
- public function handle()
- {
- $this->info('开始生成种子配置JSON文件...');
- try {
- // 通过缓存类生成JSON
- $result = \App\Module\Game\DCache\FarmSeedJsonConfig::getData([], true);
- if ($result !== false && is_array($result)) {
- $this->info('种子配置JSON文件生成成功');
- $this->info('共生成 ' . count($result['seeds'] ?? []) . ' 条种子数据');
- // 统计总的产出物品数量
- $totalOutputs = 0;
- foreach ($result['seeds'] as $seed) {
- $totalOutputs += count($seed['seed_outputs'] ?? []);
- }
- $this->info('共包含 ' . $totalOutputs . ' 个种子产出物品');
- $this->info('共包含 ' . count($result['fruit_growth_cycles'] ?? []) . ' 个果实生长周期配置');
- // 显示一些示例数据
- if (!empty($result['seeds'])) {
- $this->info('种子示例数据:');
- $firstSeed = $result['seeds'][0];
- $this->line(' ID: ' . $firstSeed['id'] . ', 名称: ' . $firstSeed['name']);
- $this->line(' 产出物品: [' . implode(', ', $firstSeed['seed_outputs'] ?? []) . ']');
- }
- return Command::SUCCESS;
- } else {
- $this->error('生成种子配置JSON文件失败');
- return Command::FAILURE;
- }
- } catch (\Exception $e) {
- $this->error('生成种子配置JSON文件失败: ' . $e->getMessage());
- return Command::FAILURE;
- }
- }
- }
|