Example #1
0
        public static async Task <Bitmap> GetInvisibleDressingRoomDragon(DragonCache dragon)
        {
            var azureImageService = new AzureImageService();
            var apparelIds        = dragon.GetApparel();

            if (!apparelIds.Contains(22046))
            {
                apparelIds = apparelIds.Concat(new[] { 22046 }).ToArray();
            }

            var dressingRoomUrl = string.Format(DressingRoomDummyUrl, (int)dragon.DragonType, (int)dragon.Gender) + $"&apparel={string.Join(",", apparelIds)}";

            var azureUrl = $@"dragoncache\{dragon}_invisible.png";

            using (var client = new WebClient())
            {
                var invisibleDragonBytesTask = client.DownloadDataTaskAsync(dressingRoomUrl);

                var invisibleDwagonImageBytes = await invisibleDragonBytesTask;
                using (var memStream = new MemoryStream(invisibleDwagonImageBytes, false))
                    await azureImageService.WriteImage(azureUrl, memStream);

                using (var memStream = new MemoryStream(invisibleDwagonImageBytes, false))
                {
                    var invisibleDwagon = (Bitmap)Image.FromStream(memStream);
                    return(invisibleDwagon);
                }
            }
        }
Example #2
0
        public static async Task <Bitmap> GetDragonBaseImage(DragonCache dragon)
        {
            Bitmap dwagonImage;
            string azureUrl          = $@"dragoncache\{dragon.SHA1Hash}.png";
            var    azureImageService = new AzureImageService();

            if (await azureImageService.Exists(azureUrl) != null)
            {
                try
                {
                    using (var stream = await azureImageService.GetImage(azureUrl))
                        dwagonImage = (Bitmap)Image.FromStream(stream);
                    return(dwagonImage);
                }
                catch
                {
                }
            }

            using (var client = new WebClient())
            {
                var dwagonImageBytes = await client.DownloadDataTaskAsync(dragon.ConstructImageString() ?? string.Format(DressingRoomDummyUrl, (int)dragon.DragonType, (int)dragon.Gender));

                using (var memStream = new MemoryStream(dwagonImageBytes, false))
                    await azureImageService.WriteImage(azureUrl, memStream);

                using (var memStream = new MemoryStream(dwagonImageBytes, false))
                {
                    dwagonImage = (Bitmap)Image.FromStream(memStream);
                    return(dwagonImage);
                }
            }
        }
Example #3
0
    public void UpdateDragonState(DragonStateUpdate update)
    {
        if (update.NewDragonEquip != null)
        {
            Dragon newDragon = DragonCache.GetDragonByID(update.NewDragonEquip);
            if (newDragon == null)
            {
                Debug.LogError("Couldn't find dragon " + update.NewDragonEquip + " in cache");
            }
            else
            {
                SetDragon(newDragon);
            }
        }

        if (update.DragonHpChange != null)
        {
            DragonState.HP += (byte)update.DragonHpChange;
        }
        if (update.DragonEnergyChange != null)
        {
            DragonState.Energy += (byte)update.DragonEnergyChange;
        }
        if (update.DragonAttackChange != null)
        {
            DragonState.Attack += (byte)update.DragonAttackChange;
        }

        RefreshTextComponents();
    }
Example #4
0
 public bool CanEquipDragon(string dragonId)
 {
     return(DragonCache.TryGetDragonByID(dragonId));
 }
