From a2b0a2505a378c677927257f0512bc9aa4906905 Mon Sep 17 00:00:00 2001 From: wh_zcy Date: Thu, 1 Dec 2022 23:35:11 +0800 Subject: [PATCH] =?UTF-8?q?=E6=9B=B4=E6=94=B9=E7=8E=A9=E5=AE=B6=E7=BB=8F?= =?UTF-8?q?=E9=AA=8C=E5=8F=98=E6=9B=B4=E7=AE=97=E6=B3=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- modules/user/model_user.go | 54 +++++++++++++++++++++++++++++++------- 1 file changed, 44 insertions(+), 10 deletions(-) diff --git a/modules/user/model_user.go b/modules/user/model_user.go index 2e50439ce..cf145d411 100644 --- a/modules/user/model_user.go +++ b/modules/user/model_user.go @@ -174,33 +174,67 @@ func (this *ModelUser) ChangeLevel(event interface{}, next func(event interface{ curLv := ul.lv //下一等级配置 nextLvConf := this.module.configure.GetPlayerlvConf(curLv + 1) - var rewards []*cfg.Gameatn - for nextLvConf != nil && ul.exp >= int64(nextLvConf.Exp) { + var ( + rewards []*cfg.Gameatn + curExp int64 + ) + + curExp = ul.exp + for nextLvConf != nil && curExp >= int64(nextLvConf.Exp) { + curExp = curExp - int64(nextLvConf.Exp) curLv++ //叠加奖励 rewards = append(rewards, nextLvConf.Reward...) 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 { - ul.lv = curLv 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) if err != nil { return } 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}) + } } - } }