public async Task<ObservableCollection<PokemonEvolution>> LoadEvolutionGroupAsync(int speciesId, GameVersion version, int displayLanguage, CancellationToken token) { try { string query = "SELECT ps.id, psn.name, pe.min_level, etn.name AS evolution_trigger, pe.evolution_item_id, pe.location_id, ec.baby_trigger_item_id,\n" + "pe.min_happiness, pe.time_of_day, pe.held_item_id, ps.is_baby FROM pokemon_v2_pokemonspecies ps\n" + "LEFT JOIN\n(SELECT def.pokemon_species_id AS id, IFNULL(curr.name, def.name) AS name FROM pokemon_v2_pokemonspeciesname def\n" + "LEFT JOIN pokemon_v2_pokemonspeciesname curr ON def.pokemon_species_id = curr.pokemon_species_id AND def.language_id = 9 AND curr.language_id = ?\n" + "GROUP BY def.pokemon_species_id)\nAS psn ON ps.id = psn.id\n" + "LEFT JOIN pokemon_v2_pokemonevolution pe ON pe.evolved_species_id = ps.id\n" + "LEFT JOIN pokemon_v2_evolutiontrigger et ON pe.evolution_trigger_id = et.id\n" + "LEFT JOIN\n(SELECT e.evolution_trigger_id AS id, COALESCE(o.name, e.name) AS name FROM pokemon_v2_evolutiontriggername e\n" + "LEFT OUTER JOIN pokemon_v2_evolutiontriggername o ON e.evolution_trigger_id = o.evolution_trigger_id and o.language_id = ?\n" + "WHERE e.language_id = 9\n\nGROUP BY e.evolution_trigger_id)\nAS etn ON et.id = etn.id\n" + "LEFT JOIN pokemon_v2_evolutionchain ec ON ec.id = ps.evolution_chain_id\n" + "WHERE ps.evolution_chain_id = (SELECT evolution_chain_id FROM pokemon_v2_pokemonspecies WHERE id = ?) AND ps.generation_id <= ?\n" + "ORDER BY ps.'order'"; IEnumerable<DbPokemonEvolution> evolutions = await _connection.QueryAsync<DbPokemonEvolution>(token, query, new object[] { displayLanguage, displayLanguage, speciesId, version.Generation }); var result = new ObservableCollection<PokemonEvolution>(); foreach (DbPokemonEvolution evolution in evolutions) { var evo = new PokemonEvolution { DayTime = evolution.TimeOfDay, EvolutionTrigger = evolution.EvolutionTrigger, EvolvesTo = new SpeciesName { Id = evolution.Id, Name = evolution.Name }, MinLevel = evolution.MinLevel, MinHappiness = evolution.MinHappiness }; if (evolution.IsBaby) evo.EvolutionTrigger = "Zucht"; if (evolution.LocationId != null) { Location loc = await LoadLocationFromIdAsync((int)evolution.LocationId, version, displayLanguage, token); if (loc == null) continue; evo.EvolutionLocation = loc; } if (evolution.EvolutionItemId != null) evo.EvolutionItem = await LoadItemAsync((int)evolution.EvolutionItemId, displayLanguage, token); else if (evolution.HeldItemId != null) evo.EvolutionItem = await LoadItemAsync((int)evolution.HeldItemId, displayLanguage, token); else if (evolution.IsBaby && evolution.BabyTriggerItemId != null) evo.EvolutionItem = await LoadItemAsync((int)evolution.BabyTriggerItemId, displayLanguage, token); result.Add(evo); } return result; } catch (Exception) { return new ObservableCollection<PokemonEvolution>(); } }
public async Task<ObservableCollection<PokemonEvolution>> LoadPossibleEvolutionsAsync(int speciesId, GameVersion version, int displayLanguage, CancellationToken token) { try { string query = "SELECT ps.id, psn.name, pe.min_level, etn.name AS evolution_trigger, pe.evolution_item_id FROM pokemon_v2_pokemonspecies ps\n" + "LEFT JOIN\n(SELECT def.pokemon_species_id AS id, IFNULL(curr.name, def.name) AS name FROM pokemon_v2_pokemonspeciesname def\n" + "LEFT JOIN pokemon_v2_pokemonspeciesname curr ON def.pokemon_species_id = curr.pokemon_species_id AND def.language_id = 9 AND curr.language_id = ?\n" + "GROUP BY def.pokemon_species_id)\nAS psn ON ps.id = psn.id\n" + "LEFT JOIN pokemon_v2_pokemonevolution pe ON pe.evolved_species_id = ps.id\n" + "LEFT JOIN pokemon_v2_evolutiontrigger et ON pe.evolution_trigger_id = et.id\n" + "LEFT JOIN\n(SELECT e.evolution_trigger_id AS id, COALESCE(o.name, e.name) AS name FROM pokemon_v2_evolutiontriggername e\n" + "LEFT OUTER JOIN pokemon_v2_evolutiontriggername o ON e.evolution_trigger_id = o.evolution_trigger_id and o.language_id = ?\n" + "WHERE e.language_id = 9\nGROUP BY e.evolution_trigger_id)\nAS etn ON et.id = etn.id\n" + "WHERE ps.evolves_from_species_id = ? AND ps.generation_id <= ?"; IEnumerable<DbPokemonEvolution> evolutions = await _connection.QueryAsync<DbPokemonEvolution>(token, query, new object[] { displayLanguage, displayLanguage, speciesId, version.Generation }); var result = new ObservableCollection<PokemonEvolution>(); foreach (DbPokemonEvolution dbEvolution in evolutions) { var evolution = new PokemonEvolution { EvolvesTo = new SpeciesName { Id = dbEvolution.Id, Name = dbEvolution.Name }, MinLevel = dbEvolution.MinLevel, EvolutionTrigger = dbEvolution.EvolutionTrigger }; if (dbEvolution.EvolutionItemId != null) evolution.EvolutionItem = await LoadItemAsync((int)dbEvolution.EvolutionItemId, displayLanguage, token); result.Add(evolution); } return result; } catch (Exception) { return new ObservableCollection<PokemonEvolution>(); } }