Esempio n. 1
0
        protected override void Process(Entities.User u)
        {
            if (u.Authorized)
            {
                if (u.Room == null)
                {
                    Objects.Channel channel = Managers.ChannelManager.Instance.Get(u.Channel);

                    uint   roomId       = GetuInt(1);
                    string roomPassword = GetString(2);

                    if (channel.Rooms.ContainsKey(roomId))
                    {
                        Entities.Room r = null;
                        if (channel.Rooms.TryGetValue(roomId, out r))
                        {
                            if (!r.AddSpectator(u))
                            {
                                u.Send(new Packets.RoomSpectate(Packets.RoomSpectate.ErrorCodes.MaxSpectators));
                            }
                        }
                    }
                }
            }
            else
            {
                u.Disconnect();
            }
        }
Esempio n. 2
0
        public static void InitChannel(Objects.Channel Channel)
        {
            string ChannelDestination = Config.Folders.ChannelFolder + Config.Folders.FolderSplit + Channel.Name;

            if (!Directory.Exists(ChannelDestination))
            {
                Directory.CreateDirectory(ChannelDestination);
            }
        }
Esempio n. 3
0
        public static void InitChannel(Objects.Channel Channel)
        {
            string ChannelFolder = Config.Folders.ChannelFolder;
            string ChannelLUA    = ChannelFolder + Config.Folders.FolderSplit + Channel.Name + Config.Folders.FolderSplit + Config.LUA.DefaultFile;

            if (!File.Exists(ChannelLUA))
            {
                File.Copy(Config.LUA.ChannelTemplate, ChannelLUA);
            }
        }
Esempio n. 4
0
        public static string GetCommandPrefix(Objects.Channel channel)
        {
            string       ConfigPath = Config.Folders.ChannelFolder + Config.Folders.FolderSplit + channel.Name + Config.Folders.FolderSplit + "config.cfg";
            ConfigParser ConfigFile = new ConfigParser(ConfigPath);
            string       Prefix     = ConfigFile.GetValue(ConfigCategory, "Command_Prefix");

            if (String.IsNullOrEmpty(Prefix))
            {
                ConfigFile.SetValue(ConfigCategory, "Command_Prefix", Config.LUA.CommandPrefix);
                Prefix = Config.LUA.CommandPrefix; // Default
            }

            ConfigFile.Save(ConfigPath);

            return(Prefix);
        }
Esempio n. 5
0
        protected override void Process(Entities.User u)
        {
            if (u.Authorized)
            {
                if (u.Room != null)
                {
                    u.Disconnect();
                }

                bool isRoomValid = true;
                // READING OUT THE ROOM DATA //
                string name           = GetString(0);
                bool   hasPassword    = (GetByte(1) > 0);
                string password       = GetString(2);
                byte   playerCount    = GetByte(3);
                byte   mapId          = GetByte(4);        // Ignore this from the client, we will use it server side.
                byte   unknown1       = GetByte(5);        // Unknown?
                byte   unknown2       = GetByte(6);        // Unknown?
                byte   type           = GetByte(7);        // type?
                byte   levelLimit     = GetByte(8);        // level limit
                bool   friendlyFire   = (GetByte(9) > 0);  // premium only?
                bool   enableVoteKick = (GetByte(10) > 0); // vote kick

                // VALIDATE ROOM NAME //
                if (name.Length == 0 || name.Length > 25)   // Name Length
                {
                    if (name.Length != 27)
                    {
                        isRoomValid = false;
                    }
                }

                // VALIDATE ROOM PASSWORD //
                if (hasPassword && (password.Length == 0 || password == "NULL"))   // Password Length
                {
                    isRoomValid = false;
                }

                // VALIDATE MAXIMUM PLAYERS //
                byte highestIndex = 0;
                switch (u.Channel)
                {
                case Enums.ChannelType.CQC: {
                    highestIndex = 1;
                    break;
                }

                case Enums.ChannelType.Urban_Ops: {
                    highestIndex = 3;
                    break;
                }

                case Enums.ChannelType.Battle_Group: {
                    highestIndex = 4;
                    break;
                }

                default: {
                    highestIndex = 1;
                    break;
                }
                }

                if (playerCount > highestIndex)
                {
                    isRoomValid = false;
                }

                if (levelLimit < 0 || levelLimit > 5)
                {
                    isRoomValid = false;
                }

                if (!SuitableLevel(levelLimit, Core.LevelCalculator.GetLevelforExp(u.XP)))
                {
                    isRoomValid = false;
                }

                // VALIDATE PREMIUM SETTING //
                //        if (u.Premium == Enums.Premium.Free2Play && premiumOnly) {
                //           isRoomValid = false;
                //     }
                //DARKRAPTOR: PREMIUM ONLY REPLACED FOR FRIENDLYFIRE

                if (!u.Inventory.Itemlist.Contains("CC02") && !enableVoteKick)
                {
                    isRoomValid = false;
                }


                if (isRoomValid)
                {
                    // FETCH OPEN ID //
                    Objects.Channel channel    = Managers.ChannelManager.Instance.Get(u.Channel);
                    int             openRoomId = channel.GetOpenRoomID();

                    if (openRoomId >= 0)
                    {
                        Entities.Room room = new Entities.Room(u, (uint)openRoomId, name, hasPassword, password, playerCount, type, levelLimit, friendlyFire, enableVoteKick, false);
                        if (room != null)
                        {
                            // ROOM CREATED SUCCESSFULLY //
                            Managers.ChannelManager.Instance.Get(room.Channel).Add(room);

                            u.Send(new Packets.RoomCreation(room));

                            // SEND THE ROOM UPDATE TO THE LOBBY //
                            byte roomPage   = (byte)Math.Floor((decimal)(room.ID / 8));
                            var  targetList = Managers.ChannelManager.Instance.Get(room.Channel).Users.Select(n => n.Value).Where(n => n.RoomListPage == roomPage && n.Room == null);
                            if (targetList.Count() > 0)
                            {
                                byte[] outBuffer = new Packets.RoomUpdate(room, false).BuildEncrypted();
                                foreach (Entities.User usr in targetList)
                                {
                                    usr.Send(outBuffer);
                                }
                            }
                            ServerLogger.Instance.Append(ServerLogger.AlertLevel.Information, String.Concat("Player ", u.Displayname, " created a room"));
                        }
                        else
                        {
                            channel.ForceFreeSlot(openRoomId); // Force the room slot open again.
                            u.Send(new Packets.RoomCreation(Enums.RoomCreationErrors.GenericError));
                        }
                    }
                    else
                    {
                        u.Send(new Packets.RoomCreation(Enums.RoomCreationErrors.MaxiumRoomsExceeded));
                    }
                }
                else
                {
                    u.Send(new Packets.RoomCreation(Enums.RoomCreationErrors.GenericError));
                }
            }
            else
            {
                u.Disconnect();
            }
        }
