Browse Source

– Ёбаный рот этого казино, блядь! Ты кто такой, сука, чтоб это сделать?
– Я всегда это делал, когда..
– ВЫ ЧЁ, ДЕБИЛЫ? Вы чё, ебанутые, что ли? Действи.. вы в натуре ебанутые? Эта сидит там, чешет колоду, блядь. Этот стоит, грит: "Я те щас тут тоже раздам"..
– Ну посмотрите..
– ЁБ ТВОЮ МАТЬ! У вас дилер есть, чтобы это делать на моих глазах, мудак ёбаный!
– Хорошо, будет делать дилер. Раньше это делал всегда я..
– ДЕГЕНЕРАТ ЕБУЧИЙ! Вот пока ты это делал, дебил, ебаная сука, БЛЯДЬ, так все и происходило!
– В ВИПе?
– В ХУИПЕ! Блядь, вы чё, действительно идиоты, что ли, а? Бля, дифиченты какие-то, ёбаный ваш рот, а.. А ты-то чё делаешь?
– Они разложены просто в другом порядке..
– ЁБАНЫЙ ТВОЙ РОТ! КАКОГО ХУЯ ОНИ В ДРУГОМ ПОРЯДКЕ РАЗЛОЖЕНЫ? Ты распечатала колоду на моих глазах, БЛЯДЬ! Как они могут быть там разложены в другом порядке?!
– В другом! Вот смотрите..
– ЁБАНЫЙ ТВОЙ РОТ, БЛЯДЬ! Вы чё, в киосках их заряжаете?! Сука ёбаная, падла блядская!
– Производители карт..
– ТЫ, МУДИЛА ГОРОХОВАЯ! Как заряжен.. Как запечатанная колода может быть в другом порядке нн.. разложена?! Ты, долбоёб ёбаный!
– Докажу! докажу!
– ТЫ, МУДИЛА ЕБУЧАЯ, ВЫ ВО ЧТО ИГРАЕТЕ, СУКА ЁБАНАЯ, ПАДЛА?!
– Вот смотрите..
– Я РОТ ТВОЙ ЕБАЛ! Так вы зззаря.. вы, БЛЯДИ, покупайте карты не в киосках! Вы чё, ебанутые, сука?!
– Фабрика в таком их виде..
– ТЫ МУДИЛА! Как может в казино быть колода зааа.. разложена в другом порядке?! Ты чё, бредишь, что ли?! Ёбаный твой рот, а!..
– Так вот и разложены..
– ТЫ ЧЁ, БРЕДИШЬ, СУКА?!
– Успокойтесь.. Вот, посмотрите, как они разложены..
– БЛЯДЬ! ДЕГЕНЕРАТИВНОЕ ХУЙЛО! Ты бредишь, что ли?! Ты чё, бредишь, блядь?! Как в казино могут быть карты по-другому разложены?! Ты чё, дурак, блядь?
– Если я разложу вот так вот, да?..
– Ёбаный козел! Ай фак ю булщит! ЩИТ!
– Вы специально..
– Я специально! Я щас им расскажу, что вы тут исполняете! Вы чё, дебилы, блядь?!
– Как вы хотите?..
– ВЫ ЧЁ, ДЕБИЛЫ, СУКА?! Как в казино в запечатанной пачке может быть разложены по-другому карты?! Вы чё?!
– Посмотрите..
– ТЫ, МУДИЛО ГОРОХОВОЕ! Вы их где берете, бляди?!
– Покупаем у официальных..
– ВЫ МУДИЛЫ!! Вы чё, е.. блять.. Ёб твою мать, в казино, сука, карты разложены по-другому.. ТЫ ЧЁ, ДУРАК, ЕБАНЫЙ ТВОЙ РОТ, А?! Ты чё, кретин, что ли?
– Как вы хотели, скажите мне? Как вы хотите?
– Ты, дегенеративный кретин, ты не понимаешь, что ты говоришь вообще!
– Что есть, то и говорю..
– Ты говоришь, что в казино в запечатанных колодах карты разложены по-другому?!
– Да, смотрите. Туз не на месте..

Tigran 4 years ago
parent
commit
a00beaf753

+ 10 - 16
MafiaTelegramBot/Game/GameRooms/GameRoom.GameProcess.cs

@@ -10,6 +10,7 @@ using MafiaTelegramBot.Game.GameRoles;
 using MafiaTelegramBot.Models;
 using MafiaTelegramBot.Resources;
 using Microsoft.EntityFrameworkCore;
+using Telegram.Bot.Types;
 using Timer = System.Timers.Timer;
 
 namespace MafiaTelegramBot.Game.GameRooms
