Exemple #1
0
        private static void HandleTeamUpdate(NetworkMessage msg)
        {
            MsgTeamUpdate upd = msg as MsgTeamUpdate;

            WriteLine("Teams Were Updated ");
            foreach (var t in upd.TeamUpdates)
            {
                WriteLine("\t" + ((TeamColors)t.TeamID).ToString() + String.Format(" = {0} {1}/{2}", t.Size, t.Wins, t.Losses));
            }
        }
Exemple #2
0
        private void HandleTeamUpdate(NetworkMessage msg)
        {
            MsgTeamUpdate upd = msg as MsgTeamUpdate;

            foreach (var t in upd.TeamUpdates)
            {
                if (!Teams.ContainsKey(t.TeamID))
                {
                    Teams.Add(t.TeamID, new TeamInfo(t.TeamID));
                }

                TeamInfo team = Teams[t.TeamID];
                team.PlayerCount = t.Size;
                team.Wins        = t.Wins;
                team.Losses      = t.Losses;
            }
        }
Exemple #3
0
        public static void Join(YiObj leader, YiObj joining)
        {
            if (!Teams.ContainsKey(leader.UniqueId))
            {
                return;
            }

            (leader as Player)?.Send(MsgTeamUpdate.JoinLeave(leader, MsgTeamMemberAction.AddMember));
            Teams[leader.UniqueId].Members.AddOrUpdate(joining.UniqueId, joining);
            Teams.AddOrUpdate(joining.UniqueId, Teams[leader.UniqueId]);

            foreach (var member in Teams[leader.UniqueId].Members.Values.Where(member => member.UniqueId != joining.UniqueId))
            {
                (member as Player)?.Send(MsgTeamUpdate.JoinLeave(joining, MsgTeamMemberAction.AddMember));
                (joining as Player)?.Send(MsgTeamUpdate.JoinLeave(member, MsgTeamMemberAction.AddMember));
            }

            (joining as Player)?.Send(MsgTeamUpdate.JoinLeave(joining, MsgTeamMemberAction.AddMember));
        }
Exemple #4
0
        protected void SendTeamUpdate(TeamInfo team)
        {
            if (team == null)
            {
                return;
            }

            MsgTeamUpdate tUpd = new MsgTeamUpdate();

            MsgTeamUpdate.TeamUpdate u = new MsgTeamUpdate.TeamUpdate();

            u.TeamID = team.Team;
            u.Size   = team.Size();
            u.Wins   = team.Wins;
            u.Losses = team.Losses;
            tUpd.TeamUpdates.Add(u);

            SendToAll(tUpd, false);
        }
Exemple #5
0
        public virtual bool AddPlayer(ServerPlayer player)
        {
            player.Exited       += Player_Exited;
            player.Disconnected += Player_Exited;

            ServerHost.PreAddPlayer(player);

            if (player.ActualTeam == TeamColors.NoTeam)
            {
                return(false);
            }

            player.Info = new PlayerInfo();

            lock (PlayerList)
                PlayerList.Add(player);

            Logger.Log2("Player " + player.Callsign + " assigned to team " + player.ActualTeam.ToString());

            lock (Teams)
            {
                if (!Teams.ContainsKey(player.ActualTeam))
                {
                    TeamInfo team = new TeamInfo();
                    team.Team           = player.ActualTeam;
                    team.PlayerAdded   += Team_PlayerAdded;
                    team.PlayerRemoved += Team_PlayerRemoved;
                    Teams.Add(player.ActualTeam, team);
                }

                Teams[player.ActualTeam].Add(player);
                if (Teams[player.ActualTeam].Members.Count == 1)
                {
                    TeamInited?.Invoke(this, Teams[player.ActualTeam]);
                }
            }

            Flags.SendInitialFlagUpdate(player);

            // tell them about everyone except them
            ServerPlayer[] locals = null;

            lock (PlayerList)
                locals = PlayerList.ToArray();

            MsgPlayerInfo info = new MsgPlayerInfo();

            foreach (ServerPlayer peer in locals)
            {
                if (peer == player)
                {
                    continue;
                }

                player.SendMessage(true, BuildPlayerAdd(peer));
                info.PlayerUpdates.Add(GetPlayerInfo(peer));
            }
            player.SendMessage(true, info);

            TeamInfo[] teams = null;
            lock (Teams)
                teams = Teams.Values.ToArray();

            MsgTeamUpdate tUpd = new MsgTeamUpdate();

            foreach (var team in teams)
            {
                if (team.Team == player.ActualTeam) // the event already sent this
                {
                    continue;
                }

                MsgTeamUpdate.TeamUpdate u = new MsgTeamUpdate.TeamUpdate();
                u.TeamID = team.Team;
                u.Size   = team.Size();
                u.Wins   = team.Wins;
                u.Losses = team.Losses;
                tUpd.TeamUpdates.Add(u);
            }
            player.SendMessage(tUpd);

            // tell everyone they joined
            SendToAll(BuildPlayerAdd(player), false);

            // send info bits to everyone
            info = new MsgPlayerInfo();
            info.PlayerUpdates.Add(GetPlayerInfo(player));
            SendToAll(info, false);

            ServerHost.PostAddPlayer(player);

            if (player.ActualTeam == TeamColors.ObserverTeam)
            {
                Chat.SendChatToUser(null, player, Resources.ObserverModeNotificatioMessage, false);
            }

            return(true);
        }