public override void OnRead(RiftClient From)
        {
            Log.Success("Authentification", "Email = " + Email + " SessionTicket = " + SessionTicket);

            // TMP, Client must ALLWAYS provide SessionTicket, not sended because an invalid certificate probably
            Character PlrInfo = null;

            Account Acct = null;

            if (SessionTicket == 0)
               Acct = AccountMgr.Instance.GetAccount(Email.ToUpper());
             else
                Acct = AccountMgr.Instance.GetAccountBySessionTicket(SessionTicket);

             if (Acct == null)
             {
                 Log.Error("Authentification", "Invalid WORLD_AUTH_REQUEST");
                 From.Disconnect();
                 return;
             }

            PlrInfo = CharacterMgr.Instance.GetCharacter((int)Acct.PendingCharacter);

            if (PlrInfo == null)
            {
                Log.Error("Authentification", "Invalid WORLD_AUTH_REQUEST");
                From.Disconnect();
                return;
            }

            From.Char = PlrInfo;

            WorldAuthenticationResponse Rp = new WorldAuthenticationResponse();
            Rp.AddField(0, EPacketFieldType.True, (bool)true);
            From.SendSerialized(Rp);

            WorldCacheUpdated Updated = new WorldCacheUpdated();
            Updated.GUID = PlrInfo.Id;
            From.SendSerialized(Updated);

            /////////////////////////////////////////////////////////////////////
            // Send Inventory
            /////////////////////////////////////////////////////////////////////

            WorldEntityUpdate Inventory = new WorldEntityUpdate();
            Inventory.BuildInventory(From, From.Char);
            From.SendSerialized(Inventory);

            WorldEntityUpdate Item = new WorldEntityUpdate();
            Item.BuildItem(From, From.Char);
            From.SendSerialized(Item);

            //////////////////////////////////////////////////////////////////////

            /**** One of them seem to delete object ***/

            ISerializablePacket Packet1 = new ISerializablePacket();
            Packet1.Opcode = 0x03F6;
            Packet1.AddField(0, EPacketFieldType.Raw4Bytes, new byte[4] { 0x20, 0xB1, 0x59, 0x41 });
            Packet1.AddField(1, EPacketFieldType.ByteArray, new byte[] { 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
                                                                             00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
                                                                             00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 });

            byte[] UnkGuid = new byte[8] { 0xCB, 0x34, 0x3D, 0x94, 0x23, 0x04, 0xCC, 0x01 };
            //Array.Reverse(UnkGuid);

            Packet1.AddField(2, EPacketFieldType.Raw8Bytes, UnkGuid);
            From.SendSerialized(Packet1);

            ISerializablePacket Packet2 = new ISerializablePacket();
            Packet2.Opcode = 0x02E9;
            Packet2.AddField(0, EPacketFieldType.List, new List<long>() { 3605869292 });
            From.SendSerialized(Packet2);

            ISerializablePacket Packet3 = new ISerializablePacket();
            Packet3.Opcode = 0x2D7F;
            From.SendSerialized(Packet3);

            /********************************************/

            WorldZoneInfo ZoneInfo = CacheMgr.Instance.GetZoneInfoCache("Mathosia1");
            From.SendSerialized(ZoneInfo);

            WorldStartingPosition StartPosition = new WorldStartingPosition();
            StartPosition.MapName = "guardian_map";
            From.SendSerialized(StartPosition);

            WorldPositionExtra ExtraPosition = new WorldPositionExtra();
            ExtraPosition.MapName = "guardian_map";

            ISerializablePacket Extra = new ISerializablePacket();
            Extra.Opcode = (long)Opcodes.WorldStartingPositionExtra;
            Extra.AddField(0, EPacketFieldType.Packet, ExtraPosition);
            From.SendSerialized(Extra);
        }
        public override void OnRead(RiftClient From)
        {
            Log.Success("Authentification", "Email = " + Email + " SessionTicket = " + SessionTicket);

            // TMP, Client must ALLWAYS provide SessionTicket, not sended because an invalid certificate probably
            Character PlrInfo = null;

            Account Acct = null;

            if (SessionTicket == 0)
            {
                Acct = AccountMgr.Instance.GetAccount(Email.ToUpper());
            }
            else
            {
                Acct = AccountMgr.Instance.GetAccountBySessionTicket(SessionTicket);
            }

            if (Acct == null)
            {
                Log.Error("Authentification", "Invalid WORLD_AUTH_REQUEST");
                From.Disconnect();
                return;
            }

            PlrInfo = CharacterMgr.Instance.GetCharacter((int)Acct.PendingCharacter);

            if (PlrInfo == null)
            {
                Log.Error("Authentification", "Invalid WORLD_AUTH_REQUEST");
                From.Disconnect();
                return;
            }

            From.Char = PlrInfo;

            WorldAuthenticationResponse Rp = new WorldAuthenticationResponse();

            Rp.AddField(0, EPacketFieldType.True, (bool)true);
            From.SendSerialized(Rp);

            WorldCacheUpdated Updated = new WorldCacheUpdated();

            Updated.GUID = PlrInfo.Id;
            From.SendSerialized(Updated);

            /////////////////////////////////////////////////////////////////////
            // Send Inventory
            /////////////////////////////////////////////////////////////////////

            WorldEntityUpdate Inventory = new WorldEntityUpdate();

            Inventory.BuildInventory(From, From.Char);
            From.SendSerialized(Inventory);

            WorldEntityUpdate Item = new WorldEntityUpdate();

            Item.BuildItem(From, From.Char);
            From.SendSerialized(Item);

            //////////////////////////////////////////////////////////////////////

            /**** One of them seem to delete object ***/

            ISerializablePacket Packet1 = new ISerializablePacket();

            Packet1.Opcode = 0x03F6;
            Packet1.AddField(0, EPacketFieldType.Raw4Bytes, new byte[4] {
                0x20, 0xB1, 0x59, 0x41
            });
            Packet1.AddField(1, EPacketFieldType.ByteArray, new byte[] { 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
                                                                         00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00,
                                                                         00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00, 00 });

            byte[] UnkGuid = new byte[8] {
                0xCB, 0x34, 0x3D, 0x94, 0x23, 0x04, 0xCC, 0x01
            };
            //Array.Reverse(UnkGuid);

            Packet1.AddField(2, EPacketFieldType.Raw8Bytes, UnkGuid);
            From.SendSerialized(Packet1);

            ISerializablePacket Packet2 = new ISerializablePacket();

            Packet2.Opcode = 0x02E9;
            Packet2.AddField(0, EPacketFieldType.List, new List <long>()
            {
                3605869292
            });
            From.SendSerialized(Packet2);

            ISerializablePacket Packet3 = new ISerializablePacket();

            Packet3.Opcode = 0x2D7F;
            From.SendSerialized(Packet3);

            /********************************************/

            WorldZoneInfo ZoneInfo = CacheMgr.Instance.GetZoneInfoCache("Mathosia1");

            From.SendSerialized(ZoneInfo);

            WorldStartingPosition StartPosition = new WorldStartingPosition();

            StartPosition.MapName = "guardian_map";
            From.SendSerialized(StartPosition);

            WorldPositionExtra ExtraPosition = new WorldPositionExtra();

            ExtraPosition.MapName = "guardian_map";

            ISerializablePacket Extra = new ISerializablePacket();

            Extra.Opcode = (long)Opcodes.WorldStartingPositionExtra;
            Extra.AddField(0, EPacketFieldType.Packet, ExtraPosition);
            From.SendSerialized(Extra);
        }