diff --git a/assets/script/game/common/config/heroSet.ts b/assets/script/game/common/config/heroSet.ts index 94cc4edc..6fe78f45 100644 --- a/assets/script/game/common/config/heroSet.ts +++ b/assets/script/game/common/config/heroSet.ts @@ -204,253 +204,3 @@ export const HeroInfo = { }; -// 职业属性增长配置 -export const JobGrowthConfig = { - [HType.warrior]: { - hp: { base: 1.0, growth: 8, maxLevel: 100, level5Bonus: 0.5 }, // 战士:生命值增长最高,5级额外50% - ap: { base: 1.0, growth: 2, maxLevel: 100, level5Bonus: 0.3 }, // 战士:攻击力中等增长,5级额外30% - def: { base: 1.0, growth: 1, maxLevel: 100, level5Bonus: 0.2, maxValue: 50 } // 战士:防御力较高增长,5级额外20%,最高50% - }, - [HType.remote]: { - hp: { base: 1.0, growth: 5, maxLevel: 100, level5Bonus: 0.3 }, // 远程:生命值增长较低,5级额外30% - ap: { base: 1.0, growth: 3, maxLevel: 100, level5Bonus: 0.5 }, // 远程:攻击力增长最高,5级额外50% - def: { base: 1.0, growth: 0.8, maxLevel: 100, level5Bonus: 0.15, maxValue: 50 } // 远程:防御力增长最低,5级额外15%,最高50% - }, - [HType.mage]: { - hp: { base: 1.0, growth: 6, maxLevel: 100, level5Bonus: 0.4 }, // 法师:生命值中等增长,5级额外40% - ap: { base: 1.0, growth: 4, maxLevel: 100, level5Bonus: 0.6 }, // 法师:攻击力增长最高,5级额外60% - def: { base: 1.0, growth: 0.5, maxLevel: 100, level5Bonus: 0.1, maxValue: 50 } // 法师:防御力增长最低,5级额外10%,最高50% - } -}; - -// 全局属性增长配置(可调整) -export const GlobalGrowthConfig = { - // 基础增长公式:base + (level - 1) * growthValue + level5Bonus - // 5级时额外获得百分比提升 - hpMultiplier: 1.0, // 生命值全局倍数 - apMultiplier: 1.0, // 攻击力全局倍数 - defMultiplier: 1.0, // 防御力全局倍数 - - // 5级特殊提升配置 - level5Bonus: { - enabled: true, // 是否启用5级特殊提升 - triggerLevels: [5, 15, 25, 35, 45, 55, 65, 75, 85, 95], // 触发特殊提升的等级 - bonusDecay: 0.9 // 每次特殊提升的衰减率 - }, - - // 防御力特殊规则 - defense: { - maxDamageReduction: 50, // 最大免伤率50% - warningThreshold: 45, // 警告阈值45% - growthCurve: 0.8 // 防御力增长曲线(高等级时增长放缓) - } -}; - -/** - * 计算指定等级的英雄属性 - * @param baseStats 基础属性 {hp, ap, def} - * @param jobType 职业类型 HType - * @param level 等级 - * @param customGrowth 自定义增长配置(可选) - * @returns 计算后的属性 {hp, ap, def} - */ -export const calculateHeroStats = ( - baseStats: { hp: number, ap: number, def: number }, - jobType: HType, - level: number, - customGrowth?: Partial -) => { - // 获取职业增长配置 - const jobConfig = customGrowth || JobGrowthConfig[jobType]; - if (!jobConfig) { - console.warn(`未找到职业 ${jobType} 的增长配置,使用默认配置`); - return baseStats; - } - - // 限制等级范围 - const clampedLevel = Math.max(1, Math.min(level, jobConfig.hp.maxLevel)); - - // 计算属性增长 - const calculateAttribute = (baseValue: number, growthConfig: any, isDefense: boolean = false) => { - if (clampedLevel <= 1) return baseValue; - - // 基础数值增长:每级增加固定数值 - let result = baseValue + (clampedLevel - 1) * growthConfig.growth; - - // 检查是否触发特殊提升(5级、15级、25级等) - if (GlobalGrowthConfig.level5Bonus.enabled) { - const bonusLevels = GlobalGrowthConfig.level5Bonus.triggerLevels; - const bonusIndex = bonusLevels.findIndex(l => clampedLevel >= l); - - if (bonusIndex !== -1) { - // 计算特殊提升的衰减 - const decayMultiplier = Math.pow(GlobalGrowthConfig.level5Bonus.bonusDecay, bonusIndex); - const bonusMultiplier = growthConfig.level5Bonus * decayMultiplier; - - // 应用特殊提升(基于当前数值的百分比) - result = result * (1 + bonusMultiplier); - - console.log(`[HeroSet] 等级${clampedLevel}触发特殊提升: ${(bonusMultiplier * 100).toFixed(1)}%`); - } - } - - // 防御力特殊处理:确保免伤率不超过最大值 - if (isDefense) { - const maxDef = growthConfig.maxValue || GlobalGrowthConfig.defense.maxDamageReduction; - result = Math.min(result, maxDef); - - // 高等级时应用增长曲线,让防御力增长更平缓 - if (clampedLevel > 50) { - const curveMultiplier = Math.pow(GlobalGrowthConfig.defense.growthCurve, (clampedLevel - 50) / 10); - result = baseValue + (result - baseValue) * curveMultiplier; - result = Math.min(result, maxDef); - } - - // 警告日志 - if (result >= GlobalGrowthConfig.defense.warningThreshold) { - console.warn(`[HeroSet] 警告:等级${clampedLevel}的防御力(${result.toFixed(1)})接近最大值(${maxDef})`); - } - } - - return result; - }; - - // 计算各项属性 - const hp = calculateAttribute(baseStats.hp, jobConfig.hp); - const ap = calculateAttribute(baseStats.ap, jobConfig.ap); - const def = calculateAttribute(baseStats.def, jobConfig.def, true); // 标记为防御力 - - return { - hp: Math.floor(hp * GlobalGrowthConfig.hpMultiplier), - ap: Math.floor(ap * GlobalGrowthConfig.apMultiplier), - def: Math.floor(def * GlobalGrowthConfig.defMultiplier) - }; -}; - -/** - * 获取指定英雄在指定等级的属性 - * @param heroUuid 英雄UUID - * @param level 等级 - * @param customGrowth 自定义增长配置(可选) - * @returns 计算后的属性 {hp, ap, def} 或 null(如果英雄不存在) - */ -export const getHeroStatsByLevel = ( - heroUuid: number, - level: number, - customGrowth?: Partial -) => { - const hero = HeroInfo[heroUuid]; - if (!hero) { - console.warn(`未找到英雄 ${heroUuid}`); - return null; - } - - const baseStats = { - hp: hero.hp || 0, - ap: hero.ap || 0, - def: hero.def || 0 - }; - - return calculateHeroStats(baseStats, hero.type, level, customGrowth); -}; - -/** - * 批量获取英雄等级属性 - * @param heroUuids 英雄UUID数组 - * @param level 等级 - * @param customGrowth 自定义增长配置(可选) - * @returns 英雄属性映射表 - */ -export const getMultipleHeroStatsByLevel = ( - heroUuids: number[], - level: number, - customGrowth?: Partial -) => { - const result: { [uuid: number]: { hp: number, ap: number, def: number } } = {}; - - heroUuids.forEach(uuid => { - const stats = getHeroStatsByLevel(uuid, level, customGrowth); - if (stats) { - result[uuid] = stats; - } - }); - - return result; -}; - - - - - - -// 升级资源配置 -export const UpgradeResourceConfig = { - // 经验值配置 - experience: { - base: 100, // 初始值:1级升2级所需经验 - growth: 50, // 增长值:每级增长倍数 - bonus: 100 // 增长值提升比例:5级倍数提升20% - }, - - // 金币配置 - gold: { - base: 50, // 初始值:1级升2级所需金币 - growth: 100, // 增长值:每级增长倍数 - bonus: 500 // 增长值提升比例:5级倍数提升15% - } -}; - -/** - * 获取指定等级升级所需的经验值 - * @param level 当前等级 - * @returns 升级所需经验值 - */ -export const getUpgradeExperience = (level: number): number => { - if (level <= 0) return 0; - let next_level=level+1 - const config = UpgradeResourceConfig.experience; - let result = config.base + config.growth * (next_level - 1); - - // 5级倍数提升 - if (next_level % 5 === 0) { - result = result + config.bonus*next_level; - } - - return Math.floor(result); -}; - -/** - * 获取指定等级升级所需的金币 - * @param level 当前等级 - * @returns 升级所需金币 - */ -export const getUpgradeGold = (level: number): number => { - if (level <= 0) return 0; - let next_level=level+1 - const config = UpgradeResourceConfig.gold; - let result = config.base + config.growth * (next_level - 1); - - // 5级倍数提升 - if (next_level % 5 === 0) { - result = result + config.bonus*next_level; - } - - return Math.floor(result); -}; - -/** - * 获取指定等级升级所需的所有资源 - * @param level 当前等级 - * @returns 升级资源信息 {experience, gold} - */ -export const getUpgradeResources = (level: number) => { - return { - experience: getUpgradeExperience(level), - gold: getUpgradeGold(level) - }; -}; - - - - - diff --git a/assets/script/game/hero/Hero.ts b/assets/script/game/hero/Hero.ts index e5dee961..5e47e81b 100644 --- a/assets/script/game/hero/Hero.ts +++ b/assets/script/game/hero/Hero.ts @@ -5,7 +5,7 @@ import { smc } from "../common/SingletonModuleComp"; import { HeroModelComp } from "./HeroModelComp"; import { HeroViewComp } from "./HeroViewComp"; import { BoxSet, FacSet } from "../common/config/BoxSet"; -import { getHeroStatsByLevel, HeroInfo, HeroPos, HType } from "../common/config/heroSet"; +import { HeroInfo, HeroPos, HType } from "../common/config/heroSet"; import { BattleMoveComp } from "../common/ecs/position/BattleMoveComp"; import { GameEvent } from "../common/config/GameEvent"; import { BuffAttr, getBuffNum, SkillSet, SType } from "../common/config/SkillSet"; @@ -65,12 +65,9 @@ export class Hero extends ecs.Entity { hero_init(uuid:number=1001,node:Node) { var hv = node.getComponent(HeroViewComp)!; let hero= HeroInfo[uuid] // 共用英雄数据 - let hero_lv=smc.heros[uuid].lv - let {hp,ap,def}=getHeroStatsByLevel(uuid,hero_lv) hv.scale = 1; hv.is_master=true; - hv.lv=1 - hv.lv=hero_lv + hv.lv=HeroInfo[uuid].lv?HeroInfo[uuid].lv:1 hv.fac = FacSet.HERO; hv.type = hero.type; hv.box_group = BoxSet.HERO; @@ -80,9 +77,9 @@ export class Hero extends ecs.Entity { hv.Attrs[BuffAttr.SPEED]=hv.speed = hero.speed; hv.Attrs[BuffAttr.DIS]=hv.dis=hero.dis; hv.Attrs[BuffAttr.ATK_CD]=hv.cd=hero.cd - hv.Attrs[BuffAttr.HP_MAX]=hv.hp=hv.hp_max=hp - hv.Attrs[BuffAttr.AP]=hv.ap=ap; - hv.Attrs[BuffAttr.DEF]=def + hv.Attrs[BuffAttr.HP_MAX]=hv.hp=hv.hp_max=HeroInfo[uuid].hp; + hv.Attrs[BuffAttr.AP]=hv.ap=HeroInfo[uuid].ap; + hv.Attrs[BuffAttr.DEF]=HeroInfo[uuid].def; hero.buff.forEach((buff:any)=>{ hv.apply_buff(buff.type,buff.value) }) diff --git a/assets/script/game/map/HInfoComp.ts b/assets/script/game/map/HInfoComp.ts index 7bd40965..27082cac 100644 --- a/assets/script/game/map/HInfoComp.ts +++ b/assets/script/game/map/HInfoComp.ts @@ -1,7 +1,7 @@ import { _decorator, Animation, AnimationClip, Component, Label, Node, resources, Sprite, SpriteFrame } from 'cc'; import { oops } from 'db://oops-framework/core/Oops'; import { UIID } from '../common/config/GameUIConfig'; -import { getHeroList, getHeroStatsByLevel, getUpgradeResources, HeroInfo, HType, HTypeName, unlockHeroCost } from '../common/config/heroSet'; +import { getHeroList, HeroInfo, HType, HTypeName } from '../common/config/heroSet'; import { smc } from '../common/SingletonModuleComp'; import { GameEvent } from '../common/config/GameEvent'; import { NumberFormatter } from '../common/config/BoxSet';