/* * 肉鸽游戏玩家升级强化选项配置表 * 提供玩家升级后的属性强化选择 */ import { BuffAttr } from "./SkillSet" import { QualitySet } from "./BoxSet"; // 强化类型枚举 export const EnhancementType = { ATTACK: 0, // 攻击力强化 HEALTH: 1, // 生命值强化 ATTACK_SPEED: 2, // 攻击速度强化 DEF: 3, // 特殊效果强化 } // 玩家强化等级追踪 export interface PlayerEnhancementProgress { [EnhancementType.ATTACK]: number; [EnhancementType.HEALTH]: number; [EnhancementType.ATTACK_SPEED]: number; [EnhancementType.DEF]: number; } // 默认强化进度(所有强化都从0级开始) export const defaultEnhancementProgress: PlayerEnhancementProgress = { [EnhancementType.ATTACK]: 0, [EnhancementType.HEALTH]: 0, [EnhancementType.ATTACK_SPEED]: 0, [EnhancementType.DEF]: 0, }; export const defaultEnhancements=()=>{ return { [EnhancementType.ATTACK]: 0, [EnhancementType.HEALTH]: 0, [EnhancementType.ATTACK_SPEED]: 0, [EnhancementType.DEF]: 0, } } // 强化选项配置表(一维数组格式) export const EnhancementOptions: EnhancementOption[] = [ // 攻击力强化选项 { uuid: 1001, type: EnhancementType.ATTACK, lv: 1, name: "力量训练 I", description: "攻击力 +5", buffType: BuffAttr.ATK, value: 5, icon: "3058", rarity: QualitySet.GREEN }, { uuid: 1002, type: EnhancementType.ATTACK, lv: 2, name: "力量训练 II", description: "攻击力 +12", buffType: BuffAttr.ATK, value: 12, icon: "3058", rarity: QualitySet.GREEN }, { uuid: 1003, type: EnhancementType.ATTACK, lv: 3, name: "力量训练 III", description: "攻击力 +20", buffType: BuffAttr.ATK, value: 20, icon: "3058", rarity: QualitySet.BLUE }, { uuid: 1004, type: EnhancementType.ATTACK, lv: 4, name: "力量训练 IV", description: "攻击力 +35", buffType: BuffAttr.ATK, value: 35, icon: "3058", rarity: QualitySet.BLUE }, { uuid: 1005, type: EnhancementType.ATTACK, lv: 5, name: "力量训练 V", description: "攻击力 +50", buffType: BuffAttr.ATK, value: 50, icon: "3058", rarity: QualitySet.PURPLE }, // 生命值强化选项 { uuid: 2001, type: EnhancementType.HEALTH, lv: 1, name: "体质增强 I", description: "生命值 +10", buffType: BuffAttr.HP, value: 10, icon: "3058", rarity: QualitySet.GREEN }, { uuid: 2002, type: EnhancementType.HEALTH, lv: 2, name: "体质增强 II", description: "生命值 +25", buffType: BuffAttr.HP, value: 25, icon: "3058", rarity: QualitySet.GREEN }, { uuid: 2003, type: EnhancementType.HEALTH, lv: 3, name: "体质增强 III", description: "生命值 +40", buffType: BuffAttr.HP, value: 40, icon: "3058", rarity: QualitySet.BLUE }, { uuid: 2004, type: EnhancementType.HEALTH, lv: 4, name: "体质增强 IV", description: "生命值 +65", buffType: BuffAttr.HP, value: 65, icon: "3058", rarity: QualitySet.BLUE }, { uuid: 2005, type: EnhancementType.HEALTH, lv: 5, name: "体质增强 V", description: "生命值 +100", buffType: BuffAttr.HP, value: 100, icon: "3058", rarity: QualitySet.PURPLE }, { uuid: 3003, type: EnhancementType.ATTACK_SPEED, lv: 3, name: "快速出手 III", description: "攻击速度 +3%", buffType: BuffAttr.ATK_CD, value: 3, icon: "3058", rarity: QualitySet.BLUE }, { uuid: 3004, type: EnhancementType.ATTACK_SPEED, lv: 4, name: "快速出手 IV", description: "攻击速度 +4%", buffType: BuffAttr.ATK_CD, value: 4, icon: "3058", rarity: QualitySet.BLUE }, { uuid: 3005, type: EnhancementType.ATTACK_SPEED, lv: 5, name: "快速出手 V", description: "攻击速度 +5%", buffType: BuffAttr.ATK_CD, value: 5, icon: "3058", rarity: QualitySet.PURPLE }, // 特殊效果强化选项 { uuid: 4001, type: EnhancementType.DEF, lv: 1, name: "绝对防御 I", description: "免伤 +1%", buffType: BuffAttr.DEF, value: 1, icon: "3058", rarity: QualitySet.GREEN }, { uuid: 4002, type: EnhancementType.DEF, lv: 2, name: "绝对防御 II", description: "免伤 +2%", buffType: BuffAttr.DEF, value: 2, icon: "3058", rarity: QualitySet.GREEN }, { uuid: 4003, type: EnhancementType.DEF, lv: 3, name: "绝对防御 III", description: "免伤 +3%", buffType: BuffAttr.DEF, value: 3, icon: "3058", rarity: QualitySet.BLUE }, { uuid: 4004, type: EnhancementType.DEF, lv: 4, name: "绝对防御 IV", description: "免伤 +4%", buffType: BuffAttr.DEF, value: 4, icon: "3058", rarity: QualitySet.BLUE }, { uuid: 4005, type: EnhancementType.DEF, lv: 5, name: "绝对防御 V", description: "免伤 +5%", buffType: BuffAttr.DEF, value: 5, icon: "3058", rarity: QualitySet.PURPLE }, ]; // 强化选项接口定义 export interface EnhancementOption { uuid: number; // 强化选项唯一ID type: number; // 强化类型 (EnhancementType) lv: number; // 强化等级 name: string; // 强化名称 description: string; // 强化描述 buffType: number; // 属性类型 (BuffAttr) value: number; // 属性值 icon: string; // 图标ID rarity: number; // 稀有度 (Quality) } // 获取随机强化选项(基于玩家当前强化进度) export function getEnhancement(playerProgress: PlayerEnhancementProgress, count: number = 3): EnhancementOption[] { const options: EnhancementOption[] = []; const enhancementTypes = Object.values(EnhancementType); // 随机选择强化类型 const selectedTypes = []; const shuffledTypes = [...enhancementTypes]; // 随机打乱数组 for (let i = shuffledTypes.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [shuffledTypes[i], shuffledTypes[j]] = [shuffledTypes[j], shuffledTypes[i]]; } // 选择指定数量的强化类型 for (let i = 0; i < count && i < shuffledTypes.length; i++) { selectedTypes.push(shuffledTypes[i]); } // 为每个类型生成对应等级的选项 selectedTypes.forEach(type => { const currentLevel = playerProgress[type] || 0; const nextLevel = Math.min(currentLevel + 1, 5); // 最大等级为5 const option = getEnhancementOptionByTypeAndLevel(type, nextLevel); if (option) { options.push(option); } }); return options; } // 获取指定类型和等级的强化选项 export function getEnhancementOptionByTypeAndLevel(type: number, level: number): EnhancementOption | null { return EnhancementOptions.find(opt => opt.type === type && opt.lv === level) || null; } // 获取所有可用的强化类型 export function getAllEnhancementTypes(): number[] { return Object.values(EnhancementType); } // 获取指定等级的所有强化选项 export function getEnhancementOptionsByLevel(level: number): EnhancementOption[] { return EnhancementOptions.filter(opt => opt.lv === level); } // 更新玩家强化进度 export function updatePlayerEnhancementProgress( progress: PlayerEnhancementProgress, type: number, levelIncrease: number = 1 ): PlayerEnhancementProgress { const newProgress = { ...progress }; const currentLevel = newProgress[type] || 0; newProgress[type] = Math.min(currentLevel + levelIncrease, 5); // 最大等级为5 return newProgress; } // 检查某个强化类型是否还能继续升级 export function canEnhancementUpgrade(progress: PlayerEnhancementProgress, type: number): boolean { const currentLevel = progress[type] || 0; return currentLevel < 5; // 最大等级为5 } // 获取某个强化类型的下一级选项 export function getNextLevelOption(progress: PlayerEnhancementProgress, type: number): EnhancementOption | null { if (!canEnhancementUpgrade(progress, type)) { return null; } const currentLevel = progress[type] || 0; const nextLevel = currentLevel + 1; return getEnhancementOptionByTypeAndLevel(type, nextLevel); } // 获取可升级的强化选项(排除已满级的) export function getUpgradeableEnhancementOptions(progress: PlayerEnhancementProgress, count: number = 3): EnhancementOption[] { const options: EnhancementOption[] = []; const enhancementTypes = Object.values(EnhancementType); // 筛选出可以升级的强化类型 const upgradeableTypes = enhancementTypes.filter(type => canEnhancementUpgrade(progress, type)); if (upgradeableTypes.length === 0) { return options; // 没有可升级的选项 } // 随机打乱可升级的类型 const shuffledTypes = [...upgradeableTypes]; for (let i = shuffledTypes.length - 1; i > 0; i--) { const j = Math.floor(Math.random() * (i + 1)); [shuffledTypes[i], shuffledTypes[j]] = [shuffledTypes[j], shuffledTypes[i]]; } // 选择指定数量的强化类型 const selectedTypes = shuffledTypes.slice(0, Math.min(count, shuffledTypes.length)); // 为每个类型生成下一级选项 selectedTypes.forEach(type => { const option = getNextLevelOption(progress, type); if (option) { options.push(option); } }); return options; } // 获取玩家某个强化类型的当前等级 export function getEnhancementLevel(progress: PlayerEnhancementProgress, type: number): number { return progress[type] || 0; } // 获取玩家所有强化的总等级 export function getTotalEnhancementLevel(progress: PlayerEnhancementProgress): number { return Object.values(progress).reduce((total, level) => total + level, 0); } // 通过UUID获取强化选项 export function getEnhancementOptionByUuid(uuid: number): EnhancementOption | null { return EnhancementOptions.find(opt => opt.uuid === uuid) || null; } // 获取指定类型的所有强化选项 export function getEnhancementOptionsByType(type: number): EnhancementOption[] { return EnhancementOptions.filter(opt => opt.type === type); } // 获取指定UUID范围的强化选项 export function getEnhancementOptionsByUuidRange(startUuid: number, endUuid: number): EnhancementOption[] { const options: EnhancementOption[] = []; EnhancementOptions.forEach(option => { if (option.uuid >= startUuid && option.uuid <= endUuid) { options.push(option); } }); return options; }