private static IDungeonInfo BuildDungeonInfo(HearthstoneImage image, DungeonKey key, dynamic savesMap) { var index = DungeonInfoReader.GetKeyIndex(savesMap, (int)key); if (index == -1) { return(null); } var dungeonMap = savesMap["valueSlots"][index]; var dungeonInfo = new DungeonInfo { Key = key, DeckCards = DungeonInfoReader.ExtractValues(dungeonMap, (int)DungeonFieldKey.DeckList), LootOptionBundles = new List <List <int> > { DungeonInfoReader.ExtractValues(dungeonMap, (int)DungeonFieldKey.LootOption1), DungeonInfoReader.ExtractValues(dungeonMap, (int)DungeonFieldKey.LootOption2), DungeonInfoReader.ExtractValues(dungeonMap, (int)DungeonFieldKey.LootOption3), }, ChosenLoot = DungeonInfoReader.ExtractValue(dungeonMap, (int)DungeonFieldKey.ChosenLoot), TreasureOption = DungeonInfoReader.ExtractValues(dungeonMap, (int)DungeonFieldKey.TreasureOption), ChosenTreasure = DungeonInfoReader.ExtractValue(dungeonMap, (int)DungeonFieldKey.ChosenTreasure), RunActive = DungeonInfoReader.ExtractValue(dungeonMap, (int)DungeonFieldKey.RunActive), SelectedDeck = DungeonInfoReader.ExtractValue(dungeonMap, (int)DungeonFieldKey.SelectedDeck), StartingTreasure = DungeonInfoReader.ExtractValue(dungeonMap, (int)DungeonFieldKey.StartingTreasure), }; dungeonInfo.DeckList = DungeonInfoReader.BuildRealDeckList(image, dungeonInfo); return(dungeonInfo); }
private static int ExtractValue(dynamic dungeonMap, int key) { var keyIndex = DungeonInfoReader.GetKeyIndex(dungeonMap, key); if (keyIndex == -1) { return(-1); } var value = dungeonMap["valueSlots"][keyIndex]["_IntValue"]; var size = value["_size"]; var items = value["_items"]; return(size > 0 ? (int)items[0] : -1); }
private static IReadOnlyList <int> ExtractValues(dynamic dungeonMap, int key) { var keyIndex = DungeonInfoReader.GetKeyIndex(dungeonMap, key); var result = new List <int>(); if (keyIndex == -1) { return(result); } var value = dungeonMap["valueSlots"][keyIndex]["_IntValue"]; var size = value["_size"]; var items = value["_items"]; for (var i = 0; i < size; i++) { var item = (int)items[i]; result.Add(item); } return(result); }
public static IDungeonInfo BuildDungeonInfo(HearthstoneImage image, DungeonKey key, dynamic savesMap) { var index = DungeonInfoReader.GetKeyIndex(savesMap, (int)key); if (index == -1) { return(null); } var dungeonMap = savesMap["valueSlots"][index]; var deckDbfId = DungeonInfoReader.ExtractDeckDbfId(image, dungeonMap, key); var dungeonInfo = new DungeonInfo { Key = key, DeckCards = DungeonInfoReader.ExtractValues(dungeonMap, (int)DungeonFieldKey.DeckList), LootOptionBundles = new List <DungeonOptionBundle> { BuildOptionBundle(DungeonInfoReader.ExtractValues(dungeonMap, (int)DungeonFieldKey.LootOption1)), BuildOptionBundle(DungeonInfoReader.ExtractValues(dungeonMap, (int)DungeonFieldKey.LootOption2)), BuildOptionBundle(DungeonInfoReader.ExtractValues(dungeonMap, (int)DungeonFieldKey.LootOption3)), }, ChosenLoot = DungeonInfoReader.ExtractValue(dungeonMap, (int)DungeonFieldKey.ChosenLoot), TreasureOption = DungeonInfoReader.ExtractValues(dungeonMap, (int)DungeonFieldKey.TreasureOption), ChosenTreasure = DungeonInfoReader.ExtractValue(dungeonMap, (int)DungeonFieldKey.ChosenTreasure), RunActive = DungeonInfoReader.ExtractValue(dungeonMap, (int)DungeonFieldKey.RunActive), SelectedDeck = deckDbfId, StartingTreasure = DungeonInfoReader.ExtractValue(dungeonMap, (int)DungeonFieldKey.StartingTreasure), StartingHeroPower = DungeonInfoReader.ExtractValue(dungeonMap, (int)DungeonFieldKey.StartingHeroPower), PlayerClass = DungeonInfoReader.ExtractValue(dungeonMap, (int)DungeonFieldKey.PlayerClass), ScenarioId = DungeonInfoReader.ExtractValue(dungeonMap, (int)DungeonFieldKey.ScenarioId), }; dungeonInfo.DeckList = DungeonInfoReader.BuildRealDeckList(image, dungeonInfo); return(dungeonInfo); }