fix: 修复宠物升级经验显示与动态结算
All checks were successful
ci/woodpecker/push/my-first-workflow Pipeline was successful

This commit is contained in:
xinian
2026-04-15 15:34:16 +08:00
parent 5a81534e84
commit 61a135b3a7
4 changed files with 60 additions and 31 deletions

View File

@@ -532,18 +532,20 @@ func (petinfo *PetInfo) Update(isup bool) {
if evolveCount >= maxEvolveTimes {
break
}
// 进化完成后,统一更新经验(原逻辑保留)
petinfo.LvExp = petinfo.NextLvExp
// 获取当前宠物形态的配置
basic, ok := xmlres.PetMAP[int(petinfo.ID)]
// 配置不存在,直接退出循环
if !ok {
break
}
petinfo.NextLvExp = calculateExperience(petinfo.Level, basic.GetBasic())
if !isup {
petinfo.LvExp = calculatePreviousLevelExperience(petinfo.Level, basic.GetBasic())
petinfo.NextLvExp = calculateExperience(petinfo.Level, basic.GetBasic())
return
}
// 升级时保留上一等级需求,供经验结算使用。
petinfo.LvExp = petinfo.NextLvExp
petinfo.NextLvExp = calculateExperience(petinfo.Level, basic.GetBasic())
// 检查是否满足进化条件
canEvolve := basic.EvolvesTo != 0 && // 有明确的进化目标
int(petinfo.Level) >= basic.EvolvingLv && // 等级达到进化要求
@@ -561,6 +563,13 @@ func (petinfo *PetInfo) Update(isup bool) {
}
func calculatePreviousLevelExperience(level uint32, baseValue uint32) int64 {
if level <= 1 {
return 0
}
return calculateExperience(level-1, baseValue)
}
// calculateExperience 计算指定等级和种族值所需的经验值
// level: 当前等级
// baseValue: 种族值