示例#1
0
        public void TryToAddUserToServer(int selectedServerUniqueID, NetConnection netConnection, int pID, int tID, int lockedTID, string username, string nation, bool isVip, byte admas, byte body, byte skin, byte hair, byte number /*, byte[] shoe*/)
        {
            //lets check, that room still exists
            RoomData roomData = roomHandler.FindRoomByUniqueID(selectedServerUniqueID);

            if (roomData == null)
            {
                serverForU.SendInfoMsg(netConnection, 3);
                return;
            }

            //check, that user is allowed to join this challenge
            if (roomData.roomType == RoomType.Challenge)
            {
                if (roomData.teams[0].tID != tID && roomData.teams[1].tID != tID)
                {
                    return;
                }
            }

            if (roomData.officiallyStarted)
            {
                if (lockedTID > 0)
                {
                    if (tID != lockedTID)
                    {
                        serverForU.SendInfoMsg(netConnection, 6);
                        return;
                    }
                }
            }


            //check, that room isnt full
            if (roomData.IsRoomFull(tID))
            {
                serverForU.SendInfoMsg(netConnection, 5);
                return;
            }

            if (roomData.IsUserAlreadyInServer(username))
            {
                Console.WriteLine("user already in server");
                return;
            }

            int uniquePID;

            uniquePID = roomData.AddPlayerToServer(netConnection, tID, pID, nation, username, isVip, admas, body, skin, hair, number /*, shoe.ToArray()*/);

            bool statsWindowVisible = false;

            if (roomData.autoMoving == 2)
            {
                statsWindowVisible = true;
            }

            //send data to client
            NetOutgoingMessage outmsg = serverForU.server.CreateMessage();

            outmsg.Write((byte)10);

            outmsg.Write(statsWindowVisible);
            outmsg.Write(roomData.botsEnabled);
            outmsg.Write(roomData.uniqueID);
            outmsg.Write(uniquePID);
            outmsg.Write((byte)roomData.roomState);
            outmsg.Write((byte)roomData.roomType);

            outmsg.Write(roomData.officiallyStarted);
            outmsg.Write(roomData.autostartTimeout);
            outmsg.Write(roomData.time);
            outmsg.Write(roomData.maxPlayers);
            outmsg.Write(roomData.homeSide);
            outmsg.Write(roomData.period);
            outmsg.Write(roomData.timerEnabled);
            //outmsg.Write(Proc.getSpectatorCount(sID));

            for (int i = 0; i < 2; i++)
            {
                outmsg.Write(roomData.teams[i].score);
                outmsg.Write(roomData.teams[i].name);
                outmsg.Write(roomData.teams[i].shortName);
                outmsg.Write(roomData.teams[i].shirtStyle);
            }

            //kits colors
            for (int i = 0; i < 2; i++)
            {
                for (int j = 0; j < 4; j++)
                {
                    for (int k = 0; k < 3; k++)
                    {
                        outmsg.Write(roomData.teams[i].shirtColors[j, k]);
                    }
                }
            }

            serverForU.server.SendMessage(outmsg, netConnection, NetDeliveryMethod.ReliableOrdered, 0);

            roomData.BroadcastJoinerData(username, null, 1);
        }