Commit 975643cacc0bcb776622ec66be5d4aef26444446

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

feat✨:排行榜功能 报名条件 分数计算

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 // 机器人即时算分
... ...