GetBestPokeball should now return the currect Pokeball

Spegeli [2016-07-23 09:01:24]
GetBestPokeball should now return the currect Pokeball

After the first start there is now a Config Folder with the following Files:
PokemonsNotToCatch
PokemonsNotToTransfer
PokemonsToEvolve
There you can set the Pokemon ;-)
Filename
PokemonGo.RocketAPI.Console/App.config
PokemonGo.RocketAPI.Console/PokemonGo.RocketAPI.Console.csproj
PokemonGo.RocketAPI.Console/Settings.cs
PokemonGo.RocketAPI.Console/UserSettings.Designer.cs
PokemonGo.RocketAPI.Console/UserSettings.settings
PokemonGo.RocketAPI.Logic/Inventory.cs
PokemonGo.RocketAPI.Logic/Logic.cs
PokemonGo.RocketAPI/Client.cs
PokemonGo.RocketAPI/GeneratedCode/AllEnum.cs
PokemonGo.RocketAPI/PokemonGo.RocketAPI.csproj
PokemonGo.RocketAPI/Properties/AssemblyInfo.cs
PokemonGo.RocketAPI/Proto/AllEnum.proto
diff --git a/PokemonGo.RocketAPI.Console/App.config b/PokemonGo.RocketAPI.Console/App.config
index 7cdf5c0..41f3c74 100644
--- a/PokemonGo.RocketAPI.Console/App.config
+++ b/PokemonGo.RocketAPI.Console/App.config
@@ -35,7 +35,8 @@
         <value>50</value>
       </setting>
       <setting name="AuthType" serializeAs="String">
-        <value>Google</value>
+        <value>Google
+</value>
       </setting>
       <setting name="DefaultLatitude" serializeAs="String">
         <value>0</value>
diff --git a/PokemonGo.RocketAPI.Console/PokemonGo.RocketAPI.Console.csproj b/PokemonGo.RocketAPI.Console/PokemonGo.RocketAPI.Console.csproj
index aed36fb..2760ae2 100644
--- a/PokemonGo.RocketAPI.Console/PokemonGo.RocketAPI.Console.csproj
+++ b/PokemonGo.RocketAPI.Console/PokemonGo.RocketAPI.Console.csproj
@@ -55,6 +55,11 @@
   <ItemGroup>
     <Compile Include="Program.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
     <Compile Include="Settings.cs" />
     <Compile Include="UserSettings.cs" />
     <Compile Include="UserSettings.Designer.cs">
@@ -83,6 +88,22 @@
       <Name>PokemonGo.RocketAPI</Name>
     </ProjectReference>
   </ItemGroup>
+  <ItemGroup>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+      <SubType>Designer</SubType>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\PokemonsToEvolve.txt" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\PokemonsNotToCatch.txt" />
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\PokemonsNotToTransfer.txt" />
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
        Other similar extension points exist, see Microsoft.Common.targets.
diff --git a/PokemonGo.RocketAPI.Console/Settings.cs b/PokemonGo.RocketAPI.Console/Settings.cs
index b48453c..1f79e63 100644
--- a/PokemonGo.RocketAPI.Console/Settings.cs
+++ b/PokemonGo.RocketAPI.Console/Settings.cs
@@ -2,9 +2,10 @@

 using PokemonGo.RocketAPI.Enums;
 using System;
+using System.IO;
+using System.Reflection;
 using System.Collections.Generic;
 using AllEnum;
-
 #endregion


@@ -26,6 +27,10 @@ namespace PokemonGo.RocketAPI.Console
         public bool TransferDuplicatePokemon => UserSettings.Default.TransferDuplicatePokemon;
         public bool UsePokemonToNotCatchFilter => UserSettings.Default.UsePokemonToNotCatchFilter;

+        private ICollection<PokemonId> _pokemonsToEvolve;
+        private ICollection<PokemonId> _pokemonsNotToTransfer;
+        private ICollection<PokemonId> _pokemonsNotToCatch;
+
         public string GoogleRefreshToken
         {
             get { return UserSettings.Default.GoogleRefreshToken; }
@@ -88,77 +93,49 @@ namespace PokemonGo.RocketAPI.Console
             }
         }

