- 在挑战BOSS和野外怪物战斗前,增加 CanFight 状态检查,防止非法战斗 - 修复战斗胜利后经验与物品发放逻辑,增加 CanGetExp 判断避免重复获取 - 优化战斗中精灵切换逻辑与相关伤害效果处理,确保死亡标记正确设置 - 修正战斗轮次中被动切换行为及技能执行顺序问题 - 移除无用的管理员会话控制器和宠物融合模型代码 - 调整战斗输入结构体中的 Switch 类型为 Map 以提高查找效率 - 修复战斗中精灵存活判定条件,
93 lines
2.3 KiB
Go
93 lines
2.3 KiB
Go
package player
|
|
|
|
import (
|
|
"blazing/common/data/xmlres"
|
|
"blazing/common/utils"
|
|
"blazing/logic/service/common"
|
|
"blazing/logic/service/fight/info"
|
|
|
|
"blazing/modules/blazing/model"
|
|
|
|
"github.com/jinzhu/copier"
|
|
)
|
|
|
|
// 主函数实现
|
|
// 添加经验
|
|
// 禁止发包
|
|
func (p *Player) AddPetExp(petinfo *model.PetInfo, addExp uint32) {
|
|
addExp = utils.Min(addExp, p.Info.ExpPool)
|
|
originalLevel := petinfo.Level
|
|
Exp := petinfo.Exp + addExp
|
|
|
|
petinfo.Update_EXP()
|
|
petinfo.Update()
|
|
p.Info.ExpPool -= addExp //减去已使用的经验
|
|
for Exp >= petinfo.NextLvExp {
|
|
petinfo.Level++
|
|
petinfo.Update_EXP()
|
|
petinfo.Update()
|
|
Exp -= petinfo.LvExp
|
|
if originalLevel < 100 && petinfo.Level == 100 { //升到100了
|
|
p.Info.ExpPool += Exp //减去已使用的经验
|
|
Exp = 0
|
|
break //停止升级
|
|
}
|
|
|
|
}
|
|
|
|
petinfo.Exp = Exp
|
|
// 重新计算面板
|
|
if originalLevel != petinfo.Level {
|
|
if petinfo.Level <= 100 {
|
|
petinfo.CalculatePetPane()
|
|
}
|
|
|
|
petinfo.Cure()
|
|
}
|
|
|
|
// 处理技能学习
|
|
canLearnSkillList := utils.LastFourElements(petinfo.GetLevelRangeCanLearningSkills(originalLevel, petinfo.Level), 4) //获取最后四个技能,如果不足,那就取全部技能
|
|
|
|
for i := 0; i < 4; i++ {
|
|
|
|
if len(canLearnSkillList) != 0 {
|
|
skid := canLearnSkillList[len(canLearnSkillList)-1]
|
|
petinfo.SkillList = append(petinfo.SkillList, model.SkillInfo{
|
|
|
|
ID: skid,
|
|
PP: uint32(xmlres.SkillMap[int(skid)].MaxPP),
|
|
})
|
|
|
|
canLearnSkillList = canLearnSkillList[:len(canLearnSkillList)-1]
|
|
}
|
|
|
|
}
|
|
petinfo.SkillList = petinfo.SkillList[:4] //归正到4
|
|
|
|
t1 := common.NewTomeeHeader(2508, p.Info.UserID)
|
|
rrr := &info.PetUpdateOutboundInfo{}
|
|
|
|
var petinfwo info.UpdatePropInfo
|
|
|
|
copier.Copy(&petinfwo, petinfo)
|
|
rrr.Data = append(rrr.Data, petinfwo)
|
|
p.SendPack(t1.Pack(rrr)) //准备包由各自发,因为协议不一样
|
|
// 发送经验更新消息
|
|
//player.SendMessage(generatePetUpdateInfo(petEntity, originalExp+addExp-exp, addition))
|
|
|
|
// // 发送技能更新消息
|
|
// updateSkillInfo := UpdateSkillInfo{
|
|
// PetCatchTime: petEntity.captureTime,
|
|
// ActiveSkillNum: activeSkillNum,
|
|
// UnActiveSkillNum: unActiveSkillNum,
|
|
// SkillArray: canLearnSkillList,
|
|
// }
|
|
|
|
// player.SendMessage(UpdateSkillOutboundInfo{
|
|
// InfoArray: []UpdateSkillInfo{updateSkillInfo},
|
|
// })
|
|
|
|
// return exp
|
|
|
|
}
|