public VendorInventoryGump(BaseHouse house, Mobile from) : base(50, 50) { this.m_House = house; this.m_Inventories = new ArrayList(house.VendorInventories); this.AddBackground(0, 0, 420, 50 + 20 * this.m_Inventories.Count, 0x13BE); this.AddImageTiled(10, 10, 400, 20, 0xA40); this.AddHtmlLocalized(15, 10, 200, 20, 1062435, 0x7FFF, false, false); // Reclaim Vendor Inventory this.AddHtmlLocalized(330, 10, 50, 20, 1062465, 0x7FFF, false, false); // Expires this.AddImageTiled(10, 40, 400, 20 * this.m_Inventories.Count, 0xA40); for (int i = 0; i < this.m_Inventories.Count; i++) { VendorInventory inventory = (VendorInventory)this.m_Inventories[i]; int y = 40 + 20 * i; if (inventory.Owner == from) { this.AddButton(10, y, 0xFA5, 0xFA7, i + 1, GumpButtonType.Reply, 0); } this.AddLabel(45, y, 0x481, String.Format("{0} ({1})", inventory.ShopName, inventory.VendorName)); TimeSpan expire = inventory.ExpireTime - DateTime.UtcNow; int hours = (int)expire.TotalHours; this.AddLabel(320, y, 0x481, hours.ToString()); this.AddHtmlLocalized(350, y, 50, 20, 1062466, 0x7FFF, false, false); // hour(s) } }
public VendorInventoryGump(BaseHouse house, Mobile from) : base(50, 50) { m_House = house; m_Inventories = house.VendorInventories.ToList(); AddBackground(0, 0, 420, 50 + 20 * m_Inventories.Count, 0x13BE); AddImageTiled(10, 10, 400, 20, 0xA40); AddHtmlLocalized(15, 10, 200, 20, 1062435, 0x7FFF); // Reclaim Vendor Inventory AddHtmlLocalized(330, 10, 50, 20, 1062465, 0x7FFF); // Expires AddImageTiled(10, 40, 400, 20 * m_Inventories.Count, 0xA40); for (int i = 0; i < m_Inventories.Count; i++) { VendorInventory inventory = m_Inventories[i]; int y = 40 + 20 * i; if (inventory.Owner == from) { AddButton(10, y, 0xFA5, 0xFA7, i + 1); } AddLabel(45, y, 0x481, $"{inventory.ShopName} ({inventory.VendorName})"); TimeSpan expire = inventory.ExpireTime - DateTime.UtcNow; int hours = (int)expire.TotalHours; AddLabel(320, y, 0x481, hours.ToString()); AddHtmlLocalized(350, y, 50, 20, 1062466, 0x7FFF); // hour(s) } }
public void initialize(GameObject go) { if (logging) { Debug.Log("Called initialize() in " + this.gameObject.name.ToString()); } VendorInventory vendorInventory = go.GetComponent <VendorInventory>(); if (vendorInventory == null) { throw new System.Exception("ERROR: VendorInventory Script not attached to " + go.name.ToString()); } if (sellable == null) { throw new System.Exception("ERROR: Vendor inventory on " + go.name.ToString() + " has not been initialized"); } sellable = vendorInventory.vendorInventory; if (sellable.Length == 0) { if (logging) { Debug.Log("ERROR: Vendor inventory on " + go.name.ToString() + " has no items!"); } } global.GetComponent <GlobalVars>().processing += 1; for (int i = 0; i < items.items.Length; i++) { items.items[i].GetComponent <Text>().text = ""; } populate(); onCreateMain(); }
public void OnPointerClick(PointerEventData eventData) { vendorInventory = _item.GetComponentInParent <VendorInventory>(); playerInventory = _item.GetComponentInParent <PlayerInventory>(); if (playerInventory != null & _item.name != _playerInventory._inventoryDictionary[1]) { Methods(_playerInventory, _vendorInventory, _playerInventoryObject, _vendorInventoryObject); } if (vendorInventory != null & _item.name != _playerInventory._inventoryDictionary[1]) { Methods(_vendorInventory, _playerInventory, _vendorInventoryObject, _playerInventoryObject); } }
public override void OnResponse(NetState sender, RelayInfo info) { if (info.ButtonID == 0) { return; } Mobile from = sender.Mobile; HouseSign sign = this.m_House.Sign; if (this.m_House.Deleted || sign == null || sign.Deleted || !from.CheckAlive()) { return; } if (from.Map != sign.Map || !from.InRange(sign, 5)) { from.SendLocalizedMessage(1062429); // You must be within five paces of the house sign to use this option. return; } int index = info.ButtonID - 1; if (index < 0 || index >= this.m_Inventories.Count) { return; } VendorInventory inventory = (VendorInventory)this.m_Inventories[index]; if (inventory.Owner != from || !this.m_House.VendorInventories.Contains(inventory)) { return; } int totalItems = 0; int givenToBackpack = 0; int givenToBankBox = 0; for (int i = inventory.Items.Count - 1; i >= 0; i--) { Item item = inventory.Items[i]; if (item.Deleted) { inventory.Items.RemoveAt(i); continue; } totalItems += 1 + item.TotalItems; if (from.PlaceInBackpack(item)) { inventory.Items.RemoveAt(i); givenToBackpack += 1 + item.TotalItems; } else if (from.BankBox.TryDropItem(from, item, false)) { inventory.Items.RemoveAt(i); givenToBankBox += 1 + item.TotalItems; } } from.SendLocalizedMessage(1062436, totalItems.ToString() + "\t" + inventory.Gold.ToString()); // The vendor you selected had ~1_COUNT~ items in its inventory, and ~2_AMOUNT~ gold in its account. int givenGold = Banker.DepositUpTo(from, inventory.Gold); inventory.Gold -= givenGold; from.SendLocalizedMessage(1060397, givenGold.ToString()); // ~1_AMOUNT~ gold has been deposited into your bank box. from.SendLocalizedMessage(1062437, givenToBackpack.ToString() + "\t" + givenToBankBox.ToString()); // ~1_COUNT~ items have been removed from the shop inventory and placed in your backpack. ~2_BANKCOUNT~ items were removed from the shop inventory and placed in your bank box. if (inventory.Gold > 0 || inventory.Items.Count > 0) { from.SendLocalizedMessage(1062440); // Some of the shop inventory would not fit in your backpack or bank box. Please free up some room and try again. } else { inventory.Delete(); from.SendLocalizedMessage(1062438); // The shop is now empty of inventory and funds, so it has been deleted. } }
public void SendListInventory(ObjectGuid vendorGuid) { Creature vendor = GetPlayer().GetNPCIfCanInteractWith(vendorGuid, NPCFlags.Vendor); if (vendor == null) { Log.outDebug(LogFilter.Network, "WORLD: SendListInventory - {0} not found or you can not interact with him.", vendorGuid.ToString()); GetPlayer().SendSellError(SellResult.CantFindVendor, null, ObjectGuid.Empty); return; } // remove fake death if (GetPlayer().HasUnitState(UnitState.Died)) { GetPlayer().RemoveAurasByType(AuraType.FeignDeath); } // Stop the npc if moving if (vendor.HasUnitState(UnitState.Moving)) { vendor.StopMoving(); } VendorItemData vendorItems = vendor.GetVendorItems(); int rawItemCount = vendorItems != null?vendorItems.GetItemCount() : 0; VendorInventory packet = new VendorInventory(); packet.Vendor = vendor.GetGUID(); float discountMod = GetPlayer().GetReputationPriceDiscount(vendor); byte count = 0; for (uint slot = 0; slot < rawItemCount; ++slot) { VendorItem vendorItem = vendorItems.GetItem(slot); if (vendorItem == null) { continue; } VendorItemPkt item = new VendorItemPkt(); PlayerConditionRecord playerCondition = CliDB.PlayerConditionStorage.LookupByKey(vendorItem.PlayerConditionId); if (playerCondition != null) { if (!ConditionManager.IsPlayerMeetingCondition(_player, playerCondition)) { item.PlayerConditionFailed = (int)playerCondition.Id; } } if (vendorItem.Type == ItemVendorType.Item) { ItemTemplate itemTemplate = Global.ObjectMgr.GetItemTemplate(vendorItem.item); if (itemTemplate == null) { continue; } int leftInStock = vendorItem.maxcount == 0 ? -1 : (int)vendor.GetVendorItemCurrentCount(vendorItem); if (!GetPlayer().IsGameMaster()) { if (!Convert.ToBoolean(itemTemplate.GetAllowableClass() & GetPlayer().getClassMask()) && itemTemplate.GetBonding() == ItemBondingType.OnAcquire) { continue; } if ((itemTemplate.GetFlags2().HasAnyFlag(ItemFlags2.FactionHorde) && GetPlayer().GetTeam() == Team.Alliance) || (itemTemplate.GetFlags2().HasAnyFlag(ItemFlags2.FactionAlliance) && GetPlayer().GetTeam() == Team.Horde)) { continue; } if (leftInStock == 0) { continue; } } if (!Global.ConditionMgr.IsObjectMeetingVendorItemConditions(vendor.GetEntry(), vendorItem.item, _player, vendor)) { Log.outDebug(LogFilter.Condition, "SendListInventory: conditions not met for creature entry {0} item {1}", vendor.GetEntry(), vendorItem.item); continue; } int price = (int)(vendorItem.IsGoldRequired(itemTemplate) ? Math.Floor(itemTemplate.GetBuyPrice() * discountMod) : 0); int priceMod = GetPlayer().GetTotalAuraModifier(AuraType.ModVendorItemsPrices); if (priceMod != 0) { price -= MathFunctions.CalculatePct(price, priceMod); } item.MuID = (int)slot + 1; item.Durability = (int)itemTemplate.MaxDurability; item.ExtendedCostID = (int)vendorItem.ExtendedCost; item.Type = (int)vendorItem.Type; item.Quantity = leftInStock; item.StackCount = (int)itemTemplate.GetBuyCount(); item.Price = (ulong)price; item.DoNotFilterOnVendor = vendorItem.IgnoreFiltering; item.Item.ItemID = vendorItem.item; if (!vendorItem.BonusListIDs.Empty()) { item.Item.ItemBonus.HasValue = true; item.Item.ItemBonus.Value.BonusListIDs = vendorItem.BonusListIDs; } packet.Items.Add(item); } else if (vendorItem.Type == ItemVendorType.Currency) { CurrencyTypesRecord currencyTemplate = CliDB.CurrencyTypesStorage.LookupByKey(vendorItem.item); if (currencyTemplate == null) { continue; } if (vendorItem.ExtendedCost == 0) { continue; // there's no price defined for currencies, only extendedcost is used } item.MuID = (int)slot + 1; // client expects counting to start at 1 item.ExtendedCostID = (int)vendorItem.ExtendedCost; item.Item.ItemID = vendorItem.item; item.Type = (int)vendorItem.Type; item.StackCount = (int)vendorItem.maxcount; item.DoNotFilterOnVendor = vendorItem.IgnoreFiltering; packet.Items.Add(item); } else { continue; } if (++count >= SharedConst.MaxVendorItems) { break; } } SendPacket(packet); }
public static void Run() { List <Item> items = new List <Item>(); List <Item> validItems = new List <Item>(); List <Mobile> hairCleanup = new List <Mobile>(); int boxes = 0; foreach (Item item in World.Items.Values) { if (item.Map == null) { items.Add(item); continue; } if (item is CommodityDeed deed) { if (deed.Commodity != null) { validItems.Add(deed.Commodity); } continue; } if (item is BaseHouse house) { for (var index = 0; index < house.RelocatedEntities.Count; index++) { RelocatedEntity relEntity = house.RelocatedEntities[index]; if (relEntity.Entity is Item entity) { validItems.Add(entity); } } for (var index = 0; index < house.VendorInventories.Count; index++) { VendorInventory inventory = house.VendorInventories[index]; for (var i = 0; i < inventory.Items.Count; i++) { Item subItem = inventory.Items[i]; validItems.Add(subItem); } } } else if (item is BankBox box) { Mobile owner = box.Owner; if (owner == null) { items.Add(box); ++boxes; } else if (box.Items.Count == 0) { items.Add(box); ++boxes; } continue; } else if (item.Layer == Layer.Hair || item.Layer == Layer.FacialHair) { object rootParent = item.RootParent; if (rootParent is Mobile m) { if (item.Parent != m && m.IsPlayer()) { items.Add(item); continue; } if (item.Parent == m) { hairCleanup.Add(m); continue; } } } if (item.Parent != null || item.Map != Map.Internal || item.HeldBy != null) { continue; } if (item.Location != Point3D.Zero) { continue; } if (!IsBuggable(item)) { continue; } if (item is BaseBoat || item is BaseDockedBoat) { continue; } items.Add(item); } for (int i = 0; i < validItems.Count; ++i) { items.Remove(validItems[i]); } if (items.Count > 0) { if (boxes > 0) { Console.WriteLine("Cleanup: Detected {0} inaccessible items, including {1} bank boxes, removing..", items.Count, boxes); } else { Console.WriteLine("Cleanup: Detected {0} inaccessible items, removing..", items.Count); } for (int i = 0; i < items.Count; ++i) { Console.WriteLine(items[i].ToString()); items[i].Delete(); } } if (hairCleanup.Count > 0) { Console.WriteLine("Cleanup: Detected {0} hair and facial hair items being worn, converting to their virtual counterparts..", hairCleanup.Count); for (int i = 0; i < hairCleanup.Count; i++) { hairCleanup[i].ConvertHair(); } } }