Esempio n. 1
0
        /// <summary>
        /// </summary>
        /// <param name="sender">
        /// </param>
        /// <param name="message">
        /// </param>
        public void Handle(object sender, Message message)
        {
            var client = (Client)sender;
            var selectCharacterMessage = (SelectCharacterMessage)message.Body;

            var checkLogin = new CheckLogin();

            if (checkLogin.IsCharacterOnAccount(client, selectCharacterMessage.CharacterId) == false)
            {
                Colouring.Push(ConsoleColor.Green);
                Console.WriteLine(
                    "Client '" + client.AccountName + "' tried to log in as CharID "
                    + selectCharacterMessage.CharacterId + " but it is not on their account!");
                Colouring.Pop();

                // NV: Is this really what we want to send? Should find out sometime...
                client.Send(0x00001F83, new LoginErrorMessage {
                    Error = LoginError.InvalidUserNamePassword
                });
                client.Server.DisconnectClient(client);
                return;
            }

            if (OnlineDao.IsOnline(selectCharacterMessage.CharacterId).Online == 1)
            {
                Console.WriteLine(
                    "Client '" + client.AccountName
                    + "' is trying to login, but the requested character is already logged in.");
                client.Send(0x00001F83, new LoginErrorMessage {
                    Error = LoginError.AlreadyLoggedIn
                });
                client.Server.DisconnectClient(client);
                return;
            }

            OnlineDao.SetOnline(selectCharacterMessage.CharacterId);

            IPAddress zoneIpAdress;

            if (IPAddress.TryParse(ConfigReadWrite.Instance.CurrentConfig.ZoneIP, out zoneIpAdress) == false)
            {
                IPHostEntry zoneHost = Dns.GetHostEntry(ConfigReadWrite.Instance.CurrentConfig.ZoneIP);
                zoneIpAdress = zoneHost.AddressList.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork);
            }

            var zoneRedirectionMessage = new ZoneInfoMessage
            {
                CharacterId     = selectCharacterMessage.CharacterId,
                ServerIpAddress = zoneIpAdress,
                ServerPort      =
                    (ushort)
                    ConfigReadWrite.Instance.CurrentConfig.ZonePort
            };

            client.Send(0x0000615B, zoneRedirectionMessage);
        }
Esempio n. 2
0
        /// <summary>
        /// Read Login Character packet
        /// </summary>
        /// <param name="client">
        /// Client sending
        /// </param>
        /// <param name="packet">
        /// packet data
        /// </param>
        public static void Read(Client client, byte[] packet)
        {
            PacketReader reader = new PacketReader(ref packet);

            reader.ReadUInt16(); // Packet ID
            reader.ReadUInt16(); // Data length
            uint playerId = reader.ReadUInt32();

            client.Server.Debug(
                client,
                "{0} >> LoginCharacter: PlayerID: {1}",
                client.Character.characterName,
                playerId);
            reader.Finish();

            if (client.IsBot)
            {
                OnlineDao.SetOnline((int)playerId);
            }

            DBCharacter character = CharacterDao.GetById((int)playerId).First();

            client.Character.CharacterId        = playerId;
            client.Character.characterName      = character.Name;
            client.Character.characterFirstName = character.FirstName;
            client.Character.characterLastName  = character.LastName;

            client.ChatServer().AddClientToChannels(client);

            if (client.IsBot)
            {
                // and give client its own name lookup
                byte[] pname = PlayerName.Create(client, client.Character.CharacterId);
                client.Send(pname);

                // send server welcome message to client
                byte[] anonv = MsgAnonymousVicinity.Create(
                    string.Empty,
                    string.Format(
                        client.ChatServer().MessageOfTheDay,
                        AssemblyInfoclass.RevisionName + " " + AssemblyInfoclass.AssemblyVersion),
                    string.Empty);
                client.Send(anonv);

                // TODO: Add Buddies List/BuddyOnlineStatus messages

                foreach (ChannelBase channel in client.Channels)
                {
                    byte[] channelJoin = ChannelJoin.Create(
                        channel.channelType,
                        channel.ChannelId,
                        channel.ChannelName,
                        channel.channelFlags,
                        new byte[] { 0x00, 0x00 });
                    client.Send(channelJoin);
                }

                if (!client.ChatServer().ConnectedClients.ContainsKey(client.Character.CharacterId))
                {
                    client.ChatServer().ConnectedClients.Add(client.Character.CharacterId, client);
                }

                // add yourself to that list
                client.KnownClients.Add(client.Character.CharacterId);
            }
        }
Esempio n. 3
0
 /// <summary>
 /// </summary>
 /// <param name="id">
 /// </param>
 public static void SetOnline(int id)
 {
     OnlineDao.SetOnline(id);
 }