示例#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)
        {
            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);
            }
        }