'boolean', 'random_count' => 'integer', 'reward_mode' => 'integer', ]; /** * 获取奖励组中的所有奖励项 * * @return HasMany */ public function rewardItems(): HasMany { return $this->hasMany(GameRewardItem::class, 'group_id', 'id'); } /** * 格式化奖励详情用于显示 * * @return string */ public function formatRewardDetails(): string { if ($this->rewardItems->isEmpty()) { return '暂无奖励项'; } $details = []; foreach ($this->rewardItems as $item) { $detail = $this->formatSingleRewardItem($item); $details[] = $detail; } return '
' . implode('
', $details) . '
'; } /** * 格式化单个奖励项 * * @param GameRewardItem $item * @return string */ private function formatSingleRewardItem(GameRewardItem $item): string { $rewardTypeName = \App\Module\Game\Enums\REWARD_TYPE::getName($item->reward_type); $targetName = $this->getTargetName($item); $quantity = $item->quantity; $weight = $item->weight; $guaranteed = $item->is_guaranteed ? '必中' : '非必中'; return sprintf( '%s %s × %d (权重: %.2f, %s)', $rewardTypeName, $targetName, $quantity, $weight, $guaranteed ); } /** * 获取目标名称 * * @param GameRewardItem $item * @return string */ private function getTargetName(GameRewardItem $item): string { switch ($item->reward_type) { case \App\Module\Game\Enums\REWARD_TYPE::ITEM->value: try { $itemModel = \App\Module\GameItems\Models\Item::find($item->target_id); return $itemModel ? $itemModel->name : "物品 (ID: {$item->target_id})"; } catch (\Exception $e) { return "物品 (ID: {$item->target_id})"; } case \App\Module\Game\Enums\REWARD_TYPE::CURRENCY->value: try { $currency = \App\Module\Fund\Models\FundCurrencyModel::find($item->target_id); return $currency ? $currency->name : "货币 (ID: {$item->target_id})"; } catch (\Exception $e) { return "货币 (ID: {$item->target_id})"; } case \App\Module\Game\Enums\REWARD_TYPE::FUND_CONFIG->value: try { $fund = \App\Module\Fund\Models\FundConfigModel::find($item->target_id); return $fund ? $fund->name : "账户种类 (ID: {$item->target_id})"; } catch (\Exception $e) { return "账户种类 (ID: {$item->target_id})"; } case \App\Module\Game\Enums\REWARD_TYPE::PET_EXP->value: return "宠物经验 (宠物ID: {$item->target_id})"; case \App\Module\Game\Enums\REWARD_TYPE::PET_ENERGY->value: return "宠物体力 (宠物ID: {$item->target_id})"; case \App\Module\Game\Enums\REWARD_TYPE::FARM_SHRINE->value: try { $shrineName = \App\Module\Farm\Enums\BUFF_TYPE::getName($item->target_id); $durationHours = $item->param2 > 0 ? $item->param2 : 24; return "{$shrineName} ({$durationHours}小时)"; } catch (\Exception $e) { return "神像 (类型: {$item->target_id})"; } case \App\Module\Game\Enums\REWARD_TYPE::OTHER->value: return "其他奖励 (ID: {$item->target_id})"; default: return "未知奖励类型 (ID: {$item->target_id})"; } } }