@@ -161,7 +162,7 @@ namespace MafiaTelegramBot.Game.GameRooms
         {
             IsDay = true;
             
-            var discussionTimer = new Timer {AutoReset = false, Interval = Constants.ONE_MINUTE};
+            var discussionTimer = new Timer {AutoReset = false, Interval = Constants.DISCUSSION_INTERVAL};
             var discussionEnded = new ManualResetEvent(false);
             foreach (var player in Players.Values.Where(player => !player.IsBlocked)) player.IsSpeaker = true;
             discussionTimer.Elapsed += async (_, _) =>
@@ -201,7 +202,7 @@ namespace MafiaTelegramBot.Game.GameRooms
             await Task.Run(async () =>
             {
                 var resetEvent = new ManualResetEvent(false);
-                var timer = new Timer{ Interval = Constants.ONE_MINUTE, AutoReset = false };
+                var timer = new Timer{ Interval = Constants.NIGHT_ACTION_INTERVAL, AutoReset = false };
                 foreach (var player in Players.Values)
                     await player.CurrentRole.NightAction();
                 timer.Elapsed += (_, _) => resetEvent.Set();
@@ -274,20 +275,17 @@ namespace MafiaTelegramBot.Game.GameRooms
                 foreach (var contender in contendersCopy.Where(p => !p.IsBlocked)) 
                     if (Players.ContainsKey(contender.Id)) await contender.CurrentRole.DefenceAction();
                 var votersPlayers = Players.Values.Where(p => p.IsAlive && !p.IsBlocked).ToArray();
-                var timers = votersPlayers.Select(
-                    voter => voter.CurrentRole.VotingAction(contendersCopy.Where(p => Players.ContainsKey(p.Id)).ToList()))
-                    .ToList();
-                Timer votingTimer = new() {Interval = 20 * 1000, AutoReset = false};
+                foreach (var voter in votersPlayers)
+                    await voter.CurrentRole.VotingAction(contendersCopy.Where(p => Players.ContainsKey(p.Id)).ToList());
+                var timer = new Timer {Interval = Constants.VOTE_KILL_INTERVAL, AutoReset = false};
                 var resetEvent = new ManualResetEvent(false);
-                votingTimer.Elapsed += async (_, _) =>
+                timer.Elapsed += async(_, _) =>
                 {
-                    foreach (var timer in timers) timer.Set();
-                    votingTimer.Stop();
-                    await PlayersCh.Send(strings.calculating_votes);
-                    Thread.Sleep(votersPlayers.Length * 120);
+                    foreach (var voter in votersPlayers.Where(p => !VoteKillList.ContainsKey(p.Id) && Players.ContainsKey(p.Id)))
+                        await voter.CurrentRole.RandomVoting();
                     resetEvent.Set();
                 };
-                votingTimer.Start();
+                timer.Start();
                 resetEvent.WaitOne();
             });
         }
