Commit 975643cacc0bcb776622ec66be5d4aef26444446
1 parent
2a6cfa38
Exists in
master
and in
1 other branch
feat✨:排行榜功能 报名条件 分数计算
Showing
3 changed files
with
44 additions
and
15 deletions
Show diff stats
service/code-msg/code-msg.go
| ... | ... | @@ -53,6 +53,7 @@ const ( |
| 53 | 53 | RECODE_MERGE_ROOMRANK_LEVEL_ERROR = "2201" |
| 54 | 54 | RECODE_MERGE_ROOMRANK_HASSETTLE_ERROR = "2202" |
| 55 | 55 | RECODE_MERGE_ROOMRANK_NOTHASSETTLE_ERROR = "2203" |
| 56 | + RECODE_MERGE_ROOMRANK_CANTSIGN_ERROR = "2204" | |
| 56 | 57 | ) |
| 57 | 58 | |
| 58 | 59 | var recodeText = map[string]string{ |
| ... | ... | @@ -106,6 +107,7 @@ var recodeText = map[string]string{ |
| 106 | 107 | RECODE_MERGE_ROOMRANK_LEVEL_ERROR: "参与等级不足", |
| 107 | 108 | RECODE_MERGE_ROOMRANK_HASSETTLE_ERROR: "还有未领取的结算奖励", |
| 108 | 109 | RECODE_MERGE_ROOMRANK_NOTHASSETTLE_ERROR: "没有未领取的结算奖励", |
| 110 | + RECODE_MERGE_ROOMRANK_CANTSIGN_ERROR: "活动倒计时不允许报名", | |
| 109 | 111 | } |
| 110 | 112 | |
| 111 | 113 | func RecodeText(code string) string { | ... | ... |
service/roomrank/handle.go
| ... | ... | @@ -4,6 +4,7 @@ import ( |
| 4 | 4 | "apigame/configs/confroomrank" |
| 5 | 5 | "apigame/models" |
| 6 | 6 | "apigame/service/code-msg" |
| 7 | + "apigame/util/util-lx/lxtime" | |
| 7 | 8 | "apigame/util/zredislock" |
| 8 | 9 | ) |
| 9 | 10 | |
| ... | ... | @@ -70,6 +71,13 @@ func HandleInfo(req *models.ReqRoomRankInfo) (code string, rsp models.RspRoomRan |
| 70 | 71 | code = code_msg.RECODE_MERGE_ROOMRANK_LEVEL_ERROR |
| 71 | 72 | return |
| 72 | 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 | + } | |
| 73 | 81 | |
| 74 | 82 | needSavePlayer := false |
| 75 | 83 | defer func() { |
| ... | ... | @@ -218,6 +226,13 @@ func HandleAddScore(req *models.ReqRoomRankAddScore) (code string, rsp models.Rs |
| 218 | 226 | code = code_msg.RECODE_MERGE_ROOMRANK_LEVEL_ERROR |
| 219 | 227 | return |
| 220 | 228 | } |
| 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 | + } | |
| 221 | 236 | |
| 222 | 237 | needSavePlayer := false |
| 223 | 238 | defer func() { | ... | ... |
service/roomrank/room.go
| ... | ... | @@ -169,8 +169,7 @@ func TryCloseRoom(gameId string, room *Room, config *confroomrank.ActivityConfig |
| 169 | 169 | return |
| 170 | 170 | } |
| 171 | 171 | secNow := lxtime.NowUninx() |
| 172 | - dateEnd := GetTimeEnd(room.ActivityTime, config.ReleaseTime) | |
| 173 | - if secNow > dateEnd.Unix()-RoomCloseSecond { | |
| 172 | + if secNow > room.CreateTime+RoomCloseSecond { | |
| 174 | 173 | room.Closed = true |
| 175 | 174 | // 根据缺口自动填充机器人 |
| 176 | 175 | for i := 0; i < len(roomConfig.PlayerTypeCount); i++ { |
| ... | ... | @@ -183,6 +182,9 @@ func TryCloseRoom(gameId string, room *Room, config *confroomrank.ActivityConfig |
| 183 | 182 | room.Details.Players = append(room.Details.Players, roomPlayer) |
| 184 | 183 | } |
| 185 | 184 | } |
| 185 | + // 填充完之后要排序计算 | |
| 186 | + TryReSort(room, config) | |
| 187 | + | |
| 186 | 188 | SaveRoom(gameId, room) |
| 187 | 189 | } |
| 188 | 190 | } |
| ... | ... | @@ -214,17 +216,17 @@ func JoinInitRobot(gameId string, room *Room, roomConfig confroomrank.RoomConfig |
| 214 | 216 | } |
| 215 | 217 | |
| 216 | 218 | // TrySettleRoom 尝试结算房间 |
| 217 | -func TrySettleRoom(gameId string, room *Room, confActivity *confroomrank.ActivityConfig) { | |
| 219 | +func TrySettleRoom(gameId string, room *Room, config *confroomrank.ActivityConfig) { | |
| 218 | 220 | // 已经结算过的不结算 |
| 219 | 221 | if room.HasSettle { |
| 220 | 222 | return |
| 221 | 223 | } |
| 222 | 224 | // 活动切换或者时间到 触发结算 |
| 223 | 225 | needSettle := false |
| 224 | - if room.ActivityId != confActivity.Id { | |
| 226 | + if room.ActivityId != config.Id { | |
| 225 | 227 | needSettle = true |
| 226 | 228 | } else { |
| 227 | - dateEnd := GetTimeEnd(room.ActivityTime, confActivity.ReleaseTime) | |
| 229 | + dateEnd := GetTimeEnd(room.ActivityTime, config.ReleaseTime) | |
| 228 | 230 | dtNow := lxtime.NowUninx() |
| 229 | 231 | if dtNow >= dateEnd.Unix() { |
| 230 | 232 | needSettle = true |
| ... | ... | @@ -235,15 +237,28 @@ func TrySettleRoom(gameId string, room *Room, confActivity *confroomrank.Activit |
| 235 | 237 | return |
| 236 | 238 | } |
| 237 | 239 | |
| 240 | + percent := float64(0) | |
| 241 | + dateEnd := GetTimeEnd(room.ActivityTime, config.ReleaseTime) | |
| 242 | + secTotal := 24 * 60 * 60 | |
| 243 | + dtEnd := dateEnd.Unix() | |
| 244 | + if dtEnd > config.EndTime { | |
| 245 | + dtEnd = config.EndTime | |
| 246 | + } | |
| 247 | + dtCreate := room.CreateTime | |
| 248 | + if dtEnd <= dtCreate { | |
| 249 | + percent = 0 | |
| 250 | + } else { | |
| 251 | + percent = float64(dtEnd-dtCreate) * 100 / float64(secTotal) | |
| 252 | + } | |
| 238 | 253 | // 机器人最终算分 |
| 239 | 254 | for i := 0; i < len(room.Details.Players); i++ { |
| 240 | 255 | roomPlayer := room.Details.Players[i] |
| 241 | 256 | if roomPlayer.RobotConfigId == 0 { |
| 242 | 257 | continue |
| 243 | 258 | } |
| 244 | - confRobot, hasConfRobot := confActivity.Robot[roomPlayer.RobotConfigId] | |
| 259 | + confRobot, hasConfRobot := config.Robot[roomPlayer.RobotConfigId] | |
| 245 | 260 | if hasConfRobot { |
| 246 | - roomPlayer.Score = GetRobotScoreMax(&confRobot) | |
| 261 | + roomPlayer.Score = GetRobotScoreCurrent(&confRobot, percent) | |
| 247 | 262 | } |
| 248 | 263 | } |
| 249 | 264 | |
| ... | ... | @@ -262,23 +277,20 @@ func TryResetRobot(room *Room, config *confroomrank.ActivityConfig) { |
| 262 | 277 | |
| 263 | 278 | percent := float64(0) |
| 264 | 279 | dateEnd := GetTimeEnd(room.ActivityTime, config.ReleaseTime) |
| 265 | - dateStart := dateEnd.AddDate(0, 0, -1) | |
| 266 | - dtStart := dateStart.Unix() | |
| 280 | + secTotal := 24 * 60 * 60 | |
| 267 | 281 | dtEnd := dateEnd.Unix() |
| 268 | - if dtStart < config.StartTime { | |
| 269 | - dtStart = config.StartTime | |
| 270 | - } | |
| 271 | 282 | if dtEnd > config.EndTime { |
| 272 | 283 | dtEnd = config.EndTime |
| 273 | 284 | } |
| 274 | - if dtEnd <= dtStart { | |
| 285 | + dtCreate := room.CreateTime | |
| 286 | + if dtEnd <= dtCreate { | |
| 275 | 287 | percent = 0 |
| 276 | - } else if secNow <= dtStart { | |
| 288 | + } else if secNow <= dtCreate { | |
| 277 | 289 | percent = 0 |
| 278 | 290 | } else if secNow >= dtEnd { |
| 279 | 291 | percent = 100 |
| 280 | 292 | } else { |
| 281 | - percent = float64(secNow-dtStart) * 100 / float64(dtEnd-dtStart) | |
| 293 | + percent = float64(secNow-dtCreate) * 100 / float64(secTotal) | |
| 282 | 294 | } |
| 283 | 295 | |
| 284 | 296 | // 机器人即时算分 | ... | ... |