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] } } if len(petinfo.SkillList) > 4 { 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 }