Example #1
0
        /// <summary>
        /// Creates a new packet based on the typeID and the received content
        /// inside the buffer. The user has to create an own implementation
        /// of this interface.
        /// </summary>
        public PacketBase createPacket(NetworkClient client, ushort typeID, byte[] buffer, int offset, int size)
        {               //Ready our packet base
            PacketBase packet = null;

            size--;

            //Was it a system packet?
            if (buffer[offset++] == 0)
            {
                //Yes, find the appropriate type
                return(createSystemPacket(typeID, buffer, offset, size));
            }

            //So what was the typeid?
            switch (typeID)
            {
            case CS_Auth <T> .TypeID:
                packet = new CS_Auth <T>(typeID, buffer, offset, size);
                break;

            case CS_PlayerLogin <T> .TypeID:
                packet = new CS_PlayerLogin <T>(typeID, buffer, offset, size);
                break;

            case CS_PlayerUpdate <T> .TypeID:
                packet = new CS_PlayerUpdate <T>(typeID, buffer, offset, size);
                break;

            case CS_PlayerLeave <T> .TypeID:
                packet = new CS_PlayerLeave <T>(typeID, buffer, offset, size);
                break;

            case CS_PlayerBanner <T> .TypeID:
                packet = new CS_PlayerBanner <T>(typeID, buffer, offset, size);
                break;

            case CS_PlayerStatsRequest <T> .TypeID:
                packet = new CS_PlayerStatsRequest <T>(typeID, buffer, offset, size);
                break;

            case CS_Whisper <T> .TypeID:
                packet = new CS_Whisper <T>(typeID, buffer, offset, size);
                break;

            case CS_JoinChat <T> .TypeID:
                packet = new CS_JoinChat <T>(typeID, buffer, offset, size);
                break;

            case CS_LeaveChat <T> .TypeID:
                packet = new CS_LeaveChat <T>(typeID, buffer, offset, size);
                break;

            case CS_PrivateChat <T> .TypeID:
                packet = new CS_PrivateChat <T>(typeID, buffer, offset, size);
                break;

            case CS_ModCommand <T> .TypeID:
                packet = new CS_ModCommand <T>(typeID, buffer, offset, size);
                break;

            case CS_Squads <T> .TypeID:
                packet = new CS_Squads <T>(typeID, buffer, offset, size);
                break;

            case CS_ChatQuery <T> .TypeID:
                packet = new CS_ChatQuery <T>(typeID, buffer, offset, size);
                break;

            case Disconnect <T> .TypeID:
                packet = new Disconnect <T>(typeID, buffer, offset, size);
                break;

            case CS_Ban <T> .TypeID:
                packet = new CS_Ban <T>(typeID, buffer, offset, size);
                break;

            case CS_SquadMatch <T> .TypeID:
                packet = new CS_SquadMatch <T>(typeID, buffer, offset, size);
                break;

            case CS_ModQuery <T> .TypeID:
                packet = new CS_ModQuery <T>(typeID, buffer, offset, size);
                break;

            case CS_ChatCommand <T> .TypeID:
                packet = new CS_ChatCommand <T>(typeID, buffer, offset, size);
                break;

            case CS_StatsUpdate <T> .TypeID:
                packet = new CS_StatsUpdate <T>(typeID, buffer, offset, size);
                break;

            case CS_ArenaUpdate <T> .TypeID:
                packet = new CS_ArenaUpdate <T>(typeID, buffer, offset, size);
                break;

            default:
                //An undefined packet.
                packet = new PacketDummy(typeID, buffer, offset, size);
                break;
            }

            return(packet);
        }
