diff --git a/modules/enchant/api_ranklist.go b/modules/enchant/api_ranklist.go index 3b5b8e96e..525b52967 100644 --- a/modules/enchant/api_ranklist.go +++ b/modules/enchant/api_ranklist.go @@ -13,12 +13,13 @@ func (this *apiComp) RankListCheck(session comm.IUserSession, req *pb.EnchantRan func (this *apiComp) RankList(session comm.IUserSession, req *pb.EnchantRankListReq) (errdata *pb.ErrorData) { var ( - uids []string - ranks []*pb.DBEnchant - franks []*pb.DBEnchant - players []*pb.DBEnchantRank - friends []*pb.DBEnchantRank - err error + uids []string + ranks []*pb.DBEnchant + ranksmap map[string]*pb.DBEnchant + franks []*pb.DBEnchant + players []*pb.DBEnchantRank + friends []*pb.DBEnchantRank + err error ) if errdata = this.RankListCheck(session, req); errdata != nil { @@ -41,16 +42,22 @@ func (this *apiComp) RankList(session comm.IUserSession, req *pb.EnchantRankList } return } - players = make([]*pb.DBEnchantRank, len(ranks)) - for i, v := range ranks { - players[i] = &pb.DBEnchantRank{ - Id: v.Uid, - Uinfo: v.Uinfo, - Score: v.Boss[req.BoosType].Score, - Grade: v.Boss[req.BoosType].Grade, - Gradegroup: v.Boss[req.BoosType].Gradegroup, - Battletime: v.Boss[req.BoosType].Battletime, - Line: v.Boss[req.BoosType].Line, + ranksmap = make(map[string]*pb.DBEnchant) + for _, v := range ranks { + ranksmap[v.Uid] = v + } + players = make([]*pb.DBEnchantRank, 0, len(uids)) + for _, v := range uids { + if player, ok := ranksmap[v]; ok { + players = append(players, &pb.DBEnchantRank{ + Id: player.Uid, + Uinfo: player.Uinfo, + Score: player.Boss[req.BoosType].Score, + Grade: player.Boss[req.BoosType].Grade, + Gradegroup: player.Boss[req.BoosType].Gradegroup, + Battletime: player.Boss[req.BoosType].Battletime, + Line: player.Boss[req.BoosType].Line, + }) } } // 获取好友 diff --git a/modules/integral/api_rank.go b/modules/integral/api_rank.go index c56562c9a..b497b371c 100644 --- a/modules/integral/api_rank.go +++ b/modules/integral/api_rank.go @@ -14,8 +14,9 @@ func (this *apiComp) RankListCheck(session comm.IUserSession, req *pb.IntegralRa // /排行榜获取 func (this *apiComp) RankList(session comm.IUserSession, req *pb.IntegralRankListReq) (errdata *pb.ErrorData) { var ( - uids []string - ranks []*pb.DBIntegralBoss + uids []string + ranks []*pb.DBIntegralBoss + ranksmap map[string]*pb.DBIntegralBoss // franks []*pb.DBIntegralBoss players []*pb.DBIntegralRank err error @@ -42,16 +43,23 @@ func (this *apiComp) RankList(session comm.IUserSession, req *pb.IntegralRankLis } return } - players = make([]*pb.DBIntegralRank, len(ranks)) - for i, v := range ranks { - players[i] = &pb.DBIntegralRank{ - Id: v.Uid, - Uinfo: v.Uinfo, - Nandu: v.Nandu, - Score: v.Score[req.Nandu], - Line: v.Line[req.Nandu], - Buff: v.Carrybuff[req.Nandu].Buff, + ranksmap = make(map[string]*pb.DBIntegralBoss) + for _, v := range ranks { + ranksmap[v.Uid] = v + } + players = make([]*pb.DBIntegralRank, 0, len(uids)) + for _, v := range uids { + if player, ok := ranksmap[v]; ok { + players = append(players, &pb.DBIntegralRank{ + Id: player.Uid, + Uinfo: player.Uinfo, + Nandu: player.Nandu, + Score: player.Score[req.Nandu], + Line: player.Line[req.Nandu], + Buff: player.Carrybuff[req.Nandu].Buff, + }) } + } // // 获取好友 // fids := this.module.ModuleFriend.GetFriendList(session.GetUserId()) diff --git a/modules/pagoda/api_cyclerank.go b/modules/pagoda/api_cyclerank.go index 84ce518a9..13100fec5 100644 --- a/modules/pagoda/api_cyclerank.go +++ b/modules/pagoda/api_cyclerank.go @@ -14,10 +14,11 @@ func (this *apiComp) CrossCycleRankListCheck(session comm.IUserSession, req *pb. // 循环塔榜 func (this *apiComp) CrossCycleRankList(session comm.IUserSession, req *pb.PagodaCrossCycleRankListReq) (errdata *pb.ErrorData) { var ( - uids []string - err error - result []*pb.DBCyclePagodaRecord - ranks []*pb.DBCycleRank + uids []string + err error + result []*pb.DBCyclePagodaRecord + resultMap map[string]*pb.DBCyclePagodaRecord + ranks []*pb.DBCycleRank ) if errdata = this.CrossCycleRankListCheck(session, req); errdata != nil { @@ -40,13 +41,20 @@ func (this *apiComp) CrossCycleRankList(session comm.IUserSession, req *pb.Pagod } return } + resultMap = make(map[string]*pb.DBCyclePagodaRecord) for _, v := range result { - ranks = append(ranks, &pb.DBCycleRank{ - Uinfo: v.Uinfo, - Line: v.Data[v.Maxfloor].Line, - Floor: v.Maxfloor, - Costtime: v.Data[v.Maxfloor].Consttime, - }) + resultMap[v.Uid] = v + } + ranks = make([]*pb.DBCycleRank, 0, len(uids)) + for _, v := range uids { + if player, ok := resultMap[v]; ok { + ranks = append(ranks, &pb.DBCycleRank{ + Uinfo: player.Uinfo, + Line: player.Data[player.Maxfloor].Line, + Floor: player.Maxfloor, + Costtime: player.Data[player.Maxfloor].Consttime, + }) + } } session.SendMsg(string(this.module.GetType()), "crosscycleranklist", &pb.PagodaCrossCycleRankListResp{ Ranks: ranks, diff --git a/modules/pagoda/api_racerank.go b/modules/pagoda/api_racerank.go index 5859112be..6651d4002 100644 --- a/modules/pagoda/api_racerank.go +++ b/modules/pagoda/api_racerank.go @@ -14,10 +14,11 @@ func (this *apiComp) CrossRaceRankListCheck(session comm.IUserSession, req *pb.P // 六合塔榜 func (this *apiComp) CrossRaceRankList(session comm.IUserSession, req *pb.PagodaCrossRaceRankListReq) (errdata *pb.ErrorData) { var ( - uids []string - err error - result []*pb.DBRacePagodaRecord - ranks []*pb.DBRaceRank + uids []string + err error + result []*pb.DBRacePagodaRecord + resultMap map[string]*pb.DBRacePagodaRecord + ranks []*pb.DBRaceRank ) if errdata = this.CrossRaceRankListCheck(session, req); errdata != nil { @@ -40,13 +41,21 @@ func (this *apiComp) CrossRaceRankList(session comm.IUserSession, req *pb.Pagoda } return } + resultMap = make(map[string]*pb.DBRacePagodaRecord) for _, v := range result { - ranks = append(ranks, &pb.DBRaceRank{ - Uinfo: v.Uinfo, - Line: v.Data[v.Maxfloor].Line, - Floor: v.Maxfloor, - Costtime: v.Data[v.Maxfloor].Consttime, - }) + resultMap[v.Uid] = v + } + ranks = make([]*pb.DBRaceRank, 0, len(uids)) + for _, v := range uids { + if player, ok := resultMap[v]; ok { + ranks = append(ranks, &pb.DBRaceRank{ + Uinfo: player.Uinfo, + Line: player.Data[player.Maxfloor].Line, + Floor: player.Maxfloor, + Costtime: player.Data[player.Maxfloor].Consttime, + }) + } + } session.SendMsg(string(this.module.GetType()), PagodaCrossRaceRankListReq, &pb.PagodaCrossRaceRankListResp{ Ranks: ranks,