diff --git a/assets/script/game/map/MissionComp.ts b/assets/script/game/map/MissionComp.ts index 4f175a7c..eeea9172 100644 --- a/assets/script/game/map/MissionComp.ts +++ b/assets/script/game/map/MissionComp.ts @@ -4,7 +4,7 @@ import { CCComp } from "../../../../extensions/oops-plugin-framework/assets/modu import { smc } from "../common/SingletonModuleComp"; import { oops } from "../../../../extensions/oops-plugin-framework/assets/core/Oops"; import { HeroAttrsComp } from "../hero/HeroAttrsComp"; -import { MonsterCost, MonType, calculateMonsterGold, getLevelExp } from "./RogueConfig"; +import { MonsterCost, MonType, calculateMonsterGold, getLevelExp, calculateMonsterExp } from "./RogueConfig"; import { GameEvent } from "../common/config/GameEvent"; import { HeroViewComp } from "../hero/HeroViewComp"; import { UIID } from "../common/config/GameUIConfig"; @@ -130,18 +130,7 @@ export class MissionComp extends CCComp { } // 计算经验 - let exp = 10; // 基础经验 - switch (type) { - case MonType.BOSS: - exp = 200; - break; - case MonType.ELITE: - exp = 50; - break; - default: - exp = 10; - break; - } + let exp = calculateMonsterExp(data.uuid, level); smc.addExp(exp); this.cal_gold_reward(data, type); diff --git a/assets/script/game/map/RogueConfig.ts b/assets/script/game/map/RogueConfig.ts index 6e3dd76b..83e28157 100644 --- a/assets/script/game/map/RogueConfig.ts +++ b/assets/script/game/map/RogueConfig.ts @@ -372,6 +372,21 @@ export function calculateMonsterGold(uuid: number, level: number, type: MonType) return gold; } +/** + * 计算怪物经验值 + * 目标:让玩家在13分钟左右升到20级 + * @param uuid 怪物ID + * @param level 怪物等级 + */ +export function calculateMonsterExp(uuid: number, level: number): number { + const cost = MonsterCost[uuid] || 1; + // 基础系数 0.8,成长因子 1.1 + // 这样设计是为了对抗升级所需经验的指数增长 (1.2^L),同时平衡刷怪数量的线性增长 + // T=0 (Lv1): Unit Exp ≈ 0.8 + // T=13 (Lv14): Unit Exp ≈ 0.8 * 1.1^13 ≈ 2.76 + return Math.max(1, Math.floor(cost * 0.8 * Math.pow(1.1, level - 1))); +} + // 怪物消耗点数配置 export const MonsterCost: Record = { 5201: 1, // 兽人战士 (Warrior)