根据用户要求,宠物技能可用性应该使用宠物等级配置数据库表中的'可用技能'数据来判断,但目前代码中宠物技能表的 min_level 字段也参与了判断,这是错误的,需要进行修复。
当前系统中存在两套技能可用性判断逻辑:
pet_level_configs)中的 skills 字段pet_skills)中的 min_level 字段完全移除对 min_level 字段的依赖,统一使用宠物等级配置表中的 skills 字段进行技能可用性判断。
$pet->level < $skill->min_level 的判断getPetSkills 方法中的 min_level 检查$pet->level < $skill->min_level 的检查checkPetSkillAvailable 方法$pet->level >= $skill->min_level 的判断checkPetSkillAvailable 方法进行筛选checkPetSkillAvailable 私有方法$job->handle() 改为 $job->run()private static function checkPetSkillAvailable(PetUser $pet, int $skillId): bool
{
try {
// 获取宠物当前等级的配置
$levelConfig = PetLevelConfig::where('pet_id', 1)
->where('level', $pet->level)
->first();
if (!$levelConfig) {
// 如果没有配置,默认允许使用(向后兼容)
return true;
}
// 检查技能是否在可用技能列表中
$availableSkills = $levelConfig->skills ?? [];
return in_array($skillId, $availableSkills);
} catch (\Exception $e) {
// 发生错误时默认允许使用(向后兼容)
return true;
}
}
修复后执行宠物技能处理命令:
php artisan pet:process-active-skills --sync
执行结果:
修复宠物技能可用性判断逻辑,移除对min_level字段的依赖
- 移除PetService中使用min_level字段进行技能可用性判断的逻辑
- 移除PetSkillUseValidator中的min_level检查,改用等级配置表检查
- 修复PetDtoFactory中的技能筛选逻辑,使用等级配置表而非min_level
- 统一使用宠物等级配置表中的skills字段判断技能可用性
- 修复ProcessActiveSkillsCommand同步模式下的队列调用问题
- 确保所有技能可用性判断都基于宠物等级配置表,符合设计要求