go_dreamfactory/modules/arena/api_challengereward.go
2022-10-26 16:33:51 +08:00

182 lines
4.9 KiB
Go

package arena
import (
"go_dreamfactory/comm"
"go_dreamfactory/pb"
cfg "go_dreamfactory/sys/configure/structs"
"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 (
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
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 reward, err = this.module.configure.getActiveRewardById(info.Dan); err != nil {
this.module.Errorln(err)
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_RevengeEnd
for _, v := range info.Record {
if v.Bid == req.Revengeid {
v.State = pb.BattleRecordState_RevengeEnd
}
}
} else {
redstate = pb.BattleRecordState_RevengeSucceeded
bulestate = pb.BattleRecordState_WaitingRevenge
}
session.SendMsg(string(this.module.GetType()), "challengereward", &pb.ArenaChallengeRewardResp{Issucc: true})
} else {
if req.Revengeid != "" {
redstate = pb.BattleRecordState_RevengeFailed
bulestate = pb.BattleRecordState_RevengeEnd
for _, v := range info.Record {
if v.Bid == req.Revengeid {
v.State = pb.BattleRecordState_RevengeEnd
}
}
} else {
redstate = pb.BattleRecordState_RevengeFailed
bulestate = pb.BattleRecordState_RevengeSucceeded
}
}
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:]
}
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:]
}
} 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
}
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,
Addintegral: red.Changeintegral,
State: redstate,
})
if err = this.module.modelArena.Change(red.Uid, map[string]interface{}{"record": info.Record}); err != nil {
code = pb.ErrorCode_DBError
return
}
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,
Addintegral: bule.Changeintegral,
State: bulestate,
})
if err = this.module.modelArena.Change(rival.Uid, map[string]interface{}{"record": rival.Record}); err != nil {
code = pb.ErrorCode_DBError
return
}
} 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
}
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,
Addintegral: red.Changeintegral,
})
if err = this.module.modelArena.Change(red.Uid, map[string]interface{}{"record": info.Record}); err != nil {
code = pb.ErrorCode_DBError
return
}
}
return
}