Exemple #1
0
        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];
        }
Exemple #2
0
        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;
 }
Exemple #4
0
 public int LevelUp()
 {
     OnLevelUp?.Invoke(this, new LevelUpEventArgs(this));
     Level     += 1;
     Experience = ExpGroup.ExperienceNeededForLevel(Level);
     OnLevelledUp?.Invoke(this, new LevelledUpEventArgs(this));
     return(Level);
 }
Exemple #5
0
        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);
        }