public override void OnRead(RiftClient From)
        {
            try
            {
                XmlSerializer xmls = new XmlSerializer(typeof(ClientAuthCertificate));
                ClientAuthCertificate Cert = xmls.Deserialize(new MemoryStream(Encoding.UTF8.GetBytes(Certificate))) as ClientAuthCertificate;

                if (Program.Config.UseCertificate)
                    From.Acct = Program.AcctMgr.GetAccount(Cert.Sessionkey);
                else
                    From.Acct = Program.AcctMgr.GetAccount(Cert.Username, Cert.Hash);

            }
            catch
            {
                From.Disconnect();
            }

            if (From.Acct == null)
            {
                Log.Error("Authentication", "Failed !");
                From.Disconnect();
            }
            else
            {
                HandshakeAuthenticationResponse Rp = new HandshakeAuthenticationResponse();
                Rp.SessionTicket = (long)BitConverter.ToUInt64(Guid.NewGuid().ToByteArray(), 0);

                From.Acct.SessionTicket = Rp.SessionTicket;
                From.Acct.Dirty = true;
                AccountMgr.AccountDB.SaveObject(From.Acct);

                From.SendSerialized(Rp);
            }
        }
Exemple #2
0
        public override void OnRead(RiftClient From)
        {
            Log.Success("SelectRequest", "Enter on World : " + From.GetIp + ",GUID=" + GUID);

            Character Char = CharacterMgr.Instance.GetCharacter((int)GUID);

            if (Char.AccountId != From.Acct.Id)
            {
                From.Disconnect();
                return;
            }

            From.Acct.PendingCharacter = GUID;
            From.Acct.Dirty            = true;
            AccountMgr.AccountDB.SaveObject(From.Acct);

            LobbyCharacterSelectResponse Rp = new LobbyCharacterSelectResponse();

            if (From.Realm != null)
            {
                Log.Success("Entering", "On : " + From.Realm.Address);
                Rp.Ips.Add(From.Realm.Address);
            }

            From.SendSerialized(Rp);
        }
        public override void OnRead(RiftClient From)
        {
            Log.Success("SelectRequest", "Enter on World : " + From.GetIp + ",GUID=" + GUID);

            if (From.Acct == null || From.Rm == null)
                return;

            Character Char = From.Rm.GetObject<CharactersMgr>().GetCharacter(GUID);
            if (Char == null || Char.AccountId != From.Acct.Id)
            {
                Log.Error("SelectRequest", "Invalid CharacterId = " + GUID);
                From.Disconnect();
                return;
            }

            MapServerInfo Info = From.Rm.GetObject<WorldMgr>().GetMapInfo();

            if (Info == null)
            {
                Log.Error("SelectRequest", "No map loaded ! Run MapServer");
                return;
            }

            Log.Success("SelectRequest", "Entering on Map : " + Info.MapAdress);

            Info.GetObject<MapMgr>().RegisterConnecting(From.Acct.Username,Char.CharacterId);

            LobbyCharacterSelectResponse Rp = new LobbyCharacterSelectResponse();
            Rp.Ips.Add(Info.MapAdress);
            From.SendSerialized(Rp);
        }
