public async Task <Stream> GetWidgetAsync(LootWidgetOptions lootWidgetOptions) { var headerStream = ResourceExtensions.GetStreamCopy(typeof(Program), "RS3Bot.Cli.Images.Loot_Head.png"); using (var headerImage = Image.FromStream(headerStream)) using (var footerStream = ResourceExtensions.GetStreamCopy(typeof(Program), "RS3Bot.Cli.Images.Loot_Footer.png")) using (var footerImage = Image.FromStream(footerStream)) { var rowAmount = (int)Math.Ceiling(lootWidgetOptions.Items.Count / (double)MaxRowSize); var headerHeight = headerImage.Height; using (var lootImage = new Bitmap(headerImage.Width, headerHeight + (rowAmount * RowHeight) + FooterHeight)) using (var font = new Font(_fontCollection.Families[0], 8)) using (var titleFont = new Font(_fontCollection.Families[0], 12)) using (var rowStream = ResourceExtensions.GetStreamCopy(typeof(Program), "RS3Bot.Cli.Images.Loot_Row.png")) using (var rowImage = Image.FromStream(rowStream)) using (Graphics g = Graphics.FromImage(lootImage)) { g.DrawImage(headerImage, 0, 0); for (int i = 0; i < lootWidgetOptions.Items.Count; i++) { var row = (int)Math.Floor(i / (double)MaxRowSize); var addNewRow = i % MaxRowSize == 0; var itemX = 20 + ((i % MaxRowSize) * 45); var itemY = 45 + (row * RowHeight); var item = lootWidgetOptions.Items[i]; if (addNewRow) { g.DrawImage(rowImage, 0, headerHeight + (row * RowHeight)); } using (var itemStream = await _imageGrabber.GetAsync(item.Item.ItemId)) using (var imageStream = Image.FromStream(itemStream)) using (SolidBrush drawBrush = new SolidBrush(StackFormatter.GetColor(item.Item.Amount))) { var horizontalCenter = itemY + ((32 - imageStream.Height) / 2); var verticalCenter = itemX + ((32 - imageStream.Width) / 2); g.DrawImage(imageStream, verticalCenter, horizontalCenter, imageStream.Width, imageStream.Height); g.DrawString(StackFormatter.QuantityToRSStackSize((long)item.Item.Amount), font, drawBrush, itemX - 7, itemY - 4); } } g.DrawImage(footerImage, 0, lootImage.Height - FooterHeight); headerStream.Position = 0; lootImage.Save(headerStream, System.Drawing.Imaging.ImageFormat.Png); headerStream.Position = 0; } return(headerStream); } }
public async Task <Stream> GetWidgetAsync(EquipmentWidgetOptions args) { var gridSpacing = 39; var helmetX = 90; var helmetY = 81; var amuletX = 90; var amuletY = helmetY + gridSpacing; var bodyX = 90; var bodyY = amuletY + gridSpacing; var weaponX = 29; var weaponY = bodyY; var helmetId = args.Items.FirstOrDefault(t => t.EquipmentSlot == EquipmentConstants.Hat); var amuletId = args.Items.FirstOrDefault(t => t.EquipmentSlot == EquipmentConstants.Amulet); var weaponId = args.Items.FirstOrDefault(t => t.EquipmentSlot == EquipmentConstants.Weapon); var equipmentBgStream = ResourceExtensions.GetStreamCopy(typeof(Program), "RS3Bot.Cli.Images.Equipment.png"); using (var equipmentImage = Image.FromStream(equipmentBgStream)) using (var bitmap = new Bitmap(equipmentImage)) using (Graphics g = Graphics.FromImage(bitmap)) { if (helmetId != null) { await DrawItem(g, helmetId.Item.ItemId, helmetX, helmetY); } if (amuletId != null) { await DrawItem(g, amuletId.Item.ItemId, amuletX, amuletY); } if (weaponId != null) { await DrawItem(g, weaponId.Item.ItemId, weaponX, weaponY); } equipmentBgStream.Position = 0; bitmap.Save(equipmentBgStream, ImageFormat.Png); equipmentBgStream.Position = 0; return(equipmentBgStream); } }
private static void Start() { using (var itemList = ResourceExtensions.GetStreamCopy(typeof(Program), "RS3Bot.Cli.Data.ItemList.txt")) using (var streamReader = new StreamReader(itemList)) { string line = null; while ((line = streamReader.ReadLine()) != null) { var data = line.Split(" - "); int id = int.Parse(data[0]); var name = data[1]; _definitions[id] = new ItemDefinition { Name = name }; } } }
private void AddRsFonts(IServiceCollection services) { _fontCollection = new PrivateFontCollection(); byte[] fontdata = null; using (var fontStream = ResourceExtensions.GetStreamCopy(typeof(CliParser), "RS3Bot.Cli.Fonts.trajan.otf")) { fontdata = new byte[fontStream.Length]; fontStream.Read(fontdata, 0, (int)fontStream.Length); fontStream.Close(); } unsafe { fixed(byte *pFontData = fontdata) { _fontCollection.AddMemoryFont((IntPtr)pFontData, fontdata.Length); } } services.AddSingleton(_fontCollection); }
public async Task <Stream> GetWidgetAsync(ShopWidgetOptions lootWidgetOptions) { var headerStream = ResourceExtensions.GetStreamCopy(typeof(Program), "RS3Bot.Cli.Images.Shop_Header.png"); using (var headerImage = Image.FromStream(headerStream)) using (var footerStream = ResourceExtensions.GetStreamCopy(typeof(Program), "RS3Bot.Cli.Images.Shop_Footer.png")) using (var footerImage = Image.FromStream(footerStream)) { var rowAmount = (int)Math.Ceiling(lootWidgetOptions.Items.Count / (double)MaxRowSize); var headerHeight = headerImage.Height; using (var lootImage = new Bitmap(headerImage.Width, headerHeight + (rowAmount * YSpacing) + FooterHeight)) using (var font = new Font(_fontCollection.Families[0], 8)) using (var shopItem = ResourceExtensions.GetStreamCopy(typeof(Program), "RS3Bot.Cli.Images.Shop_Item.png")) using (var rowStream = ResourceExtensions.GetStreamCopy(typeof(Program), "RS3Bot.Cli.Images.Shop_Row.png")) using (var rowImage = Image.FromStream(rowStream)) using (var shopItemImage = Image.FromStream(shopItem)) using (var titleFont = new Font(_fontCollection.Families[0], 40)) using (Graphics g = Graphics.FromImage(lootImage)) { g.DrawImage(headerImage, 0, 0); g.DrawString(lootWidgetOptions.Title, font, Brushes.Gold, 26, 12); for (int i = 0; i < lootWidgetOptions.Items.Count; i++) { var row = (int)Math.Floor(i / (double)MaxRowSize); var addNewRow = i % MaxRowSize == 0; var itemX = 30 + ((i % MaxRowSize) * XSpacing); var itemY = 80 + (row * YSpacing); var item = lootWidgetOptions.Items[i]; if (addNewRow) { g.DrawImage(rowImage, 0, headerHeight + (row * YSpacing)); } using (var itemStream = await _imageGrabber.GetAsync(item.Item.ItemId)) using (var imageStream = Image.FromStream(itemStream)) using (SolidBrush drawBrush = new SolidBrush(StackFormatter.GetColor(item.Item.Amount))) { var itemName = ItemDefinition.GetItemName(item.Item.ItemId); var itemNameLines = Split(itemName, MaxItemChar); var horizontalCenter = itemY + ((32 - imageStream.Height) / 2); var verticalCenter = itemX + ((32 - imageStream.Width) / 2); g.DrawImage(shopItemImage, itemX - 20, itemY - 15); g.DrawImage(imageStream, verticalCenter, horizontalCenter, imageStream.Width, imageStream.Height); g.DrawString(StackFormatter.QuantityToRSStackSize((long)item.Item.Amount), font, drawBrush, itemX - 7, itemY - 4); g.DrawString(itemName, font, Brushes.White, new RectangleF(new PointF(itemX + 34f, itemY - 0f), new SizeF(95, 36))); var amountStr = StackFormatter.QuantityToRSStackSize(item.Price); var amountMeasure = g.MeasureString(amountStr, font); g.DrawString(amountStr, font, Brushes.White, itemX + 113 - (amountMeasure.Width / 2), itemY + 26); } } g.DrawImage(footerImage, 0, lootImage.Height - FooterHeight); headerStream.Position = 0; lootImage.Save(headerStream, System.Drawing.Imaging.ImageFormat.Png); headerStream.Position = 0; } return(headerStream); } }
public async Task <Stream> GetWidgetAsync(BankWidgetOptions bankWidgetOptions) { var memoryStream = ResourceExtensions.GetStreamCopy(typeof(Program), "RS3Bot.Cli.Images.Bank_Interface.png"); using (var backInterface = new Bitmap(Image.FromStream(memoryStream))) { var bankInterfaceHeight = backInterface.Height; int amountCount = 0; // Set format of string. StringFormat drawFormat = new StringFormat(); drawFormat.FormatFlags = StringFormatFlags.NoWrap; var maxItemsPerRow = 12; var maxItemSquareSize = 32; using (var font = new Font(_fontCollection.Families[0], 8)) using (var titleFont = new Font(_fontCollection.Families[0], 12)) { using (Graphics g = Graphics.FromImage(backInterface)) { var bankTitle = bankWidgetOptions.Title; var size = g.MeasureString(bankTitle, titleFont); g.DrawString(bankTitle, titleFont, Brushes.Gold, 280 - (size.Width / 2), size.Height + 2); foreach (var item in bankWidgetOptions.Items) { using (var rawStream = await _itemImageGrabber.GetAsync(item.Item.ItemId)) { using (var imageStream = Image.FromStream(rawStream)) { using (SolidBrush drawBrush = new SolidBrush(StackFormatter.GetColor(item.Item.Amount))) { var row = (int)Math.Floor(amountCount / (double)maxItemsPerRow); var itemX = 18 + ((amountCount % maxItemsPerRow) * 45); int itemY = 55 + (row * 40); var horizontalCenter = itemY + ((maxItemSquareSize - imageStream.Height) / 2); var verticalCenter = itemX + ((maxItemSquareSize - imageStream.Width) / 2); g.DrawImage(imageStream, verticalCenter, horizontalCenter, imageStream.Width, imageStream.Height); g.DrawString(StackFormatter.QuantityToRSStackSize((long)item.Item.Amount), font, drawBrush, itemX - 5, itemY - 7, drawFormat); if (bankWidgetOptions.Options.ShowId) { g.DrawString(item.Item.ItemId.ToString(), font, Brushes.White, itemX - 10, itemY + 30, drawFormat); } amountCount += 1; } } } } } } memoryStream.Position = 0; backInterface.Save(memoryStream, System.Drawing.Imaging.ImageFormat.Png); memoryStream.Position = 0; return(memoryStream); } }