Esempio n. 6
0
        public override void Handle(User sender, InPacket packetReader)
        {
            if (sender.Authenticated)
            {
                if (sender.Room != null)
                {
                    sender.Disconnect();
                }

                bool isRoomValid = true;
                // READING OUT THE ROOM DATA //
                string name           = packetReader.ReadString(0);
                bool   hasPassword    = packetReader.ReadBool(1);
                string password       = packetReader.ReadString(2);
                byte   playerCount    = packetReader.ReadByte(3);
                byte   mapId          = packetReader.ReadByte(4); // Ignore this from the client, we will use it server side.
                byte   unknown1       = packetReader.ReadByte(5); // Unknown?
                byte   unknown2       = packetReader.ReadByte(6); // Unknown?
                byte   type           = 0;
                byte   levelLimit     = 0;
                bool   premiumOnly    = false;
                bool   enableVoteKick = true;

                // VALIDATE ROOM NAME //
                if (name.Length == 0 || name.Length > 25)
                { // Name Length
                    if (name.Length != 27)
                    {
                        isRoomValid = false;
                    }
                }

                // VALIDATE ROOM PASSWORD //
                if (hasPassword && (password.Length == 0 || password == "NULL"))
                { // Password Length
                    isRoomValid = false;
                }

                // VALIDATE MAXIMUM PLAYERS //
                byte highestIndex = 0;
                switch (sender.Channel)
                {
                case Enums.ChannelType.CQC:
                {
                    highestIndex = 1;
                    break;
                }

                case Enums.ChannelType.Urban_Ops:
                {
                    highestIndex = 3;
                    break;
                }

                case Enums.ChannelType.Battle_Group:
                {
                    highestIndex = 4;
                    break;
                }

                default:
                {
                    highestIndex = 1;
                    break;
                }
                }

                if (playerCount > highestIndex)
                {
                    isRoomValid = false;
                }

                // TODO: VALIDATE THE LEVEL TYPE.

                // VALIDATE PREMIUM SETTING //
                if (sender.Premium == Enums.Premium.Free2Play && premiumOnly)
                {
                    isRoomValid = false;
                }

                // TODO: VALIDATE SUPERMASTER & ENABLE VOTEKICK //

                if (isRoomValid)
                {
                    // FETCH OPEN ID //
                    Objects.Channel channel    = Managers.ChannelManager.Instance.Get(sender.Channel);
                    int             openRoomId = channel.GetOpenRoomID();

                    if (openRoomId >= 0)
                    {
                        Entities.Room room = new Entities.Room(sender, (uint)openRoomId, name, hasPassword, password, playerCount, type, levelLimit, premiumOnly, enableVoteKick);
                        if (room != null)
                        {
                            // ROOM CREATED SUCCESSFULLY //
                            Managers.ChannelManager.Instance.Get(room.Channel).Add(room);

                            sender.Send(new Packets.RoomCreation(room));

                            // SEND THE ROOM UPDATE TO THE LOBBY //
                            byte roomPage   = (byte)Math.Floor((decimal)(room.ID / 8));
                            var  targetList = Managers.ChannelManager.Instance.Get(room.Channel).Users.Select(n => n.Value).Where(n => n.RoomListPage == roomPage && n.Room == null);
                            if (targetList.Count() > 0)
                            {
                                byte[] outBuffer = new Packets.RoomUpdate(room, false).BuildEncrypted();
                                foreach (Entities.User usr in targetList)
                                {
                                    usr.Send(outBuffer);
                                }
                            }
                        }
                        else
                        {
                            channel.ForceFreeSlot(openRoomId); // Force the room slot open again.
                            sender.Send(new Packets.RoomCreation(Enums.RoomCreationErrors.GenericError));
                        }
                    }
                    else
                    {
                        sender.Send(new Packets.RoomCreation(Enums.RoomCreationErrors.MaxiumRoomsExceeded));
                    }
                }
                else
                {
                    sender.Send(new Packets.RoomCreation(Enums.RoomCreationErrors.GenericError));
                }
            }
            else
            {
                sender.Disconnect();
            }
        }