Exemple #4
0
 public override void OnRead(RiftClient From)
 {
     if (From.Character != null)
     {
         Log.Success("WorldDisconnect", "Character disconnectig : " + From.Character.CharacterName);
         From.Disconnect();
     }
 }
        public override void OnRead(RiftClient From)
        {
            if (CharacterMgr.Instance.GetCharactersCount(From.Acct.Id, From.Realm.RealmId) >= 6)
            {
                Log.Error("CharacterCreate", "Hack From : " + From.GetIp);
                From.Disconnect();
                return;
            }

            LobbyCharacterCreateResponse Rp = new LobbyCharacterCreateResponse();
            Character Exist = CharacterMgr.CharacterDB.SelectObject <Character>("Name='" + CharacterMgr.CharacterDB.Escape(Name) + "' AND RealmID=" + From.Realm.RealmId);

            if (Exist != null)
            {
                Rp.AddField(0, EPacketFieldType.Unsigned7BitEncoded, (long)6);
            }
            else
            {
                Rp.AddField(0, EPacketFieldType.Unsigned7BitEncoded, (long)0);

                PacketOutStream Stream = new PacketOutStream();
                PacketProcessor.WritePacket(ref Stream, Custom, false, true, true);
                CustomData = Stream.ToArray();

                string Data = UTF8ByteArrayToString(CustomData);

                Character Char = new Character();
                Char.Name        = Name;
                Char.AccountId   = From.Acct.Id;
                Char.RealmId     = From.Realm.RealmId;
                Char.Race        = Field1;
                Char.Sex         = Field2;
                Char.Class       = Field13;
                Char.HairModelID = HairID;
                Char.Level       = 1;
                Char.Data        = Data;

                CharacterMgr.Instance.AddObject(Char);
                Character CharEntry = CharacterMgr.Instance.GetCharacter(CharacterMgr.CharacterDB.Escape(Name));

                Character_StartItems[] StartItems = CharacterMgr.Instance.GetStartItems(Field1, Field2, Field13);

                foreach (Character_StartItems Item in StartItems)
                {
                    Character_Item It = new Character_Item();
                    It.ItemID  = Item.ItemID;
                    It.Bag     = 0;
                    It.Equiped = 1;
                    It.GUID    = CharEntry.Id;

                    CharacterMgr.Instance.AddObject(It);
                }
            }
            From.SendSerialized(Rp);
        }
        public override void OnRead(RiftClient From)
        {
            try
            {
                XmlSerializer         xmls = new XmlSerializer(typeof(ClientAuthCertificate));
                ClientAuthCertificate Cert = xmls.Deserialize(new MemoryStream(Encoding.UTF8.GetBytes(Certificate))) as ClientAuthCertificate;

                if (Program.Config.UseCertificate)
                {
                    From.Acct = Program.AcctMgr.GetAccount(Cert.Sessionkey);
                }
                else
                {
                    From.Acct = Program.AcctMgr.GetAccount(Cert.Username, Cert.Hash);
                }
            }
            catch (Exception e)
            {
                From.Disconnect();
            }

            if (From.Acct == null)
            {
                Log.Error("Authentication", "Failled !");
                From.Disconnect();
            }
            else
            {
                HandshakeAuthenticationResponse Rp = new HandshakeAuthenticationResponse();
                Rp.SessionTicket = (long)BitConverter.ToUInt64(Guid.NewGuid().ToByteArray(), 0);

                From.Acct.SessionTicket = Rp.SessionTicket;
                From.Acct.Dirty         = true;
                AccountMgr.AccountDB.SaveObject(From.Acct);

                From.SendSerialized(Rp);
            }
        }
        public override void OnRead(RiftClient From)
        {
            Realm Rm = Program.AcctMgr.GetRealm((int)RealmId);
            if (Rm != null)
                From.Rm = Rm;

            if (From.Rm == null)
            {
                Log.Error("WorldSelectRequest", "Realm null : " + From.GetIp);
                From.Disconnect();
                return;
            }

            LobbyWorldSelectResponse Rp = new LobbyWorldSelectResponse();
            From.SendSerialized(Rp);
        }
        public override void OnRead(RiftClient From)
        {
            Realm Rm = Program.AcctMgr.GetRealm((int)RealmId);

            if (Rm != null)
            {
                From.Rm = Rm;
            }

            if (From.Rm == null)
            {
                Log.Error("WorldSelectRequest", "Realm null : " + From.GetIp);
                From.Disconnect();
                return;
            }

            LobbyWorldSelectResponse Rp = new LobbyWorldSelectResponse();

            From.SendSerialized(Rp);
        }
        public override void OnRead(RiftClient From)
        {
            Realm Rm = CharacterMgr.Instance.GetRealm((int)RealmId);

            if (Rm != null)
            {
                From.Realm = Rm;
            }

            if (From.Realm == null)
            {
                Log.Error("LobbyWorldSelectRequest", "Invalid RealmId=" + RealmId);
                From.Disconnect();
            }
            else
            {
                LobbyWorldSelectResponse Rp = new LobbyWorldSelectResponse();
                From.SendSerialized(Rp);
            }
        }
        public override void OnRead(RiftClient From)
        {
            if (From.Acct == null || From.Rm == null)
                return;

            CharactersMgr Mgr = From.Rm.GetObject<CharactersMgr>();
            if (Mgr.GetCharactersCount(From.Acct.Id) >= 6)
            {
                From.Disconnect();
                return;
            }

            ISerializablePacket Response = new ISerializablePacket();
            Response.Opcode = (int)Opcodes.LobbyCharacterCreateResponse;
            if (Mgr.CharacterExist(Name))
                Response.AddField(0, EPacketFieldType.Unsigned7BitEncoded, (long)CharacterCreateResponses.INVALID_NAME);
            else
            {
                Character Char = new Character();
                Char.AccountId = From.Acct.Id;
                Char.CharacterName = Name;
                Char.Email = From.Acct.Email;

                Char.Info = new CharacterInfo();
                Char.Info.Class = Class;
                Char.Info.CustomPacket = this.CharacterCustom;
                Char.Info.Level = Mgr.StartingLevel;
                Char.Info.Race = Race;
                Char.Info.Sex = Sex;

                long CharacterID = Mgr.AddCharacter(Char);

                Response.AddField(0, EPacketFieldType.Unsigned7BitEncoded, (long)CharacterCreateResponses.CREATE_OK);
                From.JustCreatedCharacter = CharacterID;
            }

            From.SendSerialized(Response);
        }
        public override void OnRead(RiftClient From)
        {
            Log.Success("SelectRequest", "Enter on World : " + From.GetIp + ",GUID=" + GUID);

            if (From.Acct == null || From.Rm == null)
            {
                Log.Error("LobbyCharacterSelectRequest", "Acct or Rm == null");
                return;
            }

            Character Char = From.Rm.GetObject <CharactersMgr>().GetCharacter(GUID);

            if (Char == null || Char.AccountId != From.Acct.Id)
            {
                Log.Error("SelectRequest", "Invalid CharacterId = " + GUID);
                From.Disconnect();
                return;
            }


            MapServerInfo Info = From.Rm.GetObject <WorldMgr>().GetMapInfo();

            if (Info == null)
            {
                Log.Error("SelectRequest", "No map loaded ! Run MapServer");
                return;
            }

            Log.Success("SelectRequest", "Entering on Map : " + Info.MapAdress);

            Info.GetObject <MapMgr>().RegisterConnecting(From.Acct.Username, Char.CharacterId);

            LobbyCharacterSelectResponse Rp = new LobbyCharacterSelectResponse();

            Rp.Ips.Add(Info.MapAdress);
            From.SendSerialized(Rp);
        }
        public override void OnRead(RiftClient From)
        {
            Log.Success("Authentification", "Email = " + Email + " SessionTicket = " + SessionTicket);

            long Char = Program.Maps.GetConnecting(Email);

            if (Char == 0)
            {
                Log.Error("Authentification", "Not authentified email : " + Email);
                From.Disconnect();
                return;
            }

            From.Acct = Program.Accounts.GetAccountByUsername(Email);

            if (From.Acct == null)
            {
                Log.Error("Authentification", "Not valid account :" + Email);
                From.Disconnect();
                return;
            }

            From.Character = Program.Characters.GetCharacter(Char);

            if (From.Acct == null)
            {
                Log.Error("Authentification", "Not valid character :" + Char);
                From.Disconnect();
                return;
            }

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

            CacheTemplate[] Tmps = Program.World.GetTemplates();
            foreach (CacheTemplate Tmp in Tmps)
                From.SendSerialized(WorldMgr.BuildCache(Tmp.CacheID, Tmp.CacheType, Tmp));

            CacheData[] Dts = Program.World.GetDatas();
            foreach (CacheData Tmp in Dts)
                From.SendSerialized(WorldMgr.BuildCache(Tmp.CacheID, Tmp.CacheType, Tmp));

            WorldCacheUpdated Updated = new WorldCacheUpdated();
            Updated.GUID = Char;
            From.SendSerialized(Updated);

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

            WorldEntityUpdate Update = new WorldEntityUpdate();
            Update.AddField(6, EPacketFieldType.Raw8Bytes, (long)Char);
            From.SendSerialized(Update);

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

            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 };
            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 = new WorldZoneInfo();
            ZoneInfo.ZoneFileName = "Mathosia1";
            ZoneInfo.Description = Program.World.GetText(290412351);
            ZoneInfo.DisplayName = Program.World.GetText(1647389394);
            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);
        }