-        public ICollection<PokemonId> PokemonsToEvolve
+        private ICollection<PokemonId> LoadPokemonList(string filename)
         {
-            get
+            ICollection<PokemonId> result = new List<PokemonId>();
+            string path = Directory.GetCurrentDirectory() + "\\Configs\\";
+            if (!Directory.Exists(path))
             {
-                //Type of pokemons to evolve
-                return new[]
-                {
-                    PokemonId.Rattata,
-                    PokemonId.Spearow,
-                    PokemonId.Ekans,
-                    PokemonId.Pikachu,
-                    PokemonId.Sandshrew,
-                    PokemonId.Clefable,
-                    PokemonId.Vulpix,
-                    PokemonId.Jigglypuff,
-                    PokemonId.Zubat,
-                    PokemonId.Paras,
-                    PokemonId.Venonat,
-                    PokemonId.Diglett,
-                    PokemonId.Meowth,
-                    PokemonId.Psyduck,
-                    PokemonId.Mankey,
-                    PokemonId.Growlithe,
-                    PokemonId.Tentacool,
-                    PokemonId.Ponyta,
-                    PokemonId.Slowpoke,
-                    PokemonId.Magnemite,
-                    PokemonId.Doduo,
-                    PokemonId.Seel,
-                    PokemonId.Grimer,
-                    PokemonId.Shellder,
-                    PokemonId.Drowzee,
-                    PokemonId.Krabby,
-                    PokemonId.Voltorb,
-                    PokemonId.Exeggcute,
-                    PokemonId.Cubone,
-                    PokemonId.Koffing,
-                    PokemonId.Rhyhorn,
-                    PokemonId.Horsea,
-                    PokemonId.Goldeen,
-                    PokemonId.Staryu,
-                    PokemonId.Omanyte,
-                    PokemonId.Kabuto,
-                    PokemonId.Dratini
-                };
+                DirectoryInfo di = Directory.CreateDirectory(path);
             }
-            set
+            if (!File.Exists(path + filename + ".txt"))
             {
-                throw new NotImplementedException();
+                string pokemonName = Properties.Resources.ResourceManager.GetString(filename);
+                Logger.Normal($"File: {filename} not found, creating new...");
+                File.WriteAllText(path + filename + ".txt", pokemonName);
+            }
+            if (File.Exists(path + filename + ".txt"))
+            {
+                string[] _locallist = File.ReadAllLines(path + filename + ".txt");
+                foreach (string pokemonName in _locallist)
+                {
+                    var pokemon = Enum.Parse(typeof(PokemonId), pokemonName, true);
+                    if (pokemonName != null) result.Add((PokemonId)pokemon);
+                }
             }
+            return result;
         }

-        public ICollection<PokemonId> PokemonsNotToTransfer
+        public ICollection<PokemonId> PokemonsToEvolve
         {
             get
             {
-                //Do not transfer those
-                return new[]
-            {
-                    PokemonId.Dragonite,
-                    PokemonId.Charizard,
-                    PokemonId.Zapdos,
-                    PokemonId.Snorlax,
-                    PokemonId.Alakhazam,
-                    PokemonId.Mew,
-                    PokemonId.Mewtwo
-                };
+                //Type of pokemons to evolve
+                _pokemonsToEvolve = _pokemonsToEvolve != null ? _pokemonsToEvolve : LoadPokemonList("PokemonsToEvolve");
+                return _pokemonsToEvolve;
             }
-            set
+        }
+
+        public ICollection<PokemonId> PokemonsNotToTransfer
+        {
+            get
             {
-                throw new NotImplementedException();
+                //Type of pokemons not to transfer
+                _pokemonsNotToTransfer = _pokemonsNotToTransfer != null ? _pokemonsNotToTransfer : LoadPokemonList("PokemonsNotToTransfer");
+                return _pokemonsNotToTransfer;
             }
         }

