コード例 #1
0
        public override EncounterPokemon OnEncounterPokemon(BattlePokemonData self, EncounterPokemon encounterPokemon)
        {
            var res = ScriptableObject.CreateInstance <EncounterPokemon>();

            res.Pokemoms = encounterPokemon.Pokemoms;
            res.EncounterProbabilities = encounterPokemon.EncounterProbabilities;
            int len = Math.Min(res.Pokemoms.Count, res.EncounterProbabilities.Count);

            while (res.Pokemoms.Count > len)
            {
                res.Pokemoms.RemoveAt(res.Pokemoms.Count - 1);
            }
            while (res.EncounterProbabilities.Count > len)
            {
                res.EncounterProbabilities.RemoveAt(res.EncounterProbabilities.Count - 1);
            }
            for (int i = 0; i < len; ++i)
            {
                Race race = ResourceController.Instance.allRaceDic[res.Pokemoms[i]];
                if (PokemonType.钢 == race.pokemonMainType || PokemonType.钢 == race.pokemonSecondType)
                {
                    res.EncounterProbabilities[i] = (int)(res.EncounterProbabilities[i] * 1.5f);
                }
            }
            DebugHelper.LogFormat("{0}具有磁力特性,在队伍首位时,如果所在区域存在野生的钢属性宝可梦,出现钢属性野生宝可梦的几率上升50%",
                                  self.Ename);
            return(res);
        }
コード例 #2
0
    public static Pokemon BuildPokemon(EncounterPokemon encounter)
    {
        int     PokemonID = PokemonFactory.GetPokemonFromEncounterPokemonScriptableObject(encounter);
        Pokemon pokemon   = PokemonFactory.BuildPokemon(PokemonID);
        //考虑特性
        Pokemon           FirstPokemon = Contexts.sharedInstance.game.playerData.scriptableObject.pokemons[0];
        BattlePokemonData pokemonData  = BattlePokemonData.Context[FirstPokemon.GetInstanceID()];

        if (AbilityManager.AbilityImpacts.ContainsKey(pokemonData.ShowAbility))
        {
            AbilityManager.AbilityImpacts[pokemonData.ShowAbility]
            .OnEncounterPokemon(pokemonData, pokemon);
        }
        return(pokemon);
    }
コード例 #3
0
    private static int GetPokemonFromEncounterPokemonScriptableObject(EncounterPokemon encounter)
    {
        EncounterPokemon encounterPokemons;
        //考虑特性
        Pokemon           pokemon     = Contexts.sharedInstance.game.playerData.scriptableObject.pokemons[0];
        BattlePokemonData pokemonData = BattlePokemonData.Context[pokemon.GetInstanceID()];

        if (AbilityManager.AbilityImpacts.ContainsKey(pokemonData.ShowAbility))
        {
            encounterPokemons = AbilityManager.AbilityImpacts[pokemonData.ShowAbility]
                                .OnEncounterPokemon(pokemonData, encounter);
        }
        else
        {
            encounterPokemons = encounter;
        }

        int count          = Math.Min(encounterPokemons.Pokemoms.Count, encounterPokemons.EncounterProbabilities.Count);
        int ProbabilitySum = 0;

        for (int i = 0; i < count; ++i)
        {
            ProbabilitySum += encounterPokemons.EncounterProbabilities[i];
        }
        int cur         = 0;
        int index       = 0;
        int Probability = RandomService.game.Int(0, ProbabilitySum);

        while (index < count && cur <= Probability)
        {
            cur += encounterPokemons.EncounterProbabilities[index];
            index++;
        }
        if (index >= count)
        {
            return(encounterPokemons.Pokemoms[count - 1]);
        }
        return(encounterPokemons.Pokemoms[index - 1]);
    }
コード例 #4
0
 //遭遇精灵时触发
 public virtual EncounterPokemon OnEncounterPokemon(BattlePokemonData self, EncounterPokemon encounterPokemon)
 {
     return(encounterPokemon);
 }