Exemple #13
0
        public override void OnRead(RiftClient From)
        {
            Log.Success("Authentification", "Email = " + Email + " SessionTicket = " + SessionTicket);

            long Char = Program.Maps.GetConnecting(Email);

            if (Char == 0)
            {
                Log.Error("Authentification", "Not authentified email : " + Email);
                From.Disconnect();
                return;
            }

            From.Acct = Program.Accounts.GetAccountByUsername(Email);

            if (From.Acct == null)
            {
                Log.Error("Authentification", "Not valid account :" + Email);
                From.Disconnect();
                return;
            }

            From.Character = Program.Characters.GetCharacter(Char);

            if (From.Acct == null)
            {
                Log.Error("Authentification", "Not valid character :" + Char);
                From.Disconnect();
                return;
            }

            WorldAuthenticationResponse Rp = new WorldAuthenticationResponse();

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

            CacheTemplate[] Tmps = Program.World.GetTemplates();
            foreach (CacheTemplate Tmp in Tmps)
            {
                From.SendSerialized(WorldMgr.BuildCache(Tmp.CacheID, Tmp.CacheType, Tmp));
            }

            CacheData[] Dts = Program.World.GetDatas();
            foreach (CacheData Tmp in Dts)
            {
                From.SendSerialized(WorldMgr.BuildCache(Tmp.CacheID, Tmp.CacheType, Tmp));
            }

            WorldCacheUpdated Updated = new WorldCacheUpdated();

            Updated.GUID = Char;
            From.SendSerialized(Updated);

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

            WorldEntityUpdate Update = new WorldEntityUpdate();

            Update.AddField(6, EPacketFieldType.Raw8Bytes, (long)Char);
            From.SendSerialized(Update);

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


            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
            };
            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 = new WorldZoneInfo();

            ZoneInfo.ZoneFileName = "Mathosia1";
            ZoneInfo.Description  = Program.World.GetText(290412351);
            ZoneInfo.DisplayName  = Program.World.GetText(1647389394);
            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);
        }