public static void do_auction(CharacterInstance ch, string argument, IAuctionManager auctionManager = null) { if (ch.IsNpc()) { return; } ch.SetColor(ATTypes.AT_LBLUE); if (CheckFunctions.CheckIfTrue(ch, ch.Level < GameConstants.GetSystemValue <int>("MinimumAuctionLevel"), "You need to gain more experience to use the auction...")) { return; } // TODO: Do we really want time restrictions on auctions? var firstArg = argument.FirstWord(); if (firstArg.IsNullOrEmpty()) { ReviewAuction(ch, auctionManager); } if (ch.IsImmortal() && firstArg.EqualsIgnoreCase("stop")) { StopAuction(ch, "Sale of {0} has been stopped by an Immortal.", auctionManager); } if (firstArg.EqualsIgnoreCase("bid")) { PlaceBid(ch, argument, auctionManager); } PlaceItemForAuction(ch, argument, auctionManager); }
public static void StopAuction(CharacterInstance ch, string argument, IAuctionManager auctionManager) { if (CheckFunctions.CheckIfNullObject(ch, (auctionManager ?? AuctionManager.Instance).Auction, "There is no auction to stop.")) { return; } ch.SetColor(ATTypes.AT_LBLUE); var auction = (auctionManager ?? AuctionManager.Instance).Auction; ChatManager.talk_auction(string.Format(argument, auction.ItemForSale.ShortDescription)); auction.ItemForSale.AddTo(auction.Seller); if (GameManager.Instance.SystemData.SaveFlags.IsSet(AutoSaveFlags.Auction)) { save.save_char_obj(auction.Seller); } if (auction.Buyer != null && auction.Buyer != auction.Seller) { auction.Buyer.CurrentCoin += auction.BidAmount; auction.Buyer.SendTo("Your money has been returned."); } (auctionManager ?? AuctionManager.Instance).StopAuction(); }
public OrderGenerator(IAuctionManager auctionManager) { _auctionManager = auctionManager; }
private static void PlaceItemForAuction(CharacterInstance ch, string argument, IAuctionManager auctionManager) { var firstArg = argument.FirstWord(); var obj = ch.GetCarriedObject(firstArg); if (CheckFunctions.CheckIfNullObject(ch, obj, "You aren't carrying that.")) { return; } if (CheckFunctions.CheckIfTrue(ch, obj.Timer > 0, "You can't auction objects that are decaying.")) { return; } if (CheckFunctions.CheckIfSet(ch, obj.ExtraFlags, (int)ItemExtraFlags.Personal, "Personal items may not be auctioned.")) { return; } if (CheckFunctions.CheckIfTrue(ch, (auctionManager ?? AuctionManager.Instance).Repository.History.Any(x => x.ItemForSale == obj.ObjectIndex.ID), "Such an item has been auctioned recently, try again later.")) { return; } var secondArg = argument.SecondWord(); if (CheckFunctions.CheckIfEmptyString(ch, secondArg, "Auction it for what?")) { return; } if (CheckFunctions.CheckIfTrue(ch, !secondArg.IsNumber(), "You must input a number at which to start the auction.")) { return; } var startingBid = secondArg.ToInt32(); if (CheckFunctions.CheckIfTrue(ch, startingBid <= 0, "You can't auction something for nothing!")) { return; } if ((auctionManager ?? AuctionManager.Instance).Auction != null) { comm.act(ATTypes.AT_TELL, "Try again later - $p is being auctioned right now!", ch, (auctionManager ?? AuctionManager.Instance).Auction.ItemForSale, null, ToTypes.Character); if (!ch.IsImmortal()) { Macros.WAIT_STATE(ch, GameConstants.GetSystemValue <int>("PulseViolence")); } return; } if (!obj.HasAttribute <AuctionableAttribute>()) { comm.act(ATTypes.AT_TELL, "You cannot auction $Ts.", ch, null, obj.GetItemTypeName(), ToTypes.Character); return; } obj.Split(); obj.RemoveFrom(); if (GameManager.Instance.SystemData.SaveFlags.IsSet(AutoSaveFlags.Auction)) { save.save_char_obj(ch); } (auctionManager ?? AuctionManager.Instance).StartAuction(ch, obj, startingBid); ChatManager.talk_auction($"A new item is being auctioned: {obj.ShortDescription} at {startingBid} coin."); }
private static void ReviewAuction(CharacterInstance ch, IAuctionManager auctionManager) { if (CheckFunctions.CheckIfNullObject(ch, (auctionManager ?? AuctionManager.Instance).Auction, "There is nothing being auctioned right now. What would you like to auction?")) { return; } ch.SetColor(ATTypes.AT_BLUE); ch.SendTo("Auctions:"); var auction = (auctionManager ?? AuctionManager.Instance).Auction; if (auction.BidAmount > 0) { ch.Printf("Current bid on this item is %s coin.", auction.BidAmount); } else { ch.SendTo("No bids on this item have been received."); } ch.SetColor(ATTypes.AT_LBLUE); ch.Printf("Object '%s' is %s, special properties: %s\r\nIts weight is %d, value is %d, and level is %d.", auction.ItemForSale.Name, auction.ItemForSale.Name.AOrAn(), auction.ItemForSale.ExtraFlags.ToString(), auction.ItemForSale.Weight, auction.ItemForSale.Cost, auction.ItemForSale.Level); if (auction.ItemForSale.WearLocation != WearLocations.Light) { ch.Printf("Item's wear location: %s", auction.ItemForSale.WearLocation); } ch.SetColor(ATTypes.AT_BLUE); if (DisplayTable.ContainsKey(auction.ItemForSale.ItemType)) { DisplayTable[auction.ItemForSale.ItemType].Invoke(ch, auction.ItemForSale); } foreach (var af in auction.ItemForSale.ObjectIndex.Affects) { handler.showaffect(ch, af); } foreach (var af in auction.ItemForSale.Affects) { handler.showaffect(ch, af); } if ((auction.ItemForSale.ItemType == ItemTypes.Container || auction.ItemForSale.ItemType == ItemTypes.KeyRing || auction.ItemForSale.ItemType == ItemTypes.Quiver) && auction.ItemForSale.Contents.Any()) { ch.SetColor(ATTypes.AT_OBJECT); ch.SendTo("Contents:"); act_info.show_list_to_char(auction.ItemForSale.Contents.ToList(), (PlayerInstance)ch, true, false); } if (ch.IsImmortal()) { ch.Printf("Seller: %s. Bidder: %s. Round: %d,", auction.Seller.Name, auction.Buyer.Name, auction.GoingCounter + 1); ch.Printf("Time left in round: %d.", auction.PulseFrequency); } }
private static void PlaceBid(CharacterInstance ch, string argument, IAuctionManager auctionManager) { if (CheckFunctions.CheckIfNullObject(ch, (auctionManager ?? AuctionManager.Instance).Auction, "There isn't anything being auctioned right now.")) { return; } var auction = (auctionManager ?? AuctionManager.Instance).Auction; if (CheckFunctions.CheckIfTrue(ch, ch.Level < auction.ItemForSale.Level, "This object's level is too high for your use.")) { return; } if (CheckFunctions.CheckIfEquivalent(ch, ch, auction.Seller, "You can't bid on your own item!")) { return; } var secondArg = argument.SecondWord(); if (CheckFunctions.CheckIfEmptyString(ch, secondArg, "Bid how much?")) { return; } var bid = Program.parsebet(auction.BidAmount, secondArg); if (CheckFunctions.CheckIfTrue(ch, bid < auction.StartingBid, "You must place a bid that is higher than the starting bet.")) { return; } if (CheckFunctions.CheckIfTrue(ch, bid < auction.BidAmount + 10000, "You must bid at least 10,000 coins over the current bid.")) { return; } if (CheckFunctions.CheckIfTrue(ch, bid < ch.CurrentCoin, "You don't have that much money!")) { return; } if (CheckFunctions.CheckIfTrue(ch, bid > GameConstants.GetSystemValue <int>("MaximumAuctionBid"), $"You can't bid over {GameConstants.GetSystemValue<int>("MaximumAuctionBid")} coins.")) { return; } var thirdArg = argument.ThirdWord(); if (CheckFunctions.CheckIfTrue(ch, thirdArg.IsNullOrEmpty() || auction.ItemForSale.Name.IsAnyEqual(thirdArg), "That item is not being auctioned right now.")) { return; } if (auction.Buyer != null && auction.Buyer != auction.Seller) { auction.Buyer.CurrentCoin += auction.BidAmount; } ch.CurrentCoin -= bid; if (GameManager.Instance.SystemData.SaveFlags.IsSet(AutoSaveFlags.Auction)) { save.save_char_obj(ch); } (auctionManager ?? AuctionManager.Instance).PlaceBid(ch, bid); ChatManager.talk_auction($"A bid of {bid} coin has been received on {auction.ItemForSale.ShortDescription}."); }
public AuctionHub(IAuctionManager auctionManager, UserManager userManager) { _auctionManager = auctionManager; _userManager = userManager; }
public AuctionAppService(IAuctionManager auctionManager) { _auctionManager = auctionManager; }
public static void Extract(this ObjectInstance obj, IAuctionManager auctionManager = null) { if (handler.obj_extracted(obj)) { throw new ObjectAlreadyExtractedException("Object {0}", obj.ObjectIndex.ID); } if (obj.ItemType == ItemTypes.Portal) { update.remove_portal(obj); } if (AuctionManager.Instance.Auction.ItemForSale == obj) { SmaugCS.Commands.Auction.StopAuction((auctionManager ?? AuctionManager.Instance).Auction.Seller, "Sale of {0} has been stopped by a system action.", auctionManager); } if (obj.CarriedBy != null) { obj.RemoveFrom(); } else if (obj.InRoom != null) { obj.InRoom.RemoveFrom(obj); } else { obj.InObject.RemoveFrom(obj); } var objContent = obj.Contents.Last(); objContent?.Extract(); obj.Affects.Clear(); obj.ExtraDescriptions.Clear(); //trworld_obj_check(obj); foreach (var relation in db.RELATIONS .Where(relation => relation.Types == RelationTypes.OSet_On)) { if (obj == (ObjectInstance)relation.Subject) { relation.Actor.CastAs <CharacterInstance>().DestinationBuffer = null; } else { continue; } db.RELATIONS.Remove(relation); } RepositoryManager.Instance.OBJECTS.CastAs <Repository <long, ObjectInstance> >().Delete(obj.ID); handler.queue_extracted_obj(obj); obj.ObjectIndex.Count -= obj.Count; if (obj != handler.CurrentObject) { return; } handler.CurrentObjectExtracted = true; if (handler.GlobalObjectCode == ReturnTypes.None) { handler.GlobalObjectCode = ReturnTypes.ObjectExtracted; } }
public static ObjectInstance GroupWith(this ObjectInstance obj1, ObjectInstance obj2, IAuctionManager auctionManager = null) { if (obj1 == null || obj2 == null) { return(null); } if (obj1 == obj2) { return(obj1); } if (obj1.ObjectIndex == obj2.ObjectIndex && obj1.Name.EqualsIgnoreCase(obj2.Name) && obj1.ShortDescription.EqualsIgnoreCase(obj2.ShortDescription) && obj1.Description.EqualsIgnoreCase(obj2.Description) && obj1.Owner.EqualsIgnoreCase(obj2.Owner) && obj1.ItemType == obj2.ItemType && obj1.ExtraFlags == obj2.ExtraFlags && obj1.MagicFlags == obj2.MagicFlags && obj1.WearFlags == obj2.WearFlags && obj1.WearLocation == obj2.WearLocation && obj1.Weight == obj2.Weight && obj1.Cost == obj2.Cost && obj1.Level == obj2.Level && obj1.Timer == obj2.Timer && obj1.Value.ToList()[0] == obj2.Value.ToList()[0] && obj1.Value.ToList()[1] == obj2.Value.ToList()[1] && obj1.Value.ToList()[2] == obj2.Value.ToList()[2] && obj1.Value.ToList()[3] == obj2.Value.ToList()[3] && obj1.Value.ToList()[4] == obj2.Value.ToList()[4] && obj1.Value.ToList()[5] == obj2.Value.ToList()[5] && obj1.ExtraDescriptions.SequenceEqual(obj2.ExtraDescriptions) && obj1.Affects.SequenceEqual(obj2.Affects) && obj1.Contents.SequenceEqual(obj2.Contents) && obj1.Count + obj2.Count > 0) { obj1.Count += obj2.Count; obj1.ObjectIndex.Count += obj2.Count; obj2.Extract(auctionManager ?? AuctionManager.Instance); return(obj1); } return(obj2); }