package smithy import ( "crypto/rand" "go_dreamfactory/comm" "go_dreamfactory/pb" cfg "go_dreamfactory/sys/configure/structs" "math/big" "google.golang.org/protobuf/proto" ) //参数校验 func (this *apiComp) DeskSkillLvCheck(session comm.IUserSession, req *pb.SmithyDeskSkillLvReq) (code pb.ErrorCode) { if req.DeskType == 0 { code = pb.ErrorCode_ReqParameterError } return } func (this *apiComp) DeskSkillLv(session comm.IUserSession, req *pb.SmithyDeskSkillLvReq) (code pb.ErrorCode, dat proto.Message) { var ( bFindSkill bool curSkillCfg *cfg.GameSmithyData ) code = this.DeskSkillLvCheck(session, req) if code != pb.ErrorCode_Success { return // 参数校验失败直接返回 } _smithy, err := this.module.modelSmithy.getSmithyList(session.GetUserId()) if err != nil { code = pb.ErrorCode_DBError return } for k, v := range _smithy.Skill { if k == req.DeskType { bFindSkill = true // 查询配置文件 curSkillCfg = this.module.configure.GetSmithyConfigData(k, v) if curSkillCfg != nil && curSkillCfg.Starupneed != nil { //获取下一级 NextSkillCfg := this.module.configure.GetSmithyConfigData(k, v+1) if NextSkillCfg == nil { code = pb.ErrorCode_GourmetSkillMaxLv return } // 升级 code = this.module.ConsumeRes(session, curSkillCfg.Starupneed, true) // 消耗检测 if code != pb.ErrorCode_Success { return } // 概率升级 n, _ := rand.Int(rand.Reader, big.NewInt(100)) if n.Int64() < int64(curSkillCfg.Probability) { // 可以升级 // 技能升级成功 _smithy.Skill[req.DeskType] += 1 _smithy.DeskFloor[req.DeskType] = 0 this.module.modelSmithy.CalculationDeskSkillLv(session.GetUserId(), _smithy) } else { _smithy.DeskFloor[req.DeskType] += 1 if _smithy.DeskFloor[req.DeskType] >= curSkillCfg.Floors { // 触发保底 _smithy.Skill[req.DeskType] += 1 _smithy.DeskFloor[req.DeskType] = 0 this.module.modelSmithy.CalculationDeskSkillLv(session.GetUserId(), _smithy) } } } else { code = pb.ErrorCode_GourmetSkillMaxLv return } break } } if !bFindSkill { code = pb.ErrorCode_ReqParameterError return } session.SendMsg(string(this.module.GetType()), SmithyDeskSkillLvResp, &pb.SmithyDeskSkillLvResp{Data: _smithy}) return }