Esempio n. 1
0
        /// <summary>
        /// Registers a new market item
        /// </summary>
        /// <param name="arg"></param>
        /// <returns></returns>
        public uint RegisterNewMarketItem(Character target, MarketItemArgument arg)
        {
            MySqlConnection connection = ConnectionPool.Request();
            uint            result     = 0;

            try
            {
                byte[] buffer = new byte[67];
                Rag2Item.Serialize(arg.item, buffer, 0);

                MySqlCommand command = new MySqlCommand(_query_10, connection);
                command.Parameters.AddWithValue("Categorie", arg.item.info.categorie);
                command.Parameters.AddWithValue("Grade", 0);
                command.Parameters.AddWithValue("CharId", target.ModelId);
                command.Parameters.AddWithValue("CharName", arg.sender);
                command.Parameters.AddWithValue("ItemName", arg.item.info.name);
                command.Parameters.AddWithValue("ReqClvl", arg.item.clvl);
                command.Parameters.AddWithValue("Price", arg.price);
                command.Parameters.AddWithValue("ItemContent", buffer);
                command.Parameters.AddWithValue("Expires", arg.expires);

                command.ExecuteNonQuery();
                result = Convert.ToUInt32(command.LastInsertedId);
            }
            catch (Exception e)
            {
                __dbtracelog.WriteError("Database", e.Message);
            }
            finally
            {
                ConnectionPool.Release(connection);
            }

            return(result);
        }
Esempio n. 2
0
        /// <summary>
        /// Search for owner market items
        /// </summary>
        /// <returns></returns>
        public IEnumerable <MarketItemArgument> SearchMarketForOwner(Character target)
        {
            MySqlConnection connection = ConnectionPool.Request();
            MySqlCommand    command    = new MySqlCommand(_query_09, connection);

            command.Parameters.AddWithValue("?CharId", target.ModelId);
            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);
            }
        }
        public void Add(MarketItemArgument item)
        {
            int index = this.data.Length;

            Array.Resize <byte>(ref this.data, 2 + (++this.data[1] * 75));
            Rag2Item.Serialize(item.item, this.data, index + 0);
            Array.Copy(BitConverter.GetBytes(item.price), 0, this.data, index + 66, 4);
            this.data[index + 70] = (byte)Math.Max(0, (item.expires - DateTime.Now).TotalHours);
            Array.Copy(BitConverter.GetBytes(item.id), 0, this.data, index + 71, 4);
        }
Esempio n. 4
0
        public void Add(MarketItemArgument c)
        {
            int index = this.data.Length - 112;

            Rag2Item.Serialize(c.item, this.data, index);
            Array.Copy(BitConverter.GetBytes(c.id), 0, this.data, index + 66, 4);
            UnicodeEncoding.Unicode.GetBytes(c.sender, 0, c.sender.Length, this.data, index + 70);
            Array.Copy(BitConverter.GetBytes(c.price), 0, this.data, index + 104, 4); //Price
            Array.Copy(BitConverter.GetBytes(c.id), 0, this.data, index + 108, 4);
        }
Esempio n. 5
0
 uint IDatabase.RegisterNewMarketItem(Character target, MarketItemArgument arg)
 {
     return(RegisterNewMarketItem(target, arg));
 }
Esempio n. 6
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);
            }
        }
Esempio n. 7
0
        /// <summary>
        /// Registers a item from your inventory onto the market.
        /// </summary>
        /// <param name="cpkt"></param>
        private void CM_MARKET_REGISTERITEM(CMSG_MARKETREGISTER cpkt)
        {
            SMSG_MARKETREGISTER spkt = new SMSG_MARKETREGISTER();
            byte result = 0;

            try
            {
                Rag2Item item = this.character.container[cpkt.Index];
                if (item == null)
                {
                    return;
                }
                uint requiredZeny = (uint)(50 * cpkt.Days);

                //NOT ENOUGH MONEY TO REGISTER ITEM
                if (requiredZeny > this.character.ZENY)
                {
                    result = 6;
                }
                //CHECK REGISTERED ITEM COUNT
                else if (Singleton.Database.GetOwnerItemCount(this.character) == 20)
                {
                    result = 8;
                }
                //EVERYTHING OKAY
                else
                {
                    //Create mail argument

                    Rag2Item           bitem    = item.Clone(cpkt.Count);
                    MarketItemArgument argument = new MarketItemArgument();
                    argument.item     = bitem;
                    argument.expires  = DateTime.Now.AddDays(cpkt.Days);
                    argument.cat      = (byte)item.info.categorie;
                    argument.price    = cpkt.Price;
                    argument.sender   = this.character.Name;
                    argument.itemname = item.info.name;
                    argument.id       = Singleton.Database.RegisterNewMarketItem(this.character, argument);

                    spkt.Item       = bitem;
                    spkt.AuctionID  = argument.id;
                    spkt.Zeny       = cpkt.Price;
                    spkt.ExpireDate = argument.expires;

                    this.character.ZENY -= requiredZeny;
                    CommonFunctions.UpdateZeny(this.character);

                    int newCount = item.count - cpkt.Count;
                    if (newCount > 0)
                    {
                        item.count = newCount;
                        SMSG_UPDATEITEM spkt2 = new SMSG_UPDATEITEM();
                        spkt2.Index        = cpkt.Index;
                        spkt2.UpdateReason = (byte)ItemUpdateReason.AuctionRegister;
                        spkt2.UpdateType   = 4;
                        spkt2.SessionId    = this.character.id;
                        spkt2.Amount       = (byte)item.count;
                        spkt2.Container    = 2;
                        this.Send((byte[])spkt2);
                    }
                    else
                    {
                        this.character.container.RemoveAt(cpkt.Index);
                        SMSG_DELETEITEM spkt2 = new SMSG_DELETEITEM();
                        spkt2.Index        = cpkt.Index;
                        spkt2.UpdateReason = (byte)ItemUpdateReason.AuctionRegister;
                        spkt2.UpdateReason = 4;
                        spkt2.SessionId    = this.character.id;
                        spkt2.Container    = 2;
                        this.Send((byte[])spkt2);
                    }
                }
            }
            //DATABASE ERROR
            catch (Exception e)
            {
                result = 1;
                Console.WriteLine(e);
            }
            finally
            {
                spkt.SessionId = this.character.id;
                spkt.Result    = result;
                this.Send((byte[])spkt);
            }
        }