更改玩家经验变更算法

This commit is contained in:
wh_zcy 2022-12-01 23:35:11 +08:00
parent 540d932e22
commit a2b0a2505a

View File

@ -174,33 +174,67 @@ func (this *ModelUser) ChangeLevel(event interface{}, next func(event interface{
curLv := ul.lv curLv := ul.lv
//下一等级配置 //下一等级配置
nextLvConf := this.module.configure.GetPlayerlvConf(curLv + 1) nextLvConf := this.module.configure.GetPlayerlvConf(curLv + 1)
var rewards []*cfg.Gameatn var (
for nextLvConf != nil && ul.exp >= int64(nextLvConf.Exp) { rewards []*cfg.Gameatn
curExp int64
)
curExp = ul.exp
for nextLvConf != nil && curExp >= int64(nextLvConf.Exp) {
curExp = curExp - int64(nextLvConf.Exp)
curLv++ curLv++
//叠加奖励 //叠加奖励
rewards = append(rewards, nextLvConf.Reward...) rewards = append(rewards, nextLvConf.Reward...)
nextLvConf = this.module.configure.GetPlayerlvConf(curLv + 1) nextLvConf = this.module.configure.GetPlayerlvConf(curLv + 1)
} }
// 最大等级经验封顶
curLvConf := this.module.configure.GetPlayerlvConf(curLv)
if curExp > int64(curLvConf.Exp) {
if nextLvConf == nil {
curExp = int64(curLvConf.Exp)
}
}
// 等级有递增时再更新 // 等级有递增时再更新
if curLv > ul.lv { if curLv > ul.lv {
ul.lv = curLv
update := map[string]interface{}{ update := map[string]interface{}{
"lv": ul.lv, "lv": curLv,
"exp": curExp,
}
if err := this.module.modelUser.Change(ul.session.GetUserId(), update); err != nil {
this.module.Error("玩家等级经验更新", log.Fields{"uid": ul.session.GetUserId(), "exp": curExp, "lv": curLv})
return
}
if err := ul.session.SendMsg(string(this.module.GetType()), UserSubTypeLvChangedPush,
&pb.UserLvChangedPush{Uid: ul.session.GetUserId(), Exp: curExp, Lv: curLv}); err != nil {
this.module.Error("玩家等级变化 UserSubTypeLvChangedPush推送失败", log.Fields{"uid": ul.session.GetUserId(), "exp": curExp, "lv": curLv})
}
if code := this.module.DispenseRes(ul.session, rewards, true); code != pb.ErrorCode_Success {
this.module.Error("资源发放", log.Fields{"uid": ul.session.GetUserId(), "rewards": rewards})
} }
this.module.modelUser.Change(ul.session.GetUserId(), update)
ul.session.SendMsg(string(this.module.GetType()), UserSubTypeLvChangedPush,
&pb.UserLvChangedPush{Uid: ul.session.GetUserId(), Exp: ul.exp, Lv: ul.lv})
this.module.DispenseRes(ul.session, rewards, true)
mc, err := this.module.service.GetModule(comm.ModuleChat) mc, err := this.module.service.GetModule(comm.ModuleChat)
if err != nil { if err != nil {
return return
} }
if chat, ok := mc.(comm.IChat); ok { if chat, ok := mc.(comm.IChat); ok {
chat.SendSysChatToUser(ul.session, comm.ChatSystem12, ul.lv, 0, ul.name) chat.SendSysChatToUser(ul.session, comm.ChatSystem12, curLv, 0, ul.name)
}
} else {
if nextLvConf == nil {
update := map[string]interface{}{
"exp": curExp,
}
if err := this.module.modelUser.Change(ul.session.GetUserId(), update); err != nil {
this.module.Error("玩家经验更新", log.Fields{"uid": ul.session.GetUserId(), "exp": curExp, "lv": curLv})
return
}
if err := ul.session.SendMsg(string(this.module.GetType()), "reschanged",
&pb.UserResChangedPush{Exp: curExp}); err != nil {
this.module.Error("玩家经验变化 UserResChangedPush推送失败", log.Fields{"uid": ul.session.GetUserId(), "exp": curExp, "lv": curLv})
}
} }
} }
} }