├── .gitattributes ├── .gitignore ├── .gitmodules ├── Images ├── MainForm.png ├── SettingForm.png ├── SettingForm_2.png ├── SettingForm_3.png ├── SettingForm_4.png └── SettingForm_5.png ├── LICENSE.md ├── PokemonGo.RocketBot.Logic ├── Common │ ├── ApiFailureStrategy.cs │ └── Translations.cs ├── DataDumper │ ├── Dumper.cs │ └── IDumper.cs ├── Event │ ├── DisplayHighestsPokemonEvent.cs │ ├── EggHatchedEvent.cs │ ├── EggIncubatorStatusEvent.cs │ ├── EggsListEvent.cs │ ├── ErrorEvent.cs │ ├── EventDispatcher.cs │ ├── EvolveCountEvent.cs │ ├── FortFailedEvent.cs │ ├── FortTargetEvent.cs │ ├── FortUsedEvent.cs │ ├── GetHumanizeRouteEvent.cs │ ├── HumanWalkingEvent.cs │ ├── IEvent.cs │ ├── InventoryListEvent.cs │ ├── ItemRecycledEvent.cs │ ├── LootPokestopEvent.cs │ ├── NoPokeballEvent.cs │ ├── NoticeEvent.cs │ ├── OptimizeRouteEvent.cs │ ├── PokeStopListEvent.cs │ ├── PokemonCaptureEvent.cs │ ├── PokemonEvolveEvent.cs │ ├── PokemonListEvent.cs │ ├── PokemonsEncounterEvent.cs │ ├── ProfileEvent.cs │ ├── SnipeEvent.cs │ ├── SnipeModeEvent.cs │ ├── SnipeScanEvent.cs │ ├── TransferPokemonEvent.cs │ ├── UpdateEvent.cs │ ├── UpdatePositionEvent.cs │ ├── UseBerryEvent.cs │ ├── UseLuckyEggEvent.cs │ └── WarnEvent.cs ├── ILogicSettings.cs ├── Inventory.cs ├── Localization │ └── Localizer.cs ├── Logging │ ├── ILogger.cs │ └── Logger.cs ├── Navigation.cs ├── PoGoUtils │ └── PokemonInfo.cs ├── PokemonGo.RocketBot.Logic.csproj ├── Properties │ └── AssemblyInfo.cs ├── Service │ ├── BotService.cs │ └── TelegramService.cs ├── Settings.cs ├── State │ ├── FarmState.cs │ ├── IState.cs │ ├── InfoState.cs │ ├── LoginState.cs │ ├── PositionCheckState.cs │ ├── Session.cs │ ├── StateMachine.cs │ └── VersionCheckState.cs ├── StatisticsAggregator.cs ├── Tasks │ ├── CatchIncensePokemonsTask.cs │ ├── CatchLurePokemonsTask.cs │ ├── CatchNearbyPokemonsTask.cs │ ├── CatchPokemonTask.cs │ ├── DisplayPokemonStatsTask.cs │ ├── EggsListTask.cs │ ├── EvolvePokemonTask.cs │ ├── EvolveSpecificPokemonTask.cs │ ├── Farm.cs │ ├── FarmPokestopsGPXTask.cs │ ├── FarmPokestopsTask.cs │ ├── FavoritePokemonTask.cs │ ├── GetPokeDexCount.cs │ ├── InventoryListTask.cs │ ├── LevelUpPokemonTask.cs │ ├── LevelUpSpecificPokemonTask.cs │ ├── Login.cs │ ├── PokemonListTask.cs │ ├── RecycleItemsTask.cs │ ├── RecycleSpecificItemTask.cs │ ├── RenamePokemonTask.cs │ ├── RenameSpecificPokemonTask.cs │ ├── SnipePokemonTask.cs │ ├── TransferDuplicatePokemonTask.cs │ ├── TransferSpecificPokemonTask.cs │ ├── TransferWeakPokemonTask.cs │ ├── UseIncenseConstantlyTask.cs │ ├── UseIncenseTask.cs │ ├── UseIncubatorsTask.cs │ ├── UseLuckyEggConstantlyTask.cs │ ├── UseLuckyEggTask.cs │ └── UseNearbyPokestopsTask.cs ├── Utils │ ├── DelayingUtils.cs │ ├── DeviceInfoHelper.cs │ ├── EggWalker.cs │ ├── ErrorHandler.cs │ ├── GPXReader.cs │ ├── JitterUtils.cs │ ├── LocationUtils.cs │ ├── NecroWebClient.cs │ ├── RouteOptimizeUtil.cs │ ├── Statistics.cs │ ├── StringUtils.cs │ ├── WebClientExtensions.cs │ ├── WebUtils.cs │ └── dijkstras.cs ├── app.config └── packages.config ├── PokemonGo.RocketBot.Window ├── App.config ├── Config │ ├── Translations │ │ ├── translation.ca.json │ │ ├── translation.cs.json │ │ ├── translation.da.json │ │ ├── translation.de.json │ │ ├── translation.es.json │ │ ├── translation.et.json │ │ ├── translation.fr.json │ │ ├── translation.gr.json │ │ ├── translation.hu.json │ │ ├── translation.id.json │ │ ├── translation.it.json │ │ ├── translation.lt.json │ │ ├── translation.nl.json │ │ ├── translation.no.json │ │ ├── translation.pl.json │ │ ├── translation.pt-br.json │ │ ├── translation.pt-pt.json │ │ ├── translation.ro.json │ │ ├── translation.ru_RU.json │ │ ├── translation.sv.json │ │ ├── translation.th.json │ │ ├── translation.tr.json │ │ ├── translation.uk_UA.json │ │ ├── translation.vi.json │ │ ├── translation.zh_CN.json │ │ ├── translation.zh_TW.json │ │ └── translation.zh_hk.json │ ├── log4net.config │ └── log4net.unix.config ├── ConsoleEventListener.cs ├── ConsoleLogger.cs ├── FodyWeavers.xml ├── Forms │ ├── ItemBox.cs │ ├── ItemBox.designer.cs │ ├── ItemBox.resx │ ├── ItemForm.cs │ ├── ItemForm.designer.cs │ ├── MainForm.cs │ ├── MainForm.designer.cs │ ├── MainForm.resx │ ├── NicknamePokemonForm.cs │ ├── NicknamePokemonForm.designer.cs │ ├── NicknamePokemonForm.resx │ ├── SettingForm.Designer.cs │ ├── SettingForm.cs │ └── SettingForm.resx ├── Helpers │ ├── DeviceHelper.cs │ ├── MachineIdHelper.cs │ ├── ResourceHelper.cs │ ├── S2GMapDrawer.cs │ ├── TimeHelper.cs │ └── VersionHelper.cs ├── Images │ ├── Items │ │ ├── ItemBlukBerry.png │ │ ├── ItemGreatBall.png │ │ ├── ItemHyperPotion.png │ │ ├── ItemIncenseOrdinary.png │ │ ├── ItemIncubatorBasic.png │ │ ├── ItemIncubatorBasicUnlimited.png │ │ ├── ItemItemStorageUpgrade.png │ │ ├── ItemLuckyEgg.png │ │ ├── ItemMasterBall.png │ │ ├── ItemMaxPotion.png │ │ ├── ItemMaxRevive.png │ │ ├── ItemNanabBerry.png │ │ ├── ItemPinapBerry.png │ │ ├── ItemPokeBall.png │ │ ├── ItemPokemonStorageUpgrade.png │ │ ├── ItemPotion.png │ │ ├── ItemRazzBerry.png │ │ ├── ItemRevive.png │ │ ├── ItemSpecialCamera.png │ │ ├── ItemSuperPotion.png │ │ ├── ItemTroyDisk.png │ │ ├── ItemUltraBall.png │ │ └── ItemWeparBerry.png │ ├── Markers │ │ ├── Pokestop.png │ │ ├── Pokestop_looted.png │ │ ├── Trainer_Front.png │ │ ├── Trainer_Left.png │ │ └── Trainer_Right.png │ ├── Miscs │ │ └── question.png │ └── Pokemon │ │ ├── Pokemon_1.png │ │ ├── Pokemon_10.png │ │ ├── Pokemon_100.png │ │ ├── Pokemon_101.png │ │ ├── Pokemon_102.png │ │ ├── Pokemon_103.png │ │ ├── Pokemon_104.png │ │ ├── Pokemon_105.png │ │ ├── Pokemon_106.png │ │ ├── Pokemon_107.png │ │ ├── Pokemon_108.png │ │ ├── Pokemon_109.png │ │ ├── Pokemon_11.png │ │ ├── Pokemon_110.png │ │ ├── Pokemon_111.png │ │ ├── Pokemon_112.png │ │ ├── Pokemon_113.png │ │ ├── Pokemon_114.png │ │ ├── Pokemon_115.png │ │ ├── Pokemon_116.png │ │ ├── Pokemon_117.png │ │ ├── Pokemon_118.png │ │ ├── Pokemon_119.png │ │ ├── Pokemon_12.png │ │ ├── Pokemon_120.png │ │ ├── Pokemon_121.png │ │ ├── Pokemon_122.png │ │ ├── Pokemon_123.png │ │ ├── Pokemon_124.png │ │ ├── Pokemon_125.png │ │ ├── Pokemon_126.png │ │ ├── Pokemon_127.png │ │ ├── Pokemon_128.png │ │ ├── Pokemon_129.png │ │ ├── Pokemon_13.png │ │ ├── Pokemon_130.png │ │ ├── Pokemon_131.png │ │ ├── Pokemon_132.png │ │ ├── Pokemon_133.png │ │ ├── Pokemon_134.png │ │ ├── Pokemon_135.png │ │ ├── Pokemon_136.png │ │ ├── Pokemon_137.png │ │ ├── Pokemon_138.png │ │ ├── Pokemon_139.png │ │ ├── Pokemon_14.png │ │ ├── Pokemon_140.png │ │ ├── Pokemon_141.png │ │ ├── Pokemon_142.png │ │ ├── Pokemon_143.png │ │ ├── Pokemon_144.png │ │ ├── Pokemon_145.png │ │ ├── Pokemon_146.png │ │ ├── Pokemon_147.png │ │ ├── Pokemon_148.png │ │ ├── Pokemon_149.png │ │ ├── Pokemon_15.png │ │ ├── Pokemon_150.png │ │ ├── Pokemon_151.png │ │ ├── Pokemon_16.png │ │ ├── Pokemon_17.png │ │ ├── Pokemon_18.png │ │ ├── Pokemon_19.png │ │ ├── Pokemon_2.png │ │ ├── Pokemon_20.png │ │ ├── Pokemon_21.png │ │ ├── Pokemon_22.png │ │ ├── Pokemon_23.png │ │ ├── Pokemon_24.png │ │ ├── Pokemon_25.png │ │ ├── Pokemon_26.png │ │ ├── Pokemon_27.png │ │ ├── Pokemon_28.png │ │ ├── Pokemon_29.png │ │ ├── Pokemon_3.png │ │ ├── Pokemon_30.png │ │ ├── Pokemon_31.png │ │ ├── Pokemon_32.png │ │ ├── Pokemon_33.png │ │ ├── Pokemon_34.png │ │ ├── Pokemon_35.png │ │ ├── Pokemon_36.png │ │ ├── Pokemon_37.png │ │ ├── Pokemon_38.png │ │ ├── Pokemon_39.png │ │ ├── Pokemon_4.png │ │ ├── Pokemon_40.png │ │ ├── Pokemon_41.png │ │ ├── Pokemon_42.png │ │ ├── Pokemon_43.png │ │ ├── Pokemon_44.png │ │ ├── Pokemon_45.png │ │ ├── Pokemon_46.png │ │ ├── Pokemon_47.png │ │ ├── Pokemon_48.png │ │ ├── Pokemon_49.png │ │ ├── Pokemon_5.png │ │ ├── Pokemon_50.png │ │ ├── Pokemon_51.png │ │ ├── Pokemon_52.png │ │ ├── Pokemon_53.png │ │ ├── Pokemon_54.png │ │ ├── Pokemon_55.png │ │ ├── Pokemon_56.png │ │ ├── Pokemon_57.png │ │ ├── Pokemon_58.png │ │ ├── Pokemon_59.png │ │ ├── Pokemon_6.png │ │ ├── Pokemon_60.png │ │ ├── Pokemon_61.png │ │ ├── Pokemon_62.png │ │ ├── Pokemon_63.png │ │ ├── Pokemon_64.png │ │ ├── Pokemon_65.png │ │ ├── Pokemon_66.png │ │ ├── Pokemon_67.png │ │ ├── Pokemon_68.png │ │ ├── Pokemon_69.png │ │ ├── Pokemon_7.png │ │ ├── Pokemon_70.png │ │ ├── Pokemon_71.png │ │ ├── Pokemon_72.png │ │ ├── Pokemon_73.png │ │ ├── Pokemon_74.png │ │ ├── Pokemon_75.png │ │ ├── Pokemon_76.png │ │ ├── Pokemon_77.png │ │ ├── Pokemon_78.png │ │ ├── Pokemon_79.png │ │ ├── Pokemon_8.png │ │ ├── Pokemon_80.png │ │ ├── Pokemon_81.png │ │ ├── Pokemon_82.png │ │ ├── Pokemon_83.png │ │ ├── Pokemon_84.png │ │ ├── Pokemon_85.png │ │ ├── Pokemon_86.png │ │ ├── Pokemon_87.png │ │ ├── Pokemon_88.png │ │ ├── Pokemon_89.png │ │ ├── Pokemon_9.png │ │ ├── Pokemon_90.png │ │ ├── Pokemon_91.png │ │ ├── Pokemon_92.png │ │ ├── Pokemon_93.png │ │ ├── Pokemon_94.png │ │ ├── Pokemon_95.png │ │ ├── Pokemon_96.png │ │ ├── Pokemon_97.png │ │ ├── Pokemon_98.png │ │ └── Pokemon_99.png ├── ItemSetting.Designer.cs ├── ItemSetting.cs ├── ItemSetting.resx ├── Models │ ├── GMapMarkerPokestops.cs │ ├── GMapMarkerTrainer.cs │ └── LoggingStrings.cs ├── Plugin │ ├── INecroPlugin.cs │ ├── PluginInitializerInfo.cs │ └── PluginManager.cs ├── PokemomObject.cs ├── PokemonGo.RocketBot.Window.csproj ├── Program.cs ├── Properties │ ├── AssemblyInfo.cs │ ├── Resources.Designer.cs │ └── Resources.resx ├── Resources │ ├── Icon.ico │ ├── ProgressBar.cs │ ├── client_secret.json │ ├── device info.csv │ └── encrypt.dll ├── SETUP.md ├── WebSocketHandler │ ├── ActionCommands │ │ ├── EvolvePokemonHandler.cs │ │ └── TransferPokemonHandler.cs │ ├── EncodingHelper.cs │ ├── GetCommands │ │ ├── Events │ │ │ ├── EggListResponce.cs │ │ │ ├── ItemListResponce.cs │ │ │ ├── PokemonListResponce.cs │ │ │ ├── TrainerProfileResponce.cs │ │ │ └── WebResponce.cs │ │ ├── GetEggListHandler.cs │ │ ├── GetItemsListHandler.cs │ │ ├── GetPokemonListHandler.cs │ │ ├── GetPokemonSettingsHandler.cs │ │ ├── GetTrainerProfileHandler.cs │ │ ├── Helpers │ │ │ ├── EggListWeb.cs │ │ │ ├── PokemonListWeb.cs │ │ │ └── TrainerProfileWeb.cs │ │ └── Tasks │ │ │ ├── GetEggListTask.cs │ │ │ ├── GetItemListTask.cs │ │ │ ├── GetPokemonListTask.cs │ │ │ ├── GetPokemonSettingsTask.cs │ │ │ └── GetTrainerProfileTask.cs │ ├── IWebSocketRequestHandler.cs │ ├── IWebSocketResponce.cs │ └── WebSocketEventManager.cs ├── WebSocketInterface.cs ├── cert.pfx ├── packages.config ├── supersocket.cmd └── supersocket.sh ├── README.md └── RocketBot.sln /.gitattributes: -------------------------------------------------------------------------------- 1 | ############################################################################### 2 | # Set default behavior to automatically normalize line endings. 3 | ############################################################################### 4 | * text=auto 5 | 6 | ############################################################################### 7 | # Set default behavior for command prompt diff. 8 | # 9 | # This is need for earlier builds of msysgit that does not have it on by 10 | # default for csharp files. 11 | # Note: This is only used by command line 12 | ############################################################################### 13 | #*.cs diff=csharp 14 | 15 | ############################################################################### 16 | # Set the merge driver for project and solution files 17 | # 18 | # Merging from the command prompt will add diff markers to the files if there 19 | # are conflicts (Merging from VS is not affected by the settings below, in VS 20 | # the diff markers are never inserted). Diff markers may cause the following 21 | # file extensions to fail to load in VS. An alternative would be to treat 22 | # these files as binary and thus will always conflict and require user 23 | # intervention with every merge. To do so, just uncomment the entries below 24 | ############################################################################### 25 | #*.sln merge=binary 26 | #*.csproj merge=binary 27 | #*.vbproj merge=binary 28 | #*.vcxproj merge=binary 29 | #*.vcproj merge=binary 30 | #*.dbproj merge=binary 31 | #*.fsproj merge=binary 32 | #*.lsproj merge=binary 33 | #*.wixproj merge=binary 34 | #*.modelproj merge=binary 35 | #*.sqlproj merge=binary 36 | #*.wwaproj merge=binary 37 | 38 | ############################################################################### 39 | # behavior for image files 40 | # 41 | # image files are treated as binary by default. 42 | ############################################################################### 43 | #*.jpg binary 44 | #*.png binary 45 | #*.gif binary 46 | 47 | ############################################################################### 48 | # diff behavior for common document formats 49 | # 50 | # Convert binary document formats to text before diffing them. This feature 51 | # is only available from the command line. Turn it on by uncommenting the 52 | # entries below. 53 | ############################################################################### 54 | #*.doc diff=astextplain 55 | #*.DOC diff=astextplain 56 | #*.docx diff=astextplain 57 | #*.DOCX diff=astextplain 58 | #*.dot diff=astextplain 59 | #*.DOT diff=astextplain 60 | #*.pdf diff=astextplain 61 | #*.PDF diff=astextplain 62 | #*.rtf diff=astextplain 63 | #*.RTF diff=astextplain 64 | -------------------------------------------------------------------------------- /.gitmodules: -------------------------------------------------------------------------------- 1 | [submodule "POGOProtos"] 2 | path = POGOProtos 3 | url = https://github.com/TheUnnameOrganization/POGOProtos.git 4 | [submodule "PokemonGo.RocketAPI"] 5 | path = PokemonGo.RocketAPI 6 | url = https://github.com/TheUnnameOrganization/PokemonGo.RocketAPI.git 7 | -------------------------------------------------------------------------------- /Images/MainForm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/Images/MainForm.png -------------------------------------------------------------------------------- /Images/SettingForm.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/Images/SettingForm.png -------------------------------------------------------------------------------- /Images/SettingForm_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/Images/SettingForm_2.png -------------------------------------------------------------------------------- /Images/SettingForm_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/Images/SettingForm_3.png -------------------------------------------------------------------------------- /Images/SettingForm_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/Images/SettingForm_4.png -------------------------------------------------------------------------------- /Images/SettingForm_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/Images/SettingForm_5.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/DataDumper/Dumper.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System; 4 | using System.IO; 5 | using PokemonGo.RocketBot.Logic.State; 6 | 7 | #endregion 8 | 9 | namespace PokemonGo.RocketBot.Logic.DataDumper 10 | { 11 | public static class Dumper 12 | { 13 | /// 14 | /// Clears the specified dumpfile. 15 | /// 16 | /// 17 | /// 18 | /// File to clear/param> 19 | public static void ClearDumpFile(ISession session, string filename, string extension = "csv") 20 | { 21 | var path = Path.Combine(session.LogicSettings.ProfilePath, "Dumps"); 22 | var file = Path.Combine(path, 23 | $"RocketBot-{filename}-{DateTime.Today.ToString("yyyy-MM-dd")}-{DateTime.Now.ToString("HH")}.{extension}"); 24 | if (!Directory.Exists(path)) Directory.CreateDirectory(path); 25 | 26 | // Clears all contents of a file first if overwrite is true 27 | File.WriteAllText(file, string.Empty); 28 | } 29 | 30 | /// 31 | /// Dumps data to a file 32 | /// 33 | /// 34 | /// Dumps the string data to the file 35 | /// Filename to be used for naming the file. 36 | /// FileExt. 37 | public static void Dump(ISession session, string data, string filename, string extension = "csv") 38 | { 39 | string uniqueFileName = $"{filename}"; 40 | 41 | DumpToFile(session, data, uniqueFileName, extension); 42 | } 43 | 44 | /// 45 | /// This is used for dumping contents to a file stored in the Logs folder. 46 | /// 47 | /// 48 | /// Dumps the string data to the file 49 | /// Filename to be used for naming the file. 50 | private static void DumpToFile(ISession session, string data, string filename, string extension = "csv") 51 | { 52 | var path = Path.Combine(session.LogicSettings.ProfilePath, "Dumps", 53 | $"RocketBot-{filename}-{DateTime.Today.ToString("yyyy-MM-dd")}-{DateTime.Now.ToString("HH")}.{extension}"); 54 | 55 | using ( 56 | var dumpFile = 57 | File.AppendText(path) 58 | ) 59 | { 60 | dumpFile.WriteLine(data); 61 | dumpFile.Flush(); 62 | } 63 | } 64 | 65 | /// 66 | /// Set the dumper. 67 | /// 68 | /// 69 | /// 70 | public static void SetDumper(IDumper dumper, string subPath = "") 71 | { 72 | } 73 | } 74 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/DataDumper/IDumper.cs: -------------------------------------------------------------------------------- 1 | namespace PokemonGo.RocketBot.Logic.DataDumper 2 | { 3 | public interface IDumper 4 | { 5 | /// 6 | /// Dump specific data. 7 | /// 8 | /// The data to dump. 9 | /// File to dump to 10 | void Dump(string data, string filename); 11 | } 12 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/DisplayHighestsPokemonEvent.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System; 4 | using System.Collections.Generic; 5 | using POGOProtos.Data; 6 | using POGOProtos.Enums; 7 | 8 | #endregion 9 | 10 | namespace PokemonGo.RocketBot.Logic.Event 11 | { 12 | public class DisplayHighestsPokemonEvent : IEvent 13 | { 14 | //PokemonData | CP | IV | Level | MOVE1 | MOVE2 | Candy 15 | public List> PokemonList; 16 | public string SortedBy; 17 | } 18 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/EggHatchedEvent.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using POGOProtos.Enums; 4 | 5 | #endregion 6 | 7 | namespace PokemonGo.RocketBot.Logic.Event 8 | { 9 | public class EggHatchedEvent : IEvent 10 | { 11 | public int Cp; 12 | public ulong Id; 13 | public double Level; 14 | public int MaxCp; 15 | public double Perfection; 16 | public PokemonId PokemonId; 17 | } 18 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/EggIncubatorStatusEvent.cs: -------------------------------------------------------------------------------- 1 | namespace PokemonGo.RocketBot.Logic.Event 2 | { 3 | public class EggIncubatorStatusEvent : IEvent 4 | { 5 | public string IncubatorId; 6 | public double KmRemaining; 7 | public double KmToWalk; 8 | public ulong PokemonId; 9 | public bool WasAddedNow; 10 | public double KmWalked => KmToWalk - KmRemaining; 11 | } 12 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/EggsListEvent.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System.Collections.Generic; 4 | using POGOProtos.Inventory; 5 | 6 | #endregion 7 | 8 | namespace PokemonGo.RocketBot.Logic.Event 9 | { 10 | public class EggsListEvent : IEvent 11 | { 12 | public float PlayerKmWalked { get; set; } 13 | public List Incubators { get; set; } 14 | public object UnusedEggs { get; set; } 15 | } 16 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/ErrorEvent.cs: -------------------------------------------------------------------------------- 1 | namespace PokemonGo.RocketBot.Logic.Event 2 | { 3 | public class ErrorEvent : IEvent 4 | { 5 | public string Message = ""; 6 | 7 | public override string ToString() 8 | { 9 | return Message; 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/EventDispatcher.cs: -------------------------------------------------------------------------------- 1 | namespace PokemonGo.RocketBot.Logic.Event 2 | { 3 | public delegate void EventDelegate(IEvent evt); 4 | 5 | public interface IEventDispatcher 6 | { 7 | event EventDelegate EventReceived; 8 | void Send(IEvent evt); 9 | } 10 | 11 | public class EventDispatcher : IEventDispatcher 12 | { 13 | public event EventDelegate EventReceived; 14 | 15 | public void Send(IEvent evt) 16 | { 17 | EventReceived?.Invoke(evt); 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/EvolveCountEvent.cs: -------------------------------------------------------------------------------- 1 | namespace PokemonGo.RocketBot.Logic.Event 2 | { 3 | public class EvolveCountEvent : IEvent 4 | { 5 | public int Evolves; 6 | } 7 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/FortFailedEvent.cs: -------------------------------------------------------------------------------- 1 | namespace PokemonGo.RocketBot.Logic.Event 2 | { 3 | public class FortFailedEvent : IEvent 4 | { 5 | public bool Looted; 6 | public int Max; 7 | public string Name; 8 | public int Try; 9 | } 10 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/FortTargetEvent.cs: -------------------------------------------------------------------------------- 1 | namespace PokemonGo.RocketBot.Logic.Event 2 | { 3 | public class FortTargetEvent : IEvent 4 | { 5 | public double Distance; 6 | public string Name; 7 | } 8 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/FortUsedEvent.cs: -------------------------------------------------------------------------------- 1 | namespace PokemonGo.RocketBot.Logic.Event 2 | { 3 | public class FortUsedEvent : IEvent 4 | { 5 | public int Exp; 6 | public int Gems; 7 | public string Id; 8 | public bool InventoryFull; 9 | public string Items; 10 | public double Latitude; 11 | public double Longitude; 12 | public string Name; 13 | } 14 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/GetHumanizeRouteEvent.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using GeoCoordinatePortable; 3 | 4 | namespace PokemonGo.RocketBot.Logic.Event 5 | { 6 | public class GetHumanizeRouteEvent : IEvent 7 | { 8 | public GeoCoordinate Destination; 9 | public List Route; 10 | } 11 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/HumanWalkingEvent.cs: -------------------------------------------------------------------------------- 1 | namespace PokemonGo.RocketBot.Logic.Event 2 | { 3 | public class HumanWalkingEvent : IEvent 4 | { 5 | public double CurrentWalkingSpeed; 6 | public double OldWalkingSpeed; 7 | } 8 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/IEvent.cs: -------------------------------------------------------------------------------- 1 | namespace PokemonGo.RocketBot.Logic.Event 2 | { 3 | public interface IEvent 4 | { 5 | } 6 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/InventoryListEvent.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using POGOProtos.Inventory.Item; 3 | 4 | namespace PokemonGo.RocketBot.Logic.Event 5 | { 6 | public class InventoryListEvent : IEvent 7 | { 8 | public List Items; 9 | } 10 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/ItemRecycledEvent.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using POGOProtos.Inventory.Item; 4 | 5 | #endregion 6 | 7 | namespace PokemonGo.RocketBot.Logic.Event 8 | { 9 | public class ItemRecycledEvent : IEvent 10 | { 11 | public int Count; 12 | public ItemId Id; 13 | } 14 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/LootPokestopEvent.cs: -------------------------------------------------------------------------------- 1 | using POGOProtos.Map.Fort; 2 | 3 | namespace PokemonGo.RocketBot.Logic.Event 4 | { 5 | public class LootPokestopEvent : IEvent 6 | { 7 | public FortData Pokestop; 8 | } 9 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/NoPokeballEvent.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using POGOProtos.Enums; 4 | 5 | #endregion 6 | 7 | namespace PokemonGo.RocketBot.Logic.Event 8 | { 9 | public class NoPokeballEvent : IEvent 10 | { 11 | public int Cp; 12 | public PokemonId Id; 13 | } 14 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/NoticeEvent.cs: -------------------------------------------------------------------------------- 1 | namespace PokemonGo.RocketBot.Logic.Event 2 | { 3 | public class NoticeEvent : IEvent 4 | { 5 | public string Message = ""; 6 | 7 | public override string ToString() 8 | { 9 | return Message; 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/OptimizeRouteEvent.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using POGOProtos.Map.Fort; 3 | 4 | namespace PokemonGo.RocketBot.Logic.Event 5 | { 6 | public class OptimizeRouteEvent : IEvent 7 | { 8 | public List OptimizedRoute { get; set; } 9 | } 10 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/PokeStopListEvent.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System.Collections.Generic; 4 | using POGOProtos.Map.Fort; 5 | 6 | #endregion 7 | 8 | namespace PokemonGo.RocketBot.Logic.Event 9 | { 10 | public class PokeStopListEvent : IEvent 11 | { 12 | public List Forts; 13 | } 14 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/PokemonCaptureEvent.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using POGOProtos.Enums; 4 | using POGOProtos.Inventory.Item; 5 | using POGOProtos.Networking.Responses; 6 | 7 | #endregion 8 | 9 | namespace PokemonGo.RocketBot.Logic.Event 10 | { 11 | public class PokemonCaptureEvent : IEvent 12 | { 13 | public int Attempt; 14 | public int BallAmount; 15 | public string CatchType; 16 | public int Cp; 17 | public double Distance; 18 | public int Exp; 19 | public int FamilyCandies; 20 | public PokemonId Id; 21 | public double Latitude; 22 | public double Level; 23 | public double Longitude; 24 | public int MaxCp; 25 | public double Perfection; 26 | public ItemId Pokeball; 27 | public double Probability; 28 | public int Stardust; 29 | public CatchPokemonResponse.Types.CatchStatus Status; 30 | } 31 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/PokemonEvolveEvent.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using POGOProtos.Enums; 4 | using POGOProtos.Networking.Responses; 5 | 6 | #endregion 7 | 8 | namespace PokemonGo.RocketBot.Logic.Event 9 | { 10 | public class PokemonEvolveEvent : IEvent 11 | { 12 | public int Exp; 13 | public PokemonId Id; 14 | public EvolvePokemonResponse.Types.Result Result; 15 | } 16 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/PokemonListEvent.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System; 4 | using System.Collections.Generic; 5 | using POGOProtos.Data; 6 | 7 | #endregion 8 | 9 | namespace PokemonGo.RocketBot.Logic.Event 10 | { 11 | public class PokemonListEvent : IEvent 12 | { 13 | public List> PokemonList; 14 | } 15 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/PokemonsEncounterEvent.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using POGOProtos.Map.Pokemon; 3 | 4 | namespace PokemonGo.RocketBot.Logic.Event 5 | { 6 | public class PokemonsEncounterEvent : IEvent 7 | { 8 | public List EncounterPokemons; 9 | } 10 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/ProfileEvent.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using POGOProtos.Networking.Responses; 4 | 5 | #endregion 6 | 7 | namespace PokemonGo.RocketBot.Logic.Event 8 | { 9 | public class ProfileEvent : IEvent 10 | { 11 | public GetPlayerResponse Profile; 12 | } 13 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/SnipeEvent.cs: -------------------------------------------------------------------------------- 1 | namespace PokemonGo.RocketBot.Logic.Event 2 | { 3 | public class SnipeEvent : IEvent 4 | { 5 | public string Message = ""; 6 | 7 | public override string ToString() 8 | { 9 | return Message; 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/SnipeModeEvent.cs: -------------------------------------------------------------------------------- 1 | namespace PokemonGo.RocketBot.Logic.Event 2 | { 3 | public class SnipeModeEvent : IEvent 4 | { 5 | public bool Active; 6 | } 7 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/SnipeScanEvent.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using POGOProtos.Enums; 4 | 5 | #endregion 6 | 7 | namespace PokemonGo.RocketBot.Logic.Event 8 | { 9 | public class SnipeScanEvent : IEvent 10 | { 11 | public Location Bounds { get; set; } 12 | public PokemonId PokemonId { get; set; } 13 | public double Iv { get; set; } 14 | public string Source { get; set; } 15 | } 16 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/TransferPokemonEvent.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using POGOProtos.Enums; 4 | 5 | #endregion 6 | 7 | namespace PokemonGo.RocketBot.Logic.Event 8 | { 9 | public class TransferPokemonEvent : IEvent 10 | { 11 | public int BestCp; 12 | public double BestPerfection; 13 | public int Cp; 14 | public int FamilyCandies; 15 | public PokemonId Id; 16 | public double Perfection; 17 | } 18 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/UpdateEvent.cs: -------------------------------------------------------------------------------- 1 | namespace PokemonGo.RocketBot.Logic.Event 2 | { 3 | public class UpdateEvent : IEvent 4 | { 5 | public string Message = ""; 6 | 7 | public override string ToString() 8 | { 9 | return Message; 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/UpdatePositionEvent.cs: -------------------------------------------------------------------------------- 1 | namespace PokemonGo.RocketBot.Logic.Event 2 | { 3 | public class UpdatePositionEvent : IEvent 4 | { 5 | public double Latitude; 6 | public double Longitude; 7 | } 8 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/UseBerryEvent.cs: -------------------------------------------------------------------------------- 1 | using POGOProtos.Inventory.Item; 2 | 3 | namespace PokemonGo.RocketBot.Logic.Event 4 | { 5 | public class UseBerryEvent : IEvent 6 | { 7 | public ItemId BerryType; 8 | public int Count; 9 | } 10 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/UseLuckyEggEvent.cs: -------------------------------------------------------------------------------- 1 | namespace PokemonGo.RocketBot.Logic.Event 2 | { 3 | public class UseLuckyEggEvent : IEvent 4 | { 5 | public int Count; 6 | } 7 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Event/WarnEvent.cs: -------------------------------------------------------------------------------- 1 | namespace PokemonGo.RocketBot.Logic.Event 2 | { 3 | public class WarnEvent : IEvent 4 | { 5 | public string Message = ""; 6 | 7 | /// 8 | /// This event requires handler to perform input 9 | /// 10 | public bool RequireInput; 11 | 12 | public override string ToString() 13 | { 14 | return Message; 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Localization/Localizer.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using PokemonGo.RocketBot.Logic.Common; 4 | 5 | #endregion 6 | 7 | namespace PokemonGo.RocketBot.Logic.Localization 8 | { 9 | public interface ILocalizer 10 | { 11 | string GetFormat(TranslationString key); 12 | string GetFormat(TranslationString key, params object[] data); 13 | } 14 | 15 | public class Localizer : ILocalizer 16 | { 17 | public string GetFormat(TranslationString key) 18 | { 19 | return ""; 20 | } 21 | 22 | public string GetFormat(TranslationString key, params object[] data) 23 | { 24 | return ""; 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Logging/ILogger.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System; 4 | using PokemonGo.RocketBot.Logic.State; 5 | 6 | #endregion 7 | 8 | namespace PokemonGo.RocketBot.Logic.Logging 9 | { 10 | public interface ILogger 11 | { 12 | /// 13 | /// Set Context for a logger to be able to use translations and settings 14 | /// 15 | /// Context 16 | void SetSession(ISession session); 17 | 18 | /// 19 | /// Log a specific message by LogLevel. 20 | /// 21 | /// The message to log. 22 | /// Optional. Default . 23 | /// Optional. Default automatic color. 24 | void Write(string message, LogLevel level = LogLevel.Info, ConsoleColor color = ConsoleColor.Black); 25 | 26 | void lineSelect(int lineChar = 0, int linesUp = 1); 27 | } 28 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System.Reflection; 4 | using System.Runtime.InteropServices; 5 | 6 | #endregion 7 | 8 | // General Information about an assembly is controlled through the following 9 | // set of attributes. Change these attribute values to modify the information 10 | // associated with an assembly. 11 | 12 | [assembly: AssemblyTitle("RocketBot")] 13 | [assembly: AssemblyDescription("")] 14 | [assembly: AssemblyConfiguration("")] 15 | [assembly: AssemblyCompany("")] 16 | [assembly: AssemblyProduct("PokemonGo.RocketBot.Logic")] 17 | [assembly: AssemblyCopyright("Copyright © 2016")] 18 | [assembly: AssemblyTrademark("")] 19 | [assembly: AssemblyCulture("")] 20 | 21 | // Setting ComVisible to false makes the types in this assembly not visible 22 | // to COM components. If you need to access a type in this assembly from 23 | // COM, set the ComVisible attribute to true on that type. 24 | 25 | [assembly: ComVisible(false)] 26 | 27 | // The following GUID is for the ID of the typelib if this project is exposed to COM 28 | 29 | [assembly: Guid("0739e40d-c589-4aeb-93e5-ee8cd6773c60")] 30 | 31 | // Version information for an assembly consists of the following four values: 32 | // 33 | // Major Version 34 | // Minor Version 35 | // Build Number 36 | // Revision 37 | // 38 | // You can specify all the values or you can default the Build and Revision Numbers 39 | // by using the '*' as shown below: 40 | // [assembly: AssemblyVersion("1.0.*")] 41 | 42 | [assembly: AssemblyVersion("0.8.1")] 43 | [assembly: AssemblyFileVersion("1.0.0.0")] -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Service/BotService.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using PokemonGo.RocketBot.Logic.State; 4 | using PokemonGo.RocketBot.Logic.Tasks; 5 | 6 | #endregion 7 | 8 | namespace PokemonGo.RocketBot.Logic.Service 9 | { 10 | public class BotService 11 | { 12 | public ILogin LoginTask; 13 | public ISession Session; 14 | 15 | public void Run() 16 | { 17 | LoginTask.DoLogin(); 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/State/FarmState.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System.Threading; 4 | using System.Threading.Tasks; 5 | using PokemonGo.RocketBot.Logic.Tasks; 6 | 7 | #endregion 8 | 9 | namespace PokemonGo.RocketBot.Logic.State 10 | { 11 | public class FarmState : IState 12 | { 13 | public async Task Execute(ISession session, CancellationToken cancellationToken) 14 | { 15 | if (session.LogicSettings.EvolveAllPokemonAboveIv || session.LogicSettings.EvolveAllPokemonWithEnoughCandy 16 | || session.LogicSettings.UseLuckyEggsWhileEvolving || session.LogicSettings.KeepPokemonsThatCanEvolve) 17 | { 18 | await EvolvePokemonTask.Execute(session, cancellationToken); 19 | } 20 | 21 | if (session.LogicSettings.UseEggIncubators) 22 | { 23 | await UseIncubatorsTask.Execute(session, cancellationToken); 24 | } 25 | 26 | if (session.LogicSettings.TransferDuplicatePokemon) 27 | { 28 | await TransferDuplicatePokemonTask.Execute(session, cancellationToken); 29 | } 30 | 31 | if (session.LogicSettings.UseLuckyEggConstantly) 32 | { 33 | await UseLuckyEggConstantlyTask.Execute(session, cancellationToken); 34 | } 35 | 36 | if (session.LogicSettings.UseIncenseConstantly) 37 | { 38 | await UseIncenseConstantlyTask.Execute(session, cancellationToken); 39 | } 40 | 41 | await GetPokeDexCount.Execute(session, cancellationToken); 42 | 43 | if (session.LogicSettings.RenamePokemon) 44 | { 45 | await RenamePokemonTask.Execute(session, cancellationToken); 46 | } 47 | 48 | if (session.LogicSettings.AutoFavoritePokemon) 49 | { 50 | await FavoritePokemonTask.Execute(session, cancellationToken); 51 | } 52 | 53 | await RecycleItemsTask.Execute(session, cancellationToken); 54 | 55 | if (session.LogicSettings.AutomaticallyLevelUpPokemon) 56 | { 57 | await LevelUpPokemonTask.Execute(session, cancellationToken); 58 | } 59 | 60 | if (session.LogicSettings.UseGpxPathing) 61 | { 62 | await FarmPokestopsGpxTask.Execute(session, cancellationToken); 63 | } 64 | else 65 | { 66 | await FarmPokestopsTask.Execute(session, cancellationToken); 67 | } 68 | 69 | return this; 70 | } 71 | } 72 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/State/IState.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System.Threading; 4 | using System.Threading.Tasks; 5 | 6 | #endregion 7 | 8 | namespace PokemonGo.RocketBot.Logic.State 9 | { 10 | public interface IState 11 | { 12 | Task Execute(ISession session, CancellationToken cancellationToken); 13 | } 14 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/State/InfoState.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System.Threading; 4 | using System.Threading.Tasks; 5 | using PokemonGo.RocketBot.Logic.Tasks; 6 | 7 | #endregion 8 | 9 | namespace PokemonGo.RocketBot.Logic.State 10 | { 11 | public class InfoState : IState 12 | { 13 | public async Task Execute(ISession session, CancellationToken cancellationToken) 14 | { 15 | cancellationToken.ThrowIfCancellationRequested(); 16 | await DisplayPokemonStatsTask.Execute(session); 17 | return new FarmState(); 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/State/Session.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using PokemonGo.RocketAPI; 4 | using PokemonGo.RocketBot.Logic.Common; 5 | using PokemonGo.RocketBot.Logic.Event; 6 | using PokemonGo.RocketBot.Logic.Service; 7 | using POGOProtos.Networking.Responses; 8 | 9 | #endregion 10 | 11 | namespace PokemonGo.RocketBot.Logic.State 12 | { 13 | public interface ISession 14 | { 15 | ISettings Settings { get; set; } 16 | Inventory Inventory { get; } 17 | Client Client { get; } 18 | GetPlayerResponse Profile { get; set; } 19 | Navigation Navigation { get; } 20 | ILogicSettings LogicSettings { get; } 21 | ITranslation Translation { get; } 22 | IEventDispatcher EventDispatcher { get; } 23 | TelegramService Telegram { get; set; } 24 | } 25 | 26 | 27 | public class Session : ISession 28 | { 29 | public Session(ISettings settings, ILogicSettings logicSettings) 30 | { 31 | Settings = settings; 32 | LogicSettings = logicSettings; 33 | EventDispatcher = new EventDispatcher(); 34 | Translation = Common.Translation.Load(logicSettings); 35 | Reset(settings, LogicSettings); 36 | } 37 | 38 | public ISettings Settings { get; set; } 39 | 40 | public Inventory Inventory { get; private set; } 41 | 42 | public Client Client { get; private set; } 43 | 44 | public GetPlayerResponse Profile { get; set; } 45 | public Navigation Navigation { get; private set; } 46 | 47 | public ILogicSettings LogicSettings { get; set; } 48 | 49 | public ITranslation Translation { get; } 50 | 51 | public IEventDispatcher EventDispatcher { get; } 52 | 53 | public TelegramService Telegram { get; set; } 54 | 55 | public void Reset(ISettings settings, ILogicSettings logicSettings) 56 | { 57 | var _apiStrategy = new ApiFailureStrategy(this); 58 | Client = new Client(Settings, _apiStrategy); 59 | // ferox wants us to set this manually 60 | Inventory = new Inventory(Client, logicSettings); 61 | Navigation = new Navigation(Client); 62 | } 63 | } 64 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/State/StateMachine.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System; 4 | using System.IO; 5 | using System.Threading; 6 | using System.Threading.Tasks; 7 | using PokemonGo.RocketAPI.Exceptions; 8 | using PokemonGo.RocketBot.Logic.Event; 9 | using PokemonGo.RocketBot.Logic.Logging; 10 | 11 | #endregion 12 | 13 | namespace PokemonGo.RocketBot.Logic.State 14 | { 15 | public class StateMachine 16 | { 17 | private IState _initialState; 18 | 19 | public Task AsyncStart(IState initialState, Session session, 20 | CancellationToken cancellationToken = default(CancellationToken)) 21 | { 22 | return Task.Run(() => Start(initialState, session, cancellationToken), cancellationToken); 23 | } 24 | 25 | public void SetFailureState(IState state) 26 | { 27 | _initialState = state; 28 | } 29 | 30 | public async Task Start(IState initialState, Session session, 31 | CancellationToken cancellationToken = default(CancellationToken)) 32 | { 33 | var state = initialState; 34 | var profilePath = Path.Combine(Directory.GetCurrentDirectory(), ""); 35 | var profileConfigPath = Path.Combine(profilePath, "config"); 36 | 37 | var configWatcher = new FileSystemWatcher(); 38 | configWatcher.Path = profileConfigPath; 39 | configWatcher.Filter = "config.json"; 40 | configWatcher.NotifyFilter = NotifyFilters.LastWrite; 41 | configWatcher.EnableRaisingEvents = true; 42 | configWatcher.Changed += (sender, e) => 43 | { 44 | if (e.ChangeType == WatcherChangeTypes.Changed) 45 | { 46 | session.LogicSettings = new LogicSettings(GlobalSettings.Load("")); 47 | configWatcher.EnableRaisingEvents = !configWatcher.EnableRaisingEvents; 48 | configWatcher.EnableRaisingEvents = !configWatcher.EnableRaisingEvents; 49 | Logger.Write(" ##### config.json ##### ", LogLevel.Info); 50 | } 51 | }; 52 | do 53 | { 54 | try 55 | { 56 | state = await state.Execute(session, cancellationToken); 57 | } 58 | catch (InvalidResponseException) 59 | { 60 | session.EventDispatcher.Send(new ErrorEvent 61 | { 62 | Message = "Niantic Servers unstable, throttling API Calls." 63 | }); 64 | } 65 | catch (OperationCanceledException) 66 | { 67 | session.EventDispatcher.Send(new ErrorEvent {Message = "Current Operation was canceled."}); 68 | state = _initialState; 69 | } 70 | catch (Exception ex) 71 | { 72 | session.EventDispatcher.Send(new ErrorEvent 73 | { 74 | Message = "Pokemon Servers might be offline / unstable. Trying again..." 75 | }); 76 | Thread.Sleep(1000); 77 | session.EventDispatcher.Send(new ErrorEvent {Message = "Error: " + ex}); 78 | state = _initialState; 79 | } 80 | } while (state != null); 81 | configWatcher.EnableRaisingEvents = false; 82 | configWatcher.Dispose(); 83 | } 84 | } 85 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/State/VersionCheckState.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System.Threading; 4 | using System.Threading.Tasks; 5 | 6 | #endregion 7 | 8 | namespace PokemonGo.RocketBot.Logic.State 9 | { 10 | public class VersionCheckState : IState 11 | { 12 | // reserve for auto updater 13 | public async Task Execute(ISession session, CancellationToken cancellationToken) 14 | { 15 | return new LoginState(); 16 | } 17 | } 18 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/StatisticsAggregator.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using PokemonGo.RocketBot.Logic.Event; 4 | using PokemonGo.RocketBot.Logic.State; 5 | using PokemonGo.RocketBot.Logic.Utils; 6 | using POGOProtos.Networking.Responses; 7 | 8 | #endregion 9 | 10 | namespace PokemonGo.RocketBot.Logic 11 | { 12 | public class StatisticsAggregator 13 | { 14 | private readonly Statistics _stats; 15 | 16 | public StatisticsAggregator(Statistics stats) 17 | { 18 | _stats = stats; 19 | } 20 | 21 | public void HandleEvent(ProfileEvent evt, ISession session) 22 | { 23 | _stats.SetUsername(evt.Profile); 24 | _stats.Dirty(session.Inventory); 25 | } 26 | 27 | public void HandleEvent(ErrorEvent evt, ISession session) 28 | { 29 | } 30 | 31 | public void HandleEvent(NoticeEvent evt, ISession session) 32 | { 33 | } 34 | 35 | public void HandleEvent(WarnEvent evt, ISession session) 36 | { 37 | } 38 | 39 | public void HandleEvent(UseLuckyEggEvent evt, ISession session) 40 | { 41 | } 42 | 43 | public void HandleEvent(PokemonEvolveEvent evt, ISession session) 44 | { 45 | _stats.TotalExperience += evt.Exp; 46 | _stats.Dirty(session.Inventory); 47 | } 48 | 49 | public void HandleEvent(TransferPokemonEvent evt, ISession session) 50 | { 51 | _stats.TotalPokemonTransferred++; 52 | _stats.Dirty(session.Inventory); 53 | } 54 | 55 | public void HandleEvent(ItemRecycledEvent evt, ISession session) 56 | { 57 | _stats.TotalItemsRemoved++; 58 | _stats.Dirty(session.Inventory); 59 | } 60 | 61 | public void HandleEvent(FortUsedEvent evt, ISession session) 62 | { 63 | _stats.TotalExperience += evt.Exp; 64 | _stats.Dirty(session.Inventory); 65 | } 66 | 67 | public void HandleEvent(FortTargetEvent evt, ISession session) 68 | { 69 | } 70 | 71 | public void HandleEvent(PokemonCaptureEvent evt, ISession session) 72 | { 73 | if (evt.Status == CatchPokemonResponse.Types.CatchStatus.CatchSuccess) 74 | { 75 | _stats.TotalExperience += evt.Exp; 76 | _stats.TotalPokemons++; 77 | _stats.TotalStardust = evt.Stardust; 78 | _stats.Dirty(session.Inventory); 79 | } 80 | } 81 | 82 | public void HandleEvent(NoPokeballEvent evt, ISession session) 83 | { 84 | } 85 | 86 | public void HandleEvent(UseBerryEvent evt, ISession session) 87 | { 88 | } 89 | 90 | public void HandleEvent(DisplayHighestsPokemonEvent evt, ISession session) 91 | { 92 | } 93 | 94 | public void Listen(IEvent evt, ISession session) 95 | { 96 | dynamic eve = evt; 97 | 98 | try 99 | { 100 | HandleEvent(eve, session); 101 | } 102 | catch 103 | { 104 | // ignored 105 | } 106 | } 107 | } 108 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Tasks/CatchLurePokemonsTask.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System.Threading; 4 | using System.Threading.Tasks; 5 | using PokemonGo.RocketBot.Logic.Common; 6 | using PokemonGo.RocketBot.Logic.Event; 7 | using PokemonGo.RocketBot.Logic.Logging; 8 | using PokemonGo.RocketBot.Logic.State; 9 | using POGOProtos.Map.Fort; 10 | using POGOProtos.Networking.Responses; 11 | 12 | #endregion 13 | 14 | namespace PokemonGo.RocketBot.Logic.Tasks 15 | { 16 | public static class CatchLurePokemonsTask 17 | { 18 | public static async Task Execute(ISession session, FortData currentFortData, CancellationToken cancellationToken) 19 | { 20 | cancellationToken.ThrowIfCancellationRequested(); 21 | if (!session.LogicSettings.CatchPokemon) return; 22 | 23 | Logger.Write(session.Translation.GetTranslation(TranslationString.LookingForLurePokemon), LogLevel.Debug); 24 | 25 | var fortId = currentFortData.Id; 26 | 27 | var pokemonId = currentFortData.LureInfo.ActivePokemonId; 28 | 29 | if ((session.LogicSettings.UsePokemonSniperFilterOnly && 30 | !session.LogicSettings.PokemonToSnipe.Pokemon.Contains(pokemonId)) || 31 | (session.LogicSettings.UsePokemonToNotCatchFilter && 32 | session.LogicSettings.PokemonsNotToCatch.Contains(pokemonId))) 33 | { 34 | session.EventDispatcher.Send(new NoticeEvent 35 | { 36 | Message = session.Translation.GetTranslation(TranslationString.PokemonSkipped, pokemonId) 37 | }); 38 | } 39 | else 40 | { 41 | var encounterId = currentFortData.LureInfo.EncounterId; 42 | var encounter = await session.Client.Encounter.EncounterLurePokemon(encounterId, fortId); 43 | 44 | if (encounter.Result == DiskEncounterResponse.Types.Result.Success && session.LogicSettings.CatchPokemon) 45 | { 46 | await 47 | CatchPokemonTask.Execute(session, cancellationToken, encounter, null, currentFortData, 48 | encounterId); 49 | } 50 | else if (encounter.Result == DiskEncounterResponse.Types.Result.PokemonInventoryFull) 51 | { 52 | if (session.LogicSettings.TransferDuplicatePokemon) 53 | { 54 | session.EventDispatcher.Send(new WarnEvent 55 | { 56 | Message = session.Translation.GetTranslation(TranslationString.InvFullTransferring) 57 | }); 58 | await TransferDuplicatePokemonTask.Execute(session, cancellationToken); 59 | } 60 | else 61 | session.EventDispatcher.Send(new WarnEvent 62 | { 63 | Message = session.Translation.GetTranslation(TranslationString.InvFullTransferManually) 64 | }); 65 | } 66 | else 67 | { 68 | if (encounter.Result.ToString().Contains("NotAvailable")) return; 69 | session.EventDispatcher.Send(new WarnEvent 70 | { 71 | Message = 72 | session.Translation.GetTranslation(TranslationString.EncounterProblemLurePokemon, 73 | encounter.Result) 74 | }); 75 | } 76 | } 77 | } 78 | } 79 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Tasks/EggsListTask.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using PokemonGo.RocketBot.Logic.Event; 6 | using PokemonGo.RocketBot.Logic.State; 7 | using PokemonGo.RocketBot.Logic.Utils; 8 | using POGOProtos.Inventory.Item; 9 | 10 | #endregion 11 | 12 | namespace PokemonGo.RocketBot.Logic.Tasks 13 | { 14 | public class EggsListTask 15 | { 16 | public static async Task Execute(ISession session) 17 | { 18 | // Refresh inventory so that the player stats are fresh 19 | await session.Inventory.RefreshCachedInventory(); 20 | 21 | var playerStats = (await session.Inventory.GetPlayerStats()).FirstOrDefault(); 22 | if (playerStats == null) 23 | return; 24 | 25 | var kmWalked = playerStats.KmWalked; 26 | 27 | var incubators = (await session.Inventory.GetEggIncubators()) 28 | .Where(x => x.UsesRemaining > 0 || x.ItemId == ItemId.ItemIncubatorBasicUnlimited) 29 | .OrderByDescending(x => x.ItemId == ItemId.ItemIncubatorBasicUnlimited) 30 | .ToList(); 31 | 32 | var unusedEggs = (await session.Inventory.GetEggs()) 33 | .Where(x => string.IsNullOrEmpty(x.EggIncubatorId)) 34 | .OrderBy(x => x.EggKmWalkedTarget - x.EggKmWalkedStart) 35 | .ToList(); 36 | 37 | session.EventDispatcher.Send( 38 | new EggsListEvent 39 | { 40 | PlayerKmWalked = kmWalked, 41 | Incubators = incubators, 42 | UnusedEggs = unusedEggs 43 | }); 44 | 45 | DelayingUtils.Delay(session.LogicSettings.DelayBetweenPlayerActions, 0); 46 | } 47 | } 48 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Tasks/EvolveSpecificPokemonTask.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using PokemonGo.RocketBot.Logic.Event; 6 | using PokemonGo.RocketBot.Logic.State; 7 | using PokemonGo.RocketBot.Logic.Utils; 8 | 9 | #endregion 10 | 11 | namespace PokemonGo.RocketBot.Logic.Tasks 12 | { 13 | public class EvolveSpecificPokemonTask 14 | { 15 | public static async Task Execute(ISession session, ulong pokemonId) 16 | { 17 | var all = await session.Inventory.GetPokemons(); 18 | var pokemons = all.OrderByDescending(x => x.Cp).ThenBy(n => n.StaminaMax); 19 | var pokemon = pokemons.FirstOrDefault(p => p.Id == pokemonId); 20 | 21 | if (pokemon == null) return; 22 | 23 | var evolveResponse = await session.Client.Inventory.EvolvePokemon(pokemon.Id); 24 | 25 | session.EventDispatcher.Send(new PokemonEvolveEvent 26 | { 27 | Id = pokemon.PokemonId, 28 | Exp = evolveResponse.ExperienceAwarded, 29 | Result = evolveResponse.Result 30 | }); 31 | DelayingUtils.Delay(session.LogicSettings.DelayBetweenPlayerActions, 0); 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Tasks/Farm.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System.Threading; 4 | using PokemonGo.RocketBot.Logic.State; 5 | 6 | #endregion 7 | 8 | namespace PokemonGo.RocketBot.Logic.Tasks 9 | { 10 | public interface IFarm 11 | { 12 | void Run(CancellationToken cancellationToken); 13 | } 14 | 15 | public class Farm : IFarm 16 | { 17 | private readonly ISession _session; 18 | 19 | public Farm(ISession session) 20 | { 21 | _session = session; 22 | } 23 | 24 | public void Run(CancellationToken cancellationToken) 25 | { 26 | if (_session.LogicSettings.EvolveAllPokemonAboveIv || _session.LogicSettings.EvolveAllPokemonWithEnoughCandy 27 | || _session.LogicSettings.UseLuckyEggsWhileEvolving || _session.LogicSettings.KeepPokemonsThatCanEvolve) 28 | { 29 | EvolvePokemonTask.Execute(_session, cancellationToken).Wait(cancellationToken); 30 | } 31 | if (_session.LogicSettings.AutomaticallyLevelUpPokemon) 32 | { 33 | LevelUpPokemonTask.Execute(_session, cancellationToken).Wait(cancellationToken); 34 | } 35 | if (_session.LogicSettings.UseLuckyEggConstantly) 36 | { 37 | UseLuckyEggConstantlyTask.Execute(_session, cancellationToken).Wait(cancellationToken); 38 | } 39 | if (_session.LogicSettings.UseIncenseConstantly) 40 | { 41 | UseIncenseConstantlyTask.Execute(_session, cancellationToken).Wait(cancellationToken); 42 | } 43 | 44 | if (_session.LogicSettings.TransferDuplicatePokemon) 45 | { 46 | TransferDuplicatePokemonTask.Execute(_session, cancellationToken).Wait(cancellationToken); 47 | } 48 | 49 | if (_session.LogicSettings.TransferWeakPokemon) 50 | { 51 | TransferWeakPokemonTask.Execute(_session, cancellationToken).Wait(cancellationToken); 52 | } 53 | 54 | if (_session.LogicSettings.RenamePokemon) 55 | { 56 | RenamePokemonTask.Execute(_session, cancellationToken).Wait(cancellationToken); 57 | } 58 | 59 | if (_session.LogicSettings.AutoFavoritePokemon) 60 | { 61 | FavoritePokemonTask.Execute(_session, cancellationToken).Wait(cancellationToken); 62 | } 63 | 64 | RecycleItemsTask.Execute(_session, cancellationToken).Wait(cancellationToken); 65 | 66 | if (_session.LogicSettings.UseEggIncubators) 67 | { 68 | UseIncubatorsTask.Execute(_session, cancellationToken).Wait(cancellationToken); 69 | } 70 | 71 | if (_session.LogicSettings.UseGpxPathing) 72 | { 73 | FarmPokestopsGpxTask.Execute(_session, cancellationToken).Wait(cancellationToken); 74 | } 75 | else 76 | { 77 | FarmPokestopsTask.Execute(_session, cancellationToken).Wait(cancellationToken); 78 | } 79 | 80 | GetPokeDexCount.Execute(_session, cancellationToken).Wait(cancellationToken); 81 | } 82 | } 83 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Tasks/FavoritePokemonTask.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System; 4 | using System.Threading; 5 | using System.Threading.Tasks; 6 | using PokemonGo.RocketBot.Logic.Common; 7 | using PokemonGo.RocketBot.Logic.Event; 8 | using PokemonGo.RocketBot.Logic.PoGoUtils; 9 | using PokemonGo.RocketBot.Logic.State; 10 | 11 | #endregion 12 | 13 | namespace PokemonGo.RocketBot.Logic.Tasks 14 | { 15 | public class FavoritePokemonTask 16 | { 17 | public static async Task Execute(ISession session, CancellationToken cancellationToken) 18 | { 19 | cancellationToken.ThrowIfCancellationRequested(); 20 | 21 | var pokemons = await session.Inventory.GetPokemons(); 22 | 23 | foreach (var pokemon in pokemons) 24 | { 25 | cancellationToken.ThrowIfCancellationRequested(); 26 | 27 | var perfection = Math.Round(PokemonInfo.CalculatePokemonPerfection(pokemon)); 28 | 29 | if (session.LogicSettings.AutoFavoritePokemon && 30 | perfection >= session.LogicSettings.FavoriteMinIvPercentage && pokemon.Favorite != 1) 31 | { 32 | await session.Client.Inventory.SetFavoritePokemon(pokemon.Id, true); 33 | 34 | session.EventDispatcher.Send(new NoticeEvent 35 | { 36 | Message = 37 | session.Translation.GetTranslation(TranslationString.PokemonFavorite, perfection, 38 | session.Translation.GetPokemonTranslation(pokemon.PokemonId), pokemon.Cp) 39 | }); 40 | } 41 | } 42 | } 43 | } 44 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Tasks/GetPokeDexCount.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | using System.Threading; 3 | using System.Threading.Tasks; 4 | using PokemonGo.RocketBot.Logic.Common; 5 | using PokemonGo.RocketBot.Logic.Logging; 6 | using PokemonGo.RocketBot.Logic.State; 7 | 8 | namespace PokemonGo.RocketBot.Logic.Tasks 9 | { 10 | internal class GetPokeDexCount 11 | { 12 | public static async Task Execute(ISession session, CancellationToken cancellationToken) 13 | { 14 | var PokeDex = await session.Inventory.GetPokeDexItems(); 15 | var _totalUniqueEncounters = 16 | PokeDex.Select( 17 | i => 18 | new 19 | { 20 | Pokemon = i.InventoryItemData.PokedexEntry.PokemonId, 21 | Captures = i.InventoryItemData.PokedexEntry.TimesCaptured 22 | }); 23 | var _totalCaptures = _totalUniqueEncounters.Count(i => i.Captures > 0); 24 | var _totalData = PokeDex.Count(); 25 | 26 | Logger.Write(session.Translation.GetTranslation(TranslationString.AmountPkmSeenCaught, _totalData, 27 | _totalCaptures)); 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Tasks/InventoryListTask.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | using System.Threading.Tasks; 3 | using PokemonGo.RocketBot.Logic.Event; 4 | using PokemonGo.RocketBot.Logic.State; 5 | using PokemonGo.RocketBot.Logic.Utils; 6 | 7 | namespace PokemonGo.RocketBot.Logic.Tasks 8 | { 9 | public class InventoryListTask 10 | { 11 | public static async Task Execute(ISession session) 12 | { 13 | // Refresh inventory so that the player stats are fresh 14 | await session.Inventory.RefreshCachedInventory(); 15 | 16 | var inventory = await session.Inventory.GetItems(); 17 | 18 | session.EventDispatcher.Send( 19 | new InventoryListEvent 20 | { 21 | Items = inventory.ToList() 22 | }); 23 | 24 | DelayingUtils.Delay(session.LogicSettings.DelayBetweenPlayerActions, 0); 25 | } 26 | } 27 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Tasks/LevelUpSpecificPokemonTask.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | using PokemonGo.RocketBot.Logic.Logging; 3 | using PokemonGo.RocketBot.Logic.State; 4 | using PokemonGo.RocketBot.Logic.Utils; 5 | using POGOProtos.Networking.Responses; 6 | 7 | namespace PokemonGo.RocketBot.Logic.Tasks 8 | { 9 | public class LevelUpSpecificPokemonTask 10 | { 11 | public static async Task Execute(ISession session, ulong pokemonId) 12 | { 13 | var upgradeResult = await session.Inventory.UpgradePokemon(pokemonId); 14 | if (upgradeResult.Result == UpgradePokemonResponse.Types.Result.Success) 15 | { 16 | Logger.Write("Pokemon Upgraded: " + 17 | session.Translation.GetPokemonTranslation( 18 | upgradeResult.UpgradedPokemon.PokemonId) + ": " + 19 | upgradeResult.UpgradedPokemon.Cp, LogLevel.LevelUp); 20 | } 21 | else 22 | { 23 | Logger.Write("Pokemon Upgrade Failed.", LogLevel.Warning); 24 | } 25 | 26 | DelayingUtils.Delay(session.LogicSettings.DelayBetweenPlayerActions, 0); 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Tasks/Login.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System; 4 | using PokemonGo.RocketAPI.Enums; 5 | using PokemonGo.RocketAPI.Exceptions; 6 | using PokemonGo.RocketBot.Logic.Common; 7 | using PokemonGo.RocketBot.Logic.Event; 8 | using PokemonGo.RocketBot.Logic.State; 9 | 10 | #endregion 11 | 12 | namespace PokemonGo.RocketBot.Logic.Tasks 13 | { 14 | public interface ILogin 15 | { 16 | void DoLogin(); 17 | } 18 | 19 | public class Login : ILogin 20 | { 21 | private readonly ISession _session; 22 | 23 | public Login(ISession session) 24 | { 25 | _session = session; 26 | } 27 | 28 | public async void DoLogin() 29 | { 30 | try 31 | { 32 | if (_session.Settings.AuthType != AuthType.Google || _session.Settings.AuthType != AuthType.Ptc) 33 | { 34 | await _session.Client.Login.DoLogin(); 35 | } 36 | else 37 | { 38 | _session.EventDispatcher.Send(new ErrorEvent 39 | { 40 | Message = _session.Translation.GetTranslation(TranslationString.WrongAuthType) 41 | }); 42 | } 43 | } 44 | catch (AggregateException ae) 45 | { 46 | throw ae.Flatten().InnerException; 47 | } 48 | catch (LoginFailedException) 49 | { 50 | _session.EventDispatcher.Send(new ErrorEvent 51 | { 52 | Message = _session.Translation.GetTranslation(TranslationString.LoginInvalid) 53 | }); 54 | } 55 | catch (Exception ex) when (ex is PtcOfflineException || ex is AccessTokenExpiredException) 56 | { 57 | _session.EventDispatcher.Send(new ErrorEvent 58 | { 59 | Message = _session.Translation.GetTranslation(TranslationString.PtcOffline) 60 | }); 61 | _session.EventDispatcher.Send(new NoticeEvent 62 | { 63 | Message = _session.Translation.GetTranslation(TranslationString.TryingAgainIn, 20) 64 | }); 65 | } 66 | catch (PtcOfflineException) 67 | { 68 | _session.EventDispatcher.Send(new ErrorEvent 69 | { 70 | Message = _session.Translation.GetTranslation(TranslationString.PtcOffline) 71 | }); 72 | _session.EventDispatcher.Send(new NoticeEvent 73 | { 74 | Message = _session.Translation.GetTranslation(TranslationString.TryingAgainIn, 20) 75 | }); 76 | } 77 | catch (AccountNotVerifiedException) 78 | { 79 | _session.EventDispatcher.Send(new ErrorEvent 80 | { 81 | Message = _session.Translation.GetTranslation(TranslationString.AccountNotVerified) 82 | }); 83 | } 84 | } 85 | } 86 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Tasks/PokemonListTask.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System; 4 | using System.Linq; 5 | using System.Threading.Tasks; 6 | using PokemonGo.RocketBot.Logic.Event; 7 | using PokemonGo.RocketBot.Logic.PoGoUtils; 8 | using PokemonGo.RocketBot.Logic.State; 9 | using PokemonGo.RocketBot.Logic.Utils; 10 | 11 | #endregion 12 | 13 | namespace PokemonGo.RocketBot.Logic.Tasks 14 | { 15 | public class PokemonListTask 16 | { 17 | public static async Task Execute(ISession session) 18 | { 19 | // Refresh inventory so that the player stats are fresh 20 | await session.Inventory.RefreshCachedInventory(); 21 | 22 | var myPokemonSettings = await session.Inventory.GetPokemonSettings(); 23 | var pokemonSettings = myPokemonSettings.ToList(); 24 | 25 | var myPokemonFamilies = await session.Inventory.GetPokemonFamilies(); 26 | var pokemonFamilies = myPokemonFamilies.ToArray(); 27 | 28 | var allPokemonInBag = await session.Inventory.GetHighestsCp(1000); 29 | 30 | var pkmWithIv = allPokemonInBag.Select(p => 31 | { 32 | var settings = pokemonSettings.Single(x => x.PokemonId == p.PokemonId); 33 | return Tuple.Create( 34 | p, 35 | PokemonInfo.CalculatePokemonPerfection(p), 36 | pokemonFamilies.Single(x => settings.FamilyId == x.FamilyId).Candy_ 37 | ); 38 | }); 39 | 40 | session.EventDispatcher.Send( 41 | new PokemonListEvent 42 | { 43 | PokemonList = pkmWithIv.ToList() 44 | }); 45 | 46 | DelayingUtils.Delay(session.LogicSettings.DelayBetweenPlayerActions, 0); 47 | } 48 | } 49 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Tasks/RecycleSpecificItemTask.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | using PokemonGo.RocketBot.Logic.Logging; 3 | using PokemonGo.RocketBot.Logic.State; 4 | using POGOProtos.Inventory.Item; 5 | using POGOProtos.Networking.Responses; 6 | using PokemonGo.RocketBot.Logic.Utils; 7 | 8 | namespace PokemonGo.RocketBot.Logic.Tasks 9 | { 10 | public class RecycleSpecificItemTask 11 | { 12 | public static async Task Execute(Session session, ItemId itemId, int count) 13 | { 14 | var response = await session.Client.Inventory.RecycleItem(itemId, count); 15 | if (response.Result == RecycleInventoryItemResponse.Types.Result.Success) 16 | { 17 | Logger.Write( 18 | $"Recycled {count}x {itemId.ToString().Substring(4)}", 19 | LogLevel.Recycling); 20 | } 21 | else 22 | { 23 | Logger.Write( 24 | $"Unable to recycle {count}x {itemId.ToString().Substring(4)}", 25 | LogLevel.Error); 26 | } 27 | DelayingUtils.Delay(session.LogicSettings.DelayBetweenPlayerActions, 500); 28 | } 29 | } 30 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Tasks/RenamePokemonTask.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System; 4 | using System.Globalization; 5 | using System.Threading; 6 | using System.Threading.Tasks; 7 | using PokemonGo.RocketBot.Logic.Common; 8 | using PokemonGo.RocketBot.Logic.Event; 9 | using PokemonGo.RocketBot.Logic.PoGoUtils; 10 | using PokemonGo.RocketBot.Logic.State; 11 | 12 | #endregion 13 | 14 | namespace PokemonGo.RocketBot.Logic.Tasks 15 | { 16 | public class RenamePokemonTask 17 | { 18 | public static async Task Execute(ISession session, CancellationToken cancellationToken) 19 | { 20 | cancellationToken.ThrowIfCancellationRequested(); 21 | 22 | var pokemons = await session.Inventory.GetPokemons(); 23 | 24 | foreach (var pokemon in pokemons) 25 | { 26 | cancellationToken.ThrowIfCancellationRequested(); 27 | 28 | var perfection = Math.Round(PokemonInfo.CalculatePokemonPerfection(pokemon)); 29 | var pokemonName = session.Translation.GetPokemonTranslation(pokemon.PokemonId); 30 | // iv number + templating part + pokemonName <= 12 31 | var nameLength = 12 - 32 | (perfection.ToString(CultureInfo.InvariantCulture).Length + 33 | session.LogicSettings.RenameTemplate.Length - 6); 34 | if (pokemonName.Length > nameLength) 35 | { 36 | pokemonName = pokemonName.Substring(0, nameLength); 37 | } 38 | var newNickname = string.Format(session.LogicSettings.RenameTemplate, pokemonName, perfection); 39 | var oldNickname = pokemon.Nickname.Length != 0 ? pokemon.Nickname : pokemon.PokemonId.ToString(); 40 | 41 | // If "RenameOnlyAboveIv" = true only rename pokemon with IV over "KeepMinIvPercentage" 42 | // Favorites will be skipped 43 | if ((!session.LogicSettings.RenameOnlyAboveIv || perfection >= session.LogicSettings.KeepMinIvPercentage) && 44 | newNickname != oldNickname && pokemon.Favorite == 0) 45 | { 46 | await session.Client.Inventory.NicknamePokemon(pokemon.Id, newNickname); 47 | 48 | session.EventDispatcher.Send(new NoticeEvent 49 | { 50 | Message = 51 | session.Translation.GetTranslation(TranslationString.PokemonRename, 52 | session.Translation.GetPokemonTranslation(pokemon.PokemonId), 53 | pokemon.Id, oldNickname, newNickname) 54 | }); 55 | } 56 | } 57 | } 58 | } 59 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Tasks/RenameSpecificPokemonTask.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | using PokemonGo.RocketBot.Logic.Logging; 3 | using PokemonGo.RocketBot.Logic.State; 4 | using PokemonGo.RocketBot.Logic.Utils; 5 | using POGOProtos.Data; 6 | using POGOProtos.Networking.Responses; 7 | 8 | namespace PokemonGo.RocketBot.Logic.Tasks 9 | { 10 | public class RenameSpecificPokemonTask 11 | { 12 | public static async Task Execute(Session session, PokemonData pokemon, string newNickname) 13 | { 14 | //var pkm = pokemon; 15 | var response = await session.Client.Inventory.NicknamePokemon(pokemon.Id, newNickname); 16 | Logger.Write(response.Result == NicknamePokemonResponse.Types.Result.Success 17 | ? $"Successfully renamed {pokemon.PokemonId} to \"{newNickname}\"" 18 | : $"Failed renaming {pokemon.PokemonId} to \"{newNickname}\""); 19 | DelayingUtils.Delay(session.LogicSettings.DelayBetweenPlayerActions, 0); 20 | //session.EventDispatcher.Send(new NoticeEvent 21 | //{ 22 | // Message = 23 | // session.Translation.GetTranslation(TranslationString.PokemonRename, 24 | // session.Translation.GetPokemonTranslation(pokemon.PokemonId), 25 | // pokemon.PokemonId, pkm.Nickname, newNickname) 26 | //}); 27 | } 28 | } 29 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Tasks/TransferDuplicatePokemonTask.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System.Linq; 4 | using System.Threading; 5 | using System.Threading.Tasks; 6 | using PokemonGo.RocketBot.Logic.Event; 7 | using PokemonGo.RocketBot.Logic.PoGoUtils; 8 | using PokemonGo.RocketBot.Logic.State; 9 | using PokemonGo.RocketBot.Logic.Utils; 10 | 11 | #endregion 12 | 13 | namespace PokemonGo.RocketBot.Logic.Tasks 14 | { 15 | public class TransferDuplicatePokemonTask 16 | { 17 | public static async Task Execute(ISession session, CancellationToken cancellationToken) 18 | { 19 | cancellationToken.ThrowIfCancellationRequested(); 20 | 21 | var duplicatePokemons = 22 | await 23 | session.Inventory.GetDuplicatePokemonToTransfer( 24 | session.LogicSettings.PokemonsNotToTransfer, 25 | session.LogicSettings.PokemonsToEvolve, 26 | session.LogicSettings.KeepPokemonsThatCanEvolve, 27 | session.LogicSettings.PrioritizeIvOverCp); 28 | 29 | var orderedPokemon = duplicatePokemons.OrderBy(poke => poke.Cp); 30 | 31 | var pokemonSettings = await session.Inventory.GetPokemonSettings(); 32 | var pokemonFamilies = await session.Inventory.GetPokemonFamilies(); 33 | 34 | foreach (var duplicatePokemon in orderedPokemon) 35 | { 36 | cancellationToken.ThrowIfCancellationRequested(); 37 | 38 | await session.Client.Inventory.TransferPokemon(duplicatePokemon.Id); 39 | await session.Inventory.DeletePokemonFromInvById(duplicatePokemon.Id); 40 | 41 | var bestPokemonOfType = (session.LogicSettings.PrioritizeIvOverCp 42 | ? await session.Inventory.GetHighestPokemonOfTypeByIv(duplicatePokemon) 43 | : await session.Inventory.GetHighestPokemonOfTypeByCp(duplicatePokemon)) ?? duplicatePokemon; 44 | 45 | var setting = pokemonSettings.SingleOrDefault(q => q.PokemonId == duplicatePokemon.PokemonId); 46 | var family = pokemonFamilies.FirstOrDefault(q => q.FamilyId == setting.FamilyId); 47 | 48 | family.Candy_++; 49 | 50 | session.EventDispatcher.Send(new TransferPokemonEvent 51 | { 52 | Id = duplicatePokemon.PokemonId, 53 | Perfection = PokemonInfo.CalculatePokemonPerfection(duplicatePokemon), 54 | Cp = duplicatePokemon.Cp, 55 | BestCp = bestPokemonOfType.Cp, 56 | BestPerfection = PokemonInfo.CalculatePokemonPerfection(bestPokemonOfType), 57 | FamilyCandies = family.Candy_ 58 | }); 59 | 60 | DelayingUtils.Delay(session.LogicSettings.DelayBetweenPlayerActions, 0); 61 | } 62 | } 63 | } 64 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Tasks/TransferSpecificPokemonTask.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using PokemonGo.RocketBot.Logic.Event; 6 | using PokemonGo.RocketBot.Logic.PoGoUtils; 7 | using PokemonGo.RocketBot.Logic.State; 8 | using PokemonGo.RocketBot.Logic.Utils; 9 | 10 | #endregion 11 | 12 | namespace PokemonGo.RocketBot.Logic.Tasks 13 | { 14 | public class TransferSpecificPokemonTask 15 | { 16 | public static async Task Execute(ISession session, ulong pokemonId) 17 | { 18 | var all = await session.Inventory.GetPokemons(); 19 | var pokemons = all.OrderBy(x => x.Cp).ThenBy(n => n.StaminaMax); 20 | var pokemon = pokemons.FirstOrDefault(p => p.Id == pokemonId); 21 | 22 | if (pokemon == null) return; 23 | 24 | var pokemonSettings = await session.Inventory.GetPokemonSettings(); 25 | var pokemonFamilies = await session.Inventory.GetPokemonFamilies(); 26 | 27 | await session.Client.Inventory.TransferPokemon(pokemonId); 28 | await session.Inventory.DeletePokemonFromInvById(pokemonId); 29 | 30 | var bestPokemonOfType = (session.LogicSettings.PrioritizeIvOverCp 31 | ? await session.Inventory.GetHighestPokemonOfTypeByIv(pokemon) 32 | : await session.Inventory.GetHighestPokemonOfTypeByCp(pokemon)) ?? pokemon; 33 | 34 | var setting = pokemonSettings.Single(q => q.PokemonId == pokemon.PokemonId); 35 | var family = pokemonFamilies.First(q => q.FamilyId == setting.FamilyId); 36 | 37 | family.Candy_++; 38 | 39 | // Broadcast event as everyone would benefit 40 | session.EventDispatcher.Send(new TransferPokemonEvent 41 | { 42 | Id = pokemon.PokemonId, 43 | Perfection = PokemonInfo.CalculatePokemonPerfection(pokemon), 44 | Cp = pokemon.Cp, 45 | BestCp = bestPokemonOfType.Cp, 46 | BestPerfection = PokemonInfo.CalculatePokemonPerfection(bestPokemonOfType), 47 | FamilyCandies = family.Candy_ 48 | }); 49 | 50 | DelayingUtils.Delay(session.LogicSettings.DelayBetweenPlayerActions, 0); 51 | } 52 | } 53 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Tasks/TransferWeakPokemonTask.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System.Collections.Generic; 4 | using System.Linq; 5 | using System.Threading; 6 | using System.Threading.Tasks; 7 | using PokemonGo.RocketBot.Logic.Event; 8 | using PokemonGo.RocketBot.Logic.PoGoUtils; 9 | using PokemonGo.RocketBot.Logic.State; 10 | using PokemonGo.RocketBot.Logic.Utils; 11 | using POGOProtos.Data; 12 | 13 | #endregion 14 | 15 | namespace PokemonGo.RocketBot.Logic.Tasks 16 | { 17 | internal class TransferWeakPokemonTask 18 | { 19 | public static async Task Execute(ISession session, CancellationToken cancellationToken) 20 | { 21 | cancellationToken.ThrowIfCancellationRequested(); 22 | 23 | var pokemons = await session.Inventory.GetPokemons(); 24 | var pokemonDatas = pokemons as IList ?? pokemons.ToList(); 25 | var pokemonsFiltered = 26 | pokemonDatas.Where(pokemon => !session.LogicSettings.PokemonsNotToTransfer.Contains(pokemon.PokemonId)) 27 | .ToList().OrderBy(poke => poke.Cp); 28 | 29 | if (session.LogicSettings.KeepPokemonsThatCanEvolve) 30 | pokemonsFiltered = 31 | pokemonDatas.Where(pokemon => !session.LogicSettings.PokemonsToEvolve.Contains(pokemon.PokemonId)) 32 | .ToList().OrderBy(poke => poke.Cp); 33 | 34 | var orderedPokemon = pokemonsFiltered.OrderBy(poke => poke.Cp); 35 | 36 | foreach (var pokemon in orderedPokemon) 37 | { 38 | cancellationToken.ThrowIfCancellationRequested(); 39 | if ((pokemon.Cp >= session.LogicSettings.KeepMinCp) || 40 | (PokemonInfo.CalculatePokemonPerfection(pokemon) >= session.LogicSettings.KeepMinIvPercentage && 41 | session.LogicSettings.PrioritizeIvOverCp) || 42 | (PokemonInfo.GetLevel(pokemon) >= session.LogicSettings.KeepMinLvl && 43 | session.LogicSettings.UseKeepMinLvl) || 44 | pokemon.Favorite == 1) 45 | continue; 46 | 47 | await session.Client.Inventory.TransferPokemon(pokemon.Id); 48 | await session.Inventory.DeletePokemonFromInvById(pokemon.Id); 49 | var bestPokemonOfType = (session.LogicSettings.PrioritizeIvOverCp 50 | ? await session.Inventory.GetHighestPokemonOfTypeByIv(pokemon) 51 | : await session.Inventory.GetHighestPokemonOfTypeByCp(pokemon)) ?? pokemon; 52 | 53 | var setting = session.Inventory.GetPokemonSettings() 54 | .Result.Single(q => q.PokemonId == pokemon.PokemonId); 55 | var family = session.Inventory.GetPokemonFamilies().Result.First(q => q.FamilyId == setting.FamilyId); 56 | 57 | family.Candy_++; 58 | 59 | session.EventDispatcher.Send(new TransferPokemonEvent 60 | { 61 | Id = pokemon.PokemonId, 62 | Perfection = PokemonInfo.CalculatePokemonPerfection(pokemon), 63 | Cp = pokemon.Cp, 64 | BestCp = bestPokemonOfType.Cp, 65 | BestPerfection = PokemonInfo.CalculatePokemonPerfection(bestPokemonOfType), 66 | FamilyCandies = family.Candy_ 67 | }); 68 | 69 | DelayingUtils.Delay(session.LogicSettings.DelayBetweenPlayerActions, 0); 70 | } 71 | } 72 | } 73 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Tasks/UseIncenseConstantlyTask.cs: -------------------------------------------------------------------------------- 1 | using System.Threading; 2 | using System.Threading.Tasks; 3 | using PokemonGo.RocketBot.Logic.Common; 4 | using PokemonGo.RocketBot.Logic.Logging; 5 | using PokemonGo.RocketBot.Logic.State; 6 | using POGOProtos.Inventory.Item; 7 | using POGOProtos.Networking.Responses; 8 | 9 | namespace PokemonGo.RocketBot.Logic.Tasks 10 | { 11 | internal class UseIncenseConstantlyTask 12 | { 13 | public static async Task Execute(ISession session, CancellationToken cancellationToken) 14 | { 15 | if (!session.LogicSettings.UseIncenseConstantly) 16 | return; 17 | 18 | var currentAmountOfIncense = await session.Inventory.GetItemAmountByType(ItemId.ItemIncenseOrdinary); 19 | if (currentAmountOfIncense == 0) 20 | { 21 | Logger.Write(session.Translation.GetTranslation(TranslationString.NoIncenseAvailable)); 22 | return; 23 | } 24 | Logger.Write(session.Translation.GetTranslation(TranslationString.UseIncenseAmount, currentAmountOfIncense)); 25 | 26 | var UseIncense = await session.Inventory.UseIncenseConstantly(); 27 | 28 | if (UseIncense.Result == UseIncenseResponse.Types.Result.Success) 29 | { 30 | Logger.Write(session.Translation.GetTranslation(TranslationString.UsedIncense)); 31 | } 32 | else if (UseIncense.Result == UseIncenseResponse.Types.Result.NoneInInventory) 33 | { 34 | Logger.Write(session.Translation.GetTranslation(TranslationString.NoIncenseAvailable)); 35 | } 36 | else if (UseIncense.Result == UseIncenseResponse.Types.Result.IncenseAlreadyActive || 37 | (UseIncense.AppliedIncense == null)) 38 | { 39 | Logger.Write(session.Translation.GetTranslation(TranslationString.UseIncenseActive)); 40 | } 41 | } 42 | } 43 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Tasks/UseIncenseTask.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading.Tasks; 3 | using PokemonGo.RocketBot.Logic.Logging; 4 | using PokemonGo.RocketBot.Logic.State; 5 | using POGOProtos.Inventory.Item; 6 | using POGOProtos.Networking.Responses; 7 | 8 | namespace PokemonGo.RocketBot.Logic.Tasks 9 | { 10 | public class UseIncenseTask 11 | { 12 | public static async Task Execute(Session session) 13 | { 14 | var response = await session.Client.Inventory.UseIncense(ItemId.ItemIncenseOrdinary); 15 | switch (response.Result) 16 | { 17 | case UseIncenseResponse.Types.Result.Success: 18 | Logger.Write($"Incense valid until: {DateTime.Now.AddMinutes(30)}"); 19 | break; 20 | case UseIncenseResponse.Types.Result.IncenseAlreadyActive: 21 | Logger.Write($"An incense is already active!", LogLevel.Warning); 22 | break; 23 | case UseIncenseResponse.Types.Result.LocationUnset: 24 | Logger.Write($"Bot must be running first!", LogLevel.Error); 25 | break; 26 | case UseIncenseResponse.Types.Result.Unknown: 27 | break; 28 | case UseIncenseResponse.Types.Result.NoneInInventory: 29 | break; 30 | default: 31 | Logger.Write($"Failed using an incense!", LogLevel.Error); 32 | break; 33 | } 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Tasks/UseLuckyEggConstantlyTask.cs: -------------------------------------------------------------------------------- 1 | using System.Threading; 2 | using System.Threading.Tasks; 3 | using PokemonGo.RocketBot.Logic.Common; 4 | using PokemonGo.RocketBot.Logic.Logging; 5 | using PokemonGo.RocketBot.Logic.State; 6 | using POGOProtos.Inventory.Item; 7 | using POGOProtos.Networking.Responses; 8 | 9 | namespace PokemonGo.RocketBot.Logic.Tasks 10 | { 11 | internal class UseLuckyEggConstantlyTask 12 | { 13 | public static async Task Execute(ISession session, CancellationToken cancellationToken) 14 | { 15 | if (!session.LogicSettings.UseLuckyEggConstantly) 16 | return; 17 | 18 | var currentAmountOfLuckyEggs = await session.Inventory.GetItemAmountByType(ItemId.ItemLuckyEgg); 19 | if (currentAmountOfLuckyEggs == 0) 20 | { 21 | Logger.Write(session.Translation.GetTranslation(TranslationString.NoEggsAvailable)); 22 | return; 23 | } 24 | Logger.Write(session.Translation.GetTranslation(TranslationString.UseLuckyEggAmount, 25 | currentAmountOfLuckyEggs)); 26 | 27 | var UseEgg = await session.Inventory.UseLuckyEggConstantly(); 28 | 29 | if (UseEgg.Result == UseItemXpBoostResponse.Types.Result.Success) 30 | { 31 | Logger.Write(session.Translation.GetTranslation(TranslationString.UsedLuckyEgg)); 32 | } 33 | else if (UseEgg.Result == UseItemXpBoostResponse.Types.Result.ErrorNoItemsRemaining) 34 | { 35 | Logger.Write(session.Translation.GetTranslation(TranslationString.NoEggsAvailable)); 36 | } 37 | else if (UseEgg.Result == UseItemXpBoostResponse.Types.Result.ErrorXpBoostAlreadyActive || 38 | (UseEgg.AppliedItems == null)) 39 | { 40 | Logger.Write(session.Translation.GetTranslation(TranslationString.UseLuckyEggActive)); 41 | } 42 | } 43 | } 44 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Tasks/UseLuckyEggTask.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Threading.Tasks; 3 | using PokemonGo.RocketBot.Logic.Logging; 4 | using PokemonGo.RocketBot.Logic.State; 5 | using POGOProtos.Networking.Responses; 6 | 7 | namespace PokemonGo.RocketBot.Logic.Tasks 8 | { 9 | public class UseLuckyEggTask 10 | { 11 | public static async Task Execute(Session session) 12 | { 13 | var response = await session.Client.Inventory.UseItemXpBoost(); 14 | switch (response.Result) 15 | { 16 | case UseItemXpBoostResponse.Types.Result.Success: 17 | Logger.Write($"Using a Lucky Egg"); 18 | Logger.Write($"Lucky Egg valid until: {DateTime.Now.AddMinutes(30)}"); 19 | break; 20 | case UseItemXpBoostResponse.Types.Result.ErrorXpBoostAlreadyActive: 21 | Logger.Write($"A Lucky Egg is already active!", LogLevel.Warning); 22 | break; 23 | case UseItemXpBoostResponse.Types.Result.ErrorLocationUnset: 24 | Logger.Write($"Bot must be running first!", LogLevel.Error); 25 | break; 26 | case UseItemXpBoostResponse.Types.Result.Unset: 27 | break; 28 | case UseItemXpBoostResponse.Types.Result.ErrorInvalidItemType: 29 | break; 30 | case UseItemXpBoostResponse.Types.Result.ErrorNoItemsRemaining: 31 | break; 32 | default: 33 | Logger.Write($"Failed using a Lucky Egg!", LogLevel.Error); 34 | break; 35 | } 36 | } 37 | } 38 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Tasks/UseNearbyPokestopsTask.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | using System.Threading; 7 | using System.Threading.Tasks; 8 | using PokemonGo.RocketAPI.Extensions; 9 | using PokemonGo.RocketBot.Logic.Event; 10 | using PokemonGo.RocketBot.Logic.State; 11 | using PokemonGo.RocketBot.Logic.Utils; 12 | using POGOProtos.Map.Fort; 13 | 14 | #endregion 15 | 16 | namespace PokemonGo.RocketBot.Logic.Tasks 17 | { 18 | internal class UseNearbyPokestopsTask 19 | { 20 | //Please do not change GetPokeStops() in this file, it's specifically set 21 | //to only find stops within 40 meters 22 | //this is for gpx pathing, we are not going to the pokestops, 23 | //so do not make it more than 40 because it will never get close to those stops. 24 | public static async Task Execute(ISession session, CancellationToken cancellationToken) 25 | { 26 | cancellationToken.ThrowIfCancellationRequested(); 27 | 28 | var pokestopList = await GetPokeStops(session); 29 | 30 | while (pokestopList.Any()) 31 | { 32 | cancellationToken.ThrowIfCancellationRequested(); 33 | 34 | pokestopList = 35 | pokestopList.OrderBy( 36 | i => 37 | LocationUtils.CalculateDistanceInMeters(session.Client.CurrentLatitude, 38 | session.Client.CurrentLongitude, i.Latitude, i.Longitude)).ToList(); 39 | var pokeStop = pokestopList[0]; 40 | pokestopList.RemoveAt(0); 41 | 42 | var fortInfo = await session.Client.Fort.GetFort(pokeStop.Id, pokeStop.Latitude, pokeStop.Longitude); 43 | 44 | var fortSearch = 45 | await session.Client.Fort.SearchFort(pokeStop.Id, pokeStop.Latitude, pokeStop.Longitude); 46 | 47 | if (fortSearch.ExperienceAwarded > 0) 48 | { 49 | session.EventDispatcher.Send(new FortUsedEvent 50 | { 51 | Id = pokeStop.Id, 52 | Name = fortInfo.Name, 53 | Exp = fortSearch.ExperienceAwarded, 54 | Gems = fortSearch.GemsAwarded, 55 | Items = StringUtils.GetSummedFriendlyNameOfItemAwardList(fortSearch.ItemsAwarded), 56 | Latitude = pokeStop.Latitude, 57 | Longitude = pokeStop.Longitude 58 | }); 59 | } 60 | } 61 | } 62 | 63 | 64 | private static async Task> GetPokeStops(ISession session) 65 | { 66 | var mapObjects = await session.Client.Map.GetMapObjects(); 67 | 68 | // Wasn't sure how to make this pretty. Edit as needed. 69 | var pokeStops = mapObjects.Item1.MapCells.SelectMany(i => i.Forts) 70 | .Where( 71 | i => 72 | i.Type == FortType.Checkpoint && 73 | i.CooldownCompleteTimestampMs < DateTime.UtcNow.ToUnixTime() && 74 | ( // Make sure PokeStop is within 40 meters or else it is pointless to hit it 75 | LocationUtils.CalculateDistanceInMeters( 76 | session.Client.CurrentLatitude, session.Client.CurrentLongitude, 77 | i.Latitude, i.Longitude) < 40) || 78 | session.LogicSettings.MaxTravelDistanceInMeters == 0 79 | ); 80 | 81 | return pokeStops.ToList(); 82 | } 83 | } 84 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Utils/DelayingUtils.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System; 4 | using System.Threading; 5 | 6 | #endregion 7 | 8 | namespace PokemonGo.RocketBot.Logic.Utils 9 | { 10 | public static class DelayingUtils 11 | { 12 | private static readonly Random RandomDevice = new Random(); 13 | 14 | public static void Delay(int delay, int defdelay) 15 | { 16 | if (delay > defdelay) 17 | { 18 | var randomFactor = 0.3f; 19 | var randomMin = (int) (delay*(1 - randomFactor)); 20 | var randomMax = (int) (delay*(1 + randomFactor)); 21 | var randomizedDelay = RandomDevice.Next(randomMin, randomMax); 22 | 23 | Thread.Sleep(randomizedDelay); 24 | } 25 | else if (defdelay > 0) 26 | { 27 | Thread.Sleep(defdelay); 28 | } 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Utils/EggWalker.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System.Threading; 4 | using System.Threading.Tasks; 5 | using PokemonGo.RocketBot.Logic.State; 6 | using PokemonGo.RocketBot.Logic.Tasks; 7 | 8 | #endregion 9 | 10 | namespace PokemonGo.RocketBot.Logic.Utils 11 | { 12 | internal class EggWalker 13 | { 14 | private readonly double _checkInterval; 15 | private readonly ISession _session; 16 | 17 | private double _distanceTraveled; 18 | 19 | public EggWalker(double checkIncubatorsIntervalMeters, ISession session) 20 | { 21 | _checkInterval = checkIncubatorsIntervalMeters; 22 | _session = session; 23 | } 24 | 25 | public async Task ApplyDistance(double distanceTraveled, CancellationToken cancellationToken) 26 | { 27 | cancellationToken.ThrowIfCancellationRequested(); 28 | 29 | if (!_session.LogicSettings.UseEggIncubators) 30 | return; 31 | 32 | _distanceTraveled += distanceTraveled; 33 | if (_distanceTraveled > _checkInterval) 34 | { 35 | await UseIncubatorsTask.Execute(_session, cancellationToken); 36 | _distanceTraveled = 0; 37 | } 38 | } 39 | } 40 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Utils/ErrorHandler.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Diagnostics; 3 | using System.Reflection; 4 | using System.Threading; 5 | using PokemonGo.RocketBot.Logic.Logging; 6 | 7 | namespace PokemonGo.RocketBot.Logic.Utils 8 | { 9 | internal class ErrorHandler 10 | { 11 | /// 12 | /// Alerts that a fatal error has occurred, displaying a message and exiting the application 13 | /// 14 | /// Optional message to display - Leave NULL to exclude message 15 | /// The total seconds the messag will display before shutting down 16 | public static void ThrowFatalError(string strMessage, int timeout, LogLevel level, bool boolRestart = false) 17 | { 18 | if (strMessage != null) 19 | Logger.Write(strMessage, level); 20 | 21 | Console.Write("Ending Application... "); 22 | 23 | for (var i = timeout; i > 0; i--) 24 | { 25 | Console.Write("\b" + i); 26 | Thread.Sleep(1000); 27 | } 28 | 29 | if (boolRestart) 30 | Process.Start(Assembly.GetEntryAssembly().Location); 31 | 32 | Environment.Exit(-1); 33 | } 34 | } 35 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Utils/JitterUtils.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System; 4 | using System.Threading.Tasks; 5 | 6 | #endregion 7 | 8 | namespace PokemonGo.RocketBot.Logic.Utils 9 | { 10 | public static class JitterUtils 11 | { 12 | private static readonly Random RandomDevice = new Random(); 13 | 14 | public static Task RandomDelay(int min, int max) 15 | { 16 | return Task.Delay(RandomDevice.Next(min, max)); 17 | } 18 | } 19 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Utils/NecroWebClient.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Net; 3 | 4 | namespace PokemonGo.RocketBot.Logic.Utils 5 | { 6 | public class NecroWebClient : WebClient 7 | { 8 | protected override WebRequest GetWebRequest(Uri uri) 9 | { 10 | var w = base.GetWebRequest(uri); 11 | w.Timeout = 5000; 12 | return w; 13 | } 14 | } 15 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Utils/StringUtils.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System; 4 | using System.Collections.Generic; 5 | using System.Linq; 6 | using POGOProtos.Inventory.Item; 7 | 8 | #endregion 9 | 10 | namespace PokemonGo.RocketBot.Logic.Utils 11 | { 12 | public static class StringUtils 13 | { 14 | private static readonly Func AndFunc = (x, y) => x && y; 15 | private static readonly Func OrFunc = (x, y) => x || y; 16 | 17 | private static readonly Func> GetBoolOperator = 18 | myOperator => myOperator.ToLower().Equals("and") ? AndFunc : OrFunc; 19 | 20 | public static string GetSummedFriendlyNameOfItemAwardList(IEnumerable items) 21 | { 22 | var enumerable = items as IList ?? items.ToList(); 23 | 24 | if (!enumerable.Any()) 25 | return string.Empty; 26 | 27 | return 28 | enumerable.GroupBy(i => i.ItemId) 29 | .Select(kvp => new {ItemName = kvp.Key.ToString(), Amount = kvp.Sum(x => x.ItemCount)}) 30 | .Select(y => $"{y.Amount} x {y.ItemName}") 31 | .Aggregate((a, b) => $"{a}, {b}"); 32 | } 33 | 34 | public static bool BoolFunc(this bool expr, bool expr2, string operatorStr) 35 | { 36 | return GetBoolOperator(operatorStr)(expr, expr2); 37 | } 38 | 39 | public static bool BoolFunc(this string operatorStr, params bool[] expr) 40 | { 41 | return operatorStr.ToLower().Equals("and") ? expr.All(b => b) : expr.Any(b => b); 42 | } 43 | 44 | public static bool ReverseBoolFunc(this string operatorStr, params bool[] expr) 45 | { 46 | return operatorStr.ToLower().Equals("and") ? expr.Any(b => b) : expr.All(b => b); 47 | } 48 | 49 | public static bool InverseBool(this string operatorStr, bool expr) 50 | { 51 | return operatorStr.ToLower().Equals("and") ? !expr : expr; 52 | } 53 | } 54 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Utils/WebClientExtensions.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Net; 3 | using System.Net.Sockets; 4 | using System.Text; 5 | 6 | namespace PokemonGo.RocketBot.Logic.Utils 7 | { 8 | public static class WebClientExtensions 9 | { 10 | public static string DownloadString(this WebClient webClient, Uri uri) 11 | { 12 | webClient.Headers[HttpRequestHeader.UserAgent] = 13 | "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.2 (KHTML, like Gecko) Chrome/15.0.874.121 Safari/535.2"; 14 | webClient.Encoding = Encoding.UTF8; 15 | byte[] rawData = null; 16 | string error; 17 | try 18 | { 19 | error = "loading"; 20 | rawData = webClient.DownloadData(uri); 21 | } 22 | catch (NullReferenceException) 23 | { 24 | error = null; 25 | } 26 | catch (ArgumentNullException) 27 | { 28 | error = null; 29 | } 30 | catch (WebException) 31 | { 32 | error = null; 33 | } 34 | catch (SocketException) 35 | { 36 | error = null; 37 | } 38 | 39 | if (error == null || rawData == null) 40 | return null; 41 | 42 | var encoding = WebUtils.GetEncodingFrom(webClient.ResponseHeaders, Encoding.UTF8); 43 | return encoding.GetString(rawData); 44 | } 45 | } 46 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Utils/WebUtils.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Specialized; 3 | using System.Linq; 4 | using System.Text; 5 | 6 | namespace PokemonGo.RocketBot.Logic.Utils 7 | { 8 | public static class WebUtils 9 | { 10 | public static Encoding GetEncodingFrom( 11 | NameValueCollection responseHeaders, 12 | Encoding defaultEncoding = null) 13 | { 14 | if (responseHeaders == null) 15 | throw new ArgumentNullException("responseHeaders"); 16 | 17 | //Note that key lookup is case-insensitive 18 | var contentType = responseHeaders["Content-Type"]; 19 | if (contentType == null) 20 | return defaultEncoding; 21 | 22 | var contentTypeParts = contentType.Split(';'); 23 | if (contentTypeParts.Length <= 1) 24 | return defaultEncoding; 25 | 26 | var charsetPart = 27 | contentTypeParts.Skip(1).FirstOrDefault( 28 | p => p.TrimStart().StartsWith("charset", StringComparison.InvariantCultureIgnoreCase)); 29 | if (charsetPart == null) 30 | return defaultEncoding; 31 | 32 | var charsetPartParts = charsetPart.Split('='); 33 | if (charsetPartParts.Length != 2) 34 | return defaultEncoding; 35 | 36 | var charsetName = charsetPartParts[1].Trim(); 37 | if (charsetName == "") 38 | return defaultEncoding; 39 | 40 | try 41 | { 42 | return Encoding.GetEncoding(charsetName); 43 | } 44 | catch (ArgumentException) 45 | { 46 | /* 47 | throw new UnknownEncodingException( 48 | charsetName, 49 | "The server returned data in an unknown encoding: " + charsetName, 50 | ex); 51 | */ 52 | return null; 53 | } 54 | } 55 | } 56 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/Utils/dijkstras.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | 4 | namespace PokemonGo.RocketBot.Logic.Utils 5 | { 6 | internal class Graph 7 | { 8 | private readonly Dictionary> vertices = 9 | new Dictionary>(); 10 | 11 | public void add_vertex(char name, Dictionary edges) 12 | { 13 | vertices[name] = edges; 14 | } 15 | 16 | public List shortest_path(char start, char finish) 17 | { 18 | var previous = new Dictionary(); 19 | var distances = new Dictionary(); 20 | var nodes = new List(); 21 | 22 | List path = null; 23 | 24 | foreach (var vertex in vertices) 25 | { 26 | if (vertex.Key == start) 27 | { 28 | distances[vertex.Key] = 0; 29 | } 30 | else 31 | { 32 | distances[vertex.Key] = int.MaxValue; 33 | } 34 | 35 | nodes.Add(vertex.Key); 36 | } 37 | 38 | while (nodes.Count != 0) 39 | { 40 | nodes.Sort((x, y) => distances[x] - distances[y]); 41 | 42 | var smallest = nodes[0]; 43 | nodes.Remove(smallest); 44 | 45 | if (smallest == finish) 46 | { 47 | path = new List(); 48 | while (previous.ContainsKey(smallest)) 49 | { 50 | path.Add(smallest); 51 | smallest = previous[smallest]; 52 | } 53 | 54 | break; 55 | } 56 | 57 | if (distances[smallest] == int.MaxValue) 58 | { 59 | break; 60 | } 61 | 62 | foreach (var neighbor in vertices[smallest]) 63 | { 64 | var alt = distances[smallest] + neighbor.Value; 65 | if (alt < distances[neighbor.Key]) 66 | { 67 | distances[neighbor.Key] = alt; 68 | previous[neighbor.Key] = smallest; 69 | } 70 | } 71 | } 72 | 73 | return path; 74 | } 75 | } 76 | 77 | internal class MainClass 78 | { 79 | public static void Main(string[] args) 80 | { 81 | var g = new Graph(); 82 | g.add_vertex('A', new Dictionary {{'B', 7}, {'C', 8}}); 83 | g.add_vertex('B', new Dictionary {{'A', 7}, {'F', 2}}); 84 | g.add_vertex('C', new Dictionary {{'A', 8}, {'F', 6}, {'G', 4}}); 85 | g.add_vertex('D', new Dictionary {{'F', 8}}); 86 | g.add_vertex('E', new Dictionary {{'H', 1}}); 87 | g.add_vertex('F', new Dictionary {{'B', 2}, {'C', 6}, {'D', 8}, {'G', 9}, {'H', 3}}); 88 | g.add_vertex('G', new Dictionary {{'C', 4}, {'F', 9}}); 89 | g.add_vertex('H', new Dictionary {{'E', 1}, {'F', 3}}); 90 | 91 | g.shortest_path('A', 'H').ForEach(x => Console.WriteLine(x)); 92 | } 93 | } 94 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Logic/app.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/App.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 7 |
10 |
13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 37 | 38 | -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Config/log4net.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Config/log4net.unix.config: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | 6 | 7 | 8 | 9 | 10 | 11 | 12 | 13 | 14 | 15 | 16 | 17 | 18 | 19 | 20 | 21 | 22 | 23 | 24 | 25 | 26 | 27 | 28 | 29 | 30 | 31 | 32 | 33 | 34 | 35 | 36 | 37 | 38 | 39 | 40 | 41 | 42 | 43 | 44 | 45 | 46 | 47 | 48 | 49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 | 59 | 60 | 61 | 62 | 63 | 64 | 65 | 66 | 67 | 68 | 69 | 70 | 71 | 72 | 73 | 74 | -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/FodyWeavers.xml: -------------------------------------------------------------------------------- 1 |  2 | 3 | 4 | 5 | -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Forms/ItemBox.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Drawing; 3 | using System.Windows.Forms; 4 | using POGOProtos.Inventory.Item; 5 | 6 | namespace PokemonGo.RocketBot.Window.Forms 7 | { 8 | public partial class ItemBox : UserControl 9 | { 10 | public DateTime expires = new DateTime(0); 11 | 12 | public ItemBox(ItemData item) 13 | { 14 | InitializeComponent(); 15 | 16 | item_ = item; 17 | 18 | pb.Image = (Image) Properties.Resources.ResourceManager.GetObject(item.ItemId.ToString()); 19 | lbl.Text = item.Count.ToString(); 20 | lblTime.Parent = pb; 21 | 22 | foreach (Control control in Controls) 23 | { 24 | control.MouseEnter += childMouseEnter; 25 | control.MouseLeave += childMouseLeave; 26 | control.MouseClick += childMouseClick; 27 | } 28 | 29 | if (item_.ItemId == ItemId.ItemIncubatorBasic || item_.ItemId == ItemId.ItemIncubatorBasicUnlimited || 30 | item.Count < 1) 31 | { 32 | Enabled = false; 33 | } 34 | } 35 | 36 | public ItemData item_ { get; } 37 | 38 | public event EventHandler ItemClick; 39 | 40 | private void childMouseClick(object sender, MouseEventArgs e) 41 | { 42 | OnItemClick(item_, EventArgs.Empty); 43 | } 44 | 45 | protected override void OnMouseClick(MouseEventArgs e) 46 | { 47 | base.OnMouseClick(e); 48 | OnItemClick(item_, EventArgs.Empty); 49 | } 50 | 51 | private void childMouseLeave(object sender, EventArgs e) 52 | { 53 | OnMouseLeave(e); 54 | } 55 | 56 | private void childMouseEnter(object sender, EventArgs e) 57 | { 58 | OnMouseEnter(e); 59 | } 60 | 61 | protected override void OnMouseLeave(EventArgs e) 62 | { 63 | base.OnMouseLeave(e); 64 | BackColor = Color.Transparent; 65 | } 66 | 67 | protected override void OnMouseEnter(EventArgs e) 68 | { 69 | base.OnMouseEnter(e); 70 | BackColor = Color.LightGreen; 71 | } 72 | 73 | protected virtual void OnItemClick(ItemData item, EventArgs e) 74 | { 75 | var handler = ItemClick; 76 | if (handler != null) 77 | { 78 | handler(item, e); 79 | } 80 | } 81 | 82 | private void tmr_Tick(object sender, EventArgs e) 83 | { 84 | var time = expires - DateTime.UtcNow; 85 | if (expires.Ticks == 0 || time.TotalSeconds < 0) 86 | { 87 | lblTime.Visible = false; 88 | } 89 | else 90 | { 91 | lblTime.Visible = true; 92 | lblTime.Text = $"{time.Minutes}m {Math.Abs(time.Seconds)}s"; 93 | } 94 | } 95 | } 96 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Forms/ItemForm.cs: -------------------------------------------------------------------------------- 1 | using System.Drawing; 2 | using System.Windows.Forms; 3 | using POGOProtos.Inventory.Item; 4 | 5 | namespace PokemonGo.RocketBot.Window.Forms 6 | { 7 | public partial class ItemForm : Form 8 | { 9 | public ItemForm(ItemData item) 10 | { 11 | InitializeComponent(); 12 | 13 | pb.Image = (Image) Properties.Resources.ResourceManager.GetObject(item.ItemId.ToString()); 14 | numCount.Maximum = item.Count; 15 | 16 | if (item.ItemId == ItemId.ItemLuckyEgg || item.ItemId == ItemId.ItemIncenseOrdinary) 17 | { 18 | btnRecycle.Text = "Use"; 19 | //btnRecycle.Enabled = false; 20 | numCount.Visible = false; 21 | } 22 | } 23 | } 24 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Forms/NicknamePokemonForm.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Windows.Forms; 3 | 4 | namespace PokemonGo.RocketBot.Window.Forms 5 | { 6 | public partial class NicknamePokemonForm : Form 7 | { 8 | public NicknamePokemonForm() 9 | { 10 | InitializeComponent(); 11 | txtNickname.Text = @"{IV}_{Name}"; 12 | txtNickname.KeyDown += TxtNickname_KeyDown; 13 | } 14 | 15 | public NicknamePokemonForm(PokemonObject pokemon) 16 | { 17 | InitializeComponent(); 18 | txtNickname.Text = pokemon.Nickname; 19 | txtNickname.KeyDown += TxtNickname_KeyDown; 20 | } 21 | 22 | private void TxtNickname_KeyDown(object sender, KeyEventArgs e) 23 | { 24 | if (e.KeyCode == Keys.Enter) 25 | { 26 | DialogResult = DialogResult.OK; 27 | Close(); 28 | } 29 | if (e.KeyCode == Keys.Escape) 30 | { 31 | DialogResult = DialogResult.Cancel; 32 | Close(); 33 | } 34 | } 35 | 36 | private void closeRenameBtn_Click(object sender, EventArgs e) 37 | { 38 | DialogResult = DialogResult.Cancel; 39 | Close(); 40 | } 41 | } 42 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Helpers/MachineIdHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Management; 3 | 4 | namespace PokemonGo.RocketBot.Window.Helpers 5 | { 6 | public class MachineIdHelper 7 | { 8 | public static string GetCpuId() 9 | { 10 | var cpuInfo = string.Empty; 11 | var mc = new ManagementClass("win32_processor"); 12 | var moc = mc.GetInstances(); 13 | 14 | foreach (var o in moc) 15 | { 16 | var mo = (ManagementObject) o; 17 | cpuInfo = mo.Properties["processorID"].Value.ToString(); 18 | break; 19 | } 20 | return cpuInfo; 21 | } 22 | 23 | public static string GetHardDriveId() 24 | { 25 | var drive = "C"; 26 | var dsk = new ManagementObject( 27 | @"win32_logicaldisk.deviceid=""" + drive + @":"""); 28 | dsk.Get(); 29 | return dsk["VolumeSerialNumber"].ToString(); 30 | } 31 | 32 | public static string GetMachineId() 33 | { 34 | string id; 35 | try 36 | { 37 | id = GetCpuId() + GetHardDriveId(); 38 | } 39 | catch (Exception) 40 | { 41 | id = "BF00LIKELYVIRTUALMACHINE"; 42 | } 43 | return id; 44 | } 45 | } 46 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Helpers/ResourceHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Drawing; 3 | 4 | namespace PokemonGo.RocketBot.Window.Helpers 5 | { 6 | public class ResourceHelper 7 | { 8 | public static Image GetImage(string name) 9 | { 10 | return (Image) Properties.Resources.ResourceManager.GetObject(name); 11 | } 12 | 13 | public static Image GetImage(string name, int maxHeight, int maxWidth) 14 | { 15 | var image = GetImage(name); 16 | var ratioX = (double) maxWidth/image.Width; 17 | var ratioY = (double) maxHeight/image.Height; 18 | var ratio = Math.Min(ratioX, ratioY); 19 | 20 | var newWidth = (int) (image.Width*ratio); 21 | var newHeight = (int) (image.Height*ratio); 22 | 23 | var newImage = new Bitmap(newWidth, newHeight); 24 | 25 | using (var graphics = Graphics.FromImage(newImage)) 26 | graphics.DrawImage(image, 0, 0, newWidth, newHeight); 27 | 28 | return newImage; 29 | } 30 | 31 | public static Image GetPokemonImage(int pokemonId) 32 | { 33 | return GetImage("Pokemon_" + pokemonId); 34 | } 35 | } 36 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Helpers/S2GMapDrawer.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Drawing; 3 | using GMap.NET; 4 | using GMap.NET.WindowsForms; 5 | using Google.Common.Geometry; 6 | 7 | namespace PokemonGo.RocketBot.Window.Helpers 8 | { 9 | internal class S2GMapDrawer 10 | { 11 | public static void DrawS2Cells(List cellsIds, GMapOverlay mapLayer) 12 | { 13 | for (var i = 0; i < cellsIds.Count; i++) 14 | { 15 | var cellId = new S2CellId((ulong) i); 16 | var cell = new S2Cell(cellId); 17 | 18 | var points = new List(); 19 | for (var j = 0; j < 4; j++) 20 | { 21 | var point = new S2LatLng(cell.GetVertex(j)); 22 | points.Add(new PointLatLng(point.LatDegrees, point.LngDegrees)); 23 | } 24 | var polygon = new GMapPolygon(points, "mypolygon"); 25 | polygon.Fill = new SolidBrush(Color.FromArgb(50, Color.Red)); 26 | polygon.Stroke = new Pen(Color.Red, 1); 27 | mapLayer.Polygons.Add(polygon); 28 | } 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Helpers/TimeHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | 3 | namespace PokemonGo.RocketBot.Window.Helpers 4 | { 5 | public class TimeHelper 6 | { 7 | public static DateTime FromUnixTimeUtc(long time) 8 | { 9 | return new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc).AddMilliseconds(time); 10 | } 11 | } 12 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Helpers/VersionHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Net; 3 | using System.Text.RegularExpressions; 4 | using System.Windows.Forms; 5 | using PokemonGo.RocketBot.Logic.Logging; 6 | 7 | namespace PokemonGo.RocketBot.Window.Helpers 8 | { 9 | public class VersionHelper 10 | { 11 | public static void CheckVersion() 12 | { 13 | try 14 | { 15 | var match = 16 | new Regex( 17 | @"\[assembly\: AssemblyVersion\(""(\d{1,})\.(\d{1,})\.(\d{1,})""\)\]") 18 | .Match(DownloadServerVersion()); 19 | 20 | if (!match.Success) return; 21 | var gitVersion = 22 | new Version( 23 | $"{match.Groups[1]}.{match.Groups[2]}.{match.Groups[3]}"); 24 | // makes sense to display your version and say what the current one is on github 25 | Logger.Write("Your version is " + Application.ProductVersion); 26 | Logger.Write("Github version is " + gitVersion); 27 | Logger.Write("You can find it at www.GitHub.com/TheUnnameOrganization/RocketBot/releases"); 28 | } 29 | catch (Exception) 30 | { 31 | Logger.Write("Unable to check for updates now...", LogLevel.Error); 32 | } 33 | } 34 | 35 | private static string DownloadServerVersion() 36 | { 37 | using (var wC = new WebClient()) 38 | return 39 | wC.DownloadString( 40 | "https://raw.githubusercontent.com/TheUnnameOrganization/RocketBot/master/PokemonGo.RocketBot.Window/Properties/AssemblyInfo.cs"); 41 | } 42 | } 43 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Items/ItemBlukBerry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Items/ItemBlukBerry.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Items/ItemGreatBall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Items/ItemGreatBall.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Items/ItemHyperPotion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Items/ItemHyperPotion.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Items/ItemIncenseOrdinary.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Items/ItemIncenseOrdinary.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Items/ItemIncubatorBasic.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Items/ItemIncubatorBasic.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Items/ItemIncubatorBasicUnlimited.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Items/ItemIncubatorBasicUnlimited.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Items/ItemItemStorageUpgrade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Items/ItemItemStorageUpgrade.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Items/ItemLuckyEgg.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Items/ItemLuckyEgg.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Items/ItemMasterBall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Items/ItemMasterBall.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Items/ItemMaxPotion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Items/ItemMaxPotion.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Items/ItemMaxRevive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Items/ItemMaxRevive.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Items/ItemNanabBerry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Items/ItemNanabBerry.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Items/ItemPinapBerry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Items/ItemPinapBerry.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Items/ItemPokeBall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Items/ItemPokeBall.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Items/ItemPokemonStorageUpgrade.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Items/ItemPokemonStorageUpgrade.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Items/ItemPotion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Items/ItemPotion.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Items/ItemRazzBerry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Items/ItemRazzBerry.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Items/ItemRevive.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Items/ItemRevive.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Items/ItemSpecialCamera.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Items/ItemSpecialCamera.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Items/ItemSuperPotion.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Items/ItemSuperPotion.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Items/ItemTroyDisk.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Items/ItemTroyDisk.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Items/ItemUltraBall.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Items/ItemUltraBall.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Items/ItemWeparBerry.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Items/ItemWeparBerry.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Markers/Pokestop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Markers/Pokestop.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Markers/Pokestop_looted.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Markers/Pokestop_looted.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Markers/Trainer_Front.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Markers/Trainer_Front.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Markers/Trainer_Left.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Markers/Trainer_Left.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Markers/Trainer_Right.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Markers/Trainer_Right.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Miscs/question.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Miscs/question.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_1.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_10.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_100.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_101.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_101.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_102.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_102.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_103.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_103.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_104.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_104.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_105.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_105.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_106.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_106.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_107.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_107.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_108.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_108.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_109.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_109.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_11.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_110.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_110.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_111.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_111.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_112.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_112.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_113.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_113.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_114.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_115.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_115.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_116.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_116.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_117.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_117.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_118.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_118.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_119.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_119.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_12.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_120.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_121.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_121.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_122.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_122.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_123.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_123.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_124.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_124.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_125.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_126.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_126.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_127.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_127.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_128.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_129.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_129.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_13.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_130.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_130.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_131.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_131.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_132.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_132.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_133.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_133.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_134.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_134.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_135.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_135.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_136.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_136.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_137.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_137.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_138.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_138.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_139.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_139.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_14.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_140.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_140.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_141.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_141.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_142.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_142.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_143.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_143.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_144.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_145.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_145.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_146.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_146.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_147.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_147.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_148.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_148.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_149.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_149.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_15.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_150.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_151.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_151.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_16.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_17.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_18.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_19.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_2.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_20.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_21.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_22.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_23.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_24.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_25.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_26.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_27.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_28.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_29.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_3.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_30.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_31.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_32.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_33.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_34.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_35.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_36.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_37.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_38.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_39.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_4.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_40.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_41.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_42.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_43.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_44.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_45.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_46.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_47.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_48.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_49.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_5.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_50.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_51.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_52.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_53.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_54.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_55.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_56.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_57.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_58.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_59.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_59.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_6.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_60.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_61.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_61.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_62.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_62.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_63.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_63.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_64.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_65.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_65.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_66.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_66.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_67.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_67.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_68.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_68.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_69.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_69.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_7.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_70.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_71.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_71.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_72.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_73.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_73.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_74.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_74.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_75.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_75.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_76.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_77.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_77.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_78.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_78.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_79.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_79.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_8.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_80.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_81.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_81.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_82.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_82.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_83.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_83.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_84.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_84.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_85.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_85.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_86.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_86.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_87.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_88.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_89.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_89.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_9.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_90.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_91.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_92.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_92.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_93.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_93.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_94.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_94.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_95.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_95.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_96.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_97.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_97.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_98.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_98.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_99.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Images/Pokemon/Pokemon_99.png -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/ItemSetting.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.ComponentModel; 4 | using System.Drawing; 5 | using System.Data; 6 | using System.Linq; 7 | using System.Text; 8 | using System.Threading.Tasks; 9 | using System.Windows.Forms; 10 | using POGOProtos.Inventory.Item; 11 | 12 | namespace PokemonGo.RocketAPI.Window { 13 | public partial class ItemSetting : UserControl { 14 | 15 | private ItemData itemData_; 16 | 17 | public ItemSetting(ItemData itemData) { 18 | InitializeComponent(); 19 | ItemData = itemData; 20 | 21 | count.ValueChanged += Count_ValueChanged; 22 | } 23 | 24 | private void Count_ValueChanged(object sender, EventArgs e) { 25 | ItemData.Count = Decimal.ToInt32(count.Value); 26 | } 27 | 28 | public ItemData ItemData 29 | { 30 | get 31 | { 32 | return itemData_; 33 | } 34 | set 35 | { 36 | itemData_ = value; 37 | ItemId.Text = itemData_.ItemId.ToString().Remove(0, 4); 38 | count.Value = itemData_.Count; 39 | } 40 | } 41 | } 42 | } 43 | -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Models/GMapMarkerPokestops.cs: -------------------------------------------------------------------------------- 1 | using System.Drawing; 2 | using GMap.NET; 3 | using GMap.NET.WindowsForms; 4 | 5 | namespace PokemonGo.RocketBot.Window.Models 6 | { 7 | public class GMapMarkerPokestops : GMapMarker 8 | { 9 | /// 10 | /// Constructor 11 | /// 12 | /// The position of the marker 13 | public GMapMarkerPokestops(PointLatLng p, Image image) 14 | : base(p) 15 | { 16 | MarkerImage = image; 17 | Size = MarkerImage.Size; 18 | Offset = new Point(-Size.Width/2, -Size.Height); 19 | } 20 | 21 | /// 22 | /// The image to display as a marker. 23 | /// 24 | public Image MarkerImage { get; set; } 25 | 26 | public override void OnRender(Graphics g) 27 | { 28 | g.DrawImage(MarkerImage, LocalPosition.X, LocalPosition.Y, Size.Width, Size.Height); 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Models/GMapMarkerTrainer.cs: -------------------------------------------------------------------------------- 1 | using System.Drawing; 2 | using GMap.NET; 3 | using GMap.NET.WindowsForms; 4 | 5 | namespace PokemonGo.RocketBot.Window.Models 6 | { 7 | public class GMapMarkerTrainer : GMapMarker 8 | { 9 | /// 10 | /// Constructor 11 | /// 12 | /// The position of the marker 13 | public GMapMarkerTrainer(PointLatLng p, Image image) 14 | : base(p) 15 | { 16 | MarkerImage = image; 17 | Size = MarkerImage.Size; 18 | Offset = new Point(-Size.Width/2, -Size.Height/2); 19 | } 20 | 21 | /// 22 | /// The image to display as a marker. 23 | /// 24 | public Image MarkerImage { get; set; } 25 | 26 | public override void OnRender(Graphics g) 27 | { 28 | g.DrawImage(MarkerImage, LocalPosition.X, LocalPosition.Y, Size.Width, Size.Height); 29 | } 30 | } 31 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Plugin/INecroPlugin.cs: -------------------------------------------------------------------------------- 1 | namespace PokemonGo.RocketBot.Window.Plugin 2 | { 3 | public interface INecroPlugin 4 | { 5 | void Initialize(PluginInitializerInfo pii); 6 | } 7 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Plugin/PluginInitializerInfo.cs: -------------------------------------------------------------------------------- 1 | using PokemonGo.RocketBot.Logic; 2 | using PokemonGo.RocketBot.Logic.State; 3 | using PokemonGo.RocketBot.Logic.Utils; 4 | 5 | namespace PokemonGo.RocketBot.Window.Plugin 6 | { 7 | public class PluginInitializerInfo 8 | { 9 | public Session Session { get; set; } 10 | public GlobalSettings Settings { get; set; } 11 | public ConsoleLogger Logger { get; set; } 12 | public Statistics Statistics { get; set; } 13 | } 14 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/PokemomObject.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using PokemonGo.RocketBot.Logic.PoGoUtils; 4 | using POGOProtos.Data; 5 | using POGOProtos.Enums; 6 | using POGOProtos.Networking.Responses; 7 | 8 | namespace PokemonGo.RocketBot.Window 9 | { 10 | public class PokemonObject 11 | { 12 | private static bool _initialized; 13 | public static Dictionary CandyToEvolveDict = new Dictionary(); 14 | 15 | public PokemonObject(PokemonData pokemonData) 16 | { 17 | PokemonData = pokemonData; 18 | } 19 | 20 | public PokemonData PokemonData { get; } 21 | 22 | public ulong Id 23 | { 24 | get { return PokemonData.Id; } 25 | } 26 | 27 | public PokemonId PokemonId 28 | { 29 | get { return PokemonData.PokemonId; } 30 | } 31 | 32 | public int Cp 33 | { 34 | get { return PokemonData.Cp; } 35 | } 36 | 37 | public int IndividualAttack 38 | { 39 | get { return PokemonData.IndividualAttack; } 40 | } 41 | 42 | public int IndividualDefense 43 | { 44 | get { return PokemonData.IndividualDefense; } 45 | } 46 | 47 | public int IndividualStamina 48 | { 49 | get { return PokemonData.IndividualStamina; } 50 | } 51 | 52 | public double GetIV 53 | { 54 | get { return Math.Round(PokemonInfo.CalculatePokemonPerfection(PokemonData)/100, 2); } 55 | } 56 | 57 | public double GetLv 58 | { 59 | get { return PokemonInfo.GetLevel(PokemonData); } 60 | } 61 | 62 | public string Nickname 63 | { 64 | get { return PokemonData.Nickname; } 65 | } 66 | 67 | public string Move1 68 | { 69 | get { return PokemonData.Move1.ToString(); } 70 | } 71 | 72 | public string Move2 73 | { 74 | get { return PokemonData.Move2.ToString(); } 75 | } 76 | 77 | public int Candy { get; set; } = 0; 78 | 79 | public int CandyToEvolve 80 | { 81 | get 82 | { 83 | if (CandyToEvolveDict.ContainsKey(PokemonData.PokemonId)) 84 | { 85 | return CandyToEvolveDict[PokemonData.PokemonId]; 86 | } 87 | return 0; 88 | } 89 | } 90 | 91 | public int EvolveTimes 92 | { 93 | get 94 | { 95 | if (CandyToEvolve > 0) 96 | { 97 | return Candy/CandyToEvolve; 98 | } 99 | return 0; 100 | } 101 | } 102 | 103 | public bool CanEvolve 104 | { 105 | get { return EvolveTimes > 0; } 106 | } 107 | 108 | public static void Initilize(DownloadItemTemplatesResponse itemtemplates) 109 | { 110 | if (!_initialized) 111 | { 112 | foreach (var t in itemtemplates.ItemTemplates) 113 | { 114 | if (t != null) 115 | { 116 | if (t.PokemonSettings != null) 117 | { 118 | CandyToEvolveDict.Add(t.PokemonSettings.PokemonId, t.PokemonSettings.CandyToEvolve); 119 | } 120 | } 121 | } 122 | _initialized = true; 123 | } 124 | } 125 | } 126 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Program.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System; 4 | using System.Windows.Forms; 5 | using PokemonGo.RocketBot.Window.Forms; 6 | 7 | #endregion 8 | 9 | namespace PokemonGo.RocketBot.Window 10 | { 11 | internal class Program 12 | { 13 | [STAThread] 14 | private static void Main() 15 | { 16 | Application.EnableVisualStyles(); 17 | Application.Run(new MainForm()); 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Properties/AssemblyInfo.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System.Reflection; 4 | using System.Runtime.InteropServices; 5 | 6 | #endregion 7 | 8 | // General Information about an assembly is controlled through the following 9 | // set of attributes. Change these attribute values to modify the information 10 | // associated with an assembly. 11 | 12 | [assembly: AssemblyTitle("RocketBot 2.0")] 13 | [assembly: AssemblyDescription("")] 14 | [assembly: AssemblyConfiguration("")] 15 | [assembly: AssemblyCompany("")] 16 | [assembly: AssemblyProduct("PokemonGo.RocketBot.Window")] 17 | [assembly: AssemblyCopyright("Copyright © 2016")] 18 | [assembly: AssemblyTrademark("")] 19 | [assembly: AssemblyCulture("")] 20 | 21 | // Setting ComVisible to false makes the types in this assembly not visible 22 | // to COM components. If you need to access a type in this assembly from 23 | // COM, set the ComVisible attribute to true on that type. 24 | 25 | [assembly: ComVisible(false)] 26 | 27 | // The following GUID is for the ID of the typelib if this project is exposed to COM 28 | 29 | [assembly: Guid("1fea147e-f704-497b-a538-00b053b5f672")] 30 | 31 | // Version information for an assembly consists of the following four values: 32 | // 33 | // Major Version 34 | // Minor Version 35 | // Build Number 36 | // Revision 37 | // 38 | // You can specify all the values or you can default the Build and Revision Numbers 39 | // by using the '*' as shown below: 40 | // [assembly: AssemblyVersion("1.0.*")] 41 | 42 | [assembly: AssemblyVersion("2.0.0")] 43 | [assembly: AssemblyFileVersion("2.0.0")] -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Resources/Icon.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Resources/Icon.ico -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Resources/ProgressBar.cs: -------------------------------------------------------------------------------- 1 | #region using directives 2 | 3 | using System; 4 | using System.IO; 5 | 6 | #endregion 7 | 8 | namespace PokemonGo.RocketBot.Window.Resources 9 | { 10 | internal class ProgressBar 11 | { 12 | public static int total = 100; 13 | private static int leftOffset; 14 | 15 | public static void start(string startText, int startAmt) 16 | { 17 | Console.BackgroundColor = ConsoleColor.Black; 18 | Console.ForegroundColor = ConsoleColor.White; 19 | Console.Write(startText); 20 | 21 | leftOffset = startText.Length + 1; 22 | fill(startAmt); 23 | } 24 | 25 | public static void fill(int amt, ConsoleColor barColor = ConsoleColor.Red) 26 | { 27 | try 28 | { 29 | // Window width has be be larger than what Console.CursorLeft is set to 30 | // or System.ArgumentOutOfRangeException is thrown. 31 | if (Console.WindowWidth < 50 + leftOffset) 32 | { 33 | Console.WindowWidth = 51 + leftOffset; 34 | } 35 | 36 | Console.ForegroundColor = barColor; 37 | Console.CursorLeft = 0 + leftOffset; 38 | Console.Write("["); 39 | Console.CursorLeft = 47 + leftOffset; 40 | Console.Write("]"); 41 | Console.CursorLeft = 1 + leftOffset; 42 | var segment = 45.5f/total; 43 | 44 | var pos = 1 + leftOffset; 45 | for (var i = 0; i < segment*amt; i++) 46 | { 47 | Console.BackgroundColor = barColor; 48 | Console.CursorLeft = pos++; 49 | Console.Write(" "); 50 | } 51 | 52 | for (var i = pos; i <= 46 + leftOffset - 2; i++) 53 | { 54 | Console.BackgroundColor = ConsoleColor.Black; 55 | Console.CursorLeft = pos++; 56 | Console.Write(" "); 57 | } 58 | 59 | Console.CursorLeft = 50 + leftOffset; 60 | Console.BackgroundColor = ConsoleColor.Black; 61 | Console.ForegroundColor = ConsoleColor.White; 62 | Console.Write(amt + "%"); 63 | 64 | if (amt == total) 65 | Console.Write(Environment.NewLine); 66 | } 67 | catch (IOException) 68 | { 69 | } 70 | } 71 | } 72 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Resources/client_secret.json: -------------------------------------------------------------------------------- 1 | {"installed":{"client_id":"1085850728336-5c0olh427pnpdrvtuq86ub2d6kkern48.apps.googleusercontent.com","project_id":"jovial-engine-140704","auth_uri":"https://accounts.google.com/o/oauth2/auth","token_uri":"https://accounts.google.com/o/oauth2/token","auth_provider_x509_cert_url":"https://www.googleapis.com/oauth2/v1/certs","client_secret":"mtvRhbM1B9_bxrMAdHSK6Abm","redirect_uris":["urn:ietf:wg:oauth:2.0:oob","http://localhost"]}} -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/Resources/encrypt.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/Resources/encrypt.dll -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/SETUP.md: -------------------------------------------------------------------------------- 1 | Setup for Necrobot: 2 | 3 | 1. Run the NecroBot application and setup your credentials (google/ptc) 4 | 2. Go to the config directory and open config.json in Notepad, Sublime, Brackets, etc. 5 | 3. Change the "DefaultLatitude" and "DefaultLongitude" to your starting location. 6 | Change other parameters in the json file as you wish. 7 | **Note: changing "MaxTravelDistanceInMeters" to a large number (>=5000) may cause problems** 8 | 4. Run the NecroBot app again and start botting PoGo! 9 | 10 | See the Discord chat below for questions. Be nice. 11 | https://discord.gg/VXKxNFr 12 | -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/WebSocketHandler/ActionCommands/EvolvePokemonHandler.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | using PokemonGo.RocketBot.Logic.State; 3 | using PokemonGo.RocketBot.Logic.Tasks; 4 | using SuperSocket.WebSocket; 5 | 6 | namespace PokemonGo.RocketBot.Window.WebSocketHandler.ActionCommands 7 | { 8 | public class EvolvePokemonHandler : IWebSocketRequestHandler 9 | { 10 | public EvolvePokemonHandler() 11 | { 12 | Command = "EvolvePokemon"; 13 | } 14 | 15 | public string Command { get; } 16 | 17 | public async Task Handle(ISession session, WebSocketSession webSocketSession, dynamic message) 18 | { 19 | await EvolveSpecificPokemonTask.Execute(session, (ulong) message.PokemonId); 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/WebSocketHandler/ActionCommands/TransferPokemonHandler.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | using PokemonGo.RocketBot.Logic.State; 3 | using PokemonGo.RocketBot.Logic.Tasks; 4 | using SuperSocket.WebSocket; 5 | 6 | namespace PokemonGo.RocketBot.Window.WebSocketHandler.ActionCommands 7 | { 8 | public class TransferPokemonHandler : IWebSocketRequestHandler 9 | { 10 | public TransferPokemonHandler() 11 | { 12 | Command = "TransferPokemon"; 13 | } 14 | 15 | public string Command { get; } 16 | 17 | public async Task Handle(ISession session, WebSocketSession webSocketSession, dynamic message) 18 | { 19 | await TransferSpecificPokemonTask.Execute(session, (ulong) message.PokemonId); 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/WebSocketHandler/EncodingHelper.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using Newtonsoft.Json; 3 | using Newtonsoft.Json.Linq; 4 | 5 | namespace PokemonGo.RocketBot.Window.WebSocketHandler 6 | { 7 | internal class EncodingHelper 8 | { 9 | public static string Serialize(dynamic evt) 10 | { 11 | var jsonSerializerSettings = new JsonSerializerSettings {TypeNameHandling = TypeNameHandling.All}; 12 | 13 | // Add custom seriaizer to convert uong to string (ulong shoud not appear to json according to json specs) 14 | jsonSerializerSettings.Converters.Add(new IdToStringConverter()); 15 | 16 | return JsonConvert.SerializeObject(evt, Formatting.None, jsonSerializerSettings); 17 | } 18 | 19 | public class IdToStringConverter : JsonConverter 20 | { 21 | public override object ReadJson(JsonReader reader, Type objectType, object existingValue, 22 | JsonSerializer serializer) 23 | { 24 | var jt = JToken.ReadFrom(reader); 25 | return jt.Value(); 26 | } 27 | 28 | public override bool CanConvert(Type objectType) 29 | { 30 | return typeof(long).Equals(objectType) || typeof(ulong).Equals(objectType); 31 | } 32 | 33 | public override void WriteJson(JsonWriter writer, object value, JsonSerializer serializer) 34 | { 35 | serializer.Serialize(writer, value.ToString()); 36 | } 37 | } 38 | } 39 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/WebSocketHandler/GetCommands/Events/EggListResponce.cs: -------------------------------------------------------------------------------- 1 | namespace PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands.Events 2 | { 3 | public class EggListResponce : IWebSocketResponce 4 | { 5 | public EggListResponce(dynamic data, string requestID) 6 | { 7 | Command = "EggListWeb"; 8 | Data = data; 9 | RequestID = requestID; 10 | } 11 | 12 | public string RequestID { get; } 13 | public string Command { get; } 14 | public dynamic Data { get; } 15 | } 16 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/WebSocketHandler/GetCommands/Events/ItemListResponce.cs: -------------------------------------------------------------------------------- 1 | namespace PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands.Events 2 | { 3 | internal class ItemListResponce : IWebSocketResponce 4 | { 5 | public ItemListResponce(dynamic data, string requestID) 6 | { 7 | Command = "ItemListWeb"; 8 | Data = data; 9 | RequestID = requestID; 10 | } 11 | 12 | public string RequestID { get; } 13 | public string Command { get; } 14 | public dynamic Data { get; } 15 | } 16 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/WebSocketHandler/GetCommands/Events/PokemonListResponce.cs: -------------------------------------------------------------------------------- 1 | using PokemonGo.RocketBot.Logic.Event; 2 | 3 | namespace PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands.Events 4 | { 5 | public class PokemonListResponce : IWebSocketResponce, IEvent 6 | { 7 | public PokemonListResponce(dynamic data, string requestID) 8 | { 9 | Command = "PokemonListWeb"; 10 | Data = data; 11 | RequestID = requestID; 12 | } 13 | 14 | public string RequestID { get; } 15 | public string Command { get; } 16 | public dynamic Data { get; } 17 | } 18 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/WebSocketHandler/GetCommands/Events/TrainerProfileResponce.cs: -------------------------------------------------------------------------------- 1 | namespace PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands.Events 2 | { 3 | internal class TrainerProfileResponce : IWebSocketResponce 4 | { 5 | public TrainerProfileResponce(dynamic data, string requestID) 6 | { 7 | Command = "TrainerProfile"; 8 | Data = data; 9 | RequestID = requestID; 10 | } 11 | 12 | public string RequestID { get; } 13 | public string Command { get; } 14 | public dynamic Data { get; } 15 | } 16 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/WebSocketHandler/GetCommands/Events/WebResponce.cs: -------------------------------------------------------------------------------- 1 | namespace PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands.Events 2 | { 3 | public class WebResponce : IWebSocketResponce 4 | { 5 | public string RequestID { get; set; } 6 | public string Command { get; set; } 7 | public dynamic Data { get; set; } 8 | } 9 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/WebSocketHandler/GetCommands/GetEggListHandler.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | using PokemonGo.RocketBot.Logic.State; 3 | using PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands.Tasks; 4 | using SuperSocket.WebSocket; 5 | 6 | namespace PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands 7 | { 8 | internal class GetEggListHandler : IWebSocketRequestHandler 9 | { 10 | public GetEggListHandler() 11 | { 12 | Command = "GetEggList"; 13 | } 14 | 15 | public string Command { get; } 16 | 17 | public async Task Handle(ISession session, WebSocketSession webSocketSession, dynamic message) 18 | { 19 | await GetEggListTask.Execute(session, webSocketSession, (string) message.RequestID); 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/WebSocketHandler/GetCommands/GetItemsListHandler.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | using PokemonGo.RocketBot.Logic.State; 3 | using PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands.Tasks; 4 | using SuperSocket.WebSocket; 5 | 6 | namespace PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands 7 | { 8 | internal class GetItemsListHandler : IWebSocketRequestHandler 9 | { 10 | public GetItemsListHandler() 11 | { 12 | Command = "GetItemsList"; 13 | } 14 | 15 | public string Command { get; } 16 | 17 | public async Task Handle(ISession session, WebSocketSession webSocketSession, dynamic message) 18 | { 19 | await GetItemListTask.Execute(session, webSocketSession, (string) message.RequestID); 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/WebSocketHandler/GetCommands/GetPokemonListHandler.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | using PokemonGo.RocketBot.Logic.State; 3 | using PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands.Tasks; 4 | using SuperSocket.WebSocket; 5 | 6 | namespace PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands 7 | { 8 | public class GetPokemonListHandler : IWebSocketRequestHandler 9 | { 10 | public GetPokemonListHandler() 11 | { 12 | Command = "GetPokemonList"; 13 | } 14 | 15 | public string Command { get; } 16 | 17 | public async Task Handle(ISession session, WebSocketSession webSocketSession, dynamic message) 18 | { 19 | await GetPokemonListTask.Execute(session, webSocketSession, (string) message.RequestID); 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/WebSocketHandler/GetCommands/GetPokemonSettingsHandler.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | using PokemonGo.RocketBot.Logic.State; 3 | using PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands.Tasks; 4 | using SuperSocket.WebSocket; 5 | 6 | namespace PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands 7 | { 8 | public class GetPokemonSettingsHandler : IWebSocketRequestHandler 9 | { 10 | public GetPokemonSettingsHandler() 11 | { 12 | Command = "GetPokemonSettings"; 13 | } 14 | 15 | public string Command { get; } 16 | 17 | public async Task Handle(ISession session, WebSocketSession webSocketSession, dynamic message) 18 | { 19 | await GetPokemonSettingsTask.Execute(session, webSocketSession, (string) message.RequestID); 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/WebSocketHandler/GetCommands/GetTrainerProfileHandler.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | using PokemonGo.RocketBot.Logic.State; 3 | using PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands.Tasks; 4 | using SuperSocket.WebSocket; 5 | 6 | namespace PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands 7 | { 8 | internal class GetTrainerProfileHandler : IWebSocketRequestHandler 9 | { 10 | public GetTrainerProfileHandler() 11 | { 12 | Command = "GetTrainerProfile"; 13 | } 14 | 15 | public string Command { get; } 16 | 17 | public async Task Handle(ISession session, WebSocketSession webSocketSession, dynamic message) 18 | { 19 | await GetTrainerProfileTask.Execute(session, webSocketSession, (string) message.RequestID); 20 | } 21 | } 22 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/WebSocketHandler/GetCommands/Helpers/EggListWeb.cs: -------------------------------------------------------------------------------- 1 | namespace PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands.Helpers 2 | { 3 | internal class EggListWeb 4 | { 5 | public object Incubators { get; set; } 6 | public object UnusedEggs { get; set; } 7 | } 8 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/WebSocketHandler/GetCommands/Helpers/PokemonListWeb.cs: -------------------------------------------------------------------------------- 1 | using PokemonGo.RocketBot.Logic.PoGoUtils; 2 | using POGOProtos.Data; 3 | 4 | namespace PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands.Helpers 5 | { 6 | public class PokemonListWeb 7 | { 8 | public PokemonData Base; 9 | 10 | public PokemonListWeb(PokemonData data) 11 | { 12 | Base = data; 13 | } 14 | 15 | public double IvPerfection 16 | { 17 | get { return PokemonInfo.CalculatePokemonPerfection(Base); } 18 | } 19 | } 20 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/WebSocketHandler/GetCommands/Helpers/TrainerProfileWeb.cs: -------------------------------------------------------------------------------- 1 | using POGOProtos.Data; 2 | using POGOProtos.Data.Player; 3 | 4 | namespace PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands.Helpers 5 | { 6 | internal class TrainerProfileWeb 7 | { 8 | public PlayerData Profile; 9 | public PlayerStats Stats; 10 | 11 | public TrainerProfileWeb(PlayerData profile, PlayerStats stats) 12 | { 13 | Profile = profile; 14 | Stats = stats; 15 | } 16 | } 17 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/WebSocketHandler/GetCommands/Tasks/GetEggListTask.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | using System.Threading.Tasks; 3 | using PokemonGo.RocketBot.Logic.State; 4 | using PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands.Events; 5 | using PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands.Helpers; 6 | using POGOProtos.Inventory.Item; 7 | using SuperSocket.WebSocket; 8 | 9 | namespace PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands.Tasks 10 | { 11 | internal class GetEggListTask 12 | { 13 | public static async Task Execute(ISession session, WebSocketSession webSocketSession, string requestID) 14 | { 15 | var incubators = (await session.Inventory.GetEggIncubators()) 16 | .Where(x => x.UsesRemaining > 0 || x.ItemId == ItemId.ItemIncubatorBasicUnlimited) 17 | .OrderByDescending(x => x.ItemId == ItemId.ItemIncubatorBasicUnlimited) 18 | .ToList(); 19 | 20 | var unusedEggs = (await session.Inventory.GetEggs()) 21 | .Where(x => string.IsNullOrEmpty(x.EggIncubatorId)) 22 | .OrderBy(x => x.EggKmWalkedTarget - x.EggKmWalkedStart) 23 | .ToList(); 24 | 25 | 26 | var list = new EggListWeb 27 | { 28 | Incubators = incubators, 29 | UnusedEggs = unusedEggs 30 | }; 31 | webSocketSession.Send(EncodingHelper.Serialize(new EggListResponce(list, requestID))); 32 | } 33 | } 34 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/WebSocketHandler/GetCommands/Tasks/GetItemListTask.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | using PokemonGo.RocketBot.Logic.State; 3 | using PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands.Events; 4 | using SuperSocket.WebSocket; 5 | 6 | namespace PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands.Tasks 7 | { 8 | internal class GetItemListTask 9 | { 10 | public static async Task Execute(ISession session, WebSocketSession webSocketSession, string requestID) 11 | { 12 | var allItems = await session.Inventory.GetItems(); 13 | webSocketSession.Send(EncodingHelper.Serialize(new ItemListResponce(allItems, requestID))); 14 | } 15 | } 16 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/WebSocketHandler/GetCommands/Tasks/GetPokemonListTask.cs: -------------------------------------------------------------------------------- 1 | using System.Collections.Generic; 2 | using System.Linq; 3 | using System.Threading.Tasks; 4 | using PokemonGo.RocketBot.Logic.State; 5 | using PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands.Events; 6 | using PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands.Helpers; 7 | using SuperSocket.WebSocket; 8 | 9 | namespace PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands.Tasks 10 | { 11 | internal class GetPokemonListTask 12 | { 13 | public static async Task Execute(ISession session, WebSocketSession webSocketSession, string requestID) 14 | { 15 | var allPokemonInBag = await session.Inventory.GetHighestsCp(1000); 16 | var list = new List(); 17 | allPokemonInBag.ToList().ForEach(o => list.Add(new PokemonListWeb(o))); 18 | webSocketSession.Send(EncodingHelper.Serialize(new PokemonListResponce(list, requestID))); 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/WebSocketHandler/GetCommands/Tasks/GetPokemonSettingsTask.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | using PokemonGo.RocketBot.Logic.State; 3 | using PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands.Events; 4 | using SuperSocket.WebSocket; 5 | 6 | namespace PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands.Tasks 7 | { 8 | internal class GetPokemonSettingsTask 9 | { 10 | public static async Task Execute(ISession session, WebSocketSession webSocketSession, string requestID) 11 | { 12 | var settings = await session.Inventory.GetPokemonSettings(); 13 | webSocketSession.Send(EncodingHelper.Serialize(new WebResponce 14 | { 15 | Command = "PokemonSettings", 16 | Data = settings, 17 | RequestID = requestID 18 | })); 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/WebSocketHandler/GetCommands/Tasks/GetTrainerProfileTask.cs: -------------------------------------------------------------------------------- 1 | using System.Linq; 2 | using System.Threading.Tasks; 3 | using PokemonGo.RocketBot.Logic.State; 4 | using PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands.Events; 5 | using PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands.Helpers; 6 | using SuperSocket.WebSocket; 7 | 8 | namespace PokemonGo.RocketBot.Window.WebSocketHandler.GetCommands.Tasks 9 | { 10 | internal class GetTrainerProfileTask 11 | { 12 | public static async Task Execute(ISession session, WebSocketSession webSocketSession, string requestID) 13 | { 14 | var playerStats = (await session.Inventory.GetPlayerStats()).FirstOrDefault(); 15 | if (playerStats == null) 16 | return; 17 | var tmpData = new TrainerProfileWeb(session.Profile.PlayerData, playerStats); 18 | webSocketSession.Send(EncodingHelper.Serialize(new TrainerProfileResponce(tmpData, requestID))); 19 | } 20 | } 21 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/WebSocketHandler/IWebSocketRequestHandler.cs: -------------------------------------------------------------------------------- 1 | using System.Threading.Tasks; 2 | using PokemonGo.RocketBot.Logic.State; 3 | using SuperSocket.WebSocket; 4 | 5 | namespace PokemonGo.RocketBot.Window.WebSocketHandler 6 | { 7 | internal interface IWebSocketRequestHandler 8 | { 9 | string Command { get; } 10 | Task Handle(ISession session, WebSocketSession webSocketSession, dynamic message); 11 | } 12 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/WebSocketHandler/IWebSocketResponce.cs: -------------------------------------------------------------------------------- 1 | namespace PokemonGo.RocketBot.Window.WebSocketHandler 2 | { 3 | internal interface IWebSocketResponce 4 | { 5 | string RequestID { get; } 6 | string Command { get; } 7 | dynamic Data { get; } 8 | } 9 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/WebSocketHandler/WebSocketEventManager.cs: -------------------------------------------------------------------------------- 1 | using System; 2 | using System.Collections.Generic; 3 | using System.Linq; 4 | using System.Threading.Tasks; 5 | using PokemonGo.RocketBot.Logic.State; 6 | using SuperSocket.WebSocket; 7 | 8 | namespace PokemonGo.RocketBot.Window.WebSocketHandler 9 | { 10 | internal class WebSocketEventManager 11 | { 12 | private readonly Dictionary _registerdHandlers = 13 | new Dictionary(); 14 | 15 | public void RegisterHandler(string actionName, IWebSocketRequestHandler action) 16 | { 17 | try 18 | { 19 | _registerdHandlers.Add(actionName, action); 20 | } 21 | catch 22 | { 23 | // ignore 24 | } 25 | } 26 | 27 | public async Task Handle(ISession session, WebSocketSession webSocketSession, dynamic message) 28 | { 29 | if (_registerdHandlers.ContainsKey((string) message.Command)) 30 | { 31 | await _registerdHandlers[(string) message.Command].Handle(session, webSocketSession, message); 32 | } 33 | } 34 | 35 | // Registers all IWebSocketRequestHandler's automatically. 36 | 37 | public static WebSocketEventManager CreateInstance() 38 | { 39 | var manager = new WebSocketEventManager(); 40 | 41 | var type = typeof(IWebSocketRequestHandler); 42 | var types = AppDomain.CurrentDomain.GetAssemblies() 43 | .SelectMany(s => s.GetTypes()) 44 | .Where(p => type.IsAssignableFrom(p) && p.IsClass); 45 | 46 | foreach (var plugin in types) 47 | { 48 | var instance = (IWebSocketRequestHandler) Activator.CreateInstance(plugin); 49 | manager.RegisterHandler(instance.Command, instance); 50 | } 51 | 52 | return manager; 53 | } 54 | } 55 | } -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/cert.pfx: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/brianzhouzc/RocketBot/f4e2f6c15ed5e062ee77938db73368488933208f/PokemonGo.RocketBot.Window/cert.pfx -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/supersocket.cmd: -------------------------------------------------------------------------------- 1 | @echo off 2 | SuperSocket.SocketService.exe -c %1 %2 -------------------------------------------------------------------------------- /PokemonGo.RocketBot.Window/supersocket.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | mono SuperSocket.SocketService.exe -c $1 $2 --------------------------------------------------------------------------------