示例#1
0
        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);
            }
        }
示例#2
0
        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);
            }
        }