package arena import ( "go_dreamfactory/comm" "go_dreamfactory/modules/battle" "go_dreamfactory/pb" "go_dreamfactory/sys/configure" cfg "go_dreamfactory/sys/configure/structs" ) //参数校验 func (this *apiComp) ChallengeRewardCheck(session comm.IUserSession, req *pb.ArenaChallengeRewardReq) (errdata *pb.ErrorData) { return } ///挑战奖励领取 func (this *apiComp) ChallengeReward(session comm.IUserSession, req *pb.ArenaChallengeRewardReq) (errdata *pb.ErrorData) { var ( reward *cfg.GameArenaActiveRewardData info *pb.DBArenaUser rival *pb.DBArenaUser red *pb.ArenaPlayer redstate pb.BattleRecordState bule *pb.ArenaPlayer bulestate pb.BattleRecordState err error iswin bool ) if code = this.ChallengeRewardCheck(session, req); code != pb.ErrorCode_Success { return } if info, err = this.module.modelArena.queryPlayerInfo(session.GetUserId()); err != nil { code = pb.ErrorCode_DBError data = &pb.ErrorData{ Title: pb.GetErrorCodeMsg(code), Message: err.Error(), } 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 } info.Streak++ if reward, err = this.module.configure.getActiveRewardById(info.Dan); err != nil { code = pb.ErrorCode_ConfigNoFound this.module.Errorln(err) data = &pb.ErrorData{ Title: pb.GetErrorCodeMsg(code), Message: err.Error(), } return } if code = this.module.DispenseRes(session, reward.WinReward, true); code != pb.ErrorCode_Success { return } if req.Revengeid != "" { redstate = pb.BattleRecordState_RevengeSucceeded bulestate = pb.BattleRecordState_DefendLost for _, v := range info.Record { if v.Bid == req.Revengeid { v.State = pb.BattleRecordState_RevengeEnd } } } else { redstate = pb.BattleRecordState_AttackWin bulestate = pb.BattleRecordState_DefendLost } // this.module.ModuleRtask.SendToRtask(session, comm.Rtype131, 1) go this.module.ModuleBuried.TriggerBuried(session.GetUserId(), comm.GetBuriedParam(comm.Rtype131, 1)) } else { if req.Revengeid != "" { redstate = pb.BattleRecordState_RevengeFailed bulestate = pb.BattleRecordState_DefendkWin for _, v := range info.Record { if v.Bid == req.Revengeid { v.State = pb.BattleRecordState_RevengeEnd } } } else { redstate = pb.BattleRecordState_AttackLost bulestate = pb.BattleRecordState_DefendkWin } } red = &pb.ArenaPlayer{ Uid: info.Uid, Name: info.Name, Dan: info.Dan, Integral: info.Integral + info.Prededuction, Defend: info.Defend, Isai: false, Lv: info.Lv, } if len(info.Record) > 10 { info.Record = info.Record[1:] } 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, Lv: rival.Lv, } if len(rival.Record) > 10 { rival.Record = rival.Record[1:] } } else { bule = &pb.ArenaPlayer{ Dan: info.Dan, Name: req.Ainame, Integral: req.Aiintegral, } } 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 info.Attacktotaluum++ if req.Iswin { info.Attackwinuum++ } else { rival.Defendwinuum++ } rival.Integral = bule.Integral rival.Rank = bule.Rank rival.Defendtotaluum++ redrecord := &pb.DBArenaBattleRecord{ Bid: req.Report.Info.Id, Time: configure.Now().Unix(), Iswin: req.Iswin, Isdefend: false, Rivalid: bule.Uid, Rivalname: bule.Name, Leadpos: rival.Defend.Leadpos, Formt: make([]*pb.DBHeroBase, len(rival.Defend.Formt)), Addintegral: red.Changeintegral, State: redstate, } for i, v := range rival.Defend.Formt { if v != nil { redrecord.Formt[i] = &pb.DBHeroBase{ Oid: v.Id, Cid: v.HeroID, Star: v.Star, Lv: v.Lv, Property: v.Property, AddProperty: v.AddProperty, JuexProperty: v.JuexProperty, TalentProperty: v.TalentProperty, HoroscopeProperty: v.HoroscopeProperty, Fetters: v.Fetters, NormalSkill: v.NormalSkill, } } else { redrecord.Formt[i] = nil } } info.Record = append(info.Record, redrecord) buleRecord := &pb.DBArenaBattleRecord{ Bid: req.Report.Info.Id, Time: configure.Now().Unix(), Iswin: !req.Iswin, Isdefend: true, Rivalid: red.Uid, Rivalname: red.Name, Leadpos: info.Attack.Leadpos, Addintegral: bule.Changeintegral, Formt: make([]*pb.DBHeroBase, len(info.Attack.Formt)), State: bulestate, } for i, v := range info.Attack.Formt { if v != nil { buleRecord.Formt[i] = &pb.DBHeroBase{ Oid: v.Id, Cid: v.HeroID, Star: v.Star, Lv: v.Lv, Property: v.Property, AddProperty: v.AddProperty, JuexProperty: v.JuexProperty, TalentProperty: v.TalentProperty, HoroscopeProperty: v.HoroscopeProperty, Fetters: v.Fetters, NormalSkill: v.NormalSkill, } } else { buleRecord.Formt[i] = nil } } rival.Record = append(rival.Record, buleRecord) 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 info.Attacktotaluum++ if req.Iswin { info.Attackwinuum++ } redrecord := &pb.DBArenaBattleRecord{ Bid: req.Report.Info.Id, Time: configure.Now().Unix(), Iswin: req.Iswin, Isdefend: false, Rivalid: bule.Uid, Rivalname: bule.Name, Leadpos: req.Report.Info.Buleflist[0].Leadpos, Formt: make([]*pb.DBHeroBase, len(req.Report.Info.Buleflist[0].Team)), Addintegral: red.Changeintegral, State: redstate, } for i, v := range req.Report.Info.Buleflist[0].Team { if v != nil { redrecord.Formt[i] = &pb.DBHeroBase{ Oid: v.Oid, Cid: v.HeroID, Star: v.Star, Lv: v.Lv, Property: make(map[string]int32), AddProperty: make(map[string]int32), NormalSkill: v.NormalSkill, } for k, v := range v.Property { attr := battle.AttributesFromBase(k) if len(attr) > 0 { redrecord.Formt[i].Property[attr] = v } else { attr = battle.AttributesFromExt(k) if len(attr) > 0 { redrecord.Formt[i].AddProperty[attr] = v } } } } else { redrecord.Formt[i] = nil } } info.Record = append(info.Record, redrecord) if err = this.module.modelArena.updateArenaUserInfo(info); err != nil { code = pb.ErrorCode_DBError } } session.SendMsg(string(this.module.GetType()), "challengereward", &pb.ArenaChallengeRewardResp{Issucc: true, Integral: info.Integral, Dan: info.Dan}) go this.module.ModuleBuried.TriggerBuried(session.GetUserId(), comm.GetBuriedParam(comm.Rtype128, red.Integral), comm.GetBuriedParam(comm.Rtype129, red.Dan)) // this.module.ModuleRtask.SendToRtask(session, comm.Rtype128, red.Integral) // this.module.ModuleRtask.SendToRtask(session, comm.Rtype129, red.Dan) return }