public async Task <PokemonForm> LoadFormAsync(int formId, GameVersion version, int displayLanguage, CancellationToken token) { try { string query = "SELECT pf.id, pf.pokemon_id, p.pokemon_species_id, pfn.name, p.height, p.weight, p.base_experience, pt1.type_id AS type1, pt2.type_id AS type2, " + "pa1.ability_id AS ability1, pa2.ability_id AS ability2, pa3.ability_id AS hidden_ability, pi.rarity, pi.item_id FROM pokemon_v2_pokemonform pf\n" + "LEFT JOIN\n(SELECT e.pokemon_form_id AS id, COALESCE(o.name, e.name) AS name FROM pokemon_v2_pokemonformname e\n" + "LEFT OUTER JOIN pokemon_v2_pokemonformname o ON e.pokemon_form_id = o.pokemon_form_id and o.language_id = ?\n" + "WHERE e.language_id = 9\nGROUP BY e.pokemon_form_id)\nAS pfn ON pf.id = pfn.id\n" + "LEFT JOIN pokemon_v2_pokemon p ON pf.pokemon_id = p.id\n" + "LEFT JOIN pokemon_v2_pokemontype AS pt1 ON p.id = pt1.pokemon_id AND pt1.slot = 1\n" + "LEFT JOIN pokemon_v2_pokemontype AS pt2 ON p.id = pt2.pokemon_id AND pt2.slot = 2\n" + "LEFT JOIN pokemon_v2_pokemonability AS pa1 ON p.id = pa1.pokemon_id AND pa1.slot = 1\n" + "LEFT JOIN pokemon_v2_pokemonability AS pa2 ON p.id = pa2.pokemon_id AND pa2.slot = 2\n" + "LEFT JOIN pokemon_v2_pokemonability AS pa3 ON p.id = pa3.pokemon_id AND pa3.slot = 3\n" + "LEFT JOIN pokemon_v2_pokemonitem AS pi ON p.id = pi.pokemon_id AND pi.version_id = ?\n" + "WHERE pf.id = ?"; IEnumerable <DbPokemonForm> forms = await _connection.QueryAsync <DbPokemonForm>(token, query, new object[] { displayLanguage, version.Id, formId }); DbPokemonForm f = forms.First(); var form = new PokemonForm { BaseExperience = f.BaseExperience, Height = Math.Round((double)f.Height / 10, 2), HeldItemRarity = f.ItemRarity, Id = f.Id, Weight = Math.Round((double)f.Weight / 10, 2) }; form.Species = await LoadSpeciesAsync(f.PokemonSpeciesId, version, displayLanguage, token); if (String.IsNullOrWhiteSpace(f.Name)) { form.Name = form.Species.Name; } else { form.Name = f.Name; } // Handle Fairy before Gen 6 if (version.Generation < 6 && f.Type1 == 18) { f.Type1 = 1; } form.Type1 = await GetTypeAsync(f.Type1, version); if (f.Type2 != null) { form.Type2 = await GetTypeAsync((int)f.Type2, version); } if (version.Generation >= 3) { //form.Ability1 = await LoadAbilityAsync(f.Ability1, version, displayLanguage, token); //if (f.Ability2 != null) // form.Ability2 = await LoadAbilityAsync((int)f.Ability2, version, displayLanguage, token); //if (version.Generation >= 5 && f.HiddenAbility != null) // form.HiddenAbility = await LoadAbilityAsync((int)f.HiddenAbility, version, displayLanguage, token); } if (f.ItemId != null) { form.HeldItem = await LoadItemAsync((int)f.ItemId, displayLanguage, token); } //form.Stats = await LoadPokemonStatsAsync(f.PokemonId, version, displayLanguage, token); return(form); } catch (Exception) { return(null); } }
public async Task <PokemonForm> LoadFormByIdAsync(int id, GameVersion version, int language, CancellationToken token) { try { string query = String.Format(@" SELECT pf.id, pf.pokemon_id, p.species_id, pfn.name, p.height, p.weight, p.base_experience, pt1.type_id AS type1, pt2.type_id AS type2, pa1.ability_id AS ability1, pa2.ability_id AS ability2, pa3.ability_id AS hidden_ability, pi.rarity, pi.item_id FROM pokemon_forms pf LEFT JOIN (SELECT e.pokemon_form_id AS id, COALESCE(o.form_name, e.form_name) AS name FROM pokemon_form_names e LEFT OUTER JOIN pokemon_form_names o ON e.pokemon_form_id = o.pokemon_form_id and o.local_language_id = {0} WHERE e.local_language_id = 9 GROUP BY e.pokemon_form_id) AS pfn ON pf.id = pfn.id LEFT JOIN pokemon p ON pf.pokemon_id = p.id LEFT JOIN pokemon_types AS pt1 ON p.id = pt1.pokemon_id AND pt1.slot = 1 LEFT JOIN pokemon_types AS pt2 ON p.id = pt2.pokemon_id AND pt2.slot = 2 LEFT JOIN pokemon_abilities AS pa1 ON p.id = pa1.pokemon_id AND pa1.slot = 1 LEFT JOIN pokemon_abilities AS pa2 ON p.id = pa2.pokemon_id AND pa2.slot = 2 LEFT JOIN pokemon_abilities AS pa3 ON p.id = pa3.pokemon_id AND pa3.slot = 3 LEFT JOIN pokemon_items AS pi ON p.id = pi.pokemon_id AND pi.version_id = {1} WHERE pf.id = {2} ", language, version.Id, id); IEnumerable <DbPokemonForm> forms = await _connection.QueryAsync <DbPokemonForm>(token, query, new object[0]).ConfigureAwait(false); DbPokemonForm f = forms.Single(); // Handle Fairy Type before gen 6 if (version.Generation < 6 && f.Type1 == 18) { f.Type1 = 1; } Task <ElementType> type1Task = GetTypeAsync(f.Type1, version); Task <ElementType> type2Task = null; Task <Item> itemTask = null; Task <Ability> ability1Task = null; Task <Ability> ability2Task = null; Task <Ability> hiddenAbilityTask = null; var tasks = new List <Task> { type1Task, type2Task, itemTask, ability1Task, ability2Task, hiddenAbilityTask }; if (f.Type2 != null) { type2Task = GetTypeAsync((int)f.Type2, version); } if (version.Generation >= 2 && f.ItemId != null) { itemTask = LoadItemByIdAsync((int)f.ItemId, language, token); } if (version.Generation >= 3) { ability1Task = LoadAbilityByIdAsync(f.Ability1, version, language, token); if (f.Ability2 != null) { ability2Task = LoadAbilityByIdAsync((int)f.Ability2, version, language, token); } } if (version.Generation >= 5 && f.HiddenAbility != null) { hiddenAbilityTask = LoadAbilityByIdAsync((int)f.HiddenAbility, version, language, token); } var form = new PokemonForm { BaseExperience = f.BaseExperience, Height = Math.Round((double)f.Height / 10, 2), HeldItemRarity = f.ItemRarity, Id = f.Id, Weight = Math.Round((double)f.Weight / 10, 2) }; //form.Species = await LoadSpeciesAsync(f.PokemonSpeciesId, version, displayLanguage, token); //if (String.IsNullOrWhiteSpace(f.Name)) // form.Name = form.Species.Name; //else // form.Name = f.Name; await Task.WhenAll(tasks.Where(w => w != null)); form.Type1 = type1Task.Result; if (type2Task != null) { form.Type2 = type2Task.Result; } if (itemTask != null) { form.HeldItem = itemTask.Result; } if (ability1Task != null) { form.Ability1 = ability1Task.Result; } if (ability2Task != null) { form.Ability2 = ability2Task.Result; } if (hiddenAbilityTask != null) { form.HiddenAbility = hiddenAbilityTask.Result; } //form.Type1 = await GetTypeAsync(f.Type1, version); //if (f.Type2 != null) // form.Type2 = await GetTypeAsync((int)f.Type2, version); //if (f.ItemId != null) // form.HeldItem = await LoadItemByIdAsync((int)f.ItemId, language, token); //if (version.Generation >= 3) //{ // form.Ability1 = await LoadAbilityByIdAsync(f.Ability1, version, language, token); // if (f.Ability2 != null) // form.Ability2 = await LoadAbilityByIdAsync((int)f.Ability2, version, language, token); //} //if (version.Generation >= 5 && f.HiddenAbility != null) // form.HiddenAbility = await LoadAbilityByIdAsync((int)f.HiddenAbility, version, language, token); return(form); } catch (Exception) { return(null); } }