Example #2
0
        /// <summary>
        /// Handles a query packet
        /// </summary>
        static public void Handle_CS_Ban(CS_Ban <Zone> pkt, Zone zone)
        {
            using (InfantryDataContext db = zone._server.getContext())
            {
                Data.DB.alias dbplayer = db.alias.First(p => string.Compare(p.name, pkt.alias, true) == 0);

                //Lets check to see if they are banned already
                foreach (Data.DB.ban b in db.bans.Where(b => b.account == dbplayer.account1.id))
                {
                    //Same type?
                    if (b.type != (short)pkt.banType)
                    {
                        continue;
                    }

                    //Zone ban?
                    if ((short)pkt.banType == (int)Logic_Bans.Ban.BanType.ZoneBan)
                    {
                        if (b.zone == null)
                        {
                            continue;
                        }
                        if (b.zone != zone._zone.id)
                        {
                            continue;
                        }
                    }

                    if (pkt.time != 0)
                    {
                        //Dont update old bans
                        if (DateTime.Now > b.expires)
                        {
                            continue;
                        }
                        b.expires = b.expires.AddMinutes(pkt.time);
                    }
                    //Are we unbanning them?
                    else if (pkt.time == 0)
                    {
                        b.expires = DateTime.Now;
                    }

                    b.reason = b.reason.ToString();

                    db.SubmitChanges();
                    return;
                }

                Data.DB.ban newBan = new Data.DB.ban();
                switch (pkt.banType)
                {
                case CS_Ban <Zone> .BanType.zone:
                {
                    //Check for updating the ban
                    newBan.type = (short)Logic_Bans.Ban.BanType.ZoneBan;
                    if (pkt.time == 0)
                    {
                        newBan.expires = DateTime.Now;
                    }
                    else
                    {
                        newBan.expires = DateTime.Now.AddMinutes(pkt.time);
                    }
                    newBan.created   = DateTime.Now;
                    newBan.uid1      = pkt.UID1;
                    newBan.uid2      = pkt.UID2;
                    newBan.uid3      = pkt.UID3;
                    newBan.account   = dbplayer.account;
                    newBan.IPAddress = dbplayer.IPAddress;
                    newBan.zone      = zone._zone.id;
                    newBan.reason    = pkt.reason;
                    newBan.name      = dbplayer.name;
                }
                break;

                case CS_Ban <Zone> .BanType.account:
                {
                    newBan.type = (short)Logic_Bans.Ban.BanType.AccountBan;
                    if (pkt.time == 0)
                    {
                        newBan.expires = DateTime.Now;
                    }
                    else
                    {
                        newBan.expires = DateTime.Now.AddMinutes(pkt.time);
                    }
                    newBan.created   = DateTime.Now;
                    newBan.uid1      = pkt.UID1;
                    newBan.uid2      = pkt.UID2;
                    newBan.uid3      = pkt.UID3;
                    newBan.account   = dbplayer.account;
                    newBan.IPAddress = dbplayer.IPAddress;
                    newBan.reason    = pkt.reason;
                    newBan.name      = dbplayer.name;
                }
                break;

                case CS_Ban <Zone> .BanType.ip:
                {
                    newBan.type = (short)Logic_Bans.Ban.BanType.IPBan;
                    if (pkt.time == 0)
                    {
                        newBan.expires = DateTime.Now;
                    }
                    else
                    {
                        newBan.expires = DateTime.Now.AddMinutes(pkt.time);
                    }
                    newBan.created   = DateTime.Now;
                    newBan.uid1      = pkt.UID1;
                    newBan.uid2      = pkt.UID2;
                    newBan.uid3      = pkt.UID3;
                    newBan.account   = dbplayer.account;
                    newBan.IPAddress = dbplayer.IPAddress;
                    newBan.reason    = pkt.reason;
                    newBan.name      = dbplayer.name;
                }
                break;

                case CS_Ban <Zone> .BanType.global:
                {
                    newBan.type = (short)Logic_Bans.Ban.BanType.GlobalBan;
                    if (pkt.time == 0)
                    {
                        newBan.expires = DateTime.Now;
                    }
                    else
                    {
                        newBan.expires = DateTime.Now.AddMinutes(pkt.time);
                    }
                    newBan.created   = DateTime.Now;
                    newBan.uid1      = pkt.UID1;
                    newBan.uid2      = pkt.UID2;
                    newBan.uid3      = pkt.UID3;
                    newBan.account   = dbplayer.account;
                    newBan.IPAddress = dbplayer.IPAddress;
                    newBan.reason    = pkt.reason;
                    newBan.name      = dbplayer.name;
                }
                break;
                }
                db.bans.InsertOnSubmit(newBan);
                db.SubmitChanges();
            }
        }