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);
 }
 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);
 }
 /// <summary>
 /// Registers a new market item
 /// </summary>
 /// <param name="arg"></param>
 /// <returns></returns>
 public uint RegisterNewMarketItem(Character target, MarketItemArgument arg)
 {
     return InternalDatabaseProvider.RegisterNewMarketItem(target, arg);
 }
Beispiel #4
0
 uint IDatabase.RegisterNewMarketItem(Character target, MarketItemArgument arg)
 {
     return RegisterNewMarketItem(target, arg);
 }
Beispiel #5
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);
            }
        }
        /// <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);
            }
        }
        /// <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);
            }
        }
        /// <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;
        }