@@ -166,17 +143,9 @@ namespace PokemonGo.RocketAPI.Console
         {
             get
             {
-                //Do not catch those
-                return new[]
-                {
-                    //add pokemon here
-                   PokemonId.Pidgey,
-                   PokemonId.Rattata
-                };
-            }
-            set
-            {
-                throw new NotImplementedException();
+                //Type of pokemons not to catch
+                _pokemonsNotToCatch = _pokemonsNotToCatch != null ? _pokemonsNotToCatch : LoadPokemonList("PokemonsNotToCatch");
+                return _pokemonsNotToCatch;
             }
         }

diff --git a/PokemonGo.RocketAPI.Console/UserSettings.Designer.cs b/PokemonGo.RocketAPI.Console/UserSettings.Designer.cs
index 9d9db6c..ea7b982 100644
--- a/PokemonGo.RocketAPI.Console/UserSettings.Designer.cs
+++ b/PokemonGo.RocketAPI.Console/UserSettings.Designer.cs
@@ -85,7 +85,7 @@ namespace PokemonGo.RocketAPI.Console {

         [global::System.Configuration.UserScopedSettingAttribute()]
         [global::System.Diagnostics.DebuggerNonUserCodeAttribute()]
-        [global::System.Configuration.DefaultSettingValueAttribute("Google")]
+        [global::System.Configuration.DefaultSettingValueAttribute("Google\r\n")]
         public string AuthType {
             get {
                 return ((string)(this["AuthType"]));
diff --git a/PokemonGo.RocketAPI.Console/UserSettings.settings b/PokemonGo.RocketAPI.Console/UserSettings.settings
index 52bb66e..55281ac 100644
--- a/PokemonGo.RocketAPI.Console/UserSettings.settings
+++ b/PokemonGo.RocketAPI.Console/UserSettings.settings
@@ -18,7 +18,8 @@
       <Value Profile="(Default)">50</Value>
     </Setting>
     <Setting Name="AuthType" Type="System.String" Scope="User">
-      <Value Profile="(Default)">Google</Value>
+      <Value Profile="(Default)">Google
+</Value>
     </Setting>
     <Setting Name="DefaultLatitude" Type="System.Double" Scope="User">
       <Value Profile="(Default)">0</Value>
diff --git a/PokemonGo.RocketAPI.Logic/Inventory.cs b/PokemonGo.RocketAPI.Logic/Inventory.cs
index 2f8f0dd..d0700ad 100644
--- a/PokemonGo.RocketAPI.Logic/Inventory.cs
+++ b/PokemonGo.RocketAPI.Logic/Inventory.cs
@@ -44,14 +44,27 @@ namespace PokemonGo.RocketAPI.Logic
                     .Where(p => p != null && p?.FamilyId != PokemonFamilyId.FamilyUnset);
         }

-        public async Task<int> GetHighestCPofType(PokemonData pokemon)
+        public async Task<IEnumerable<PokemonData>> GetHighestsCP(int limit)
+        {
+            var myPokemon = await GetPokemons();
+            var pokemons = myPokemon.ToList();
+            return pokemons.OrderByDescending(x => x.Cp).ThenBy(n => n.StaminaMax).Take(limit);
+        }
+
+        public async Task<PokemonData> GetHighestPokemonOfTypeByCP(PokemonData pokemon)
         {
             var myPokemon = await GetPokemons();
             var pokemons = myPokemon.ToList();
             return pokemons.Where(x => x.PokemonId == pokemon.PokemonId)
                             .OrderByDescending(x => x.Cp)
-                            .First().Cp;
+                            .First();
+        }

+        public async Task<IEnumerable<PokemonData>> GetHighestsPerfect(int limit)
+        {
+            var myPokemon = await GetPokemons();
+            var pokemons = myPokemon.ToList();
+            return pokemons.OrderByDescending(x => Logic.CalculatePokemonPerfection(x)).Take(limit);
         }

         public async Task<IEnumerable<PokemonData>> GetDuplicatePokemonToTransfer(bool keepPokemonsThatCanEvolve = false, IEnumerable<PokemonId> filter = null)
diff --git a/PokemonGo.RocketAPI.Logic/Logic.cs b/PokemonGo.RocketAPI.Logic/Logic.cs
index 6b5ea11..d26828e 100644
--- a/PokemonGo.RocketAPI.Logic/Logic.cs
+++ b/PokemonGo.RocketAPI.Logic/Logic.cs
@@ -121,8 +121,8 @@ namespace PokemonGo.RocketAPI.Logic

             while (true)
             {
-
                     _playerProfile = await _client.GetProfile();
+
                     _stats.updateConsoleTitle(_inventory);

                     var _currentLevelInfos = await Statistics._getcurrentLevelInfos(_inventory);
@@ -140,6 +140,12 @@ namespace PokemonGo.RocketAPI.Logic
                     Logger.Normal(ConsoleColor.DarkGray, $"Level: {_currentLevelInfos}");
                     Logger.Normal(ConsoleColor.DarkGray, $"Stardust: {_playerProfile.Profile.Currency.ToArray()[1].Amount}");
                     Logger.Normal(ConsoleColor.Yellow, "----------------------------");
+                    await DisplayHighests();
+                    Logger.Normal(ConsoleColor.Yellow, "----------------------------");
+
+                    var PokemonsNotToTransfer = _clientSettings.PokemonsNotToTransfer;
+                    var PokemonsNotToCatch = _clientSettings.PokemonsNotToCatch;
+                    var PokemonsToEvolve = _clientSettings.PokemonsToEvolve;

                     if (_clientSettings.EvolveAllPokemonWithEnoughCandy) await EvolveAllPokemonWithEnoughCandy(_clientSettings.PokemonsToEvolve);
                     if (_clientSettings.TransferDuplicatePokemon) await TransferDuplicatePokemon();
@@ -267,8 +273,8 @@ namespace PokemonGo.RocketAPI.Logic
                 _stats.updateConsoleTitle(_inventory);
                 Logger.Normal(ConsoleColor.Yellow,
                     caughtPokemonResponse.Status == CatchPokemonResponse.Types.CatchStatus.CatchSuccess
-                    ? $"(POKEBATTLE) {pokemon.PokemonId} (CP {encounter?.WildPokemon?.PokemonData?.Cp}) ({CalculatePokemonPerfection(encounter?.WildPokemon?.PokemonData).ToString("0.00")}% perfect) | Chance: {encounter?.CaptureProbability.CaptureProbability_.First()} | {Math.Round(distance)}m distance | with {bestPokeball} and received XP {caughtPokemonResponse.Scores.Xp.Sum()}"
-                    : $"(POKEBATTLE) {pokemon.PokemonId} (CP {encounter?.WildPokemon?.PokemonData?.Cp}) | Change: {encounter?.CaptureProbability.CaptureProbability_.First()} {caughtPokemonResponse.Status} | {Math.Round(distance)}m distance | using a {bestPokeball}.."
+                    ? $"(POKEBATTLE) {pokemon.PokemonId} (CP {encounter?.WildPokemon?.PokemonData?.Cp}) ({Math.Round(CalculatePokemonPerfection(encounter?.WildPokemon?.PokemonData)).ToString("0.00")}% perfection) | Chance: {encounter?.CaptureProbability.CaptureProbability_.First()} | {Math.Round(distance)}m distance | with {bestPokeball} and received XP {caughtPokemonResponse.Scores.Xp.Sum()}"
+                    : $"(POKEBATTLE) {pokemon.PokemonId} (CP {encounter?.WildPokemon?.PokemonData?.Cp}) | Chance: {Math.Round(Convert.ToDouble(encounter?.CaptureProbability?.CaptureProbability_.First()))} {caughtPokemonResponse.Status} | {Math.Round(distance)}m distance | using a {bestPokeball}.."
                     );
                 await RandomHelper.RandomDelay(1750, 2250);
             }
@@ -307,13 +313,13 @@ namespace PokemonGo.RocketAPI.Logic
                 if (CalculatePokemonPerfection(duplicatePokemon) >= _clientSettings.KeepMinIVPercentage || duplicatePokemon.Cp > _clientSettings.KeepMinCP)
                     continue;

-                var bestPokemonOfType = await _inventory.GetHighestCPofType(duplicatePokemon);
                 var transfer = await _client.TransferPokemon(duplicatePokemon.Id);

                 _stats.increasePokemonsTransfered();
                 _stats.updateConsoleTitle(_inventory);

-                Logger.Normal(ConsoleColor.DarkYellow, $"(TRANSFER) {duplicatePokemon.PokemonId} with {duplicatePokemon.Cp} CP (Best: {bestPokemonOfType})");
+                PokemonData bestPokemonOfType = await _inventory.GetHighestPokemonOfTypeByCP(duplicatePokemon);
+                Logger.Normal(ConsoleColor.DarkYellow, $"(TRANSFER) {duplicatePokemon.PokemonId} (CP {duplicatePokemon.Cp} | {CalculatePokemonPerfection(duplicatePokemon).ToString("0.00")} % perfect) | (Best: {bestPokemonOfType.Cp} CP | {CalculatePokemonPerfection(bestPokemonOfType).ToString("0.00")} % perfect)");
                 await Task.Delay(500);
             }
         }
