public static void HandleBuybackItemFromVendor(WorldSession session, ClientBuybackItemFromVendor buybackItemFromVendor) { BuybackItem buybackItem = BuybackManager.GetItem(session.Player, buybackItemFromVendor.UniqueId); if (buybackItem == null) { return; } //TODO Ensure player has room in inventory // do all sanity checks before modifying currency foreach ((CurrencyType currencyTypeId, ulong currencyAmount) in buybackItem.CurrencyChange) { if (!session.Player.CurrencyManager.CanAfford(currencyTypeId, currencyAmount)) { return; } } foreach ((CurrencyType currencyTypeId, ulong currencyAmount) in buybackItem.CurrencyChange) { session.Player.CurrencyManager.CurrencySubtractAmount(currencyTypeId, currencyAmount); } session.Player.Inventory.AddItem(buybackItem.Item, InventoryLocation.Inventory); BuybackManager.RemoveItem(session.Player, buybackItem); }
private static void Main() { Directory.SetCurrentDirectory(Path.GetDirectoryName(Assembly.GetEntryAssembly().Location)); Console.Title = Title; log.Info("Initialising..."); ConfigurationManager <WorldServerConfiguration> .Initialise("WorldServer.json"); DatabaseManager.Initialise(ConfigurationManager <WorldServerConfiguration> .Config.Database); GameTableManager.Initialise(); MapManager.Initialise(); SearchManager.Initialise(); EntityManager.Initialise(); EntityCommandManager.Initialise(); GlobalMovementManager.Initialise(); AssetManager.Initialise(); GlobalSpellManager.Initialise(); ServerManager.Initialise(); ResidenceManager.Initialise(); // make sure the assigned realm id in the configuration file exists in the database RealmId = ConfigurationManager <WorldServerConfiguration> .Config.RealmId; if (ServerManager.Servers.All(s => s.Model.Id != RealmId)) { throw new ConfigurationException($"Realm id {RealmId} in configuration file doesn't exist in the database!"); } MessageManager.Initialise(); SocialManager.Initialise(); CommandManager.Initialise(); NetworkManager <WorldSession> .Initialise(ConfigurationManager <WorldServerConfiguration> .Config.Network); WorldManager.Initialise(lastTick => { NetworkManager <WorldSession> .Update(lastTick); MapManager.Update(lastTick); ResidenceManager.Update(lastTick); BuybackManager.Update(lastTick); }); using (WorldServerEmbeddedWebServer.Initialise()) { log.Info("Ready!"); while (true) { Console.Write(">> "); string line = Console.ReadLine(); if (!CommandManager.HandleCommand(new ConsoleCommandContext(), line, false)) { Console.WriteLine("Invalid command"); } } } }
public static void HandleVendorSell(WorldSession session, ClientVendorSell vendorSell) { VendorInfo vendorInfo = session.Player.SelectedVendorInfo; if (vendorInfo == null) { return; } Item2Entry itemEntry = session.Player.Inventory.GetItem(vendorSell.ItemLocation).Entry; if (itemEntry == null) { return; } float costMultiplier = vendorInfo.SellPriceMultiplier * vendorSell.Quantity; // do all sanity checks before modifying currency var currencyChange = new List <(CurrencyType CurrencyTypeId, ulong CurrencyAmount)>(); for (int i = 0; i < itemEntry.CurrencyTypeIdSellToVendor.Length; i++) { CurrencyType currencyId = (CurrencyType)itemEntry.CurrencyTypeIdSellToVendor[i]; if (currencyId == CurrencyType.None) { continue; } ulong currencyAmount = (ulong)(itemEntry.CurrencyAmountSellToVendor[i] * costMultiplier); currencyChange.Add((currencyId, currencyAmount)); } // TODO Insert calculation for cost here foreach ((CurrencyType currencyTypeId, ulong currencyAmount) in currencyChange) { session.Player.CurrencyManager.CurrencyAddAmount(currencyTypeId, currencyAmount); } // TODO Figure out why this is showing "You deleted [item]" Item soldItem = session.Player.Inventory.ItemDelete(vendorSell.ItemLocation); BuybackManager.AddItem(session.Player, soldItem, vendorSell.Quantity, currencyChange); }