| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218 |
- <?php
- namespace App\Module\Task\Services;
- use App\Module\Game\Services\ConditionGroupService;
- use App\Module\Game\Services\ConditionService;
- use App\Module\Task\Models\Task;
- use App\Module\Task\Models\TaskAchievementCondition;
- /**
- * 任务条件组服务
- *
- * 处理任务的条件组逻辑,包括前置条件组和达成条件组
- */
- class TaskConditionGroupService
- {
- /**
- * 获取任务的前置条件列表
- *
- * @param Task $task 任务模型
- * @return array 前置条件列表
- */
- public static function getPrerequisiteConditions(Task $task): array
- {
- if ($task->prerequisite_condition_group_id) {
- return ConditionGroupService::getConditionItems($task->prerequisite_condition_group_id);
- }
- return []; // 没有前置条件
- }
-
- /**
- * 获取任务的达成条件列表
- *
- * @param Task $task 任务模型
- * @return array 达成条件列表
- */
- public static function getAchievementConditions(Task $task): array
- {
- // 优先使用条件组
- if ($task->achievement_condition_group_id) {
- return ConditionGroupService::getConditionItems($task->achievement_condition_group_id);
- }
- // 回退到旧版条件
- return self::getLegacyAchievementConditions($task);
- }
-
- /**
- * 检查用户是否满足任务前置条件
- *
- * @param int $userId 用户ID
- * @param Task $task 任务模型
- * @return bool 是否满足前置条件
- */
- public static function checkPrerequisiteConditions(int $userId, Task $task): bool
- {
- if ($task->prerequisite_condition_group_id) {
- $result = ConditionService::checkCondition($userId, $task->prerequisite_condition_group_id);
- return $result['success'] ?? false;
- }
- return true; // 没有前置条件
- }
-
- /**
- * 检查用户是否满足任务达成条件
- *
- * @param int $userId 用户ID
- * @param Task $task 任务模型
- * @return bool 是否满足达成条件
- */
- public static function checkAchievementConditions(int $userId, Task $task): bool
- {
- if ($task->achievement_condition_group_id) {
- $result = ConditionService::checkCondition($userId, $task->achievement_condition_group_id);
- return $result['success'] ?? false;
- }
- // 回退到旧版条件检查
- $conditions = self::getLegacyAchievementConditions($task);
- if (empty($conditions)) {
- return true; // 没有达成条件
- }
- // TODO: 实现旧版条件检查逻辑
- return true;
- }
-
- /**
- * 获取任务达成条件的进度
- *
- * @param int $userId 用户ID
- * @param Task $task 任务模型
- * @return array 条件进度信息
- */
- public static function getAchievementProgress(int $userId, Task $task): array
- {
- if ($task->achievement_condition_group_id) {
- // TODO: 实现条件组进度获取逻辑
- return [];
- }
- // 回退到旧版条件进度
- $conditions = self::getLegacyAchievementConditions($task);
- if (empty($conditions)) {
- return [];
- }
- // TODO: 实现旧版条件进度获取逻辑
- return [];
- }
-
- /**
- * 获取旧版任务达成条件
- *
- * @param Task $task 任务模型
- * @return array 达成条件列表
- */
- private static function getLegacyAchievementConditions(Task $task): array
- {
- $taskConditions = TaskAchievementCondition::where('task_id', $task->id)->get();
-
- $conditions = [];
- foreach ($taskConditions as $condition) {
- $conditions[] = [
- 'condition_type' => $condition->condition_type,
- 'condition_param' => $condition->condition_param,
- 'target_value' => $condition->target_value,
- 'is_required' => $condition->is_required,
- 'sort_order' => $condition->sort_order,
- ];
- }
-
- return $conditions;
- }
-
- /**
- * 检查任务是否使用前置条件组
- *
- * @param Task $task 任务模型
- * @return bool 是否使用前置条件组
- */
- public static function isUsingPrerequisiteConditionGroup(Task $task): bool
- {
- return !empty($task->prerequisite_condition_group_id);
- }
-
- /**
- * 检查任务是否使用达成条件组
- *
- * @param Task $task 任务模型
- * @return bool 是否使用达成条件组
- */
- public static function isUsingAchievementConditionGroup(Task $task): bool
- {
- return !empty($task->achievement_condition_group_id);
- }
-
- /**
- * 获取任务前置条件的显示信息
- *
- * @param Task $task 任务模型
- * @return array 前置条件显示信息
- */
- public static function getPrerequisiteConditionsDisplay(Task $task): array
- {
- $conditions = self::getPrerequisiteConditions($task);
-
- $display = [];
- foreach ($conditions as $condition) {
- $display[] = [
- 'type' => $condition['condition_type'],
- 'param' => $condition['condition_param'],
- 'target' => $condition['target_value'],
- 'display_name' => self::getConditionDisplayName($condition),
- ];
- }
-
- return $display;
- }
-
- /**
- * 获取任务达成条件的显示信息
- *
- * @param Task $task 任务模型
- * @return array 达成条件显示信息
- */
- public static function getAchievementConditionsDisplay(Task $task): array
- {
- $conditions = self::getAchievementConditions($task);
-
- $display = [];
- foreach ($conditions as $condition) {
- $display[] = [
- 'type' => $condition['condition_type'],
- 'param' => $condition['condition_param'],
- 'target' => $condition['target_value'],
- 'display_name' => self::getConditionDisplayName($condition),
- ];
- }
-
- return $display;
- }
-
- /**
- * 获取条件的显示名称
- *
- * @param array $condition 条件数据
- * @return string 显示名称
- */
- private static function getConditionDisplayName(array $condition): string
- {
- // 这里可以根据条件类型返回不同的显示名称
- // 具体实现需要根据游戏的条件类型来定义
- return "条件类型{$condition['condition_type']} 目标值{$condition['target_value']}";
- }
- }
|