@@ -341,10 +347,10 @@ namespace PokemonGo.RocketAPI.Logic
             var pokemonCp = pokemon?.PokemonData?.Cp;

             var items = await _inventory.GetItems();
-            var balls = items.Where(i => (MiscEnums.Item)i.Item_ == MiscEnums.Item.ITEM_POKE_BALL
-                                      || (MiscEnums.Item)i.Item_ == MiscEnums.Item.ITEM_MASTER_BALL
+            var balls = items.Where(i => ((MiscEnums.Item)i.Item_ == MiscEnums.Item.ITEM_POKE_BALL
+                                      || (MiscEnums.Item)i.Item_ == MiscEnums.Item.ITEM_GREAT_BALL
                                       || (MiscEnums.Item)i.Item_ == MiscEnums.Item.ITEM_ULTRA_BALL
-                                      || (MiscEnums.Item)i.Item_ == MiscEnums.Item.ITEM_GREAT_BALL).GroupBy(i => ((MiscEnums.Item)i.Item_)).ToList();
+                                      || (MiscEnums.Item)i.Item_ == MiscEnums.Item.ITEM_MASTER_BALL) && i.Count > 0).GroupBy(i => ((MiscEnums.Item)i.Item_)).ToList();
             if (balls.Count == 0) return MiscEnums.Item.ITEM_UNKNOWN;

             var pokeBalls = balls.Any(g => g.Key == MiscEnums.Item.ITEM_POKE_BALL);
