更改玩家经验变更算法
This commit is contained in:
parent
540d932e22
commit
a2b0a2505a
@ -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})
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user