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