public Pokemon(Model.Pokemon basePokemon, string uid, Gender gender, Nature nature, Ability ability, IVSet ivs, EVSet evs, MoveSet <IMove> moves, int friendship, int level) { Base = basePokemon; Stats = new Statistics(this); Gender = gender; Nature = nature; UID = uid; Ability = ability; IVs = ivs; EVs = evs; Moves = moves; Friendship = friendship; Experience = ExpGroup.ExperienceNeededForLevel(level); if (friendship < basePokemon.Friendship) { throw new Exception($"Friendship {friendship} cannot be lower than base friendship {basePokemon.Friendship}"); } if (level < MinLevel || level > MaxLevel) { throw new Exception($"Level ({level}) must be between {MinLevel} and {MaxLevel} (inclusive)"); } Level = level; HP = Stats[Statistic.HP]; }
public int GainExperience(int amount) { int expNeededForLevelup = ExpGroup.ExperienceNeededForLevel(Level + 1) - Experience; if (amount >= expNeededForLevelup) { int prevExp1 = Experience; OnGainExperience?.Invoke(this, new GainExperienceEventArgs(this, expNeededForLevelup)); Experience += expNeededForLevelup; OnExperienceGained?.Invoke(this, new ExperienceGainedEventArgs(this, prevExp1)); LevelUp(); int newAmount = amount - expNeededForLevelup; if (newAmount > 0) { return(GainExperience(amount - newAmount)); } return(Experience); } int prevExp2 = Experience; OnGainExperience?.Invoke(this, new GainExperienceEventArgs(this, amount)); Experience += amount; OnExperienceGained?.Invoke(this, new ExperienceGainedEventArgs(this, prevExp2)); return(Experience); }
public PokemonExperience(int currentLevel, int baseLevelExp, int nextExp, int lastExp, ExpGroup expGroup) { CurrentLevel = currentLevel; BaseLevelExperience = baseLevelExp; NextExperience = nextExp; LastExperience = lastExp; ExpGroup = expGroup; }
public int LevelUp() { OnLevelUp?.Invoke(this, new LevelUpEventArgs(this)); Level += 1; Experience = ExpGroup.ExperienceNeededForLevel(Level); OnLevelledUp?.Invoke(this, new LevelledUpEventArgs(this)); return(Level); }
public static int TotalAtLevel(int lvl, ExpGroup group) { int n = 0; if (group == ExpGroup.Erratic) { if (erraticTable.TryGetValue(lvl, out n)) { return(n); } } if (group == ExpGroup.Fast) { if (fastTable.TryGetValue(lvl, out n)) { return(n); } } if (group == ExpGroup.MediumFast) { if (mediumFastTable.TryGetValue(lvl, out n)) { return(n); } } if (group == ExpGroup.MediumSlow) { if (mediumSlowTable.TryGetValue(lvl, out n)) { return(n); } } if (group == ExpGroup.Slow) { if (slowTable.TryGetValue(lvl, out n)) { return(n); } } if (group == ExpGroup.Fluctuating) { if (fluctuatingTable.TryGetValue(lvl, out n)) { return(n); } } return(0); }