├── .gitignore ├── README.md ├── check.py ├── config.json ├── json_to_geojson.py ├── lib ├── encrypt32bit.dll ├── encrypt64bit.dll ├── libencrypt-freebsd10-64.so ├── libencrypt-linux-arm-32.so ├── libencrypt-linux-x86-32.so ├── libencrypt-linux-x86-64.so └── libencrypt-osx-64.so ├── map.html ├── merge.py ├── pgoapi ├── __init__.py ├── auth.py ├── auth_google.py ├── auth_ptc.py ├── exceptions.py ├── pgoapi.py ├── protobuf_to_dict.py ├── protos │ ├── POGOProtos │ │ ├── Data │ │ │ ├── Battle_pb2.py │ │ │ ├── Capture_pb2.py │ │ │ ├── Gym_pb2.py │ │ │ ├── Logs_pb2.py │ │ │ ├── Player_pb2.py │ │ │ └── __init__.py │ │ ├── Data_pb2.py │ │ ├── Enums_pb2.py │ │ ├── Inventory │ │ │ ├── Item_pb2.py │ │ │ └── __init__.py │ │ ├── Inventory_pb2.py │ │ ├── Map │ │ │ ├── Fort_pb2.py │ │ │ ├── Pokemon_pb2.py │ │ │ └── __init__.py │ │ ├── Map_pb2.py │ │ ├── Networking │ │ │ ├── Envelopes_pb2.py │ │ │ ├── Requests │ │ │ │ ├── Messages_pb2.py │ │ │ │ └── __init__.py │ │ │ ├── Requests_pb2.py │ │ │ ├── Responses_pb2.py │ │ │ └── __init__.py │ │ ├── Settings │ │ │ ├── Master │ │ │ │ ├── Item_pb2.py │ │ │ │ ├── Pokemon_pb2.py │ │ │ │ └── __init__.py │ │ │ ├── Master_pb2.py │ │ │ └── __init__.py │ │ ├── Settings_pb2.py │ │ └── __init__.py │ ├── POGOProtos_src │ │ ├── Data │ │ │ ├── AssetDigestEntry.proto │ │ │ ├── Battle │ │ │ │ ├── BattleAction.proto │ │ │ │ ├── BattleActionType.proto │ │ │ │ ├── BattleLog.proto │ │ │ │ ├── BattleParticipant.proto │ │ │ │ ├── BattlePokemonInfo.proto │ │ │ │ ├── BattleResults.proto │ │ │ │ ├── BattleState.proto │ │ │ │ └── BattleType.proto │ │ │ ├── Capture │ │ │ │ ├── CaptureAward.proto │ │ │ │ └── CaptureProbability.proto │ │ │ ├── DownloadUrlEntry.proto │ │ │ ├── Gym │ │ │ │ ├── GymMembership.proto │ │ │ │ └── GymState.proto │ │ │ ├── Logs │ │ │ │ ├── ActionLogEntry.proto │ │ │ │ ├── CatchPokemonLogEntry.proto │ │ │ │ └── FortSearchLogEntry.proto │ │ │ ├── Player │ │ │ │ ├── ContactSettings.proto │ │ │ │ ├── Currency.proto │ │ │ │ ├── DailyBonus.proto │ │ │ │ ├── EquippedBadge.proto │ │ │ │ ├── PlayerAvatar.proto │ │ │ │ ├── PlayerCamera.proto │ │ │ │ ├── PlayerCurrency.proto │ │ │ │ ├── PlayerPublicProfile.proto │ │ │ │ └── PlayerStats.proto │ │ │ ├── PlayerBadge.proto │ │ │ ├── PlayerData.proto │ │ │ ├── PokedexEntry.proto │ │ │ └── PokemonData.proto │ │ ├── Enums │ │ │ ├── ActivityType.proto │ │ │ ├── BadgeType.proto │ │ │ ├── CameraInterpolation.proto │ │ │ ├── CameraTarget.proto │ │ │ ├── Gender.proto │ │ │ ├── IapItemCategory.proto │ │ │ ├── ItemCategory.proto │ │ │ ├── ItemEffect.proto │ │ │ ├── Platform.proto │ │ │ ├── PokemonFamilyId.proto │ │ │ ├── PokemonId.proto │ │ │ ├── PokemonMove.proto │ │ │ ├── PokemonMovementType.proto │ │ │ ├── PokemonRarity.proto │ │ │ ├── PokemonType.proto │ │ │ ├── TeamColor.proto │ │ │ └── TutorialState.proto │ │ ├── Inventory │ │ │ ├── AppliedItem.proto │ │ │ ├── AppliedItems.proto │ │ │ ├── Candy.proto │ │ │ ├── EggIncubator.proto │ │ │ ├── EggIncubatorType.proto │ │ │ ├── EggIncubators.proto │ │ │ ├── InventoryDelta.proto │ │ │ ├── InventoryItem.proto │ │ │ ├── InventoryItemData.proto │ │ │ ├── InventoryUpgrade.proto │ │ │ ├── InventoryUpgradeType.proto │ │ │ ├── InventoryUpgrades.proto │ │ │ └── Item │ │ │ │ ├── ItemAward.proto │ │ │ │ ├── ItemData.proto │ │ │ │ ├── ItemId.proto │ │ │ │ └── ItemType.proto │ │ ├── Map │ │ │ ├── Fort │ │ │ │ ├── FortData.proto │ │ │ │ ├── FortLureInfo.proto │ │ │ │ ├── FortModifier.proto │ │ │ │ ├── FortRenderingType.proto │ │ │ │ ├── FortSponsor.proto │ │ │ │ ├── FortSummary.proto │ │ │ │ └── FortType.proto │ │ │ ├── MapCell.proto │ │ │ ├── MapObjectsStatus.proto │ │ │ ├── Pokemon │ │ │ │ ├── MapPokemon.proto │ │ │ │ ├── NearbyPokemon.proto │ │ │ │ └── WildPokemon.proto │ │ │ └── SpawnPoint.proto │ │ ├── Networking │ │ │ ├── Envelopes │ │ │ │ ├── AuthTicket.proto │ │ │ │ ├── RequestEnvelope.proto │ │ │ │ ├── ResponseEnvelope.proto │ │ │ │ ├── Unknown6.proto │ │ │ │ └── Unknown6Response.proto │ │ │ ├── Requests │ │ │ │ ├── Messages │ │ │ │ │ ├── AddFortModifierMessage.proto │ │ │ │ │ ├── AttackGymMessage.proto │ │ │ │ │ ├── CatchPokemonMessage.proto │ │ │ │ │ ├── CheckAwardedBadgesMessage.proto │ │ │ │ │ ├── CheckCodenameAvailableMessage.proto │ │ │ │ │ ├── ClaimCodenameMessage.proto │ │ │ │ │ ├── CollectDailyBonusMessage.proto │ │ │ │ │ ├── CollectDailyDefenderBonusMessage.proto │ │ │ │ │ ├── DiskEncounterMessage.proto │ │ │ │ │ ├── DownloadItemTemplatesMessage.proto │ │ │ │ │ ├── DownloadRemoteConfigVersionMessage.proto │ │ │ │ │ ├── DownloadSettingsMessage.proto │ │ │ │ │ ├── EchoMessage.proto │ │ │ │ │ ├── EncounterMessage.proto │ │ │ │ │ ├── EncounterTutorialCompleteMessage.proto │ │ │ │ │ ├── EquipBadgeMessage.proto │ │ │ │ │ ├── EvolvePokemonMessage.proto │ │ │ │ │ ├── FortDeployPokemonMessage.proto │ │ │ │ │ ├── FortDetailsMessage.proto │ │ │ │ │ ├── FortRecallPokemonMessage.proto │ │ │ │ │ ├── FortSearchMessage.proto │ │ │ │ │ ├── GetAssetDigestMessage.proto │ │ │ │ │ ├── GetDownloadUrlsMessage.proto │ │ │ │ │ ├── GetGymDetailsMessage.proto │ │ │ │ │ ├── GetHatchedEggsMessage.proto │ │ │ │ │ ├── GetIncensePokemonMessage.proto │ │ │ │ │ ├── GetInventoryMessage.proto │ │ │ │ │ ├── GetMapObjectsMessage.proto │ │ │ │ │ ├── GetPlayerMessage.proto │ │ │ │ │ ├── GetPlayerProfileMessage.proto │ │ │ │ │ ├── GetSuggestedCodenamesMessage.proto │ │ │ │ │ ├── IncenseEncounterMessage.proto │ │ │ │ │ ├── LevelUpRewardsMessage.proto │ │ │ │ │ ├── MarkTutorialCompleteMessage.proto │ │ │ │ │ ├── NicknamePokemonMessage.proto │ │ │ │ │ ├── PlayerUpdateMessage.proto │ │ │ │ │ ├── README.txt │ │ │ │ │ ├── RecycleInventoryItemMessage.proto │ │ │ │ │ ├── ReleasePokemonMessage.proto │ │ │ │ │ ├── SetAvatarMessage.proto │ │ │ │ │ ├── SetContactSettingsMessage.proto │ │ │ │ │ ├── SetFavoritePokemonMessage.proto │ │ │ │ │ ├── SetPlayerTeamMessage.proto │ │ │ │ │ ├── SfidaActionLogMessage.proto │ │ │ │ │ ├── StartGymBattleMessage.proto │ │ │ │ │ ├── UpgradePokemonMessage.proto │ │ │ │ │ ├── UseIncenseMessage.proto │ │ │ │ │ ├── UseItemCaptureMessage.proto │ │ │ │ │ ├── UseItemEggIncubatorMessage.proto │ │ │ │ │ ├── UseItemGymMessage.proto │ │ │ │ │ ├── UseItemPotionMessage.proto │ │ │ │ │ ├── UseItemReviveMessage.proto │ │ │ │ │ └── UseItemXpBoostMessage.proto │ │ │ │ ├── Request.proto │ │ │ │ └── RequestType.proto │ │ │ └── Responses │ │ │ │ ├── AddFortModifierResponse.proto │ │ │ │ ├── AttackGymResponse.proto │ │ │ │ ├── CatchPokemonResponse.proto │ │ │ │ ├── CheckAwardedBadgesResponse.proto │ │ │ │ ├── CheckCodenameAvailableResponse.proto │ │ │ │ ├── ClaimCodenameResponse.proto │ │ │ │ ├── CollectDailyBonusResponse.proto │ │ │ │ ├── CollectDailyDefenderBonusResponse.proto │ │ │ │ ├── DiskEncounterResponse.proto │ │ │ │ ├── DownloadItemTemplatesResponse.proto │ │ │ │ ├── DownloadRemoteConfigVersionResponse.proto │ │ │ │ ├── DownloadSettingsResponse.proto │ │ │ │ ├── EchoResponse.proto │ │ │ │ ├── EncounterResponse.proto │ │ │ │ ├── EncounterTutorialCompleteResponse.proto │ │ │ │ ├── EquipBadgeResponse.proto │ │ │ │ ├── EvolvePokemonResponse.proto │ │ │ │ ├── FortDeployPokemonResponse.proto │ │ │ │ ├── FortDetailsResponse.proto │ │ │ │ ├── FortRecallPokemonResponse.proto │ │ │ │ ├── FortSearchResponse.proto │ │ │ │ ├── GetAssetDigestResponse.proto │ │ │ │ ├── GetDownloadUrlsResponse.proto │ │ │ │ ├── GetGymDetailsResponse.proto │ │ │ │ ├── GetHatchedEggsResponse.proto │ │ │ │ ├── GetIncensePokemonResponse.proto │ │ │ │ ├── GetInventoryResponse.proto │ │ │ │ ├── GetMapObjectsResponse.proto │ │ │ │ ├── GetPlayerProfileResponse.proto │ │ │ │ ├── GetPlayerResponse.proto │ │ │ │ ├── GetSuggestedCodenamesResponse.proto │ │ │ │ ├── IncenseEncounterResponse.proto │ │ │ │ ├── LevelUpRewardsResponse.proto │ │ │ │ ├── MarkTutorialCompleteResponse.proto │ │ │ │ ├── NicknamePokemonResponse.proto │ │ │ │ ├── PlayerUpdateResponse.proto │ │ │ │ ├── README.txt │ │ │ │ ├── RecycleInventoryItemResponse.proto │ │ │ │ ├── ReleasePokemonResponse.proto │ │ │ │ ├── SetAvatarResponse.proto │ │ │ │ ├── SetContactSettingsResponse.proto │ │ │ │ ├── SetFavoritePokemonResponse.proto │ │ │ │ ├── SetPlayerTeamResponse.proto │ │ │ │ ├── SfidaActionLogResponse.proto │ │ │ │ ├── StartGymBattleResponse.proto │ │ │ │ ├── UpgradePokemonResponse.proto │ │ │ │ ├── UseIncenseResponse.proto │ │ │ │ ├── UseItemCaptureResponse.proto │ │ │ │ ├── UseItemEggIncubatorResponse.proto │ │ │ │ ├── UseItemGymResponse.proto │ │ │ │ ├── UseItemPotionResponse.proto │ │ │ │ ├── UseItemReviveResponse.proto │ │ │ │ ├── UseItemXpBoostResponse.proto │ │ │ │ └── base.proto.txt │ │ └── Settings │ │ │ ├── DownloadSettingsAction.proto │ │ │ ├── FortSettings.proto │ │ │ ├── GlobalSettings.proto │ │ │ ├── InventorySettings.proto │ │ │ ├── LevelSettings.proto │ │ │ ├── MapSettings.proto │ │ │ └── Master │ │ │ ├── BadgeSettings.proto │ │ │ ├── CameraSettings.proto │ │ │ ├── EncounterSettings.proto │ │ │ ├── EquippedBadgeSettings.proto │ │ │ ├── GymBattleSettings.proto │ │ │ ├── GymLevelSettings.proto │ │ │ ├── IapItemDisplay.proto │ │ │ ├── IapSettings.proto │ │ │ ├── Item │ │ │ ├── BattleAttributes.proto │ │ │ ├── EggIncubatorAttributes.proto │ │ │ ├── ExperienceBoostAttributes.proto │ │ │ ├── FoodAttributes.proto │ │ │ ├── FortModifierAttributes.proto │ │ │ ├── IncenseAttributes.proto │ │ │ ├── InventoryUpgradeAttributes.proto │ │ │ ├── PokeballAttributes.proto │ │ │ ├── PotionAttributes.proto │ │ │ └── ReviveAttributes.proto │ │ │ ├── ItemSettings.proto │ │ │ ├── MoveSequenceSettings.proto │ │ │ ├── MoveSettings.proto │ │ │ ├── PlayerLevelSettings.proto │ │ │ ├── Pokemon │ │ │ ├── CameraAttributes.proto │ │ │ ├── EncounterAttributes.proto │ │ │ └── StatsAttributes.proto │ │ │ ├── PokemonSettings.proto │ │ │ ├── PokemonUpgradeSettings.proto │ │ │ └── TypeEffectiveSettings.proto │ ├── README │ ├── Signature.proto │ ├── Signature_pb2.py │ └── __init__.py ├── rpc_api.py └── utilities.py ├── requirements.txt ├── spawn.py ├── static ├── blue.png ├── green.png ├── grey.png ├── gym.png ├── orange.png └── pokestop.png ├── tos.py ├── utils.py └── viewWork.html /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # spawnScan 0.2.6(mostly stable)(updated for 6st aug patch[unknown 6]) 2 | Now has customisable rate-limiting, a handler for oversized scans, and takes account of the 70m search radius 3 | 4 | ## A simple and fast spawnPoint finder for pokemon go 5 | ### Features 6 | - By performing 6 scans over the course of 1 hour, the spawn locations for a given area can be determined and a live map of active spawns can be made without having to further query the api, lowering server load 7 | - Rectangle search areas, and multiple of them 8 | - The scans take account of longitude distortion, so requests are equally spaced (was not the case in early mapping tools causing them to perform badly near the equator because their requests where too spread out) 9 | - High speed scans while still maintaining maximum accuracy (many scan patterns where tested and this is using the fastest of the ones with over 98% accuracy) 10 | - Multi thread support, allowing for faster, and thus forth bigger scans (up to at least 24 workers) 11 | - if a scan is too large to complete in 1 go, it will be divided up and processed over multiple hours if needed 12 | 13 | ### Usage 14 | Everything is set using the config.json file, in this you put account details, and rectangular regions to scan 15 | There are three runnable scripts, tos.py, check.py, and spawn.py 16 | - tos.py accepts the tos on all accounts listed in config.json 17 | - check.py checks the config file is valid json, and estimates how long the scan will take to finish 18 | - spawn.py is the main script that does all the heavy work, finding the spawns 19 | 20 | Also note that spawn.py overwrites its output files each run, so do back them up 21 | 22 | If you would like to help contribute data, please send a ziped copy of the output files [pokes.json,spawns.json,stops.json,gyms.json] via private message, to reddit user TBTerra 23 | 24 | ### Maps 25 | when veiwed localy maps will only work in firefox, however they will work in any browser when on a webserver 26 | 27 | The maps will not work by default as you will have to use your own maps API key 28 | 29 | To get an API key visit [this page](https://developers.google.com/maps/documentation/javascript/get-api-key) and click on get key 30 | 31 | You will then need to go into each of the html files and at the bottom find a line like 32 | ``` 33 | src="https://maps.googleapis.com/maps/api/js?key=YOUR_API_KEY&callback=initMap"> 34 | ``` 35 | and you will need to replace YOUR_API_KEY with your own API key 36 | 37 | The map of the spawn points will try to update its markers once per second, while this is fine on modern PCs on maps with a few thousand points, it may become slow on less powerful systems and on maps with far more points 38 | 39 | ### Recommended method 40 | The recommended way to use this script is first to plan out your scan area, using viewWork.html to visualise it, and check.py to make sure it wont take too long 41 | 42 | remember to run tos.py if your scanning accounts have not yet accepted the ingame tos 43 | 44 | After that run spawn.py and wait for it to complete 45 | 46 | Then enjoy the map of the spawn points 47 | 48 | If you would like to help contribute data, please send a ziped copy of the output files [pokes.json,spawns.json,stops.json,gyms.json] via private message, to reddit user TBTerra 49 | -------------------------------------------------------------------------------- /check.py: -------------------------------------------------------------------------------- 1 | import json 2 | import math 3 | 4 | with open('config.json') as file: 5 | config = json.load(file) 6 | 7 | def calcwork(): 8 | totalwork = 0 9 | area = 0 10 | for rect in config['work']: 11 | distN = math.radians(max(rect[0], rect[2])-min(rect[0], rect[2]))*6371 12 | distE = math.radians(max(rect[3], rect[1])-min(rect[3], rect[1]))*6371*math.cos(math.radians((rect[0]+rect[2])*0.5)) 13 | dlat = 0.00089 14 | dlng = dlat / math.cos(math.radians((rect[0]+rect[2])*0.5)) 15 | latSteps = int((((max(rect[0], rect[2])-min(rect[0], rect[2])))/dlat)+0.75199999) 16 | if latSteps<1: 17 | latSteps=1 18 | lngSteps = int((((max(rect[1], rect[3])-min(rect[1], rect[3])))/dlng)+0.75199999) 19 | if lngSteps<1: 20 | lngSteps=1 21 | totalwork += latSteps * lngSteps 22 | area += distN * distE 23 | return totalwork, area 24 | 25 | tscans,tarea = calcwork() 26 | print 'total of {} steps covering {} km^2'.format(tscans,tarea) 27 | numWorkers = ((tscans-1)//config['stepsPerPassPerWorker'])+1 28 | if numWorkers > len(config['users']): 29 | numWorkers = len(config['users']) 30 | print 'with {} worker(s), doing {} scans each, would take {} hour(s)'.format(numWorkers,config['stepsPerPassPerWorker'],int(math.ceil(float(tscans)/(config['stepsPerPassPerWorker']*numWorkers)))) 31 | -------------------------------------------------------------------------------- /config.json: -------------------------------------------------------------------------------- 1 | { 2 | "auth_service": "ptc", 3 | "users":[ 4 | {"username": "user1", "password": "pass1"}, 5 | {"username": "user2", "password": "pass2"} 6 | ], 7 | "work":[ 8 | [lat1,long1, lat2,long2], 9 | [lat1,long1, lat2,long2] 10 | ], 11 | "stepsPerPassPerWorker": 50, 12 | "scanDelay": 10.2 13 | } -------------------------------------------------------------------------------- /json_to_geojson.py: -------------------------------------------------------------------------------- 1 | import json 2 | import geojson 3 | import pprint 4 | 5 | with open('gyms.json') as file: 6 | gyms = json.load(file) 7 | 8 | geostops = [] 9 | for location in gyms: 10 | point = geojson.Point((location['lng'], location['lat'])) 11 | feature = geojson.Feature(geometry=point, id=location['id'],properties={"name":location['id']}) 12 | geostops.append(feature) 13 | features = geojson.FeatureCollection(geostops) 14 | f = open('geo_gyms.json', 'w') 15 | json.dump(features,f) 16 | f.close() 17 | 18 | 19 | with open('stops.json') as file: 20 | stops = json.load(file) 21 | 22 | geostops = [] 23 | for location in stops: 24 | point = geojson.Point((location['lng'], location['lat'])) 25 | feature = geojson.Feature(geometry=point, id=location['id'],properties={"name":location['id']}) 26 | geostops.append(feature) 27 | features = geojson.FeatureCollection(geostops) 28 | f = open('geo_stops.json', 'w') 29 | json.dump(features,f) 30 | f.close() 31 | -------------------------------------------------------------------------------- /lib/encrypt32bit.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TBTerra/spawnScan/06e921ea7f692234ee5c379938a15f6b94f17cfe/lib/encrypt32bit.dll -------------------------------------------------------------------------------- /lib/encrypt64bit.dll: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TBTerra/spawnScan/06e921ea7f692234ee5c379938a15f6b94f17cfe/lib/encrypt64bit.dll -------------------------------------------------------------------------------- /lib/libencrypt-freebsd10-64.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TBTerra/spawnScan/06e921ea7f692234ee5c379938a15f6b94f17cfe/lib/libencrypt-freebsd10-64.so -------------------------------------------------------------------------------- /lib/libencrypt-linux-arm-32.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TBTerra/spawnScan/06e921ea7f692234ee5c379938a15f6b94f17cfe/lib/libencrypt-linux-arm-32.so -------------------------------------------------------------------------------- /lib/libencrypt-linux-x86-32.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TBTerra/spawnScan/06e921ea7f692234ee5c379938a15f6b94f17cfe/lib/libencrypt-linux-x86-32.so -------------------------------------------------------------------------------- /lib/libencrypt-linux-x86-64.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TBTerra/spawnScan/06e921ea7f692234ee5c379938a15f6b94f17cfe/lib/libencrypt-linux-x86-64.so -------------------------------------------------------------------------------- /lib/libencrypt-osx-64.so: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TBTerra/spawnScan/06e921ea7f692234ee5c379938a15f6b94f17cfe/lib/libencrypt-osx-64.so -------------------------------------------------------------------------------- /map.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 25 | 26 | 27 |
28 |

Legend

