feat: notification for finish game and top players

This commit is contained in:
Nikita Mikhalev 2025-01-20 17:34:48 +03:00
parent db9fb76198
commit 73edc490e8

View file

@ -419,7 +419,8 @@ func VoteToFinishGame(roomId string) bool {
return false // Player was not found in the room
}
// todo: Можно добавить notify для уведомления, сколько людей проголосовало за завершение игры
var result = fmt.Sprintf("voted to finish game:%d, need votes:%d", voted, len(room.Players))
sendMessageToPlayers("FinishVote", result)
return automaticFinishGame(ctx, &room, voted)
}
@ -435,24 +436,9 @@ func ManuallyFinishGame(roomId string) bool {
return finishGame(ctx, &room)
}
func finishGame(ctx storage.Context, room *Room) bool {
var winners = getGameWinner(room)
// todo: Отправка награды победителям и хосту
// todo: Нотификация результатов всей игры
room.Status = RoomStatusFinished
setRoom(ctx, room)
return true
}
// todo: @vr61v /check
func getGameWinner(room *Room) []Player {
func chooseWonPlayers(room *Room, GameWinnersCount int) []Player {
var players = room.Players
var winners []Player
var GameWinnersCount = room.GameWinnersCount
sort.Slice(players, func(a, b int) bool {
return players[a].RoundsWon > players[b].RoundsWon
})
@ -479,6 +465,22 @@ func getGameWinner(room *Room) []Player {
return winners
}
func finishGame(ctx storage.Context, room *Room) bool {
var winners = chooseWonPlayers(room, room.GameWinnersCount)
var result = fmt.Sprintf("count winners:%d\n", len(winners))
for i, player := range winners {
result += fmt.Sprintf("place:%d, player:%s, score:%d\n", i, player.Wallet, player.RoundsWon)
}
sendMessageToPlayers("FinishGame", result)
// todo: Отправка награды победителям и хосту
room.Status = RoomStatusFinished
setRoom(ctx, room)
return true
}
/* todo: Логика выкидывания игрока из игры, если пропускает несколько вопросов подряд -
* делаем булевый флаг по которому определяем, активен игрок или нет.
*/