@@ -352,11 +358,11 @@ namespace PokemonGo.RocketAPI.Logic
             var ultraBalls = balls.Any(g => g.Key == MiscEnums.Item.ITEM_ULTRA_BALL);
             var masterBalls = balls.Any(g => g.Key == MiscEnums.Item.ITEM_MASTER_BALL);

-            if (masterBalls && pokemonCp >= 1500)
+            if (masterBalls && pokemonCp >= 2000)
                 return MiscEnums.Item.ITEM_MASTER_BALL;
-            else if (ultraBalls && pokemonCp >= 1500)
+            else if (ultraBalls && pokemonCp >= 2000)
                 return MiscEnums.Item.ITEM_ULTRA_BALL;
-            else if (greatBalls && pokemonCp >= 1500)
+            else if (greatBalls && pokemonCp >= 2000)
                 return MiscEnums.Item.ITEM_GREAT_BALL;

             if (ultraBalls && pokemonCp >= 1000)
@@ -364,12 +370,7 @@ namespace PokemonGo.RocketAPI.Logic
             else if (greatBalls && pokemonCp >= 1000)
                 return MiscEnums.Item.ITEM_GREAT_BALL;

-            if (ultraBalls && pokemonCp >= 600)
-                return MiscEnums.Item.ITEM_ULTRA_BALL;
-            else if (greatBalls && pokemonCp >= 600)
-                return MiscEnums.Item.ITEM_GREAT_BALL;
-
-            if (greatBalls && pokemonCp >= 350)
+            if (greatBalls && pokemonCp >= 500)
                 return MiscEnums.Item.ITEM_GREAT_BALL;

             return balls.OrderBy(g => g.Key).First().Key;
