├── .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
--------------------------------------------------------------------------------