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); }
uint IDatabase.RegisterNewMarketItem(Character target, MarketItemArgument arg) { return RegisterNewMarketItem(target, arg); }
/// <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; }