@@ -385,7 +386,7 @@ namespace PokemonGo.RocketAPI.Logic
                                         || (AllEnum.ItemId)i.Item_ == AllEnum.ItemId.ItemNanabBerry
                                         || (AllEnum.ItemId)i.Item_ == AllEnum.ItemId.ItemWeparBerry
                                         || (AllEnum.ItemId)i.Item_ == AllEnum.ItemId.ItemPinapBerry).GroupBy(i => ((AllEnum.ItemId)i.Item_)).ToList();
-            if (berries.Count == 0) return AllEnum.ItemId.ItemUnknown;
+            if (berries.Count == 0 || pokemonCp <= 350) return AllEnum.ItemId.ItemUnknown;

             var razzBerryCount = await _inventory.GetItemAmountByType(MiscEnums.Item.ITEM_RAZZ_BERRY);
             var blukBerryCount = await _inventory.GetItemAmountByType(MiscEnums.Item.ITEM_BLUK_BERRY);
@@ -393,21 +394,28 @@ namespace PokemonGo.RocketAPI.Logic
             var weparBerryCount = await _inventory.GetItemAmountByType(MiscEnums.Item.ITEM_WEPAR_BERRY);
             var pinapBerryCount = await _inventory.GetItemAmountByType(MiscEnums.Item.ITEM_PINAP_BERRY);

-            if (pinapBerryCount > 0 && pokemonCp >= 1000)
+            if (pinapBerryCount > 0 && pokemonCp >= 2000)
                 return AllEnum.ItemId.ItemPinapBerry;
-            else if (weparBerryCount > 0 && pokemonCp >= 1000)
+            else if (weparBerryCount > 0 && pokemonCp >= 2000)
                 return AllEnum.ItemId.ItemWeparBerry;
-            else if (nanabBerryCount > 0 && pokemonCp >= 1000)
+            else if (nanabBerryCount > 0 && pokemonCp >= 2000)
                 return AllEnum.ItemId.ItemNanabBerry;
+            else if (nanabBerryCount > 0 && pokemonCp >= 2000)
+                return AllEnum.ItemId.ItemBlukBerry;

-            if (weparBerryCount > 0 && pokemonCp >= 600)
+            if (weparBerryCount > 0 && pokemonCp >= 1500)
                 return AllEnum.ItemId.ItemWeparBerry;
-            else if (nanabBerryCount > 0 && pokemonCp >= 600)
+            else if (nanabBerryCount > 0 && pokemonCp >= 1500)
                 return AllEnum.ItemId.ItemNanabBerry;
-            else if (blukBerryCount > 0 && pokemonCp >= 600)
+            else if (blukBerryCount > 0 && pokemonCp >= 1500)
                 return AllEnum.ItemId.ItemBlukBerry;

-            if (blukBerryCount > 0 && pokemonCp >= 350)
+            if (nanabBerryCount > 0 && pokemonCp >= 1000)
+                return AllEnum.ItemId.ItemNanabBerry;
+            else if (blukBerryCount > 0 && pokemonCp >= 1000)
+                return AllEnum.ItemId.ItemBlukBerry;
+
+            if (blukBerryCount > 0 && pokemonCp >= 500)
                 return AllEnum.ItemId.ItemBlukBerry;

             return berries.OrderBy(g => g.Key).First().Key;
@@ -429,5 +437,19 @@ namespace PokemonGo.RocketAPI.Logic
             await Task.Delay(5000);
         }

