feat: 实现角色经验获取与升级系统
- 在SingletonModuleComp中新增addExp方法,处理经验累积和升级逻辑 - 修改英雄初始等级从0调整为1,确保等级系统正常运作 - 在MissionComp中为不同怪物类型添加经验奖励计算 - 使用getLevelExp函数动态计算各级所需经验值 - 升级时触发GameEvent.CanUpdateLv事件通知其他模块
This commit is contained in:
@@ -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");
|
||||
|
||||
Reference in New Issue
Block a user