feat(cache): 添加复合键缓存操作支持 添加了基于 uint32+string 组合键的缓存操作方法,包括 GetByCompoundKey、SetByCompoundKey、DelByCompoundKey 和 ContainsByCompoundKey 方法,用于处理用户ID和会话ID的组合缓存场景 fix(vscode): 添加 cSpell 配置支持 struc 词汇 refactor(session): 移除过时的会话管理方法 移除了基于单一字符串键的会话管理方法,因为已迁移到使用 复合键的缓存操作方式 ```
75 lines
2.0 KiB
Go
75 lines
2.0 KiB
Go
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)) //准备包由各自发,因为协议不一样
|
|
|
|
}
|