Example #5
0
        public static DragonCache ParseUrlForDragon(string dragonUrl, string skinId = null, int?version = null, bool forced = false)
        {
            var   dragon = new DragonCache();
            Match regexParse;

            if (dragonUrl.Contains("dgen/dressing-room/dragon"))
            {
                var dragonId = int.Parse(Regex.Match(dragonUrl, @"did=([\d]*)").Groups[1].Value);
                dragon            = GetDragonFromDragonId(dragonId);
                dragon.FRDragonId = dragonId;
                if ((regexParse = Regex.Match(dragonUrl, @"apparel=([\d,]*)")).Success)
                {
                    dragon.Apparel = regexParse.Groups[1].Value;
                }
                return(dragon);
            }

            if ((regexParse = Regex.Match(dragonUrl, @"gender=([\d]*)")).Success)
            {
                dragon.Gender = (Gender)int.Parse(regexParse.Groups[1].Value);
            }
            if ((regexParse = Regex.Match(dragonUrl, @"breed=([\d]*)")).Success)
            {
                dragon.DragonType = (DragonType)int.Parse(regexParse.Groups[1].Value);
            }
            if ((regexParse = Regex.Match(dragonUrl, @"auth=([a-z0-9]*)")).Success)
            {
                dragon.SHA1Hash = regexParse.Groups[1].Value;
            }
            else
            {
                if (skinId != null && version != null)
                {
                    dragon.SHA1Hash = $"DUMMY_{(int)dragon.DragonType}_{(int)dragon.Gender}_{skinId}_v{version}";
                }
                else
                {
                    dragon.SHA1Hash = $"DUMMY_{(int)dragon.DragonType}_{(int)dragon.Gender}";
                    Debug.WriteLine("Caching dummy image without skin info");
                }
            }

            if (forced || !Cache.TryGetValue(dragon.SHA1Hash, out var cachedDragon))
            {
                using (var ctx = new DataContext())
                {
                    var dbDragon = ctx.DragonCache.FirstOrDefault(x => x.SHA1Hash == dragon.SHA1Hash);
                    if (dbDragon != null)
                    {
                        dragon = dbDragon;
                    }
                    else
                    {
                        ctx.DragonCache.Add(dragon);
                    }
                    Cache[dragon.SHA1Hash] = dragon;

                    if ((regexParse = Regex.Match(dragonUrl, @"element=([\d]*)")).Success)
                    {
                        dragon.Element = (Element)int.Parse(regexParse.Groups[1].Value);
                    }
                    if ((regexParse = Regex.Match(dragonUrl, @"eyetype=([\d]*)")).Success)
                    {
                        dragon.EyeType = (EyeType)int.Parse(regexParse.Groups[1].Value);
                    }
                    if ((regexParse = Regex.Match(dragonUrl, @"bodygene=([\d]*)")).Success)
                    {
                        dragon.BodyGene = int.Parse(regexParse.Groups[1].Value);
                    }
                    if ((regexParse = Regex.Match(dragonUrl, @"winggene=([\d]*)")).Success)
                    {
                        dragon.WingGene = int.Parse(regexParse.Groups[1].Value);
                    }
                    if ((regexParse = Regex.Match(dragonUrl, @"tertgene=([\d]*)")).Success)
                    {
                        dragon.TertiaryGene = int.Parse(regexParse.Groups[1].Value);
                    }
                    if ((regexParse = Regex.Match(dragonUrl, @"body=([\d]*)")).Success)
                    {
                        dragon.BodyColor = (Color)int.Parse(regexParse.Groups[1].Value);
                    }
                    if ((regexParse = Regex.Match(dragonUrl, @"wings=([\d]*)")).Success)
                    {
                        dragon.WingColor = (Color)int.Parse(regexParse.Groups[1].Value);
                    }
                    if ((regexParse = Regex.Match(dragonUrl, @"tert=([\d]*)")).Success)
                    {
                        dragon.TertiaryColor = (Color)int.Parse(regexParse.Groups[1].Value);
                    }
                    if ((regexParse = Regex.Match(dragonUrl, @"age=([\d]*)")).Success)
                    {
                        dragon.Age = (Age)int.Parse(regexParse.Groups[1].Value);
                    }

                    if (dragon.Age == Age.Dragon)
                    {
                        ctx.SaveChanges();
                    }
                }
            }
            else
            {
                dragon = cachedDragon;
            }

            if ((regexParse = Regex.Match(dragonUrl, @"apparel=([\d,]*)")).Success)
            {
                dragon.Apparel = regexParse.Groups[1].Value;
            }

            return(dragon);
        }
Example #6
0
        private static async Task <PreviewResult> GenerateOrFetchPreview(PreviewResult result, string skinId, int?version, DragonCache dragon, bool isDressingRoom, bool swapSilhouette, bool force)
        {
            var azureImageService = new AzureImageService();

            using (var ctx = new DataContext())
            {
                Skin skin;
                var  skins = ctx.Skins.Where(x => x.GeneratedId == skinId);
                if (version == null)
                {
                    skin    = skins.OrderByDescending(x => x.Version).FirstOrDefault();
                    version = skin.Version;
                }
                else
                {
                    skin = skins.FirstOrDefault(x => x.Version == version);
                }

                if (skin == null)
                {
                    return(result.WithErrorMessage("Skin not found."));
                }

                result.Skin = skin;

                if (dragon == null)
                {
                    dragon = FRHelpers.ParseUrlForDragon(string.Format(FRHelpers.DressingRoomDummyUrl, skin.DragonType, skin.GenderType), skinId, version);
                }

                result.Dragon = dragon;

                if (dragon.Age == Age.Hatchling)
                {
                    return(result.WithErrorMessage("Skins can only be previewed on adult dragons."));
                }

                if (swapSilhouette)
                {
                    var swappedDragon = FRHelpers.ParseUrlForDragon(GeneratedFRHelpers.GenerateDragonImageUrl(dragon, swapSilhouette));
                    swappedDragon.FRDragonId = dragon.FRDragonId;
                    dragon = swappedDragon;
                }

                if (skin.DragonType != (int)dragon.DragonType)
                {
                    return(result.WithErrorMessage("This skin is meant for a {0} {1}, the dragon you provided is a {2} {3}.", (DragonType)skin.DragonType, (Gender)skin.GenderType, dragon.DragonType, dragon.Gender));
                }

                if (skin.GenderType != (int)dragon.Gender)
                {
                    return(result.WithErrorMessage("This skin is meant for a {0}, the dragon you provided is a {1}.", (Gender)skin.GenderType, dragon.Gender));
                }
            }

            Bitmap dragonImage = null;

            var azureImagePreviewPath = $@"previews\{skinId}\{(version == 1 ? "" : $@"{version}\")}{dragon.GetFileName()}.png";