29 | 225 | 228 | 229 | 230 | -------------------------------------------------------------------------------- /merge.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python2 2 | """ 3 | Inspect and/or merge multiple spawns.json files comparing the files for 4 | inconsistencies. 5 | 6 | This might be useful when scanning the same area multiple 7 | times and detect if something has changed or to concatenate the scanning results 8 | from different places. 9 | """ 10 | import argparse 11 | import copy 12 | import itertools 13 | import json 14 | import sys 15 | 16 | parser = argparse.ArgumentParser( 17 | description=__doc__) 18 | parser.add_argument("files", metavar="spawns.json", nargs="+") 19 | parser.add_argument("-m", "--merge", 20 | dest="merge", action="store_true", 21 | help="Will produce a single file with all spawn points from the input fiels") 22 | parser.add_argument("-o", "--out", type=str, 23 | help="Output file to write when mergin") 24 | parser.add_argument("--fi", 25 | dest="show_file_occurrence_inconsistencies", action="store_true", 26 | help="Print all spawn points that didn't occur in all input files") 27 | parser.add_argument("--fti", 28 | dest="show_file_times_inconsistencies", action="store_true", 29 | help="Print all spawn points that have different time stamps in different files") 30 | parser.add_argument("--mt", 31 | dest="show_multiple_times", action="store_true", 32 | help="Print all spawn point with more that one spawn time") 33 | parser.set_defaults(merge=False) 34 | parser.set_defaults(show_file_occurrence_inconsistencies=False) 35 | parser.set_defaults(show_file_times_inconsistencies=False) 36 | parser.set_defaults(show_multiple_times=False) 37 | parser.set_defaults(out="merged_spawns.json") 38 | args = parser.parse_args() 39 | 40 | def add_filename(spawn_point, filename): 41 | spawn_point["filename"] = filename 42 | return spawn_point 43 | 44 | def print_filetimes(filetimes): 45 | for fn, ts in filetimes.iteritems(): 46 | print " %s: [%s]" % (fn, ", ".join([str(x) for x in sorted(ts)])) 47 | 48 | files = [open(f, "r") for f in args.files] 49 | data = [[add_filename(d, f.name) for d in json.load(f)] for f in files] 50 | for f in files: 51 | f.close() 52 | 53 | # This hold all recorded spawn points with extra information about all recorded 54 | # spawn times and which input files it existed in 55 | # 56 | # sid: { 57 | # sp: {lat,lng,sid,cell}, 58 | # times: set(time, ...), 59 | # filetimes: {filename: set(time, ...)} 60 | # } 61 | spawn_points = {} 62 | merged_spawns = [] 63 | total_nbr_spawn_points = 0 64 | 65 | for spawn_point in itertools.chain(*data): 66 | total_nbr_spawn_points += 1 67 | time = spawn_point.pop("time") 68 | filename = spawn_point.pop("filename") 69 | sp = spawn_points.setdefault(spawn_point.get("sid"), 70 | dict(sp=spawn_point, times=set(), filetimes=dict())) 71 | sp.get("times").add(time) 72 | filetimes = sp.get("filetimes").setdefault(filename, set()) 73 | filetimes.add(time) 74 | 75 | total_nbr_unique_spawn_points = len(spawn_points) 76 | count_file_occurrence_inconsistencies = 0 77 | count_multiple_times = 0 78 | count_file_times_inconsistencies = 0 79 | 80 | for sid, sp in spawn_points.iteritems(): 81 | spawn_point = sp.get("sp") 82 | filetimes = sp.get("filetimes") 83 | times = sorted(sp.get("times")) 84 | 85 | # Check if this spawn point was not recorded in all files 86 | if len(filetimes) < len(files): 87 | count_file_occurrence_inconsistencies += 1 88 | if args.show_file_occurrence_inconsistencies: 89 | print "! %(sid)s [%(lat)s, %(lng)s] =>" % spawn_point 90 | print_filetimes(filetimes) 91 | 92 | # Check if more than one time was found for this spawn point 93 | if len(times) > 1: 94 | count_multiple_times += 1 95 | if args.show_multiple_times: 96 | print "# %(sid)s [%(lat)s, %(lng)s] =>" % spawn_point 97 | for idx, t in enumerate(times): 98 | line = " %s" % t 99 | if idx > 0: 100 | diff = t - times[idx-1] 101 | line += " (diff: %s)" % diff 102 | print line 103 | print_filetimes(filetimes) 104 | 105 | # Check if the times recorded in the different files differ for spawn point 106 | if not all(x == sp.get("times") for x in filetimes.values()): 107 | count_file_times_inconsistencies += 1 108 | if args.show_file_times_inconsistencies: 109 | print "%% %(sid)s [%(lat)s, %(lng)s] =>" % spawn_point 110 | print_filetimes(filetimes) 111 | 112 | if args.merge: 113 | for t in times: 114 | new_spawn_point = copy.copy(spawn_point) 115 | new_spawn_point["time"] = t 116 | merged_spawns.append(new_spawn_point) 117 | 118 | print "%s spawn points read" % total_nbr_spawn_points 119 | 120 | print "%s unique spawn points" % total_nbr_unique_spawn_points 121 | 122 | print "%s (%.2f%%) spawn points had multiple spawn times (show with --mt, # prefix)" % ( 123 | count_multiple_times, float(count_multiple_times)/total_nbr_unique_spawn_points*100) 124 | 125 | print "%s (%.2f%%) spawn points didn't occur in all files (show with --fi, ! prefix)" % ( 126 | count_file_occurrence_inconsistencies, 127 | float(count_file_occurrence_inconsistencies)/total_nbr_unique_spawn_points*100) 128 | 129 | print "%s (%.2f%%) spawn points didn't have the same time(s) for each spawn point in all files (show with --fti, %% prefix)" % ( 130 | count_file_times_inconsistencies, 131 | float(count_file_times_inconsistencies)/total_nbr_unique_spawn_points*100) 132 | 133 | if args.merge: 134 | print "%s (spawn point, time) combinations" % len(merged_spawns) 135 | with open(args.out, "w") as out: 136 | json.dump(merged_spawns, out) 137 | print "Wrote merged spawns to %s" % out.name 138 | -------------------------------------------------------------------------------- /pgoapi/__init__.py: -------------------------------------------------------------------------------- 1 | """ 2 | pgoapi - Pokemon Go API 3 | Copyright (c) 2016 tjado 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 19 | DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 20 | OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE 21 | OR OTHER DEALINGS IN THE SOFTWARE. 22 | 23 | Author: tjado 24 | """ 25 | 26 | from __future__ import absolute_import 27 | 28 | from pgoapi.exceptions import PleaseInstallProtobufVersion3 29 | 30 | import pkg_resources 31 | import logging 32 | 33 | __title__ = 'pgoapi' 34 | __version__ = '1.1.7' 35 | __author__ = 'tjado' 36 | __license__ = 'MIT License' 37 | __copyright__ = 'Copyright (c) 2016 tjado ' 38 | 39 | protobuf_exist = False 40 | protobuf_version = 0 41 | try: 42 | protobuf_version = pkg_resources.get_distribution("protobuf").version 43 | protobuf_exist = True 44 | except: 45 | pass 46 | 47 | if (not protobuf_exist) or (int(protobuf_version[:1]) < 3): 48 | raise PleaseInstallProtobufVersion3() 49 | 50 | from pgoapi.pgoapi import PGoApi 51 | from pgoapi.rpc_api import RpcApi 52 | from pgoapi.auth import Auth 53 | 54 | logging.getLogger("pgoapi").addHandler(logging.NullHandler()) 55 | logging.getLogger("rpc_api").addHandler(logging.NullHandler()) 56 | logging.getLogger("utilities").addHandler(logging.NullHandler()) 57 | logging.getLogger("auth").addHandler(logging.NullHandler()) 58 | logging.getLogger("auth_ptc").addHandler(logging.NullHandler()) 59 | logging.getLogger("auth_google").addHandler(logging.NullHandler()) 60 | 61 | try: 62 | import requests.packages.urllib3 63 | requests.packages.urllib3.disable_warnings() 64 | except: 65 | pass -------------------------------------------------------------------------------- /pgoapi/auth.py: -------------------------------------------------------------------------------- 1 | """ 2 | pgoapi - Pokemon Go API 3 | Copyright (c) 2016 tjado 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 19 | DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 20 | OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE 21 | OR OTHER DEALINGS IN THE SOFTWARE. 22 | 23 | Author: tjado 24 | """ 25 | 26 | from __future__ import absolute_import 27 | 28 | import logging 29 | from pgoapi.utilities import get_time, get_format_time_diff 30 | 31 | class Auth: 32 | 33 | def __init__(self): 34 | self.log = logging.getLogger(__name__) 35 | 36 | self._auth_provider = None 37 | 38 | self._login = False 39 | 40 | """ 41 | oauth2 uses refresh tokens (which basically never expires) 42 | to get an access_token which is only valid for a certain time) 43 | """ 44 | self._refresh_token = None 45 | self._access_token = None 46 | self._access_token_expiry = 0 47 | # TODO: can be removed 48 | self._auth_token = None 49 | 50 | """ 51 | Pokemon Go uses internal tickets, like an internal 52 | session to keep a user logged in over a certain time (30 minutes) 53 | """ 54 | self._ticket_expire = None 55 | self._ticket_start = None 56 | self._ticket_end = None 57 | 58 | def get_name(self): 59 | return self._auth_provider 60 | 61 | def is_login(self): 62 | return self._login 63 | 64 | def get_token(self): 65 | return self._access_token 66 | 67 | def has_ticket(self): 68 | if self._ticket_expire and self._ticket_start and self._ticket_end: 69 | return True 70 | else: 71 | return False 72 | 73 | def set_ticket(self, params): 74 | self._ticket_expire, self._ticket_start, self._ticket_end = params 75 | 76 | def is_new_ticket(self, new_ticket_time_ms): 77 | if self._ticket_expire is None or new_ticket_time_ms > self._ticket_expire: 78 | return True 79 | else: 80 | return False 81 | 82 | def check_ticket(self): 83 | if self.has_ticket(): 84 | now_ms = get_time(ms = True) 85 | if now_ms < (self._ticket_expire - 10000): 86 | h, m, s = get_format_time_diff(now_ms, self._ticket_expire, True) 87 | self.log.debug('Session Ticket still valid for further %02d:%02d:%02d hours (%s < %s)', h, m, s, now_ms, self._ticket_expire) 88 | return True 89 | else: 90 | self.log.debug('Removed expired Session Ticket (%s < %s)', now_ms, self._ticket_expire) 91 | self._ticket_expire, self._ticket_start, self._ticket_end = (None, None, None) 92 | return False 93 | else: 94 | return False 95 | 96 | def get_ticket(self): 97 | if self.check_ticket(): 98 | return (self._ticket_expire, self._ticket_start, self._ticket_end) 99 | else: 100 | return False 101 | 102 | def user_login(self, username, password): 103 | raise NotImplementedError() 104 | 105 | def set_refresh_token(self, username, password): 106 | raise NotImplementedError() 107 | 108 | def get_access_token(self, force_refresh = False): 109 | raise NotImplementedError() 110 | 111 | 112 | def check_access_token(self): 113 | """ 114 | Add few seconds to now so the token get refreshed 115 | before it invalidates in the middle of the request 116 | """ 117 | now_s = get_time() + 120 118 | 119 | if self._access_token is not None: 120 | if self._access_token_expiry == 0: 121 | self.log.debug('No Access Token Expiry found - assuming it is still valid!') 122 | return True 123 | elif self._access_token_expiry > now_s: 124 | h, m, s = get_format_time_diff(now_s, self._access_token_expiry, False) 125 | self.log.debug('Access Token still valid for further %02d:%02d:%02d hours (%s < %s)', h, m, s, now_s, self._access_token_expiry) 126 | return True 127 | else: 128 | self.log.info('Access Token expired!') 129 | return False 130 | else: 131 | self.log.debug('No Access Token available!') 132 | return False -------------------------------------------------------------------------------- /pgoapi/auth_google.py: -------------------------------------------------------------------------------- 1 | """ 2 | pgoapi - Pokemon Go API 3 | Copyright (c) 2016 tjado 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 19 | DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 20 | OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE 21 | OR OTHER DEALINGS IN THE SOFTWARE. 22 | 23 | Author: tjado 24 | """ 25 | 26 | from __future__ import absolute_import 27 | 28 | import six 29 | import logging 30 | 31 | from pgoapi.auth import Auth 32 | from pgoapi.exceptions import AuthException 33 | from gpsoauth import perform_master_login, perform_oauth 34 | 35 | class AuthGoogle(Auth): 36 | 37 | GOOGLE_LOGIN_ANDROID_ID = '9774d56d682e549c' 38 | GOOGLE_LOGIN_SERVICE= 'audience:server:client_id:848232511240-7so421jotr2609rmqakceuu1luuq0ptb.apps.googleusercontent.com' 39 | GOOGLE_LOGIN_APP = 'com.nianticlabs.pokemongo' 40 | GOOGLE_LOGIN_CLIENT_SIG = '321187995bc7cdc2b5fc91b11a96e2baa8602c62' 41 | 42 | def __init__(self): 43 | Auth.__init__(self) 44 | 45 | self._auth_provider = 'google' 46 | 47 | self._refresh_token = None 48 | 49 | def user_login(self, username, password): 50 | self.log.info('Google User Login for: {}'.format(username)) 51 | 52 | if not isinstance(username, six.string_types) or not isinstance(password, six.string_types): 53 | raise AuthException("Username/password not correctly specified") 54 | 55 | user_login = perform_master_login(username, password, self.GOOGLE_LOGIN_ANDROID_ID) 56 | 57 | refresh_token = user_login.get('Token', None) 58 | if refresh_token is not None: 59 | self._refresh_token = refresh_token 60 | self.log.info('Google User Login successful.') 61 | else: 62 | self._refresh_token = None 63 | raise AuthException("Invalid Google Username/password") 64 | 65 | self.get_access_token() 66 | 67 | def set_refresh_token(self, refresh_token): 68 | self.log.info('Google Refresh Token provided by user') 69 | self._refresh_token = refresh_token 70 | 71 | def get_access_token(self, force_refresh = False): 72 | token_validity = self.check_access_token() 73 | 74 | if token_validity is True and force_refresh is False: 75 | self.log.debug('Using cached Google Access Token') 76 | return self._access_token 77 | else: 78 | if force_refresh: 79 | self.log.info('Forced request of Google Access Token!') 80 | else: 81 | self.log.info('Request Google Access Token...') 82 | 83 | token_data = perform_oauth(None, self._refresh_token, self.GOOGLE_LOGIN_ANDROID_ID, self.GOOGLE_LOGIN_SERVICE, self.GOOGLE_LOGIN_APP, 84 | self.GOOGLE_LOGIN_CLIENT_SIG) 85 | 86 | access_token = token_data.get('Auth', None) 87 | if access_token is not None: 88 | self._access_token = access_token 89 | self._access_token_expiry = int(token_data.get('Expiry', 0)) 90 | self._login = True 91 | 92 | self.log.info('Google Access Token successfully received.') 93 | self.log.debug('Google Access Token: %s...', self._access_token[:25]) 94 | return self._access_token 95 | else: 96 | self._access_token = None 97 | self._login = False 98 | raise AuthException("Could not receive a Google Access Token") 99 | -------------------------------------------------------------------------------- /pgoapi/auth_ptc.py: -------------------------------------------------------------------------------- 1 | """ 2 | pgoapi - Pokemon Go API 3 | Copyright (c) 2016 tjado 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 19 | DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 20 | OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE 21 | OR OTHER DEALINGS IN THE SOFTWARE. 22 | 23 | Author: tjado 24 | """ 25 | 26 | from __future__ import absolute_import 27 | from future.standard_library import install_aliases 28 | install_aliases() 29 | 30 | import re 31 | import six 32 | import json 33 | import logging 34 | import requests 35 | 36 | from urllib.parse import parse_qs 37 | 38 | from pgoapi.auth import Auth 39 | from pgoapi.utilities import get_time 40 | from pgoapi.exceptions import AuthException 41 | 42 | class AuthPtc(Auth): 43 | 44 | PTC_LOGIN_URL = 'https://sso.pokemon.com/sso/login?service=https%3A%2F%2Fsso.pokemon.com%2Fsso%2Foauth2.0%2FcallbackAuthorize' 45 | PTC_LOGIN_OAUTH = 'https://sso.pokemon.com/sso/oauth2.0/accessToken' 46 | PTC_LOGIN_CLIENT_SECRET = 'w8ScCUXJQc6kXKw8FiOhd8Fixzht18Dq3PEVkUCP5ZPxtgyWsbTvWHFLm2wNY0JR' 47 | 48 | def __init__(self): 49 | Auth.__init__(self) 50 | 51 | self._auth_provider = 'ptc' 52 | 53 | self._session = requests.session() 54 | self._session.verify = True 55 | 56 | def user_login(self, username, password): 57 | self.log.info('PTC User Login for: {}'.format(username)) 58 | 59 | if not isinstance(username, six.string_types) or not isinstance(password, six.string_types): 60 | raise AuthException("Username/password not correctly specified") 61 | 62 | head = {'User-Agent': 'niantic'} 63 | r = self._session.get(self.PTC_LOGIN_URL, headers=head) 64 | 65 | try: 66 | jdata = json.loads(r.content.decode('utf-8')) 67 | data = { 68 | 'lt': jdata['lt'], 69 | 'execution': jdata['execution'], 70 | '_eventId': 'submit', 71 | 'username': username, 72 | 'password': password, 73 | } 74 | except ValueError as e: 75 | self.log.error('PTC User Login Error - Field missing in response: %s', e) 76 | return False 77 | except KeyError as e: 78 | self.log.error('PTC User Login Error - Field missing in response.content: %s', e) 79 | return False 80 | 81 | r1 = self._session.post(self.PTC_LOGIN_URL, data=data, headers=head) 82 | 83 | ticket = None 84 | try: 85 | ticket = re.sub('.*ticket=', '', r1.history[0].headers['Location']) 86 | except Exception as e: 87 | try: 88 | self.log.error('Could not retrieve token: %s', r1.json()['errors'][0]) 89 | except Exception as e: 90 | self.log.error('Could not retrieve token! (%s)', e) 91 | return False 92 | 93 | self._refresh_token = ticket 94 | self.log.info('PTC User Login successful.') 95 | 96 | self.get_access_token() 97 | 98 | def set_refresh_token(self, refresh_token): 99 | self.log.info('PTC Refresh Token provided by user') 100 | self._refresh_token = refresh_token 101 | 102 | def get_access_token(self, force_refresh = False): 103 | token_validity = self.check_access_token() 104 | 105 | if token_validity is True and force_refresh is False: 106 | self.log.debug('Using cached PTC Access Token') 107 | return self._access_token 108 | else: 109 | if force_refresh: 110 | self.log.info('Forced request of PTC Access Token!') 111 | else: 112 | self.log.info('Request PTC Access Token...') 113 | 114 | data1 = { 115 | 'client_id': 'mobile-app_pokemon-go', 116 | 'redirect_uri': 'https://www.nianticlabs.com/pokemongo/error', 117 | 'client_secret': self.PTC_LOGIN_CLIENT_SECRET, 118 | 'grant_type': 'refresh_token', 119 | 'code': self._refresh_token, 120 | } 121 | 122 | r2 = self._session.post(self.PTC_LOGIN_OAUTH, data=data1) 123 | 124 | qs = r2.content.decode('utf-8') 125 | token_data = parse_qs(qs) 126 | 127 | access_token = token_data.get('access_token', None) 128 | if access_token is not None: 129 | self._access_token = access_token[0] 130 | 131 | now_s = get_time() 132 | expires = int(token_data.get('expires', [0])[0]) 133 | if expires > 0: 134 | self._access_token_expiry = expires + now_s 135 | else: 136 | self._access_token_expiry = 0 137 | 138 | self._login = True 139 | 140 | self.log.info('PTC Access Token successfully retrieved.') 141 | self.log.debug('PTC Access Token: %s...', self._access_token[:25]) 142 | else: 143 | self._access_token = None 144 | self._login = False 145 | raise AuthException("Could not retrieve a PTC Access Token") 146 | 147 | 148 | 149 | -------------------------------------------------------------------------------- /pgoapi/exceptions.py: -------------------------------------------------------------------------------- 1 | """ 2 | pgoapi - Pokemon Go API 3 | Copyright (c) 2016 tjado 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 19 | DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 20 | OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE 21 | OR OTHER DEALINGS IN THE SOFTWARE. 22 | 23 | Author: tjado 24 | """ 25 | 26 | class AuthException(Exception): 27 | pass 28 | 29 | class NotLoggedInException(Exception): 30 | pass 31 | 32 | class ServerBusyOrOfflineException(Exception): 33 | pass 34 | 35 | class PleaseInstallProtobufVersion3(Exception): 36 | pass 37 | 38 | class NoPlayerPositionSetException(Exception): 39 | pass 40 | 41 | class EmptySubrequestChainException(Exception): 42 | pass 43 | 44 | class ServerSideRequestThrottlingException(Exception): 45 | pass 46 | 47 | class ServerSideAccessForbiddenException(Exception): 48 | pass 49 | 50 | class UnexpectedResponseException(Exception): 51 | pass 52 | 53 | class AuthTokenExpiredException(Exception): 54 | pass 55 | 56 | class ServerApiEndpointRedirectException(Exception): 57 | def __init__(self): 58 | self._api_endpoint = None 59 | 60 | def get_redirected_endpoint(self): 61 | return self._api_endpoint 62 | 63 | def set_redirected_endpoint(self, api_endpoint): 64 | self._api_endpoint = api_endpoint 65 | -------------------------------------------------------------------------------- /pgoapi/protobuf_to_dict.py: -------------------------------------------------------------------------------- 1 | import base64 2 | 3 | import six 4 | 5 | from google.protobuf.message import Message 6 | from google.protobuf.descriptor import FieldDescriptor 7 | 8 | 9 | __all__ = ["protobuf_to_dict", "TYPE_CALLABLE_MAP", "dict_to_protobuf", 10 | "REVERSE_TYPE_CALLABLE_MAP"] 11 | 12 | 13 | EXTENSION_CONTAINER = '___X' 14 | 15 | 16 | TYPE_CALLABLE_MAP = { 17 | FieldDescriptor.TYPE_DOUBLE: float, 18 | FieldDescriptor.TYPE_FLOAT: float, 19 | FieldDescriptor.TYPE_INT32: int, 20 | FieldDescriptor.TYPE_INT64: int if six.PY3 else six.integer_types[1], 21 | FieldDescriptor.TYPE_UINT32: int, 22 | FieldDescriptor.TYPE_UINT64: int if six.PY3 else six.integer_types[1], 23 | FieldDescriptor.TYPE_SINT32: int, 24 | FieldDescriptor.TYPE_SINT64: int if six.PY3 else six.integer_types[1], 25 | FieldDescriptor.TYPE_FIXED32: int, 26 | FieldDescriptor.TYPE_FIXED64: int if six.PY3 else six.integer_types[1], 27 | FieldDescriptor.TYPE_SFIXED32: int, 28 | FieldDescriptor.TYPE_SFIXED64: int if six.PY3 else six.integer_types[1], 29 | FieldDescriptor.TYPE_BOOL: bool, 30 | FieldDescriptor.TYPE_STRING: six.text_type, 31 | FieldDescriptor.TYPE_BYTES: lambda b: base64.b64encode(b), 32 | FieldDescriptor.TYPE_ENUM: int, 33 | } 34 | 35 | 36 | def repeated(type_callable): 37 | return lambda value_list: [type_callable(value) for value in value_list] 38 | 39 | 40 | def enum_label_name(field, value): 41 | return field.enum_type.values_by_number[int(value)].name 42 | 43 | 44 | def protobuf_to_dict(pb, type_callable_map=TYPE_CALLABLE_MAP, use_enum_labels=False): 45 | result_dict = {} 46 | extensions = {} 47 | for field, value in pb.ListFields(): 48 | if field.message_type and field.message_type.has_options and field.message_type.GetOptions().map_entry: 49 | result_dict[field.name] = dict(value) 50 | continue 51 | type_callable = _get_field_value_adaptor(pb, field, type_callable_map, use_enum_labels) 52 | if field.label == FieldDescriptor.LABEL_REPEATED: 53 | type_callable = repeated(type_callable) 54 | 55 | if field.is_extension: 56 | extensions[str(field.number)] = type_callable(value) 57 | continue 58 | 59 | result_dict[field.name] = type_callable(value) 60 | 61 | if extensions: 62 | result_dict[EXTENSION_CONTAINER] = extensions 63 | return result_dict 64 | 65 | 66 | def _get_field_value_adaptor(pb, field, type_callable_map=TYPE_CALLABLE_MAP, use_enum_labels=False): 67 | if field.type == FieldDescriptor.TYPE_MESSAGE: 68 | # recursively encode protobuf sub-message 69 | return lambda pb: protobuf_to_dict( 70 | pb, type_callable_map=type_callable_map, 71 | use_enum_labels=use_enum_labels) 72 | 73 | if use_enum_labels and field.type == FieldDescriptor.TYPE_ENUM: 74 | return lambda value: enum_label_name(field, value) 75 | 76 | if field.type in type_callable_map: 77 | return type_callable_map[field.type] 78 | 79 | raise TypeError("Field %s.%s has unrecognised type id %d" % ( 80 | pb.__class__.__name__, field.name, field.type)) 81 | 82 | 83 | def get_bytes(value): 84 | return base64.b64decode(value) 85 | 86 | 87 | REVERSE_TYPE_CALLABLE_MAP = { 88 | FieldDescriptor.TYPE_BYTES: get_bytes, 89 | } 90 | 91 | 92 | def dict_to_protobuf(pb_klass_or_instance, values, type_callable_map=REVERSE_TYPE_CALLABLE_MAP, strict=True): 93 | """Populates a protobuf model from a dictionary. 94 | 95 | :param pb_klass_or_instance: a protobuf message class, or an protobuf instance 96 | :type pb_klass_or_instance: a type or instance of a subclass of google.protobuf.message.Message 97 | :param dict values: a dictionary of values. Repeated and nested values are 98 | fully supported. 99 | :param dict type_callable_map: a mapping of protobuf types to callables for setting 100 | values on the target instance. 101 | :param bool strict: complain if keys in the map are not fields on the message. 102 | """ 103 | if isinstance(pb_klass_or_instance, Message): 104 | instance = pb_klass_or_instance 105 | else: 106 | instance = pb_klass_or_instance() 107 | return _dict_to_protobuf(instance, values, type_callable_map, strict) 108 | 109 | 110 | def _get_field_mapping(pb, dict_value, strict): 111 | field_mapping = [] 112 | for key, value in dict_value.items(): 113 | if key == EXTENSION_CONTAINER: 114 | continue 115 | if key not in pb.DESCRIPTOR.fields_by_name: 116 | if strict: 117 | raise KeyError("%s does not have a field called %s" % (pb, key)) 118 | continue 119 | field_mapping.append((pb.DESCRIPTOR.fields_by_name[key], value, getattr(pb, key, None))) 120 | 121 | for ext_num, ext_val in dict_value.get(EXTENSION_CONTAINER, {}).items(): 122 | try: 123 | ext_num = int(ext_num) 124 | except ValueError: 125 | raise ValueError("Extension keys must be integers.") 126 | if ext_num not in pb._extensions_by_number: 127 | if strict: 128 | raise KeyError("%s does not have a extension with number %s. Perhaps you forgot to import it?" % (pb, key)) 129 | continue 130 | ext_field = pb._extensions_by_number[ext_num] 131 | pb_val = None 132 | pb_val = pb.Extensions[ext_field] 133 | field_mapping.append((ext_field, ext_val, pb_val)) 134 | 135 | return field_mapping 136 | 137 | 138 | def _dict_to_protobuf(pb, value, type_callable_map, strict): 139 | fields = _get_field_mapping(pb, value, strict) 140 | 141 | for field, input_value, pb_value in fields: 142 | if field.label == FieldDescriptor.LABEL_REPEATED: 143 | if field.message_type and field.message_type.has_options and field.message_type.GetOptions().map_entry: 144 | pb_value.update(input_value) 145 | continue 146 | for item in input_value: 147 | if field.type == FieldDescriptor.TYPE_MESSAGE: 148 | m = pb_value.add() 149 | _dict_to_protobuf(m, item, type_callable_map, strict) 150 | elif field.type == FieldDescriptor.TYPE_ENUM and isinstance(item, six.string_types): 151 | pb_value.append(_string_to_enum(field, item)) 152 | else: 153 | pb_value.append(item) 154 | continue 155 | if field.type == FieldDescriptor.TYPE_MESSAGE: 156 | _dict_to_protobuf(pb_value, input_value, type_callable_map, strict) 157 | continue 158 | 159 | if field.type in type_callable_map: 160 | input_value = type_callable_map[field.type](input_value) 161 | 162 | if field.is_extension: 163 | pb.Extensions[field] = input_value 164 | continue 165 | 166 | if field.type == FieldDescriptor.TYPE_ENUM and isinstance(input_value, six.string_types): 167 | input_value = _string_to_enum(field, input_value) 168 | 169 | setattr(pb, field.name, input_value) 170 | 171 | return pb 172 | 173 | 174 | def _string_to_enum(field, input_value): 175 | enum_dict = field.enum_type.values_by_name 176 | try: 177 | input_value = enum_dict[input_value].number 178 | except KeyError: 179 | raise KeyError("`%s` is not a valid value for field `%s`" % (input_value, field.name)) 180 | return input_value 181 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos/Data/Capture_pb2.py: -------------------------------------------------------------------------------- 1 | # Generated by the protocol buffer compiler. DO NOT EDIT! 2 | # source: POGOProtos.Data.Capture.proto 3 | 4 | import sys 5 | _b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) 6 | from google.protobuf import descriptor as _descriptor 7 | from google.protobuf import message as _message 8 | from google.protobuf import reflection as _reflection 9 | from google.protobuf import symbol_database as _symbol_database 10 | from google.protobuf import descriptor_pb2 11 | # @@protoc_insertion_point(imports) 12 | 13 | _sym_db = _symbol_database.Default() 14 | 15 | 16 | from POGOProtos import Enums_pb2 as POGOProtos_dot_Enums__pb2 17 | from POGOProtos.Inventory import Item_pb2 as POGOProtos_dot_Inventory_dot_Item__pb2 18 | 19 | from POGOProtos.Enums_pb2 import * 20 | from POGOProtos.Inventory.Item_pb2 import * 21 | 22 | DESCRIPTOR = _descriptor.FileDescriptor( 23 | name='POGOProtos.Data.Capture.proto', 24 | package='POGOProtos.Data.Capture', 25 | syntax='proto3', 26 | serialized_pb=_b('\n\x1dPOGOProtos.Data.Capture.proto\x12\x17POGOProtos.Data.Capture\x1a\x16POGOProtos.Enums.proto\x1a\x1fPOGOProtos.Inventory.Item.proto\"r\n\x0c\x43\x61ptureAward\x12\x35\n\ractivity_type\x18\x01 \x03(\x0e\x32\x1e.POGOProtos.Enums.ActivityType\x12\n\n\x02xp\x18\x02 \x03(\x05\x12\r\n\x05\x63\x61ndy\x18\x03 \x03(\x05\x12\x10\n\x08stardust\x18\x04 \x03(\x05\"\x95\x01\n\x12\x43\x61ptureProbability\x12<\n\rpokeball_type\x18\x01 \x03(\x0e\x32!.POGOProtos.Inventory.Item.ItemIdB\x02\x10\x01\x12\x1f\n\x13\x63\x61pture_probability\x18\x02 \x03(\x02\x42\x02\x10\x01\x12 \n\x18reticle_difficulty_scale\x18\x0c \x01(\x01P\x00P\x01\x62\x06proto3') 27 | , 28 | dependencies=[POGOProtos_dot_Enums__pb2.DESCRIPTOR,POGOProtos_dot_Inventory_dot_Item__pb2.DESCRIPTOR,]) 29 | _sym_db.RegisterFileDescriptor(DESCRIPTOR) 30 | 31 | 32 | 33 | 34 | _CAPTUREAWARD = _descriptor.Descriptor( 35 | name='CaptureAward', 36 | full_name='POGOProtos.Data.Capture.CaptureAward', 37 | filename=None, 38 | file=DESCRIPTOR, 39 | containing_type=None, 40 | fields=[ 41 | _descriptor.FieldDescriptor( 42 | name='activity_type', full_name='POGOProtos.Data.Capture.CaptureAward.activity_type', index=0, 43 | number=1, type=14, cpp_type=8, label=3, 44 | has_default_value=False, default_value=[], 45 | message_type=None, enum_type=None, containing_type=None, 46 | is_extension=False, extension_scope=None, 47 | options=None), 48 | _descriptor.FieldDescriptor( 49 | name='xp', full_name='POGOProtos.Data.Capture.CaptureAward.xp', index=1, 50 | number=2, type=5, cpp_type=1, label=3, 51 | has_default_value=False, default_value=[], 52 | message_type=None, enum_type=None, containing_type=None, 53 | is_extension=False, extension_scope=None, 54 | options=None), 55 | _descriptor.FieldDescriptor( 56 | name='candy', full_name='POGOProtos.Data.Capture.CaptureAward.candy', index=2, 57 | number=3, type=5, cpp_type=1, label=3, 58 | has_default_value=False, default_value=[], 59 | message_type=None, enum_type=None, containing_type=None, 60 | is_extension=False, extension_scope=None, 61 | options=None), 62 | _descriptor.FieldDescriptor( 63 | name='stardust', full_name='POGOProtos.Data.Capture.CaptureAward.stardust', index=3, 64 | number=4, type=5, cpp_type=1, label=3, 65 | has_default_value=False, default_value=[], 66 | message_type=None, enum_type=None, containing_type=None, 67 | is_extension=False, extension_scope=None, 68 | options=None), 69 | ], 70 | extensions=[ 71 | ], 72 | nested_types=[], 73 | enum_types=[ 74 | ], 75 | options=None, 76 | is_extendable=False, 77 | syntax='proto3', 78 | extension_ranges=[], 79 | oneofs=[ 80 | ], 81 | serialized_start=115, 82 | serialized_end=229, 83 | ) 84 | 85 | 86 | _CAPTUREPROBABILITY = _descriptor.Descriptor( 87 | name='CaptureProbability', 88 | full_name='POGOProtos.Data.Capture.CaptureProbability', 89 | filename=None, 90 | file=DESCRIPTOR, 91 | containing_type=None, 92 | fields=[ 93 | _descriptor.FieldDescriptor( 94 | name='pokeball_type', full_name='POGOProtos.Data.Capture.CaptureProbability.pokeball_type', index=0, 95 | number=1, type=14, cpp_type=8, label=3, 96 | has_default_value=False, default_value=[], 97 | message_type=None, enum_type=None, containing_type=None, 98 | is_extension=False, extension_scope=None, 99 | options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), _b('\020\001'))), 100 | _descriptor.FieldDescriptor( 101 | name='capture_probability', full_name='POGOProtos.Data.Capture.CaptureProbability.capture_probability', index=1, 102 | number=2, type=2, cpp_type=6, label=3, 103 | has_default_value=False, default_value=[], 104 | message_type=None, enum_type=None, containing_type=None, 105 | is_extension=False, extension_scope=None, 106 | options=_descriptor._ParseOptions(descriptor_pb2.FieldOptions(), _b('\020\001'))), 107 | _descriptor.FieldDescriptor( 108 | name='reticle_difficulty_scale', full_name='POGOProtos.Data.Capture.CaptureProbability.reticle_difficulty_scale', index=2, 109 | number=12, type=1, cpp_type=5, label=1, 110 | has_default_value=False, default_value=float(0), 111 | message_type=None, enum_type=None, containing_type=None, 112 | is_extension=False, extension_scope=None, 113 | options=None), 114 | ], 115 | extensions=[ 116 | ], 117 | nested_types=[], 118 | enum_types=[ 119 | ], 120 | options=None, 121 | is_extendable=False, 122 | syntax='proto3', 123 | extension_ranges=[], 124 | oneofs=[ 125 | ], 126 | serialized_start=232, 127 | serialized_end=381, 128 | ) 129 | 130 | _CAPTUREAWARD.fields_by_name['activity_type'].enum_type = POGOProtos_dot_Enums__pb2._ACTIVITYTYPE 131 | _CAPTUREPROBABILITY.fields_by_name['pokeball_type'].enum_type = POGOProtos_dot_Inventory_dot_Item__pb2._ITEMID 132 | DESCRIPTOR.message_types_by_name['CaptureAward'] = _CAPTUREAWARD 133 | DESCRIPTOR.message_types_by_name['CaptureProbability'] = _CAPTUREPROBABILITY 134 | 135 | CaptureAward = _reflection.GeneratedProtocolMessageType('CaptureAward', (_message.Message,), dict( 136 | DESCRIPTOR = _CAPTUREAWARD, 137 | __module__ = 'POGOProtos.Data.Capture_pb2' 138 | # @@protoc_insertion_point(class_scope:POGOProtos.Data.Capture.CaptureAward) 139 | )) 140 | _sym_db.RegisterMessage(CaptureAward) 141 | 142 | CaptureProbability = _reflection.GeneratedProtocolMessageType('CaptureProbability', (_message.Message,), dict( 143 | DESCRIPTOR = _CAPTUREPROBABILITY, 144 | __module__ = 'POGOProtos.Data.Capture_pb2' 145 | # @@protoc_insertion_point(class_scope:POGOProtos.Data.Capture.CaptureProbability) 146 | )) 147 | _sym_db.RegisterMessage(CaptureProbability) 148 | 149 | 150 | _CAPTUREPROBABILITY.fields_by_name['pokeball_type'].has_options = True 151 | _CAPTUREPROBABILITY.fields_by_name['pokeball_type']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), _b('\020\001')) 152 | _CAPTUREPROBABILITY.fields_by_name['capture_probability'].has_options = True 153 | _CAPTUREPROBABILITY.fields_by_name['capture_probability']._options = _descriptor._ParseOptions(descriptor_pb2.FieldOptions(), _b('\020\001')) 154 | # @@protoc_insertion_point(module_scope) 155 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos/Data/Gym_pb2.py: -------------------------------------------------------------------------------- 1 | # Generated by the protocol buffer compiler. DO NOT EDIT! 2 | # source: POGOProtos.Data.Gym.proto 3 | 4 | import sys 5 | _b=sys.version_info[0]<3 and (lambda x:x) or (lambda x:x.encode('latin1')) 6 | from google.protobuf import descriptor as _descriptor 7 | from google.protobuf import message as _message 8 | from google.protobuf import reflection as _reflection 9 | from google.protobuf import symbol_database as _symbol_database 10 | from google.protobuf import descriptor_pb2 11 | # @@protoc_insertion_point(imports) 12 | 13 | _sym_db = _symbol_database.Default() 14 | 15 | 16 | from POGOProtos import Data_pb2 as POGOProtos_dot_Data__pb2 17 | POGOProtos_dot_Enums__pb2 = POGOProtos_dot_Data__pb2.POGOProtos_dot_Enums__pb2 18 | POGOProtos_dot_Data_dot_Player__pb2 = POGOProtos_dot_Data__pb2.POGOProtos_dot_Data_dot_Player__pb2 19 | POGOProtos_dot_Enums__pb2 = POGOProtos_dot_Data__pb2.POGOProtos_dot_Enums__pb2 20 | POGOProtos_dot_Inventory_dot_Item__pb2 = POGOProtos_dot_Data__pb2.POGOProtos_dot_Inventory_dot_Item__pb2 21 | from POGOProtos.Data import Player_pb2 as POGOProtos_dot_Data_dot_Player__pb2 22 | POGOProtos_dot_Enums__pb2 = POGOProtos_dot_Data_dot_Player__pb2.POGOProtos_dot_Enums__pb2 23 | from POGOProtos.Map import Fort_pb2 as POGOProtos_dot_Map_dot_Fort__pb2 24 | POGOProtos_dot_Enums__pb2 = POGOProtos_dot_Map_dot_Fort__pb2.POGOProtos_dot_Enums__pb2 25 | POGOProtos_dot_Inventory_dot_Item__pb2 = POGOProtos_dot_Map_dot_Fort__pb2.POGOProtos_dot_Inventory_dot_Item__pb2 26 | 27 | from POGOProtos.Data_pb2 import * 28 | from POGOProtos.Data.Player_pb2 import * 29 | from POGOProtos.Map.Fort_pb2 import * 30 | 31 | DESCRIPTOR = _descriptor.FileDescriptor( 32 | name='POGOProtos.Data.Gym.proto', 33 | package='POGOProtos.Data.Gym', 34 | syntax='proto3', 35 | serialized_pb=_b('\n\x19POGOProtos.Data.Gym.proto\x12\x13POGOProtos.Data.Gym\x1a\x15POGOProtos.Data.proto\x1a\x1cPOGOProtos.Data.Player.proto\x1a\x19POGOProtos.Map.Fort.proto\"\x90\x01\n\rGymMembership\x12\x32\n\x0cpokemon_data\x18\x01 \x01(\x0b\x32\x1c.POGOProtos.Data.PokemonData\x12K\n\x16trainer_public_profile\x18\x02 \x01(\x0b\x32+.POGOProtos.Data.Player.PlayerPublicProfile\"u\n\x08GymState\x12\x30\n\tfort_data\x18\x01 \x01(\x0b\x32\x1d.POGOProtos.Map.Fort.FortData\x12\x37\n\x0bmemberships\x18\x02 \x03(\x0b\x32\".POGOProtos.Data.Gym.GymMembershipP\x00P\x01P\x02\x62\x06proto3') 36 | , 37 | dependencies=[POGOProtos_dot_Data__pb2.DESCRIPTOR,POGOProtos_dot_Data_dot_Player__pb2.DESCRIPTOR,POGOProtos_dot_Map_dot_Fort__pb2.DESCRIPTOR,]) 38 | _sym_db.RegisterFileDescriptor(DESCRIPTOR) 39 | 40 | 41 | 42 | 43 | _GYMMEMBERSHIP = _descriptor.Descriptor( 44 | name='GymMembership', 45 | full_name='POGOProtos.Data.Gym.GymMembership', 46 | filename=None, 47 | file=DESCRIPTOR, 48 | containing_type=None, 49 | fields=[ 50 | _descriptor.FieldDescriptor( 51 | name='pokemon_data', full_name='POGOProtos.Data.Gym.GymMembership.pokemon_data', index=0, 52 | number=1, type=11, cpp_type=10, label=1, 53 | has_default_value=False, default_value=None, 54 | message_type=None, enum_type=None, containing_type=None, 55 | is_extension=False, extension_scope=None, 56 | options=None), 57 | _descriptor.FieldDescriptor( 58 | name='trainer_public_profile', full_name='POGOProtos.Data.Gym.GymMembership.trainer_public_profile', index=1, 59 | number=2, type=11, cpp_type=10, label=1, 60 | has_default_value=False, default_value=None, 61 | message_type=None, enum_type=None, containing_type=None, 62 | is_extension=False, extension_scope=None, 63 | options=None), 64 | ], 65 | extensions=[ 66 | ], 67 | nested_types=[], 68 | enum_types=[ 69 | ], 70 | options=None, 71 | is_extendable=False, 72 | syntax='proto3', 73 | extension_ranges=[], 74 | oneofs=[ 75 | ], 76 | serialized_start=131, 77 | serialized_end=275, 78 | ) 79 | 80 | 81 | _GYMSTATE = _descriptor.Descriptor( 82 | name='GymState', 83 | full_name='POGOProtos.Data.Gym.GymState', 84 | filename=None, 85 | file=DESCRIPTOR, 86 | containing_type=None, 87 | fields=[ 88 | _descriptor.FieldDescriptor( 89 | name='fort_data', full_name='POGOProtos.Data.Gym.GymState.fort_data', index=0, 90 | number=1, type=11, cpp_type=10, label=1, 91 | has_default_value=False, default_value=None, 92 | message_type=None, enum_type=None, containing_type=None, 93 | is_extension=False, extension_scope=None, 94 | options=None), 95 | _descriptor.FieldDescriptor( 96 | name='memberships', full_name='POGOProtos.Data.Gym.GymState.memberships', index=1, 97 | number=2, type=11, cpp_type=10, label=3, 98 | has_default_value=False, default_value=[], 99 | message_type=None, enum_type=None, containing_type=None, 100 | is_extension=False, extension_scope=None, 101 | options=None), 102 | ], 103 | extensions=[ 104 | ], 105 | nested_types=[], 106 | enum_types=[ 107 | ], 108 | options=None, 109 | is_extendable=False, 110 | syntax='proto3', 111 | extension_ranges=[], 112 | oneofs=[ 113 | ], 114 | serialized_start=277, 115 | serialized_end=394, 116 | ) 117 | 118 | _GYMMEMBERSHIP.fields_by_name['pokemon_data'].message_type = POGOProtos_dot_Data__pb2._POKEMONDATA 119 | _GYMMEMBERSHIP.fields_by_name['trainer_public_profile'].message_type = POGOProtos_dot_Data_dot_Player__pb2._PLAYERPUBLICPROFILE 120 | _GYMSTATE.fields_by_name['fort_data'].message_type = POGOProtos_dot_Map_dot_Fort__pb2._FORTDATA 121 | _GYMSTATE.fields_by_name['memberships'].message_type = _GYMMEMBERSHIP 122 | DESCRIPTOR.message_types_by_name['GymMembership'] = _GYMMEMBERSHIP 123 | DESCRIPTOR.message_types_by_name['GymState'] = _GYMSTATE 124 | 125 | GymMembership = _reflection.GeneratedProtocolMessageType('GymMembership', (_message.Message,), dict( 126 | DESCRIPTOR = _GYMMEMBERSHIP, 127 | __module__ = 'POGOProtos.Data.Gym_pb2' 128 | # @@protoc_insertion_point(class_scope:POGOProtos.Data.Gym.GymMembership) 129 | )) 130 | _sym_db.RegisterMessage(GymMembership) 131 | 132 | GymState = _reflection.GeneratedProtocolMessageType('GymState', (_message.Message,), dict( 133 | DESCRIPTOR = _GYMSTATE, 134 | __module__ = 'POGOProtos.Data.Gym_pb2' 135 | # @@protoc_insertion_point(class_scope:POGOProtos.Data.Gym.GymState) 136 | )) 137 | _sym_db.RegisterMessage(GymState) 138 | 139 | 140 | # @@protoc_insertion_point(module_scope) 141 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos/Data/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TBTerra/spawnScan/06e921ea7f692234ee5c379938a15f6b94f17cfe/pgoapi/protos/POGOProtos/Data/__init__.py -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos/Inventory/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TBTerra/spawnScan/06e921ea7f692234ee5c379938a15f6b94f17cfe/pgoapi/protos/POGOProtos/Inventory/__init__.py -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos/Map/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TBTerra/spawnScan/06e921ea7f692234ee5c379938a15f6b94f17cfe/pgoapi/protos/POGOProtos/Map/__init__.py -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos/Networking/Requests/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TBTerra/spawnScan/06e921ea7f692234ee5c379938a15f6b94f17cfe/pgoapi/protos/POGOProtos/Networking/Requests/__init__.py -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos/Networking/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TBTerra/spawnScan/06e921ea7f692234ee5c379938a15f6b94f17cfe/pgoapi/protos/POGOProtos/Networking/__init__.py -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos/Settings/Master/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TBTerra/spawnScan/06e921ea7f692234ee5c379938a15f6b94f17cfe/pgoapi/protos/POGOProtos/Settings/Master/__init__.py -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos/Settings/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TBTerra/spawnScan/06e921ea7f692234ee5c379938a15f6b94f17cfe/pgoapi/protos/POGOProtos/Settings/__init__.py -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos/__init__.py: -------------------------------------------------------------------------------- 1 | 'Generated'; import os; import sys; sys.path.append(os.path.dirname(os.path.realpath(__file__))) -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/AssetDigestEntry.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data; 3 | 4 | message AssetDigestEntry { 5 | string asset_id = 1; 6 | string bundle_name = 2; 7 | int64 version = 3; 8 | fixed32 checksum = 4; 9 | int32 size = 5; 10 | bytes key = 6; 11 | } 12 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/Battle/BattleAction.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data.Battle; 3 | 4 | import "POGOProtos/Data/Battle/BattleResults.proto"; 5 | import "POGOProtos/Data/Battle/BattleActionType.proto"; 6 | import "POGOProtos/Data/Battle/BattleParticipant.proto"; 7 | 8 | message BattleAction { 9 | .POGOProtos.Data.Battle.BattleActionType Type = 1; 10 | int64 action_start_ms = 2; 11 | int32 duration_ms = 3; 12 | int32 energy_delta = 5; 13 | int32 attacker_index = 6; 14 | int32 target_index = 7; 15 | fixed64 active_pokemon_id = 8; 16 | .POGOProtos.Data.Battle.BattleParticipant player_joined = 9; 17 | .POGOProtos.Data.Battle.BattleResults battle_results = 10; 18 | int64 damage_windows_start_timestamp_mss = 11; 19 | int64 damage_windows_end_timestamp_mss = 12; 20 | .POGOProtos.Data.Battle.BattleParticipant player_left = 13; 21 | fixed64 target_pokemon_id = 14; 22 | } 23 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/Battle/BattleActionType.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data.Battle; 3 | 4 | enum BattleActionType { 5 | ACTION_UNSET = 0; 6 | ACTION_ATTACK = 1; 7 | ACTION_DODGE = 2; 8 | ACTION_SPECIAL_ATTACK = 3; 9 | ACTION_SWAP_POKEMON = 4; 10 | ACTION_FAINT = 5; 11 | ACTION_PLAYER_JOIN = 6; 12 | ACTION_PLAYER_QUIT = 7; 13 | ACTION_VICTORY = 8; 14 | ACTION_DEFEAT = 9; 15 | ACTION_TIMED_OUT = 10; 16 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/Battle/BattleLog.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data.Battle; 3 | 4 | import "POGOProtos/Data/Battle/BattleState.proto"; 5 | import "POGOProtos/Data/Battle/BattleType.proto"; 6 | import "POGOProtos/Data/Battle/BattleAction.proto"; 7 | 8 | message BattleLog { 9 | .POGOProtos.Data.Battle.BattleState state = 1; 10 | .POGOProtos.Data.Battle.BattleType battle_type = 2; 11 | int64 server_ms = 3; 12 | repeated .POGOProtos.Data.Battle.BattleAction battle_actions = 4; 13 | int64 battle_start_timestamp_ms = 5; 14 | int64 battle_end_timestamp_ms = 6; 15 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/Battle/BattleParticipant.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data.Battle; 3 | 4 | import "POGOProtos/Data/Battle/BattlePokemonInfo.proto"; 5 | import "POGOProtos/Data/Player/PlayerPublicProfile.proto"; 6 | 7 | message BattleParticipant { 8 | .POGOProtos.Data.Battle.BattlePokemonInfo active_pokemon = 1; 9 | .POGOProtos.Data.Player.PlayerPublicProfile trainer_public_profile = 2; 10 | repeated .POGOProtos.Data.Battle.BattlePokemonInfo reverse_pokemon = 3; 11 | repeated .POGOProtos.Data.Battle.BattlePokemonInfo defeated_pokemon = 4; 12 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/Battle/BattlePokemonInfo.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data.Battle; 3 | 4 | import "POGOProtos/Data/PokemonData.proto"; 5 | 6 | message BattlePokemonInfo { 7 | .POGOProtos.Data.PokemonData pokemon_data = 1; 8 | int32 current_health = 2; 9 | int32 current_energy = 3; 10 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/Battle/BattleResults.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data.Battle; 3 | 4 | import "POGOProtos/Data/Gym/GymState.proto"; 5 | import "POGOProtos/Data/Battle/BattleParticipant.proto"; 6 | 7 | message BattleResults { 8 | .POGOProtos.Data.Gym.GymState gym_state = 1; 9 | repeated .POGOProtos.Data.Battle.BattleParticipant attackers = 2; 10 | repeated int32 player_experience_awarded = 3; 11 | int64 next_defender_pokemon_id = 4; 12 | int32 gym_points_delta = 5; 13 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/Battle/BattleState.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data.Battle; 3 | 4 | enum BattleState { 5 | STATE_UNSET = 0; 6 | ACTIVE = 1; 7 | VICTORY = 2; 8 | DEFEATED = 3; 9 | TIMED_OUT = 4; 10 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/Battle/BattleType.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data.Battle; 3 | 4 | enum BattleType { 5 | BATTLE_TYPE_UNSET = 0; 6 | NORMAL = 1; 7 | TRAINING = 2; 8 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/Capture/CaptureAward.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data.Capture; 3 | 4 | import "POGOProtos/Enums/ActivityType.proto"; 5 | 6 | message CaptureAward { 7 | repeated .POGOProtos.Enums.ActivityType activity_type = 1; 8 | repeated int32 xp = 2; 9 | repeated int32 candy = 3; 10 | repeated int32 stardust = 4; 11 | } 12 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/Capture/CaptureProbability.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data.Capture; 3 | 4 | import "POGOProtos/Inventory/Item/ItemId.proto"; 5 | 6 | message CaptureProbability { 7 | repeated .POGOProtos.Inventory.Item.ItemId pokeball_type = 1 [packed=true]; 8 | repeated float capture_probability = 2 [packed=true]; 9 | double reticle_difficulty_scale = 12; 10 | } 11 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/DownloadUrlEntry.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data; 3 | 4 | message DownloadUrlEntry { 5 | string asset_id = 1; 6 | string url = 2; 7 | int32 size = 3; 8 | fixed32 checksum = 4; 9 | } 10 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/Gym/GymMembership.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data.Gym; 3 | 4 | import "POGOProtos/Data/PokemonData.proto"; 5 | import "POGOProtos/Data/Player/PlayerPublicProfile.proto"; 6 | 7 | message GymMembership { 8 | .POGOProtos.Data.PokemonData pokemon_data = 1; 9 | .POGOProtos.Data.Player.PlayerPublicProfile trainer_public_profile = 2; 10 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/Gym/GymState.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data.Gym; 3 | 4 | import "POGOProtos/Map/Fort/FortData.proto"; 5 | import "POGOProtos/Data/Gym/GymMembership.proto"; 6 | 7 | message GymState { 8 | .POGOProtos.Map.Fort.FortData fort_data = 1; 9 | repeated .POGOProtos.Data.Gym.GymMembership memberships = 2; 10 | } 11 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/Logs/ActionLogEntry.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data.Logs; 3 | 4 | import "POGOProtos/Data/Logs/CatchPokemonLogEntry.proto"; 5 | import "POGOProtos/Data/Logs/FortSearchLogEntry.proto"; 6 | 7 | message ActionLogEntry { 8 | int64 timestamp_ms = 1; 9 | bool sfida = 2; 10 | 11 | oneof Action { 12 | .POGOProtos.Data.Logs.CatchPokemonLogEntry catch_pokemon = 3; 13 | .POGOProtos.Data.Logs.FortSearchLogEntry fort_search = 4; 14 | } 15 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/Logs/CatchPokemonLogEntry.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data.Logs; 3 | 4 | import "POGOProtos/Enums/PokemonId.proto"; 5 | 6 | message CatchPokemonLogEntry { 7 | .POGOProtos.Data.Logs.CatchPokemonLogEntry.Result result = 1; 8 | .POGOProtos.Enums.PokemonId pokemon_id = 2; 9 | int32 combat_points = 3; 10 | uint64 pokemon_data_id = 4; 11 | 12 | enum Result { 13 | UNSET = 0; 14 | POKEMON_CAPTURED = 1; 15 | POKEMON_FLED = 2; 16 | } 17 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/Logs/FortSearchLogEntry.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data.Logs; 3 | 4 | import "POGOProtos/Inventory/Item/ItemData.proto"; 5 | 6 | message FortSearchLogEntry { 7 | .POGOProtos.Data.Logs.FortSearchLogEntry.Result result = 1; 8 | string fort_id = 2; 9 | repeated .POGOProtos.Inventory.Item.ItemData items = 3; 10 | int32 eggs = 4; 11 | 12 | enum Result { 13 | UNSET = 0; 14 | SUCCESS = 1; 15 | } 16 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/Player/ContactSettings.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data.Player; 3 | 4 | message ContactSettings { 5 | bool send_marketing_emails = 1; 6 | bool send_push_notifications = 2; 7 | } 8 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/Player/Currency.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data.Player; 3 | 4 | message Currency { 5 | string name = 1; 6 | int32 amount = 2; 7 | } 8 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/Player/DailyBonus.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data.Player; 3 | 4 | message DailyBonus { 5 | int64 next_collected_timestamp_ms = 1; 6 | int64 next_defender_bonus_collect_timestamp_ms = 2; 7 | } 8 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/Player/EquippedBadge.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data.Player; 3 | 4 | import "POGOProtos/Enums/BadgeType.proto"; 5 | 6 | message EquippedBadge { 7 | .POGOProtos.Enums.BadgeType badge_type = 1; 8 | int32 level = 2; 9 | int64 next_equip_change_allowed_timestamp_ms = 3; 10 | } 11 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/Player/PlayerAvatar.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data.Player; 3 | 4 | import "POGOProtos/Enums/Gender.proto"; 5 | 6 | message PlayerAvatar { 7 | int32 skin = 2; 8 | int32 hair = 3; 9 | int32 shirt = 4; 10 | int32 pants = 5; 11 | int32 hat = 6; 12 | int32 shoes = 7; 13 | .POGOProtos.Enums.Gender gender = 8; 14 | int32 eyes = 9; 15 | int32 backpack = 10; 16 | } 17 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/Player/PlayerCamera.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data.Player; 3 | 4 | message PlayerCamera { 5 | bool is_default_camera = 1; 6 | } 7 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/Player/PlayerCurrency.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data.Player; 3 | 4 | message PlayerCurrency { 5 | int32 gems = 1; 6 | } 7 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/Player/PlayerPublicProfile.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data.Player; 3 | 4 | import "POGOProtos/Data/Player/PlayerAvatar.proto"; 5 | 6 | message PlayerPublicProfile { 7 | string name = 1; 8 | int32 level = 2; 9 | .POGOProtos.Data.Player.PlayerAvatar avatar = 3; 10 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/Player/PlayerStats.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data.Player; 3 | 4 | message PlayerStats { 5 | int32 level = 1; 6 | int64 experience = 2; 7 | int64 prev_level_xp = 3; 8 | int64 next_level_xp = 4; 9 | float km_walked = 5; 10 | int32 pokemons_encountered = 6; 11 | int32 unique_pokedex_entries = 7; 12 | int32 pokemons_captured = 8; 13 | int32 evolutions = 9; 14 | int32 poke_stop_visits = 10; 15 | int32 pokeballs_thrown = 11; 16 | int32 eggs_hatched = 12; 17 | int32 big_magikarp_caught = 13; 18 | int32 battle_attack_won = 14; 19 | int32 battle_attack_total = 15; 20 | int32 battle_defended_won = 16; 21 | int32 battle_training_won = 17; 22 | int32 battle_training_total = 18; 23 | int32 prestige_raised_total = 19; 24 | int32 prestige_dropped_total = 20; 25 | int32 pokemon_deployed = 21; 26 | bytes pokemon_caught_by_type = 22; // TODO: repeated PokemonType ?? 27 | int32 small_rattata_caught = 23; 28 | } 29 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/PlayerBadge.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data; 3 | 4 | import "POGOProtos/Enums/BadgeType.proto"; 5 | 6 | message PlayerBadge { 7 | .POGOProtos.Enums.BadgeType badge_type = 1; 8 | int32 rank = 2; 9 | int32 start_value = 3; 10 | int32 end_value = 4; 11 | double current_value = 5; 12 | } 13 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/PlayerData.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data; 3 | 4 | import "POGOProtos/Enums/TutorialState.proto"; 5 | import "POGOProtos/Data/Player/PlayerAvatar.proto"; 6 | import "POGOProtos/Data/Player/DailyBonus.proto"; 7 | import "POGOProtos/Data/Player/EquippedBadge.proto"; 8 | import "POGOProtos/Data/Player/ContactSettings.proto"; 9 | import "POGOProtos/Data/Player/Currency.proto"; 10 | import "POGOProtos/Enums/TeamColor.proto"; 11 | 12 | message PlayerData { 13 | int64 creation_timestamp_ms = 1; 14 | string username = 2; 15 | .POGOProtos.Enums.TeamColor team = 5; 16 | repeated .POGOProtos.Enums.TutorialState tutorial_state = 7 [packed=true]; 17 | .POGOProtos.Data.Player.PlayerAvatar avatar = 8; 18 | int32 max_pokemon_storage = 9; 19 | int32 max_item_storage = 10; 20 | .POGOProtos.Data.Player.DailyBonus daily_bonus = 11; 21 | .POGOProtos.Data.Player.EquippedBadge equipped_badge = 12; 22 | .POGOProtos.Data.Player.ContactSettings contact_settings = 13; 23 | repeated .POGOProtos.Data.Player.Currency currencies = 14; 24 | } 25 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/PokedexEntry.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data; 3 | 4 | import "POGOProtos/Enums/PokemonId.proto"; 5 | 6 | message PokedexEntry { 7 | .POGOProtos.Enums.PokemonId pokemon_id = 1; 8 | int32 times_encountered = 2; 9 | int32 times_captured = 3; 10 | int32 evolution_stone_pieces = 4; 11 | int32 evolution_stones = 5; 12 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Data/PokemonData.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Data; 3 | 4 | import "POGOProtos/Enums/PokemonId.proto"; 5 | import "POGOProtos/Enums/PokemonMove.proto"; 6 | import "POGOProtos/Inventory/Item/ItemId.proto"; 7 | 8 | message PokemonData { 9 | fixed64 id = 1; 10 | .POGOProtos.Enums.PokemonId pokemon_id = 2; 11 | int32 cp = 3; 12 | int32 stamina = 4; 13 | int32 stamina_max = 5; 14 | .POGOProtos.Enums.PokemonMove move_1 = 6; 15 | .POGOProtos.Enums.PokemonMove move_2 = 7; 16 | string deployed_fort_id = 8; 17 | string owner_name = 9; 18 | bool is_egg = 10; 19 | double egg_km_walked_target = 11; 20 | double egg_km_walked_start = 12; 21 | int32 origin = 14; 22 | float height_m = 15; 23 | float weight_kg = 16; 24 | int32 individual_attack = 17; 25 | int32 individual_defense = 18; 26 | int32 individual_stamina = 19; 27 | float cp_multiplier = 20; 28 | .POGOProtos.Inventory.Item.ItemId pokeball = 21; 29 | uint64 captured_cell_id = 22; 30 | int32 battles_attacked = 23; 31 | int32 battles_defended = 24; 32 | string egg_incubator_id = 25; 33 | uint64 creation_time_ms = 26; 34 | int32 num_upgrades = 27; 35 | float additional_cp_multiplier = 28; 36 | int32 favorite = 29; 37 | string nickname = 30; 38 | int32 from_fort = 31; 39 | } 40 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Enums/ActivityType.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Enums; 3 | 4 | enum ActivityType { 5 | ACTIVITY_UNKNOWN = 0; 6 | ACTIVITY_CATCH_POKEMON = 1; 7 | ACTIVITY_CATCH_LEGEND_POKEMON = 2; 8 | ACTIVITY_FLEE_POKEMON = 3; 9 | ACTIVITY_DEFEAT_FORT = 4; 10 | ACTIVITY_EVOLVE_POKEMON = 5; 11 | ACTIVITY_HATCH_EGG = 6; 12 | ACTIVITY_WALK_KM = 7; 13 | ACTIVITY_POKEDEX_ENTRY_NEW = 8; 14 | ACTIVITY_CATCH_FIRST_THROW = 9; 15 | ACTIVITY_CATCH_NICE_THROW = 10; 16 | ACTIVITY_CATCH_GREAT_THROW = 11; 17 | ACTIVITY_CATCH_EXCELLENT_THROW = 12; 18 | ACTIVITY_CATCH_CURVEBALL = 13; 19 | ACTIVITY_CATCH_FIRST_CATCH_OF_DAY = 14; 20 | ACTIVITY_CATCH_MILESTONE = 15; 21 | ACTIVITY_TRAIN_POKEMON = 16; 22 | ACTIVITY_SEARCH_FORT = 17; 23 | ACTIVITY_RELEASE_POKEMON = 18; 24 | ACTIVITY_HATCH_EGG_SMALL_BONUS = 19; 25 | ACTIVITY_HATCH_EGG_MEDIUM_BONUS = 20; 26 | ACTIVITY_HATCH_EGG_LARGE_BONUS = 21; 27 | ACTIVITY_DEFEAT_GYM_DEFENDER = 22; 28 | ACTIVITY_DEFEAT_GYM_LEADER = 23; 29 | } 30 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Enums/BadgeType.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Enums; 3 | 4 | enum BadgeType { 5 | BADGE_UNSET = 0; 6 | BADGE_TRAVEL_KM = 1; 7 | BADGE_POKEDEX_ENTRIES = 2; 8 | BADGE_CAPTURE_TOTAL = 3; 9 | BADGE_DEFEATED_FORT = 4; 10 | BADGE_EVOLVED_TOTAL = 5; 11 | BADGE_HATCHED_TOTAL = 6; 12 | BADGE_ENCOUNTERED_TOTAL = 7; 13 | BADGE_POKESTOPS_VISITED = 8; 14 | BADGE_UNIQUE_POKESTOPS = 9; 15 | BADGE_POKEBALL_THROWN = 10; 16 | BADGE_BIG_MAGIKARP = 11; 17 | BADGE_DEPLOYED_TOTAL = 12; 18 | BADGE_BATTLE_ATTACK_WON = 13; 19 | BADGE_BATTLE_TRAINING_WON = 14; 20 | BADGE_BATTLE_DEFEND_WON = 15; 21 | BADGE_PRESTIGE_RAISED = 16; 22 | BADGE_PRESTIGE_DROPPED = 17; 23 | BADGE_TYPE_NORMAL = 18; 24 | BADGE_TYPE_FIGHTING = 19; 25 | BADGE_TYPE_FLYING = 20; 26 | BADGE_TYPE_POISON = 21; 27 | BADGE_TYPE_GROUND = 22; 28 | BADGE_TYPE_ROCK = 23; 29 | BADGE_TYPE_BUG = 24; 30 | BADGE_TYPE_GHOST = 25; 31 | BADGE_TYPE_STEEL = 26; 32 | BADGE_TYPE_FIRE = 27; 33 | BADGE_TYPE_WATER = 28; 34 | BADGE_TYPE_GRASS = 29; 35 | BADGE_TYPE_ELECTRIC = 30; 36 | BADGE_TYPE_PSYCHIC = 31; 37 | BADGE_TYPE_ICE = 32; 38 | BADGE_TYPE_DRAGON = 33; 39 | BADGE_TYPE_DARK = 34; 40 | BADGE_TYPE_FAIRY = 35; 41 | BADGE_SMALL_RATTATA = 36; 42 | BADGE_PIKACHU = 37; 43 | } 44 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Enums/CameraInterpolation.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Enums; 3 | 4 | enum CameraInterpolation { 5 | CAM_INTERP_CUT = 0; 6 | CAM_INTERP_LINEAR = 1; 7 | CAM_INTERP_SMOOTH = 2; 8 | CAM_INTERP_SMOOTH_ROT_LINEAR_MOVE = 3; 9 | CAM_INTERP_DEPENDS = 4; 10 | } 11 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Enums/CameraTarget.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Enums; 3 | 4 | enum CameraTarget { 5 | CAM_TARGET_ATTACKER = 0; 6 | CAM_TARGET_ATTACKER_EDGE = 1; 7 | CAM_TARGET_ATTACKER_GROUND = 2; 8 | CAM_TARGET_DEFENDER = 3; 9 | CAM_TARGET_DEFENDER_EDGE = 4; 10 | CAM_TARGET_DEFENDER_GROUND = 5; 11 | CAM_TARGET_ATTACKER_DEFENDER = 6; 12 | CAM_TARGET_ATTACKER_DEFENDER_EDGE = 7; 13 | CAM_TARGET_DEFENDER_ATTACKER = 8; 14 | CAM_TARGET_DEFENDER_ATTACKER_EDGE = 9; 15 | CAM_TARGET_ATTACKER_DEFENDER_MIRROR = 11; 16 | CAM_TARGET_SHOULDER_ATTACKER_DEFENDER = 12; 17 | CAM_TARGET_SHOULDER_ATTACKER_DEFENDER_MIRROR = 13; 18 | CAM_TARGET_ATTACKER_DEFENDER_WORLD = 14; 19 | } 20 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Enums/Gender.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Enums; 3 | 4 | enum Gender { 5 | MALE = 0; 6 | FEMALE = 1; 7 | } 8 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Enums/IapItemCategory.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Enums; 3 | 4 | enum HoloIapItemCategory { 5 | IAP_CATEGORY_NONE = 0; 6 | IAP_CATEGORY_BUNDLE = 1; 7 | IAP_CATEGORY_ITEMS = 2; 8 | IAP_CATEGORY_UPGRADES = 3; 9 | IAP_CATEGORY_POKECOINS = 4; 10 | } 11 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Enums/ItemCategory.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Enums; 3 | 4 | enum ItemCategory { 5 | ITEM_CATEGORY_NONE = 0; 6 | ITEM_CATEGORY_POKEBALL = 1; 7 | ITEM_CATEGORY_FOOD = 2; 8 | ITEM_CATEGORY_MEDICINE = 3; 9 | ITEM_CATEGORY_BOOST = 4; 10 | ITEM_CATEGORY_UTILITES = 5; 11 | ITEM_CATEGORY_CAMERA = 6; 12 | ITEM_CATEGORY_DISK = 7; 13 | ITEM_CATEGORY_INCUBATOR = 8; 14 | ITEM_CATEGORY_INCENSE = 9; 15 | ITEM_CATEGORY_XP_BOOST = 10; 16 | ITEM_CATEGORY_INVENTORY_UPGRADE = 11; 17 | } 18 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Enums/ItemEffect.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Enums; 3 | 4 | enum ItemEffect { 5 | ITEM_EFFECT_NONE = 0; 6 | ITEM_EFFECT_CAP_NO_FLEE = 1000; 7 | ITEM_EFFECT_CAP_NO_MOVEMENT = 1002; 8 | ITEM_EFFECT_CAP_NO_THREAT = 1003; 9 | ITEM_EFFECT_CAP_TARGET_MAX = 1004; 10 | ITEM_EFFECT_CAP_TARGET_SLOW = 1005; 11 | ITEM_EFFECT_CAP_CHANCE_NIGHT = 1006; 12 | ITEM_EFFECT_CAP_CHANCE_TRAINER = 1007; 13 | ITEM_EFFECT_CAP_CHANCE_FIRST_THROW = 1008; 14 | ITEM_EFFECT_CAP_CHANCE_LEGEND = 1009; 15 | ITEM_EFFECT_CAP_CHANCE_HEAVY = 1010; 16 | ITEM_EFFECT_CAP_CHANCE_REPEAT = 1011; 17 | ITEM_EFFECT_CAP_CHANCE_MULTI_THROW = 1012; 18 | ITEM_EFFECT_CAP_CHANCE_ALWAYS = 1013; 19 | ITEM_EFFECT_CAP_CHANCE_SINGLE_THROW = 1014; 20 | } 21 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Enums/Platform.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Enums; 3 | 4 | enum Platform { 5 | UNSET = 0; 6 | IOS = 1; 7 | ANDROID = 2; 8 | OSX = 3; 9 | WINDOWS = 4; 10 | } 11 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Enums/PokemonFamilyId.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Enums; 3 | 4 | enum PokemonFamilyId { 5 | FAMILY_UNSET = 0; 6 | FAMILY_BULBASAUR = 1; 7 | FAMILY_CHARMANDER = 4; 8 | FAMILY_SQUIRTLE = 7; 9 | FAMILY_CATERPIE = 10; 10 | FAMILY_WEEDLE = 13; 11 | FAMILY_PIDGEY = 16; 12 | FAMILY_RATTATA = 19; 13 | FAMILY_SPEAROW = 21; 14 | FAMILY_EKANS = 23; 15 | FAMILY_PIKACHU = 25; 16 | FAMILY_SANDSHREW = 27; 17 | FAMILY_NIDORAN_FEMALE = 29; 18 | FAMILY_NIDORAN_MALE = 32; 19 | FAMILY_CLEFAIRY = 35; 20 | FAMILY_VULPIX = 37; 21 | FAMILY_JIGGLYPUFF = 39; 22 | FAMILY_ZUBAT = 41; 23 | FAMILY_ODDISH = 43; 24 | FAMILY_PARAS = 46; 25 | FAMILY_VENONAT = 48; 26 | FAMILY_DIGLETT = 50; 27 | FAMILY_MEOWTH = 52; 28 | FAMILY_PSYDUCK = 54; 29 | FAMILY_MANKEY = 56; 30 | FAMILY_GROWLITHE = 58; 31 | FAMILY_POLIWAG = 60; 32 | FAMILY_ABRA = 63; 33 | FAMILY_MACHOP = 66; 34 | FAMILY_BELLSPROUT = 69; 35 | FAMILY_TENTACOOL = 72; 36 | FAMILY_GEODUDE = 74; 37 | FAMILY_PONYTA = 77; 38 | FAMILY_SLOWPOKE = 79; 39 | FAMILY_MAGNEMITE = 81; 40 | FAMILY_FARFETCHD = 83; 41 | FAMILY_DODUO = 84; 42 | FAMILY_SEEL = 86; 43 | FAMILY_GRIMER = 88; 44 | FAMILY_SHELLDER = 90; 45 | FAMILY_GASTLY = 92; 46 | FAMILY_ONIX = 95; 47 | FAMILY_DROWZEE = 96; 48 | FAMILY_HYPNO = 97; 49 | FAMILY_KRABBY = 98; 50 | FAMILY_VOLTORB = 100; 51 | FAMILY_EXEGGCUTE = 102; 52 | FAMILY_CUBONE = 104; 53 | FAMILY_HITMONLEE = 106; 54 | FAMILY_HITMONCHAN = 107; 55 | FAMILY_LICKITUNG = 108; 56 | FAMILY_KOFFING = 109; 57 | FAMILY_RHYHORN = 111; 58 | FAMILY_CHANSEY = 113; 59 | FAMILY_TANGELA = 114; 60 | FAMILY_KANGASKHAN = 115; 61 | FAMILY_HORSEA = 116; 62 | FAMILY_GOLDEEN = 118; 63 | FAMILY_STARYU = 120; 64 | FAMILY_MR_MIME = 122; 65 | FAMILY_SCYTHER = 123; 66 | FAMILY_JYNX = 124; 67 | FAMILY_ELECTABUZZ = 125; 68 | FAMILY_MAGMAR = 126; 69 | FAMILY_PINSIR = 127; 70 | FAMILY_TAUROS = 128; 71 | FAMILY_MAGIKARP = 129; 72 | FAMILY_LAPRAS = 131; 73 | FAMILY_DITTO = 132; 74 | FAMILY_EEVEE = 133; 75 | FAMILY_PORYGON = 137; 76 | FAMILY_OMANYTE = 138; 77 | FAMILY_KABUTO = 140; 78 | FAMILY_AERODACTYL = 142; 79 | FAMILY_SNORLAX = 143; 80 | FAMILY_ARTICUNO = 144; 81 | FAMILY_ZAPDOS = 145; 82 | FAMILY_MOLTRES = 146; 83 | FAMILY_DRATINI = 147; 84 | FAMILY_MEWTWO = 150; 85 | FAMILY_MEW = 151; 86 | } 87 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Enums/PokemonId.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Enums; 3 | 4 | enum PokemonId { 5 | MISSINGNO = 0; 6 | BULBASAUR = 1; 7 | IVYSAUR = 2; 8 | VENUSAUR = 3; 9 | CHARMANDER = 4; 10 | CHARMELEON = 5; 11 | CHARIZARD = 6; 12 | SQUIRTLE = 7; 13 | WARTORTLE = 8; 14 | BLASTOISE = 9; 15 | CATERPIE = 10; 16 | METAPOD = 11; 17 | BUTTERFREE = 12; 18 | WEEDLE = 13; 19 | KAKUNA = 14; 20 | BEEDRILL = 15; 21 | PIDGEY = 16; 22 | PIDGEOTTO = 17; 23 | PIDGEOT = 18; 24 | RATTATA = 19; 25 | RATICATE = 20; 26 | SPEAROW = 21; 27 | FEAROW = 22; 28 | EKANS = 23; 29 | ARBOK = 24; 30 | PIKACHU = 25; 31 | RAICHU = 26; 32 | SANDSHREW = 27; 33 | SANDSLASH = 28; 34 | NIDORAN_FEMALE = 29; 35 | NIDORINA = 30; 36 | NIDOQUEEN = 31; 37 | NIDORAN_MALE = 32; 38 | NIDORINO = 33; 39 | NIDOKING = 34; 40 | CLEFAIRY = 35; 41 | CLEFABLE = 36; 42 | VULPIX = 37; 43 | NINETALES = 38; 44 | JIGGLYPUFF = 39; 45 | WIGGLYTUFF = 40; 46 | ZUBAT = 41; 47 | GOLBAT = 42; 48 | ODDISH = 43; 49 | GLOOM = 44; 50 | VILEPLUME = 45; 51 | PARAS = 46; 52 | PARASECT = 47; 53 | VENONAT = 48; 54 | VENOMOTH = 49; 55 | DIGLETT = 50; 56 | DUGTRIO = 51; 57 | MEOWTH = 52; 58 | PERSIAN = 53; 59 | PSYDUCK = 54; 60 | GOLDUCK = 55; 61 | MANKEY = 56; 62 | PRIMEAPE = 57; 63 | GROWLITHE = 58; 64 | ARCANINE = 59; 65 | POLIWAG = 60; 66 | POLIWHIRL = 61; 67 | POLIWRATH = 62; 68 | ABRA = 63; 69 | KADABRA = 64; 70 | ALAKAZAM = 65; 71 | MACHOP = 66; 72 | MACHOKE = 67; 73 | MACHAMP = 68; 74 | BELLSPROUT = 69; 75 | WEEPINBELL = 70; 76 | VICTREEBEL = 71; 77 | TENTACOOL = 72; 78 | TENTACRUEL = 73; 79 | GEODUDE = 74; 80 | GRAVELER = 75; 81 | GOLEM = 76; 82 | PONYTA = 77; 83 | RAPIDASH = 78; 84 | SLOWPOKE = 79; 85 | SLOWBRO = 80; 86 | MAGNEMITE = 81; 87 | MAGNETON = 82; 88 | FARFETCHD = 83; 89 | DODUO = 84; 90 | DODRIO = 85; 91 | SEEL = 86; 92 | DEWGONG = 87; 93 | GRIMER = 88; 94 | MUK = 89; 95 | SHELLDER = 90; 96 | CLOYSTER = 91; 97 | GASTLY = 92; 98 | HAUNTER = 93; 99 | GENGAR = 94; 100 | ONIX = 95; 101 | DROWZEE = 96; 102 | HYPNO = 97; 103 | KRABBY = 98; 104 | KINGLER = 99; 105 | VOLTORB = 100; 106 | ELECTRODE = 101; 107 | EXEGGCUTE = 102; 108 | EXEGGUTOR = 103; 109 | CUBONE = 104; 110 | MAROWAK = 105; 111 | HITMONLEE = 106; 112 | HITMONCHAN = 107; 113 | LICKITUNG = 108; 114 | KOFFING = 109; 115 | WEEZING = 110; 116 | RHYHORN = 111; 117 | RHYDON = 112; 118 | CHANSEY = 113; 119 | TANGELA = 114; 120 | KANGASKHAN = 115; 121 | HORSEA = 116; 122 | SEADRA = 117; 123 | GOLDEEN = 118; 124 | SEAKING = 119; 125 | STARYU = 120; 126 | STARMIE = 121; 127 | MR_MIME = 122; 128 | SCYTHER = 123; 129 | JYNX = 124; 130 | ELECTABUZZ = 125; 131 | MAGMAR = 126; 132 | PINSIR = 127; 133 | TAUROS = 128; 134 | MAGIKARP = 129; 135 | GYARADOS = 130; 136 | LAPRAS = 131; 137 | DITTO = 132; 138 | EEVEE = 133; 139 | VAPOREON = 134; 140 | JOLTEON = 135; 141 | FLAREON = 136; 142 | PORYGON = 137; 143 | OMANYTE = 138; 144 | OMASTAR = 139; 145 | KABUTO = 140; 146 | KABUTOPS = 141; 147 | AERODACTYL = 142; 148 | SNORLAX = 143; 149 | ARTICUNO = 144; 150 | ZAPDOS = 145; 151 | MOLTRES = 146; 152 | DRATINI = 147; 153 | DRAGONAIR = 148; 154 | DRAGONITE = 149; 155 | MEWTWO = 150; 156 | MEW = 151; 157 | } 158 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Enums/PokemonMove.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Enums; 3 | 4 | enum PokemonMove { 5 | MOVE_UNSET = 0; 6 | THUNDER_SHOCK = 1; 7 | QUICK_ATTACK = 2; 8 | SCRATCH = 3; 9 | EMBER = 4; 10 | VINE_WHIP = 5; 11 | TACKLE = 6; 12 | RAZOR_LEAF = 7; 13 | TAKE_DOWN = 8; 14 | WATER_GUN = 9; 15 | BITE = 10; 16 | POUND = 11; 17 | DOUBLE_SLAP = 12; 18 | WRAP = 13; 19 | HYPER_BEAM = 14; 20 | LICK = 15; 21 | DARK_PULSE = 16; 22 | SMOG = 17; 23 | SLUDGE = 18; 24 | METAL_CLAW = 19; 25 | VICE_GRIP = 20; 26 | FLAME_WHEEL = 21; 27 | MEGAHORN = 22; 28 | WING_ATTACK = 23; 29 | FLAMETHROWER = 24; 30 | SUCKER_PUNCH = 25; 31 | DIG = 26; 32 | LOW_KICK = 27; 33 | CROSS_CHOP = 28; 34 | PSYCHO_CUT = 29; 35 | PSYBEAM = 30; 36 | EARTHQUAKE = 31; 37 | STONE_EDGE = 32; 38 | ICE_PUNCH = 33; 39 | HEART_STAMP = 34; 40 | DISCHARGE = 35; 41 | FLASH_CANNON = 36; 42 | PECK = 37; 43 | DRILL_PECK = 38; 44 | ICE_BEAM = 39; 45 | BLIZZARD = 40; 46 | AIR_SLASH = 41; 47 | HEAT_WAVE = 42; 48 | TWINEEDLE = 43; 49 | POISON_JAB = 44; 50 | AERIAL_ACE = 45; 51 | DRILL_RUN = 46; 52 | PETAL_BLIZZARD = 47; 53 | MEGA_DRAIN = 48; 54 | BUG_BUZZ = 49; 55 | POISON_FANG = 50; 56 | NIGHT_SLASH = 51; 57 | SLASH = 52; 58 | BUBBLE_BEAM = 53; 59 | SUBMISSION = 54; 60 | KARATE_CHOP = 55; 61 | LOW_SWEEP = 56; 62 | AQUA_JET = 57; 63 | AQUA_TAIL = 58; 64 | SEED_BOMB = 59; 65 | PSYSHOCK = 60; 66 | ROCK_THROW = 61; 67 | ANCIENT_POWER = 62; 68 | ROCK_TOMB = 63; 69 | ROCK_SLIDE = 64; 70 | POWER_GEM = 65; 71 | SHADOW_SNEAK = 66; 72 | SHADOW_PUNCH = 67; 73 | SHADOW_CLAW = 68; 74 | OMINOUS_WIND = 69; 75 | SHADOW_BALL = 70; 76 | BULLET_PUNCH = 71; 77 | MAGNET_BOMB = 72; 78 | STEEL_WING = 73; 79 | IRON_HEAD = 74; 80 | PARABOLIC_CHARGE = 75; 81 | SPARK = 76; 82 | THUNDER_PUNCH = 77; 83 | THUNDER = 78; 84 | THUNDERBOLT = 79; 85 | TWISTER = 80; 86 | DRAGON_BREATH = 81; 87 | DRAGON_PULSE = 82; 88 | DRAGON_CLAW = 83; 89 | DISARMING_VOICE = 84; 90 | DRAINING_KISS = 85; 91 | DAZZLING_GLEAM = 86; 92 | MOONBLAST = 87; 93 | PLAY_ROUGH = 88; 94 | CROSS_POISON = 89; 95 | SLUDGE_BOMB = 90; 96 | SLUDGE_WAVE = 91; 97 | GUNK_SHOT = 92; 98 | MUD_SHOT = 93; 99 | BONE_CLUB = 94; 100 | BULLDOZE = 95; 101 | MUD_BOMB = 96; 102 | FURY_CUTTER = 97; 103 | BUG_BITE = 98; 104 | SIGNAL_BEAM = 99; 105 | X_SCISSOR = 100; 106 | FLAME_CHARGE = 101; 107 | FLAME_BURST = 102; 108 | FIRE_BLAST = 103; 109 | BRINE = 104; 110 | WATER_PULSE = 105; 111 | SCALD = 106; 112 | HYDRO_PUMP = 107; 113 | PSYCHIC = 108; 114 | PSYSTRIKE = 109; 115 | ICE_SHARD = 110; 116 | ICY_WIND = 111; 117 | FROST_BREATH = 112; 118 | ABSORB = 113; 119 | GIGA_DRAIN = 114; 120 | FIRE_PUNCH = 115; 121 | SOLAR_BEAM = 116; 122 | LEAF_BLADE = 117; 123 | POWER_WHIP = 118; 124 | SPLASH = 119; 125 | ACID = 120; 126 | AIR_CUTTER = 121; 127 | HURRICANE = 122; 128 | BRICK_BREAK = 123; 129 | CUT = 124; 130 | SWIFT = 125; 131 | HORN_ATTACK = 126; 132 | STOMP = 127; 133 | HEADBUTT = 128; 134 | HYPER_FANG = 129; 135 | SLAM = 130; 136 | BODY_SLAM = 131; 137 | REST = 132; 138 | STRUGGLE = 133; 139 | SCALD_BLASTOISE = 134; 140 | HYDRO_PUMP_BLASTOISE = 135; 141 | WRAP_GREEN = 136; 142 | WRAP_PINK = 137; 143 | FURY_CUTTER_FAST = 200; 144 | BUG_BITE_FAST = 201; 145 | BITE_FAST = 202; 146 | SUCKER_PUNCH_FAST = 203; 147 | DRAGON_BREATH_FAST = 204; 148 | THUNDER_SHOCK_FAST = 205; 149 | SPARK_FAST = 206; 150 | LOW_KICK_FAST = 207; 151 | KARATE_CHOP_FAST = 208; 152 | EMBER_FAST = 209; 153 | WING_ATTACK_FAST = 210; 154 | PECK_FAST = 211; 155 | LICK_FAST = 212; 156 | SHADOW_CLAW_FAST = 213; 157 | VINE_WHIP_FAST = 214; 158 | RAZOR_LEAF_FAST = 215; 159 | MUD_SHOT_FAST = 216; 160 | ICE_SHARD_FAST = 217; 161 | FROST_BREATH_FAST = 218; 162 | QUICK_ATTACK_FAST = 219; 163 | SCRATCH_FAST = 220; 164 | TACKLE_FAST = 221; 165 | POUND_FAST = 222; 166 | CUT_FAST = 223; 167 | POISON_JAB_FAST = 224; 168 | ACID_FAST = 225; 169 | PSYCHO_CUT_FAST = 226; 170 | ROCK_THROW_FAST = 227; 171 | METAL_CLAW_FAST = 228; 172 | BULLET_PUNCH_FAST = 229; 173 | WATER_GUN_FAST = 230; 174 | SPLASH_FAST = 231; 175 | WATER_GUN_FAST_BLASTOISE = 232; 176 | MUD_SLAP_FAST = 233; 177 | ZEN_HEADBUTT_FAST = 234; 178 | CONFUSION_FAST = 235; 179 | POISON_STING_FAST = 236; 180 | BUBBLE_FAST = 237; 181 | FEINT_ATTACK_FAST = 238; 182 | STEEL_WING_FAST = 239; 183 | FIRE_FANG_FAST = 240; 184 | ROCK_SMASH_FAST = 241; 185 | } 186 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Enums/PokemonMovementType.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Enums; 3 | 4 | enum PokemonMovementType { 5 | MOVEMENT_STATIC = 0; 6 | MOVEMENT_JUMP = 1; 7 | MOVEMENT_VERTICAL = 2; 8 | MOVEMENT_PSYCHIC = 3; 9 | MOVEMENT_ELECTRIC = 4; 10 | MOVEMENT_FLYING = 5; 11 | MOVEMENT_HOVERING = 6; 12 | } 13 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Enums/PokemonRarity.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Enums; 3 | 4 | enum PokemonRarity { 5 | NORMAL = 0; 6 | LEGENDARY = 1; 7 | MYTHIC = 2; 8 | } 9 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Enums/PokemonType.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Enums; 3 | 4 | enum PokemonType { 5 | POKEMON_TYPE_NONE = 0; 6 | POKEMON_TYPE_NORMAL = 1; 7 | POKEMON_TYPE_FIGHTING = 2; 8 | POKEMON_TYPE_FLYING = 3; 9 | POKEMON_TYPE_POISON = 4; 10 | POKEMON_TYPE_GROUND = 5; 11 | POKEMON_TYPE_ROCK = 6; 12 | POKEMON_TYPE_BUG = 7; 13 | POKEMON_TYPE_GHOST = 8; 14 | POKEMON_TYPE_STEEL = 9; 15 | POKEMON_TYPE_FIRE = 10; 16 | POKEMON_TYPE_WATER = 11; 17 | POKEMON_TYPE_GRASS = 12; 18 | POKEMON_TYPE_ELECTRIC = 13; 19 | POKEMON_TYPE_PSYCHIC = 14; 20 | POKEMON_TYPE_ICE = 15; 21 | POKEMON_TYPE_DRAGON = 16; 22 | POKEMON_TYPE_DARK = 17; 23 | POKEMON_TYPE_FAIRY = 18; 24 | } 25 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Enums/TeamColor.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Enums; 3 | 4 | enum TeamColor { 5 | NEUTRAL = 0; 6 | BLUE = 1; 7 | RED = 2; 8 | YELLOW = 3; 9 | } 10 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Enums/TutorialState.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Enums; 3 | 4 | enum TutorialState { 5 | LEGAL_SCREEN = 0; 6 | AVATAR_SELECTION = 1; 7 | ACCOUNT_CREATION = 2; 8 | POKEMON_CAPTURE = 3; 9 | NAME_SELECTION = 4; 10 | POKEMON_BERRY = 5; 11 | USE_ITEM = 6; 12 | FIRST_TIME_EXPERIENCE_COMPLETE = 7; 13 | POKESTOP_TUTORIAL = 8; 14 | GYM_TUTORIAL = 9; 15 | } 16 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Inventory/AppliedItem.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Inventory; 3 | 4 | import "POGOProtos/Inventory/Item/ItemId.proto"; 5 | import "POGOProtos/Inventory/Item/ItemType.proto"; 6 | 7 | message AppliedItem { 8 | .POGOProtos.Inventory.Item.ItemId item_id = 1; 9 | .POGOProtos.Inventory.Item.ItemType item_type = 2; 10 | int64 expire_ms = 3; 11 | int64 applied_ms = 4; 12 | } 13 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Inventory/AppliedItems.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Inventory; 3 | 4 | import "POGOProtos/Inventory/AppliedItem.proto"; 5 | 6 | message AppliedItems { 7 | repeated .POGOProtos.Inventory.AppliedItem item = 4; 8 | } 9 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Inventory/Candy.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Inventory; 3 | 4 | import "POGOProtos/Enums/PokemonFamilyId.proto"; 5 | 6 | message Candy { 7 | .POGOProtos.Enums.PokemonFamilyId family_id = 1; 8 | int32 candy = 2; 9 | } 10 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Inventory/EggIncubator.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Inventory; 3 | 4 | import "POGOProtos/Inventory/Item/ItemId.proto"; 5 | import "POGOProtos/Inventory/EggIncubatorType.proto"; 6 | 7 | message EggIncubator { 8 | string id = 1; 9 | .POGOProtos.Inventory.Item.ItemId item_id = 2; 10 | .POGOProtos.Inventory.EggIncubatorType incubator_type = 3; 11 | int32 uses_remaining = 4; 12 | uint64 pokemon_id = 5; // TODO: Check if is PokemonType 13 | double start_km_walked = 6; 14 | double target_km_walked = 7; 15 | } 16 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Inventory/EggIncubatorType.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Inventory; 3 | 4 | enum EggIncubatorType { 5 | INCUBATOR_UNSET = 0; 6 | INCUBATOR_DISTANCE = 1; 7 | } 8 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Inventory/EggIncubators.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Inventory; 3 | 4 | import "POGOProtos/Inventory/EggIncubator.proto"; 5 | 6 | message EggIncubators { 7 | repeated .POGOProtos.Inventory.EggIncubator egg_incubator = 1; 8 | } 9 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Inventory/InventoryDelta.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Inventory; 3 | 4 | import "POGOProtos/Inventory/InventoryItem.proto"; 5 | 6 | message InventoryDelta { 7 | int64 original_timestamp_ms = 1; 8 | int64 new_timestamp_ms = 2; 9 | repeated .POGOProtos.Inventory.InventoryItem inventory_items = 3; 10 | } 11 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Inventory/InventoryItem.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Inventory; 3 | 4 | import "POGOProtos/Inventory/InventoryItemData.proto"; 5 | 6 | message InventoryItem { 7 | int64 modified_timestamp_ms = 1; 8 | int64 deleted_item_key = 2; 9 | .POGOProtos.Inventory.InventoryItemData inventory_item_data = 3; 10 | } 11 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Inventory/InventoryItemData.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Inventory; 3 | 4 | import "POGOProtos/Inventory/Item/ItemData.proto"; 5 | import "POGOProtos/Inventory/AppliedItems.proto"; 6 | import "POGOProtos/Inventory/EggIncubators.proto"; 7 | import "POGOProtos/Inventory/Candy.proto"; 8 | import "POGOProtos/Inventory/InventoryUpgrades.proto"; 9 | import "POGOProtos/Data/PokemonData.proto"; 10 | import "POGOProtos/Data/PokedexEntry.proto"; 11 | import "POGOProtos/Data/Player/PlayerStats.proto"; 12 | import "POGOProtos/Data/Player/PlayerCurrency.proto"; 13 | import "POGOProtos/Data/Player/PlayerCamera.proto"; 14 | 15 | message InventoryItemData { 16 | .POGOProtos.Data.PokemonData pokemon_data = 1; 17 | .POGOProtos.Inventory.Item.ItemData item = 2; 18 | .POGOProtos.Data.PokedexEntry pokedex_entry = 3; 19 | .POGOProtos.Data.Player.PlayerStats player_stats = 4; 20 | .POGOProtos.Data.Player.PlayerCurrency player_currency = 5; 21 | .POGOProtos.Data.Player.PlayerCamera player_camera = 6; 22 | .POGOProtos.Inventory.InventoryUpgrades inventory_upgrades = 7; 23 | .POGOProtos.Inventory.AppliedItems applied_items = 8; 24 | .POGOProtos.Inventory.EggIncubators egg_incubators = 9; 25 | .POGOProtos.Inventory.Candy candy = 10; 26 | } 27 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Inventory/InventoryUpgrade.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Inventory; 3 | 4 | import "POGOProtos/Inventory/Item/ItemId.proto"; 5 | import "POGOProtos/Inventory/InventoryUpgradeType.proto"; 6 | 7 | message InventoryUpgrade { 8 | .POGOProtos.Inventory.Item.ItemId item_id = 1; 9 | .POGOProtos.Inventory.InventoryUpgradeType upgrade_type = 2; 10 | int32 additional_storage = 3; 11 | } 12 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Inventory/InventoryUpgradeType.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Inventory; 3 | 4 | enum InventoryUpgradeType { 5 | UPGRADE_UNSET = 0; 6 | INCREASE_ITEM_STORAGE = 1; 7 | INCREASE_POKEMON_STORAGE = 2; 8 | } 9 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Inventory/InventoryUpgrades.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Inventory; 3 | 4 | import "POGOProtos/Inventory/InventoryUpgrade.proto"; 5 | 6 | message InventoryUpgrades { 7 | repeated InventoryUpgrade inventory_upgrades = 1; 8 | } 9 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Inventory/Item/ItemAward.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Inventory.Item; 3 | 4 | import "POGOProtos/Inventory/Item/ItemId.proto"; 5 | 6 | message ItemAward { 7 | .POGOProtos.Inventory.Item.ItemId item_id = 1; 8 | int32 item_count = 2; 9 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Inventory/Item/ItemData.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Inventory.Item; 3 | 4 | import "POGOProtos/Inventory/Item/ItemId.proto"; 5 | 6 | message ItemData { 7 | .POGOProtos.Inventory.Item.ItemId item_id = 1; 8 | int32 count = 2; 9 | bool unseen = 3; 10 | } 11 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Inventory/Item/ItemId.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Inventory.Item; 3 | 4 | enum ItemId { 5 | ITEM_UNKNOWN = 0; 6 | ITEM_POKE_BALL = 1; 7 | ITEM_GREAT_BALL = 2; 8 | ITEM_ULTRA_BALL = 3; 9 | ITEM_MASTER_BALL = 4; 10 | ITEM_POTION = 101; 11 | ITEM_SUPER_POTION = 102; 12 | ITEM_HYPER_POTION = 103; 13 | ITEM_MAX_POTION = 104; 14 | ITEM_REVIVE = 201; 15 | ITEM_MAX_REVIVE = 202; 16 | ITEM_LUCKY_EGG = 301; 17 | ITEM_INCENSE_ORDINARY = 401; 18 | ITEM_INCENSE_SPICY = 402; 19 | ITEM_INCENSE_COOL = 403; 20 | ITEM_INCENSE_FLORAL = 404; 21 | ITEM_TROY_DISK = 501; 22 | ITEM_X_ATTACK = 602; 23 | ITEM_X_DEFENSE = 603; 24 | ITEM_X_MIRACLE = 604; 25 | ITEM_RAZZ_BERRY = 701; 26 | ITEM_BLUK_BERRY = 702; 27 | ITEM_NANAB_BERRY = 703; 28 | ITEM_WEPAR_BERRY = 704; 29 | ITEM_PINAP_BERRY = 705; 30 | ITEM_SPECIAL_CAMERA = 801; 31 | ITEM_INCUBATOR_BASIC_UNLIMITED = 901; 32 | ITEM_INCUBATOR_BASIC = 902; 33 | ITEM_POKEMON_STORAGE_UPGRADE = 1001; 34 | ITEM_ITEM_STORAGE_UPGRADE = 1002; 35 | } 36 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Inventory/Item/ItemType.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Inventory.Item; 3 | 4 | enum ItemType { 5 | ITEM_TYPE_NONE = 0; 6 | ITEM_TYPE_POKEBALL = 1; 7 | ITEM_TYPE_POTION = 2; 8 | ITEM_TYPE_REVIVE = 3; 9 | ITEM_TYPE_MAP = 4; 10 | ITEM_TYPE_BATTLE = 5; 11 | ITEM_TYPE_FOOD = 6; 12 | ITEM_TYPE_CAMERA = 7; 13 | ITEM_TYPE_DISK = 8; 14 | ITEM_TYPE_INCUBATOR = 9; 15 | ITEM_TYPE_INCENSE = 10; 16 | ITEM_TYPE_XP_BOOST = 11; 17 | ITEM_TYPE_INVENTORY_UPGRADE = 12; 18 | } 19 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Map/Fort/FortData.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Map.Fort; 3 | 4 | import "POGOProtos/Enums/PokemonId.proto"; 5 | import "POGOProtos/Enums/TeamColor.proto"; 6 | import "POGOProtos/Map/Fort/FortType.proto"; 7 | import "POGOProtos/Map/Fort/FortSponsor.proto"; 8 | import "POGOProtos/Map/Fort/FortRenderingType.proto"; 9 | import "POGOProtos/Map/Fort/FortLureInfo.proto"; 10 | 11 | message FortData { 12 | string id = 1; 13 | int64 last_modified_timestamp_ms = 2; 14 | double latitude = 3; 15 | double longitude = 4; 16 | bool enabled = 8; 17 | .POGOProtos.Map.Fort.FortType type = 9; 18 | 19 | //// Fields related to gyms only 20 | 21 | // Team that owns the gym 22 | .POGOProtos.Enums.TeamColor owned_by_team = 5; 23 | 24 | // Highest CP Pokemon at the gym 25 | .POGOProtos.Enums.PokemonId guard_pokemon_id = 6; 26 | int32 guard_pokemon_cp = 7; 27 | 28 | // Prestigate / experience of the gym 29 | int64 gym_points = 10; 30 | 31 | // Whether someone is battling at the gym currently 32 | bool is_in_battle = 11; 33 | 34 | //// Fields related to pokestops only 35 | 36 | // Timestamp when the pokestop can be activated again to get items / xp 37 | int64 cooldown_complete_timestamp_ms = 14; 38 | 39 | .POGOProtos.Map.Fort.FortSponsor sponsor = 15; 40 | .POGOProtos.Map.Fort.FortRenderingType rendering_type = 16; 41 | 42 | // Might represent the type of item applied to the pokestop, right now only lures can be applied 43 | bytes active_fort_modifier = 12; 44 | .POGOProtos.Map.Fort.FortLureInfo lure_info = 13; 45 | } 46 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Map/Fort/FortLureInfo.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Map.Fort; 3 | 4 | import "POGOProtos/Enums/PokemonId.proto"; 5 | 6 | message FortLureInfo { 7 | string fort_id = 1; 8 | fixed64 encounter_id = 2; 9 | .POGOProtos.Enums.PokemonId active_pokemon_id = 3; 10 | int64 lure_expires_timestamp_ms = 4; 11 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Map/Fort/FortModifier.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Map.Fort; 3 | 4 | import "POGOProtos/Inventory/Item/ItemId.proto"; 5 | 6 | message FortModifier { 7 | .POGOProtos.Inventory.Item.ItemId item_id = 1; 8 | int64 expiration_timestamp_ms = 2; 9 | string deployer_player_codename = 3; 10 | } 11 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Map/Fort/FortRenderingType.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Map.Fort; 3 | 4 | enum FortRenderingType { 5 | DEFAULT = 0; 6 | INTERNAL_TEST = 1; 7 | } 8 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Map/Fort/FortSponsor.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Map.Fort; 3 | 4 | enum FortSponsor { 5 | UNSET_SPONSOR = 0; 6 | MCDONALDS = 1; 7 | POKEMON_STORE = 2; 8 | } 9 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Map/Fort/FortSummary.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Map.Fort; 3 | 4 | message FortSummary { 5 | string fort_summary_id = 1; 6 | int64 last_modified_timestamp_ms = 2; 7 | double latitude = 3; 8 | double longitude = 4; 9 | } 10 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Map/Fort/FortType.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Map.Fort; 3 | 4 | enum FortType { 5 | GYM = 0; 6 | CHECKPOINT = 1; 7 | } 8 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Map/MapCell.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Map; 3 | 4 | import "POGOProtos/Map/SpawnPoint.proto"; 5 | import "POGOProtos/Map/Fort/FortData.proto"; 6 | import "POGOProtos/Map/Fort/FortSummary.proto"; 7 | import "POGOProtos/Map/Pokemon/NearbyPokemon.proto"; 8 | import "POGOProtos/Map/Pokemon/WildPokemon.proto"; 9 | import "POGOProtos/Map/Pokemon/MapPokemon.proto"; 10 | 11 | // A cell is a geographical "zone" containing objects like pokemon, gyms, and pokestops. 12 | message MapCell { 13 | // S2 geographic area that the cell covers (http://s2map.com/) (https://code.google.com/archive/p/s2-geometry-library/) 14 | uint64 s2_cell_id = 1; 15 | int64 current_timestamp_ms = 2; 16 | repeated .POGOProtos.Map.Fort.FortData forts = 3; 17 | repeated .POGOProtos.Map.SpawnPoint spawn_points = 4; 18 | repeated string deleted_objects = 6; 19 | bool is_truncated_list = 7; 20 | repeated .POGOProtos.Map.Fort.FortSummary fort_summaries = 8; 21 | repeated .POGOProtos.Map.SpawnPoint decimated_spawn_points = 9; 22 | 23 | // Pokemon within 2 steps or less. 24 | repeated .POGOProtos.Map.Pokemon.WildPokemon wild_pokemons = 5; 25 | // Pokemon within 1 step or none. 26 | repeated .POGOProtos.Map.Pokemon.MapPokemon catchable_pokemons = 10; 27 | // Pokemon farther away than 2 steps, but still in the area. 28 | repeated .POGOProtos.Map.Pokemon.NearbyPokemon nearby_pokemons = 11; 29 | } 30 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Map/MapObjectsStatus.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Map; 3 | 4 | enum MapObjectsStatus { 5 | UNSET_STATUS = 0; 6 | SUCCESS = 1; 7 | LOCATION_UNSET = 2; 8 | } 9 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Map/Pokemon/MapPokemon.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Map.Pokemon; 3 | 4 | import "POGOProtos/Enums/PokemonId.proto"; 5 | 6 | message MapPokemon { 7 | string spawn_point_id = 1; 8 | fixed64 encounter_id = 2; 9 | .POGOProtos.Enums.PokemonId pokemon_id = 3; 10 | // After this timestamp, the pokemon will be gone. 11 | int64 expiration_timestamp_ms = 4; 12 | double latitude = 5; 13 | double longitude = 6; 14 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Map/Pokemon/NearbyPokemon.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Map.Pokemon; 3 | 4 | import "POGOProtos/Enums/PokemonId.proto"; 5 | 6 | message NearbyPokemon { 7 | .POGOProtos.Enums.PokemonId pokemon_id = 1; 8 | float distance_in_meters = 2; 9 | fixed64 encounter_id = 3; 10 | } 11 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Map/Pokemon/WildPokemon.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Map.Pokemon; 3 | 4 | import "POGOProtos/Data/PokemonData.proto"; 5 | 6 | message WildPokemon { 7 | fixed64 encounter_id = 1; 8 | int64 last_modified_timestamp_ms = 2; 9 | double latitude = 3; 10 | double longitude = 4; 11 | string spawn_point_id = 5; 12 | .POGOProtos.Data.PokemonData pokemon_data = 7; 13 | int32 time_till_hidden_ms = 11; 14 | } 15 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Map/SpawnPoint.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Map; 3 | 4 | message SpawnPoint { 5 | double latitude = 2; 6 | double longitude = 3; 7 | } 8 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Envelopes/AuthTicket.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Envelopes; 3 | 4 | message AuthTicket { 5 | bytes start = 1; 6 | uint64 expire_timestamp_ms = 2; 7 | bytes end = 3; 8 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Envelopes/RequestEnvelope.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Envelopes; 3 | 4 | import "POGOProtos/Networking/Requests/Request.proto"; 5 | import "POGOProtos/Networking/Envelopes/AuthTicket.proto"; 6 | import "POGOProtos/Networking/Envelopes/Unknown6.proto"; 7 | 8 | message RequestEnvelope { 9 | int32 status_code = 1; 10 | 11 | uint64 request_id = 3; 12 | repeated .POGOProtos.Networking.Requests.Request requests = 4; 13 | 14 | repeated .POGOProtos.Networking.Envelopes.Unknown6 unknown6 = 6; 15 | double latitude = 7; 16 | double longitude = 8; 17 | double altitude = 9; 18 | AuthInfo auth_info = 10; 19 | .POGOProtos.Networking.Envelopes.AuthTicket auth_ticket = 11; 20 | int64 unknown12 = 12; 21 | 22 | message AuthInfo { 23 | string provider = 1; 24 | JWT token = 2; 25 | 26 | message JWT { 27 | string contents = 1; 28 | int32 unknown2 = 2; 29 | } 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Envelopes/ResponseEnvelope.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Envelopes; 3 | 4 | import "POGOProtos/Networking/Envelopes/AuthTicket.proto"; 5 | import "POGOProtos/Networking/Envelopes/Unknown6Response.proto"; 6 | 7 | message ResponseEnvelope { 8 | int32 status_code = 1; 9 | uint64 request_id = 2; 10 | string api_url = 3; 11 | 12 | repeated .POGOProtos.Networking.Envelopes.Unknown6Response unknown6 = 6; 13 | .POGOProtos.Networking.Envelopes.AuthTicket auth_ticket = 7; 14 | 15 | repeated bytes returns = 100; 16 | string error = 101; 17 | 18 | message Unknown7 { 19 | bytes unknown71 = 1; 20 | int64 unknown72 = 2; 21 | bytes unknown73 = 3; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Envelopes/Unknown6.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Envelopes; 3 | 4 | message Unknown6 { 5 | int32 request_type = 1; // 5 for IAPs, 6 is unknown still 6 | Unknown2 unknown2 = 2; 7 | 8 | message Unknown2 { 9 | bytes unknown1 = 1; 10 | } 11 | } 12 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Envelopes/Unknown6Response.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Envelopes; 3 | 4 | import "POGOProtos/Data/Player/Currency.proto"; 5 | import "POGOProtos/Inventory/Item/ItemData.proto"; 6 | 7 | message Unknown6Response { 8 | int32 response_type = 1; // Still don't know what 6 is, but 5 lists items available via IAPs. 9 | Unknown2 unknown2 = 2; // Response data 10 | 11 | message Unknown2 { 12 | uint64 unknown1 = 1; // Maybe status? It's always 1 (success), so it's probably that. 13 | repeated StoreItem items = 2; // Items to show in the shop 14 | repeated .POGOProtos.Data.Player.Currency player_currencies = 3; // currencies that player has at the moment 15 | string unknown4 = 4; // Some base64 encoded stuff... 16 | 17 | message StoreItem { 18 | string item_id = 1; // Internal ID (probably for Google Play/App Store) example: "pgorelease.incenseordinary.1" 19 | bool is_iap = 2; // If true, this item is bought with real currency (USD, etc.) through the Play/App Store instead of Pokecoins 20 | .POGOProtos.Data.Player.Currency currency_to_buy = 3; // This defines how much the item costs (with the exception of items that cost real money like Pokecoins, that's defined in the respective store) 21 | .POGOProtos.Data.Player.Currency yields_currency = 4; // When bought, this IAP will yield this much currency 22 | .POGOProtos.Inventory.Item.ItemData yields_item = 5; // The item and count of such item that this IAP will yield 23 | repeated Tag tags = 6; // Stuff like SORT:12, CATEGORY:ITEMS 24 | int32 unknown7 = 7; // Possibly something to toggle visibility in the store/purchasibility? 25 | 26 | message Tag { 27 | string key = 1; 28 | string value = 2; 29 | } 30 | } 31 | } 32 | } 33 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/AddFortModifierMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | import "POGOProtos/Inventory/Item/ItemId.proto"; 5 | 6 | message AddFortModifierMessage { 7 | .POGOProtos.Inventory.Item.ItemId modifier_type = 1; 8 | string fort_id = 2; 9 | double player_latitude = 3; 10 | double player_longitude = 4; 11 | } 12 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/AttackGymMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | import "POGOProtos/Data/Battle/BattleAction.proto"; 5 | 6 | message AttackGymMessage { 7 | string gym_id = 1; 8 | string battle_id = 2; 9 | repeated .POGOProtos.Data.Battle.BattleAction attack_actions = 3; 10 | .POGOProtos.Data.Battle.BattleAction last_retrieved_actions = 4; 11 | double player_latitude = 5; 12 | double player_longitude = 6; 13 | } 14 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/CatchPokemonMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | import "POGOProtos/Inventory/Item/ItemId.proto"; 5 | 6 | message CatchPokemonMessage { 7 | fixed64 encounter_id = 1; 8 | .POGOProtos.Inventory.Item.ItemId pokeball = 2; 9 | double normalized_reticle_size = 3; 10 | string spawn_point_id = 4; 11 | bool hit_pokemon = 5; 12 | double spin_modifier = 6; 13 | double normalized_hit_position = 7; 14 | } 15 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/CheckAwardedBadgesMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message CheckAwardedBadgesMessage { 5 | // No message needed. 6 | } 7 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/CheckCodenameAvailableMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message CheckCodenameAvailableMessage { 5 | string codename = 1; 6 | } 7 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/ClaimCodenameMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message ClaimCodenameMessage { 5 | string codename = 1; 6 | } 7 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/CollectDailyBonusMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message CollectDailyBonusMessage { 5 | // No message needed. 6 | } 7 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/CollectDailyDefenderBonusMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message CollectDailyDefenderBonusMessage { 5 | // No message needed. 6 | } 7 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/DiskEncounterMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message DiskEncounterMessage { 5 | uint64 encounter_id = 1; 6 | string fort_id = 2; 7 | double player_latitude = 3; 8 | double player_longitude = 4; 9 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/DownloadItemTemplatesMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message DownloadItemTemplatesMessage { 5 | // No message needed. 6 | } 7 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/DownloadRemoteConfigVersionMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | import "POGOProtos/Enums/Platform.proto"; 5 | 6 | message DownloadRemoteConfigVersionMessage { 7 | .POGOProtos.Enums.Platform platform = 1; 8 | string device_manufacturer = 2; 9 | string device_model = 3; 10 | string locale = 4; 11 | uint32 app_version = 5; 12 | } 13 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/DownloadSettingsMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message DownloadSettingsMessage { 5 | string hash = 1; 6 | } 7 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/EchoMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message EchoMessage { 5 | // No message needed. 6 | } 7 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/EncounterMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message EncounterMessage { 5 | fixed64 encounter_id = 1; 6 | string spawn_point_id = 2; 7 | double player_latitude = 3; 8 | double player_longitude = 4; 9 | } 10 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/EncounterTutorialCompleteMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | import "POGOProtos/Enums/PokemonId.proto"; 5 | 6 | message EncounterTutorialCompleteMessage { 7 | .POGOProtos.Enums.PokemonId pokemon_id = 1; 8 | } 9 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/EquipBadgeMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | import "POGOProtos/Enums/BadgeType.proto"; 5 | 6 | message EquipBadgeMessage { 7 | .POGOProtos.Enums.BadgeType badge_type = 1; 8 | } 9 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/EvolvePokemonMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message EvolvePokemonMessage { 5 | fixed64 pokemon_id = 1; 6 | } 7 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/FortDeployPokemonMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message FortDeployPokemonMessage { 5 | string fort_id = 1; 6 | fixed64 pokemon_id = 2; 7 | double player_latitude = 3; 8 | double player_longitude = 4; 9 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/FortDetailsMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message FortDetailsMessage { 5 | string fort_id = 1; 6 | double latitude = 2; 7 | double longitude = 3; 8 | } 9 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/FortRecallPokemonMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message FortRecallPokemonMessage { 5 | string fort_id = 1; 6 | fixed64 pokemon_id = 2; 7 | double player_latitude = 3; 8 | double player_longitude = 4; 9 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/FortSearchMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message FortSearchMessage { 5 | string fort_id = 1; 6 | double player_latitude = 2; 7 | double player_longitude = 3; 8 | double fort_latitude = 4; 9 | double fort_longitude = 5; 10 | } 11 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/GetAssetDigestMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | import "POGOProtos/Enums/Platform.proto"; 5 | 6 | message GetAssetDigestMessage { 7 | .POGOProtos.Enums.Platform platform = 1; 8 | string device_manufacturer = 2; 9 | string device_model = 3; 10 | string locale = 4; 11 | uint32 app_version = 5; 12 | } 13 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/GetDownloadUrlsMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | // UNTESTED 5 | message GetDownloadUrlsMessage { 6 | repeated string asset_id = 1; 7 | } 8 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/GetGymDetailsMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message GetGymDetailsMessage { 5 | string gym_id = 1; 6 | double player_latitude = 2; 7 | double player_longitude = 3; 8 | double gym_latitude = 4; 9 | double gym_longitude = 5; 10 | } 11 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/GetHatchedEggsMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message GetHatchedEggsMessage { 5 | // No message needed. 6 | } 7 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/GetIncensePokemonMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message GetIncensePokemonMessage { 5 | double player_latitude = 1; 6 | double player_longitude = 2; 7 | } 8 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/GetInventoryMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message GetInventoryMessage { 5 | int64 last_timestamp_ms = 1; 6 | int32 item_been_seen = 2; // TODO: Find out what this is. 7 | } 8 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/GetMapObjectsMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message GetMapObjectsMessage { 5 | repeated uint64 cell_id = 1 [packed=true]; 6 | repeated int64 since_timestamp_ms = 2 [packed=true]; 7 | double latitude = 3; 8 | double longitude = 4; 9 | } 10 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/GetPlayerMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message GetPlayerMessage { 5 | // No message needed. 6 | } 7 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/GetPlayerProfileMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message GetPlayerProfileMessage { 5 | string player_name = 1; 6 | } 7 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/GetSuggestedCodenamesMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message GetSuggestedCodenamesMessage { 5 | // No message needed. 6 | } 7 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/IncenseEncounterMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message IncenseEncounterMessage { 5 | int64 encounter_id = 1; 6 | string encounter_location = 2; 7 | } 8 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/LevelUpRewardsMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message LevelUpRewardsMessage { 5 | int32 level = 1; 6 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/MarkTutorialCompleteMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | import "POGOProtos/Enums/TutorialState.proto"; 5 | 6 | message MarkTutorialCompleteMessage { 7 | repeated .POGOProtos.Enums.TutorialState tutorials_completed = 1; 8 | bool send_marketing_emails = 2; 9 | bool send_push_notifications = 3; 10 | } 11 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/NicknamePokemonMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message NicknamePokemonMessage { 5 | fixed64 pokemon_id = 1; 6 | string nickname = 2; 7 | } 8 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/PlayerUpdateMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message PlayerUpdateMessage { 5 | double latitude = 1; 6 | double longitude = 2; 7 | } 8 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/README.txt: -------------------------------------------------------------------------------- 1 | Requests message name should be the "RequestType" in camelcase with "Message" as suffix. -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/RecycleInventoryItemMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | import "POGOProtos/Inventory/Item/ItemId.proto"; 5 | 6 | message RecycleInventoryItemMessage { 7 | .POGOProtos.Inventory.Item.ItemId item_id = 1; 8 | int32 count = 2; 9 | } 10 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/ReleasePokemonMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message ReleasePokemonMessage { 5 | fixed64 pokemon_id = 1; 6 | } 7 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/SetAvatarMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | import "POGOProtos/Data/Player/PlayerAvatar.proto"; 5 | 6 | message SetAvatarMessage { 7 | .POGOProtos.Data.Player.PlayerAvatar player_avatar = 2; 8 | } 9 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/SetContactSettingsMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | import "POGOProtos/Data/Player/ContactSettings.proto"; 5 | 6 | message SetContactSettingsMessage { 7 | .POGOProtos.Data.Player.ContactSettings contact_settings = 1; 8 | } 9 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/SetFavoritePokemonMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message SetFavoritePokemonMessage { 5 | uint64 pokemon_id = 1; // needs to be uint64, tested by Grover 6 | bool is_favorite = 2; 7 | } 8 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/SetPlayerTeamMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | import "POGOProtos/Enums/TeamColor.proto"; 5 | 6 | message SetPlayerTeamMessage { 7 | .POGOProtos.Enums.TeamColor team = 1; 8 | } 9 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/SfidaActionLogMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message SfidaActionLogMessage { 5 | // No message needed. 6 | } 7 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/StartGymBattleMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message StartGymBattleMessage { 5 | string gym_id = 1; 6 | repeated fixed64 attacking_pokemon_ids = 2; 7 | fixed64 defending_pokemon_id = 3; // needs to be fixed64, tested by Grover 8 | double player_latitude = 4; 9 | double player_longitude = 5; 10 | } 11 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/UpgradePokemonMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message UpgradePokemonMessage { 5 | fixed64 pokemon_id = 1; 6 | } 7 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/UseIncenseMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | import "POGOProtos/Inventory/Item/ItemId.proto"; 5 | 6 | message UseIncenseMessage { 7 | .POGOProtos.Inventory.Item.ItemId incense_type = 1; 8 | } 9 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/UseItemCaptureMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | import "POGOProtos/Inventory/Item/ItemId.proto"; 5 | 6 | message UseItemCaptureMessage { 7 | .POGOProtos.Inventory.Item.ItemId item_id = 1; 8 | fixed64 encounter_id = 2; 9 | string spawn_point_id = 3; 10 | } 11 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/UseItemEggIncubatorMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | message UseItemEggIncubatorMessage { 5 | string item_id = 1; 6 | uint64 pokemon_id = 2; 7 | } 8 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/UseItemGymMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | import "POGOProtos/Inventory/Item/ItemId.proto"; 5 | 6 | message UseItemGymMessage { 7 | .POGOProtos.Inventory.Item.ItemId item_id = 1; 8 | string gym_id = 2; 9 | double player_latitude = 3; 10 | double player_longitude = 4; 11 | } 12 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/UseItemPotionMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | import "POGOProtos/Inventory/Item/ItemId.proto"; 5 | 6 | message UseItemPotionMessage { 7 | .POGOProtos.Inventory.Item.ItemId item_id = 1; 8 | fixed64 pokemon_id = 2; 9 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/UseItemReviveMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | import "POGOProtos/Inventory/Item/ItemId.proto"; 5 | 6 | message UseItemReviveMessage { 7 | .POGOProtos.Inventory.Item.ItemId item_id = 1; 8 | fixed64 pokemon_id = 2; 9 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Messages/UseItemXpBoostMessage.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests.Messages; 3 | 4 | import "POGOProtos/Inventory/Item/ItemId.proto"; 5 | 6 | message UseItemXpBoostMessage { 7 | .POGOProtos.Inventory.Item.ItemId item_id = 1; 8 | } 9 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/Request.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests; 3 | 4 | import "POGOProtos/Networking/Requests/RequestType.proto"; 5 | 6 | message Request { 7 | .POGOProtos.Networking.Requests.RequestType request_type = 1; 8 | bytes request_message = 2; 9 | } 10 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Requests/RequestType.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Requests; 3 | 4 | // R = Response 5 | // M = Message 6 | 7 | enum RequestType { 8 | METHOD_UNSET = 0; // No implementation required 9 | PLAYER_UPDATE = 1; // Implemented [R & M] 10 | GET_PLAYER = 2; // Implemented [R & M] 11 | GET_INVENTORY = 4; // Implemented [R & M] 12 | DOWNLOAD_SETTINGS = 5; // Implemented [R & M] 13 | DOWNLOAD_ITEM_TEMPLATES = 6; // Implemented [R & M] 14 | DOWNLOAD_REMOTE_CONFIG_VERSION = 7; // Implemented [R & M] 15 | FORT_SEARCH = 101; // Implemented [R & M] 16 | ENCOUNTER = 102; // Implemented [R & M] 17 | CATCH_POKEMON = 103; // Implemented [R & M] 18 | FORT_DETAILS = 104; // Implemented [R & M] 19 | ITEM_USE = 105; // Can't find this one 20 | GET_MAP_OBJECTS = 106; // Implemented [R & M] 21 | FORT_DEPLOY_POKEMON = 110; // Implemented [R & M] 22 | FORT_RECALL_POKEMON = 111; // Implemented [R & M] 23 | RELEASE_POKEMON = 112; // Implemented [R & M] 24 | USE_ITEM_POTION = 113; // Implemented [R & M] 25 | USE_ITEM_CAPTURE = 114; // Implemented [R & M] 26 | USE_ITEM_FLEE = 115; // Can't find this one 27 | USE_ITEM_REVIVE = 116; // Implemented [R & M] 28 | TRADE_SEARCH = 117; // Not yet implemented in the game 29 | TRADE_OFFER = 118; // Not yet implemented in the game 30 | TRADE_RESPONSE = 119; // Not yet implemented in the game 31 | TRADE_RESULT = 120; // Not yet implemented in the game 32 | GET_PLAYER_PROFILE = 121; // Implemented [R & M] 33 | GET_ITEM_PACK = 122; // Can't find this one 34 | BUY_ITEM_PACK = 123; // Can't find this one 35 | BUY_GEM_PACK = 124; // Can't find this one 36 | EVOLVE_POKEMON = 125; // Implemented [R & M] 37 | GET_HATCHED_EGGS = 126; // Implemented [R & M] 38 | ENCOUNTER_TUTORIAL_COMPLETE = 127; // Implemented [R & M] 39 | LEVEL_UP_REWARDS = 128; // Implemented [R & M] 40 | CHECK_AWARDED_BADGES = 129; // Implemented [R & M] 41 | USE_ITEM_GYM = 133; // Implemented [R & M] 42 | GET_GYM_DETAILS = 134; // Implemented [R & M] 43 | START_GYM_BATTLE = 135; // Implemented [R & M] 44 | ATTACK_GYM = 136; // Implemented [R & M] 45 | RECYCLE_INVENTORY_ITEM = 137; // Implemented [R & M] 46 | COLLECT_DAILY_BONUS = 138; // Implemented [R & M] 47 | USE_ITEM_XP_BOOST = 139; // Implemented [R & M] 48 | USE_ITEM_EGG_INCUBATOR = 140; // Implemented [R & M] 49 | USE_INCENSE = 141; // Implemented [R & M] 50 | GET_INCENSE_POKEMON = 142; // Implemented [R & M] 51 | INCENSE_ENCOUNTER = 143; // Implemented [R & M] 52 | ADD_FORT_MODIFIER = 144; // Implemented [R & M] 53 | DISK_ENCOUNTER = 145; // Implemented [R & M] 54 | COLLECT_DAILY_DEFENDER_BONUS = 146; // Implemented [R & M] 55 | UPGRADE_POKEMON = 147; // Implemented [R & M] 56 | SET_FAVORITE_POKEMON = 148; // Implemented [R & M] 57 | NICKNAME_POKEMON = 149; // Implemented [R & M] 58 | EQUIP_BADGE = 150; // Implemented [R & M] 59 | SET_CONTACT_SETTINGS = 151; // Implemented [R & M] 60 | GET_ASSET_DIGEST = 300; // Implemented [R & M] 61 | GET_DOWNLOAD_URLS = 301; // Implemented [R & M] 62 | GET_SUGGESTED_CODENAMES = 401; // Implemented [R & M] 63 | CHECK_CODENAME_AVAILABLE = 402; // Implemented [R & M] TEST RESPONSE 64 | CLAIM_CODENAME = 403; // Implemented [R & M] TEST RESPONSE 65 | SET_AVATAR = 404; // Implemented [R & M] 66 | SET_PLAYER_TEAM = 405; // Implemented [R & M] 67 | MARK_TUTORIAL_COMPLETE = 406; // Implemented [R & M] 68 | LOAD_SPAWN_POINTS = 500; // Can't find this one 69 | ECHO = 666; // Implemented [R & M] 70 | DEBUG_UPDATE_INVENTORY = 700; 71 | DEBUG_DELETE_PLAYER = 701; 72 | SFIDA_REGISTRATION = 800; // Not yet released. 73 | SFIDA_ACTION_LOG = 801; // Implemented [R & M] 74 | SFIDA_CERTIFICATION = 802; // Not yet released. 75 | SFIDA_UPDATE = 803; // Not yet released. 76 | SFIDA_ACTION = 804; // Not yet released. 77 | SFIDA_DOWSER = 805; // Not yet released. 78 | SFIDA_CAPTURE = 806; // Not yet released. 79 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/AddFortModifierResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | message AddFortModifierResponse { 5 | // Initialized by assist.py 6 | } 7 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/AttackGymResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Data/Battle/BattleLog.proto"; 5 | import "POGOProtos/Data/Battle/BattlePokemonInfo.proto"; 6 | 7 | message AttackGymResponse { 8 | .POGOProtos.Networking.Responses.AttackGymResponse.Result result = 1; 9 | .POGOProtos.Data.Battle.BattleLog battle_log = 2; 10 | string battle_id = 3; 11 | .POGOProtos.Data.Battle.BattlePokemonInfo active_defender = 4; 12 | .POGOProtos.Data.Battle.BattlePokemonInfo active_attacker = 5; 13 | 14 | enum Result { 15 | UNSET = 0; 16 | SUCCESS = 1; 17 | ERROR_INVALID_ATTACK_ACTIONS = 2; 18 | ERROR_NOT_IN_RANGE = 3; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/CatchPokemonResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Data/Capture/CaptureAward.proto"; 5 | 6 | message CatchPokemonResponse { 7 | .POGOProtos.Networking.Responses.CatchPokemonResponse.CatchStatus status = 1; 8 | double miss_percent = 2; 9 | fixed64 captured_pokemon_id = 3; 10 | .POGOProtos.Data.Capture.CaptureAward capture_award = 4; 11 | 12 | enum CatchStatus { 13 | CATCH_ERROR = 0; 14 | CATCH_SUCCESS = 1; 15 | CATCH_ESCAPE = 2; 16 | CATCH_FLEE = 3; 17 | CATCH_MISSED = 4; 18 | } 19 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/CheckAwardedBadgesResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Enums/BadgeType.proto"; 5 | 6 | message CheckAwardedBadgesResponse { 7 | bool success = 1; 8 | repeated .POGOProtos.Enums.BadgeType awarded_badges = 2; 9 | repeated int32 awarded_badge_levels = 3; 10 | } 11 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/CheckCodenameAvailableResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | // TODO: Might be incorrect, please test. 5 | message CheckCodenameAvailableResponse { 6 | string codename = 1; 7 | string user_message = 2; 8 | bool is_assignable = 3; 9 | .POGOProtos.Networking.Responses.CheckCodenameAvailableResponse.Status status = 4; 10 | 11 | enum Status { 12 | UNSET = 0; 13 | SUCCESS = 1; 14 | CODENAME_NOT_AVAILABLE = 2; 15 | CODENAME_NOT_VALID = 3; 16 | CURRENT_OWNER = 4; 17 | CODENAME_CHANGE_NOT_ALLOWED = 5; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/ClaimCodenameResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | // TODO: Might be incorrect, please test. 5 | message ClaimCodenameResponse { 6 | string codename = 1; 7 | string user_message = 2; 8 | bool is_assignable = 3; 9 | .POGOProtos.Networking.Responses.ClaimCodenameResponse.Status status = 4; 10 | 11 | enum Status { 12 | UNSET = 0; 13 | SUCCESS = 1; 14 | CODENAME_NOT_AVAILABLE = 2; 15 | CODENAME_NOT_VALID = 3; 16 | CURRENT_OWNER = 4; 17 | CODENAME_CHANGE_NOT_ALLOWED = 5; 18 | } 19 | } 20 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/CollectDailyBonusResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | message CollectDailyBonusResponse { 5 | .POGOProtos.Networking.Responses.CollectDailyBonusResponse.Result result = 1; 6 | 7 | enum Result { 8 | UNSET = 0; 9 | SUCCESS = 1; 10 | FAILURE = 2; 11 | TOO_SOON = 3; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/CollectDailyDefenderBonusResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | message CollectDailyDefenderBonusResponse { 5 | .POGOProtos.Networking.Responses.CollectDailyDefenderBonusResponse.Result result = 1; 6 | repeated string currency_type = 2; 7 | repeated int32 currency_awarded = 3; 8 | int32 defenders_count = 4; 9 | 10 | enum Result { 11 | UNSET = 0; 12 | SUCCESS = 1; 13 | FAILURE = 2; 14 | TOO_SOON = 3; 15 | NO_DEFENDERS = 4; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/DiskEncounterResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Data/PokemonData.proto"; 5 | import "POGOProtos/Data/Capture/CaptureProbability.proto"; 6 | 7 | message DiskEncounterResponse { 8 | Result result = 1; 9 | .POGOProtos.Data.PokemonData pokemon_data = 2; 10 | .POGOProtos.Data.Capture.CaptureProbability capture_probability = 3; 11 | 12 | enum Result { 13 | UNKNOWN = 0; 14 | SUCCESS = 1; 15 | NOT_AVAILABLE = 2; 16 | NOT_IN_RANGE = 3; 17 | ENCOUNTER_ALREADY_FINISHED = 4; 18 | POKEMON_INVENTORY_FULL = 5; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/DownloadItemTemplatesResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Settings/Master/ItemSettings.proto"; 5 | import "POGOProtos/Settings/Master/MoveSettings.proto"; 6 | import "POGOProtos/Settings/Master/BadgeSettings.proto"; 7 | import "POGOProtos/Settings/Master/PokemonSettings.proto"; 8 | import "POGOProtos/Settings/Master/MoveSequenceSettings.proto"; 9 | import "POGOProtos/Settings/Master/TypeEffectiveSettings.proto"; 10 | import "POGOProtos/Settings/Master/CameraSettings.proto"; 11 | import "POGOProtos/Settings/Master/PlayerLevelSettings.proto"; 12 | import "POGOProtos/Settings/Master/GymLevelSettings.proto"; 13 | import "POGOProtos/Settings/Master/GymBattleSettings.proto"; 14 | import "POGOProtos/Settings/Master/EncounterSettings.proto"; 15 | import "POGOProtos/Settings/Master/IapItemDisplay.proto"; 16 | import "POGOProtos/Settings/Master/IapSettings.proto"; 17 | import "POGOProtos/Settings/Master/PokemonUpgradeSettings.proto"; 18 | import "POGOProtos/Settings/Master/EquippedBadgeSettings.proto"; 19 | 20 | 21 | 22 | message DownloadItemTemplatesResponse { 23 | bool success = 1; 24 | repeated .POGOProtos.Networking.Responses.DownloadItemTemplatesResponse.ItemTemplate item_templates = 2; 25 | uint64 timestamp_ms = 3; 26 | 27 | message ItemTemplate { 28 | string template_id = 1; 29 | .POGOProtos.Settings.Master.PokemonSettings pokemon_settings = 2; 30 | .POGOProtos.Settings.Master.ItemSettings item_settings = 3; 31 | .POGOProtos.Settings.Master.MoveSettings move_settings = 4; 32 | .POGOProtos.Settings.Master.MoveSequenceSettings move_sequence_settings = 5; 33 | .POGOProtos.Settings.Master.TypeEffectiveSettings type_effective = 8; 34 | .POGOProtos.Settings.Master.BadgeSettings badge_settings = 10; 35 | .POGOProtos.Settings.Master.CameraSettings camera = 11; 36 | .POGOProtos.Settings.Master.PlayerLevelSettings player_level = 12; 37 | .POGOProtos.Settings.Master.GymLevelSettings gym_level = 13; 38 | .POGOProtos.Settings.Master.GymBattleSettings battle_settings = 14; 39 | .POGOProtos.Settings.Master.EncounterSettings encounter_settings = 15; 40 | .POGOProtos.Settings.Master.IapItemDisplay iap_item_display = 16; 41 | .POGOProtos.Settings.Master.IapSettings iap_settings = 17; 42 | .POGOProtos.Settings.Master.PokemonUpgradeSettings pokemon_upgrades = 18; 43 | .POGOProtos.Settings.Master.EquippedBadgeSettings equipped_badges = 19; 44 | } 45 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/DownloadRemoteConfigVersionResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | message DownloadRemoteConfigVersionResponse { 5 | .POGOProtos.Networking.Responses.DownloadRemoteConfigVersionResponse.Result result = 1; 6 | uint64 item_templates_timestamp_ms = 2; // Latest available? 7 | uint64 asset_digest_timestamp_ms = 3; 8 | 9 | enum Result { 10 | UNSET = 0; 11 | SUCCESS = 1; 12 | } 13 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/DownloadSettingsResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Settings/GlobalSettings.proto"; 5 | 6 | message DownloadSettingsResponse { 7 | string error = 1; 8 | string hash = 2; 9 | .POGOProtos.Settings.GlobalSettings settings = 3; 10 | } 11 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/EchoResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | message EchoResponse { 5 | string context = 1; 6 | } 7 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/EncounterResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Data/Capture/CaptureProbability.proto"; 5 | import "POGOProtos/Map/Pokemon/WildPokemon.proto"; 6 | 7 | message EncounterResponse { 8 | .POGOProtos.Map.Pokemon.WildPokemon wild_pokemon = 1; 9 | Background background = 2; 10 | Status status = 3; 11 | .POGOProtos.Data.Capture.CaptureProbability capture_probability = 4; 12 | 13 | enum Background { 14 | PARK = 0; 15 | DESERT = 1; 16 | } 17 | 18 | enum Status { 19 | ENCOUNTER_ERROR = 0; 20 | ENCOUNTER_SUCCESS = 1; 21 | ENCOUNTER_NOT_FOUND = 2; 22 | ENCOUNTER_CLOSED = 3; 23 | ENCOUNTER_POKEMON_FLED = 4; 24 | ENCOUNTER_NOT_IN_RANGE = 5; 25 | ENCOUNTER_ALREADY_HAPPENED = 6; 26 | POKEMON_INVENTORY_FULL = 7; 27 | } 28 | } 29 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/EncounterTutorialCompleteResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Data/PokemonData.proto"; 5 | import "POGOProtos/Data/Capture/CaptureAward.proto"; 6 | 7 | message EncounterTutorialCompleteResponse { 8 | .POGOProtos.Networking.Responses.EncounterTutorialCompleteResponse.Result result = 1; 9 | .POGOProtos.Data.PokemonData pokemon_data = 2; 10 | .POGOProtos.Data.Capture.CaptureAward capture_award = 3; 11 | 12 | enum Result { 13 | UNSET = 0; 14 | SUCCESS = 1; 15 | ERROR_INVALID_POKEMON = 2; 16 | } 17 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/EquipBadgeResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Data/Player/EquippedBadge.proto"; 5 | 6 | message EquipBadgeResponse { 7 | .POGOProtos.Networking.Responses.EquipBadgeResponse.Result result = 1; 8 | .POGOProtos.Data.Player.EquippedBadge equipped = 2; 9 | 10 | enum Result { 11 | UNSET = 0; 12 | SUCCESS = 1; 13 | COOLDOWN_ACTIVE = 2; 14 | NOT_QUALIFIED = 3; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/EvolvePokemonResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Data/PokemonData.proto"; 5 | 6 | message EvolvePokemonResponse { 7 | .POGOProtos.Networking.Responses.EvolvePokemonResponse.Result result = 1; 8 | .POGOProtos.Data.PokemonData evolved_pokemon_data = 2; 9 | int32 experience_awarded = 3; 10 | int32 candy_awarded = 4; 11 | 12 | enum Result { 13 | UNSET = 0; 14 | SUCCESS = 1; 15 | FAILED_POKEMON_MISSING = 2; 16 | FAILED_INSUFFICIENT_RESOURCES = 3; 17 | FAILED_POKEMON_CANNOT_EVOLVE = 4; 18 | FAILED_POKEMON_IS_DEPLOYED = 5; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/FortDeployPokemonResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Data/PokemonData.proto"; 5 | import "POGOProtos/Data/Gym/GymState.proto"; 6 | import "POGOProtos/Networking/Responses/FortDetailsResponse.proto"; 7 | 8 | message FortDeployPokemonResponse { 9 | .POGOProtos.Networking.Responses.FortDeployPokemonResponse.Result result = 1; 10 | .POGOProtos.Networking.Responses.FortDetailsResponse fort_details = 2; 11 | .POGOProtos.Data.PokemonData pokemon_data = 3; 12 | .POGOProtos.Data.Gym.GymState gym_state = 4; 13 | 14 | enum Result { 15 | NO_RESULT_SET = 0; 16 | SUCCESS = 1; 17 | ERROR_ALREADY_HAS_POKEMON_ON_FORT = 2; 18 | ERROR_OPPOSING_TEAM_OWNS_FORT = 3; 19 | ERROR_FORT_IS_FULL = 4; 20 | ERROR_NOT_IN_RANGE = 5; 21 | ERROR_PLAYER_HAS_NO_TEAM = 6; 22 | ERROR_POKEMON_NOT_FULL_HP = 7; 23 | ERROR_PLAYER_BELOW_MINIMUM_LEVEL = 8; 24 | } 25 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/FortDetailsResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Data/PokemonData.proto"; 5 | import "POGOProtos/Enums/TeamColor.proto"; 6 | import "POGOProtos/Map/Fort/FortType.proto"; 7 | import "POGOProtos/Map/Fort/FortModifier.proto"; 8 | 9 | message FortDetailsResponse { 10 | string fort_id = 1; 11 | .POGOProtos.Enums.TeamColor team_color = 2; 12 | .POGOProtos.Data.PokemonData pokemon_data = 3; 13 | string name = 4; 14 | repeated string image_urls = 5; 15 | int32 fp = 6; 16 | int32 stamina = 7; 17 | int32 max_stamina = 8; 18 | .POGOProtos.Map.Fort.FortType type = 9; 19 | double latitude = 10; 20 | double longitude = 11; 21 | string description = 12; 22 | repeated .POGOProtos.Map.Fort.FortModifier modifiers = 13; 23 | } 24 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/FortRecallPokemonResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Networking/Responses/FortDetailsResponse.proto"; 5 | 6 | message FortRecallPokemonResponse { 7 | .POGOProtos.Networking.Responses.FortRecallPokemonResponse.Result result = 1; 8 | .POGOProtos.Networking.Responses.FortDetailsResponse fort_details = 2; 9 | 10 | enum Result { 11 | NO_RESULT_SET = 0; 12 | SUCCESS = 1; 13 | ERROR_NOT_IN_RANGE = 2; 14 | ERROR_POKEMON_NOT_ON_FORT = 3; 15 | ERROR_NO_PLAYER = 4; 16 | } 17 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/FortSearchResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Data/PokemonData.proto"; 5 | import "POGOProtos/Inventory/Item/ItemAward.proto"; 6 | 7 | message FortSearchResponse { 8 | .POGOProtos.Networking.Responses.FortSearchResponse.Result result = 1; 9 | repeated .POGOProtos.Inventory.Item.ItemAward items_awarded = 2; 10 | int32 gems_awarded = 3; 11 | .POGOProtos.Data.PokemonData pokemon_data_egg = 4; 12 | int32 experience_awarded = 5; 13 | int64 cooldown_complete_timestamp_ms = 6; 14 | int32 chain_hack_sequence_number = 7; 15 | 16 | enum Result { 17 | NO_RESULT_SET = 0; 18 | SUCCESS = 1; 19 | OUT_OF_RANGE = 2; 20 | IN_COOLDOWN_PERIOD = 3; 21 | INVENTORY_FULL = 4; 22 | } 23 | } 24 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/GetAssetDigestResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Data/AssetDigestEntry.proto"; 5 | 6 | message GetAssetDigestResponse { 7 | repeated .POGOProtos.Data.AssetDigestEntry digest = 1; 8 | uint64 timestamp_ms = 2; 9 | } 10 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/GetDownloadUrlsResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Data/DownloadUrlEntry.proto"; 5 | 6 | // UNTESTED 7 | message GetDownloadUrlsResponse { 8 | repeated .POGOProtos.Data.DownloadUrlEntry download_urls = 1; 9 | } 10 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/GetGymDetailsResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Data/Gym/GymState.proto"; 5 | 6 | message GetGymDetailsResponse { 7 | .POGOProtos.Data.Gym.GymState gym_state = 1; 8 | string name = 2; 9 | repeated string urls = 3; 10 | POGOProtos.Networking.Responses.GetGymDetailsResponse.Result result = 4; 11 | string description = 5; 12 | 13 | enum Result { 14 | UNSET = 0; 15 | SUCCESS = 1; 16 | ERROR_NOT_IN_RANGE = 2; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/GetHatchedEggsResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | message GetHatchedEggsResponse { 5 | bool success = 1; 6 | repeated fixed64 pokemon_id = 2 [packed=true]; 7 | repeated int32 experience_awarded = 3; 8 | repeated int32 candy_awarded = 4; 9 | repeated int32 stardust_awarded = 5; 10 | } 11 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/GetIncensePokemonResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Enums/PokemonId.proto"; 5 | 6 | message GetIncensePokemonResponse { 7 | .POGOProtos.Networking.Responses.GetIncensePokemonResponse.Result result = 1; 8 | .POGOProtos.Enums.PokemonId pokemon_id = 2; 9 | double latitude = 3; 10 | double longitude = 4; 11 | string encounter_location = 5; 12 | fixed64 encounter_id = 6; 13 | int64 disappear_timestamp_ms = 7; 14 | 15 | enum Result { 16 | INCENSE_ENCOUNTER_UNKNOWN = 0; 17 | INCENSE_ENCOUNTER_AVAILABLE = 1; 18 | INCENSE_ENCOUNTER_NOT_AVAILABLE = 2; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/GetInventoryResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Inventory/InventoryDelta.proto"; 5 | 6 | message GetInventoryResponse { 7 | bool success = 1; 8 | .POGOProtos.Inventory.InventoryDelta inventory_delta = 2; 9 | } 10 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/GetMapObjectsResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Map/MapCell.proto"; 5 | import "POGOProtos/Map/MapObjectsStatus.proto"; 6 | 7 | message GetMapObjectsResponse { 8 | repeated .POGOProtos.Map.MapCell map_cells = 1; 9 | .POGOProtos.Map.MapObjectsStatus status = 2; 10 | } 11 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/GetPlayerProfileResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Data/PlayerBadge.proto"; 5 | 6 | message GetPlayerProfileResponse { 7 | .POGOProtos.Networking.Responses.GetPlayerProfileResponse.Result result = 1; 8 | int64 start_time = 2; 9 | repeated .POGOProtos.Data.PlayerBadge badges = 3; 10 | 11 | enum Result { 12 | UNSET = 0; 13 | SUCCESS = 1; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/GetPlayerResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Data/PlayerData.proto"; 5 | 6 | message GetPlayerResponse { 7 | bool success = 1; 8 | .POGOProtos.Data.PlayerData player_data = 2; 9 | } 10 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/GetSuggestedCodenamesResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | message GetSuggestedCodenamesResponse { 5 | repeated string codenames = 1; 6 | bool success = 2; 7 | } 8 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/IncenseEncounterResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Data/PokemonData.proto"; 5 | import "POGOProtos/Data/Capture/CaptureProbability.proto"; 6 | 7 | message IncenseEncounterResponse { 8 | .POGOProtos.Networking.Responses.IncenseEncounterResponse.Result result = 1; 9 | .POGOProtos.Data.PokemonData pokemon_data = 2; 10 | .POGOProtos.Data.Capture.CaptureProbability capture_probability = 3; 11 | 12 | enum Result { 13 | INCENSE_ENCOUNTER_UNKNOWN = 0; 14 | INCENSE_ENCOUNTER_SUCCESS = 1; 15 | INCENSE_ENCOUNTER_NOT_AVAILABLE = 2; 16 | POKEMON_INVENTORY_FULL = 3; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/LevelUpRewardsResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Inventory/Item/ItemId.proto"; 5 | import "POGOProtos/Inventory/Item/ItemAward.proto"; 6 | 7 | message LevelUpRewardsResponse { 8 | .POGOProtos.Networking.Responses.LevelUpRewardsResponse.Result result = 1; 9 | repeated .POGOProtos.Inventory.Item.ItemAward items_awarded = 2; 10 | repeated .POGOProtos.Inventory.Item.ItemId items_unlocked = 4; 11 | 12 | enum Result { 13 | UNSET = 0; 14 | SUCCESS = 1; 15 | AWARDED_ALREADY = 2; 16 | } 17 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/MarkTutorialCompleteResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Data/PlayerData.proto"; 5 | 6 | message MarkTutorialCompleteResponse { 7 | bool success = 1; 8 | .POGOProtos.Data.PlayerData player_data = 2; 9 | } 10 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/NicknamePokemonResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | message NicknamePokemonResponse { 5 | .POGOProtos.Networking.Responses.NicknamePokemonResponse.Result result = 1; 6 | 7 | enum Result { 8 | UNSET = 0; 9 | SUCCESS = 1; 10 | ERROR_INVALID_NICKNAME = 2; 11 | ERROR_POKEMON_NOT_FOUND = 3; 12 | ERROR_POKEMON_IS_EGG = 4; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/PlayerUpdateResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Map/Fort/FortData.proto"; 5 | import "POGOProtos/Map/Pokemon/WildPokemon.proto"; 6 | 7 | message PlayerUpdateResponse { 8 | repeated .POGOProtos.Map.Pokemon.WildPokemon wild_pokemons = 1; 9 | repeated .POGOProtos.Map.Fort.FortData forts = 2; 10 | int32 forts_nearby = 3; 11 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/README.txt: -------------------------------------------------------------------------------- 1 | Response message name should be the "RequestType" in camelcase with "Response" as suffix. -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/RecycleInventoryItemResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | message RecycleInventoryItemResponse { 5 | .POGOProtos.Networking.Responses.RecycleInventoryItemResponse.Result result = 1; 6 | int32 new_count = 2; 7 | 8 | enum Result { 9 | UNSET = 0; 10 | SUCCESS = 1; 11 | ERROR_NOT_ENOUGH_COPIES = 2; 12 | ERROR_CANNOT_RECYCLE_INCUBATORS = 3; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/ReleasePokemonResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | message ReleasePokemonResponse { 5 | .POGOProtos.Networking.Responses.ReleasePokemonResponse.Result result = 1; 6 | int32 candy_awarded = 2; 7 | 8 | enum Result { 9 | UNSET = 0; 10 | SUCCESS = 1; 11 | POKEMON_DEPLOYED = 2; 12 | FAILED = 3; 13 | ERROR_POKEMON_IS_EGG = 4; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/SetAvatarResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Data/PlayerData.proto"; 5 | 6 | message SetAvatarResponse { 7 | .POGOProtos.Networking.Responses.SetAvatarResponse.Status status = 1; 8 | .POGOProtos.Data.PlayerData player_data = 2; 9 | 10 | enum Status { 11 | UNSET = 0; 12 | SUCCESS = 1; 13 | AVATAR_ALREADY_SET = 2; 14 | FAILURE = 3; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/SetContactSettingsResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Data/PlayerData.proto"; 5 | 6 | message SetContactSettingsResponse { 7 | .POGOProtos.Networking.Responses.SetContactSettingsResponse.Status status = 1; 8 | .POGOProtos.Data.PlayerData player_data = 2; 9 | 10 | enum Status { 11 | UNSET = 0; 12 | SUCCESS = 1; 13 | FAILURE = 2; 14 | } 15 | } 16 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/SetFavoritePokemonResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | message SetFavoritePokemonResponse { 5 | .POGOProtos.Networking.Responses.SetFavoritePokemonResponse.Result result = 1; 6 | 7 | enum Result { 8 | UNSET = 0; 9 | SUCCESS = 1; 10 | ERROR_POKEMON_NOT_FOUND = 2; 11 | ERROR_POKEMON_IS_EGG = 3; 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/SetPlayerTeamResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Data/PlayerData.proto"; 5 | 6 | message SetPlayerTeamResponse { 7 | .POGOProtos.Networking.Responses.SetPlayerTeamResponse.Status status = 1; 8 | .POGOProtos.Data.PlayerData player_data = 2; 9 | 10 | enum Status { 11 | UNSET = 0; 12 | SUCCESS = 1; 13 | TEAM_ALREADY_SET = 2; 14 | FAILURE = 3; 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/SfidaActionLogResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Data/Logs/ActionLogEntry.proto"; 5 | 6 | message SfidaActionLogResponse { 7 | .POGOProtos.Networking.Responses.SfidaActionLogResponse.Result result = 1; 8 | repeated .POGOProtos.Data.Logs.ActionLogEntry log_entries = 2; 9 | 10 | enum Result { 11 | UNSET = 0; 12 | SUCCESS = 1; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/StartGymBattleResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Data/Battle/BattleLog.proto"; 5 | import "POGOProtos/Data/Battle/BattleParticipant.proto"; 6 | 7 | message StartGymBattleResponse { 8 | .POGOProtos.Networking.Responses.StartGymBattleResponse.Result result = 1; 9 | int64 battle_start_timestamp_ms = 2; 10 | int64 battle_end_timestamp_ms = 3; 11 | string battle_id = 4; 12 | .POGOProtos.Data.Battle.BattleParticipant defender = 5; 13 | .POGOProtos.Data.Battle.BattleLog battle_log = 6; 14 | 15 | enum Result { 16 | UNSET = 0; 17 | SUCCESS = 1; 18 | ERROR_GYM_NOT_FOUND = 2; 19 | ERROR_GYM_NEUTRAL = 3; 20 | ERROR_GYM_WRONG_TEAM = 4; 21 | ERROR_GYM_EMPTY = 5; 22 | ERROR_INVALID_DEFENDER = 6; 23 | ERROR_TRAINING_INVALID_ATTACKER_COUNT = 7; 24 | ERROR_ALL_POKEMON_FAINTED = 8; 25 | ERROR_TOO_MANY_BATTLES = 9; 26 | ERROR_TOO_MANY_PLAYERS = 10; 27 | ERROR_GYM_BATTLE_LOCKOUT = 11; 28 | ERROR_PLAYER_BELOW_MINIMUM_LEVEL = 12; 29 | ERROR_NOT_IN_RANGE = 13; 30 | } 31 | } 32 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/UpgradePokemonResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Data/PokemonData.proto"; 5 | 6 | message UpgradePokemonResponse { 7 | .POGOProtos.Networking.Responses.UpgradePokemonResponse.Result result = 1; 8 | .POGOProtos.Data.PokemonData upgraded_pokemon = 2; 9 | 10 | enum Result { 11 | UNSET = 0; 12 | SUCCESS = 1; 13 | ERROR_POKEMON_NOT_FOUND = 2; 14 | ERROR_INSUFFICIENT_RESOURCES = 3; 15 | ERROR_UPGRADE_NOT_AVAILABLE = 4; 16 | ERROR_POKEMON_IS_DEPLOYED = 5; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/UseIncenseResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Inventory/AppliedItem.proto"; 5 | 6 | message UseIncenseResponse { 7 | .POGOProtos.Networking.Responses.UseIncenseResponse.Result result = 1; 8 | .POGOProtos.Inventory.AppliedItem applied_incense = 2; 9 | 10 | enum Result { 11 | UNKNOWN = 0; 12 | SUCCESS = 1; 13 | INCENSE_ALREADY_ACTIVE = 2; 14 | NONE_IN_INVENTORY = 3; 15 | LOCATION_UNSET = 4; 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/UseItemCaptureResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | message UseItemCaptureResponse { 5 | bool success = 1; 6 | double item_capture_mult = 2; 7 | double item_flee_mult = 3; 8 | bool stop_movement = 4; 9 | bool stop_attack = 5; 10 | bool target_max = 6; 11 | bool target_slow = 7; 12 | } 13 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/UseItemEggIncubatorResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Inventory/EggIncubator.proto"; 5 | 6 | message UseItemEggIncubatorResponse { 7 | .POGOProtos.Networking.Responses.UseItemEggIncubatorResponse.Result result = 1; 8 | .POGOProtos.Inventory.EggIncubator egg_incubator = 2; 9 | 10 | enum Result { 11 | UNSET = 0; 12 | SUCCESS = 1; 13 | ERROR_INCUBATOR_NOT_FOUND = 2; 14 | ERROR_POKEMON_EGG_NOT_FOUND = 3; 15 | ERROR_POKEMON_ID_NOT_EGG = 4; 16 | ERROR_INCUBATOR_ALREADY_IN_USE = 5; 17 | ERROR_POKEMON_ALREADY_INCUBATING = 6; 18 | ERROR_INCUBATOR_NO_USES_REMAINING = 7; 19 | } 20 | } 21 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/UseItemGymResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | message UseItemGymResponse { 5 | POGOProtos.Networking.Responses.UseItemGymResponse.Result result = 1; 6 | int64 updated_gp = 2; // Gym Points (?) 7 | 8 | enum Result { 9 | UNSET = 0; 10 | SUCCESS = 1; 11 | ERROR_CANNOT_USE = 2; 12 | ERROR_NOT_IN_RANGE = 3; 13 | } 14 | } 15 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/UseItemPotionResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | message UseItemPotionResponse { 5 | .POGOProtos.Networking.Responses.UseItemPotionResponse.Result result = 1; 6 | int32 stamina = 2; 7 | 8 | enum Result { 9 | UNSET = 0; 10 | SUCCESS = 1; 11 | ERROR_NO_POKEMON = 2; 12 | ERROR_CANNOT_USE = 3; 13 | ERROR_DEPLOYED_TO_FORT = 4; 14 | } 15 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/UseItemReviveResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | message UseItemReviveResponse { 5 | .POGOProtos.Networking.Responses.UseItemReviveResponse.Result result = 1; 6 | int32 stamina = 2; 7 | 8 | enum Result { 9 | UNSET = 0; 10 | SUCCESS = 1; 11 | ERROR_NO_POKEMON = 2; 12 | ERROR_CANNOT_USE = 3; 13 | ERROR_DEPLOYED_TO_FORT = 4; 14 | } 15 | } -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/UseItemXpBoostResponse.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | 4 | import "POGOProtos/Inventory/AppliedItems.proto"; 5 | 6 | message UseItemXpBoostResponse { 7 | .POGOProtos.Networking.Responses.UseItemXpBoostResponse.Result result = 1; 8 | .POGOProtos.Inventory.AppliedItems applied_items = 2; 9 | 10 | enum Result { 11 | UNSET = 0; 12 | SUCCESS = 1; 13 | ERROR_INVALID_ITEM_TYPE = 2; 14 | ERROR_XP_BOOST_ALREADY_ACTIVE = 3; 15 | ERROR_NO_ITEMS_REMAINING = 4; 16 | ERROR_LOCATION_UNSET = 5; 17 | } 18 | } 19 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Networking/Responses/base.proto.txt: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Networking.Responses; 3 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/DownloadSettingsAction.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings; 3 | 4 | message DownloadSettingsAction { 5 | string hash = 1; 6 | } 7 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/FortSettings.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings; 3 | 4 | message FortSettings { 5 | double interaction_range_meters = 1; 6 | int32 max_total_deployed_pokemon = 2; 7 | int32 max_player_deployed_pokemon = 3; 8 | double deploy_stamina_multiplier = 4; 9 | double deploy_attack_multiplier = 5; 10 | double far_interaction_range_meters = 6; 11 | } 12 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/GlobalSettings.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings; 3 | 4 | import "POGOProtos/Settings/FortSettings.proto"; 5 | import "POGOProtos/Settings/MapSettings.proto"; 6 | import "POGOProtos/Settings/LevelSettings.proto"; 7 | import "POGOProtos/Settings/InventorySettings.proto"; 8 | 9 | message GlobalSettings { 10 | .POGOProtos.Settings.FortSettings fort_settings = 2; 11 | .POGOProtos.Settings.MapSettings map_settings = 3; 12 | .POGOProtos.Settings.LevelSettings level_settings = 4; 13 | .POGOProtos.Settings.InventorySettings inventory_settings = 5; 14 | string minimum_client_version = 6; 15 | } 16 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/InventorySettings.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings; 3 | 4 | message InventorySettings { 5 | int32 max_pokemon = 1; 6 | int32 max_bag_items = 2; 7 | int32 base_pokemon = 3; 8 | int32 base_bag_items = 4; 9 | int32 base_eggs = 5; 10 | } 11 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/LevelSettings.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings; 3 | 4 | message LevelSettings { 5 | double trainer_cp_modifier = 2; 6 | double trainer_difficulty_modifier = 3; 7 | } 8 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/MapSettings.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings; 3 | 4 | message MapSettings { 5 | double pokemon_visible_range = 1; 6 | double poke_nav_range_meters = 2; 7 | double encounter_range_meters = 3; 8 | float get_map_objects_min_refresh_seconds = 4; 9 | float get_map_objects_max_refresh_seconds = 5; 10 | float get_map_objects_min_distance_meters = 6; 11 | string google_maps_api_key = 7; 12 | } 13 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/Master/BadgeSettings.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings.Master; 3 | 4 | import "POGOProtos/Enums/BadgeType.proto"; 5 | 6 | message BadgeSettings { 7 | .POGOProtos.Enums.BadgeType badge_type = 1; 8 | int32 badge_rank = 2; 9 | repeated int32 targets = 3; 10 | } 11 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/Master/CameraSettings.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings.Master; 3 | 4 | import "POGOProtos/Enums/CameraTarget.proto"; 5 | import "POGOProtos/Enums/CameraInterpolation.proto"; 6 | 7 | message CameraSettings { 8 | string next_camera = 1; 9 | repeated .POGOProtos.Enums.CameraInterpolation interpolation = 2; 10 | repeated .POGOProtos.Enums.CameraTarget target_type = 3; 11 | repeated float ease_in_speed = 4; 12 | repeated float east_out_speed = 5; 13 | repeated float duration_seconds = 6; 14 | repeated float wait_seconds = 7; 15 | repeated float transition_seconds = 8; 16 | repeated float angle_degree = 9; 17 | repeated float angle_offset_degree = 10; 18 | repeated float pitch_degree = 11; 19 | repeated float pitch_offset_degree = 12; 20 | repeated float roll_degree = 13; 21 | repeated float distance_meters = 14; 22 | repeated float height_percent = 15; 23 | repeated float vert_ctr_ratio = 16; 24 | } 25 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/Master/EncounterSettings.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings.Master; 3 | 4 | message EncounterSettings { 5 | float spin_bonus_threshold = 1; 6 | float excellent_throw_threshold = 2; 7 | float great_throw_threshold = 3; 8 | float nice_throw_threshold = 4; 9 | int32 milestone_threshold = 5; 10 | } 11 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/Master/EquippedBadgeSettings.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings.Master; 3 | 4 | message EquippedBadgeSettings { 5 | int64 equip_badge_cooldown_ms = 1; 6 | repeated float catch_probability_bonus = 2; 7 | repeated float flee_probability_bonus = 3; 8 | } 9 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/Master/GymBattleSettings.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings.Master; 3 | 4 | message GymBattleSettings { 5 | float energy_per_sec = 1; 6 | float dodge_energy_cost = 2; 7 | float retarget_seconds = 3; 8 | float enemy_attack_interval = 4; 9 | float attack_server_interval = 5; 10 | float round_duration_seconds = 6; 11 | float bonus_time_per_ally_seconds = 7; 12 | int32 maximum_attackers_per_battle = 8; 13 | float same_type_attack_bonus_multiplier = 9; 14 | int32 maximum_energy = 10; 15 | float energy_delta_per_health_lost = 11; 16 | int32 dodge_duration_ms = 12; 17 | int32 minimum_player_level = 13; 18 | int32 swap_duration_ms = 14; 19 | } 20 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/Master/GymLevelSettings.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings.Master; 3 | 4 | message GymLevelSettings { 5 | repeated int32 required_experience = 1; 6 | repeated int32 leader_slots = 2; 7 | repeated int32 trainer_slots = 3; 8 | repeated int32 search_roll_bonus = 4; 9 | } 10 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/Master/IapItemDisplay.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings.Master; 3 | 4 | import "POGOProtos/Enums/IapItemCategory.proto"; 5 | import "POGOProtos/Inventory/Item/ItemId.proto"; 6 | 7 | message IapItemDisplay { 8 | string sku = 1; 9 | .POGOProtos.Enums.HoloIapItemCategory category = 2; 10 | int32 sort_order = 3; 11 | repeated .POGOProtos.Inventory.Item.ItemId item_ids = 4; 12 | repeated int32 counts = 5; 13 | } 14 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/Master/IapSettings.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings.Master; 3 | 4 | message IapSettings { 5 | int32 daily_bonus_coins = 1; 6 | repeated int32 daily_defender_bonus_per_pokemon = 2; 7 | int32 daily_defender_bonus_max_defenders = 3; 8 | repeated string daily_defender_bonus_currency = 4; 9 | int64 min_time_between_claims_ms = 5; 10 | bool daily_bonus_enabled = 6; 11 | bool daily_defender_bonus_enabled = 7; 12 | } 13 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/Master/Item/BattleAttributes.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings.Master.Item; 3 | 4 | message BattleAttributes { 5 | float sta_percent = 1; 6 | } 7 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/Master/Item/EggIncubatorAttributes.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings.Master.Item; 3 | 4 | import "POGOProtos/Inventory/EggIncubatorType.proto"; 5 | 6 | message EggIncubatorAttributes { 7 | .POGOProtos.Inventory.EggIncubatorType incubator_type = 1; 8 | int32 uses = 2; 9 | float distance_multiplier = 3; 10 | } 11 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/Master/Item/ExperienceBoostAttributes.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings.Master.Item; 3 | 4 | message ExperienceBoostAttributes { 5 | float xp_multiplier = 1; 6 | int32 boost_duration_ms = 2; 7 | } 8 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/Master/Item/FoodAttributes.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings.Master.Item; 3 | 4 | import "POGOProtos/Enums/ItemEffect.proto"; 5 | 6 | message FoodAttributes { 7 | repeated POGOProtos.Enums.ItemEffect item_effect = 1; 8 | repeated float item_effect_percent = 2; 9 | float growth_percent = 3; 10 | } 11 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/Master/Item/FortModifierAttributes.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings.Master.Item; 3 | 4 | message FortModifierAttributes { 5 | int32 modifier_lifetime_seconds = 1; 6 | int32 troy_disk_num_pokemon_spawned = 2; 7 | } 8 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/Master/Item/IncenseAttributes.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings.Master.Item; 3 | 4 | import "POGOProtos/Enums/PokemonType.proto"; 5 | 6 | message IncenseAttributes { 7 | int32 incense_lifetime_seconds = 1; 8 | repeated .POGOProtos.Enums.PokemonType pokemon_type = 2; 9 | float pokemon_incense_type_probability = 3; 10 | int32 standing_time_between_encounters_seconds = 4; 11 | int32 moving_time_between_encounter_seconds = 5; 12 | int32 distance_required_for_shorter_interval_meters = 6; 13 | int32 pokemon_attracted_length_sec = 7; 14 | } 15 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/Master/Item/InventoryUpgradeAttributes.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings.Master.Item; 3 | 4 | import "POGOProtos/Inventory/InventoryUpgradeType.proto"; 5 | 6 | message InventoryUpgradeAttributes { 7 | int32 additional_storage = 1; 8 | .POGOProtos.Inventory.InventoryUpgradeType upgrade_type = 2; 9 | } 10 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/Master/Item/PokeballAttributes.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings.Master.Item; 3 | 4 | import "POGOProtos/Enums/ItemEffect.proto"; 5 | 6 | message PokeballAttributes { 7 | .POGOProtos.Enums.ItemEffect item_effect = 1; 8 | float capture_multi = 2; 9 | float capture_multi_effect = 3; 10 | float item_effect_mod = 4; 11 | } 12 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/Master/Item/PotionAttributes.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings.Master.Item; 3 | 4 | message PotionAttributes { 5 | float sta_percent = 1; 6 | int32 sta_amount = 2; 7 | } 8 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/Master/Item/ReviveAttributes.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings.Master.Item; 3 | 4 | message ReviveAttributes { 5 | float sta_percent = 1; 6 | } 7 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/Master/ItemSettings.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings.Master; 3 | 4 | import "POGOProtos/Enums/ItemCategory.proto"; 5 | import "POGOProtos/Inventory/Item/ItemId.proto"; 6 | import "POGOProtos/Inventory/Item/ItemType.proto"; 7 | 8 | import "POGOProtos/Settings/Master/Item/FoodAttributes.proto"; 9 | import "POGOProtos/Settings/Master/Item/PotionAttributes.proto"; 10 | import "POGOProtos/Settings/Master/Item/ReviveAttributes.proto"; 11 | import "POGOProtos/Settings/Master/Item/BattleAttributes.proto"; 12 | import "POGOProtos/Settings/Master/Item/IncenseAttributes.proto"; 13 | import "POGOProtos/Settings/Master/Item/PokeballAttributes.proto"; 14 | import "POGOProtos/Settings/Master/Item/FortModifierAttributes.proto"; 15 | import "POGOProtos/Settings/Master/Item/EggIncubatorAttributes.proto"; 16 | import "POGOProtos/Settings/Master/Item/ExperienceBoostAttributes.proto"; 17 | import "POGOProtos/Settings/Master/Item/InventoryUpgradeAttributes.proto"; 18 | 19 | message ItemSettings { 20 | .POGOProtos.Inventory.Item.ItemId item_id = 1; 21 | .POGOProtos.Inventory.Item.ItemType item_type = 2; 22 | .POGOProtos.Enums.ItemCategory category = 3; 23 | float drop_freq = 4; 24 | int32 drop_trainer_level = 5; 25 | 26 | // One of the below attributes will be set in the response, the others will be null. 27 | 28 | .POGOProtos.Settings.Master.Item.PokeballAttributes pokeball = 6; 29 | .POGOProtos.Settings.Master.Item.PotionAttributes potion = 7; 30 | .POGOProtos.Settings.Master.Item.ReviveAttributes revive = 8; 31 | .POGOProtos.Settings.Master.Item.BattleAttributes battle = 9; 32 | .POGOProtos.Settings.Master.Item.FoodAttributes food = 10; 33 | .POGOProtos.Settings.Master.Item.InventoryUpgradeAttributes inventory_upgrade = 11; 34 | .POGOProtos.Settings.Master.Item.ExperienceBoostAttributes xp_boost = 12; 35 | .POGOProtos.Settings.Master.Item.IncenseAttributes incense = 13; 36 | .POGOProtos.Settings.Master.Item.EggIncubatorAttributes egg_incubator = 14; 37 | .POGOProtos.Settings.Master.Item.FortModifierAttributes fort_modifier = 15; 38 | } 39 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/Master/MoveSequenceSettings.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings.Master; 3 | 4 | message MoveSequenceSettings { 5 | repeated string sequence = 1; 6 | } 7 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/Master/MoveSettings.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings.Master; 3 | 4 | import "POGOProtos/Enums/PokemonType.proto"; 5 | import "POGOProtos/Enums/PokemonMove.proto"; 6 | 7 | message MoveSettings { 8 | .POGOProtos.Enums.PokemonMove movement_id = 1; 9 | int32 animation_id = 2; 10 | .POGOProtos.Enums.PokemonType pokemon_type = 3; 11 | float power = 4; 12 | float accuracy_chance = 5; 13 | float critical_chance = 6; 14 | float heal_scalar = 7; 15 | float stamina_loss_scalar = 8; 16 | int32 trainer_level_min = 9; 17 | int32 trainer_level_max = 10; 18 | string vfx_name = 11; 19 | int32 duration_ms = 12; 20 | int32 damage_window_start_ms = 13; 21 | int32 damage_window_end_ms = 14; 22 | int32 energy_delta = 15; 23 | } 24 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/Master/PlayerLevelSettings.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings.Master; 3 | 4 | message PlayerLevelSettings { 5 | repeated int32 rank_num = 1; 6 | repeated int32 required_experience = 2; 7 | repeated float cp_multiplier = 3; 8 | int32 max_egg_player_level = 4; 9 | int32 max_encounter_player_level = 5; 10 | } 11 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/Master/Pokemon/CameraAttributes.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings.Master.Pokemon; 3 | 4 | message CameraAttributes { 5 | float disk_radius_m = 1; 6 | float cylinder_radius_m = 2; 7 | float cylinder_height_m = 3; 8 | float cylinder_ground_m = 4; 9 | float shoulder_mode_scale = 5; 10 | } 11 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/Master/Pokemon/EncounterAttributes.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings.Master.Pokemon; 3 | 4 | import "POGOProtos/Enums/PokemonMovementType.proto"; 5 | 6 | message EncounterAttributes { 7 | float base_capture_rate = 1; 8 | float base_flee_rate = 2; 9 | float collision_radius_m = 3; 10 | float collision_height_m = 4; 11 | float collision_head_radius_m = 5; 12 | .POGOProtos.Enums.PokemonMovementType movement_type = 6; 13 | float movement_timer_s = 7; 14 | float jump_time_s = 8; 15 | float attack_timer_s = 9; 16 | } 17 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/Master/Pokemon/StatsAttributes.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings.Master.Pokemon; 3 | 4 | message StatsAttributes { 5 | int32 base_stamina = 1; 6 | int32 base_attack = 2; 7 | int32 base_defense = 3; 8 | int32 dodge_energy_delta = 8; 9 | } 10 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/Master/PokemonSettings.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings.Master; 3 | 4 | import "POGOProtos/Enums/PokemonId.proto"; 5 | import "POGOProtos/Enums/PokemonRarity.proto"; 6 | import "POGOProtos/Enums/PokemonType.proto"; 7 | import "POGOProtos/Enums/PokemonMove.proto"; 8 | import "POGOProtos/Enums/PokemonFamilyId.proto"; 9 | import "POGOProtos/Settings/Master/Pokemon/StatsAttributes.proto"; 10 | import "POGOProtos/Settings/Master/Pokemon/CameraAttributes.proto"; 11 | import "POGOProtos/Settings/Master/Pokemon/EncounterAttributes.proto"; 12 | 13 | message PokemonSettings { 14 | .POGOProtos.Enums.PokemonId pokemon_id = 1; 15 | float model_scale = 3; 16 | .POGOProtos.Enums.PokemonType type = 4; 17 | .POGOProtos.Enums.PokemonType type_2 = 5; 18 | .POGOProtos.Settings.Master.Pokemon.CameraAttributes camera = 6; 19 | .POGOProtos.Settings.Master.Pokemon.EncounterAttributes encounter = 7; 20 | .POGOProtos.Settings.Master.Pokemon.StatsAttributes stats = 8; 21 | repeated .POGOProtos.Enums.PokemonMove quick_moves = 9; 22 | repeated .POGOProtos.Enums.PokemonMove cinematic_moves = 10; 23 | repeated float animation_time = 11; 24 | repeated .POGOProtos.Enums.PokemonId evolution_ids = 12; 25 | int32 evolution_pips = 13; 26 | .POGOProtos.Enums.PokemonRarity rarity = 14; 27 | float pokedex_height_m = 15; 28 | float pokedex_weight_kg = 16; 29 | .POGOProtos.Enums.PokemonId parent_pokemon_id = 17; 30 | float height_std_dev = 18; 31 | float weight_std_dev = 19; 32 | float km_distance_to_hatch = 20; 33 | .POGOProtos.Enums.PokemonFamilyId family_id = 21; 34 | int32 candy_to_evolve = 22; 35 | } 36 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/Master/PokemonUpgradeSettings.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings.Master; 3 | 4 | message PokemonUpgradeSettings { 5 | int32 upgrades_per_level = 1; 6 | int32 allowed_levels_above_player = 2; 7 | repeated int32 candy_cost = 3; 8 | repeated int32 stardust_cost = 4; 9 | } 10 | -------------------------------------------------------------------------------- /pgoapi/protos/POGOProtos_src/Settings/Master/TypeEffectiveSettings.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | package POGOProtos.Settings.Master; 3 | 4 | import "POGOProtos/Enums/PokemonType.proto"; 5 | 6 | message TypeEffectiveSettings { 7 | repeated float attack_scalar = 1; 8 | .POGOProtos.Enums.PokemonType attack_type = 2; 9 | } -------------------------------------------------------------------------------- /pgoapi/protos/README: -------------------------------------------------------------------------------- 1 | POGOProtos by AeonLucid - https://github.com/AeonLucid/POGOProtos 2 | 3 | commit: 333e54707ca221324c6b9eedb6a7bc2fcae02270 (#176) 4 | https://github.com/AeonLucid/POGOProtos/tree/333e54707ca221324c6b9eedb6a7bc2fcae02270 5 | -------------------------------------------------------------------------------- /pgoapi/protos/Signature.proto: -------------------------------------------------------------------------------- 1 | syntax = "proto3"; 2 | 3 | message Signature { 4 | 5 | message LocationFix { 6 | string provider = 1; // "network", "gps", "fused", possibly others 7 | uint64 timestamp_since_start = 2; // in ms 8 | float latitude = 13; 9 | float longitude = 14; 10 | 11 | // ??? shows up in struct, dunno where these go 12 | // float device_speed; 13 | // float device_course; 14 | float horizontal_accuracy = 20; // iOS only? (range seems to be -1 to +1) 15 | float altitude = 21; 16 | float vertical_accuracy = 22; // iOS only? (range seems to be ~10-12) 17 | uint64 provider_status = 26; // Usually 3 (possibly GPS status: 1 = no fix, 2 = acquiring/inaccurate, 3 = fix acquired) 18 | // On iOS there are some LocationFixes with unk26=1 and everything else empty 19 | uint32 floor = 27; // No idea what this is, seems to be optional 20 | uint64 location_type = 28; // Always 1 (if there is data at all) 21 | } 22 | 23 | // don't really care about this since we're not using it 24 | message AndroidGpsInfo { 25 | uint64 time_to_fix = 1; 26 | repeated int32 satellites_prn = 2; 27 | repeated float snr = 3; 28 | repeated float azimuth = 4; 29 | repeated float elevation = 5; 30 | repeated bool has_almanac = 6; 31 | repeated bool has_ephemeris = 7; 32 | repeated bool used_in_fix = 8; 33 | } 34 | 35 | message SensorInfo { 36 | uint64 timestamp_snapshot = 1; // in ms 37 | double magnetometer_x = 3; 38 | double magnetometer_y = 4; 39 | double magnetometer_z = 5; 40 | double angle_normalized_x = 6; 41 | double angle_normalized_y = 7; 42 | double angle_normalized_z = 8; 43 | double accel_raw_x = 10; 44 | double accel_raw_y = 11; 45 | double accel_raw_z = 12; 46 | double gyroscope_raw_x = 13; 47 | double gyroscope_raw_y = 14; 48 | double gyroscope_raw_z = 15; 49 | double accel_normalized_x = 16; 50 | double accel_normalized_y = 17; 51 | double accel_normalized_z = 18; 52 | uint64 accelerometer_axes = 19; // Always 3 53 | } 54 | 55 | message DeviceInfo { 56 | string device_id = 1; // Hex string 57 | string android_board_name = 2; 58 | string android_bootloader = 3; 59 | string device_brand = 4; // On Android: product.brand 60 | string device_model = 5; // On Android: product.device 61 | string device_model_identifier = 6; // Android only, build.display.id 62 | string device_model_boot = 7; // On Android: boot.hardware 63 | string hardware_manufacturer = 8; // On Android: product.manufacturer 64 | string hardware_model = 9; // On Android: product.model 65 | string firmware_brand = 10; // On Android: product.name, on iOS: "iPhone OS" 66 | string firmware_tags = 12; // Android only, build.tags 67 | string firmware_type = 13; // On Android: build.type, on iOS instead: iOS version 68 | string firmware_fingerprint = 14; // Android only, build.fingerprint 69 | } 70 | 71 | message ActivityStatus { 72 | // all of these had 1 as their value 73 | uint64 start_time_ms = 1; 74 | bool unknown_status = 2; 75 | bool walking = 3; 76 | bool running = 4; 77 | bool stationary = 5; 78 | bool automotive = 6; 79 | bool tilting = 7; 80 | bool cycling = 8; 81 | bytes status = 9; 82 | } 83 | 84 | uint64 timestamp_since_start = 2; // in ms 85 | repeated LocationFix location_fix = 4; 86 | AndroidGpsInfo gps_info = 5; 87 | SensorInfo sensor_info = 7; 88 | DeviceInfo device_info = 8; 89 | ActivityStatus activity_status = 9; 90 | uint32 location_hash1 = 10; // Location1 hashed based on the auth_token - xxHash32 91 | uint32 location_hash2 = 20; // Location2 hashed based on the auth_token - xxHash32 92 | bytes unk22 = 22; // possibly replay check. Generation unknown but pointed to by 0001B8614 93 | uint64 timestamp = 23; // epoch timestamp in ms 94 | repeated uint64 request_hash = 24; // hashes of each request message in a hashArray - xxhash64 95 | 96 | // Addresses for the corresponding hash functions: 97 | // xxHash32 00054D28 98 | // xxhash64 000546C8 - Feeds into 00053D40 99 | 100 | } 101 | -------------------------------------------------------------------------------- /pgoapi/protos/__init__.py: -------------------------------------------------------------------------------- 1 | 2 | import os 3 | import sys 4 | 5 | # add directory of this file to PATH, so that the package will be found 6 | sys.path.append(os.path.dirname(os.path.realpath(__file__))) 7 | 8 | __title__ = 'pgoapi_protos_POGOProtos' 9 | __version__ = '1.1.6' 10 | 11 | __commit__ = '333e54707ca221324c6b9eedb6a7bc2fcae02270' 12 | __commit_tree__ = 'https://github.com/AeonLucid/POGOProtos/tree/333e54707ca221324c6b9eedb6a7bc2fcae02270' 13 | __author__ = 'AeonLucid' 14 | __copyright__ = 'Copyright (c) 2016 AeonLucid ' -------------------------------------------------------------------------------- /pgoapi/utilities.py: -------------------------------------------------------------------------------- 1 | """ 2 | pgoapi - Pokemon Go API 3 | Copyright (c) 2016 tjado 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, 16 | EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF 17 | MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. 18 | IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, 19 | DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR 20 | OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE 21 | OR OTHER DEALINGS IN THE SOFTWARE. 22 | 23 | Author: tjado 24 | """ 25 | 26 | import re 27 | import time 28 | import struct 29 | import ctypes 30 | import xxhash 31 | import logging 32 | 33 | from json import JSONEncoder 34 | from binascii import unhexlify 35 | 36 | # other stuff 37 | from google.protobuf.internal import encoder 38 | from geopy.geocoders import GoogleV3 39 | from s2sphere import LatLng, Angle, Cap, RegionCoverer, math 40 | 41 | log = logging.getLogger(__name__) 42 | 43 | def f2i(float): 44 | return struct.unpack(' 1500: 76 | radius = 1500 # radius = 1500 is max allowed by the server 77 | region = Cap.from_axis_angle(LatLng.from_degrees(lat, long).to_point(), Angle.from_degrees(360*radius/(2*math.pi*EARTH_RADIUS))) 78 | coverer = RegionCoverer() 79 | coverer.min_level = 15 80 | coverer.max_level = 15 81 | cells = coverer.get_covering(region) 82 | cells = cells[:100] # len(cells) = 100 is max allowed by the server 83 | return sorted([x.id() for x in cells]) 84 | 85 | def get_time(ms = False): 86 | if ms: 87 | return int(round(time.time() * 1000)) 88 | else: 89 | return int(round(time.time())) 90 | 91 | def get_format_time_diff(low, high, ms = True): 92 | diff = (high - low) 93 | if ms: 94 | m, s = divmod(diff / 1000, 60) 95 | else: 96 | m, s = divmod(diff, 60) 97 | h, m = divmod(m, 60) 98 | 99 | return (h, m, s) 100 | 101 | def parse_api_endpoint(api_url): 102 | if not api_url.startswith("https"): 103 | api_url = 'https://{}/rpc'.format(api_url) 104 | 105 | return api_url 106 | 107 | 108 | class Rand48(object): 109 | def __init__(self, seed): 110 | self.n = seed 111 | def seed(self, seed): 112 | self.n = seed 113 | def srand(self, seed): 114 | self.n = (seed << 16) + 0x330e 115 | def next(self): 116 | self.n = (25214903917 * self.n + 11) & (2**48 - 1) 117 | return self.n 118 | def drand(self): 119 | return self.next() / 2**48 120 | def lrand(self): 121 | return self.next() >> 17 122 | def mrand(self): 123 | n = self.next() >> 16 124 | if n & (1 << 31): 125 | n -= 1 << 32 126 | return n 127 | 128 | def long_to_bytes (val, endianness='big'): 129 | """ 130 | Use :ref:`string formatting` and :func:`~binascii.unhexlify` to 131 | convert ``val``, a :func:`long`, to a byte :func:`str`. 132 | 133 | :param long val: The value to pack 134 | 135 | :param str endianness: The endianness of the result. ``'big'`` for 136 | big-endian, ``'little'`` for little-endian. 137 | 138 | If you want byte- and word-ordering to differ, you're on your own. 139 | 140 | Using :ref:`string formatting` lets us use Python's C innards. 141 | """ 142 | 143 | # one (1) hex digit per four (4) bits 144 | width = val.bit_length() 145 | 146 | # unhexlify wants an even multiple of eight (8) bits, but we don't 147 | # want more digits than we need (hence the ternary-ish 'or') 148 | width += 8 - ((width % 8) or 8) 149 | 150 | # format width specifier: four (4) bits per hex digit 151 | fmt = '%%0%dx' % (width // 4) 152 | 153 | # prepend zero (0) to the width, to zero-pad the output 154 | s = unhexlify(fmt % val) 155 | 156 | if endianness == 'little': 157 | # see http://stackoverflow.com/a/931095/309233 158 | s = s[::-1] 159 | 160 | return s 161 | 162 | 163 | def generateLocation1(authticket, lat, lng, alt): 164 | firstHash = xxhash.xxh32(authticket, seed=0x1B845238).intdigest() 165 | locationBytes = d2h(lat) + d2h(lng) + d2h(alt) 166 | if not alt: 167 | alt = "\x00\x00\x00\x00\x00\x00\x00\x00" 168 | return xxhash.xxh32(locationBytes, seed=firstHash).intdigest() 169 | 170 | def generateLocation2(lat, lng, alt): 171 | locationBytes = d2h(lat) + d2h(lng) + d2h(alt) 172 | if not alt: 173 | alt = "\x00\x00\x00\x00\x00\x00\x00\x00" 174 | return xxhash.xxh32(locationBytes, seed=0x1B845238).intdigest() #Hash of location using static seed 0x1B845238 175 | 176 | 177 | def generateRequestHash(authticket, request): 178 | firstHash = xxhash.xxh64(authticket, seed=0x1B845238).intdigest() 179 | return xxhash.xxh64(request, seed=firstHash).intdigest() 180 | 181 | 182 | def d2h(f): 183 | hex_str = f2h(f)[2:].replace('L','') 184 | hex_str = ("0" * (len(hex_str) % 2)) + hex_str 185 | return unhexlify(hex_str) 186 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | protobuf>=3.0.0a3 2 | requests==2.10.0 3 | s2sphere==0.2.4 4 | gpsoauth==0.3.0 5 | protobuf-to-dict==0.1.0 6 | geopy==1.11.0 7 | geojson 8 | six 9 | xxhash 10 | -------------------------------------------------------------------------------- /static/blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TBTerra/spawnScan/06e921ea7f692234ee5c379938a15f6b94f17cfe/static/blue.png -------------------------------------------------------------------------------- /static/green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TBTerra/spawnScan/06e921ea7f692234ee5c379938a15f6b94f17cfe/static/green.png -------------------------------------------------------------------------------- /static/grey.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TBTerra/spawnScan/06e921ea7f692234ee5c379938a15f6b94f17cfe/static/grey.png -------------------------------------------------------------------------------- /static/gym.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TBTerra/spawnScan/06e921ea7f692234ee5c379938a15f6b94f17cfe/static/gym.png -------------------------------------------------------------------------------- /static/orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TBTerra/spawnScan/06e921ea7f692234ee5c379938a15f6b94f17cfe/static/orange.png -------------------------------------------------------------------------------- /static/pokestop.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/TBTerra/spawnScan/06e921ea7f692234ee5c379938a15f6b94f17cfe/static/pokestop.png -------------------------------------------------------------------------------- /tos.py: -------------------------------------------------------------------------------- 1 | import json 2 | import logging 3 | import time 4 | from pgoapi import pgoapi 5 | 6 | with open('config.json') as file: 7 | config = json.load(file) 8 | 9 | def accept_tos(username, password): 10 | api = pgoapi.PGoApi() 11 | api.set_position(0.0, 0.0, 0.0) 12 | api.login(config['auth_service'], username, password) 13 | time.sleep(2) 14 | req = api.create_request() 15 | req.mark_tutorial_complete(tutorials_completed = 0, send_marketing_emails = False, send_push_notifications = False) 16 | response = req.call() 17 | 18 | for user in config['users']: 19 | accept_tos(user['username'], user['password']) 20 | print '{} done'.format(user['username']) -------------------------------------------------------------------------------- /utils.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python2 2 | # -*- coding: utf-8 -*- 3 | 4 | import os 5 | import sys 6 | import platform 7 | 8 | def get_encryption_lib_path(): 9 | lib_folder_path = os.path.join( 10 | os.path.dirname(__file__), "lib") 11 | lib_path = "" 12 | # win32 doesn't mean necessarily 32 bits 13 | if sys.platform == "win32": 14 | if platform.architecture()[0] == '64bit': 15 | lib_path = os.path.join(lib_folder_path, "encrypt64bit.dll") 16 | else: 17 | lib_path = os.path.join(lib_folder_path, "encrypt32bit.dll") 18 | 19 | elif sys.platform == "darwin": 20 | lib_path = os.path.join(lib_folder_path, "libencrypt-osx-64.so") 21 | 22 | elif os.uname()[4].startswith("arm") and platform.architecture()[0] == '32bit': 23 | lib_path = os.path.join(lib_folder_path, "libencrypt-linux-arm-32.so") 24 | 25 | elif sys.platform.startswith('linux'): 26 | if platform.architecture()[0] == '64bit': 27 | lib_path = os.path.join(lib_folder_path, "libencrypt-linux-x86-64.so") 28 | else: 29 | lib_path = os.path.join(lib_folder_path, "libencrypt-linux-x86-32.so") 30 | 31 | elif sys.platform.startswith('freebsd-10'): 32 | lib_path = os.path.join(lib_folder_path, "libencrypt-freebsd10-64.so") 33 | 34 | else: 35 | err = "Unexpected/unsupported platform '{}'".format(sys.platform) 36 | log.error(err) 37 | raise Exception(err) 38 | 39 | if not os.path.isfile(lib_path): 40 | err = "Could not find {} encryption library {}".format(sys.platform, lib_path) 41 | log.error(err) 42 | raise Exception(err) 43 | 44 | return lib_path 45 | -------------------------------------------------------------------------------- /viewWork.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 15 | 16 | 17 |
18 |

Legend

19 | 70 | 73 | 74 | --------------------------------------------------------------------------------