Пример #1
0
        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>();
            }
        }
Пример #2
0
        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>();
            }
        }