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); }
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); }
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]); }
//遭遇精灵时触发 public virtual EncounterPokemon OnEncounterPokemon(BattlePokemonData self, EncounterPokemon encounterPokemon) { return(encounterPokemon); }