示例#1
0
        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);
                    }
        }
示例#2
0
        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);
                    }
        }
示例#3
0
 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
                 };
             }
         }
 }
示例#4
0
        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);
        }
示例#5
0
        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);
                    }
        }
示例#6
0
        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);
            }
        }