package player import ( "blazing/common/data/xmlres" "blazing/common/utils" "blazing/logic/service/common" "blazing/logic/service/fight/info" "blazing/modules/player/model" "github.com/jinzhu/copier" ) // AddPetExp 添加宠物经验 func (p *Player) AddPetExp(petInfo *model.PetInfo, addExp uint32) { addExp = utils.Min(addExp, p.Info.ExpPool) originalLevel := petInfo.Level exp := petInfo.Exp + addExp p.Info.ExpPool -= addExp //减去已使用的经验 gainedExp := exp //已获得的经验 for exp >= petInfo.NextLvExp { petInfo.Level++ exp -= petInfo.LvExp petInfo.Update(true) if originalLevel < 100 && petInfo.Level == 100 { //升到100了 p.Info.ExpPool += exp //减去已使用的经验 gainedExp -= exp exp = 0 break //停止升级 } } petInfo.Exp = exp // 重新计算面板 if originalLevel != petInfo.Level { petInfo.CalculatePetPane(false) petInfo.Cure() p.Info.PetMaxLevel = utils.Max(petInfo.Level, p.Info.PetMaxLevel) // 处理技能学习 learnableSkills := utils.LastFourElements(petInfo.GetLevelRangeCanLearningSkills(originalLevel, petInfo.Level), 4) //获取最后四个技能,如果不足,那就取全部技能 for i := 0; i < 4; i++ { if len(learnableSkills) != 0 { skillID := learnableSkills[len(learnableSkills)-1] petInfo.SkillList = append(petInfo.SkillList, model.SkillInfo{ ID: skillID, PP: uint32(xmlres.SkillMap[int(skillID)].MaxPP), }) learnableSkills = learnableSkills[:len(learnableSkills)-1] } } if len(petInfo.SkillList) > 4 { petInfo.SkillList = petInfo.SkillList[:4] //归正到4 } } header := common.NewTomeeHeader(2508, p.Info.UserID) updateOutbound := &info.PetUpdateOutboundInfo{} var petUpdateInfo info.UpdatePropInfo copier.Copy(&petUpdateInfo, petInfo) petUpdateInfo.Exp = gainedExp updateOutbound.Data = append(updateOutbound.Data, petUpdateInfo) p.SendPack(header.Pack(updateOutbound)) //准备包由各自发,因为协议不一样 }