Commit b8dfef841f703ff8a2268bb8cea0d401229498b4

Authored by 王家文
1 parent 3a6eea2d
Exists in master and in 1 other branch dev-wjw

feat✨:排行榜功能 策划机器人配置不足时的处理

service/roomrank/handle.go
... ... @@ -71,13 +71,6 @@ func HandleInfo(req *models.ReqRoomRankInfo) (code string, rsp models.RspRoomRan
71 71 code = code_msg.RECODE_MERGE_ROOMRANK_LEVEL_ERROR
72 72 return
73 73 }
74   - // 于此同时,如果活动倒计时 < 关门时间 * 2,则不再允许报名
75   - secNow := lxtime.NowUninx()
76   - dtEnd := GetTimeEnd(activityTime, config.ReleaseTime).Unix()
77   - if secNow > dtEnd-RoomCloseSecond*2 {
78   - code = code_msg.RECODE_MERGE_ROOMRANK_CANTSIGN_ERROR
79   - return
80   - }
81 74  
82 75 needSavePlayer := false
83 76 defer func() {
... ... @@ -93,6 +86,21 @@ func HandleInfo(req *models.ReqRoomRankInfo) (code string, rsp models.RspRoomRan
93 86 needSavePlayer = true
94 87 }
95 88  
  89 + // 找到原房间
  90 + roomOld, hasOldRoom := TryGetRoom(gameId, req.TopType, player, config, playerLevel, activityTime)
  91 + if hasOldRoom {
  92 + rsp.RoomRankInfo = GetInfoFromRoom(gameId, player, roomOld, config)
  93 + return
  94 + }
  95 +
  96 + // 于此同时,如果活动倒计时 < 关门时间 * 2,则不再允许报名
  97 + secNow := lxtime.NowUninx()
  98 + dtEnd := GetTimeEnd(activityTime, config.ReleaseTime).Unix()
  99 + if secNow > dtEnd-RoomCloseSecond*2 {
  100 + code = code_msg.RECODE_MERGE_ROOMRANK_CANTSIGN_ERROR
  101 + return
  102 + }
  103 +
96 104 // 判断玩家积分
97 105 if player.Score < config.OpenScore {
98 106 rsp.RoomRankInfo = GetInfoFromPlayer(gameId, player, config)
... ... @@ -100,7 +108,7 @@ func HandleInfo(req *models.ReqRoomRankInfo) (code string, rsp models.RspRoomRan
100 108 }
101 109  
102 110 // 尝试加入房间
103   - room, hasRoom, firstJoin := TryGetRoom(gameId, req.TopType, player, config, playerLevel, activityTime)
  111 + room, hasRoom, firstJoin := TryFindRoom(gameId, req.TopType, player, config, playerLevel, activityTime)
104 112  
105 113 if !hasRoom {
106 114 code = code_msg.RECODE_MERGE_CONFIG_ERROR
... ... @@ -226,13 +234,6 @@ func HandleAddScore(req *models.ReqRoomRankAddScore) (code string, rsp models.Rs
226 234 code = code_msg.RECODE_MERGE_ROOMRANK_LEVEL_ERROR
227 235 return
228 236 }
229   - // 于此同时,如果活动倒计时 < 关门时间 * 2,则不再允许报名
230   - secNow := lxtime.NowUninx()
231   - dtEnd := GetTimeEnd(activityTime, config.ReleaseTime).Unix()
232   - if secNow > dtEnd-RoomCloseSecond*2 {
233   - code = code_msg.RECODE_MERGE_ROOMRANK_CANTSIGN_ERROR
234   - return
235   - }
236 237  
237 238 needSavePlayer := false
238 239 defer func() {
... ... @@ -256,6 +257,26 @@ func HandleAddScore(req *models.ReqRoomRankAddScore) (code string, rsp models.Rs
256 257 recordBase := NewRecordBase(player.Uid, req.TopType, config.Id)
257 258 SaveRecordAddScore(gameId, NewRecordAddScore(recordBase, req.AddScore, oldScore, newScore))
258 259  
  260 + // 找到原房间
  261 + roomOld, hasOldRoom := TryGetRoom(gameId, req.TopType, player, config, playerLevel, activityTime)
  262 + if hasOldRoom {
  263 + // 房间排行增加积分
  264 + UpdatePlayerScore(roomOld, player)
  265 + TryReSort(roomOld, config)
  266 + SaveRoom(gameId, roomOld)
  267 +
  268 + rsp.RoomRankInfo = GetInfoFromRoom(gameId, player, roomOld, config)
  269 + return
  270 + }
  271 +
  272 + // 于此同时,如果活动倒计时 < 关门时间 * 2,则不再允许报名
  273 + secNow := lxtime.NowUninx()
  274 + dtEnd := GetTimeEnd(activityTime, config.ReleaseTime).Unix()
  275 + if secNow > dtEnd-RoomCloseSecond*2 {
  276 + code = code_msg.RECODE_MERGE_ROOMRANK_CANTSIGN_ERROR
  277 + return
  278 + }
  279 +
259 280 // 判断玩家积分
260 281 if player.Score < config.OpenScore {
261 282 rsp.RoomRankInfo = GetInfoFromPlayer(gameId, player, config)
... ... @@ -263,7 +284,7 @@ func HandleAddScore(req *models.ReqRoomRankAddScore) (code string, rsp models.Rs
263 284 }
264 285  
265 286 // 尝试加入房间
266   - room, hasRoom, firstJoin := TryGetRoom(gameId, req.TopType, player, config, playerLevel, activityTime)
  287 + room, hasRoom, firstJoin := TryFindRoom(gameId, req.TopType, player, config, playerLevel, activityTime)
267 288  
268 289 if !hasRoom {
269 290 code = code_msg.RECODE_MERGE_CONFIG_ERROR
... ...
service/roomrank/logic.go
... ... @@ -71,6 +71,12 @@ func TrySettle(gameId string, topType int, player *Player, config *confroomrank.
71 71 return
72 72 }
73 73  
  74 + if hasRoom {
  75 + if confRoom, hasConfRoom := config.Room[room.ConfigId]; hasConfRoom {
  76 + TryCloseRoom(gameId, room, config, confRoom)
  77 + }
  78 + }
  79 +
74 80 TrySettleRoom(gameId, room, confActivity)
75 81  
76 82 if !room.HasSettle {
... ...
service/roomrank/room.go
... ... @@ -88,9 +88,8 @@ func FindRoom(gameId string, topType int, activityId int64, roomConfigId int, ac
88 88 }
89 89  
90 90 // TryGetRoom 尝试获取房间
91   -func TryGetRoom(gameId string, topType int, player *Player, config *confroomrank.ActivityConfig, playerLevel int, activityTime int64) (room *Room, hasRoom bool, firstJoin bool) {
  91 +func TryGetRoom(gameId string, topType int, player *Player, config *confroomrank.ActivityConfig, playerLevel int, activityTime int64) (room *Room, hasRoom bool) {
92 92 hasRoom = false
93   - firstJoin = false
94 93 // 查找玩家所在的房间
95 94 room, hasRoom = LoadRoom(gameId, topType, config.Id, player.RoomUid)
96 95 if hasRoom {
... ... @@ -100,6 +99,11 @@ func TryGetRoom(gameId string, topType int, player *Player, config *confroomrank
100 99 return
101 100 }
102 101  
  102 + return
  103 +}
  104 +
  105 +// TryFindRoom 尝试获取房间
  106 +func TryFindRoom(gameId string, topType int, player *Player, config *confroomrank.ActivityConfig, playerLevel int, activityTime int64) (room *Room, hasRoom bool, firstJoin bool) {
103 107 // 根据等级和分数范围查找合适的房间配置ID
104 108 roomConfigId := 0
105 109 roomConfig := confroomrank.RoomConfig{}
... ... @@ -182,6 +186,18 @@ func TryCloseRoom(gameId string, room *Room, config *confroomrank.ActivityConfig
182 186 room.Details.Players = append(room.Details.Players, roomPlayer)
183 187 }
184 188 }
  189 + // 如果总数还不足 用默认的第一类来填充
  190 + {
  191 + canJoinCount := roomConfig.TotalPlayer - len(room.Details.Players)
  192 + if canJoinCount > 0 && len(roomConfig.AutoRobot) > 0 {
  193 + userType := roomConfig.PlayerTypeCount[0][0]
  194 + robotConfigId := roomConfig.AutoRobot[0]
  195 + for i := 0; i < canJoinCount; i++ {
  196 + roomPlayer := NewRoomRobot(gameId, room, robotConfigId, userType)
  197 + room.Details.Players = append(room.Details.Players, roomPlayer)
  198 + }
  199 + }
  200 + }
185 201 // 填充完之后要排序计算
186 202 TryReSort(room, config)
187 203  
... ...