From 940211d465aebd4a89e251deaadb0d03185a788b Mon Sep 17 00:00:00 2001 From: panw Date: Wed, 28 Jan 2026 15:51:59 +0800 Subject: [PATCH] =?UTF-8?q?feat:=20=E5=AE=9E=E7=8E=B0=E8=A7=92=E8=89=B2?= =?UTF-8?q?=E7=BB=8F=E9=AA=8C=E8=8E=B7=E5=8F=96=E4=B8=8E=E5=8D=87=E7=BA=A7?= =?UTF-8?q?=E7=B3=BB=E7=BB=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - 在SingletonModuleComp中新增addExp方法,处理经验累积和升级逻辑 - 修改英雄初始等级从0调整为1,确保等级系统正常运作 - 在MissionComp中为不同怪物类型添加经验奖励计算 - 使用getLevelExp函数动态计算各级所需经验值 - 升级时触发GameEvent.CanUpdateLv事件通知其他模块 --- .../script/game/common/SingletonModuleComp.ts | 36 ++++++++++++++++++- assets/script/game/map/MissionComp.ts | 22 ++++++++++-- 2 files changed, 54 insertions(+), 4 deletions(-) diff --git a/assets/script/game/common/SingletonModuleComp.ts b/assets/script/game/common/SingletonModuleComp.ts index e09ecaea..4880e6fb 100644 --- a/assets/script/game/common/SingletonModuleComp.ts +++ b/assets/script/game/common/SingletonModuleComp.ts @@ -112,7 +112,7 @@ export class SingletonModuleComp extends ecs.Comp { path:'', as:0, type:0, - lv:0, + lv:1, exp:0, exp_max:100, exp_pre:0, @@ -179,6 +179,40 @@ export class SingletonModuleComp extends ecs.Comp { console.log(`[SMC] 记录好友获取: ID=${id}, 次数=${this.vmdata.collection.friend.count}`); oops.message.dispatchEvent(GameEvent.UpdateCollection); } + + /** + * 增加经验并处理升级逻辑 + * @param exp 获得的经验值 + */ + addExp(exp: number) { + if (exp <= 0) return; + + const h = this.vmdata.hero; + // 确保等级至少为1 + if (h.lv < 1) h.lv = 1; + // 确保经验上限正确 + if (h.exp_max <= 0) h.exp_max = getLevelExp(h.lv); + + h.exp += exp; + + // 检查升级 + let isLevelUp = false; + while (h.exp >= h.exp_max) { + h.exp -= h.exp_max; + h.lv++; + isLevelUp = true; + + // 更新下一级所需经验 + h.exp_max = getLevelExp(h.lv); + + console.log(`[SMC] 升级! Lv.${h.lv - 1} -> Lv.${h.lv}, 下级所需: ${h.exp_max}`); + } + + if (isLevelUp) { + // 发送升级事件 + oops.message.dispatchEvent(GameEvent.CanUpdateLv, { lv: h.lv }); + } + } vmAdd() { VM.add(this.vmdata, "data"); diff --git a/assets/script/game/map/MissionComp.ts b/assets/script/game/map/MissionComp.ts index 885f3035..4f175a7c 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 } from "./RogueConfig"; +import { MonsterCost, MonType, calculateMonsterGold, getLevelExp } from "./RogueConfig"; import { GameEvent } from "../common/config/GameEvent"; import { HeroViewComp } from "../hero/HeroViewComp"; import { UIID } from "../common/config/GameUIConfig"; @@ -128,6 +128,22 @@ export class MissionComp extends CCComp { type = MonType.ELITE; } } + + // 计算经验 + let exp = 10; // 基础经验 + switch (type) { + case MonType.BOSS: + exp = 200; + break; + case MonType.ELITE: + exp = 50; + break; + default: + exp = 10; + break; + } + smc.addExp(exp); + this.cal_gold_reward(data, type); } } @@ -251,9 +267,9 @@ do_ad(){ path:'', as:0, type:0, - lv:0, + lv:1, exp:0, - exp_max:100, + exp_max: getLevelExp(1), exp_pre:0, hp:50, hp_max:100,