From 2c35f0c9436d0e6c5e64e639e4aa08552e45d5da Mon Sep 17 00:00:00 2001 From: 王家文 Date: Sat, 11 May 2024 11:52:28 +0800 Subject: [PATCH] feat✨:排行榜结算方式改为每天结算 --- service/roomrank/logic.go | 28 ++++++++++++++++++++-------- service/roomrank/room.go | 46 ++++++++++++++++++++++++++++++---------------- 2 files changed, 50 insertions(+), 24 deletions(-) diff --git a/service/roomrank/logic.go b/service/roomrank/logic.go index 2c175c6..668ee3e 100644 --- a/service/roomrank/logic.go +++ b/service/roomrank/logic.go @@ -60,22 +60,34 @@ func TrySettle(gameId string, topType int, player *Player, config *confroomrank. return } + // 已经结算过的不结算 if room.HasSettle { return } - // 未到结算时间不结算 - dtYear, dtMonth, dtDay := ActivityTimeToDate(room.ActivityTime) - hour, min, sec := ztime.TimeClock(config.ReleaseTime) - dt := time.Date(dtYear, dtMonth, dtDay, hour, min, sec, 0, time.Local) - dtNow := lxtime.NowUninx() - if dtNow < dt.Unix() { - return - } confActivity, hasConfActivity := confroomrank.GetConfig(gameId, room.ActivityId) if !hasConfActivity { return } + + // 活动切换或者时间到 触发结算 + needSettle := false + if player.ActivityId != config.Id { + needSettle = true + } else { + dtYear, dtMonth, dtDay := ActivityTimeToDate(room.ActivityTime) + hour, min, sec := ztime.TimeClock(confActivity.ReleaseTime) + dt := time.Date(dtYear, dtMonth, dtDay, hour, min, sec, 0, time.Local) + dtNow := lxtime.NowUninx() + if dtNow >= dt.Unix() { + needSettle = true + } + } + + if !needSettle { + return + } + TrySettleRoom(gameId, room, confActivity) // 找到玩家在房间里的名次 diff --git a/service/roomrank/room.go b/service/roomrank/room.go index 5d6389e..56245ee 100644 --- a/service/roomrank/room.go +++ b/service/roomrank/room.go @@ -6,9 +6,12 @@ import ( "apigame/service-common/svmysql" "apigame/util/util-lx/lxalilog" "apigame/util/util-lx/lxtime" + "apigame/util/ztime" + "fmt" "math" "math/rand" "sort" + "time" ) func tryInitRoom(gameId string, room *Room) { @@ -214,9 +217,6 @@ func JoinInitRobot(gameId string, room *Room, roomConfig confroomrank.RoomConfig // TrySettleRoom 尝试结算房间 func TrySettleRoom(gameId string, room *Room, confActivity *confroomrank.ActivityConfig) { - if room.HasSettle { - return - } // 机器人最终算分 for i := 0; i < len(room.Details.Players); i++ { roomPlayer := room.Details.Players[i] @@ -241,6 +241,31 @@ func TryResetRobot(room *Room, config *confroomrank.ActivityConfig) { return } room.ResetRobotTime = secNow + + percent := float64(0) + dtYear, dtMonth, dtDay := ActivityTimeToDate(room.ActivityTime) + hour, min, sec := ztime.TimeClock(config.ReleaseTime) + dateEnd := time.Date(dtYear, dtMonth, dtDay, hour, min, sec, 0, time.Local) + dateStart := dateEnd.AddDate(0, 0, -1) + dtStart := dateStart.Unix() + dtEnd := dateEnd.Unix() + if dtStart < config.StartTime { + dtStart = config.StartTime + } + if dtEnd > config.EndTime { + dtEnd = config.EndTime + } + if dtEnd <= dtStart { + percent = 0 + } else if secNow <= dtStart { + percent = 0 + } else if secNow >= dtEnd { + percent = 100 + } else { + percent = float64(secNow-dtStart) * 100 / float64(dtEnd-dtStart) + } + fmt.Println("dwjw🐸 percent", percent) + // 机器人即时算分 for i := 0; i < len(room.Details.Players); i++ { roomPlayer := room.Details.Players[i] @@ -249,7 +274,7 @@ func TryResetRobot(room *Room, config *confroomrank.ActivityConfig) { } confRobot, hasConfRobot := config.Robot[roomPlayer.RobotConfigId] if hasConfRobot { - roomPlayer.Score = GetRobotScoreCurrent(config, &confRobot, secNow) + roomPlayer.Score = GetRobotScoreCurrent(&confRobot, percent) } } } @@ -261,18 +286,7 @@ func TryReSort(room *Room, config *confroomrank.ActivityConfig) { } // GetRobotScoreCurrent 从机器人配置里得到实时得分 -func GetRobotScoreCurrent(config *confroomrank.ActivityConfig, confRobot *confroomrank.RobotConfig, secNow int64) int64 { - percent := float64(0) - if config.EndTime <= config.StartTime { - percent = 0 - } else if secNow <= config.StartTime { - percent = 0 - } else if secNow >= config.EndTime { - percent = 100 - } else { - percent = float64(secNow-config.StartTime) * 100 / float64(config.EndTime-config.StartTime) - } - +func GetRobotScoreCurrent(confRobot *confroomrank.RobotConfig, percent float64) int64 { score := (float64(confRobot.TotalScore-confRobot.MinScore) * float64(100-confRobot.Range+rand.Intn(confRobot.Range*2)) / 100) * percent / 100 result := int64(confRobot.MinScore) + int64(math.Ceil(score)) -- libgit2 0.21.0