protected virtual async Task OnDedicatedExited(SpringBattleContext springBattleContext)
        {
            StopVote();
            IsInGame     = false;
            RunningSince = null;

            var debriefingMessage = BattleResultHandler.SubmitSpringBattleResult(springBattleContext, server);
            await server.Broadcast(Users.Keys, debriefingMessage);

            await server.Broadcast(server.ConnectedUsers.Keys, new BattleUpdate()
            {
                Header = GetHeader()
            });

            foreach (var s in toNotify)
            {
                await
                server.GhostSay(new Say()
                {
                    User       = GlobalConst.NightwatchName,
                    Text       = $"** {FounderName} 's {Title} just ended, join me! **",
                    Target     = s,
                    IsEmote    = true,
                    Place      = SayPlace.User,
                    Ring       = true,
                    AllowRelay = false
                });
            }

            toNotify.Clear();
        }
Example #2
0
        protected override async Task OnDedicatedExited(SpringBattleContext springBattleContext)
        {
            try
            {
                StopVote();
                RunningSince = null;
                IsInGame     = false;
                isZombie     = true;

                var playerNames = spring.Context.ActualPlayers.Where(x => x.Name != null).Select(x => x.Name).ToList();

                bool result = BattleResultHandler.SubmitSpringBattleResult(springBattleContext, server, debriefingMessage =>
                {
                    debriefingMessage.ChatChannel = "debriefing_" + debriefingMessage.ServerBattleID;
                    // join people to channel
                    Task.WhenAll(
                        playerNames.Select(x => server.ConnectedUsers.Get(x))
                        .Where(x => x != null)
                        .Select(x => x.Process(new JoinChannel()
                    {
                        ChannelName = debriefingMessage.ChatChannel
                    })));
                    server.Broadcast(playerNames, debriefingMessage);
                });

                await server.RemoveBattle(this);
            }
            catch (Exception ex)
            {
                Trace.TraceError("Error processing battle exited: {0}", ex);
            }
        }
 public string SubmitSpringBattleResult(BattleContext context,
                                        string password,
                                        BattleResult result,
                                        List <BattlePlayerResult> players,
                                        List <string> extraData)
 {
     return(BattleResultHandler.SubmitSpringBattleResult(context, password, result, players, extraData));
 }
        protected virtual async Task OnDedicatedExited(SpringBattleContext springBattleContext)
        {
            StopVote();
            IsInGame     = false;
            RunningSince = null;
            EndedSince   = DateTime.UtcNow;

            var debriefingMessage = BattleResultHandler.SubmitSpringBattleResult(springBattleContext, server);

            Debriefings.Add(debriefingMessage);

            await server.Broadcast(Users.Keys, debriefingMessage);

            await server.Broadcast(server.ConnectedUsers.Keys, new BattleUpdate()
            {
                Header = GetHeader()
            });

            foreach (var s in toNotify)
            {
                await
                server.GhostSay(new Say()
                {
                    User       = GlobalConst.NightwatchName,
                    Text       = $"** {FounderName} 's {Title} just ended, join me! **",
                    Target     = s,
                    IsEmote    = true,
                    Place      = SayPlace.User,
                    Ring       = true,
                    AllowRelay = false
                });
            }

            toNotify.Clear();

            var playingEligibleUsers = server.MatchMaker.GetEligibleQuickJoinPlayers(Users.Values.Where(x => !x.LobbyUser.IsAway && !x.IsSpectator).Select(x => server.ConnectedUsers[x.Name]).ToList());

            if (playingEligibleUsers.Count() >= InviteMMPlayers)   //Make sure there are enough eligible users for a battle to be likely to happen

            //put all users into MM queue to suggest battles
            {
                var teamsQueues    = server.MatchMaker.PossibleQueues.Where(x => x.Mode == AutohostMode.Teams).ToList();
                var availableUsers = Users.Values.Where(x => !x.LobbyUser.IsAway).Select(x => server.ConnectedUsers[x.Name]).ToList();
                await server.MatchMaker.MassJoin(availableUsers, teamsQueues);
            }


            if (IsAutohost)
            {
                await RunCommandDirectly <CmdMap>(null);

                discussionTimer.Interval = (DiscussionTime + 1) * 1000;
                discussionTimer.Start();
            }
            await CheckCloseBattle();
        }
Example #5
0
 private void setBattleResultText(String text, Color color)
 {
     if (this.battleResultBox.InvokeRequired)
     {
         BattleResultHandler brHandler = new BattleResultHandler(setBattleResultText);
         this.Invoke(brHandler, text, color);
     }
     else
     {
         this.battleResultBox.Text      = text;
         this.battleResultBox.ForeColor = color;
     }
 }
        protected virtual async Task OnDedicatedExited(SpringBattleContext springBattleContext)
        {
            StopVote();
            IsInGame        = false;
            RunningSince    = null;
            BlockPollsUntil = DateTime.UtcNow.AddSeconds(DiscussionSeconds);

            bool result = BattleResultHandler.SubmitSpringBattleResult(springBattleContext, server, (debriefing) =>
            {
                Debriefings.Add(debriefing);
                server.Broadcast(springBattleContext.ActualPlayers.Select(x => x.Name), debriefing);
                Trace.TraceInformation("Battle ended: Sent out debriefings for B" + debriefing.ServerBattleID);
            });

            await server.Broadcast(server.ConnectedUsers.Keys, new BattleUpdate()
            {
                Header = GetHeader()
            });

            foreach (var s in toNotify)
            {
                await
                server.GhostSay(new Say()
                {
                    User       = GlobalConst.NightwatchName,
                    Text       = $"** {FounderName} 's {Title} just ended, join me! **",
                    Target     = s,
                    IsEmote    = true,
                    Place      = SayPlace.User,
                    Ring       = true,
                    AllowRelay = false
                });
            }

            toNotify.Clear();

            var playingEligibleUsers = server.MatchMaker.GetEligibleQuickJoinPlayers(Users.Values.Where(x => !x.LobbyUser.IsAway && !x.IsSpectator && x.Name != null).Select(x => server.ConnectedUsers[x.Name]).ToList());

            if (playingEligibleUsers.Count() >= InviteMMPlayers)
            { //Make sure there are enough eligible users for a battle to be likely to happen
                //put all users into MM queue to suggest battles
                var teamsQueues    = server.MatchMaker.PossibleQueues.Where(x => x.Mode == AutohostMode.Teams).ToList();
                var availableUsers = Users.Values.Where(x => !x.LobbyUser.IsAway && x.Name != null).Select(x => server.ConnectedUsers[x.Name]).ToList();
                await server.MatchMaker.MassJoin(availableUsers, teamsQueues);

                DiscussionSeconds = MatchMaker.TimerSeconds + 2;
            }
            else
            {
                DiscussionSeconds = 5;
            }
            BlockPollsUntil = DateTime.UtcNow.AddSeconds(DiscussionSeconds);


            if (IsAutohost || (!Users.ContainsKey(FounderName) || Users[FounderName].LobbyUser?.IsAway == true) && Mode != AutohostMode.None && Mode != AutohostMode.Planetwars && !IsPassworded)
            {
                if (!result)
                {
                    //Game was aborted/exited/invalid, allow manual commands
                    BlockPollsUntil = DateTime.UtcNow;
                }
                else
                {
                    //Initiate discussion time, then map vote, then start vote
                    discussionTimer.Interval = (DiscussionSeconds - 1) * 1000;
                    discussionTimer.Start();
                }
            }
            await CheckCloseBattle();
        }