/// <summary>
        /// Creates a new instnace of AuthClient.
        /// </summary>
        /// <param name="socketClient">The socket client associated to the auth client.</param>
        public AuthClient(SocketClient socketClient)
        {
            crypto = new ProjectX_V3_Lib.Cryptography.AuthCrypto();

            socketClient.Owner = this;
            socketClient.Crypto = crypto;
            this.socketClient = socketClient;
        }
 /// <summary>
 /// The callback from Accept()
 /// </summary>
 /// <param name="asyncResult">The async result.</param>
 private void Accept_Callback(IAsyncResult asyncResult)
 {
     try
     {
         Socket accepted = serverSocket.EndAccept(asyncResult);
         if (accepted.Connected)
         {
             SocketClient sClient = new SocketClient(accepted, socketEvents);
             if (socketEvents.OnConnection.Invoke(sClient))
                 sClient.Receive();
         }
     }
     catch { }
     Accept();
 }
 /// <summary>
 /// Handling all connections.
 /// </summary>
 /// <param name="socketClient">The socket client.</param>
 public static bool Handle_Connection(SocketClient socketClient)
 {
     try
     {
         Client.AuthClient client = new Client.AuthClient(socketClient);
         using (var packet = new Packets.PasswordSeedPacket())
         {
             packet.Seed = 90011337;
             client.Send(packet);
         }
     }
     catch (Exception e)
     {
         Console.WriteLine(e.ToString());
     }
     return true;
 }
