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); } } }
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); } } }
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(); }
public bool CanEquipDragon(string dragonId) { return(DragonCache.TryGetDragonByID(dragonId)); }
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); }
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";