+        private async Task DisplayHighests()
+        {
+            Logger.Normal($"====== DisplayHighestsCP ======");
+            var highestsPokemonCP = await _inventory.GetHighestsCP(5);
+            foreach (var pokemon in highestsPokemonCP)
+                Logger.Normal($"# CP {pokemon.Cp}\t| ({CalculatePokemonPerfection(pokemon).ToString("0.00")}\t% perfect) NAME: '{pokemon.PokemonId}'");
+            Logger.Normal($"====== DisplayHighestsPerfect ======");
+            var highestsPokemonPerfect = await _inventory.GetHighestsPerfect(5);
+            foreach (var pokemon in highestsPokemonPerfect)
+            {
+                Logger.Normal($"# CP {pokemon.Cp}\t| ({CalculatePokemonPerfection(pokemon).ToString("0.00")}\t% perfect) NAME: '{pokemon.PokemonId}'");
+            }
+        }
+
     }
 }
\ No newline at end of file
diff --git a/PokemonGo.RocketAPI/Client.cs b/PokemonGo.RocketAPI/Client.cs
index ca90cdc..c90fcc7 100644
--- a/PokemonGo.RocketAPI/Client.cs
+++ b/PokemonGo.RocketAPI/Client.cs
@@ -107,7 +107,6 @@ namespace PokemonGo.RocketAPI
                 var deviceCode = await GoogleLogin.GetDeviceCode();
                 tokenResponse = await GoogleLogin.GetAccessToken(deviceCode);
                 Settings.GoogleRefreshToken = tokenResponse?.refresh_token;
-                //Logger.Normal("Refreshtoken " + tokenResponse?.refresh_token + " saved");
                 AccessToken = tokenResponse?.id_token;
             }

