コード例 #1
0
        /// <summary>
        /// Searches in the market with the specified arguments.
        /// </summary>
        /// <param name="cpkt"></param>
        private void CM_MARKET_SEARCH(CMSG_MARKETSEARCH cpkt)
        {
            //GENERATE MARKET SEARCH QUERY
            MarketSearchArgument Argument = new MarketSearchArgument();
            Argument.item_cat = cpkt.ItemType;
            Argument.item_class = cpkt.ItemClass;
            Argument.max_clvl = cpkt.MaxCLv;
            Argument.min_clvl = cpkt.MinCLv;
            Argument.searchstring = cpkt.SearchString;
            Argument.searchType = cpkt.GetSearchMode;
            Argument.SortBy = cpkt.Unknown2;
            Argument.index = cpkt.Unknown;

            //SEND ALL FOUND ITEMS GIVEN BY THE SEARCH QUERY
            SMSG_MARKETSEARCH spkt = new SMSG_MARKETSEARCH();
            spkt.SessionId = this.character.id;
            spkt.Unknown = 1;

            byte i = 0;
            foreach (MarketItemArgument args in Singleton.Database.SearchMarket(Argument))
            {
                spkt.Count = ++i;
                spkt.Add(args);
            }
            this.Send((byte[])spkt);
        }
コード例 #2
0
 /// <summary>
 /// Search market
 /// </summary>
 /// <param name="Argument"></param>
 /// <returns></returns>
 public IEnumerable<MarketItemArgument> SearchMarket(MarketSearchArgument Argument)
 {
     return InternalDatabaseProvider.SearchMarket(Argument);
 }
コード例 #3
0
        /// <summary>
        /// Search market
        /// </summary>
        /// <param name="Argument"></param>
        /// <returns></returns>
        public IEnumerable<MarketItemArgument> SearchMarket(MarketSearchArgument Argument)
        {
            StringBuilder mysqlcommand = new StringBuilder("SELECT * FROM `auction` WHERE ");
            mysqlcommand.AppendFormat("Categorie={0} ", Argument.item_cat);
            if (Argument.min_clvl > 0) mysqlcommand.AppendFormat("AND ReqClvl >= {0} ", Argument.min_clvl);
            if (Argument.max_clvl > 0) mysqlcommand.AppendFormat("AND ReqClvl <= {0} ", Argument.max_clvl);
            if (Argument.searchType > 0) mysqlcommand.AppendFormat("AND `{0}` LIKE '%{1}%' ", (Argument.searchType == 2) ? "CharName" : "ItemName", Argument.searchstring);
            if (Argument.item_class > 0) mysqlcommand.AppendFormat("AND Grade = {0} ", Argument.max_clvl);
            switch (Argument.SortBy)
            {
                case 0: mysqlcommand.AppendFormat("ORDER BY ItemName ASC ", Argument.max_clvl); break;
                case 1: mysqlcommand.AppendFormat("ORDER BY ItemName DESC ", Argument.max_clvl); break;
                case 2: mysqlcommand.AppendFormat("ORDER BY CharName ASC ", Argument.max_clvl); break;
                case 3: mysqlcommand.AppendFormat("ORDER BY CharName DESC ", Argument.max_clvl); break;
                case 4: mysqlcommand.AppendFormat("ORDER BY Price ASC ", Argument.max_clvl); break;
                case 5: mysqlcommand.AppendFormat("ORDER BY Price DESC ", Argument.max_clvl); break;
                case 6: mysqlcommand.AppendFormat("ORDER BY ReqClvl ASC ", Argument.max_clvl); break;
                case 7: mysqlcommand.AppendFormat("ORDER BY ReqClvl DESC ", Argument.max_clvl); break;
                default: mysqlcommand.AppendFormat("ORDER BY CharName ASC ", Argument.max_clvl); break;
            }
            mysqlcommand.AppendFormat("LIMIT {0}, 36", Argument.index * 36);

            MySqlConnection connection = ConnectionPool.Request();
            MySqlCommand command = new MySqlCommand(mysqlcommand.ToString(), connection);
            MySqlDataReader reader = null;

            try
            {
                reader = command.ExecuteReader();
                while (reader.Read())
                {
                    byte[] buffer = new byte[67];
                    MarketItemArgument item = new MarketItemArgument();

                    item.id = reader.GetUInt32(0);
                    item.sender = reader.GetString(4);
                    item.price = reader.GetUInt32(7);
                    item.expires = reader.GetMySqlDateTime(9).GetDateTime();
                    reader.GetBytes(8, 0, buffer, 0, 67);
                    Rag2Item.Deserialize(out item.item, buffer, 0);

                    yield return item;
                }
            }
            finally
            {
                if (reader != null) reader.Close();
                ConnectionPool.Release(connection);
            }
        }