@@ -346,12 +344,8 @@ namespace MafiaTelegramBot.Game.GameRooms
         private async Task<List<Player>> CalculateCandidates()
         {
             var message = strings.results_of_voting;
-            Console.Write(VoteKillList.Count);
             foreach (var (playerId, targetId) in VoteKillList)
             {
-                Console.WriteLine(Players.ContainsKey(playerId) && Players.ContainsKey(targetId));
-                Console.WriteLine(playerId);
-                Console.WriteLine(targetId);
                 message += Players.ContainsKey(playerId) && Players.ContainsKey(targetId)
                     ? $"\n({Players[playerId].TurnOrder}) {Players[playerId].NickName} {strings.vote_to} " +
                            $"({Players[targetId].TurnOrder}) {Players[targetId].NickName}" : "";

+ 21 - 23
MafiaTelegramBot/Game/GameRooms/GameRoom.Role.cs

@@ -114,11 +114,11 @@ namespace MafiaTelegramBot.Game.GameRooms
                 Player = player;
             }
 
-            public async Task SpeakAction(int seconds = Constants.ONE_MINUTE, bool enableTimer = false)
+            public async Task SpeakAction(int interval = Constants.SPEAK_INTERVAL, bool enableTimer = false)
             {
                 await Room.PlayersCh.SendTo(Player.ChatId, $"{strings.your_turn}", Keyboard.InGamePlayerMenuWithEndTurn);
                 Player.IsSpeaker = true;
-                var timer = new Timer(seconds * 1000) {AutoReset = false};
+                var timer = new Timer(interval) {AutoReset = false};
                 timer.Elapsed += (_, _) => TalkingActionComplete.Set();
                 if (Room.TimerEnabled || enableTimer) timer.Start();
                 TalkingActionComplete.WaitOne();
@@ -130,7 +130,7 @@ namespace MafiaTelegramBot.Game.GameRooms
 
             public async Task VotingAction(bool isFirst = false)
             {
-                var voteTimer = new Timer(20 * 1000) {AutoReset = false};
+                var voteTimer = new Timer(Constants.PUT_UP_VOTE_INTERVAL) {AutoReset = false};
                 var alivePlayers = Room.Players.Values.Where(p => p.IsAlive).Except(Room.VoteUpList).ToList();
                 var message = await Room.PlayersCh.SendTo(Player.ChatId,
                     $"{strings.put_up_vote}\n{strings.you_have_twenty_seconds}{(isFirst ? "\n" + strings.user_not_choose : "")}",  
@@ -147,34 +147,32 @@ namespace MafiaTelegramBot.Game.GameRooms
                 VoteActionComplete.Reset();
             }
 
-            public ManualResetEvent VotingAction(List<Player> targets)
+
+            private int _votingMessageId;
+            private List<Player> _votingTargetsList;
+            public async Task VotingAction(List<Player> targets)
+            {
+                _votingMessageId = (await Room.PlayersCh.SendTo(Player.Id, strings.you_have_ten_seconds_to_vote, 
+                    Keyboard.VoteKeyboard(targets, Player.Id, false, Callback.VoteToKill))).MessageId;
+                _votingTargetsList = targets;
+            }
+            public async Task RandomVoting()
             {
-                var stopVote = new ManualResetEvent(false);
-                Task.Run(async() =>
+                var players = _votingTargetsList.Where(p => Room.Players.ContainsKey(p.Id)).ToArray();
+                if(players.Length == 0) await Room.PlayersCh.EditTo(Player.Id, _votingMessageId, strings.nothing_to_choose);
+                else
                 {
-                    var message = await Room.PlayersCh.SendTo(Player.Id, strings.you_have_ten_seconds_to_vote, 
-                        Keyboard.VoteKeyboard(targets, Player.Id, false, Callback.VoteToKill));
-                    stopVote.WaitOne();
-                    if (!Room.VoteKillList.ContainsKey(Player.Id) && Room.Players.ContainsKey(Player.Id))
-                    {
-                        var players = targets.Where(p => Room.Players.ContainsKey(p.Id)).ToArray();
-                        if(players.Length == 0) await Room.PlayersCh.EditTo(Player.Id, message.MessageId, strings.nothing_to_choose);
-                        else
-                        {
-                            var randomPlayer = players[Utilities.Rnd.Next(players.Length)];
-                            await Room.PutUpVote(Player.Id, randomPlayer.Id, toKill: true);
-                            await Room.PlayersCh.EditTo(Player.Id, message.MessageId, $"{strings.automatically_vote} ({randomPlayer.TurnOrder}) {randomPlayer.NickName}");
-                        }
-                    }
-                });
-                return stopVote;
+                    var randomPlayer = players[Utilities.Rnd.Next(players.Length)];
+                    await Room.PutUpVote(Player.Id, randomPlayer.Id, toKill: true);
+                    await Room.PlayersCh.EditTo(Player.Id, _votingMessageId, $"{strings.automatically_vote} ({randomPlayer.TurnOrder}) {randomPlayer.NickName}");
+                }
             }
 
             public async Task DefenceAction()
             {
                 await Room.PlayersCh.SendExcept(Player.Id, $"{strings.now_defence} ({Player.TurnOrder}) {Player.NickName}");
                 await Room.PlayersCh.SendTo(Player.ChatId, strings.you_have_eigty_seconds_to_defence);
-                await SpeakAction(90);
+                await SpeakAction(Constants.DEFENCE_INTERVAL);
             }
             public static Role GetNewRoleInstance(Roles roleKey, GameRoom room, Player player)
             {

+ 7 - 1
MafiaTelegramBot/Resources/Constants.cs

@@ -17,7 +17,13 @@ namespace MafiaTelegramBot.Resources
             new LabeledPrice {Label = "100 рублей", Amount = 10000}
         };
 
-        public const int ONE_MINUTE = 60 * 1000;
+        public const int FIRST_NIGHT_INTERVAL = 10 * 1000;
+        public const int PUT_UP_VOTE_INTERVAL = 20 * 1000;
+        public const int VOTE_KILL_INTERVAL = 20 * 1000;
+        public const int NIGHT_ACTION_INTERVAL = 60 * 1000;
+        public const int DEFENCE_INTERVAL = 90 * 1000;
+        public const int SPEAK_INTERVAL = 5*1000; //60 * 1000;
+        public const int DISCUSSION_INTERVAL = 5*1000; //60 * 1000;
 
         public const int ROOM_CODE_LENGTH = 6;
     }