比赛观战

This commit is contained in:
sk 2024-08-21 10:46:45 +08:00
parent cd321a3f55
commit 00b0e01000
3 changed files with 84 additions and 10 deletions

View File

@ -199,13 +199,15 @@ func CSRoomList(s *netlib.Session, packetId int, data interface{}, sid int64) er
if v.matchCtx == nil { if v.matchCtx == nil {
continue continue
} }
p := PlayerMgrSington.GetPlayerBySnId(v.matchCtx.copySnid)
d := &tournament.MatchPlayer{ d := &tournament.MatchPlayer{
SnId: v.matchCtx.copySnid, SnId: v.matchCtx.copySnid,
Name: v.Name, Name: p.GetName(),
HeadUrl: v.HeadUrl,
UseRoleId: v.matchCtx.copyRoleId, UseRoleId: v.matchCtx.copyRoleId,
UseSkinId: v.matchCtx.copySkinId, UseSkinId: v.matchCtx.copySkinId,
Rank: v.matchCtx.rank, Rank: TournamentMgr.GetRank(tm.SortId, v.matchCtx.copySnid),
Score: v.matchCtx.grade, Score: v.matchCtx.grade,
} }
room.Players = append(room.Players, d) room.Players = append(room.Players, d)

View File

@ -19,6 +19,10 @@ import (
"mongo.games.com/game/srvdata" "mongo.games.com/game/srvdata"
) )
func getSortId() int64 {
return time.Now().UnixMilli()
}
type TmPlayer struct { type TmPlayer struct {
SnId int32 SnId int32
seq int // 报名序号(第几个报名的) seq int // 报名序号(第几个报名的)
@ -30,6 +34,7 @@ type TmGradeInfo struct {
copyLv int32 copyLv int32
copyRoleId int32 copyRoleId int32
CopySkinId int32 CopySkinId int32
rank int32
} }
type TmMatch struct { type TmMatch struct {
@ -48,7 +53,7 @@ type TmMatch struct {
func NewTmMatch(platform string, match *webapi_proto.GameMatchDate, players map[int32]*TmPlayer) *TmMatch { func NewTmMatch(platform string, match *webapi_proto.GameMatchDate, players map[int32]*TmPlayer) *TmMatch {
ret := &TmMatch{ ret := &TmMatch{
SortId: time.Now().UnixNano(), SortId: getSortId(),
TMId: match.Id, TMId: match.Id,
TmPlayer: make(map[int32]*TmPlayer), TmPlayer: make(map[int32]*TmPlayer),
Platform: platform, Platform: platform,
@ -307,6 +312,7 @@ func (tm *TmMatch) RobotGradesDecline(round int) {
copyLv: info.copyLv, copyLv: info.copyLv,
copyRoleId: info.copyRoleId, copyRoleId: info.copyRoleId,
CopySkinId: info.CopySkinId, CopySkinId: info.CopySkinId,
rank: info.rank,
} }
tm.robotGrades[lastRound][i] = gradeInfo tm.robotGrades[lastRound][i] = gradeInfo
if info.copySnid != 0 { if info.copySnid != 0 {

View File

@ -154,8 +154,8 @@ func (this *Tournament) addFinalPlayer(sortId int64, p *PerRankInfo) {
this.finalPerRank[sortId] = append(this.finalPerRank[sortId], p) this.finalPerRank[sortId] = append(this.finalPerRank[sortId], p)
} }
// 查询一场比赛某轮的历史数据 // GetRoundPlayer 查询一场比赛某轮的历史数据
func (this *Tournament) getRoundPlayer(sortId int64, round int32) *PlayerRoundInfo { func (this *Tournament) GetRoundPlayer(sortId int64, round int32) *PlayerRoundInfo {
_, ok := this.roundPlayers[sortId] _, ok := this.roundPlayers[sortId]
if !ok { if !ok {
return nil return nil
@ -923,6 +923,59 @@ func (this *Tournament) getRank(sortId int64, round, snid int32, isFinals bool)
return 0 return 0
} }
// GetRank 获取排名
func (this *Tournament) GetRank(sortId int64, snid int32) int32 {
tm := this.GetTm(sortId)
if tm == nil {
return 0
}
round := this.GetRound(sortId)
useRobot := this.IsRobotOn(tm.gmd)
robotRankFunc := func(n int, snid int32) int32 {
rank := int32(0)
for _, v := range tm.robotGrades[n] {
if v.copySnid == snid {
return v.rank
}
if v.copySnid == 0 {
rank = v.rank
}
}
return rank
}
playerRankFunc := func(n int, snid int32) int32 {
d := this.GetRoundPlayer(sortId, int32(n))
if d != nil {
for _, v := range d.players {
if v.p.SnId == snid {
return v.rank
}
}
}
d = this.GetRoundPlayer(sortId, int32(n-1))
if d != nil {
for _, v := range d.players {
if v.p.SnId == snid {
return v.rank
}
}
}
return 0
}
if round <= 1 {
return 0
} else {
if useRobot {
return robotRankFunc(int(round-1), snid)
} else {
return playerRankFunc(int(round-1), snid)
}
}
}
// UpdateMatchInfo 玩家比赛结束 更新积分 // UpdateMatchInfo 玩家比赛结束 更新积分
func (this *Tournament) UpdateMatchInfo(p *Player, sortId int64, grade, isWin int32, matchRobotGrades map[int32]int32) { func (this *Tournament) UpdateMatchInfo(p *Player, sortId int64, grade, isWin int32, matchRobotGrades map[int32]int32) {
logger.Logger.Tracef("UpdateMatchInfo: sortId:%v, grade:%v, isWin: %v, matchRobotGrades:%v", sortId, grade, isWin, matchRobotGrades) logger.Logger.Tracef("UpdateMatchInfo: sortId:%v, grade:%v, isWin: %v, matchRobotGrades:%v", sortId, grade, isWin, matchRobotGrades)
@ -999,7 +1052,7 @@ func (this *Tournament) stopMatch(matchId int32, sortId int64) (isOver bool) {
// 开启机器人时使用 // 开启机器人时使用
func (this *Tournament) NextRoundStartSingle(sortId int64, playerCtx *PlayerMatchContext, matchRobotGrades map[int32]int32) { func (this *Tournament) NextRoundStartSingle(sortId int64, playerCtx *PlayerMatchContext, matchRobotGrades map[int32]int32) {
logger.Logger.Tracef("NextRoundStartSingle 当前第 %v 轮", playerCtx.round) logger.Logger.Tracef("NextRoundStartSingle 当前第 %v 轮", playerCtx.round)
info := this.getRoundPlayer(sortId, playerCtx.round) info := this.GetRoundPlayer(sortId, playerCtx.round)
if info == nil { if info == nil {
return return
} }
@ -1042,11 +1095,24 @@ func (this *Tournament) NextRoundStartSingle(sortId int64, playerCtx *PlayerMatc
} }
sort.Slice(arr, func(i, j int) bool { sort.Slice(arr, func(i, j int) bool {
if arr[i].grade == arr[j].grade { // 真人在前
if arr[i].copySnid == 0 {
return true
}
if arr[j].copySnid == 0 {
return false
}
}
return arr[i].grade > arr[j].grade return arr[i].grade > arr[j].grade
}) })
for k, v := range arr {
v.rank = int32(k + 1)
}
playerCtx.tm.robotGrades[int(round)] = arr
for _, info := range arr { for _, info := range arr {
logger.Logger.Tracef("NextRoundStart_Single 本轮积分排名 Snid:%v Grade:%v copyLv:%v copyRoleId:%v", info.copySnid, info.grade, info.copyLv, info.copyRoleId) logger.Logger.Tracef("NextRoundStart_Single 本轮积分排名 round:%v Snid:%v Grade:%v copyLv:%v copyRoleId:%v rank:%v",
playerCtx.round, info.copySnid, info.grade, info.copyLv, info.copyRoleId, info.rank)
} }
// 获取排名 // 获取排名
@ -1117,7 +1183,7 @@ func (this *Tournament) NextRoundStartSingle(sortId int64, playerCtx *PlayerMatc
// 关闭机器时使用 // 关闭机器时使用
func (this *Tournament) NextRoundStart(sortId int64, playerCtx *PlayerMatchContext) { func (this *Tournament) NextRoundStart(sortId int64, playerCtx *PlayerMatchContext) {
logger.Logger.Tracef("NextRoundStart 当前第 %v 轮", playerCtx.round) logger.Logger.Tracef("NextRoundStart 当前第 %v 轮", playerCtx.round)
info := this.getRoundPlayer(sortId, playerCtx.round) info := this.GetRoundPlayer(sortId, playerCtx.round)
if info == nil { if info == nil {
return return
} }
@ -1158,7 +1224,7 @@ func (this *Tournament) NextRoundStart(sortId int64, playerCtx *PlayerMatchConte
info.players = info.players[len(ps):] info.players = info.players[len(ps):]
willOut := false willOut := false
if promotionNum1 == this.getRoundPlayer(sortId, playerCtx.round-1).num { if promotionNum1 == this.GetRoundPlayer(sortId, playerCtx.round-1).num {
// 最后一个人打完了,确定要淘汰的人 // 最后一个人打完了,确定要淘汰的人
willOut = true willOut = true
} else { } else {