Commit b8dfef841f703ff8a2268bb8cea0d401229498b4
1 parent
3a6eea2d
Exists in
master
and in
1 other branch
feat✨:排行榜功能 策划机器人配置不足时的处理
Showing
3 changed files
with
61 additions
and
18 deletions
Show diff stats
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 | ... | ... |