Advertisement
Guest User

Untitled

a guest
Jul 27th, 2016
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 28.43 KB | None | 0 0
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Reflection.Emit;
  5. using System.Text;
  6. using System.Threading.Tasks;
  7. using AllEnum;
  8. using PokemonGo.RocketAPI.Enums;
  9. using PokemonGo.RocketAPI.Exceptions;
  10. using PokemonGo.RocketAPI.Extensions;
  11. using PokemonGo.RocketAPI.GeneratedCode;
  12. using PokemonGo.RocketAPI.Logic.Utils;
  13. using System.Diagnostics;
  14. using Google;
  15. using Google.Protobuf;
  16.  
  17. namespace PokemonGo.RocketAPI.Logic
  18. {
  19. public class Logic
  20. {
  21. private readonly Client _client;
  22. private readonly ISettings _clientSettings;
  23. private readonly Inventory _inventory;
  24. public static int xPGained;
  25. public Stopwatch stopWatch = new Stopwatch();
  26. public static int sniper = 0;
  27. public static string SnipedPokemon;
  28. public static int AmISoftBanned = 0;
  29. public Logic(ISettings clientSettings)
  30. {
  31. _clientSettings = clientSettings;
  32. _client = new Client(_clientSettings);
  33. _inventory = new Inventory(_client);
  34. }
  35.  
  36. public async Task Execute()
  37. {
  38. Logger.Write($"Starting Execute on login server: {_clientSettings.AuthType}", LogLevel.Info);
  39. stopWatch.Start();
  40. while (true)
  41. {
  42. try
  43. {
  44. if (_clientSettings.AuthType == AuthType.Ptc)
  45. await _client.DoPtcLogin(_clientSettings.PtcUsername, _clientSettings.PtcPassword);
  46. else if (_clientSettings.AuthType == AuthType.Google)
  47. await _client.DoGoogleLogin();
  48.  
  49. await PostLoginExecute();
  50. }
  51. catch (AccessTokenExpiredException)
  52. {
  53. Logger.Write($"Access token expired", LogLevel.Info);
  54. }
  55. await Task.Delay(10000);
  56. }
  57. }
  58.  
  59. public async Task PostLoginExecute()
  60. {
  61. while (true)
  62. {
  63. try
  64. {
  65. await _client.SetServer();
  66. var inventory = await _client.GetInventory();
  67. await DisplayPlayerLevelInTitle();
  68. var playerStats = inventory.InventoryDelta.InventoryItems.Select(i => i.InventoryItemData).FirstOrDefault(i => i.PlayerStats != null);
  69.  
  70. //await EvolveAllPokemonWithEnoughCandy();
  71. await TransferDuplicatePokemon();
  72. await RecycleItems();
  73. await ExecuteFarmingPokestopsAndPokemons();
  74.  
  75. /*
  76. * Example calls below
  77. *
  78. var profile = await _client.GetProfile();
  79. var settings = await _client.GetSettings();
  80. var mapObjects = await _client.GetMapObjects();
  81. var inventory = await _client.GetInventory();
  82. var pokemons = inventory.InventoryDelta.InventoryItems.Select(i => i.InventoryItemData?.Pokemon).Where(p => p != null && p?.PokemonId > 0);
  83. */
  84. }
  85. catch (AccessTokenExpiredException)
  86. {
  87. throw;
  88. }
  89. catch (Exception ex)
  90. {
  91. Logger.Write($"Exception: {ex}", LogLevel.Error);
  92. }
  93.  
  94. await Task.Delay(10000);
  95. }
  96. }
  97.  
  98. public async Task RepeatAction(int repeat, Func<Task> action)
  99. {
  100. for (int i = 0; i < repeat; i++)
  101. await action();
  102. }
  103.  
  104. private async Task ExecuteFarmingPokestopsAndPokemons()
  105. {
  106.  
  107. var mapObjects = await _client.GetMapObjects();
  108.  
  109. var pokeStops = mapObjects.MapCells.SelectMany(i => i.Forts).Where(i => i.Type == FortType.Checkpoint && i.CooldownCompleteTimestampMs < DateTime.UtcNow.ToUnixTime());
  110.  
  111. foreach (var pokeStop in pokeStops)
  112. {
  113. var distance = Navigation.DistanceBetween2Coordinates(_client.CurrentLat, _client.CurrentLng, pokeStop.Latitude, pokeStop.Longitude);
  114. if (Math.Round(distance) > 300)
  115. {
  116. continue;
  117. }
  118. var update = await _client.UpdatePlayerLocation(pokeStop.Latitude, pokeStop.Longitude, _clientSettings.DefaultAltitude);
  119. var fortInfo = await _client.GetFort(pokeStop.Id, pokeStop.Latitude, pokeStop.Longitude);
  120. var fortSearch = await _client.SearchFort(pokeStop.Id, pokeStop.Latitude, pokeStop.Longitude);
  121. Logger.Write($"Using Pokestop: {fortInfo.Name} in {Math.Round(distance)}m distance");
  122. Logger.Write($"Farmed XP: {fortSearch.ExperienceAwarded}, Gems: { fortSearch.GemsAwarded}, Eggs: {fortSearch.PokemonDataEgg} Items: {StringUtils.GetSummedFriendlyNameOfItemAwardList(fortSearch.ItemsAwarded)}", LogLevel.Info);
  123. if (fortSearch.ExperienceAwarded == 0)
  124. AmISoftBanned = 1;
  125. else
  126. {
  127. AmISoftBanned = 0;
  128. }
  129. if (AmISoftBanned==1)
  130. {
  131. Logger.Write($"Still softbanned trying to unban", LogLevel.Warning);
  132. for (int i = 0; i < 40; i++)
  133. fortSearch = await _client.SearchFort(pokeStop.Id, pokeStop.Latitude, pokeStop.Longitude);
  134. }
  135.  
  136. xPGained = xPGained + fortSearch.ExperienceAwarded;
  137. await Task.Delay(1000);
  138. if (sniper == 1)
  139. {
  140. await snipePokemon(SnipedPokemon);
  141. sniper = 0;
  142. }
  143. await RecycleItems();
  144. if (sniper == 1)
  145. {
  146. await snipePokemon(SnipedPokemon);
  147. sniper = 0;
  148. }
  149. await ExecuteCatchAllNearbyPokemons();
  150. if (sniper == 1)
  151. {
  152. await snipePokemon(SnipedPokemon);
  153. sniper = 0;
  154. }
  155. await TransferDuplicatePokemon();
  156. if (sniper == 1)
  157. {
  158. await snipePokemon(SnipedPokemon);
  159. sniper = 0;
  160. }
  161. }
  162. }
  163. private async Task ExecuteCatchAllNearbyPokemons()
  164. {
  165. var mapObjects = await _client.GetMapObjects();
  166.  
  167. var pokemons = mapObjects.MapCells.SelectMany(i => i.CatchablePokemons);
  168.  
  169. foreach (var pokemon in pokemons)
  170. {
  171. var distance = Navigation.DistanceBetween2Coordinates(_client.CurrentLat, _client.CurrentLng, pokemon.Latitude, pokemon.Longitude);
  172. if (distance > 100)
  173. await Task.Delay(15000);
  174. else
  175. await Task.Delay(500);
  176.  
  177. await _client.UpdatePlayerLocation(pokemon.Latitude, pokemon.Longitude, _clientSettings.DefaultAltitude);
  178.  
  179. var encounter = await _client.EncounterPokemon(pokemon.EncounterId, pokemon.SpawnpointId);
  180. await CatchEncounter(encounter, pokemon);
  181. }
  182. await Task.Delay(10000);
  183. }
  184.  
  185. private async Task CatchEncounter(EncounterResponse encounter, MapPokemon pokemon)
  186. {
  187.  
  188. CatchPokemonResponse caughtPokemonResponse;
  189. do
  190. {
  191. if (encounter?.CaptureProbability.CaptureProbability_.First() < 0.35 && encounter?.WildPokemon?.PokemonData?.Cp > 800)
  192. {
  193. //Throw berry is we can
  194. await UseBerry(pokemon.EncounterId, pokemon.SpawnpointId);
  195. }
  196.  
  197. var pokeball = await GetBestBall(encounter?.WildPokemon);
  198. var distance = Navigation.DistanceBetween2Coordinates(_client.CurrentLat, _client.CurrentLng, pokemon.Latitude, pokemon.Longitude);
  199. caughtPokemonResponse = await _client.CatchPokemon(pokemon.EncounterId, pokemon.SpawnpointId, pokemon.Latitude, pokemon.Longitude, pokeball);
  200. Logger.Write(caughtPokemonResponse.Status == CatchPokemonResponse.Types.CatchStatus.CatchSuccess ? $"We caught a {pokemon.PokemonId} with CP {encounter?.WildPokemon?.PokemonData?.Cp} and {Math.Round(CalculatePokemonPerfection(encounter?.WildPokemon?.PokemonData))} IV and CaptureProbability: {encounter?.CaptureProbability.CaptureProbability_.First()} using a {pokeball} in {Math.Round(distance)}m distance" : $"{pokemon.PokemonId} with {encounter?.WildPokemon?.PokemonData?.Cp} CP and {Math.Round(CalculatePokemonPerfection(encounter?.WildPokemon?.PokemonData))} IV and CaptureProbability: {encounter?.CaptureProbability.CaptureProbability_.First()} in {Math.Round(distance)}m distance {caughtPokemonResponse.Status} while using a {pokeball}..", LogLevel.Info);
  201. if(caughtPokemonResponse.Status == CatchPokemonResponse.Types.CatchStatus.CatchSuccess)
  202. xPGained = xPGained + 100;
  203. await Task.Delay(2000);
  204. }
  205. while (caughtPokemonResponse.Status == CatchPokemonResponse.Types.CatchStatus.CatchMissed || caughtPokemonResponse.Status == CatchPokemonResponse.Types.CatchStatus.CatchEscape) ;
  206. }
  207.  
  208. public async Task EvolveAllPokemonWithEnoughCandy()
  209. {
  210. var pokemonToEvolve = await _inventory.GetPokemonToEvolve();
  211. foreach (var pokemon in pokemonToEvolve)
  212. {
  213. if (pokemon.PokemonId == PokemonId.Pidgey || pokemon.PokemonId == PokemonId.Caterpie || pokemon.PokemonId == PokemonId.Weedle)
  214. {
  215. var evolvePokemonOutProto = await _client.EvolvePokemon((ulong)pokemon.Id);
  216.  
  217. if (evolvePokemonOutProto.Result == EvolvePokemonOut.Types.EvolvePokemonStatus.PokemonEvolvedSuccess)
  218. Logger.Write($"Evolved {pokemon.PokemonId} successfully for {evolvePokemonOutProto.ExpAwarded}xp", LogLevel.Info);
  219. else
  220. Logger.Write($"Failed to evolve {pokemon.PokemonId}. EvolvePokemonOutProto.Result was {evolvePokemonOutProto.Result}, stopping evolving {pokemon.PokemonId}", LogLevel.Info);
  221. await Task.Delay(500);
  222. }
  223.  
  224. }
  225. }
  226.  
  227. private async Task TransferDuplicatePokemon(bool keepPokemonsThatCanEvolve = false)
  228. {
  229. var duplicatePokemons = await _inventory.GetDuplicatePokemonToTransfer(keepPokemonsThatCanEvolve, _clientSettings.PokemonsNotToTransfer);
  230.  
  231. foreach (var duplicatePokemon in duplicatePokemons)
  232. {
  233. if (CalculatePokemonPerfection(duplicatePokemon) >= 95 || duplicatePokemon.Cp > 1500)
  234. {
  235. Logger.Write($"Kept pokemon {duplicatePokemon.PokemonId} with {Math.Round(CalculatePokemonPerfection(duplicatePokemon))} IV and {duplicatePokemon.Cp} CP", LogLevel.Warning);
  236. continue;
  237. }
  238. var transfer = await _client.TransferPokemon(duplicatePokemon.Id);
  239. Logger.Write($"Transfer {duplicatePokemon.PokemonId} with {duplicatePokemon.Cp} CP", LogLevel.Info);
  240. await Task.Delay(500);
  241. }
  242. }
  243.  
  244. public struct BaseStats
  245. {
  246. public int BaseAttack, BaseDefense, BaseStamina;
  247. public BaseStats(int baseStamina, int baseAttack, int baseDefense)
  248. {
  249. this.BaseAttack = baseAttack;
  250. this.BaseDefense = baseDefense;
  251. this.BaseStamina = baseStamina;
  252. }
  253. public override string ToString()
  254. {
  255. return (String.Format("({0} atk,{1} def,{2} sta)", BaseAttack, BaseDefense, BaseStamina));
  256. }
  257. }
  258. private async Task snipePokemon(string Coordinate)
  259. {
  260. string[] word = Coordinate.Split(' ');
  261. if (word.Length > 2) {
  262. word[1] = word[1] + word[2];
  263. }
  264. string[] word2 = word[1].Split(',');
  265. var startLat = _client.CurrentLat;
  266. var startLng = _client.CurrentLng;
  267. var update = await _client.UpdatePlayerLocation(Double.Parse(word2[0]), Double.Parse(word2[1]), _clientSettings.DefaultAltitude);
  268. await Task.Delay(1500);
  269. Logger.Write("Changed Location", LogLevel.Warning);
  270. var foundpoki = 0;
  271. var mapObjects = await _client.GetMapObjects();
  272.  
  273. var pokemons = mapObjects.MapCells.SelectMany(i => i.CatchablePokemons);
  274.  
  275. var pokeTarg = Enum.Parse(typeof(PokemonId), word[0], true);
  276.  
  277. foreach (var pokemon in pokemons)
  278. {
  279. if (pokemon.PokemonId != (PokemonId)pokeTarg)
  280. continue;
  281. var distance = Navigation.DistanceBetween2Coordinates(_client.CurrentLat, _client.CurrentLng, pokemon.Latitude, pokemon.Longitude);
  282. await Task.Delay(distance > 100 ? 15000 : 500);
  283.  
  284. var encounter = await _client.EncounterPokemon(pokemon.EncounterId, pokemon.SpawnpointId);
  285.  
  286.  
  287. if (encounter.Status == EncounterResponse.Types.Status.EncounterSuccess)
  288. {
  289. Logger.Write($"Found {word[0]}",LogLevel.Warning);
  290. await _client.UpdatePlayerLocation(startLat, startLng, 10);
  291. await CatchEncounter(encounter, pokemon);
  292. foundpoki = 1;
  293. }
  294. else
  295. Logger.Write($"Encounter problem: {encounter?.Status}",LogLevel.Warning);
  296. break;
  297.  
  298. }
  299. if (foundpoki != 1)
  300. {
  301. Logger.Write($"Could not find {word[2]}", LogLevel.Warning);
  302. await Task.Delay(5000);
  303. }
  304. else
  305. {
  306. await Task.Delay(10000);
  307. }
  308. }
  309.  
  310. public static double CalculatePokemonPerfection(PokemonData poke)
  311. {
  312. if (poke.CpMultiplier + poke.AdditionalCpMultiplier == 0)
  313. return (poke.IndividualAttack * 2 + poke.IndividualDefense + poke.IndividualStamina) / (4.0 * 15.0) * 100.0;
  314.  
  315. BaseStats baseStats = GetBaseStats(poke.PokemonId);
  316. var max_cp = CalculateMaxCPMultiplier(poke);
  317. var min_cp = CalculateMinCPMultiplier(poke);
  318. var cur_cp = CalculateCPMultiplier(poke);
  319.  
  320. return ((cur_cp - min_cp) / (max_cp - min_cp)) * 100.0;
  321. }
  322.  
  323. public static double CalculateMaxCPMultiplier(PokemonData poke)
  324. {
  325. BaseStats baseStats = GetBaseStats(poke.PokemonId);
  326. return (baseStats.BaseAttack + 15) * Math.Sqrt(baseStats.BaseDefense + 15) * Math.Sqrt(baseStats.BaseStamina + 15);
  327. }
  328.  
  329. public static double CalculateMinCPMultiplier(PokemonData poke)
  330. {
  331. BaseStats baseStats = GetBaseStats(poke.PokemonId);
  332. return (baseStats.BaseAttack) * Math.Sqrt(baseStats.BaseDefense) * Math.Sqrt(baseStats.BaseStamina);
  333. }
  334.  
  335. public static double CalculateCPMultiplier(PokemonData poke)
  336. {
  337. BaseStats baseStats = GetBaseStats(poke.PokemonId);
  338. return (baseStats.BaseAttack + poke.IndividualAttack) * Math.Sqrt(baseStats.BaseDefense + poke.IndividualDefense) * Math.Sqrt(baseStats.BaseStamina + poke.IndividualStamina);
  339. }
  340.  
  341.  
  342. private async Task RecycleItems()
  343. {
  344. var items = await _inventory.GetItemsToRecycle(_clientSettings);
  345. await DisplayPlayerLevelInTitle();
  346. foreach (var item in items)
  347. {
  348. var transfer = await _client.RecycleItem((AllEnum.ItemId)item.Item_, item.Count);
  349. Logger.Write($"Recycled {item.Count}x {(AllEnum.ItemId)item.Item_}", LogLevel.Info);
  350. await Task.Delay(500);
  351. }
  352. }
  353.  
  354. private async Task<MiscEnums.Item> GetBestBall(WildPokemon pokemon)
  355. {
  356. var pokemonCp = pokemon?.PokemonData?.Cp;
  357.  
  358. var pokeBallsCount = await _inventory.GetItemAmountByType(MiscEnums.Item.ITEM_POKE_BALL);
  359. var greatBallsCount = await _inventory.GetItemAmountByType(MiscEnums.Item.ITEM_GREAT_BALL);
  360. var ultraBallsCount = await _inventory.GetItemAmountByType(MiscEnums.Item.ITEM_ULTRA_BALL);
  361. var masterBallsCount = await _inventory.GetItemAmountByType(MiscEnums.Item.ITEM_MASTER_BALL);
  362.  
  363. if (masterBallsCount > 0 && pokemonCp >= 1000)
  364. return MiscEnums.Item.ITEM_MASTER_BALL;
  365. else if (ultraBallsCount > 0 && pokemonCp >= 1000)
  366. return MiscEnums.Item.ITEM_ULTRA_BALL;
  367. else if (greatBallsCount > 0 && pokemonCp >= 1000)
  368. return MiscEnums.Item.ITEM_GREAT_BALL;
  369.  
  370. if (ultraBallsCount > 0 && pokemonCp >= 600)
  371. return MiscEnums.Item.ITEM_ULTRA_BALL;
  372. else if (greatBallsCount > 0 && pokemonCp >= 600)
  373. return MiscEnums.Item.ITEM_GREAT_BALL;
  374.  
  375. if (greatBallsCount > 0 && pokemonCp >= 350)
  376. return MiscEnums.Item.ITEM_GREAT_BALL;
  377.  
  378. if (pokeBallsCount > 0)
  379. return MiscEnums.Item.ITEM_POKE_BALL;
  380. if (greatBallsCount > 0)
  381. return MiscEnums.Item.ITEM_GREAT_BALL;
  382. if (ultraBallsCount > 0)
  383. return MiscEnums.Item.ITEM_ULTRA_BALL;
  384. if (masterBallsCount > 0)
  385. return MiscEnums.Item.ITEM_MASTER_BALL;
  386.  
  387. return MiscEnums.Item.ITEM_POKE_BALL;
  388. }
  389.  
  390. public async Task UseBerry(ulong encounterId, string spawnPointId)
  391. {
  392. var inventoryBalls = await _inventory.GetItems();
  393. var berries = inventoryBalls.Where(p => (ItemId) p.Item_ == ItemId.ItemRazzBerry);
  394. var berry = berries.FirstOrDefault();
  395.  
  396. if (berry == null)
  397. return;
  398.  
  399. var useRaspberry = await _client.UseCaptureItem(encounterId, AllEnum.ItemId.ItemRazzBerry, spawnPointId);
  400. Logger.Write($"Use Rasperry. Remaining: {berry.Count}", LogLevel.Info);
  401. await Task.Delay(3000);
  402. }
  403.  
  404. private async Task DisplayPlayerLevelInTitle()
  405. {
  406. var playerStats = await _inventory.GetPlayerStats();
  407. var playerStat = playerStats.FirstOrDefault();
  408. if (playerStat != null)
  409. {
  410. var time = int.Parse(stopWatch.ElapsedMilliseconds.ToString());
  411. var message = $"Player level {playerStat.Level:0} - ({(playerStat.Experience - playerStat.PrevLevelXp):0} / {(playerStat.NextLevelXp - playerStat.PrevLevelXp):0}) - Xp/Hour = {3600 * xPGained / (time/1000)}";
  412. System.Console.Title = message;
  413. }
  414. await Task.Delay(500);
  415. }
  416. public static BaseStats GetBaseStats(PokemonId id)
  417. {
  418. switch ((int)id)
  419. {
  420. case 1: return new BaseStats(90, 126, 126);
  421. case 2: return new BaseStats(120, 156, 158);
  422. case 3: return new BaseStats(160, 198, 200);
  423. case 4: return new BaseStats(78, 128, 108);
  424. case 5: return new BaseStats(116, 160, 140);
  425. case 6: return new BaseStats(156, 212, 182);
  426. case 7: return new BaseStats(88, 112, 142);
  427. case 8: return new BaseStats(118, 144, 176);
  428. case 9: return new BaseStats(158, 186, 222);
  429. case 10: return new BaseStats(90, 62, 66);
  430. case 11: return new BaseStats(100, 56, 86);
  431. case 12: return new BaseStats(120, 144, 144);
  432. case 13: return new BaseStats(80, 68, 64);
  433. case 14: return new BaseStats(90, 62, 82);
  434. case 15: return new BaseStats(130, 144, 130);
  435. case 16: return new BaseStats(80, 94, 90);
  436. case 17: return new BaseStats(126, 126, 122);
  437. case 18: return new BaseStats(166, 170, 166);
  438. case 19: return new BaseStats(60, 92, 86);
  439. case 20: return new BaseStats(110, 146, 150);
  440. case 21: return new BaseStats(80, 102, 78);
  441. case 22: return new BaseStats(130, 168, 146);
  442. case 23: return new BaseStats(70, 112, 112);
  443. case 24: return new BaseStats(120, 166, 166);
  444. case 25: return new BaseStats(70, 124, 108);
  445. case 26: return new BaseStats(120, 200, 154);
  446. case 27: return new BaseStats(100, 90, 114);
  447. case 28: return new BaseStats(150, 150, 172);
  448. case 29: return new BaseStats(110, 100, 104);
  449. case 30: return new BaseStats(140, 132, 136);
  450. case 31: return new BaseStats(180, 184, 190);
  451. case 32: return new BaseStats(92, 110, 94);
  452. case 33: return new BaseStats(122, 142, 128);
  453. case 34: return new BaseStats(162, 204, 170);
  454. case 35: return new BaseStats(140, 116, 124);
  455. case 36: return new BaseStats(190, 178, 178);
  456. case 37: return new BaseStats(76, 106, 118);
  457. case 38: return new BaseStats(146, 176, 194);
  458. case 39: return new BaseStats(230, 98, 54);
  459. case 40: return new BaseStats(280, 168, 108);
  460. case 41: return new BaseStats(80, 88, 90);
  461. case 42: return new BaseStats(150, 164, 164);
  462. case 43: return new BaseStats(90, 134, 130);
  463. case 44: return new BaseStats(120, 162, 158);
  464. case 45: return new BaseStats(150, 202, 190);
  465. case 46: return new BaseStats(70, 122, 120);
  466. case 47: return new BaseStats(120, 162, 170);
  467. case 48: return new BaseStats(120, 108, 118);
  468. case 49: return new BaseStats(140, 172, 154);
  469. case 50: return new BaseStats(20, 108, 86);
  470. case 51: return new BaseStats(70, 148, 140);
  471. case 52: return new BaseStats(80, 104, 94);
  472. case 53: return new BaseStats(130, 156, 146);
  473. case 54: return new BaseStats(100, 132, 112);
  474. case 55: return new BaseStats(160, 194, 176);
  475. case 56: return new BaseStats(80, 122, 96);
  476. case 57: return new BaseStats(130, 178, 150);
  477. case 58: return new BaseStats(110, 156, 110);
  478. case 59: return new BaseStats(180, 230, 180);
  479. case 60: return new BaseStats(80, 108, 98);
  480. case 61: return new BaseStats(130, 132, 132);
  481. case 62: return new BaseStats(180, 180, 202);
  482. case 63: return new BaseStats(50, 110, 76);
  483. case 64: return new BaseStats(80, 150, 112);
  484. case 65: return new BaseStats(110, 186, 152);
  485. case 66: return new BaseStats(140, 118, 96);
  486. case 67: return new BaseStats(160, 154, 144);
  487. case 68: return new BaseStats(180, 198, 180);
  488. case 69: return new BaseStats(100, 158, 78);
  489. case 70: return new BaseStats(130, 190, 110);
  490. case 71: return new BaseStats(160, 222, 152);
  491. case 72: return new BaseStats(80, 106, 136);
  492. case 73: return new BaseStats(160, 170, 196);
  493. case 74: return new BaseStats(80, 106, 118);
  494. case 75: return new BaseStats(110, 142, 156);
  495. case 76: return new BaseStats(160, 176, 198);
  496. case 77: return new BaseStats(100, 168, 138);
  497. case 78: return new BaseStats(130, 200, 170);
  498. case 79: return new BaseStats(180, 110, 110);
  499. case 80: return new BaseStats(190, 184, 198);
  500. case 81: return new BaseStats(50, 128, 138);
  501. case 82: return new BaseStats(100, 186, 180);
  502. case 83: return new BaseStats(104, 138, 132);
  503. case 84: return new BaseStats(70, 126, 96);
  504. case 85: return new BaseStats(120, 182, 150);
  505. case 86: return new BaseStats(130, 104, 138);
  506. case 87: return new BaseStats(180, 156, 192);
  507. case 88: return new BaseStats(160, 124, 110);
  508. case 89: return new BaseStats(210, 180, 188);
  509. case 90: return new BaseStats(60, 120, 112);
  510. case 91: return new BaseStats(100, 196, 196);
  511. case 92: return new BaseStats(60, 136, 82);
  512. case 93: return new BaseStats(90, 172, 118);
  513. case 94: return new BaseStats(120, 204, 156);
  514. case 95: return new BaseStats(70, 90, 186);
  515. case 96: return new BaseStats(120, 104, 140);
  516. case 97: return new BaseStats(170, 162, 196);
  517. case 98: return new BaseStats(60, 116, 110);
  518. case 99: return new BaseStats(110, 178, 168);
  519. case 100: return new BaseStats(80, 102, 124);
  520. case 101: return new BaseStats(120, 150, 174);
  521. case 102: return new BaseStats(120, 110, 132);
  522. case 103: return new BaseStats(190, 232, 164);
  523. case 104: return new BaseStats(100, 102, 150);
  524. case 105: return new BaseStats(120, 140, 202);
  525. case 106: return new BaseStats(100, 148, 172);
  526. case 107: return new BaseStats(100, 138, 204);
  527. case 108: return new BaseStats(180, 126, 160);
  528. case 109: return new BaseStats(80, 136, 142);
  529. case 110: return new BaseStats(130, 190, 198);
  530. case 111: return new BaseStats(160, 110, 116);
  531. case 112: return new BaseStats(210, 166, 160);
  532. case 113: return new BaseStats(500, 40, 60);
  533. case 114: return new BaseStats(130, 164, 152);
  534. case 115: return new BaseStats(210, 142, 178);
  535. case 116: return new BaseStats(60, 122, 100);
  536. case 117: return new BaseStats(110, 176, 150);
  537. case 118: return new BaseStats(90, 112, 126);
  538. case 119: return new BaseStats(160, 172, 160);
  539. case 120: return new BaseStats(60, 130, 128);
  540. case 121: return new BaseStats(120, 194, 192);
  541. case 122: return new BaseStats(80, 154, 196);
  542. case 123: return new BaseStats(140, 176, 180);
  543. case 124: return new BaseStats(130, 172, 134);
  544. case 125: return new BaseStats(130, 198, 160);
  545. case 126: return new BaseStats(130, 214, 158);
  546. case 127: return new BaseStats(130, 184, 186);
  547. case 128: return new BaseStats(150, 148, 184);
  548. case 129: return new BaseStats(40, 42, 84);
  549. case 130: return new BaseStats(190, 192, 196);
  550. case 131: return new BaseStats(260, 186, 190);
  551. case 132: return new BaseStats(96, 110, 110);
  552. case 133: return new BaseStats(110, 114, 128);
  553. case 134: return new BaseStats(260, 186, 168);
  554. case 135: return new BaseStats(130, 192, 174);
  555. case 136: return new BaseStats(130, 238, 178);
  556. case 137: return new BaseStats(130, 156, 158);
  557. case 138: return new BaseStats(70, 132, 160);
  558. case 139: return new BaseStats(140, 180, 202);
  559. case 140: return new BaseStats(60, 148, 142);
  560. case 141: return new BaseStats(120, 190, 190);
  561. case 142: return new BaseStats(160, 182, 162);
  562. case 143: return new BaseStats(320, 180, 180);
  563. case 144: return new BaseStats(180, 198, 242);
  564. case 145: return new BaseStats(180, 232, 194);
  565. case 146: return new BaseStats(180, 242, 194);
  566. case 147: return new BaseStats(82, 128, 110);
  567. case 148: return new BaseStats(122, 170, 152);
  568. case 149: return new BaseStats(182, 250, 212);
  569. case 150: return new BaseStats(212, 284, 202);
  570. case 151: return new BaseStats(200, 220, 220);
  571. default: return new BaseStats();
  572. }
  573. }
  574. }
  575. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement