feat: 实现角色经验获取与升级系统

- 在SingletonModuleComp中新增addExp方法,处理经验累积和升级逻辑
- 修改英雄初始等级从0调整为1,确保等级系统正常运作
- 在MissionComp中为不同怪物类型添加经验奖励计算
- 使用getLevelExp函数动态计算各级所需经验值
- 升级时触发GameEvent.CanUpdateLv事件通知其他模块
This commit is contained in:
panw
2026-01-28 15:51:59 +08:00
parent e7238822f3
commit 940211d465
2 changed files with 54 additions and 4 deletions

View File

@@ -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");