public static void CancelTradeOrder(Mobile from, TradeOrderCrate crate) { if (from == null) { from = crate.Owner; } if (from != null) { var items = new List <Item>(crate.Items); for (int i = 0; i < items.Count; i++) { from.Backpack.DropItem(items[i]); } ColUtility.Free(items); if (from is PlayerMobile pm) { CityTradeEntry entry = CityLoyaltySystem.CityTrading.GetPlayerEntry <CityTradeEntry>(pm, true); if (entry != null) { entry.Canceled++; } } } crate.Delete(); }
public bool TryTurnInToSlim(Mobile from, TradeOrderCrate order, SlimTheFence slim) { if (order == null || from == null || slim == null || order.Entry == null) { return(false); } TradeEntry entry = order.Entry; if (!order.Fulfilled) { slim.SayTo(from, 1151732); // This trade order has not been fulfilled. Fill the trade order with all necessary items and try again. } else { CityLoyaltySystem.OnSlimTradeComplete(from, order.Entry); CityTradeEntry pentry = GetPlayerEntry <CityTradeEntry>(from as PlayerMobile, true); if (pentry != null) { pentry.Points++; pentry.DistanceTraveled += entry.Distance; pentry.CompletedSlim++; CheckTitle(pentry); } slim.SayTo(from, 1151736); // Haha! These goods will fetch me quite a bit o' coin! Thanks fer yer help! Here's a little something I was able to get me hands on... order.Delete(); return(true); } return(false); }
public bool TryOfferTrade(Mobile from, TradeMinister minister) { if (from == null || from.Backpack == null) { return(true); } if (ActiveTrades.ContainsKey(from)) { minister.SayTo(from, 1151722); // It appears you are already delivering a trade order. Deliver your current order before requesting another. } else { City origin = minister.City; City destination; do { destination = CityLoyaltySystem.GetRandomCity(); }while (destination == origin); int distance = GetDistance(minister, destination); int trades = Utility.RandomMinMax(1, GetMaxTrades(from)); TradeEntry entry = new TradeEntry(destination, origin, distance); TradeOrderCrate crate = new TradeOrderCrate(from, entry); GetPlayerEntry <CityTradeEntry>(from as PlayerMobile, true); for (int i = 0; i < trades; i++) { int worth = 1; string name = null; Type t = GetRandomTrade(origin, destination, ref worth, ref name); if (t != null) { int amount = Utility.RandomList(5, 10, 15, 20); entry.Details.Add(new TradeEntry.TradeDetails(t, worth, amount, name)); } else { minister.SayTo(from, "There are no trades available at this time."); return(false); } } if (from.Backpack == null || !from.Backpack.TryDropItem(from, crate, false)) { crate.Delete(); from.SendLocalizedMessage(114456); // Your backpack cannot hold the Trade Order. Free up space and speak to the Trade Minister again. } ActiveTrades[from] = crate; return(true); } return(false); }
public bool TryTurnIn(Mobile from, TradeOrderCrate order, Mobile turninMobile) { if (order == null || from == null || turninMobile == null || order.Entry == null) { return(false); } TradeEntry entry = order.Entry; TradeMinister minister = turninMobile as TradeMinister; if (from.AccessLevel == AccessLevel.Player && minister != null && minister.City != entry.Destination) { turninMobile.SayTo(from, 1151738, string.Format("#{0}", CityLoyaltySystem.GetCityLocalization(entry.Destination))); // Begging thy pardon, but those goods are destined for the City of ~1_city~ } else if (!order.Fulfilled) { turninMobile.SayTo(from, 1151732); // This trade order has not been fulfilled. Fill the trade order with all necessary items and try again. } else { CityLoyaltySystem.OnTradeComplete(from, order.Entry); CityTradeEntry pentry = GetPlayerEntry <CityTradeEntry>(from as PlayerMobile); if (pentry != null) { pentry.Points++; pentry.DistanceTraveled += entry.Distance; pentry.Completed++; CheckTitle(pentry); } order.Delete(); return(true); } return(false); }
public static void CancelTradeOrder(Mobile from, TradeOrderCrate crate) { if (from == null) { from = crate.Owner; } if (from != null) { crate.Items.ForEach(i => { from.Backpack.DropItem(i); }); CityTradeEntry entry = CityLoyaltySystem.CityTrading.GetPlayerEntry <CityTradeEntry>(from as PlayerMobile, true); if (entry != null) { entry.Canceled++; } } crate.Delete(); }
public bool TryOfferTrade(Mobile from, TradeMinister minister) { if (from == null || from.Backpack == null) { return(true); } if (ActiveTrades.ContainsKey(from)) { minister.SayTo(from, 1151722); // It appears you are already delivering a trade order. Deliver your current order before requesting another. } else if (KrampusEncounterActive && (KrampusEvent.Instance.Krampus != null || KrampusEvent.Instance.KrampusSpawning)) { Point3D p = KrampusEvent.Instance.SpawnLocation; Map map = KrampusEvent.Instance.SpawnMap; minister.SayTo( from, 1158790, string.Format("{0}\t{1}", WorldLocationInfo.GetLocationString(p, map), Sextant.GetCoords(p, map)), 1150); // Take notice! The vile Krampus has been spotted near ~2_where~ at ~1_coords~! New Trade Orders are suspended until Krampus has been defeated! } else { City origin = minister.City; City destination; do { destination = CityLoyaltySystem.GetRandomCity(); }while (destination == origin); int distance = GetDistance(minister, destination); int trades = Utility.RandomMinMax(1, GetMaxTrades(from)); TradeEntry entry = new TradeEntry(destination, origin, distance); TradeOrderCrate crate = new TradeOrderCrate(from, entry); GetPlayerEntry <CityTradeEntry>(from as PlayerMobile, true); for (int i = 0; i < trades; i++) { int worth = 1; string name = null; Type t = GetRandomTrade(origin, destination, ref worth, ref name); if (t != null) { if (entry.Details.Any(x => x.ItemType.Name == t.Name)) { continue; } int amount = Utility.RandomList(5, 10, 15, 20); entry.Details.Add(new TradeEntry.TradeDetails(t, worth, amount, name)); } else { minister.SayTo(from, "There are no trades available at this time."); return(false); } } if (from.Backpack == null || !from.Backpack.TryDropItem(from, crate, false)) { crate.Delete(); from.SendLocalizedMessage(114456); // Your backpack cannot hold the Trade Order. Free up space and speak to the Trade Minister again. } ActiveTrades[from] = crate; return(true); } return(false); }