fix(fight): 修复战斗中属性变化与暴击判定逻辑
- 调整能力提升计算时机,确保命中后再恢复原始属性 - 暴击判断前置,仅在命中时计算暴击翻倍及破防逻辑 - 优化回合结束效果清除逻辑,增加状态存活判断 refactor(controller): 重构擂台相关接口返回结构体类型 - 将 ARENA_SET_OWENR、ARENA_FIGHT_OWENR 等函数的返回值统一改为 NullOutboundInfo,并移除冗余字段返回 - 广播逻辑调整,统一使用 Broadcast
This commit is contained in:
@@ -108,22 +108,49 @@ func (pet *PetInfo) Cure() {
|
||||
}
|
||||
|
||||
// 传入bool则不升级
|
||||
// Update 改造为循环进化:直到宠物无法再进化为止,再更新经验
|
||||
// t ...bool:原参数逻辑,len(t)==0时触发进化检查,否则仅更新经验
|
||||
func (petinfo *PetInfo) Update(t ...bool) {
|
||||
|
||||
basic := xmlres.PetMAP[int(petinfo.ID)]
|
||||
|
||||
// 仅在无额外参数时触发循环进化逻辑
|
||||
if len(t) == 0 {
|
||||
// 检查是否可以进化
|
||||
if basic.EvolvesTo != 0 && // 有明确的进化
|
||||
int(petinfo.Level) >= basic.EvolvingLv && // 有明确的进化等级
|
||||
basic.IsLarge == 0 { // 非最终形态
|
||||
// 最大进化次数限制(防止配置表闭环导致死循环)
|
||||
maxEvolveTimes := 10
|
||||
evolveCount := 0
|
||||
|
||||
// 循环进化:直到不满足进化条件 或 达到最大进化次数
|
||||
for {
|
||||
// 防止死循环,超出次数直接退出
|
||||
if evolveCount >= maxEvolveTimes {
|
||||
break
|
||||
}
|
||||
|
||||
// 获取当前宠物形态的配置
|
||||
basic, ok := xmlres.PetMAP[int(petinfo.ID)]
|
||||
// 配置不存在,直接退出循环
|
||||
if !ok {
|
||||
break
|
||||
}
|
||||
|
||||
// 检查是否满足进化条件
|
||||
canEvolve := basic.EvolvesTo != 0 && // 有明确的进化目标
|
||||
int(petinfo.Level) >= basic.EvolvingLv && // 等级达到进化要求
|
||||
basic.IsLarge == 0 // 非最终形态
|
||||
|
||||
// 不满足进化条件,退出循环
|
||||
if !canEvolve {
|
||||
break
|
||||
}
|
||||
|
||||
// 执行进化:更新宠物ID为进化后形态
|
||||
petinfo.ID = uint32(basic.EvolvesTo)
|
||||
basic = xmlres.PetMAP[int(petinfo.ID)] //重新计算
|
||||
evolveCount++ // 进化次数+1
|
||||
}
|
||||
}
|
||||
|
||||
// 进化完成后,统一更新经验(原逻辑保留)
|
||||
petinfo.LvExp = petinfo.NextLvExp
|
||||
// 获取最终形态的宠物配置,计算下一等级经验
|
||||
basic := xmlres.PetMAP[int(petinfo.ID)]
|
||||
petinfo.NextLvExp = calculateExperience(petinfo.Level, basic.GetBasic())
|
||||
}
|
||||
|
||||
|
||||
@@ -114,6 +114,7 @@ type PlayerInfo struct {
|
||||
PetMaxLevel uint32 `struc:"uint32" json:"pet_max_level"` // 精灵最高等级
|
||||
AllPetNumber uint32 `struc:"uint32" json:"all_pet_number"` // 精灵数量
|
||||
MonKingWin uint32 `struc:"uint32" json:"mon_king_win"` // 精灵王胜场
|
||||
MessWin uint32 `struc:"skip" json:"mess_win"` // 大乱斗胜场
|
||||
CurrentStage uint32 `struc:"uint32" json:"current_stage"` // 勇者之塔层数
|
||||
MaxStage uint32 `struc:"uint32" json:"max_stage"` // 试炼之塔最高层
|
||||
CurrentFreshStage uint32 `struc:"uint32" json:"current_fresh_stage"` // 当前试炼层数
|
||||
|
||||
Reference in New Issue
Block a user