diff --git a/PokemonGo.RocketAPI/GeneratedCode/AllEnum.cs b/PokemonGo.RocketAPI/GeneratedCode/AllEnum.cs
index 7898f95..6c4e981 100644
--- a/PokemonGo.RocketAPI/GeneratedCode/AllEnum.cs
+++ b/PokemonGo.RocketAPI/GeneratedCode/AllEnum.cs
@@ -755,7 +755,7 @@ namespace AllEnum {
     [pbr::OriginalName("BULBASAUR")] Bulbasaur = 1,
     [pbr::OriginalName("IVYSAUR")] Ivysaur = 2,
     [pbr::OriginalName("VENUSAUR")] Venusaur = 3,
-    [pbr::OriginalName("CHARMENDER")] Charmender = 4,
+    [pbr::OriginalName("CHARMANDER")] Charmander = 4,
     [pbr::OriginalName("CHARMELEON")] Charmeleon = 5,
     [pbr::OriginalName("CHARIZARD")] Charizard = 6,
     [pbr::OriginalName("SQUIRTLE")] Squirtle = 7,
@@ -786,7 +786,7 @@ namespace AllEnum {
     [pbr::OriginalName("NIDORAN_MALE")] NidoranMale = 32,
     [pbr::OriginalName("NIDORINO")] Nidorino = 33,
     [pbr::OriginalName("NIDOKING")] Nidoking = 34,
-    [pbr::OriginalName("CLEFARY")] Clefary = 35,
+    [pbr::OriginalName("CLEFAIRY")] Clefairy = 35,
     [pbr::OriginalName("CLEFABLE")] Clefable = 36,
     [pbr::OriginalName("VULPIX")] Vulpix = 37,
     [pbr::OriginalName("NINETALES")] Ninetales = 38,
diff --git a/PokemonGo.RocketAPI/PokemonGo.RocketAPI.csproj b/PokemonGo.RocketAPI/PokemonGo.RocketAPI.csproj
index 09bd533..c14baac 100644
--- a/PokemonGo.RocketAPI/PokemonGo.RocketAPI.csproj
+++ b/PokemonGo.RocketAPI/PokemonGo.RocketAPI.csproj
@@ -17,7 +17,7 @@
     <UpdateAssemblyInfoVersion>False</UpdateAssemblyInfoVersion>
     <AssemblyVersionSettings>YearStamp.MonthStamp.DayStamp.Increment</AssemblyVersionSettings>
     <PrimaryVersionType>AssemblyVersionAttribute</PrimaryVersionType>
-    <AssemblyVersion>2016.7.22.28</AssemblyVersion>
+    <AssemblyVersion>2016.7.23.68</AssemblyVersion>
   </PropertyGroup>
   <PropertyGroup Condition=" '$(Configuration)|$(Platform)' == 'Debug|AnyCPU' ">
     <DebugSymbols>true</DebugSymbols>
@@ -112,6 +112,11 @@
     <Compile Include="Extensions\HttpClientExtensions.cs" />
     <Compile Include="Helpers\RandomHelper.cs" />
     <Compile Include="Helpers\RequestBuilder.cs" />
+    <Compile Include="Properties\Resources.Designer.cs">
+      <AutoGen>True</AutoGen>
+      <DesignTime>True</DesignTime>
+      <DependentUpon>Resources.resx</DependentUpon>
+    </Compile>
     <Compile Include="Resources.cs" />
     <Compile Include="Properties\AssemblyInfo.cs" />
   </ItemGroup>
@@ -122,7 +127,15 @@
     <None Include="Proto\Response.proto" />
     <None Include="Proto\Request.proto" />
   </ItemGroup>
-  <ItemGroup />
+  <ItemGroup>
+    <EmbeddedResource Include="Properties\Resources.resx">
+      <Generator>ResXFileCodeGenerator</Generator>
+      <LastGenOutput>Resources.Designer.cs</LastGenOutput>
+    </EmbeddedResource>
+  </ItemGroup>
+  <ItemGroup>
+    <None Include="Resources\PokemonsNotToCatch.txt" />
+  </ItemGroup>
   <Import Project="$(MSBuildToolsPath)\Microsoft.CSharp.targets" />
   <!-- To modify your build process, add your task inside one of the targets below and uncomment it.
        Other similar extension points exist, see Microsoft.Common.targets.
diff --git a/PokemonGo.RocketAPI/Properties/AssemblyInfo.cs b/PokemonGo.RocketAPI/Properties/AssemblyInfo.cs
index c02132e..7e1a3dc 100644
--- a/PokemonGo.RocketAPI/Properties/AssemblyInfo.cs
+++ b/PokemonGo.RocketAPI/Properties/AssemblyInfo.cs
@@ -32,5 +32,5 @@ using System.Runtime.InteropServices;
 // You can specify all the values or you can default the Build and Revision Numbers
 // by using the '*' as shown below:
 // [assembly: AssemblyVersion("1.0.*")]
-[assembly: AssemblyVersion("2016.7.22.28")]
+[assembly: AssemblyVersion("2016.7.23.68")]
 [assembly: AssemblyFileVersion("1.0.0.0")]
diff --git a/PokemonGo.RocketAPI/Proto/AllEnum.proto b/PokemonGo.RocketAPI/Proto/AllEnum.proto
index 39d24bd..1e888f8 100644
--- a/PokemonGo.RocketAPI/Proto/AllEnum.proto
+++ b/PokemonGo.RocketAPI/Proto/AllEnum.proto
@@ -416,7 +416,7 @@ enum PokemonId {
   BULBASAUR = 1;
   IVYSAUR = 2;
   VENUSAUR = 3;
-  CHARMENDER = 4;
+  CHARMANDER = 4;
   CHARMELEON = 5;
   CHARIZARD = 6;
   SQUIRTLE = 7;
@@ -447,7 +447,7 @@ enum PokemonId {
   NIDORAN_MALE = 32;
   NIDORINO = 33;
   NIDOKING = 34;
-  CLEFARY = 35;
+  CLEFAIRY = 35;
   CLEFABLE = 36;
   VULPIX = 37;
   NINETALES = 38;
You may download the files in Public Git.