From 73edc490e849d99e17a6f95b9a99b983638fc2ed Mon Sep 17 00:00:00 2001 From: Vr61v Date: Mon, 20 Jan 2025 17:34:48 +0300 Subject: [PATCH] feat: notification for finish game and top players --- contracts/room_contract.go | 36 +++++++++++++++++++----------------- 1 file changed, 19 insertions(+), 17 deletions(-) diff --git a/contracts/room_contract.go b/contracts/room_contract.go index 4225a11..31c15bc 100644 --- a/contracts/room_contract.go +++ b/contracts/room_contract.go @@ -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: Логика выкидывания игрока из игры, если пропускает несколько вопросов подряд - * делаем булевый флаг по которому определяем, активен игрок или нет. */