package arena import ( "go_dreamfactory/comm" "go_dreamfactory/pb" "time" "google.golang.org/protobuf/proto" ) //参数校验 func (this *apiComp) ChallengeRewardCheck(session comm.IUserSession, req *pb.ArenaChallengeRewardReq) (code pb.ErrorCode) { return } ///挑战奖励领取 func (this *apiComp) ChallengeReward(session comm.IUserSession, req *pb.ArenaChallengeRewardReq) (code pb.ErrorCode, data proto.Message) { var ( info *pb.DBArenaUser rival *pb.DBArenaUser red *pb.ArenaPlayer bule *pb.ArenaPlayer err error iswin bool ) if code = this.ChallengeRewardCheck(session, req); code != pb.ErrorCode_Success { return } if req.Iswin { if code, iswin = this.module.battle.CheckBattleReport(session, req.Report); code != pb.ErrorCode_Success { return } if !iswin { code = pb.ErrorCode_BattleValidationFailed return } } if info, err = this.module.modelArena.queryPlayerInfo(session.GetUserId()); err != nil { code = pb.ErrorCode_DBError return } red = &pb.ArenaPlayer{ Uid: info.Uid, Name: info.Name, Dan: info.Dan, Integral: info.Integral, Defend: info.Defend, Isai: false, } if len(info.Record) > 10 { info.Record = info.Record[1:] } info.Record = append(info.Record, &pb.DBArenaBattleRecord{ Bid: req.Report.Info.Id, Time: time.Now().Unix(), Iswin: req.Iswin, Isdefend: false, Rivalid: bule.Uid, Rivalname: bule.Name, }) if err = this.module.modelArena.Change(red.Uid, map[string]interface{}{"record": info.Record}); err != nil { code = pb.ErrorCode_DBError return } if !req.Isai { if rival, err = this.module.modelArena.queryPlayerInfo(req.Report.Info.BlueCompId); err != nil { code = pb.ErrorCode_DBError return } bule = &pb.ArenaPlayer{ Uid: rival.Uid, Name: rival.Name, Dan: rival.Dan, Integral: rival.Integral, Defend: rival.Defend, Isai: false, } if len(rival.Record) > 10 { rival.Record = rival.Record[1:] } rival.Record = append(rival.Record, &pb.DBArenaBattleRecord{ Bid: req.Report.Info.Id, Time: time.Now().Unix(), Iswin: !req.Iswin, Isdefend: true, Rivalid: red.Uid, Rivalname: red.Name, }) if err = this.module.modelArena.Change(rival.Uid, map[string]interface{}{"record": rival.Record}); err != nil { code = pb.ErrorCode_DBError return } } else { bule = &pb.ArenaPlayer{ Dan: info.Dan, Integral: red.Integral, } } this.module.modelArena.integralCompute(red, bule, req.Iswin) if !req.Isai { this.module.modelRank.updateArenaRank(red, bule) info.Integral = red.Integral info.Rank = red.Rank rival.Integral = bule.Integral rival.Rank = bule.Rank if err = this.module.modelArena.updateArenaUserInfo(info); err != nil { code = pb.ErrorCode_DBError } if err = this.module.modelArena.updateArenaUserInfo(rival); err != nil { code = pb.ErrorCode_DBError } } else { this.module.modelRank.updateArenaRank(red) info.Integral = red.Integral info.Rank = red.Rank if err = this.module.modelArena.updateArenaUserInfo(info); err != nil { code = pb.ErrorCode_DBError } } return }