[成功率%, 花费, 降级概率%] */ private static array $enhanceConfig = [ 0 => ['rate' => 100, 'cost' => 50, 'downgrade' => 0], 1 => ['rate' => 95, 'cost' => 100, 'downgrade' => 0], 2 => ['rate' => 90, 'cost' => 150, 'downgrade' => 0], 3 => ['rate' => 85, 'cost' => 200, 'downgrade' => 0], 4 => ['rate' => 80, 'cost' => 300, 'downgrade' => 10], 5 => ['rate' => 70, 'cost' => 400, 'downgrade' => 20], 6 => ['rate' => 60, 'cost' => 500, 'downgrade' => 30], 7 => ['rate' => 50, 'cost' => 650, 'downgrade' => 40], 8 => ['rate' => 40, 'cost' => 800, 'downgrade' => 50], 9 => ['rate' => 30, 'cost' => 1000, 'downgrade' => 60], 10 => ['rate' => 20, 'cost' => 1500, 'downgrade' => 70], 11 => ['rate' => 15, 'cost' => 2000, 'downgrade' => 80], 12 => ['rate' => 10, 'cost' => 3000, 'downgrade' => 90], 13 => ['rate' => 7, 'cost' => 4000, 'downgrade' => 95], 14 => ['rate' => 5, 'cost' => 5000, 'downgrade' => 100], ]; /** * 最大强化等级 */ public const MAX_ENHANCE_LEVEL = 14; /** * 每个强化等级的属性加成百分比 */ public const ENHANCE_BONUS_PER_LEVEL = 0.05; // 5% /** * 执行装备强化 * * @param array &$item 装备数组引用(会直接修改) * @param Player $player 玩家对象(需要扣费) * @return array 强化结果数组 * [ * 'success' => bool, // 是否强化成功 * 'message' => string, // 结果消息 * 'oldLevel' => int, // 强化前等级 * 'newLevel' => int, // 强化后等级 * 'cost' => int, // 花费的灵石 * 'downgraded' => bool, // 是否发生了降级 * ] */ public static function enhance(array &$item, Player $player): array { $itemName = $item['name'] ?? '未知装备'; $currentLevel = $item['enhanceLevel'] ?? 0; // 检查是否已达最大强化等级 if ($currentLevel >= self::MAX_ENHANCE_LEVEL) { return [ 'success' => false, 'message' => "{$itemName} 已达最大强化等级!", 'oldLevel' => $currentLevel, 'newLevel' => $currentLevel, 'cost' => 0, 'downgraded' => false, ]; } // 获取当前等级的强化配置 $config = self::$enhanceConfig[$currentLevel]; $cost = $config['cost']; $successRate = $config['rate']; $downgradeChance = $config['downgrade']; // 检查灵石是否足够 if ($player->spiritStones < $cost) { $lack = $cost - $player->spiritStones; return [ 'success' => false, 'message' => "灵石不足!还需要 {$lack} 灵石", 'oldLevel' => $currentLevel, 'newLevel' => $currentLevel, 'cost' => 0, 'downgraded' => false, ]; } // 扣费 $player->spendSpiritStones($cost); // 掷骰子检定成功 $roll = rand(1, 100); $success = $roll <= $successRate; if ($success) { // 强化成功 $item['enhanceLevel'] = $currentLevel + 1; $newLevel = $currentLevel + 1; return [ 'success' => true, 'message' => "{$itemName} 强化成功! +{$currentLevel} → +{$newLevel}", 'oldLevel' => $currentLevel, 'newLevel' => $newLevel, 'cost' => $cost, 'downgraded' => false, ]; } else { // 强化失败 $result = [ 'success' => false, 'message' => "{$itemName} 强化失败...", 'oldLevel' => $currentLevel, 'newLevel' => $currentLevel, 'cost' => $cost, 'downgraded' => false, ]; // 检查是否触发降级 if ($currentLevel > 0 && $downgradeChance > 0) { $downgradeRoll = rand(1, 100); if ($downgradeRoll <= $downgradeChance) { // 发生降级 $item['enhanceLevel'] = $currentLevel - 1; $downgradedLevel = $currentLevel - 1; $result['downgraded'] = true; $result['newLevel'] = $downgradedLevel; $result['message'] = "{$itemName} 强化失败并降级了... +{$currentLevel} → +{$downgradedLevel}"; } } return $result; } } /** * 获取强化配置 * * @param int $level 强化等级 * @return array|null 配置数组或null */ public static function getConfig(int $level): ?array { return self::$enhanceConfig[$level] ?? null; } /** * 获取所有强化配置 * * @return array 完整的配置表 */ public static function getAllConfig(): array { return self::$enhanceConfig; } /** * 计算强化后的属性值 * * @param int $baseValue 基础属性值 * @param int $enhanceLevel 强化等级 * @return int 强化后的属性值 */ public static function calculateEnhancedValue(int $baseValue, int $enhanceLevel): int { $multiplier = 1 + ($enhanceLevel * self::ENHANCE_BONUS_PER_LEVEL); return (int)($baseValue * $multiplier); } /** * 获取强化加成百分比 * * @param int $enhanceLevel 强化等级 * @return float 加成百分比 (例: 0.25 表示 25%) */ public static function getEnhanceBonus(int $enhanceLevel): float { return $enhanceLevel * self::ENHANCE_BONUS_PER_LEVEL; } /** * 获取强化加成百分比(百分数形式) * * @param int $enhanceLevel 强化等级 * @return int 加成百分数 (例: 25 表示 25%) */ public static function getEnhanceBonusPercent(int $enhanceLevel): int { return (int)($enhanceLevel * self::ENHANCE_BONUS_PER_LEVEL * 100); } /** * 检查装备是否已达最大强化等级 * * @param array $item 装备数组 * @return bool */ public static function isMaxLevel(array $item): bool { $level = $item['enhanceLevel'] ?? 0; return $level >= self::MAX_ENHANCE_LEVEL; } /** * 获取强化所需的总花费(从当前等级到目标等级) * * @param int $fromLevel 起始强化等级 * @param int $toLevel 目标强化等级 * @return int 总花费灵石数 */ public static function getTotalCost(int $fromLevel, int $toLevel): int { if ($fromLevel >= $toLevel || $toLevel > self::MAX_ENHANCE_LEVEL) { return 0; } $total = 0; for ($level = $fromLevel; $level < $toLevel; $level++) { if (isset(self::$enhanceConfig[$level])) { $total += self::$enhanceConfig[$level]['cost']; } } return $total; } }