Exemple #4
0
        /// <summary>
        /// Handling all packets received.
        /// </summary>
        /// <param name="socketClient">The socket client.</param>
        /// <param name="Packet">The packet.</param>
        public static bool Handle_Receive(SocketClient socketClient, DataPacket Packet)
        {
            try
            {
                Client.AuthClient client = socketClient.Owner as Client.AuthClient;

                switch (Packet.PacketID)
                {
                    case Packets.PacketType.AuthRequestPacket1:
                    case Packets.PacketType.AuthRequestPacket2:
                        Packets.AuthRequestPacket.Handle(client, Packet);
                        break;
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
            return true;
        }
 /// <summary>
 /// Empty method for the connection events.
 /// </summary>
 /// <param name="sClient">The socket client.</param>
 /// <returns>Returns true always.</returns>
 static bool empty_conn(SocketClient sClient)
 {
     return true;
 }
 /// <summary>
 /// Empty method for the buffer events.
 /// </summary>
 /// <param name="sClient">The socket client.</param>
 /// <param name="packet">The data packet.</param>
 /// <returns>Returns true always.</returns>
 static bool empty_buff(SocketClient sClient, DataPacket packet)
 {
     return true;
 }
        public GameClient()
        {
            IsAIBot = true;
            this.socketClient = new ProjectX_V3_Lib.Network.SocketClient();
            socketClient.Owner = this;
            socketClient.Crypto = new ProjectX_V3_Lib.Cryptography.GameCrypto(Program.Config.ReadString("GameKey").GetBytes());

            _screen = new ProjectX_V3_Game.Core.Screen(this);
            _baseentity = new BaseEntity(this);
            _maxhp = 0;
            _maxmp = 0;

            _inventory = new ProjectX_V3_Game.Data.Inventory(this);
            _equipments = new ProjectX_V3_Game.Data.Equipments(this);
            _trade = new ProjectX_V3_Game.Data.TradeData();

            _spelldata = new ProjectX_V3_Game.Data.SpellData(this);

            _subclasses = new SubClasses();

            Warehouses = new ConcurrentDictionary<ushort, ProjectX_V3_Game.Data.Warehouse>();
            foreach (ushort whID in whids)
            {
                if (!Warehouses.TryAdd(whID, new Data.Warehouse(this, whID)))
                    throw new Exception("Failed to add Warehouse...");
            }
            TournamentScore = new ProjectX_V3_Game.Tournaments.TournamentScore();
            TournamentInfo = new ProjectX_V3_Game.Tournaments.TournamentInfo(this);

            Arena = new ProjectX_V3_Game.Data.ArenaInfo(this);
            Pets = new ConcurrentDictionary<int, BattlePet>();

            Permission = Enums.PlayerPermission.Normal;
        }
Exemple #8
0
        /// <summary>
        /// Handles all packets received by the game auth server.
        /// </summary>
        /// <param name="client">The socket client.</param>
        /// <param name="Packet">The packet.</param>
        /// <returns>ALWAYS returns false.</returns>
        private static bool HandlePacket(SocketClient client, DataPacket Packet)
        {
            if (Packet.PacketID == 9001)
            {
                if (Packet.ReadString(4, 16) == Program.Config.ReadString("ServerPassword"))
                {
                    string Account = Packet.ReadString(20, 16);
                    int DatabaseUID = Packet.ReadInt32(36);
                    if (DatabaseUID == 0)
                        return false;
                    uint EntityUID = Packet.ReadUInt32(40);
                    if (EntityUID == 0)
                        return false;

                    if (Core.Kernel.Clients.Contains(EntityUID))
                    {
                        UIDCollection.TryRemove(EntityUID);
                        return false;
                    }

                    if (UIDCollection.Contains(EntityUID))
                    {
                        int secondkey;
                        if (UIDCollection.TryGetSecondKey(EntityUID, out secondkey))
                        {
                            if (DatabaseUID == secondkey)
                                UIDCollection.TryRemove(EntityUID);
                        }
                        return false;
                    }

                    if (UIDCollection.Contains(DatabaseUID))
                    {
                        uint firstkey;
                        if (UIDCollection.TryGetFirstKey(DatabaseUID, out firstkey))
                        {
                            UIDCollection.TryRemove(DatabaseUID);
                        }
                    }

                    UIDCollection.TryAdd(EntityUID, DatabaseUID, DateTime.Now.AddMinutes(10));
                    //	return false;
                }
            }
            return false;
        }
Exemple #9
0
        /// <summary>
        /// Handling all packets received.
        /// </summary>
        /// <param name="socketClient">The socket client.</param>
        /// <param name="Packet">The packet.</param>
        public static bool Handle_Receive(SocketClient socketClient, DataPacket Packet)
        {
            try
            {
                Entities.GameClient client = socketClient.Owner as Entities.GameClient;

                #region AntiBooth
                if (client.Booth != null)
                {
                    switch (Packet.PacketID)
                    {
                        case Packets.PacketType.AuthMessagePacket:
                        case Packets.PacketType.CharacterCreationPacket:
                        case Packets.PacketType.MovementPacket:
                        case Packets.PacketType.NPCRequestPacket:
                        case Packets.PacketType.NPCResponsePacket:
                        case Packets.PacketType.GroundItemPacket:
                        case Packets.PacketType.InteractionPacket:
                        case Packets.PacketType.GemSocketingPacket:
                        case Packets.PacketType.WarehousePacket:
                        case Packets.PacketType.CompositionPacket:
                        case Packets.PacketType.ArenaActionPacket:
                            return true;
                    }
                }
                #endregion

                switch (Packet.PacketID)
                {
                        #region AuthMessagePacket : 1052
                    case Packets.PacketType.AuthMessagePacket:
                        return Packets.AuthMessagePacket.Handle(client, Packet);
                        #endregion
                        #region CharacterCreationPacket : 1001
                    case Packets.PacketType.CharacterCreationPacket:
                        Packets.CharacterCreationPacket.Handle(client, Packet);
                        break;
                        #endregion
                        #region GeneralDataPacket : 10010
                    case Packets.PacketType.GeneralDataPacket:
                        Packets.GeneralDataPacket.Handle(client, Packet);
                        break;
                        #endregion
                        #region MessagePacket : 1004
                    case Packets.PacketType.MessagePacket:
                        Packets.MessagePacket.Handle(client, Packet);
                        break;
                        #endregion
                        #region ItemPacket : 1009
                    case Packets.PacketType.ItemPacket:
                        Packets.ItemPacket.Handle(client, Packet);
                        break;
                        #endregion
                        #region MovementPacket : 10005
                    case Packets.PacketType.MovementPacket:
                        Packets.MovementPacket.Handle(client, Packet);
                        break;
                        #endregion
                        #region NPCRequestPacket : 2031
                    case Packets.PacketType.NPCRequestPacket:
                        Packets.NPCRequestPacket.Handle(client, Packet);
                        break;
                        #endregion
                        #region NPCResponsePacket 2032
                    case Packets.PacketType.NPCResponsePacket:
                        Packets.NPCResponsePacket.Handle(client, Packet);
                        break;
                        #endregion
                        #region GroundItemPacket : 1101
                    case Packets.PacketType.GroundItemPacket:
                        Packets.GroundItemPacket.Handle(client, Packet);
                        break;
                        #endregion
                        #region TradePacket : 1056
                    case Packets.PacketType.TradePacket:
                        Packets.TradePacket.Handle(client, Packet);
                        break;
                        #endregion
                        #region InteractionPacket : 1022
                    case Packets.PacketType.InteractionPacket:
                        Packets.InteractionPacket.Handle(client, Packet);
                        break;
                        #endregion
                        #region CharacterStatsPacket : 1040
                    case Packets.PacketType.CharacterStatsPacket:
                        Packets.CharacterStatsPacket.Handle(client, Packet);
                        break;
                        #endregion
                        #region Guild 1107
                    case Packets.PacketType.GuildPacket:
                        Packets.GuildPacket.Handle(client, Packet);
                        break;
                        #endregion
                        #region GuildMemberListPacket : 2102
                    case Packets.PacketType.GuildMemberListPacket:
                        Packets.GuildMemberListPacket.Handle(client, Packet);
                        break;
                        #endregion
                        #region GuildDonationPacket : 1058
                    case Packets.PacketType.GuildDonationPacket:
                        Packets.GuildDonationPacket.Handle(client, Packet);
                        break;
                        #endregion
                        #region StringPacket : 1015
                    case Packets.PacketType.StringPacket:
                        Packets.StringPacket.Handle(client, Packet);
                        break;
                        #endregion
                        #region BroadcastPacket : 2050
                    case Packets.PacketType.BroadcastPacket:
                        Packets.BroadcastPacket.Handle(client, Packet);
                        break;
                        #endregion
                        #region NobilityPacket : 2064
                    case Packets.PacketType.NobilityPacket:
                        Packets.NobilityPacket.Handle(client, Packet);
                        break;
                        #endregion
                        #region SubClassPacket : 2320
                    case Packets.PacketType.SubClassPacket:
                        Packets.SubClassPacket.Handle(client, Packet);
                        break;
                        #endregion
                        #region TeamActionPacket : 1023
                    case Packets.PacketType.TeamActionPacket:
                        Packets.TeamActionPacket.Handle(client, Packet);
                        break;
                        #endregion
                        #region GemSocketingPacket : 1023
                    case Packets.PacketType.GemSocketingPacket:
                        Packets.GemSocketingPacket.Handle(client, Packet);
                        break;
                        #endregion
                        #region WarehousePacket : 1102
                    case Packets.PacketType.WarehousePacket:
                        Packets.WarehousePacket.Handle(client, Packet);
                        break;
                        #endregion
                        #region CompositionPacket : 2036
                    case Packets.PacketType.CompositionPacket:
                        Packets.CompositionPacket.Handle(client, Packet);
                        break;
                        #endregion
                        #region ArenaActionPacket : 2205
                    case Packets.PacketType.ArenaActionPacket:
                        Packets.ArenaActionPacket.Handle(client, Packet);
                        break;
                        #endregion
                        #region ArenaPlayersPacket : 2208
                    case Packets.PacketType.ArenaPlayersPacket:
                        Packets.ArenaPlayersPacket.Handle(client, Packet);
                        break;
                        #endregion
                        #region ArenaStatisticPacket : 2209
                    case Packets.PacketType.ArenaStatisticPacket:
                        Packets.ArenaStatisticPacket.Handle(client, Packet);
                        break;
                        #endregion
                        #region ArenaBattleInfoPacket : 2206
                    case Packets.PacketType.ArenaBattleInfoPacket:
                        Packets.ArenaBattleInfoPacket.Handle(client, Packet);
                        break;
                        #endregion
                        #region ArenaWatchPacket : 2211
                    case Packets.PacketType.ArenaWatchPacket:
                        Packets.ArenaWatchPacket.Handle(client, Packet);
                        break;
                        #endregion

                        #region Unknown Packets
                        // TODO: Log all unknown packets

                        #region 1151
                    case 1151:
                        // This packet is send from the client to the server during login, not sure if send at other times.
                        break;
                        #endregion
                        #region 1037
                    case 1037:
                        // This packet is send over time ... cba to analyze it as I could not find any info on it, so probs not important.
                        break;
                        #endregion

                        #endregion

                        #region Unhandled PAckets
                        // all packets here is known by type, but not handled yet...

                        #region QuestPacket : 1134
                    case 1134:
                        break;
                        #endregion

                        #endregion

                        #region default
                    default:
                        {
                            if (client.LoggedIn)
                                Console.WriteLine("Unknown PacketID: {0} PacketSize: {1} User: {2}", Packet.PacketID, Packet.PacketSize, client.Name);
                            break;
                        }
                        #endregion
                }
            }
            catch (Exception e)
            {
                string eString = e.ToString();
                if (eString.Contains("get_PacketID()"))
                {
                    socketClient.Disconnect("Failed to get PacketID... Pointer = null.");
                    return false;
                }
                Console.WriteLine("[Major Exception]");
                Console.WriteLine(eString);
            }
            return true;
        }
 /// <summary>
 /// Sets the login info of the character or creates the base character file if first time logging in.
 /// </summary>
 /// <param name="client">The client.</param>
 /// <param name="Account">The account.</param>
 /// <param name="DatabaseUID">The database UID.</param>
 /// <param name="EntityUID">The entity UID.</param>
 public static void SetLoginOrCreate(SocketClient client, string Account, int DatabaseUID, uint EntityUID)
 {
     IniFile characterfile = new IniFile(DatabaseLocation + "\\Characters\\" + DatabaseUID + ".ini", "Character");
     if (!characterfile.Exists())
         characterfile.Write<bool>("New", true);
     characterfile.WriteString("Account", Account);
     characterfile.Write<uint>("LastEntityUID", EntityUID);
 }
Exemple #11
0
 /// <summary>
 /// Empty method for the buffer events.
 /// </summary>
 /// <param name="sClient">The socket client.</param>
 /// <param name="packet">The data packet.</param>
 /// <returns>Returns true always.</returns>
 static bool empty_buff(SocketClient sClient, DataPacket packet)
 {
     return(true);
 }
Exemple #12
0
 /// <summary>
 /// Empty method for the connection events.
 /// </summary>
 /// <param name="sClient">The socket client.</param>
 /// <returns>Returns true always.</returns>
 static bool empty_conn(SocketClient sClient)
 {
     return(true);
 }
        /// <summary>
        /// Handling all disconnections.
        /// </summary>
        /// <param name="socketClient">The socket client.</param>
        public static bool Handle_Disconnection(SocketClient socketClient)
        {
            try
            {
                if (socketClient.Owner == null)
                    return false;

                Entities.GameClient client = socketClient.Owner as Entities.GameClient;
                    int removetries = 0;
                if (client.LoggedIn && client.CanSave)
                {
                    client.Screen.ClearScreen();

                    Database.CharacterDatabase.Save(client);
                    client.Inventory.SaveInventory();
                    client.Equipments.SaveEquipments();

                    if (client.ArenaMatch != null)
                    {
                        client.ArenaMatch.Quit(client);
                    }

                    client.LoggedIn = false;

                    if (client.Booth != null)
                    {
                        client.Booth.CancelBooth();
                    }
                    if (client.Guild != null)
                    {
                        client.Guild = null;
                        client.GuildMemberInfo.Client = null;
                        client.GuildMemberInfo = null;
                    }

                    if (client.Nobility != null)
                    {
                        client.Nobility.Client = null;
                        client.Nobility = null;
                    }

                    if (!string.IsNullOrEmpty(socketClient.DCReason) && !string.IsNullOrWhiteSpace(socketClient.DCReason))
                    {
                        Console.ForegroundColor = ConsoleColor.Red;
                        Console.WriteLine("{0} disconnected. Reason: {1}", client.Name, socketClient.DCReason);
                        Console.ResetColor();
                    }

                    while (!client.Map.LeaveMap(client) && removetries < 5)
                    {
                        removetries++;
                        System.Threading.Thread.Sleep(100);
                    }
                }
                removetries = 0;
                while (!Core.Kernel.Clients.TryRemove(client.EntityUID) && removetries < 5)
                {
                    removetries++;
                    System.Threading.Thread.Sleep(100);
                }
            }
            catch (Exception e)
            {
                Console.WriteLine(e.ToString());
            }
            return true;
        }