diff --git a/service/roomrank/handle.go b/service/roomrank/handle.go index 856bf66..f9dc864 100644 --- a/service/roomrank/handle.go +++ b/service/roomrank/handle.go @@ -71,13 +71,6 @@ func HandleInfo(req *models.ReqRoomRankInfo) (code string, rsp models.RspRoomRan code = code_msg.RECODE_MERGE_ROOMRANK_LEVEL_ERROR return } - // 于此同时,如果活动倒计时 < 关门时间 * 2,则不再允许报名 - secNow := lxtime.NowUninx() - dtEnd := GetTimeEnd(activityTime, config.ReleaseTime).Unix() - if secNow > dtEnd-RoomCloseSecond*2 { - code = code_msg.RECODE_MERGE_ROOMRANK_CANTSIGN_ERROR - return - } needSavePlayer := false defer func() { @@ -93,6 +86,21 @@ func HandleInfo(req *models.ReqRoomRankInfo) (code string, rsp models.RspRoomRan needSavePlayer = true } + // 找到原房间 + roomOld, hasOldRoom := TryGetRoom(gameId, req.TopType, player, config, playerLevel, activityTime) + if hasOldRoom { + rsp.RoomRankInfo = GetInfoFromRoom(gameId, player, roomOld, config) + return + } + + // 于此同时,如果活动倒计时 < 关门时间 * 2,则不再允许报名 + secNow := lxtime.NowUninx() + dtEnd := GetTimeEnd(activityTime, config.ReleaseTime).Unix() + if secNow > dtEnd-RoomCloseSecond*2 { + code = code_msg.RECODE_MERGE_ROOMRANK_CANTSIGN_ERROR + return + } + // 判断玩家积分 if player.Score < config.OpenScore { rsp.RoomRankInfo = GetInfoFromPlayer(gameId, player, config) @@ -100,7 +108,7 @@ func HandleInfo(req *models.ReqRoomRankInfo) (code string, rsp models.RspRoomRan } // 尝试加入房间 - room, hasRoom, firstJoin := TryGetRoom(gameId, req.TopType, player, config, playerLevel, activityTime) + room, hasRoom, firstJoin := TryFindRoom(gameId, req.TopType, player, config, playerLevel, activityTime) if !hasRoom { code = code_msg.RECODE_MERGE_CONFIG_ERROR @@ -226,13 +234,6 @@ func HandleAddScore(req *models.ReqRoomRankAddScore) (code string, rsp models.Rs code = code_msg.RECODE_MERGE_ROOMRANK_LEVEL_ERROR return } - // 于此同时,如果活动倒计时 < 关门时间 * 2,则不再允许报名 - secNow := lxtime.NowUninx() - dtEnd := GetTimeEnd(activityTime, config.ReleaseTime).Unix() - if secNow > dtEnd-RoomCloseSecond*2 { - code = code_msg.RECODE_MERGE_ROOMRANK_CANTSIGN_ERROR - return - } needSavePlayer := false defer func() { @@ -256,6 +257,26 @@ func HandleAddScore(req *models.ReqRoomRankAddScore) (code string, rsp models.Rs recordBase := NewRecordBase(player.Uid, req.TopType, config.Id) SaveRecordAddScore(gameId, NewRecordAddScore(recordBase, req.AddScore, oldScore, newScore)) + // 找到原房间 + roomOld, hasOldRoom := TryGetRoom(gameId, req.TopType, player, config, playerLevel, activityTime) + if hasOldRoom { + // 房间排行增加积分 + UpdatePlayerScore(roomOld, player) + TryReSort(roomOld, config) + SaveRoom(gameId, roomOld) + + rsp.RoomRankInfo = GetInfoFromRoom(gameId, player, roomOld, config) + return + } + + // 于此同时,如果活动倒计时 < 关门时间 * 2,则不再允许报名 + secNow := lxtime.NowUninx() + dtEnd := GetTimeEnd(activityTime, config.ReleaseTime).Unix() + if secNow > dtEnd-RoomCloseSecond*2 { + code = code_msg.RECODE_MERGE_ROOMRANK_CANTSIGN_ERROR + return + } + // 判断玩家积分 if player.Score < config.OpenScore { rsp.RoomRankInfo = GetInfoFromPlayer(gameId, player, config) @@ -263,7 +284,7 @@ func HandleAddScore(req *models.ReqRoomRankAddScore) (code string, rsp models.Rs } // 尝试加入房间 - room, hasRoom, firstJoin := TryGetRoom(gameId, req.TopType, player, config, playerLevel, activityTime) + room, hasRoom, firstJoin := TryFindRoom(gameId, req.TopType, player, config, playerLevel, activityTime) if !hasRoom { code = code_msg.RECODE_MERGE_CONFIG_ERROR diff --git a/service/roomrank/logic.go b/service/roomrank/logic.go index 78fff49..0c83ebd 100644 --- a/service/roomrank/logic.go +++ b/service/roomrank/logic.go @@ -71,6 +71,12 @@ func TrySettle(gameId string, topType int, player *Player, config *confroomrank. return } + if hasRoom { + if confRoom, hasConfRoom := config.Room[room.ConfigId]; hasConfRoom { + TryCloseRoom(gameId, room, config, confRoom) + } + } + TrySettleRoom(gameId, room, confActivity) if !room.HasSettle { diff --git a/service/roomrank/room.go b/service/roomrank/room.go index 27287a5..4762044 100644 --- a/service/roomrank/room.go +++ b/service/roomrank/room.go @@ -88,9 +88,8 @@ func FindRoom(gameId string, topType int, activityId int64, roomConfigId int, ac } // TryGetRoom 尝试获取房间 -func TryGetRoom(gameId string, topType int, player *Player, config *confroomrank.ActivityConfig, playerLevel int, activityTime int64) (room *Room, hasRoom bool, firstJoin bool) { +func TryGetRoom(gameId string, topType int, player *Player, config *confroomrank.ActivityConfig, playerLevel int, activityTime int64) (room *Room, hasRoom bool) { hasRoom = false - firstJoin = false // 查找玩家所在的房间 room, hasRoom = LoadRoom(gameId, topType, config.Id, player.RoomUid) if hasRoom { @@ -100,6 +99,11 @@ func TryGetRoom(gameId string, topType int, player *Player, config *confroomrank return } + return +} + +// TryFindRoom 尝试获取房间 +func TryFindRoom(gameId string, topType int, player *Player, config *confroomrank.ActivityConfig, playerLevel int, activityTime int64) (room *Room, hasRoom bool, firstJoin bool) { // 根据等级和分数范围查找合适的房间配置ID roomConfigId := 0 roomConfig := confroomrank.RoomConfig{} @@ -182,6 +186,18 @@ func TryCloseRoom(gameId string, room *Room, config *confroomrank.ActivityConfig room.Details.Players = append(room.Details.Players, roomPlayer) } } + // 如果总数还不足 用默认的第一类来填充 + { + canJoinCount := roomConfig.TotalPlayer - len(room.Details.Players) + if canJoinCount > 0 && len(roomConfig.AutoRobot) > 0 { + userType := roomConfig.PlayerTypeCount[0][0] + robotConfigId := roomConfig.AutoRobot[0] + for i := 0; i < canJoinCount; i++ { + roomPlayer := NewRoomRobot(gameId, room, robotConfigId, userType) + room.Details.Players = append(room.Details.Players, roomPlayer) + } + } + } // 填充完之后要排序计算 TryReSort(room, config) -- libgit2 0.21.0