Esempio n. 7
0
        protected override void Process(Entities.User u)
        {
            if (u.Authorized)
            {
                if (u.Room == null)
                {
                    Objects.Channel channel = Managers.ChannelManager.Instance.Get(u.Channel);

                    uint   roomId       = GetuInt(0);
                    string roomPassword = GetString(1);

                    if (channel.Rooms.ContainsKey(roomId))
                    {
                        Entities.Room r = null;
                        if (channel.Rooms.TryGetValue(roomId, out r))
                        {
                            bool validPassword = true;
                            bool validLevel    = true;

                            if (r.HasPassword && r.Password != roomPassword)
                            {
                                validPassword = false;
                            }

                            if (!SuitableLevel(r.LevelLimit, Core.LevelCalculator.GetLevelforExp(u.XP)))
                            {
                                validLevel = false;
                            }

                            if (validPassword)
                            {
                                if (validLevel)
                                {
                                    if (!r.Add(u))
                                    {
                                        if (r.UserLimit)
                                        {
                                            u.Send(new Packets.RoomJoin(Packets.RoomJoin.ErrorCodes.UsersExceeded));
                                        }
                                        else
                                        {
                                            u.Send(new Packets.RoomJoin(Packets.RoomJoin.ErrorCodes.RoomIsFull));
                                        }
                                    }
                                }
                                else
                                {
                                    u.Send(new Packets.RoomJoin(Packets.RoomJoin.ErrorCodes.BadLevel));
                                }
                            }
                            else
                            {
                                u.Send(new Packets.RoomJoin(Packets.RoomJoin.ErrorCodes.InvalidPassword));
                            }
                        }
                        else
                        {
                            u.Send(new Packets.RoomJoin(Packets.RoomJoin.ErrorCodes.GenericError));
                        }
                    }
                    else
                    {
                        u.Send(new Packets.RoomJoin(Packets.RoomJoin.ErrorCodes.GenericError));
                    }
                }
            }
            else
            {
                u.Disconnect();
            }
        }
Esempio n. 8
0
 public static void SendMessage(Objects.Channel Channel, string Message)
 {
     IRC.client.SendRawMessage("PRIVMSG #" + Channel.Name.ToLower() + " :" + Message);
     Log.Logger.OutputToConsole("[#{0}] {1}: {2}", Channel.Name.ToLower(), Config.Credentials.Username, Message);
 }
Esempio n. 9
0
        public override void Handle(User sender, InPacket packetReader)
        {
            if (sender.Authenticated)
            {
                if (sender.Room == null)
                {
                    Objects.Channel channel = Managers.ChannelManager.Instance.Get(sender.Channel);

                    ushort roomId       = packetReader.ReadUshort();
                    string roomPassword = packetReader.ReadString();

                    if (channel.Rooms.ContainsKey(roomId))
                    {
                        Room r = null;
                        if (channel.Rooms.TryGetValue(roomId, out r))
                        {
                            bool validPassword = true;
                            bool validPremium  = true;

                            if (r.HasPassword && r.Password != roomPassword)
                            {
                                validPassword = false;
                            }

                            if (r.PremiumOnly && sender.Premium == Enums.Premium.Free2Play)
                            {
                                validPremium = false;
                            }

                            // TODO: Validate the level limit.

                            if (validPassword)
                            {
                                if (validPremium)
                                {
                                    if (!r.Add(sender))
                                    {
                                        sender.Send(new Packets.RoomJoin(Packets.RoomJoin.ErrorCodes.GenericError));
                                    }
                                }
                                else
                                {
                                    sender.Send(new Packets.RoomJoin(Packets.RoomJoin.ErrorCodes.OnlyPremium));
                                }
                            }
                            else
                            {
                                sender.Send(new Packets.RoomJoin(Packets.RoomJoin.ErrorCodes.InvalidPassword));
                            }
                        }
                        else
                        {
                            sender.Send(new Packets.RoomJoin(Packets.RoomJoin.ErrorCodes.GenericError));
                        }
                    }
                    else
                    {
                        sender.Send(new Packets.RoomJoin(Packets.RoomJoin.ErrorCodes.GenericError));
                    }
                }
            }
            else
            {
                sender.Disconnect();
            }
        }