├── .gitignore ├── Procfile ├── README.md ├── api ├── __init__.py ├── admin.py ├── migrations │ ├── 0001_initial.py │ └── __init__.py ├── models.py ├── pokelocator_api.py ├── pokemon.json ├── pokemon.proto ├── pokemon_pb2.py ├── tests.py ├── urls.py └── views.py ├── app.json ├── custom_middleware.py ├── hackathon ├── __init__.py ├── settings.py ├── urls.py └── wsgi.py ├── manage.py ├── requirements.txt └── static ├── favicon └── favicon.png ├── index.html ├── list.html └── poke ├── .DS_Store.ico ├── 1.png ├── 10.png ├── 100.png ├── 101.png ├── 102.png ├── 103.png ├── 104.png ├── 105.png ├── 106.png ├── 107.png ├── 108.png ├── 109.png ├── 11.png ├── 110.png ├── 111.png ├── 112.png ├── 113.png ├── 114.png ├── 115.png ├── 116.png ├── 117.png ├── 118.png ├── 119.png ├── 12.png ├── 120.png ├── 121.png ├── 122.png ├── 123.png ├── 124.png ├── 125.png ├── 126.png ├── 127.png ├── 128.png ├── 129.png ├── 13.png ├── 130.png ├── 131.png ├── 132.png ├── 133.png ├── 134.png ├── 135.png ├── 136.png ├── 137.png ├── 138.png ├── 139.png ├── 14.png ├── 140.png ├── 141.png ├── 142.png ├── 143.png ├── 144.png ├── 145.png ├── 146.png ├── 147.png ├── 148.png ├── 149.png ├── 15.png ├── 150.png ├── 151.png ├── 16.png ├── 17.png ├── 18.png ├── 19.png ├── 2.png ├── 20.png ├── 21.png ├── 22.png ├── 23.png ├── 24.png ├── 25.png ├── 26.png ├── 27.png ├── 28.png ├── 29.png ├── 3.png ├── 30.png ├── 31.png ├── 32.png ├── 33.png ├── 34.png ├── 35.png ├── 36.png ├── 37.png ├── 38.png ├── 39.png ├── 4.png ├── 40.png ├── 41.png ├── 42.png ├── 43.png ├── 44.png ├── 45.png ├── 46.png ├── 47.png ├── 48.png ├── 49.png ├── 5.png ├── 50.png ├── 51.png ├── 52.png ├── 53.png ├── 54.png ├── 55.png ├── 56.png ├── 57.png ├── 58.png ├── 59.png ├── 6.png ├── 60.png ├── 61.png ├── 62.png ├── 63.png ├── 64.png ├── 65.png ├── 66.png ├── 67.png ├── 68.png ├── 69.png ├── 7.png ├── 70.png ├── 71.png ├── 72.png ├── 73.png ├── 74.png ├── 75.png ├── 76.png ├── 77.png ├── 78.png ├── 79.png ├── 8.png ├── 80.png ├── 81.png ├── 82.png ├── 83.png ├── 84.png ├── 85.png ├── 86.png ├── 87.png ├── 88.png ├── 89.png ├── 9.png ├── 90.png ├── 91.png ├── 92.png ├── 93.png ├── 94.png ├── 95.png ├── 96.png ├── 97.png ├── 98.png ├── 99.png └── trainer.gif /.gitignore: -------------------------------------------------------------------------------- 1 | *.pyc 2 | db.sqlite3 3 | *.swp 4 | access_token.json 5 | -------------------------------------------------------------------------------- /Procfile: -------------------------------------------------------------------------------- 1 | web: gunicorn hackathon.wsgi --log-file=- -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | PokeLocator 2 | =========== 3 | 4 | ![](http://teachthe.net/topclipbox/2016-07-19_03-12-450E0G3L.png) 5 | 6 | The [stabile-mobile](https://github.com/emeth-/pokelocater/tree/stabile-mobile) branch has a stable version of the app, with a smaller scan radius around your immediate area that works great on mobile and heroku. 7 | 8 | The master branch has the latest develop version, which may or may not be stabile. It will have a larger scan radius, but may not work on Heroku due to Heroku's 30 second timeouts. 9 | 10 | ### Things you will need 11 | 12 | [Google Maps API Key](https://developers.google.com/maps/documentation/javascript/get-api-key#key) 13 | 14 | [Pokemon Trainer Club Account](https://club.pokemon.com/us/pokemon-trainer-club/sign-up/) OR Google Account (a throwaway) 15 | 16 | ### Setup on Heroku with button deploy 17 | 18 | - Click the DEPLOY Heroku button below to build the app in the cloud for free (requires Heroku account). 19 | 20 | [![Deploy](https://www.herokucdn.com/deploy/button.png)](https://heroku.com/deploy) 21 | 22 | ### Setup on Heroku manually 23 | ``` 24 | - Install heroku toolbelt (https://toolbelt.heroku.com/) 25 | - Install git 26 | - Install python 2.7.6 27 | - Install pip (e.g. sudo easy_install pip) 28 | ``` 29 | 30 | ``` 31 | 32 | $ sudo pip install -r requirements.txt 33 | $ heroku apps:create pokelocator-demo 34 | $ heroku config:set IS_HEROKU_SERVER=1 35 | $ heroku config:set GMAPS_API_KEY=my_google_maps_api_key 36 | $ heroku config:set PTC_USERNAME=my_pokeclub_username 37 | $ heroku config:set PTC_PASSWORD=my_pokeclub_password 38 | $ heroku config:set GOOG_USERNAME=my_google_username 39 | $ heroku config:set GOOG_PASSWORD=my_google_password 40 | $ git push heroku master 41 | ``` 42 | 43 | Now visit your heroku app url in the browser. You must use `https://` instead of `http://` to allow location tracking (modern browsers block it if not https). 44 | 45 | ### Setup locally 46 | ``` 47 | - Install git 48 | - Install python 2.7.6 49 | - Install pip (e.g. sudo easy_install pip) 50 | ``` 51 | 52 | Setup environmental variables (google how to do it for your system): 53 | ``` 54 | GMAPS_API_KEY=my_google_maps_api_key 55 | PTC_USERNAME=my_pokeclub_username 56 | PTC_PASSWORD=my_pokeclub_password 57 | GOOG_USERNAME=my_google_username 58 | GOOG_PASSWORD=my_google_password 59 | ``` 60 | 61 | ``` 62 | $ sudo pip install -r requirements.txt 63 | $ python manage.py runserver 64 | Visit http://127.0.0.1:8000/ 65 | ``` 66 | 67 | ### Notes 68 | - Note that you will need to view the "https" and not "http" version of your herokuapp for most browsers to allow the code to request your location. 69 | - Get an email from gmail saying someone attempted to login to your account from virginia (or wherever)? That would be this app. If you deployed to heroku, then your heroku cloud instance IS logging into your gmail account. You are not getting hacked, if you are worried you can review the code [here](https://github.com/emeth-/pokelocater/blob/master/api/pokelocator_api.py#L167), please don't send me threats. 70 | 71 | Pokelocator api from: 72 | https://github.com/leegao/pokemongo-api-demo/tree/simulation 73 | -------------------------------------------------------------------------------- /api/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/api/__init__.py -------------------------------------------------------------------------------- /api/admin.py: -------------------------------------------------------------------------------- 1 | from django.contrib import admin 2 | 3 | from api.models import Fish 4 | class FishAdmin(admin.ModelAdmin): 5 | list_display = ('name', 'created') 6 | search_fields = ('name',) 7 | admin.site.register(Fish, FishAdmin) 8 | -------------------------------------------------------------------------------- /api/migrations/0001_initial.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | from __future__ import unicode_literals 3 | 4 | from django.db import models, migrations 5 | 6 | 7 | class Migration(migrations.Migration): 8 | 9 | dependencies = [ 10 | ] 11 | 12 | operations = [ 13 | migrations.CreateModel( 14 | name='Fish', 15 | fields=[ 16 | ('id', models.AutoField(verbose_name='ID', serialize=False, auto_created=True, primary_key=True)), 17 | ('name', models.CharField(default=b'', max_length=255)), 18 | ('created', models.DateTimeField(auto_now_add=True, null=True)), 19 | ('modified', models.DateTimeField(auto_now=True, null=True)), 20 | ], 21 | options={ 22 | 'verbose_name': 'Fish', 23 | 'verbose_name_plural': 'Fishes', 24 | }, 25 | ), 26 | ] 27 | -------------------------------------------------------------------------------- /api/migrations/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/api/migrations/__init__.py -------------------------------------------------------------------------------- /api/models.py: -------------------------------------------------------------------------------- 1 | from django.db import models 2 | 3 | class Fish(models.Model): 4 | name = models.CharField(max_length=255, default='') 5 | 6 | created = models.DateTimeField(auto_now_add=True, blank=True, null=True) 7 | modified = models.DateTimeField(auto_now=True, blank=True, null=True) 8 | 9 | def __unicode__(self): 10 | return u'%s' % (self.name) 11 | 12 | class Meta: 13 | verbose_name = 'Fish' 14 | verbose_name_plural = 'Fishes' 15 | app_label = "api" -------------------------------------------------------------------------------- /api/pokelocator_api.py: -------------------------------------------------------------------------------- 1 | # -*- coding: utf-8 -*- 2 | import requests 3 | import re 4 | import struct 5 | import json 6 | import argparse 7 | import pokemon_pb2 8 | import time 9 | import os 10 | import math 11 | from collections import OrderedDict 12 | 13 | from google.protobuf.internal import encoder 14 | 15 | from datetime import datetime 16 | from geopy.geocoders import GoogleV3 17 | from requests.packages.urllib3.exceptions import InsecureRequestWarning 18 | requests.packages.urllib3.disable_warnings(InsecureRequestWarning) 19 | from s2sphere import * 20 | 21 | def encode(cellid): 22 | output = [] 23 | encoder._VarintEncoder()(output.append, cellid) 24 | return ''.join(output) 25 | 26 | def getNeighbors(): 27 | origin = CellId.from_lat_lng(LatLng.from_degrees(FLOAT_LAT, FLOAT_LONG)).parent(15) 28 | 29 | walk = [origin.id()] 30 | 31 | #get the 8 neighboring cells 32 | path = [90,180,270,270,0,0,90,90] 33 | 34 | origin_lat = FLOAT_LAT 35 | origin_lng = FLOAT_LONG 36 | 37 | R = 6379.1 #earth 38 | for direction in path: 39 | bearing = math.radians(direction) 40 | #choose a distance based on direction to get us into the adjoining cell 41 | if direction in [0, 180]: 42 | distance = 0.305 #approx distance in km from centroid of cell to next NS cell centroid 43 | elif direction in [90,270]: 44 | distance = 0.213 #approx distance in km from centroid of cell to next EW cell centroid 45 | 46 | lat1 = math.radians(origin_lat) 47 | lng1 = math.radians(origin_lng) 48 | 49 | lat2 = math.asin( math.sin(lat1)*math.cos(distance/R) + 50 | math.cos(lat1)*math.sin(distance/R)*math.cos(bearing)) 51 | lng2 = lng1 + math.atan2(math.sin(bearing)*math.sin(distance/R)*math.cos(lat1), 52 | math.cos(distance/R)-math.sin(lat1)*math.sin(lat2)) 53 | 54 | lat2 = math.degrees(lat2) 55 | lng2 = math.degrees(lng2) 56 | 57 | new_cell = CellId.from_lat_lng(LatLng.from_degrees(lat2, lng2)).parent(15) 58 | walk.append(new_cell.id()) 59 | 60 | origin_lat = lat2 61 | origin_lng = lng2 62 | 63 | #be sure that whatever walk length is here that you set the length of f2 in the request to be the same 64 | return walk 65 | 66 | 67 | API_URL = 'https://pgorelease.nianticlabs.com/plfe/rpc' 68 | LOGIN_URL = 'https://sso.pokemon.com/sso/login?service=https%3A%2F%2Fsso.pokemon.com%2Fsso%2Foauth2.0%2FcallbackAuthorize' 69 | LOGIN_OAUTH = 'https://sso.pokemon.com/sso/oauth2.0/accessToken' 70 | 71 | SESSION = requests.session() 72 | SESSION.headers.update({'User-Agent': 'Niantic App'}) 73 | SESSION.verify = False 74 | 75 | DEBUG = False 76 | COORDS_LATITUDE = 0 77 | COORDS_LONGITUDE = 0 78 | COORDS_ALTITUDE = 0 79 | FLOAT_LAT = 0 80 | FLOAT_LONG = 0 81 | 82 | def f2i(float): 83 | return struct.unpack('= 1: 163 | req1.MergeFrom(reqq[0]) 164 | 165 | req2 = req.requests.add() 166 | req2.type = 126 167 | if len(reqq) >= 2: 168 | req2.MergeFrom(reqq[1]) 169 | 170 | req3 = req.requests.add() 171 | req3.type = 4 172 | if len(reqq) >= 3: 173 | req3.MergeFrom(reqq[2]) 174 | 175 | req4 = req.requests.add() 176 | req4.type = 129 177 | if len(reqq) >= 4: 178 | req4.MergeFrom(reqq[3]) 179 | 180 | req5 = req.requests.add() 181 | req5.type = 5 182 | if len(reqq) >= 5: 183 | req5.MergeFrom(reqq[4]) 184 | 185 | return api_req(login_type, api, access_token, req, useauth = useauth) 186 | 187 | def get_api_endpoint(login_type, access_token, api = API_URL): 188 | p_ret = get_profile(login_type, access_token, api, None) 189 | try: 190 | return ('https://%s/rpc' % p_ret.api_url) 191 | except: 192 | return None 193 | 194 | def login_google(email,passw): 195 | reqses = requests.session() 196 | reqses.headers.update({'User-Agent':'Niantic App'}) 197 | reqses.headers.update({'User-Agent':'Mozilla/5.0 (iPad; CPU OS 8_4 like Mac OS X) AppleWebKit/600.1.4 (KHTML, like Gecko) Mobile/12H143'}) 198 | first='https://accounts.google.com/o/oauth2/auth?client_id=848232511240-73ri3t7plvk96pj4f85uj8otdat2alem.apps.googleusercontent.com&redirect_uri=urn%3Aietf%3Awg%3Aoauth%3A2.0%3Aoob&response_type=code&scope=openid%20email%20https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email' 199 | second='https://accounts.google.com/AccountLoginInfo' 200 | third='https://accounts.google.com/signin/challenge/sl/password' 201 | last='https://accounts.google.com/o/oauth2/token' 202 | r=reqses.get(first) 203 | 204 | GALX= re.search('',r.content) 205 | gxf= re.search('',r.content) 206 | cont = re.search('',r.content) 207 | 208 | GALX=re.sub('.*value="','',GALX.group(0)) 209 | GALX=re.sub('".*','',GALX) 210 | 211 | gxf=re.sub('.*value="','',gxf.group(0)) 212 | gxf=re.sub('".*','',gxf) 213 | 214 | cont=re.sub('.*value="','',cont.group(0)) 215 | cont=re.sub('".*','',cont) 216 | 217 | data1={'Page':'PasswordSeparationSignIn', 218 | 'GALX':GALX, 219 | 'gxf':gxf, 220 | 'continue':cont, 221 | 'ltmpl':'embedded', 222 | 'scc':'1', 223 | 'sarp':'1', 224 | 'oauth':'1', 225 | 'ProfileInformation':'', 226 | '_utf8':'?', 227 | 'bgresponse':'js_disabled', 228 | 'Email':email, 229 | 'signIn':'Next'} 230 | r1=reqses.post(second,data=data1) 231 | 232 | profile= re.search('',r1.content) 233 | gxf= re.search('',r1.content) 234 | gxf=re.sub('.*value="','',gxf.group(0)) 235 | gxf=re.sub('".*','',gxf) 236 | 237 | profile=re.sub('.*value="','',profile.group(0)) 238 | profile=re.sub('".*','',profile) 239 | data2={'Page':'PasswordSeparationSignIn', 240 | 'GALX':GALX, 241 | 'gxf':gxf, 242 | 'continue':cont, 243 | 'ltmpl':'embedded', 244 | 'scc':'1', 245 | 'sarp':'1', 246 | 'oauth':'1', 247 | 'ProfileInformation':profile, 248 | '_utf8':'?', 249 | 'bgresponse':'js_disabled', 250 | 'Email':email, 251 | 'Passwd':passw, 252 | 'signIn':'Sign in', 253 | 'PersistentCookie':'yes'} 254 | r2=reqses.post(third,data=data2) 255 | fourth=r2.history[len(r2.history)-1].headers['Location'].replace('amp%3B','').replace('amp;','') 256 | r3=reqses.get(fourth) 257 | 258 | client_id=re.search('client_id=.*&from_login',fourth) 259 | client_id= re.sub('.*_id=','',client_id.group(0)) 260 | client_id= re.sub('&from.*','',client_id) 261 | 262 | state_wrapper= re.search('',r3.content) 263 | state_wrapper=re.sub('.*state_wrapper" value="','',state_wrapper.group(0)) 264 | state_wrapper=re.sub('">',r3.content) 266 | connect_approve=re.sub('.*action="','',connect_approve.group(0)) 267 | connect_approve=re.sub('" me.*','',connect_approve) 268 | data3 = OrderedDict([('bgresponse', 'js_disabled'), ('_utf8', '?'), ('state_wrapper', state_wrapper), ('submit_access', 'true')]) 269 | r4=reqses.post(connect_approve.replace('amp;',''),data=data3) 270 | code= re.search('',r4.content) 271 | code=re.sub('.*value="','',code.group(0)) 272 | code=re.sub('" style.*','',code) 273 | data4={'client_id':client_id, 274 | 'client_secret':'NCjF1TLi2CcY6t5mt0ZveuL7', 275 | 'code':code, 276 | 'grant_type':'authorization_code', 277 | 'redirect_uri':'urn:ietf:wg:oauth:2.0:oob', 278 | 'scope':'openid email https://www.googleapis.com/auth/userinfo.email'} 279 | r5 = reqses.post(last,data=data4) 280 | return json.loads(r5.content)['id_token'] 281 | 282 | 283 | def login_ptc(username, password): 284 | print('[!] login for: {}'.format(username)) 285 | head = {'User-Agent': 'niantic'} 286 | r = SESSION.get(LOGIN_URL, headers=head) 287 | jdata = json.loads(r.content) 288 | data = { 289 | 'lt': jdata['lt'], 290 | 'execution': jdata['execution'], 291 | '_eventId': 'submit', 292 | 'username': username, 293 | 'password': password 294 | } 295 | r1 = SESSION.post(LOGIN_URL, data=data, headers=head) 296 | 297 | ticket = None 298 | try: 299 | ticket = re.sub('.*ticket=', '', r1.history[0].headers['Location']) 300 | except e: 301 | print(r1.json()['errors'][0]) 302 | return None 303 | 304 | data1 = { 305 | 'client_id': 'mobile-app_pokemon-go', 306 | 'redirect_uri': 'https://www.nianticlabs.com/pokemongo/error', 307 | 'client_secret': 'w8ScCUXJQc6kXKw8FiOhd8Fixzht18Dq3PEVkUCP5ZPxtgyWsbTvWHFLm2wNY0JR', 308 | 'grant_type': 'refresh_token', 309 | 'code': ticket, 310 | } 311 | r2 = SESSION.post(LOGIN_OAUTH, data=data1) 312 | print r2.content 313 | access_token = re.sub('&expires.*', '', r2.content) 314 | access_token = re.sub('.*access_token=', '', access_token) 315 | return access_token 316 | 317 | def heartbeat(api_endpoint, access_token, response, login_type): 318 | m4 = pokemon_pb2.RequestEnvelop.Requests() 319 | m = pokemon_pb2.RequestEnvelop.MessageSingleInt() 320 | m.f1 = int(time.time() * 1000) 321 | m4.message = m.SerializeToString() 322 | m5 = pokemon_pb2.RequestEnvelop.Requests() 323 | m = pokemon_pb2.RequestEnvelop.MessageSingleString() 324 | m.bytes = "05daf51635c82611d1aac95c0b051d3ec088a930" 325 | m5.message = m.SerializeToString() 326 | 327 | walk = sorted(getNeighbors()) 328 | 329 | m1 = pokemon_pb2.RequestEnvelop.Requests() 330 | m1.type = 106 331 | m = pokemon_pb2.RequestEnvelop.MessageQuad() 332 | m.f1 = ''.join(map(encode, walk)) 333 | m.f2 = b'\0' * len(walk) 334 | m.lat = COORDS_LATITUDE 335 | m.long = COORDS_LONGITUDE 336 | m1.message = m.SerializeToString() 337 | response = get_profile( 338 | login_type, 339 | access_token, 340 | api_endpoint, 341 | response.unknown7, 342 | m1, 343 | pokemon_pb2.RequestEnvelop.Requests(), 344 | m4, 345 | pokemon_pb2.RequestEnvelop.Requests(), 346 | m5) 347 | payload = response.payload[0] 348 | heartbeat = pokemon_pb2.ResponseEnvelop.HeartbeatPayload() 349 | heartbeat.ParseFromString(payload) 350 | 351 | return heartbeat 352 | 353 | def main(location=None, direction=None): 354 | 355 | pokemons = json.load(open('api/pokemon.json')) 356 | ptc_username = os.environ.get('PTC_USERNAME', "Invalid") 357 | ptc_password = os.environ.get('PTC_PASSWORD', "Invalid") 358 | 359 | set_location(location) 360 | 361 | login_type = "ptc" 362 | access_token = "fake" 363 | 364 | try: 365 | f = open('access_token.json','r') 366 | cached_token_info = json.loads(f.read()) 367 | f.close() 368 | login_type = cached_token_info['login_type'] 369 | access_token = cached_token_info['access_token'] 370 | except: 371 | pass 372 | 373 | api_endpoint = get_api_endpoint(login_type, access_token) 374 | if api_endpoint == "https:///rpc": 375 | print "BAD CACHE" 376 | 377 | login_type = "ptc" 378 | try: 379 | access_token = login_ptc(ptc_username, ptc_password) 380 | except: 381 | access_token = None 382 | print "access_token", access_token 383 | if access_token is None: 384 | print('[-] Trouble logging in via PTC') 385 | 386 | print('[+] Authentication with google...') 387 | goog_username = os.environ.get('GOOG_USERNAME', "Invalid") 388 | goog_password = os.environ.get('GOOG_PASSWORD', "Invalid") 389 | access_token = login_google(goog_username, goog_password) 390 | login_type = "google" 391 | 392 | f = open('access_token.json','w') 393 | f.write(json.dumps({ 394 | "access_token": access_token, 395 | "login_type": login_type 396 | })) 397 | f.close() 398 | 399 | print('[+] RPC Session Token: {} ...'.format(access_token[:25])) 400 | 401 | api_endpoint = get_api_endpoint(login_type, access_token) 402 | else: 403 | print "Login cache is good!" 404 | 405 | print "api_endpoint", api_endpoint 406 | 407 | if api_endpoint is None: 408 | print('[-] RPC server offline') 409 | return 410 | print('[+] Received API endpoint: {}'.format(api_endpoint)) 411 | 412 | response = get_profile(login_type, access_token, api_endpoint, None) 413 | if response is not None: 414 | print('[+] Login successful') 415 | 416 | payload = response.payload[0] 417 | profile = pokemon_pb2.ResponseEnvelop.ProfilePayload() 418 | profile.ParseFromString(payload) 419 | print('[+] Username: {}'.format(profile.profile.username)) 420 | 421 | creation_time = datetime.fromtimestamp(int(profile.profile.creation_time)/1000) 422 | print('[+] You are playing Pokemon Go since: {}'.format( 423 | creation_time.strftime('%Y-%m-%d %H:%M:%S'), 424 | )) 425 | 426 | for curr in profile.profile.currency: 427 | print('[+] {}: {}'.format(curr.type, curr.amount)) 428 | else: 429 | print('[-] Ooops...') 430 | 431 | nearby_pokes = [] 432 | 433 | original_lat = FLOAT_LAT 434 | original_long = FLOAT_LONG 435 | 436 | if direction == "south": 437 | original_lat = original_lat-0.002 438 | elif direction == "west": 439 | original_long = original_long-0.002 440 | elif direction == "north": 441 | original_lat = original_lat+0.002 442 | elif direction == "east": 443 | original_long = original_long+0.002 444 | 445 | print "Scanning...", original_lat, original_long 446 | 447 | origin = LatLng.from_degrees(original_lat, original_long) 448 | parent = CellId.from_lat_lng(LatLng.from_degrees(original_lat, original_long)).parent(15) 449 | 450 | h = heartbeat(api_endpoint, access_token, response, login_type) 451 | hs = [h] 452 | seen = set([]) 453 | 454 | for c in getNeighbors(): 455 | cell = CellId(c) 456 | cell_ll = cell.to_lat_lng() 457 | set_location_coords(cell_ll.lat().degrees, cell_ll.lng().degrees, 0) 458 | hs.append(heartbeat(api_endpoint, access_token, response, login_type)) 459 | set_location_coords(original_lat, original_long, 0) 460 | 461 | visible = [] 462 | 463 | for hh in hs: 464 | for cell in hh.cells: 465 | for wild in cell.WildPokemon: 466 | hash = wild.SpawnPointId + ':' + str(wild.pokemon.PokemonId) 467 | if (hash not in seen): 468 | visible.append(wild) 469 | seen.add(hash) 470 | 471 | print('') 472 | for cell in h.cells: 473 | if cell.NearbyPokemon: 474 | other = LatLng.from_point(Cell(CellId(cell.S2CellId)).get_center()) 475 | diff = other - origin 476 | # print(diff) 477 | difflat = diff.lat().degrees 478 | difflng = diff.lng().degrees 479 | direction = (('N' if difflat >= 0 else 'S') if abs(difflat) > 1e-4 else '') + (('E' if difflng >= 0 else 'W') if abs(difflng) > 1e-4 else '') 480 | print("Within one step of %s (%sm %s from you):" % (other, int(origin.get_distance(other).radians * 6366468.241830914), direction)) 481 | for poke in cell.NearbyPokemon: 482 | print(' (%s) %s' % (poke.PokedexNumber, pokemons[poke.PokedexNumber - 1]['Name'])) 483 | 484 | print('') 485 | for poke in visible: 486 | other = LatLng.from_degrees(poke.Latitude, poke.Longitude) 487 | diff = other - origin 488 | # print(diff) 489 | difflat = diff.lat().degrees 490 | difflng = diff.lng().degrees 491 | direction = (('N' if difflat >= 0 else 'S') if abs(difflat) > 1e-4 else '') + (('E' if difflng >= 0 else 'W') if abs(difflng) > 1e-4 else '') 492 | 493 | nearby_pokes.append({ 494 | "spawn_point_id": poke.SpawnPointId, 495 | "encounter_id": poke.EncounterId, 496 | "id": poke.pokemon.PokemonId, 497 | "name": pokemons[poke.pokemon.PokemonId - 1]['Name'], 498 | "latitude": poke.Latitude, 499 | "longitude": poke.Longitude, 500 | "time_left": poke.TimeTillHiddenMs / 1000, 501 | "distance": int(origin.get_distance(other).radians * 6366468.241830914), 502 | "direction": direction 503 | }) 504 | 505 | print("(%s) %s is visible at (%s, %s) for %s seconds (%sm %s from you)" % (poke.pokemon.PokemonId, pokemons[poke.pokemon.PokemonId - 1]['Name'], poke.Latitude, poke.Longitude, poke.TimeTillHiddenMs / 1000, int(origin.get_distance(other).radians * 6366468.241830914), direction)) 506 | 507 | print('') 508 | 509 | return nearby_pokes 510 | 511 | if __name__ == '__main__': 512 | main() 513 | 514 | -------------------------------------------------------------------------------- /api/pokemon.json: -------------------------------------------------------------------------------- 1 | [{"Number":"001","Name":"Bulbasaur","Classification":"Seed Pokèmon","Type I":["Grass"],"Type II":["Poison"],"Weaknesses":["Fire","Ice","Flying","Psychic"],"Fast Attack(s)":["Tackle","Vine Whip"],"Weight":"6.9 kg","Height":"0.7 m","Next Evolution Requirements":{"Amount":25,"Name":"Bulbasaur candies"},"Next evolution(s)":[{"Number":"002","Name":"Ivysaur"},{"Number":"003","Name":"Venusaur"}]},{"Number":"002","Name":"Ivysaur","Classification":"Seed Pokèmon","Type I":["Grass"],"Type II":["Poison"],"Weaknesses":["Fire","Ice","Flying","Psychic"],"Fast Attack(s)":["Razor Leaf","Vine Whip"],"Weight":"13.0 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"001","Name":"Bulbasaur"}],"Next Evolution Requirements":{"Amount":100,"Name":"Bulbasaur candies"},"Next evolution(s)":[{"Number":"003","Name":"Venusaur"}]},{"Number":"003","Name":"Venusaur","Classification":"Seed Pokèmon","Type I":["Grass"],"Type II":["Poison"],"Weaknesses":["Fire","Ice","Flying","Psychic"],"Fast Attack(s)":["Razor Leaf","Vine Whip"],"Weight":"100.0 kg","Height":"2.0 m","Previous evolution(s)":[{"Number":"001","Name":"Bulbasaur"},{"Number":"002","Name":"Ivysaur"}]},{"Number":"004","Name":"Charmander","Classification":"Lizard Pokèmon","Type I":["Fire"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":["Ember","Scratch"],"Weight":"8.5 kg","Height":"0.6 m","Next Evolution Requirements":{"Amount":25,"Name":"Charmander candies"},"Next evolution(s)":[{"Number":"005","Name":"Charmeleon"},{"Number":"006","Name":"Charizard"}]},{"Number":"005","Name":"Charmeleon","Classification":"Flame Pokèmon","Type I":["Fire"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":["Ember",""],"Weight":"19.0 kg","Height":"1.1 m","Previous evolution(s)":[{"Number":"004","Name":"Charmander"}],"Next Evolution Requirements":{"Amount":100,"Name":"Charmander candies"},"Next evolution(s)":[{"Number":"006","Name":"Charizard"}]},{"Number":"006","Name":"Charizard","Classification":"Flame Pokèmon","Type I":["Fire"],"Type II":["Flying"],"Weaknesses":["Water","Electric","Rock"],"Fast Attack(s)":["Ember","Wing Attack"],"Weight":"90.5 kg","Height":"1.7 m","Previous evolution(s)":[{"Number":"004","Name":"Charmander"},{"Number":"005","Name":"Charmeleon"}]},{"Number":"007","Name":"Squirtle","Classification":"Tiny Turtle Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Tackle","Bubble"],"Weight":"9.0 kg","Height":"0.5 m","Next Evolution Requirements":{"Amount":25,"Name":"Squirtle candies"},"Next evolution(s)":[{"Number":"008","Name":"Wartortle"},{"Number":"009","Name":"Blastoise"}]},{"Number":"008","Name":"Wartortle","Classification":"Turtle Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Bite","Water Gun"],"Weight":"22.5 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"007","Name":"Squirtle"}],"Next Evolution Requirements":{"Amount":100,"Name":"Squirtle candies"},"Next evolution(s)":[{"Number":"009","Name":"Blastoise"}]},{"Number":"009","Name":"Blastoise","Classification":"Shellfish Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Bite","Water Gun"],"Weight":"85.5 kg","Height":"1.6 m","Previous evolution(s)":[{"Number":"007","Name":"Squirtle"},{"Number":"008","Name":"Wartortle"}]},{"Number":"010","Name":"Caterpie","Classification":"Worm Pokèmon","Type I":["Bug"],"Weaknesses":["Fire","Flying","Rock"],"Fast Attack(s)":["Bug Bite","Tackle"],"Weight":"2.9 kg","Height":"0.3 m","Next Evolution Requirements":{"Amount":12,"Name":"Caterpie candies"},"Next evolution(s)":[{"Number":"011","Name":"Metapod"},{"Number":"012","Name":"Butterfree"}]},{"Number":"011","Name":"Metapod","Classification":"Cocoon Pokèmon","Type I":["Bug"],"Weaknesses":["Fire","Flying","Rock"],"Fast Attack(s)":["Bug Bite","Tackle"],"Weight":"9.9 kg","Height":"0.7 m","Previous evolution(s)":[{"Number":"010","Name":"Caterpie"}],"Next Evolution Requirements":{"Amount":50,"Name":"Caterpie candies"},"Next evolution(s)":[{"Number":"012","Name":"Butterfree"}]},{"Number":"012","Name":"Butterfree","Classification":"Butterfly Pokèmon","Type I":["Bug"],"Type II":["Flying"],"Weaknesses":["Fire","Electric","Ice","Flying","Rock"],"Fast Attack(s)":["Bug Bite","Confusion"],"Weight":"32.0 kg","Height":"1.1 m","Previous evolution(s)":[{"Number":"010","Name":"Caterpie"},{"Number":"011","Name":"Metapod"}]},{"Number":"013","Name":"Weedle","Classification":"Hairy Pokèmon","Type I":["Bug"],"Type II":["Poison"],"Weaknesses":["Fire","Flying","Psychic","Rock"],"Fast Attack(s)":["Bug Bite","Poison Sting"],"Weight":"3.2 kg","Height":"0.3 m","Next Evolution Requirements":{"Amount":12,"Name":"Weedle candies"},"Next evolution(s)":[{"Number":"014","Name":"Kakuna"},{"Number":"015","Name":"Beedrill"}]},{"Number":"014","Name":"Kakuna","Classification":"Cocoon Pokèmon","Type I":["Bug"],"Type II":["Poison"],"Weaknesses":["Fire","Flying","Psychic","Rock"],"Fast Attack(s)":["Bug Bite","Posion Sting"],"Weight":"10.0 kg","Height":"0.6 m","Previous evolution(s)":[{"Number":"013","Name":"Weedle"}],"Next Evolution Requirements":{"Amount":50,"Name":"Weedle candies"},"Next evolution(s)":[{"Number":"015","Name":"Beedrill"}]},{"Number":"015","Name":"Beedrill","Classification":"Poison Bee Pokèmon","Type I":["Bug"],"Type II":["Poison"],"Weaknesses":["Fire","Flying","Psychic","Rock"],"Fast Attack(s)":["Bug Bite","Poison Jab"],"Weight":"29.5 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"013","Name":"Weedle"},{"Number":"014","Name":"Kakuna"}]},{"Number":"016","Name":"Pidgey","Classification":"Tiny Bird Pokèmon","Type I":["Normal"],"Type II":["Flying"],"Weaknesses":["Electric","Rock"],"Fast Attack(s)":["Quick Attack","Tackle"],"Special Attack(s)":["Aerial Ace","Air Cutter","Twister"],"Weight":"1.8 kg","Height":"0.3 m","Next Evolution Requirements":{"Amount":12,"Name":"Pidgey candies"},"Next evolution(s)":[{"Number":"017","Name":"Pidgeotto"},{"Number":"018","Name":"Pidgeot"}]},{"Number":"017","Name":"Pidgeotto","Classification":"Bird Pokèmon","Type I":["Normal"],"Type II":["Flying"],"Weaknesses":["Electric","Rock"],"Fast Attack(s)":["Steel Wing","Wing Attack"],"Special Attack(s)":["Aerial Ace","Air Cutter","Twister"],"Weight":"30.0 kg","Height":"1.1 m","Previous evolution(s)":[{"Number":"016","Name":"Pidgey"}],"Next Evolution Requirements":{"Amount":50,"Name":"Pidgey candies"},"Next evolution(s)":[{"Number":"018","Name":"Pidgeot"}]},{"Number":"018","Name":"Pidgeot","Classification":"Bird Pokèmon","Type I":["Normal"],"Type II":["Flying"],"Weaknesses":["Electric","Rock"],"Fast Attack(s)":["Steel Wing","Wing Attack"],"Special Attack(s)":["Hurricane"],"Weight":"39.5 kg","Height":"1.5 m","Previous evolution(s)":[{"Number":"016","Name":"Pidgey"},{"Number":"017","Name":"Pidgeotto"}]},{"Number":"019","Name":"Rattata","Classification":"Mouse Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Quick Attack","Tackle"],"Special Attack(s)":["Body Slam","Dig","Hyper Fang"],"Weight":"3.5 kg","Height":"0.3 m","Next Evolution Requirements":{"Amount":25,"Name":"Rattata candies"},"Next evolution(s)":[{"Number":"020","Name":"Raticate"}]},{"Number":"020","Name":"Raticate","Classification":"Mouse Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Bite","Quick Attack"],"Special Attack(s)":["Dig","Hyper Beam","Hyper Fang"],"Weight":"18.5 kg","Height":"0.7 m","Previous evolution(s)":[{"Number":"019","Name":"Rattata"}]},{"Number":"021","Name":"Spearow","Classification":"Tiny Bird Pokèmon","Type I":["Normal"],"Type II":["Flying"],"Weaknesses":["Electric","Rock"],"Fast Attack(s)":["Peck","Quick Attack"],"Weight":"2.0 kg","Height":"0.3 m","Next Evolution Requirements":{"Amount":50,"Name":"Spearow candies"},"Next evolution(s)":[{"Number":"022","Name":"Fearow"}]},{"Number":"022","Name":"Fearow","Classification":"Beak Pokèmon","Type I":["Normal"],"Type II":["Flying"],"Weaknesses":["Electric","Rock"],"Fast Attack(s)":["Peck","Steel Wing"],"Weight":"38.0 kg","Height":"1.2 m","Previous evolution(s)":[{"Number":"021","Name":"Spearow"}]},{"Number":"023","Name":"Ekans","Classification":"Snake Pokèmon","Type I":["Poison"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":["Acid","Poison Sting"],"Weight":"6.9 kg","Height":"2.0 m","Next Evolution Requirements":{"Amount":50,"Name":"Ekans candies"},"Next evolution(s)":[{"Number":"024","Name":"Arbok"}]},{"Number":"024","Name":"Arbok","Classification":"Cobra Pokèmon","Type I":["Poison"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":["Acid","Bite"],"Weight":"65.0 kg","Height":"3.5 m","Previous evolution(s)":[{"Number":"023","Name":"Ekans"}]},{"Number":"025","Name":"Pikachu","Classification":"Mouse Pokèmon","Type I":["Electric"],"Weaknesses":["Ground"],"Fast Attack(s)":["Quick Attack","Thunder Shock"],"Weight":"6.0 kg","Height":"0.4 m","Next Evolution Requirements":{"Amount":50,"Name":"Pikachu candies"},"Next evolution(s)":[{"Number":"026","Name":"Raichu"}]},{"Number":"026","Name":"Raichu","Classification":"Mouse Pokèmon","Type I":["Electric"],"Weaknesses":["Ground"],"Fast Attack(s)":["Thunder Shock","Spark"],"Weight":"30.0 kg","Height":"0.8 m","Previous evolution(s)":[{"Number":"025","Name":"Pikachu"}]},{"Number":"027","Name":"Sandshrew","Classification":"Mouse Pokèmon","Type I":["Ground"],"Weaknesses":["Water","Grass","Ice"],"Fast Attack(s)":["Mud Shot","Scratch"],"Weight":"12.0 kg","Height":"0.6 m","Next Evolution Requirements":{"Amount":50,"Name":"Sandshrew candies"},"Next evolution(s)":[{"Number":"028","Name":"Sandslash"}]},{"Number":"028","Name":"Sandslash","Classification":"Mouse Pokèmon","Type I":["Ground"],"Weaknesses":["Water","Grass","Ice"],"Fast Attack(s)":["Metal Claw","Mud Shot"],"Weight":"29.5 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"027","Name":"Sandshrew"}]},{"Number":"029","Name":"Nidoran F","Classification":"Poison Pin Pokèmon","Type I":["Poison"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":["Bite","Poison Sting"],"Weight":"7.0 kg","Height":"0.4 m","Next evolution(s)":[{"Number":"030","Name":"Nidorina"},{"Number":"031","Name":"Nidoqueen"}]},{"Number":"030","Name":"Nidorina","Classification":"Poison Pin Pokèmon","Type I":["Poison"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":["Bite","Poison Sting"],"Weight":"20.0 kg","Height":"0.8 m","Previous evolution(s)":[{"Number":"029","Name":"Nidoran F"}],"Next Evolution Requirements":{"Amount":100,"Name":"Nidoran F candies"},"Next evolution(s)":[{"Number":"031","Name":"Nidoqueen"}]},{"Number":"031","Name":"Nidoqueen","Classification":"Drill Pokèmon","Type I":["Poison"],"Type II":["Ground"],"Weaknesses":["Water","Ice","Ground","Psychic"],"Fast Attack(s)":["Bite","Poison Jab"],"Weight":"60.0 kg","Height":"1.3 m","Previous evolution(s)":[{"Number":"029","Name":"Nidoran F"},{"Number":"030","Name":"Nidorina"}]},{"Number":"032","Name":"Nidoran M","Classification":"Poison Pin Pokèmon","Type I":["Poison"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":["Peck","Poison Sting"],"Weight":"9.0 kg","Height":"0.5 m","Next evolution(s)":[{"Number":"033","Name":"Nidorino"},{"Number":"034","Name":"Nidoking"}]},{"Number":"033","Name":"Nidorino","Classification":"Poison Pin Pokèmon","Type I":["Poison"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":["Bite","Poison Jab"],"Weight":"19.5 kg","Height":"0.9 m","Previous evolution(s)":[{"Number":"032","Name":"Nidoran M"}],"Next Evolution Requirements":{"Amount":100,"Name":"NidoranM candies"},"Next evolution(s)":[{"Number":"034","Name":"Nidoking"}]},{"Number":"034","Name":"Nidoking","Classification":"Drill Pokèmon","Type I":["Poison"],"Type II":["Ground"],"Weaknesses":["Water","Ice","Ground","Psychic"],"Fast Attack(s)":["Fury Cutter","Poison Jab"],"Weight":"62.0 kg","Height":"1.4 m","Previous evolution(s)":[{"Number":"032","Name":"Nidoran M"},{"Number":"033","Name":"Nidorino"}]},{"Number":"035","Name":"Clefairy","Classification":"Fairy Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Pound","Zen Headbutt"],"Weight":"7.5 kg","Height":"0.6 m","Next Evolution Requirements":{"Amount":50,"Name":"Clefairy candies"},"Next evolution(s)":[{"Number":"036","Name":"Clefable"}]},{"Number":"036","Name":"Clefable","Classification":"Fairy Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Pound","Zen Headbutt"],"Weight":"40.0 kg","Height":"1.3 m","Previous evolution(s)":[{"Number":"035","Name":"Clefairy"}]},{"Number":"037","Name":"Vulpix","Classification":"Fox Pokèmon","Type I":["Fire"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":["Ember","Quick Attack"],"Weight":"9.9 kg","Height":"0.6 m","Next Evolution Requirements":{"Amount":50,"Name":"Vulpi"},"Next evolution(s)":[{"Number":"038","Name":"Ninetales"}]},{"Number":"038","Name":"Ninetales","Classification":"Fox Pokèmon","Type I":["Fire"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":["Ember","Quick Attack"],"Weight":"19.9 kg","Height":"1.1 m","Previous evolution(s)":[{"Number":"037","Name":"Vulpix"}]},{"Number":"039","Name":"Jigglypuff","Classification":"Balloon Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Feint Attack","Pound"],"Weight":"5.5 kg","Height":"0.5 m","Next Evolution Requirements":{"Amount":50,"Name":"Jigglypuff candies"},"Next evolution(s)":[{"Number":"039","Name":"Jigglypuff"}]},{"Number":"040","Name":"Wigglytuff","Classification":"Balloon Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Feint Attack","Pound"],"Weight":"12.0 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"040","Name":"Wigglytuff"}]},{"Number":"041","Name":"Zubat","Classification":"Bat Pokèmon","Type I":["Poison"],"Type II":["Flying"],"Weaknesses":["Electric","Ice","Psychic","Rock"],"Fast Attack(s)":["Bite","Quick Attack"],"Weight":"7.5 kg","Height":"0.8 m","Next Evolution Requirements":{"Amount":50,"Name":"Zubat candies"},"Next evolution(s)":[{"Number":"042","Name":"Golbat"}]},{"Number":"042","Name":"Golbat","Classification":"Bat Pokèmon","Type I":["Poison"],"Type II":["Flying"],"Weaknesses":["Electric","Ice","Psychic","Rock"],"Fast Attack(s)":["Bite","Wing Attack"],"Weight":"55.0 kg","Height":"1.6 m","Previous evolution(s)":[{"Number":"041","Name":"Zubat"}]},{"Number":"043","Name":"Oddish","Classification":"Weed Pokèmon","Type I":["Grass"],"Type II":["Poison"],"Weaknesses":["Fire","Ice","Flying","Psychic"],"Fast Attack(s)":["Acid","Razor Leaf"],"Weight":"5.4 kg","Height":"0.5 m","Next Evolution Requirements":{"Amount":25,"Name":"Oddish candies"},"Next evolution(s)":[{"Number":"044","Name":"Gloom"},{"Number":"045","Name":"Vileplume"}]},{"Number":"044","Name":"Gloom","Classification":"Weed Pokèmon","Type I":["Grass"],"Type II":["Poison"],"Weaknesses":["Fire","Ice","Flying","Psychic"],"Fast Attack(s)":["Acid","Razor Leaf"],"Weight":"8.6 kg","Height":"0.8 m","Previous evolution(s)":[{"Number":"043","Name":"Oddish"}],"Next Evolution Requirements":{"Amount":100,"Name":"Oddish candies"},"Next evolution(s)":[{"Number":"045","Name":"Vileplume"}]},{"Number":"045","Name":"Vileplume","Classification":"Flower Pokèmon","Type I":["Grass"],"Type II":["Poison"],"Weaknesses":["Fire","Ice","Flying","Psychic"],"Fast Attack(s)":["Acid",""],"Weight":"18.6 kg","Height":"1.2 m","Previous evolution(s)":[{"Number":"043","Name":"Oddish"},{"Number":"044","Name":"Gloom"}]},{"Number":"046","Name":"Paras","Classification":"Mushroom Pokèmon","Type I":["Bug"],"Type II":["Grass"],"Weaknesses":["Fire","Ice","Poison","Flying","Bug","Rock"],"Fast Attack(s)":["Bug Bite","Scratch"],"Weight":"5.4 kg","Height":"0.3 m","Next Evolution Requirements":{"Amount":50,"Name":"Paras candies"},"Next evolution(s)":[{"Number":"047","Name":"Parasect"}]},{"Number":"047","Name":"Parasect","Classification":"Mushroom Pokèmon","Type I":["Bug"],"Type II":["Grass"],"Weaknesses":["Fire","Ice","Poison","Flying","Bug","Rock"],"Fast Attack(s)":["Bug Bite","Fury Cutter"],"Weight":"29.5 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"046","Name":"Paras"}]},{"Number":"048","Name":"Venonat","Classification":"Insect Pokèmon","Type I":["Bug"],"Type II":["Poison"],"Weaknesses":["Fire","Flying","Psychic","Rock"],"Fast Attack(s)":["Bug Bite","Confusion"],"Weight":"30.0 kg","Height":"1.0 m","Next Evolution Requirements":{"Amount":50,"Name":"Venonat candies"},"Next evolution(s)":[{"Number":"049","Name":"Venomoth"}]},{"Number":"049","Name":"Venomoth","Classification":"Poison Moth Pokèmon","Type I":["Bug"],"Type II":["Poison"],"Weaknesses":["Fire","Flying","Psychic","Rock"],"Fast Attack(s)":["Bug Bite","Confusion"],"Weight":"12.5 kg","Height":"1.5 m","Previous evolution(s)":[{"Number":"048","Name":"Venonat"}]},{"Number":"050","Name":"Diglett","Classification":"Mole Pokèmon","Type I":["Ground"],"Weaknesses":["Water","Grass","Ice"],"Fast Attack(s)":["Mud Shot","Scratch"],"Weight":"0.8 kg","Height":"0.2 m","Next Evolution Requirements":{"Amount":50,"Name":"Diglett candies"},"Next evolution(s)":[{"Number":"051","Name":"Dugtrio"}]},{"Number":"051","Name":"Dugtrio","Classification":"Mole Pokèmon","Type I":["Ground"],"Weaknesses":["Water","Grass","Ice"],"Fast Attack(s)":["Mud Shot","Sucker Punch"],"Weight":"33.3 kg","Height":"0.7 m","Previous evolution(s)":[{"Number":"050","Name":"Diglett"}]},{"Number":"052","Name":"Meowth","Classification":"Scratch Cat Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Bite","Scratch"],"Weight":"4.2 kg","Height":"0.4 m","Next Evolution Requirements":{"Amount":50,"Name":"Meowth candies"},"Next evolution(s)":[{"Number":"053","Name":"Persian"}]},{"Number":"053","Name":"Persian","Classification":"Classy Cat Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Feint Attack","Scratch"],"Weight":"32.0 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"052","Name":"Meowth"}]},{"Number":"054","Name":"Psyduck","Classification":"Duck Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Water Gun","Zen Headbutt"],"Weight":"19.6 kg","Height":"0.8 m","Next Evolution Requirements":{"Amount":50,"Name":"Psyduck candies"},"Next evolution(s)":[{"Number":"055","Name":"Golduck"}]},{"Number":"055","Name":"Golduck","Classification":"Duck Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Confusion","Zen Headbutt"],"Weight":"76.6 kg","Height":"1.7 m","Previous evolution(s)":[{"Number":"054","Name":"Psyduck"}]},{"Number":"056","Name":"Mankey","Classification":"Pig Monkey Pokèmon","Type I":["Fighting"],"Weaknesses":["Flying","Psychic","Fairy"],"Fast Attack(s)":["Karate Chop","Scratch"],"Weight":"28.0 kg","Height":"0.5 m","Next Evolution Requirements":{"Amount":50,"Name":"Mankey candies"},"Next evolution(s)":[{"Number":"057","Name":"Primeape"}]},{"Number":"057","Name":"Primeape","Classification":"Pig Monkey Pokèmon","Type I":["Fighting"],"Weaknesses":["Flying","Psychic","Fairy"],"Fast Attack(s)":["Karate Chop","Low Kick"],"Weight":"32.0 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"056","Name":"Mankey"}]},{"Number":"058","Name":"Growlithe","Classification":"Puppy Pokèmon","Type I":["Fire"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":["Bite","Ember"],"Weight":"19.0 kg","Height":"0.7 m","Next Evolution Requirements":{"Amount":50,"Name":"Growlithe candies"},"Next evolution(s)":[{"Number":"059","Name":"Arcanine"}]},{"Number":"059","Name":"Arcanine","Classification":"Legendary Pokèmon","Type I":["Fire"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":["Bite","Fire Fang"],"Weight":"155.0 kg","Height":"1.9 m","Previous evolution(s)":[{"Number":"058","Name":"Growlithe"}]},{"Number":"060","Name":"Poliwag","Classification":"Tadpole Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Bubble","Mud Shot"],"Weight":"12.4 kg","Height":"0.6 m","Next Evolution Requirements":{"Amount":25,"Name":"Poliwag candies"},"Next evolution(s)":[{"Number":"061","Name":"Poliwhirl"},{"Number":"062","Name":"Poliwrath"}]},{"Number":"061","Name":"Poliwhirl","Classification":"Tadpole Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Bubble","Mud Shot"],"Weight":"20.0 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"060","Name":"Poliwag"}],"Next Evolution Requirements":{"Amount":100,"Name":"Poliwag candies"},"Next evolution(s)":[{"Number":"062","Name":"Poliwrath"}]},{"Number":"062","Name":"Poliwrath","Classification":"Tadpole Pokèmon","Type I":["Water"],"Type II":["Fighting"],"Weaknesses":["Electric","Grass","Flying","Psychic","Fairy"],"Fast Attack(s)":["Bubble","Mud Shot"],"Weight":"54.0 kg","Height":"1.3 m","Previous evolution(s)":[{"Number":"060","Name":"Poliwag"},{"Number":"061","Name":"Poliwhirl"}]},{"Number":"063","Name":"Abra","Classification":"Psi Pokèmon","Type I":["Psychic"],"Weaknesses":["Bug","Ghost","Dark"],"Fast Attack(s)":["Zen Headbutt",""],"Weight":"19.5 kg","Height":"0.9 m","Next Evolution Requirements":{"Amount":25,"Name":"Abra candies"},"Next evolution(s)":[{"Number":"064","Name":"Kadabra"},{"Number":"065","Name":"Alakazam"}]},{"Number":"064","Name":"Kadabra","Classification":"Psi Pokèmon","Type I":["Psychic"],"Weaknesses":["Bug","Ghost","Dark"],"Fast Attack(s)":["Confusion","Psycho Cut"],"Weight":"56.5 kg","Height":"1.3 m","Previous evolution(s)":[{"Number":"063","Name":"Abra"}],"Next Evolution Requirements":{"Amount":100,"Name":"Abra candies"},"Next evolution(s)":[{"Number":"065","Name":"Alakazam"}]},{"Number":"065","Name":"Alakazam","Classification":"Psi Pokèmon","Type I":["Psychic"],"Weaknesses":["Bug","Ghost","Dark"],"Fast Attack(s)":["Confusion","Psycho Cut"],"Weight":"48.0 kg","Height":"1.5 m","Previous evolution(s)":[{"Number":"063","Name":"Abra"},{"Number":"064","Name":"Kadabra"}]},{"Number":"066","Name":"Machop","Classification":"Superpower Pokèmon","Type I":["Fighting"],"Weaknesses":["Flying","Psychic","Fairy"],"Fast Attack(s)":["Karate Chop","Low Kick"],"Weight":"19.5 kg","Height":"0.8 m","Next Evolution Requirements":{"Amount":25,"Name":"Machop candies"},"Next evolution(s)":[{"Number":"067","Name":"Machoke"},{"Number":"068","Name":"Machamp"}]},{"Number":"067","Name":"Machoke","Classification":"Superpower Pokèmon","Type I":["Fighting"],"Weaknesses":["Flying","Psychic","Fairy"],"Fast Attack(s)":["Karate Chop","Low Kick"],"Weight":"70.5 kg","Height":"1.5 m","Previous evolution(s)":[{"Number":"066","Name":"Machop"}],"Next Evolution Requirements":{"Amount":100,"Name":"Machop candies"},"Next evolution(s)":[{"Number":"068","Name":"Machamp"}]},{"Number":"068","Name":"Machamp","Classification":"Superpower Pokèmon","Type I":["Fighting"],"Weaknesses":["Flying","Psychic","Fairy"],"Fast Attack(s)":["Bullet Punch","Karate Chop"],"Weight":"130.0 kg","Height":"1.6 m","Previous evolution(s)":[{"Number":"066","Name":"Machop"},{"Number":"067","Name":"Machoke"}]},{"Number":"069","Name":"Bellsprout","Classification":"Flower Pokèmon","Type I":["Grass"],"Type II":["Poison"],"Weaknesses":["Fire","Ice","Flying","Psychic"],"Fast Attack(s)":["Acid","Vine Whip"],"Weight":"4.0 kg","Height":"0.7 m","Next Evolution Requirements":{"Amount":25,"Name":"Bellsprout candies"},"Next evolution(s)":[{"Number":"070","Name":"Weepinbell"},{"Number":"071","Name":"Victreebel"}]},{"Number":"070","Name":"Weepinbell","Classification":"Flycatcher Pokèmon","Type I":["Grass"],"Type II":["Poison"],"Weaknesses":["Fire","Ice","Flying","Psychic"],"Fast Attack(s)":["Acid","Razor Leaf"],"Weight":"6.4 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"069","Name":"Bellsprout"}],"Next Evolution Requirements":{"Amount":100,"Name":"Bellsprout candies"},"Next evolution(s)":[{"Number":"071","Name":"Victreebel"}]},{"Number":"071","Name":"Victreebel","Classification":"Flycatcher Pokèmon","Type I":["Grass"],"Type II":["Poison"],"Weaknesses":["Fire","Ice","Flying","Psychic"],"Fast Attack(s)":["Acid","Razor Leaf"],"Weight":"15.5 kg","Height":"1.7 m","Previous evolution(s)":[{"Number":"069","Name":"Bellsprout"},{"Number":"070","Name":"Weepinbell"}]},{"Number":"072","Name":"Tentacool","Classification":"Jellyfish Pokèmon","Type I":["Water"],"Type II":["Poison"],"Weaknesses":["Electric","Ground","Psychic"],"Fast Attack(s)":["Bubble","Poison Sting"],"Weight":"45.5 kg","Height":"0.9 m","Next Evolution Requirements":{"Amount":50,"Name":"Tentacool candies"},"Next evolution(s)":[{"Number":"073","Name":"Tentacruel"}]},{"Number":"073","Name":"Tentacruel","Classification":"Jellyfish Pokèmon","Type I":["Water"],"Type II":["Poison"],"Weaknesses":["Electric","Ground","Psychic"],"Fast Attack(s)":["Acid","Poison Jab"],"Weight":"55.0 kg","Height":"1.6 m","Previous evolution(s)":[{"Number":"072","Name":"Tentacool"}]},{"Number":"074","Name":"Geodude","Classification":"Rock Pokèmon","Type I":["Rock"],"Type II":["Ground"],"Weaknesses":["Water","Grass","Ice","Fighting","Ground","Steel"],"Fast Attack(s)":["Rock Throw","Tackle"],"Weight":"20.0 kg","Height":"0.4 m","Next Evolution Requirements":{"Amount":25,"Name":"Geodude candies"},"Next evolution(s)":[{"Number":"075","Name":"Graveler"},{"Number":"076","Name":"Golem"}]},{"Number":"075","Name":"Graveler","Classification":"Rock Pokèmon","Type I":["Rock"],"Type II":["Ground"],"Weaknesses":["Water","Grass","Ice","Fighting","Ground","Steel"],"Fast Attack(s)":["Mud Shot","Rock Throw"],"Weight":"105.0 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"074","Name":"Geodude"}],"Next Evolution Requirements":{"Amount":100,"Name":"Geodude candies"},"Next evolution(s)":[{"Number":"076","Name":"Golem"}]},{"Number":"076","Name":"Golem","Classification":"Megaton Pokèmon","Type I":["Rock"],"Type II":["Ground"],"Weaknesses":["Water","Grass","Ice","Fighting","Ground","Steel"],"Fast Attack(s)":["Mud Shot","Rock Throw"],"Weight":"300.0 kg","Height":"1.4 m","Previous evolution(s)":[{"Number":"074","Name":"Geodude"},{"Number":"075","Name":"Graveler"}]},{"Number":"077","Name":"Ponyta","Classification":"Fire Horse Pokèmon","Type I":["Fire"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":["Ember","Tackle"],"Weight":"30.0 kg","Height":"1.0 m","Next Evolution Requirements":{"Amount":50,"Name":"Ponyta candies"},"Next evolution(s)":[{"Number":"078","Name":"Rapidash"}]},{"Number":"078","Name":"Rapidash","Classification":"Fire Horse Pokèmon","Type I":["Fire"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":["Ember","Low Kick"],"Weight":"95.0 kg","Height":"1.7 m","Previous evolution(s)":[{"Number":"077","Name":"Ponyta"}]},{"Number":"079","Name":"Slowpoke","Classification":"Dopey Pokèmon","Type I":["Water"],"Type II":["Psychic"],"Weaknesses":["Electric","Grass","Bug","Ghost","Dark"],"Fast Attack(s)":["Confusion","Water Gun"],"Weight":"36.0 kg","Height":"1.2 m","Next Evolution Requirements":{"Amount":50,"Name":"Slowpoke candies"},"Next evolution(s)":[{"Number":"080","Name":"Slowbro"}]},{"Number":"080","Name":"Slowbro","Classification":"Hermit Crab Pokèmon","Type I":["Water"],"Type II":["Psychic"],"Weaknesses":["Electric","Grass","Bug","Ghost","Dark"],"Fast Attack(s)":["Confusion","Water Gun"],"Weight":"78.5 kg","Height":"1.6 m","Previous evolution(s)":[{"Number":"079","Name":"Slowpoke"}]},{"Number":"081","Name":"Magnemite","Classification":"Magnet Pokèmon","Type I":["Electric"],"Type II":["Steel"],"Weaknesses":["Fire","Water","Ground"],"Fast Attack(s)":["Spark","Thunder Shock"],"Weight":"6.0 kg","Height":"0.3 m","Next Evolution Requirements":{"Amount":50,"Name":"Magnemite candies"},"Next evolution(s)":[{"Number":"082","Name":"Magneton"}]},{"Number":"082","Name":"Magneton","Classification":"Magnet Pokèmon","Type I":["Electric"],"Type II":["Steel"],"Weaknesses":["Fire","Water","Ground"],"Fast Attack(s)":["Spark","Thunder Shock"],"Weight":"60.0 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"081","Name":"Magnemite"}]},{"Number":"083","Name":"Farfetch'd","Classification":"Wild Duck Pokèmon","Type I":["Normal"],"Type II":["Flying"],"Weaknesses":["Electric","Rock"],"Fast Attack(s)":["Unknown"],"Special Attack(s)":["Unknown"],"Weight":"15.0 kg","Height":"0.8 m"},{"Number":"084","Name":"Doduo","Classification":"Twin Bird Pokèmon","Type I":["Normal"],"Type II":["Flying"],"Weaknesses":["Electric","Rock"],"Fast Attack(s)":["Peck","Quick Attack"],"Weight":"39.2 kg","Height":"1.4 m","Next Evolution Requirements":{"Amount":50,"Name":"Doduo candies"},"Next evolution(s)":[{"Number":"085","Name":"Dodrio"}]},{"Number":"085","Name":"Dodrio","Classification":"Triple Bird Pokèmon","Type I":["Normal"],"Type II":["Flying"],"Weaknesses":["Electric","Rock"],"Fast Attack(s)":["Feint Attack","Steel Wing"],"Weight":"85.2 kg","Height":"1.8 m","Previous evolution(s)":[{"Number":"084","Name":"Doduo"}]},{"Number":"086","Name":"Seel","Classification":"Sea Lion Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Ice Shard","Water Gun"],"Weight":"90.0 kg","Height":"1.1 m","Next Evolution Requirements":{"Amount":50,"Name":"Seel candies"},"Next evolution(s)":[{"Number":"087","Name":"Dewgong"}]},{"Number":"087","Name":"Dewgong","Classification":"Sea Lion Pokèmon","Type I":["Water"],"Type II":["Ice"],"Weaknesses":["Electric","Grass","Fighting","Rock"],"Fast Attack(s)":["Frost Breath","Ice Shard"],"Weight":"120.0 kg","Height":"1.7 m","Previous evolution(s)":[{"Number":"086","Name":"Seel"}]},{"Number":"088","Name":"Grimer","Classification":"Sludge Pokèmon","Type I":["Poison"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":["Acid","Mud Slap"],"Weight":"30.0 kg","Height":"0.9 m","Next Evolution Requirements":{"Amount":50,"Name":"Grimer candies"},"Next evolution(s)":[{"Number":"089","Name":"Muk"}]},{"Number":"089","Name":"Muk","Classification":"Sludge Pokèmon","Type I":["Poison"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":["Poison Jab",""],"Weight":"30.0 kg","Height":"1.2 m","Previous evolution(s)":[{"Number":"088","Name":"Grimer"}]},{"Number":"090","Name":"Shellder","Classification":"Bivalve Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Ice Shard","Tackle"],"Weight":"4.0 kg","Height":"0.3 m","Next Evolution Requirements":{"Amount":50,"Name":"Shellder candies"},"Next evolution(s)":[{"Number":"091","Name":"Cloyster"}]},{"Number":"091","Name":"Cloyster","Classification":"Bivalve Pokèmon","Type I":["Water"],"Type II":["Ice"],"Weaknesses":["Electric","Grass","Fighting","Rock"],"Fast Attack(s)":["Frost Breath","Ice Shard"],"Weight":"132.5 kg","Height":"1.5 m","Previous evolution(s)":[{"Number":"090","Name":"Shellder"}]},{"Number":"092","Name":"Gastly","Classification":"Gas Pokèmon","Type I":["Ghost"],"Type II":["Poison"],"Weaknesses":["Ground","Psychic","Ghost","Dark"],"Fast Attack(s)":["Lick","Sucker Punch"],"Weight":"0.1 kg","Height":"1.3 m","Next Evolution Requirements":{"Amount":25,"Name":"Gastly candies"},"Next evolution(s)":[{"Number":"093","Name":"Haunter"},{"Number":"094","Name":"Gengar"}]},{"Number":"093","Name":"Haunter","Classification":"Gas Pokèmon","Type I":["Ghost"],"Type II":["Poison"],"Weaknesses":["Ground","Psychic","Ghost","Dark"],"Fast Attack(s)":["Lick","Shadow Claw"],"Weight":"0.1 kg","Height":"1.6 m","Previous evolution(s)":[{"Number":"092","Name":"Gastly"}],"Next Evolution Requirements":{"Amount":100,"Name":"Gastly candies"},"Next evolution(s)":[{"Number":"094","Name":"Gengar"}]},{"Number":"094","Name":"Gengar","Classification":"Shadow Pokèmon","Type I":["Ghost"],"Type II":["Poison"],"Weaknesses":["Ground","Psychic","Ghost","Dark"],"Fast Attack(s)":["Shadow Claw","Sucker Punch"],"Weight":"40.5 kg","Height":"1.5 m","Previous evolution(s)":[{"Number":"092","Name":"Gastly"},{"Number":"093","Name":"Haunter"}]},{"Number":"095","Name":"Onix","Classification":"Rock Snake Pokèmon","Type I":["Rock"],"Type II":["Ground"],"Weaknesses":["Water","Grass","Ice","Fighting","Ground","Steel"],"Fast Attack(s)":["Rock Throw","Tackle"],"Weight":"210.0 kg","Height":"8.8 m"},{"Number":"096","Name":"Drowzee","Classification":"Hypnosis Pokèmon","Type I":["Psychic"],"Weaknesses":["Bug","Ghost","Dark"],"Fast Attack(s)":["Confusion","Pound"],"Weight":"32.4 kg","Height":"1.0 m","Next Evolution Requirements":{"Amount":50,"Name":"Drowzee candies"},"Next evolution(s)":[{"Number":"097","Name":"Hypno"}]},{"Number":"097","Name":"Hypno","Classification":"Hypnosis Pokèmon","Type I":["Psychic"],"Weaknesses":["Bug","Ghost","Dark"],"Fast Attack(s)":["Confusion","Zen Headbutt"],"Weight":"75.6 kg","Height":"1.6 m","Previous evolution(s)":[{"Number":"096","Name":"Drowzee"}]},{"Number":"098","Name":"Krabby","Classification":"River Crab Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Bubble","Mud Shot"],"Weight":"6.5 kg","Height":"0.4 m","Next Evolution Requirements":{"Amount":50,"Name":"Krabby candies"},"Next evolution(s)":[{"Number":"099","Name":"Kingler"}]},{"Number":"099","Name":"Kingler","Classification":"Pincer Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Metal Claw","Mud Shot"],"Weight":"60.0 kg","Height":"1.3 m","Previous evolution(s)":[{"Number":"098","Name":"Krabby"}]},{"Number":"100","Name":"Voltorb","Classification":"Ball Pokèmon","Type I":["Electric"],"Weaknesses":["Ground"],"Fast Attack(s)":["Spark","Tackle"],"Weight":"10.4 kg","Height":"0.5 m","Next Evolution Requirements":{"Amount":50,"Name":"Voltorb candies"},"Next evolution(s)":[{"Number":"101","Name":"Electrode"}]},{"Number":"101","Name":"Electrode","Classification":"Ball Pokèmon","Type I":["Electric"],"Weaknesses":["Ground"],"Fast Attack(s)":["Spark",""],"Weight":"66.6 kg","Height":"1.2 m","Previous evolution(s)":[{"Number":"100","Name":"Voltorb"}]},{"Number":"102","Name":"Exeggcute","Classification":"Egg Pokèmon","Type I":["Grass"],"Type II":["Psychic"],"Weaknesses":["Fire","Ice","Poison","Flying","Bug","Ghost","Dark"],"Fast Attack(s)":["Confusion",""],"Weight":"2.5 kg","Height":"0.4 m","Next Evolution Requirements":{"Amount":50,"Name":"E"},"Next evolution(s)":[{"Number":"103","Name":"Exeggutor"}]},{"Number":"103","Name":"Exeggutor","Classification":"Coconut Pokèmon","Type I":["Grass"],"Type II":["Psychic"],"Weaknesses":["Fire","Ice","Poison","Flying","Bug","Ghost","Dark"],"Fast Attack(s)":["Confusion","Zen Headbutt"],"Weight":"120.0 kg","Height":"2.0 m","Previous evolution(s)":[{"Number":"102","Name":"Exeggcute"}]},{"Number":"104","Name":"Cubone","Classification":"Lonely Pokèmon","Type I":["Ground"],"Weaknesses":["Water","Grass","Ice"],"Fast Attack(s)":["Mud Slap","Rock Smash"],"Weight":"6.5 kg","Height":"0.4 m","Next Evolution Requirements":{"Amount":50,"Name":"Cubone candies"},"Next evolution(s)":[{"Number":"105","Name":"Marowak"}]},{"Number":"105","Name":"Marowak","Classification":"Bone Keeper Pokèmon","Type I":["Ground"],"Weaknesses":["Water","Grass","Ice"],"Fast Attack(s)":["Mud Slap","Rock Smash"],"Weight":"45.0 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"104","Name":"Cubone"}]},{"Number":"106","Name":"Hitmonlee","Classification":"Kicking Pokèmon","Type I":["Fighting"],"Weaknesses":["Flying","Psychic","Fairy"],"Fast Attack(s)":["Low Kick","Rock Smash"],"Weight":"49.8 kg","Height":"1.5 m","Next evolution(s)":[{"Number":"107","Name":"Hitmonchan"}]},{"Number":"107","Name":"Hitmonchan","Classification":"Punching Pokèmon","Type I":["Fighting"],"Weaknesses":["Flying","Psychic","Fairy"],"Fast Attack(s)":["Bullet Punch","Rock Smash"],"Weight":"50.2 kg","Height":"1.4 m","Previous evolution(s)":[{"Number":"106","Name":"Hitmonlee"}]},{"Number":"108","Name":"Lickitung","Classification":"Licking Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Lick","Zen Headbutt"],"Weight":"65.5 kg","Height":"1.2 m"},{"Number":"109","Name":"Koffing","Classification":"Poison Gas Pokèmon","Type I":["Poison"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":["Acid","Tackle"],"Weight":"1.0 kg","Height":"0.6 m","Next Evolution Requirements":{"Amount":50,"Name":"Koffing candies"},"Next evolution(s)":[{"Number":"110","Name":"Weezing"}]},{"Number":"110","Name":"Weezing","Classification":"Poison Gas Pokèmon","Type I":["Poison"],"Weaknesses":["Ground","Psychic"],"Fast Attack(s)":["Acid","Tackle"],"Weight":"9.5 kg","Height":"1.2 m","Previous evolution(s)":[{"Number":"109","Name":"Koffing"}]},{"Number":"111","Name":"Rhyhorn","Classification":"Spikes Pokèmon","Type I":["Ground"],"Type II":["Rock"],"Weaknesses":["Water","Grass","Ice","Fighting","Ground","Steel"],"Fast Attack(s)":["Mud Slap","Rock Smash"],"Weight":"115.0 kg","Height":"1.0 m","Next Evolution Requirements":{"Amount":50,"Name":"Rhyhorn candies"},"Next evolution(s)":[{"Number":"112","Name":"Rhydon"}]},{"Number":"112","Name":"Rhydon","Classification":"Drill Pokèmon","Type I":["Ground"],"Type II":["Rock"],"Weaknesses":["Water","Grass","Ice","Fighting","Ground","Steel"],"Fast Attack(s)":["Mud Slap","Rock Smash"],"Weight":"120.0 kg","Height":"1.9 m","Previous evolution(s)":[{"Number":"111","Name":"Rhyhorn"}]},{"Number":"113","Name":"Chansey","Classification":"Egg Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Pound","Zen Headbutt"],"Weight":"34.6 kg","Height":"1.1 m"},{"Number":"114","Name":"Tangela","Classification":"Vine Pokèmon","Type I":["Grass"],"Weaknesses":["Fire","Ice","Poison","Flying","Bug"],"Fast Attack(s)":["Vine Whip",""],"Weight":"35.0 kg","Height":"1.0 m"},{"Number":"115","Name":"Kangaskhan","Classification":"Parent Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Low Kick",""],"Weight":"80.0 kg","Height":"2.2 m"},{"Number":"116","Name":"Horsea","Classification":"Dragon Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Bubble","Water Gun"],"Weight":"8.0 kg","Height":"0.4 m","Next Evolution Requirements":{"Amount":50,"Name":"Horsea candies"},"Next evolution(s)":[{"Number":"117","Name":"Seadra"}]},{"Number":"117","Name":"Seadra","Classification":"Dragon Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Dragon Breath","Water Gun"],"Weight":"25.0 kg","Height":"1.2 m","Previous evolution(s)":[{"Number":"116","Name":"Horsea"}]},{"Number":"118","Name":"Goldeen","Classification":"Goldfish Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Peck","Mud Shot"],"Weight":"15.0 kg","Height":"0.6 m","Next Evolution Requirements":{"Amount":50,"Name":"Goldeen candies"},"Next evolution(s)":[{"Number":"119","Name":"Seaking"}]},{"Number":"119","Name":"Seaking","Classification":"Goldfish Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Peck","Poison Jab"],"Weight":"39.0 kg","Height":"1.3 m","Previous evolution(s)":[{"Number":"118","Name":"Goldeen"}]},{"Number":"120","Name":"Staryu","Classification":"Starshape Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Quick Attack","Water Gun"],"Weight":"34.5 kg","Height":"0.8 m","Next Evolution Requirements":{"Amount":50,"Name":"Staryu candies"},"Next evolution(s)":[{"Number":"120","Name":"Staryu"}]},{"Number":"121","Name":"Starmie","Classification":"Mysterious Pokèmon","Type I":["Water"],"Type II":["Psychic"],"Weaknesses":["Electric","Grass","Bug","Ghost","Dark"],"Fast Attack(s)":["Quick Attack","Water Gun"],"Weight":"80.0 kg","Height":"1.1 m","Previous evolution(s)":[{"Number":"121","Name":"Starmie"}]},{"Number":"122","Name":"Mr. Mime","Classification":"Barrier Pokèmon","Type I":["Psychic"],"Weaknesses":["Bug","Ghost","Dark"],"Fast Attack(s)":["Confusion","Zen Headbutt"],"Weight":"54.5 kg","Height":"1.3 m"},{"Number":"123","Name":"Scyther","Classification":"Mantis Pokèmon","Type I":["Bug"],"Type II":["Flying"],"Weaknesses":["Fire","Electric","Ice","Flying","Rock"],"Fast Attack(s)":["Fury Cutter","Steel Wing"],"Weight":"56.0 kg","Height":"1.5 m"},{"Number":"124","Name":"Jynx","Classification":"Humanshape Pokèmon","Type I":["Ice"],"Type II":["Psychic"],"Weaknesses":["Fire","Bug","Rock","Ghost","Dark","Steel"],"Fast Attack(s)":["Frost Breath","Pound"],"Weight":"40.6 kg","Height":"1.4 m"},{"Number":"125","Name":"Electabuzz","Classification":"Electric Pokèmon","Type I":["Electric"],"Weaknesses":["Ground"],"Fast Attack(s)":["Low Kick","Thunder Shock"],"Weight":"30.0 kg","Height":"1.1 m"},{"Number":"126","Name":"Magmar","Classification":"Spitfire Pokèmon","Type I":["Fire"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":["Ember","Karate Chop"],"Weight":"44.5 kg","Height":"1.3 m"},{"Number":"127","Name":"Pinsir","Classification":"Stagbeetle Pokèmon","Type I":["Bug"],"Weaknesses":["Fire","Flying","Rock"],"Fast Attack(s)":["Fury Cutter","Rock Smash"],"Weight":"55.0 kg","Height":"1.5 m"},{"Number":"128","Name":"Tauros","Classification":"Wild Bull Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Tackle","Zen Headbutt"],"Weight":"88.4 kg","Height":"1.4 m"},{"Number":"129","Name":"Magikarp","Classification":"Fish Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Splash",""],"Weight":"10.0 kg","Height":"0.9 m","Next Evolution Requirements":{"Amount":400,"Name":"Magikarp candies"},"Next evolution(s)":[{"Number":"130","Name":"Gyarados"}]},{"Number":"130","Name":"Gyarados","Classification":"Atrocious Pokèmon","Type I":["Water"],"Type II":["Flying"],"Weaknesses":["Electric","Rock"],"Fast Attack(s)":["Bite","Dragon Breath"],"Weight":"235.0 kg","Height":"6.5 m","Previous evolution(s)":[{"Number":"129","Name":"Magikarp"}]},{"Number":"131","Name":"Lapras","Classification":"Transport Pokèmon","Type I":["Water"],"Type II":["Ice"],"Weaknesses":["Electric","Grass","Fighting","Rock"],"Fast Attack(s)":["Frost Breath","Ice Shard"],"Weight":"220.0 kg","Height":"2.5 m"},{"Number":"132","Name":"Ditto","Classification":"Transform Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Unknown"],"Special Attack(s)":["Unknown"],"Weight":"4.0 kg","Height":"0.3 m"},{"Number":"133","Name":"Eevee","Classification":"Evolution Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Quick Attack","Tackle"],"Weight":"6.5 kg","Height":"0.3 m","Next Evolution Requirements":{"Amount":25,"Name":"Eevee candies"},"Next evolution(s)":[{"Number":"134","Name":"Vaporeon"},{"Number":"135","Name":"Jolteon"},{"Number":"136","Name":"Flareon"}]},{"Number":"134","Name":"Vaporeon","Classification":"Bubble Jet Pokèmon","Type I":["Water"],"Weaknesses":["Electric","Grass"],"Fast Attack(s)":["Water Gun",""],"Weight":"29.0 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"133","Name":"Eevee"}]},{"Number":"135","Name":"Jolteon","Classification":"Lightning Pokèmon","Type I":["Electric"],"Weaknesses":["Ground"],"Fast Attack(s)":["Thunder Shock",""],"Weight":"24.5 kg","Height":"0.8 m","Previous evolution(s)":[{"Number":"133","Name":"Eevee"}]},{"Number":"136","Name":"Flareon","Classification":"Flame Pokèmon","Type I":["Fire"],"Weaknesses":["Water","Ground","Rock"],"Fast Attack(s)":["Ember",""],"Weight":"25.0 kg","Height":"0.9 m","Previous evolution(s)":[{"Number":"133","Name":"Eevee"}]},{"Number":"137","Name":"Porygon","Classification":"Virtual Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Quick Attack","Tackle"],"Weight":"36.5 kg","Height":"0.8 m"},{"Number":"138","Name":"Omanyte","Classification":"Spiral Pokèmon","Type I":["Rock"],"Type II":["Water"],"Weaknesses":["Electric","Grass","Fighting","Ground"],"Fast Attack(s)":["Water Gun",""],"Weight":"7.5 kg","Height":"0.4 m","Next Evolution Requirements":{"Amount":50,"Name":"Omanyte candies"},"Next evolution(s)":[{"Number":"139","Name":"Omastar"}]},{"Number":"139","Name":"Omastar","Classification":"Spiral Pokèmon","Type I":["Rock"],"Type II":["Water"],"Weaknesses":["Electric","Grass","Fighting","Ground"],"Fast Attack(s)":["Rock Throw","Water Gun"],"Weight":"35.0 kg","Height":"1.0 m","Previous evolution(s)":[{"Number":"138","Name":"Omanyte"}]},{"Number":"140","Name":"Kabuto","Classification":"Shellfish Pokèmon","Type I":["Rock"],"Type II":["Water"],"Weaknesses":["Electric","Grass","Fighting","Ground"],"Fast Attack(s)":["Mud Shot","Scratch"],"Weight":"11.5 kg","Height":"0.5 m","Next Evolution Requirements":{"Amount":50,"Name":"Kabuto candies"},"Next evolution(s)":[{"Number":"141","Name":"Kabutops"}]},{"Number":"141","Name":"Kabutops","Classification":"Shellfish Pokèmon","Type I":["Rock"],"Type II":["Water"],"Weaknesses":["Electric","Grass","Fighting","Ground"],"Fast Attack(s)":["Fury Cutter","Mud Shot"],"Weight":"40.5 kg","Height":"1.3 m","Previous evolution(s)":[{"Number":"140","Name":"Kabuto"}]},{"Number":"142","Name":"Aerodactyl","Classification":"Fossil Pokèmon","Type I":["Rock"],"Type II":["Flying"],"Weaknesses":["Water","Electric","Ice","Rock","Steel"],"Fast Attack(s)":["Bite","Steel Wing"],"Weight":"59.0 kg","Height":"1.8 m"},{"Number":"143","Name":"Snorlax","Classification":"Sleeping Pokèmon","Type I":["Normal"],"Weaknesses":["Fighting"],"Fast Attack(s)":["Lick","Zen Headbutt"],"Weight":"460.0 kg","Height":"2.1 m"},{"Number":"144","Name":"Articuno","Classification":"Freeze Pokèmon","Type I":["Ice"],"Type II":["Flying"],"Weaknesses":["Fire","Electric","Rock","Steel"],"Fast Attack(s)":["Unknown"],"Special Attack(s)":["Unknown"],"Weight":"55.4 kg","Height":"1.7 m"},{"Number":"145","Name":"Zapdos","Classification":"Electric Pokèmon","Type I":["Electric"],"Type II":["Flying"],"Weaknesses":["Ice","Rock"],"Fast Attack(s)":["Unknown"],"Special Attack(s)":["Unknown"],"Weight":"52.6 kg","Height":"1.6 m"},{"Number":"146","Name":"Moltres","Classification":"Flame Pokèmon","Type I":["Fire"],"Type II":["Flying"],"Weaknesses":["Water","Electric","Rock"],"Fast Attack(s)":["Unknown"],"Special Attack(s)":["Unknown"],"Weight":"60.0 kg","Height":"2.0 m"},{"Number":"147","Name":"Dratini","Classification":"Dragon Pokèmon","Type I":["Dragon"],"Weaknesses":["Ice","Dragon","Fairy"],"Fast Attack(s)":["Dragon Breath",""],"Weight":"3.3 kg","Height":"1.8 m","Next Evolution Requirements":{"Amount":25,"Name":"Dratini candies"}},{"Number":"148","Name":"Dragonair","Classification":"Dragon Pokèmon","Type I":["Dragon"],"Weaknesses":["Ice","Dragon","Fairy"],"Fast Attack(s)":["Dragon Breath",""],"Weight":"16.5 kg","Height":"4.0 m","Next Evolution Requirements":{"Amount":100,"Name":"Dratini candies"},"Next evolution(s)":[{"Number":"149","Name":"Dragonite"}]},{"Number":"149","Name":"Dragonite","Classification":"Dragon Pokèmon","Type I":["Dragon"],"Type II":["Flying"],"Weaknesses":["Ice","Rock","Dragon","Fairy"],"Fast Attack(s)":["Dragon Breath","Steel Wing"],"Weight":"210.0 kg","Height":"2.2 m","Previous evolution(s)":[{"Number":"148","Name":"Dragonair"}]},{"Number":"150","Name":"Mewtwo","Classification":"Genetic Pokèmon","Type I":["Psychic"],"Weaknesses":["Bug","Ghost","Dark"],"Fast Attack(s)":["Unknown"],"Special Attack(s)":["Unknown"],"Weight":"122.0 kg","Height":"2.0 m"},{"Number":"151","Name":"Mew","Classification":"New Species Pokèmon","Type I":["Psychic"],"Weaknesses":["Bug","Ghost","Dark"],"Fast Attack(s)":["Unknown"],"Special Attack(s)":["Unknown"],"Weight":"4.0 kg","Height":"0.4 m"}] 2 | -------------------------------------------------------------------------------- /api/pokemon.proto: -------------------------------------------------------------------------------- 1 | message RequestEnvelop { 2 | required int32 unknown1 = 1; 3 | optional int64 rpc_id = 3; 4 | repeated Requests requests = 4; 5 | optional Unknown6 unknown6 = 6; 6 | optional fixed64 latitude = 7; 7 | optional fixed64 longitude = 8; 8 | optional fixed64 altitude = 9; 9 | optional AuthInfo auth = 10; 10 | optional UnknownAuth unknown11 = 11; 11 | optional int64 unknown12 = 12; 12 | 13 | message Requests { 14 | required int32 type = 1; 15 | optional bytes message = 2; 16 | } 17 | 18 | message MessageSingleString { 19 | required bytes bytes = 1; 20 | } 21 | 22 | message MessageSingleInt { 23 | required int64 f1 = 1; 24 | } 25 | 26 | message MessageTwoInts { 27 | required int64 f1 = 1; 28 | required int64 f5 = 5; 29 | } 30 | 31 | message MessageQuad { 32 | required bytes f1 = 1; 33 | required bytes f2 = 2; 34 | required fixed64 lat = 3; 35 | required fixed64 long = 4; 36 | } 37 | 38 | message Wat { 39 | repeated int64 lols = 134217728; 40 | } 41 | 42 | message Unknown3 { 43 | required bytes unknown4 = 1; 44 | optional bytes unknown2 = 2; 45 | optional fixed64 lat = 3; 46 | optional fixed64 long = 4; 47 | } 48 | 49 | message Unknown6 { 50 | required int32 unknown1 = 1; 51 | required Unknown2 unknown2 = 2; 52 | 53 | message Unknown2 { 54 | required bytes unknown1 = 1; 55 | } 56 | 57 | } 58 | message AuthInfo { 59 | required string provider = 1; 60 | required JWT token = 2; 61 | 62 | message JWT { 63 | required string contents = 1; 64 | required int32 unknown13 = 2; 65 | } 66 | } 67 | } 68 | 69 | 70 | message UnknownAuth { 71 | optional bytes unknown71 = 1; 72 | optional int64 unknown72 = 2; 73 | optional bytes unknown73 = 3; 74 | } 75 | 76 | message ResponseEnvelop { 77 | required int32 unknown1 = 1; 78 | optional int64 unknown2 = 2; 79 | optional string api_url = 3; 80 | optional Unknown6 unknown6 = 6; 81 | optional UnknownAuth unknown7 = 7; 82 | repeated bytes payload = 100; 83 | 84 | message Unknown6 { 85 | required int32 unknown1 = 1; 86 | required Unknown2 unknown2 = 2; 87 | 88 | message Unknown2 { 89 | required bytes unknown1 = 1; 90 | } 91 | 92 | } 93 | 94 | message HeartbeatPayload { 95 | repeated ClientMapCell cells = 1; 96 | } 97 | 98 | message ClientMapCell { 99 | required uint64 S2CellId = 1; 100 | required int64 AsOfTimeMs = 2; 101 | repeated PokemonFortProto Fort = 3; 102 | repeated ClientSpawnPointProto SpawnPoint = 4; 103 | repeated WildPokemonProto WildPokemon = 5; 104 | //unknown DeletedObject = 6; 105 | optional bool IsTruncatedList = 7; 106 | repeated PokemonSummaryFortProto FortSummary = 8; 107 | repeated ClientSpawnPointProto DecimatedSpawnPoint = 9; 108 | repeated MapPokemonProto MapPokemon = 10; 109 | repeated NearbyPokemonProto NearbyPokemon = 11; 110 | } 111 | 112 | 113 | message WildPokemon { 114 | required string UniqueId = 1; 115 | required string PokemonId = 2; 116 | // int64 three = 3; 117 | // float four = 4; 118 | // int32 five = 5; 119 | // unknown six = 6; 120 | repeated NearbyPokemonProto pokemon = 11; 121 | } 122 | 123 | 124 | message MapPokemonProto { 125 | required string SpawnpointId = 1; 126 | required uint64 EncounterId = 2; 127 | required int32 PokedexTypeId = 3; 128 | required int64 ExpirationTimeMs = 4; 129 | required double Latitude = 5; 130 | required double Longitude = 6; 131 | } 132 | 133 | message PokemonFortProto { 134 | required string FortId = 1; 135 | required int64 LastModifiedMs = 2; 136 | required double Latitude = 3; 137 | required double Longitude = 4; 138 | required int32 Team = 5; 139 | required int32 GuardPokemonId = 6; 140 | required int32 GuardPokemonLevel = 7; 141 | required bool Enabled = 8; 142 | // ENUM.Holoholo.Rpc.FortType FortType = 9; 143 | required int32 FortType = 9; 144 | required int64 GymPoints = 10; 145 | required bool IsInBattle = 11; 146 | //unknown ActiveFortModifier = 12; 147 | optional MapPokemonProto ActivePokemon = 13; 148 | required int64 CooldownCompleteMs = 14; 149 | // ENUM.Holoholo.Rpc.Sponsor.Types.FortSponsor.Sponsor Sponsor = 15; 150 | required int32 Sponsor = 15; 151 | // ENUM.Holoholo.Rpc.RenderingType.Types.FortRenderingType.RenderingType RenderingType = 16; 152 | optional int32 RenderingType = 16; 153 | } 154 | 155 | message PokemonSummaryFortProto { 156 | required string FortSummaryId = 1; 157 | required int64 LastModifiedMs = 2; 158 | required double Latitude = 3; 159 | required double Longitude = 4; 160 | } 161 | 162 | message ClientSpawnPointProto { 163 | required double Latitude = 2; 164 | required double Longitude = 3; 165 | } 166 | 167 | message WildPokemonProto { 168 | optional uint64 EncounterId = 1; 169 | optional int64 LastModifiedMs = 2; 170 | optional double Latitude = 3; 171 | optional double Longitude = 4; 172 | optional string SpawnPointId = 5; 173 | optional Pokemon pokemon = 7; 174 | optional int32 TimeTillHiddenMs = 11; 175 | 176 | message Pokemon { 177 | optional uint64 Id = 1; 178 | optional int32 PokemonId = 2; 179 | } 180 | } 181 | 182 | message NearbyPokemonProto { 183 | optional int32 PokedexNumber = 1; 184 | optional float DistanceMeters = 2; 185 | optional uint64 EncounterId = 3; 186 | } 187 | 188 | message ProfilePayload { 189 | required int32 unknown1 = 1; 190 | optional Profile profile = 2; 191 | } 192 | 193 | message Profile { 194 | required int64 creation_time = 1; 195 | optional string username = 2; 196 | optional int32 team = 5; 197 | optional bytes tutorial = 7; 198 | optional AvatarDetails avatar = 8; 199 | optional int32 poke_storage = 9; 200 | optional int32 item_storage = 10; 201 | optional string unknown11 = 11; 202 | optional string unknown12 = 12; 203 | optional string unknown13 = 13; 204 | repeated Currency currency = 14; 205 | 206 | message AvatarDetails { 207 | optional int32 unknown2 = 2; 208 | optional int32 unknown3 = 3; 209 | optional int32 unknown9 = 9; 210 | optional int32 unknown10 = 10; 211 | } 212 | 213 | message Currency { 214 | required string type = 1; 215 | optional int32 amount = 2; 216 | } 217 | } 218 | } 219 | -------------------------------------------------------------------------------- /api/pokemon_pb2.py: -------------------------------------------------------------------------------- 1 | # Generated by the protocol buffer compiler. DO NOT EDIT! 2 | # source: pokemon.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 | 17 | 18 | DESCRIPTOR = _descriptor.FileDescriptor( 19 | name='pokemon.proto', 20 | package='', 21 | serialized_pb=_b('\n\rpokemon.proto\"\xc5\x06\n\x0eRequestEnvelop\x12\x10\n\x08unknown1\x18\x01 \x02(\x05\x12\x0e\n\x06rpc_id\x18\x03 \x01(\x03\x12*\n\x08requests\x18\x04 \x03(\x0b\x32\x18.RequestEnvelop.Requests\x12*\n\x08unknown6\x18\x06 \x01(\x0b\x32\x18.RequestEnvelop.Unknown6\x12\x10\n\x08latitude\x18\x07 \x01(\x06\x12\x11\n\tlongitude\x18\x08 \x01(\x06\x12\x10\n\x08\x61ltitude\x18\t \x01(\x06\x12&\n\x04\x61uth\x18\n \x01(\x0b\x32\x18.RequestEnvelop.AuthInfo\x12\x1f\n\tunknown11\x18\x0b \x01(\x0b\x32\x0c.UnknownAuth\x12\x11\n\tunknown12\x18\x0c \x01(\x03\x1a)\n\x08Requests\x12\x0c\n\x04type\x18\x01 \x02(\x05\x12\x0f\n\x07message\x18\x02 \x01(\x0c\x1a$\n\x13MessageSingleString\x12\r\n\x05\x62ytes\x18\x01 \x02(\x0c\x1a\x1e\n\x10MessageSingleInt\x12\n\n\x02\x66\x31\x18\x01 \x02(\x03\x1a(\n\x0eMessageTwoInts\x12\n\n\x02\x66\x31\x18\x01 \x02(\x03\x12\n\n\x02\x66\x35\x18\x05 \x02(\x03\x1a@\n\x0bMessageQuad\x12\n\n\x02\x66\x31\x18\x01 \x02(\x0c\x12\n\n\x02\x66\x32\x18\x02 \x02(\x0c\x12\x0b\n\x03lat\x18\x03 \x02(\x06\x12\x0c\n\x04long\x18\x04 \x02(\x06\x1a\x16\n\x03Wat\x12\x0f\n\x04lols\x18\x80\x80\x80@ \x03(\x03\x1aI\n\x08Unknown3\x12\x10\n\x08unknown4\x18\x01 \x02(\x0c\x12\x10\n\x08unknown2\x18\x02 \x01(\x0c\x12\x0b\n\x03lat\x18\x03 \x01(\x06\x12\x0c\n\x04long\x18\x04 \x01(\x06\x1ao\n\x08Unknown6\x12\x10\n\x08unknown1\x18\x01 \x02(\x05\x12\x33\n\x08unknown2\x18\x02 \x02(\x0b\x32!.RequestEnvelop.Unknown6.Unknown2\x1a\x1c\n\x08Unknown2\x12\x10\n\x08unknown1\x18\x01 \x02(\x0c\x1au\n\x08\x41uthInfo\x12\x10\n\x08provider\x18\x01 \x02(\t\x12+\n\x05token\x18\x02 \x02(\x0b\x32\x1c.RequestEnvelop.AuthInfo.JWT\x1a*\n\x03JWT\x12\x10\n\x08\x63ontents\x18\x01 \x02(\t\x12\x11\n\tunknown13\x18\x02 \x02(\x05\"F\n\x0bUnknownAuth\x12\x11\n\tunknown71\x18\x01 \x01(\x0c\x12\x11\n\tunknown72\x18\x02 \x01(\x03\x12\x11\n\tunknown73\x18\x03 \x01(\x0c\"\xac\x13\n\x0fResponseEnvelop\x12\x10\n\x08unknown1\x18\x01 \x02(\x05\x12\x10\n\x08unknown2\x18\x02 \x01(\x03\x12\x0f\n\x07\x61pi_url\x18\x03 \x01(\t\x12+\n\x08unknown6\x18\x06 \x01(\x0b\x32\x19.ResponseEnvelop.Unknown6\x12\x1e\n\x08unknown7\x18\x07 \x01(\x0b\x32\x0c.UnknownAuth\x12\x0f\n\x07payload\x18\x64 \x03(\x0c\x1ap\n\x08Unknown6\x12\x10\n\x08unknown1\x18\x01 \x02(\x05\x12\x34\n\x08unknown2\x18\x02 \x02(\x0b\x32\".ResponseEnvelop.Unknown6.Unknown2\x1a\x1c\n\x08Unknown2\x12\x10\n\x08unknown1\x18\x01 \x02(\x0c\x1a\x41\n\x10HeartbeatPayload\x12-\n\x05\x63\x65lls\x18\x01 \x03(\x0b\x32\x1e.ResponseEnvelop.ClientMapCell\x1a\xe9\x03\n\rClientMapCell\x12\x10\n\x08S2CellId\x18\x01 \x02(\x04\x12\x12\n\nAsOfTimeMs\x18\x02 \x02(\x03\x12/\n\x04\x46ort\x18\x03 \x03(\x0b\x32!.ResponseEnvelop.PokemonFortProto\x12:\n\nSpawnPoint\x18\x04 \x03(\x0b\x32&.ResponseEnvelop.ClientSpawnPointProto\x12\x36\n\x0bWildPokemon\x18\x05 \x03(\x0b\x32!.ResponseEnvelop.WildPokemonProto\x12\x17\n\x0fIsTruncatedList\x18\x07 \x01(\x08\x12=\n\x0b\x46ortSummary\x18\x08 \x03(\x0b\x32(.ResponseEnvelop.PokemonSummaryFortProto\x12\x43\n\x13\x44\x65\x63imatedSpawnPoint\x18\t \x03(\x0b\x32&.ResponseEnvelop.ClientSpawnPointProto\x12\x34\n\nMapPokemon\x18\n \x03(\x0b\x32 .ResponseEnvelop.MapPokemonProto\x12:\n\rNearbyPokemon\x18\x0b \x03(\x0b\x32#.ResponseEnvelop.NearbyPokemonProto\x1ah\n\x0bWildPokemon\x12\x10\n\x08UniqueId\x18\x01 \x02(\t\x12\x11\n\tPokemonId\x18\x02 \x02(\t\x12\x34\n\x07pokemon\x18\x0b \x03(\x0b\x32#.ResponseEnvelop.NearbyPokemonProto\x1a\x92\x01\n\x0fMapPokemonProto\x12\x14\n\x0cSpawnpointId\x18\x01 \x02(\t\x12\x13\n\x0b\x45ncounterId\x18\x02 \x02(\x04\x12\x15\n\rPokedexTypeId\x18\x03 \x02(\x05\x12\x18\n\x10\x45xpirationTimeMs\x18\x04 \x02(\x03\x12\x10\n\x08Latitude\x18\x05 \x02(\x01\x12\x11\n\tLongitude\x18\x06 \x02(\x01\x1a\xe7\x02\n\x10PokemonFortProto\x12\x0e\n\x06\x46ortId\x18\x01 \x02(\t\x12\x16\n\x0eLastModifiedMs\x18\x02 \x02(\x03\x12\x10\n\x08Latitude\x18\x03 \x02(\x01\x12\x11\n\tLongitude\x18\x04 \x02(\x01\x12\x0c\n\x04Team\x18\x05 \x02(\x05\x12\x16\n\x0eGuardPokemonId\x18\x06 \x02(\x05\x12\x19\n\x11GuardPokemonLevel\x18\x07 \x02(\x05\x12\x0f\n\x07\x45nabled\x18\x08 \x02(\x08\x12\x10\n\x08\x46ortType\x18\t \x02(\x05\x12\x11\n\tGymPoints\x18\n \x02(\x03\x12\x12\n\nIsInBattle\x18\x0b \x02(\x08\x12\x37\n\rActivePokemon\x18\r \x01(\x0b\x32 .ResponseEnvelop.MapPokemonProto\x12\x1a\n\x12\x43ooldownCompleteMs\x18\x0e \x02(\x03\x12\x0f\n\x07Sponsor\x18\x0f \x02(\x05\x12\x15\n\rRenderingType\x18\x10 \x01(\x05\x1am\n\x17PokemonSummaryFortProto\x12\x15\n\rFortSummaryId\x18\x01 \x02(\t\x12\x16\n\x0eLastModifiedMs\x18\x02 \x02(\x03\x12\x10\n\x08Latitude\x18\x03 \x02(\x01\x12\x11\n\tLongitude\x18\x04 \x02(\x01\x1a<\n\x15\x43lientSpawnPointProto\x12\x10\n\x08Latitude\x18\x02 \x02(\x01\x12\x11\n\tLongitude\x18\x03 \x02(\x01\x1a\xfa\x01\n\x10WildPokemonProto\x12\x13\n\x0b\x45ncounterId\x18\x01 \x01(\x04\x12\x16\n\x0eLastModifiedMs\x18\x02 \x01(\x03\x12\x10\n\x08Latitude\x18\x03 \x01(\x01\x12\x11\n\tLongitude\x18\x04 \x01(\x01\x12\x14\n\x0cSpawnPointId\x18\x05 \x01(\t\x12:\n\x07pokemon\x18\x07 \x01(\x0b\x32).ResponseEnvelop.WildPokemonProto.Pokemon\x12\x18\n\x10TimeTillHiddenMs\x18\x0b \x01(\x05\x1a(\n\x07Pokemon\x12\n\n\x02Id\x18\x01 \x01(\x04\x12\x11\n\tPokemonId\x18\x02 \x01(\x05\x1aX\n\x12NearbyPokemonProto\x12\x15\n\rPokedexNumber\x18\x01 \x01(\x05\x12\x16\n\x0e\x44istanceMeters\x18\x02 \x01(\x02\x12\x13\n\x0b\x45ncounterId\x18\x03 \x01(\x04\x1aM\n\x0eProfilePayload\x12\x10\n\x08unknown1\x18\x01 \x02(\x05\x12)\n\x07profile\x18\x02 \x01(\x0b\x32\x18.ResponseEnvelop.Profile\x1a\xa8\x03\n\x07Profile\x12\x15\n\rcreation_time\x18\x01 \x02(\x03\x12\x10\n\x08username\x18\x02 \x01(\t\x12\x0c\n\x04team\x18\x05 \x01(\x05\x12\x10\n\x08tutorial\x18\x07 \x01(\x0c\x12\x36\n\x06\x61vatar\x18\x08 \x01(\x0b\x32&.ResponseEnvelop.Profile.AvatarDetails\x12\x14\n\x0cpoke_storage\x18\t \x01(\x05\x12\x14\n\x0citem_storage\x18\n \x01(\x05\x12\x11\n\tunknown11\x18\x0b \x01(\t\x12\x11\n\tunknown12\x18\x0c \x01(\t\x12\x11\n\tunknown13\x18\r \x01(\t\x12\x33\n\x08\x63urrency\x18\x0e \x03(\x0b\x32!.ResponseEnvelop.Profile.Currency\x1aX\n\rAvatarDetails\x12\x10\n\x08unknown2\x18\x02 \x01(\x05\x12\x10\n\x08unknown3\x18\x03 \x01(\x05\x12\x10\n\x08unknown9\x18\t \x01(\x05\x12\x11\n\tunknown10\x18\n \x01(\x05\x1a(\n\x08\x43urrency\x12\x0c\n\x04type\x18\x01 \x02(\t\x12\x0e\n\x06\x61mount\x18\x02 \x01(\x05') 22 | ) 23 | _sym_db.RegisterFileDescriptor(DESCRIPTOR) 24 | 25 | 26 | 27 | 28 | _REQUESTENVELOP_REQUESTS = _descriptor.Descriptor( 29 | name='Requests', 30 | full_name='RequestEnvelop.Requests', 31 | filename=None, 32 | file=DESCRIPTOR, 33 | containing_type=None, 34 | fields=[ 35 | _descriptor.FieldDescriptor( 36 | name='type', full_name='RequestEnvelop.Requests.type', index=0, 37 | number=1, type=5, cpp_type=1, label=2, 38 | has_default_value=False, default_value=0, 39 | message_type=None, enum_type=None, containing_type=None, 40 | is_extension=False, extension_scope=None, 41 | options=None), 42 | _descriptor.FieldDescriptor( 43 | name='message', full_name='RequestEnvelop.Requests.message', index=1, 44 | number=2, type=12, cpp_type=9, label=1, 45 | has_default_value=False, default_value=_b(""), 46 | message_type=None, enum_type=None, containing_type=None, 47 | is_extension=False, extension_scope=None, 48 | options=None), 49 | ], 50 | extensions=[ 51 | ], 52 | nested_types=[], 53 | enum_types=[ 54 | ], 55 | options=None, 56 | is_extendable=False, 57 | extension_ranges=[], 58 | oneofs=[ 59 | ], 60 | serialized_start=305, 61 | serialized_end=346, 62 | ) 63 | 64 | _REQUESTENVELOP_MESSAGESINGLESTRING = _descriptor.Descriptor( 65 | name='MessageSingleString', 66 | full_name='RequestEnvelop.MessageSingleString', 67 | filename=None, 68 | file=DESCRIPTOR, 69 | containing_type=None, 70 | fields=[ 71 | _descriptor.FieldDescriptor( 72 | name='bytes', full_name='RequestEnvelop.MessageSingleString.bytes', index=0, 73 | number=1, type=12, cpp_type=9, label=2, 74 | has_default_value=False, default_value=_b(""), 75 | message_type=None, enum_type=None, containing_type=None, 76 | is_extension=False, extension_scope=None, 77 | options=None), 78 | ], 79 | extensions=[ 80 | ], 81 | nested_types=[], 82 | enum_types=[ 83 | ], 84 | options=None, 85 | is_extendable=False, 86 | extension_ranges=[], 87 | oneofs=[ 88 | ], 89 | serialized_start=348, 90 | serialized_end=384, 91 | ) 92 | 93 | _REQUESTENVELOP_MESSAGESINGLEINT = _descriptor.Descriptor( 94 | name='MessageSingleInt', 95 | full_name='RequestEnvelop.MessageSingleInt', 96 | filename=None, 97 | file=DESCRIPTOR, 98 | containing_type=None, 99 | fields=[ 100 | _descriptor.FieldDescriptor( 101 | name='f1', full_name='RequestEnvelop.MessageSingleInt.f1', index=0, 102 | number=1, type=3, cpp_type=2, label=2, 103 | has_default_value=False, default_value=0, 104 | message_type=None, enum_type=None, containing_type=None, 105 | is_extension=False, extension_scope=None, 106 | options=None), 107 | ], 108 | extensions=[ 109 | ], 110 | nested_types=[], 111 | enum_types=[ 112 | ], 113 | options=None, 114 | is_extendable=False, 115 | extension_ranges=[], 116 | oneofs=[ 117 | ], 118 | serialized_start=386, 119 | serialized_end=416, 120 | ) 121 | 122 | _REQUESTENVELOP_MESSAGETWOINTS = _descriptor.Descriptor( 123 | name='MessageTwoInts', 124 | full_name='RequestEnvelop.MessageTwoInts', 125 | filename=None, 126 | file=DESCRIPTOR, 127 | containing_type=None, 128 | fields=[ 129 | _descriptor.FieldDescriptor( 130 | name='f1', full_name='RequestEnvelop.MessageTwoInts.f1', index=0, 131 | number=1, type=3, cpp_type=2, label=2, 132 | has_default_value=False, default_value=0, 133 | message_type=None, enum_type=None, containing_type=None, 134 | is_extension=False, extension_scope=None, 135 | options=None), 136 | _descriptor.FieldDescriptor( 137 | name='f5', full_name='RequestEnvelop.MessageTwoInts.f5', index=1, 138 | number=5, type=3, cpp_type=2, label=2, 139 | has_default_value=False, default_value=0, 140 | message_type=None, enum_type=None, containing_type=None, 141 | is_extension=False, extension_scope=None, 142 | options=None), 143 | ], 144 | extensions=[ 145 | ], 146 | nested_types=[], 147 | enum_types=[ 148 | ], 149 | options=None, 150 | is_extendable=False, 151 | extension_ranges=[], 152 | oneofs=[ 153 | ], 154 | serialized_start=418, 155 | serialized_end=458, 156 | ) 157 | 158 | _REQUESTENVELOP_MESSAGEQUAD = _descriptor.Descriptor( 159 | name='MessageQuad', 160 | full_name='RequestEnvelop.MessageQuad', 161 | filename=None, 162 | file=DESCRIPTOR, 163 | containing_type=None, 164 | fields=[ 165 | _descriptor.FieldDescriptor( 166 | name='f1', full_name='RequestEnvelop.MessageQuad.f1', index=0, 167 | number=1, type=12, cpp_type=9, label=2, 168 | has_default_value=False, default_value=_b(""), 169 | message_type=None, enum_type=None, containing_type=None, 170 | is_extension=False, extension_scope=None, 171 | options=None), 172 | _descriptor.FieldDescriptor( 173 | name='f2', full_name='RequestEnvelop.MessageQuad.f2', index=1, 174 | number=2, type=12, cpp_type=9, label=2, 175 | has_default_value=False, default_value=_b(""), 176 | message_type=None, enum_type=None, containing_type=None, 177 | is_extension=False, extension_scope=None, 178 | options=None), 179 | _descriptor.FieldDescriptor( 180 | name='lat', full_name='RequestEnvelop.MessageQuad.lat', index=2, 181 | number=3, type=6, cpp_type=4, label=2, 182 | has_default_value=False, default_value=0, 183 | message_type=None, enum_type=None, containing_type=None, 184 | is_extension=False, extension_scope=None, 185 | options=None), 186 | _descriptor.FieldDescriptor( 187 | name='long', full_name='RequestEnvelop.MessageQuad.long', index=3, 188 | number=4, type=6, cpp_type=4, label=2, 189 | has_default_value=False, default_value=0, 190 | message_type=None, enum_type=None, containing_type=None, 191 | is_extension=False, extension_scope=None, 192 | options=None), 193 | ], 194 | extensions=[ 195 | ], 196 | nested_types=[], 197 | enum_types=[ 198 | ], 199 | options=None, 200 | is_extendable=False, 201 | extension_ranges=[], 202 | oneofs=[ 203 | ], 204 | serialized_start=460, 205 | serialized_end=524, 206 | ) 207 | 208 | _REQUESTENVELOP_WAT = _descriptor.Descriptor( 209 | name='Wat', 210 | full_name='RequestEnvelop.Wat', 211 | filename=None, 212 | file=DESCRIPTOR, 213 | containing_type=None, 214 | fields=[ 215 | _descriptor.FieldDescriptor( 216 | name='lols', full_name='RequestEnvelop.Wat.lols', index=0, 217 | number=134217728, type=3, cpp_type=2, label=3, 218 | has_default_value=False, default_value=[], 219 | message_type=None, enum_type=None, containing_type=None, 220 | is_extension=False, extension_scope=None, 221 | options=None), 222 | ], 223 | extensions=[ 224 | ], 225 | nested_types=[], 226 | enum_types=[ 227 | ], 228 | options=None, 229 | is_extendable=False, 230 | extension_ranges=[], 231 | oneofs=[ 232 | ], 233 | serialized_start=526, 234 | serialized_end=548, 235 | ) 236 | 237 | _REQUESTENVELOP_UNKNOWN3 = _descriptor.Descriptor( 238 | name='Unknown3', 239 | full_name='RequestEnvelop.Unknown3', 240 | filename=None, 241 | file=DESCRIPTOR, 242 | containing_type=None, 243 | fields=[ 244 | _descriptor.FieldDescriptor( 245 | name='unknown4', full_name='RequestEnvelop.Unknown3.unknown4', index=0, 246 | number=1, type=12, cpp_type=9, label=2, 247 | has_default_value=False, default_value=_b(""), 248 | message_type=None, enum_type=None, containing_type=None, 249 | is_extension=False, extension_scope=None, 250 | options=None), 251 | _descriptor.FieldDescriptor( 252 | name='unknown2', full_name='RequestEnvelop.Unknown3.unknown2', index=1, 253 | number=2, type=12, cpp_type=9, label=1, 254 | has_default_value=False, default_value=_b(""), 255 | message_type=None, enum_type=None, containing_type=None, 256 | is_extension=False, extension_scope=None, 257 | options=None), 258 | _descriptor.FieldDescriptor( 259 | name='lat', full_name='RequestEnvelop.Unknown3.lat', index=2, 260 | number=3, type=6, cpp_type=4, label=1, 261 | has_default_value=False, default_value=0, 262 | message_type=None, enum_type=None, containing_type=None, 263 | is_extension=False, extension_scope=None, 264 | options=None), 265 | _descriptor.FieldDescriptor( 266 | name='long', full_name='RequestEnvelop.Unknown3.long', index=3, 267 | number=4, type=6, cpp_type=4, label=1, 268 | has_default_value=False, default_value=0, 269 | message_type=None, enum_type=None, containing_type=None, 270 | is_extension=False, extension_scope=None, 271 | options=None), 272 | ], 273 | extensions=[ 274 | ], 275 | nested_types=[], 276 | enum_types=[ 277 | ], 278 | options=None, 279 | is_extendable=False, 280 | extension_ranges=[], 281 | oneofs=[ 282 | ], 283 | serialized_start=550, 284 | serialized_end=623, 285 | ) 286 | 287 | _REQUESTENVELOP_UNKNOWN6_UNKNOWN2 = _descriptor.Descriptor( 288 | name='Unknown2', 289 | full_name='RequestEnvelop.Unknown6.Unknown2', 290 | filename=None, 291 | file=DESCRIPTOR, 292 | containing_type=None, 293 | fields=[ 294 | _descriptor.FieldDescriptor( 295 | name='unknown1', full_name='RequestEnvelop.Unknown6.Unknown2.unknown1', index=0, 296 | number=1, type=12, cpp_type=9, label=2, 297 | has_default_value=False, default_value=_b(""), 298 | message_type=None, enum_type=None, containing_type=None, 299 | is_extension=False, extension_scope=None, 300 | options=None), 301 | ], 302 | extensions=[ 303 | ], 304 | nested_types=[], 305 | enum_types=[ 306 | ], 307 | options=None, 308 | is_extendable=False, 309 | extension_ranges=[], 310 | oneofs=[ 311 | ], 312 | serialized_start=708, 313 | serialized_end=736, 314 | ) 315 | 316 | _REQUESTENVELOP_UNKNOWN6 = _descriptor.Descriptor( 317 | name='Unknown6', 318 | full_name='RequestEnvelop.Unknown6', 319 | filename=None, 320 | file=DESCRIPTOR, 321 | containing_type=None, 322 | fields=[ 323 | _descriptor.FieldDescriptor( 324 | name='unknown1', full_name='RequestEnvelop.Unknown6.unknown1', index=0, 325 | number=1, type=5, cpp_type=1, label=2, 326 | has_default_value=False, default_value=0, 327 | message_type=None, enum_type=None, containing_type=None, 328 | is_extension=False, extension_scope=None, 329 | options=None), 330 | _descriptor.FieldDescriptor( 331 | name='unknown2', full_name='RequestEnvelop.Unknown6.unknown2', index=1, 332 | number=2, type=11, cpp_type=10, label=2, 333 | has_default_value=False, default_value=None, 334 | message_type=None, enum_type=None, containing_type=None, 335 | is_extension=False, extension_scope=None, 336 | options=None), 337 | ], 338 | extensions=[ 339 | ], 340 | nested_types=[_REQUESTENVELOP_UNKNOWN6_UNKNOWN2, ], 341 | enum_types=[ 342 | ], 343 | options=None, 344 | is_extendable=False, 345 | extension_ranges=[], 346 | oneofs=[ 347 | ], 348 | serialized_start=625, 349 | serialized_end=736, 350 | ) 351 | 352 | _REQUESTENVELOP_AUTHINFO_JWT = _descriptor.Descriptor( 353 | name='JWT', 354 | full_name='RequestEnvelop.AuthInfo.JWT', 355 | filename=None, 356 | file=DESCRIPTOR, 357 | containing_type=None, 358 | fields=[ 359 | _descriptor.FieldDescriptor( 360 | name='contents', full_name='RequestEnvelop.AuthInfo.JWT.contents', index=0, 361 | number=1, type=9, cpp_type=9, label=2, 362 | has_default_value=False, default_value=_b("").decode('utf-8'), 363 | message_type=None, enum_type=None, containing_type=None, 364 | is_extension=False, extension_scope=None, 365 | options=None), 366 | _descriptor.FieldDescriptor( 367 | name='unknown13', full_name='RequestEnvelop.AuthInfo.JWT.unknown13', index=1, 368 | number=2, type=5, cpp_type=1, label=2, 369 | has_default_value=False, default_value=0, 370 | message_type=None, enum_type=None, containing_type=None, 371 | is_extension=False, extension_scope=None, 372 | options=None), 373 | ], 374 | extensions=[ 375 | ], 376 | nested_types=[], 377 | enum_types=[ 378 | ], 379 | options=None, 380 | is_extendable=False, 381 | extension_ranges=[], 382 | oneofs=[ 383 | ], 384 | serialized_start=813, 385 | serialized_end=855, 386 | ) 387 | 388 | _REQUESTENVELOP_AUTHINFO = _descriptor.Descriptor( 389 | name='AuthInfo', 390 | full_name='RequestEnvelop.AuthInfo', 391 | filename=None, 392 | file=DESCRIPTOR, 393 | containing_type=None, 394 | fields=[ 395 | _descriptor.FieldDescriptor( 396 | name='provider', full_name='RequestEnvelop.AuthInfo.provider', index=0, 397 | number=1, type=9, cpp_type=9, label=2, 398 | has_default_value=False, default_value=_b("").decode('utf-8'), 399 | message_type=None, enum_type=None, containing_type=None, 400 | is_extension=False, extension_scope=None, 401 | options=None), 402 | _descriptor.FieldDescriptor( 403 | name='token', full_name='RequestEnvelop.AuthInfo.token', index=1, 404 | number=2, type=11, cpp_type=10, label=2, 405 | has_default_value=False, default_value=None, 406 | message_type=None, enum_type=None, containing_type=None, 407 | is_extension=False, extension_scope=None, 408 | options=None), 409 | ], 410 | extensions=[ 411 | ], 412 | nested_types=[_REQUESTENVELOP_AUTHINFO_JWT, ], 413 | enum_types=[ 414 | ], 415 | options=None, 416 | is_extendable=False, 417 | extension_ranges=[], 418 | oneofs=[ 419 | ], 420 | serialized_start=738, 421 | serialized_end=855, 422 | ) 423 | 424 | _REQUESTENVELOP = _descriptor.Descriptor( 425 | name='RequestEnvelop', 426 | full_name='RequestEnvelop', 427 | filename=None, 428 | file=DESCRIPTOR, 429 | containing_type=None, 430 | fields=[ 431 | _descriptor.FieldDescriptor( 432 | name='unknown1', full_name='RequestEnvelop.unknown1', index=0, 433 | number=1, type=5, cpp_type=1, label=2, 434 | has_default_value=False, default_value=0, 435 | message_type=None, enum_type=None, containing_type=None, 436 | is_extension=False, extension_scope=None, 437 | options=None), 438 | _descriptor.FieldDescriptor( 439 | name='rpc_id', full_name='RequestEnvelop.rpc_id', index=1, 440 | number=3, type=3, cpp_type=2, label=1, 441 | has_default_value=False, default_value=0, 442 | message_type=None, enum_type=None, containing_type=None, 443 | is_extension=False, extension_scope=None, 444 | options=None), 445 | _descriptor.FieldDescriptor( 446 | name='requests', full_name='RequestEnvelop.requests', index=2, 447 | number=4, type=11, cpp_type=10, label=3, 448 | has_default_value=False, default_value=[], 449 | message_type=None, enum_type=None, containing_type=None, 450 | is_extension=False, extension_scope=None, 451 | options=None), 452 | _descriptor.FieldDescriptor( 453 | name='unknown6', full_name='RequestEnvelop.unknown6', index=3, 454 | number=6, type=11, cpp_type=10, label=1, 455 | has_default_value=False, default_value=None, 456 | message_type=None, enum_type=None, containing_type=None, 457 | is_extension=False, extension_scope=None, 458 | options=None), 459 | _descriptor.FieldDescriptor( 460 | name='latitude', full_name='RequestEnvelop.latitude', index=4, 461 | number=7, type=6, cpp_type=4, label=1, 462 | has_default_value=False, default_value=0, 463 | message_type=None, enum_type=None, containing_type=None, 464 | is_extension=False, extension_scope=None, 465 | options=None), 466 | _descriptor.FieldDescriptor( 467 | name='longitude', full_name='RequestEnvelop.longitude', index=5, 468 | number=8, type=6, cpp_type=4, label=1, 469 | has_default_value=False, default_value=0, 470 | message_type=None, enum_type=None, containing_type=None, 471 | is_extension=False, extension_scope=None, 472 | options=None), 473 | _descriptor.FieldDescriptor( 474 | name='altitude', full_name='RequestEnvelop.altitude', index=6, 475 | number=9, type=6, cpp_type=4, label=1, 476 | has_default_value=False, default_value=0, 477 | message_type=None, enum_type=None, containing_type=None, 478 | is_extension=False, extension_scope=None, 479 | options=None), 480 | _descriptor.FieldDescriptor( 481 | name='auth', full_name='RequestEnvelop.auth', index=7, 482 | number=10, type=11, cpp_type=10, label=1, 483 | has_default_value=False, default_value=None, 484 | message_type=None, enum_type=None, containing_type=None, 485 | is_extension=False, extension_scope=None, 486 | options=None), 487 | _descriptor.FieldDescriptor( 488 | name='unknown11', full_name='RequestEnvelop.unknown11', index=8, 489 | number=11, type=11, cpp_type=10, label=1, 490 | has_default_value=False, default_value=None, 491 | message_type=None, enum_type=None, containing_type=None, 492 | is_extension=False, extension_scope=None, 493 | options=None), 494 | _descriptor.FieldDescriptor( 495 | name='unknown12', full_name='RequestEnvelop.unknown12', index=9, 496 | number=12, type=3, cpp_type=2, label=1, 497 | has_default_value=False, default_value=0, 498 | message_type=None, enum_type=None, containing_type=None, 499 | is_extension=False, extension_scope=None, 500 | options=None), 501 | ], 502 | extensions=[ 503 | ], 504 | nested_types=[_REQUESTENVELOP_REQUESTS, _REQUESTENVELOP_MESSAGESINGLESTRING, _REQUESTENVELOP_MESSAGESINGLEINT, _REQUESTENVELOP_MESSAGETWOINTS, _REQUESTENVELOP_MESSAGEQUAD, _REQUESTENVELOP_WAT, _REQUESTENVELOP_UNKNOWN3, _REQUESTENVELOP_UNKNOWN6, _REQUESTENVELOP_AUTHINFO, ], 505 | enum_types=[ 506 | ], 507 | options=None, 508 | is_extendable=False, 509 | extension_ranges=[], 510 | oneofs=[ 511 | ], 512 | serialized_start=18, 513 | serialized_end=855, 514 | ) 515 | 516 | 517 | _UNKNOWNAUTH = _descriptor.Descriptor( 518 | name='UnknownAuth', 519 | full_name='UnknownAuth', 520 | filename=None, 521 | file=DESCRIPTOR, 522 | containing_type=None, 523 | fields=[ 524 | _descriptor.FieldDescriptor( 525 | name='unknown71', full_name='UnknownAuth.unknown71', index=0, 526 | number=1, type=12, cpp_type=9, label=1, 527 | has_default_value=False, default_value=_b(""), 528 | message_type=None, enum_type=None, containing_type=None, 529 | is_extension=False, extension_scope=None, 530 | options=None), 531 | _descriptor.FieldDescriptor( 532 | name='unknown72', full_name='UnknownAuth.unknown72', index=1, 533 | number=2, type=3, cpp_type=2, label=1, 534 | has_default_value=False, default_value=0, 535 | message_type=None, enum_type=None, containing_type=None, 536 | is_extension=False, extension_scope=None, 537 | options=None), 538 | _descriptor.FieldDescriptor( 539 | name='unknown73', full_name='UnknownAuth.unknown73', index=2, 540 | number=3, type=12, cpp_type=9, label=1, 541 | has_default_value=False, default_value=_b(""), 542 | message_type=None, enum_type=None, containing_type=None, 543 | is_extension=False, extension_scope=None, 544 | options=None), 545 | ], 546 | extensions=[ 547 | ], 548 | nested_types=[], 549 | enum_types=[ 550 | ], 551 | options=None, 552 | is_extendable=False, 553 | extension_ranges=[], 554 | oneofs=[ 555 | ], 556 | serialized_start=857, 557 | serialized_end=927, 558 | ) 559 | 560 | 561 | _RESPONSEENVELOP_UNKNOWN6_UNKNOWN2 = _descriptor.Descriptor( 562 | name='Unknown2', 563 | full_name='ResponseEnvelop.Unknown6.Unknown2', 564 | filename=None, 565 | file=DESCRIPTOR, 566 | containing_type=None, 567 | fields=[ 568 | _descriptor.FieldDescriptor( 569 | name='unknown1', full_name='ResponseEnvelop.Unknown6.Unknown2.unknown1', index=0, 570 | number=1, type=12, cpp_type=9, label=2, 571 | has_default_value=False, default_value=_b(""), 572 | message_type=None, enum_type=None, containing_type=None, 573 | is_extension=False, extension_scope=None, 574 | options=None), 575 | ], 576 | extensions=[ 577 | ], 578 | nested_types=[], 579 | enum_types=[ 580 | ], 581 | options=None, 582 | is_extendable=False, 583 | extension_ranges=[], 584 | oneofs=[ 585 | ], 586 | serialized_start=708, 587 | serialized_end=736, 588 | ) 589 | 590 | _RESPONSEENVELOP_UNKNOWN6 = _descriptor.Descriptor( 591 | name='Unknown6', 592 | full_name='ResponseEnvelop.Unknown6', 593 | filename=None, 594 | file=DESCRIPTOR, 595 | containing_type=None, 596 | fields=[ 597 | _descriptor.FieldDescriptor( 598 | name='unknown1', full_name='ResponseEnvelop.Unknown6.unknown1', index=0, 599 | number=1, type=5, cpp_type=1, label=2, 600 | has_default_value=False, default_value=0, 601 | message_type=None, enum_type=None, containing_type=None, 602 | is_extension=False, extension_scope=None, 603 | options=None), 604 | _descriptor.FieldDescriptor( 605 | name='unknown2', full_name='ResponseEnvelop.Unknown6.unknown2', index=1, 606 | number=2, type=11, cpp_type=10, label=2, 607 | has_default_value=False, default_value=None, 608 | message_type=None, enum_type=None, containing_type=None, 609 | is_extension=False, extension_scope=None, 610 | options=None), 611 | ], 612 | extensions=[ 613 | ], 614 | nested_types=[_RESPONSEENVELOP_UNKNOWN6_UNKNOWN2, ], 615 | enum_types=[ 616 | ], 617 | options=None, 618 | is_extendable=False, 619 | extension_ranges=[], 620 | oneofs=[ 621 | ], 622 | serialized_start=1096, 623 | serialized_end=1208, 624 | ) 625 | 626 | _RESPONSEENVELOP_HEARTBEATPAYLOAD = _descriptor.Descriptor( 627 | name='HeartbeatPayload', 628 | full_name='ResponseEnvelop.HeartbeatPayload', 629 | filename=None, 630 | file=DESCRIPTOR, 631 | containing_type=None, 632 | fields=[ 633 | _descriptor.FieldDescriptor( 634 | name='cells', full_name='ResponseEnvelop.HeartbeatPayload.cells', index=0, 635 | number=1, type=11, cpp_type=10, label=3, 636 | has_default_value=False, default_value=[], 637 | message_type=None, enum_type=None, containing_type=None, 638 | is_extension=False, extension_scope=None, 639 | options=None), 640 | ], 641 | extensions=[ 642 | ], 643 | nested_types=[], 644 | enum_types=[ 645 | ], 646 | options=None, 647 | is_extendable=False, 648 | extension_ranges=[], 649 | oneofs=[ 650 | ], 651 | serialized_start=1210, 652 | serialized_end=1275, 653 | ) 654 | 655 | _RESPONSEENVELOP_CLIENTMAPCELL = _descriptor.Descriptor( 656 | name='ClientMapCell', 657 | full_name='ResponseEnvelop.ClientMapCell', 658 | filename=None, 659 | file=DESCRIPTOR, 660 | containing_type=None, 661 | fields=[ 662 | _descriptor.FieldDescriptor( 663 | name='S2CellId', full_name='ResponseEnvelop.ClientMapCell.S2CellId', index=0, 664 | number=1, type=4, cpp_type=4, label=2, 665 | has_default_value=False, default_value=0, 666 | message_type=None, enum_type=None, containing_type=None, 667 | is_extension=False, extension_scope=None, 668 | options=None), 669 | _descriptor.FieldDescriptor( 670 | name='AsOfTimeMs', full_name='ResponseEnvelop.ClientMapCell.AsOfTimeMs', index=1, 671 | number=2, type=3, cpp_type=2, label=2, 672 | has_default_value=False, default_value=0, 673 | message_type=None, enum_type=None, containing_type=None, 674 | is_extension=False, extension_scope=None, 675 | options=None), 676 | _descriptor.FieldDescriptor( 677 | name='Fort', full_name='ResponseEnvelop.ClientMapCell.Fort', index=2, 678 | number=3, type=11, cpp_type=10, label=3, 679 | has_default_value=False, default_value=[], 680 | message_type=None, enum_type=None, containing_type=None, 681 | is_extension=False, extension_scope=None, 682 | options=None), 683 | _descriptor.FieldDescriptor( 684 | name='SpawnPoint', full_name='ResponseEnvelop.ClientMapCell.SpawnPoint', index=3, 685 | number=4, type=11, cpp_type=10, label=3, 686 | has_default_value=False, default_value=[], 687 | message_type=None, enum_type=None, containing_type=None, 688 | is_extension=False, extension_scope=None, 689 | options=None), 690 | _descriptor.FieldDescriptor( 691 | name='WildPokemon', full_name='ResponseEnvelop.ClientMapCell.WildPokemon', index=4, 692 | number=5, type=11, cpp_type=10, label=3, 693 | has_default_value=False, default_value=[], 694 | message_type=None, enum_type=None, containing_type=None, 695 | is_extension=False, extension_scope=None, 696 | options=None), 697 | _descriptor.FieldDescriptor( 698 | name='IsTruncatedList', full_name='ResponseEnvelop.ClientMapCell.IsTruncatedList', index=5, 699 | number=7, type=8, cpp_type=7, label=1, 700 | has_default_value=False, default_value=False, 701 | message_type=None, enum_type=None, containing_type=None, 702 | is_extension=False, extension_scope=None, 703 | options=None), 704 | _descriptor.FieldDescriptor( 705 | name='FortSummary', full_name='ResponseEnvelop.ClientMapCell.FortSummary', index=6, 706 | number=8, type=11, cpp_type=10, label=3, 707 | has_default_value=False, default_value=[], 708 | message_type=None, enum_type=None, containing_type=None, 709 | is_extension=False, extension_scope=None, 710 | options=None), 711 | _descriptor.FieldDescriptor( 712 | name='DecimatedSpawnPoint', full_name='ResponseEnvelop.ClientMapCell.DecimatedSpawnPoint', index=7, 713 | number=9, type=11, cpp_type=10, label=3, 714 | has_default_value=False, default_value=[], 715 | message_type=None, enum_type=None, containing_type=None, 716 | is_extension=False, extension_scope=None, 717 | options=None), 718 | _descriptor.FieldDescriptor( 719 | name='MapPokemon', full_name='ResponseEnvelop.ClientMapCell.MapPokemon', index=8, 720 | number=10, type=11, cpp_type=10, label=3, 721 | has_default_value=False, default_value=[], 722 | message_type=None, enum_type=None, containing_type=None, 723 | is_extension=False, extension_scope=None, 724 | options=None), 725 | _descriptor.FieldDescriptor( 726 | name='NearbyPokemon', full_name='ResponseEnvelop.ClientMapCell.NearbyPokemon', index=9, 727 | number=11, type=11, cpp_type=10, label=3, 728 | has_default_value=False, default_value=[], 729 | message_type=None, enum_type=None, containing_type=None, 730 | is_extension=False, extension_scope=None, 731 | options=None), 732 | ], 733 | extensions=[ 734 | ], 735 | nested_types=[], 736 | enum_types=[ 737 | ], 738 | options=None, 739 | is_extendable=False, 740 | extension_ranges=[], 741 | oneofs=[ 742 | ], 743 | serialized_start=1278, 744 | serialized_end=1767, 745 | ) 746 | 747 | _RESPONSEENVELOP_WILDPOKEMON = _descriptor.Descriptor( 748 | name='WildPokemon', 749 | full_name='ResponseEnvelop.WildPokemon', 750 | filename=None, 751 | file=DESCRIPTOR, 752 | containing_type=None, 753 | fields=[ 754 | _descriptor.FieldDescriptor( 755 | name='UniqueId', full_name='ResponseEnvelop.WildPokemon.UniqueId', index=0, 756 | number=1, type=9, cpp_type=9, label=2, 757 | has_default_value=False, default_value=_b("").decode('utf-8'), 758 | message_type=None, enum_type=None, containing_type=None, 759 | is_extension=False, extension_scope=None, 760 | options=None), 761 | _descriptor.FieldDescriptor( 762 | name='PokemonId', full_name='ResponseEnvelop.WildPokemon.PokemonId', index=1, 763 | number=2, type=9, cpp_type=9, label=2, 764 | has_default_value=False, default_value=_b("").decode('utf-8'), 765 | message_type=None, enum_type=None, containing_type=None, 766 | is_extension=False, extension_scope=None, 767 | options=None), 768 | _descriptor.FieldDescriptor( 769 | name='pokemon', full_name='ResponseEnvelop.WildPokemon.pokemon', index=2, 770 | number=11, type=11, cpp_type=10, label=3, 771 | has_default_value=False, default_value=[], 772 | message_type=None, enum_type=None, containing_type=None, 773 | is_extension=False, extension_scope=None, 774 | options=None), 775 | ], 776 | extensions=[ 777 | ], 778 | nested_types=[], 779 | enum_types=[ 780 | ], 781 | options=None, 782 | is_extendable=False, 783 | extension_ranges=[], 784 | oneofs=[ 785 | ], 786 | serialized_start=1769, 787 | serialized_end=1873, 788 | ) 789 | 790 | _RESPONSEENVELOP_MAPPOKEMONPROTO = _descriptor.Descriptor( 791 | name='MapPokemonProto', 792 | full_name='ResponseEnvelop.MapPokemonProto', 793 | filename=None, 794 | file=DESCRIPTOR, 795 | containing_type=None, 796 | fields=[ 797 | _descriptor.FieldDescriptor( 798 | name='SpawnpointId', full_name='ResponseEnvelop.MapPokemonProto.SpawnpointId', index=0, 799 | number=1, type=9, cpp_type=9, label=2, 800 | has_default_value=False, default_value=_b("").decode('utf-8'), 801 | message_type=None, enum_type=None, containing_type=None, 802 | is_extension=False, extension_scope=None, 803 | options=None), 804 | _descriptor.FieldDescriptor( 805 | name='EncounterId', full_name='ResponseEnvelop.MapPokemonProto.EncounterId', index=1, 806 | number=2, type=4, cpp_type=4, label=2, 807 | has_default_value=False, default_value=0, 808 | message_type=None, enum_type=None, containing_type=None, 809 | is_extension=False, extension_scope=None, 810 | options=None), 811 | _descriptor.FieldDescriptor( 812 | name='PokedexTypeId', full_name='ResponseEnvelop.MapPokemonProto.PokedexTypeId', index=2, 813 | number=3, type=5, cpp_type=1, label=2, 814 | has_default_value=False, default_value=0, 815 | message_type=None, enum_type=None, containing_type=None, 816 | is_extension=False, extension_scope=None, 817 | options=None), 818 | _descriptor.FieldDescriptor( 819 | name='ExpirationTimeMs', full_name='ResponseEnvelop.MapPokemonProto.ExpirationTimeMs', index=3, 820 | number=4, type=3, cpp_type=2, label=2, 821 | has_default_value=False, default_value=0, 822 | message_type=None, enum_type=None, containing_type=None, 823 | is_extension=False, extension_scope=None, 824 | options=None), 825 | _descriptor.FieldDescriptor( 826 | name='Latitude', full_name='ResponseEnvelop.MapPokemonProto.Latitude', index=4, 827 | number=5, type=1, cpp_type=5, label=2, 828 | has_default_value=False, default_value=float(0), 829 | message_type=None, enum_type=None, containing_type=None, 830 | is_extension=False, extension_scope=None, 831 | options=None), 832 | _descriptor.FieldDescriptor( 833 | name='Longitude', full_name='ResponseEnvelop.MapPokemonProto.Longitude', index=5, 834 | number=6, type=1, cpp_type=5, label=2, 835 | has_default_value=False, default_value=float(0), 836 | message_type=None, enum_type=None, containing_type=None, 837 | is_extension=False, extension_scope=None, 838 | options=None), 839 | ], 840 | extensions=[ 841 | ], 842 | nested_types=[], 843 | enum_types=[ 844 | ], 845 | options=None, 846 | is_extendable=False, 847 | extension_ranges=[], 848 | oneofs=[ 849 | ], 850 | serialized_start=1876, 851 | serialized_end=2022, 852 | ) 853 | 854 | _RESPONSEENVELOP_POKEMONFORTPROTO = _descriptor.Descriptor( 855 | name='PokemonFortProto', 856 | full_name='ResponseEnvelop.PokemonFortProto', 857 | filename=None, 858 | file=DESCRIPTOR, 859 | containing_type=None, 860 | fields=[ 861 | _descriptor.FieldDescriptor( 862 | name='FortId', full_name='ResponseEnvelop.PokemonFortProto.FortId', index=0, 863 | number=1, type=9, cpp_type=9, label=2, 864 | has_default_value=False, default_value=_b("").decode('utf-8'), 865 | message_type=None, enum_type=None, containing_type=None, 866 | is_extension=False, extension_scope=None, 867 | options=None), 868 | _descriptor.FieldDescriptor( 869 | name='LastModifiedMs', full_name='ResponseEnvelop.PokemonFortProto.LastModifiedMs', index=1, 870 | number=2, type=3, cpp_type=2, label=2, 871 | has_default_value=False, default_value=0, 872 | message_type=None, enum_type=None, containing_type=None, 873 | is_extension=False, extension_scope=None, 874 | options=None), 875 | _descriptor.FieldDescriptor( 876 | name='Latitude', full_name='ResponseEnvelop.PokemonFortProto.Latitude', index=2, 877 | number=3, type=1, cpp_type=5, label=2, 878 | has_default_value=False, default_value=float(0), 879 | message_type=None, enum_type=None, containing_type=None, 880 | is_extension=False, extension_scope=None, 881 | options=None), 882 | _descriptor.FieldDescriptor( 883 | name='Longitude', full_name='ResponseEnvelop.PokemonFortProto.Longitude', index=3, 884 | number=4, type=1, cpp_type=5, label=2, 885 | has_default_value=False, default_value=float(0), 886 | message_type=None, enum_type=None, containing_type=None, 887 | is_extension=False, extension_scope=None, 888 | options=None), 889 | _descriptor.FieldDescriptor( 890 | name='Team', full_name='ResponseEnvelop.PokemonFortProto.Team', index=4, 891 | number=5, type=5, cpp_type=1, label=2, 892 | has_default_value=False, default_value=0, 893 | message_type=None, enum_type=None, containing_type=None, 894 | is_extension=False, extension_scope=None, 895 | options=None), 896 | _descriptor.FieldDescriptor( 897 | name='GuardPokemonId', full_name='ResponseEnvelop.PokemonFortProto.GuardPokemonId', index=5, 898 | number=6, type=5, cpp_type=1, label=2, 899 | has_default_value=False, default_value=0, 900 | message_type=None, enum_type=None, containing_type=None, 901 | is_extension=False, extension_scope=None, 902 | options=None), 903 | _descriptor.FieldDescriptor( 904 | name='GuardPokemonLevel', full_name='ResponseEnvelop.PokemonFortProto.GuardPokemonLevel', index=6, 905 | number=7, type=5, cpp_type=1, label=2, 906 | has_default_value=False, default_value=0, 907 | message_type=None, enum_type=None, containing_type=None, 908 | is_extension=False, extension_scope=None, 909 | options=None), 910 | _descriptor.FieldDescriptor( 911 | name='Enabled', full_name='ResponseEnvelop.PokemonFortProto.Enabled', index=7, 912 | number=8, type=8, cpp_type=7, label=2, 913 | has_default_value=False, default_value=False, 914 | message_type=None, enum_type=None, containing_type=None, 915 | is_extension=False, extension_scope=None, 916 | options=None), 917 | _descriptor.FieldDescriptor( 918 | name='FortType', full_name='ResponseEnvelop.PokemonFortProto.FortType', index=8, 919 | number=9, type=5, cpp_type=1, label=2, 920 | has_default_value=False, default_value=0, 921 | message_type=None, enum_type=None, containing_type=None, 922 | is_extension=False, extension_scope=None, 923 | options=None), 924 | _descriptor.FieldDescriptor( 925 | name='GymPoints', full_name='ResponseEnvelop.PokemonFortProto.GymPoints', index=9, 926 | number=10, type=3, cpp_type=2, label=2, 927 | has_default_value=False, default_value=0, 928 | message_type=None, enum_type=None, containing_type=None, 929 | is_extension=False, extension_scope=None, 930 | options=None), 931 | _descriptor.FieldDescriptor( 932 | name='IsInBattle', full_name='ResponseEnvelop.PokemonFortProto.IsInBattle', index=10, 933 | number=11, type=8, cpp_type=7, label=2, 934 | has_default_value=False, default_value=False, 935 | message_type=None, enum_type=None, containing_type=None, 936 | is_extension=False, extension_scope=None, 937 | options=None), 938 | _descriptor.FieldDescriptor( 939 | name='ActivePokemon', full_name='ResponseEnvelop.PokemonFortProto.ActivePokemon', index=11, 940 | number=13, type=11, cpp_type=10, label=1, 941 | has_default_value=False, default_value=None, 942 | message_type=None, enum_type=None, containing_type=None, 943 | is_extension=False, extension_scope=None, 944 | options=None), 945 | _descriptor.FieldDescriptor( 946 | name='CooldownCompleteMs', full_name='ResponseEnvelop.PokemonFortProto.CooldownCompleteMs', index=12, 947 | number=14, type=3, cpp_type=2, label=2, 948 | has_default_value=False, default_value=0, 949 | message_type=None, enum_type=None, containing_type=None, 950 | is_extension=False, extension_scope=None, 951 | options=None), 952 | _descriptor.FieldDescriptor( 953 | name='Sponsor', full_name='ResponseEnvelop.PokemonFortProto.Sponsor', index=13, 954 | number=15, type=5, cpp_type=1, label=2, 955 | has_default_value=False, default_value=0, 956 | message_type=None, enum_type=None, containing_type=None, 957 | is_extension=False, extension_scope=None, 958 | options=None), 959 | _descriptor.FieldDescriptor( 960 | name='RenderingType', full_name='ResponseEnvelop.PokemonFortProto.RenderingType', index=14, 961 | number=16, type=5, cpp_type=1, label=1, 962 | has_default_value=False, default_value=0, 963 | message_type=None, enum_type=None, containing_type=None, 964 | is_extension=False, extension_scope=None, 965 | options=None), 966 | ], 967 | extensions=[ 968 | ], 969 | nested_types=[], 970 | enum_types=[ 971 | ], 972 | options=None, 973 | is_extendable=False, 974 | extension_ranges=[], 975 | oneofs=[ 976 | ], 977 | serialized_start=2025, 978 | serialized_end=2384, 979 | ) 980 | 981 | _RESPONSEENVELOP_POKEMONSUMMARYFORTPROTO = _descriptor.Descriptor( 982 | name='PokemonSummaryFortProto', 983 | full_name='ResponseEnvelop.PokemonSummaryFortProto', 984 | filename=None, 985 | file=DESCRIPTOR, 986 | containing_type=None, 987 | fields=[ 988 | _descriptor.FieldDescriptor( 989 | name='FortSummaryId', full_name='ResponseEnvelop.PokemonSummaryFortProto.FortSummaryId', index=0, 990 | number=1, type=9, cpp_type=9, label=2, 991 | has_default_value=False, default_value=_b("").decode('utf-8'), 992 | message_type=None, enum_type=None, containing_type=None, 993 | is_extension=False, extension_scope=None, 994 | options=None), 995 | _descriptor.FieldDescriptor( 996 | name='LastModifiedMs', full_name='ResponseEnvelop.PokemonSummaryFortProto.LastModifiedMs', index=1, 997 | number=2, type=3, cpp_type=2, label=2, 998 | has_default_value=False, default_value=0, 999 | message_type=None, enum_type=None, containing_type=None, 1000 | is_extension=False, extension_scope=None, 1001 | options=None), 1002 | _descriptor.FieldDescriptor( 1003 | name='Latitude', full_name='ResponseEnvelop.PokemonSummaryFortProto.Latitude', index=2, 1004 | number=3, type=1, cpp_type=5, label=2, 1005 | has_default_value=False, default_value=float(0), 1006 | message_type=None, enum_type=None, containing_type=None, 1007 | is_extension=False, extension_scope=None, 1008 | options=None), 1009 | _descriptor.FieldDescriptor( 1010 | name='Longitude', full_name='ResponseEnvelop.PokemonSummaryFortProto.Longitude', index=3, 1011 | number=4, type=1, cpp_type=5, label=2, 1012 | has_default_value=False, default_value=float(0), 1013 | message_type=None, enum_type=None, containing_type=None, 1014 | is_extension=False, extension_scope=None, 1015 | options=None), 1016 | ], 1017 | extensions=[ 1018 | ], 1019 | nested_types=[], 1020 | enum_types=[ 1021 | ], 1022 | options=None, 1023 | is_extendable=False, 1024 | extension_ranges=[], 1025 | oneofs=[ 1026 | ], 1027 | serialized_start=2386, 1028 | serialized_end=2495, 1029 | ) 1030 | 1031 | _RESPONSEENVELOP_CLIENTSPAWNPOINTPROTO = _descriptor.Descriptor( 1032 | name='ClientSpawnPointProto', 1033 | full_name='ResponseEnvelop.ClientSpawnPointProto', 1034 | filename=None, 1035 | file=DESCRIPTOR, 1036 | containing_type=None, 1037 | fields=[ 1038 | _descriptor.FieldDescriptor( 1039 | name='Latitude', full_name='ResponseEnvelop.ClientSpawnPointProto.Latitude', index=0, 1040 | number=2, type=1, cpp_type=5, label=2, 1041 | has_default_value=False, default_value=float(0), 1042 | message_type=None, enum_type=None, containing_type=None, 1043 | is_extension=False, extension_scope=None, 1044 | options=None), 1045 | _descriptor.FieldDescriptor( 1046 | name='Longitude', full_name='ResponseEnvelop.ClientSpawnPointProto.Longitude', index=1, 1047 | number=3, type=1, cpp_type=5, label=2, 1048 | has_default_value=False, default_value=float(0), 1049 | message_type=None, enum_type=None, containing_type=None, 1050 | is_extension=False, extension_scope=None, 1051 | options=None), 1052 | ], 1053 | extensions=[ 1054 | ], 1055 | nested_types=[], 1056 | enum_types=[ 1057 | ], 1058 | options=None, 1059 | is_extendable=False, 1060 | extension_ranges=[], 1061 | oneofs=[ 1062 | ], 1063 | serialized_start=2497, 1064 | serialized_end=2557, 1065 | ) 1066 | 1067 | _RESPONSEENVELOP_WILDPOKEMONPROTO_POKEMON = _descriptor.Descriptor( 1068 | name='Pokemon', 1069 | full_name='ResponseEnvelop.WildPokemonProto.Pokemon', 1070 | filename=None, 1071 | file=DESCRIPTOR, 1072 | containing_type=None, 1073 | fields=[ 1074 | _descriptor.FieldDescriptor( 1075 | name='Id', full_name='ResponseEnvelop.WildPokemonProto.Pokemon.Id', index=0, 1076 | number=1, type=4, cpp_type=4, label=1, 1077 | has_default_value=False, default_value=0, 1078 | message_type=None, enum_type=None, containing_type=None, 1079 | is_extension=False, extension_scope=None, 1080 | options=None), 1081 | _descriptor.FieldDescriptor( 1082 | name='PokemonId', full_name='ResponseEnvelop.WildPokemonProto.Pokemon.PokemonId', index=1, 1083 | number=2, type=5, cpp_type=1, label=1, 1084 | has_default_value=False, default_value=0, 1085 | message_type=None, enum_type=None, containing_type=None, 1086 | is_extension=False, extension_scope=None, 1087 | options=None), 1088 | ], 1089 | extensions=[ 1090 | ], 1091 | nested_types=[], 1092 | enum_types=[ 1093 | ], 1094 | options=None, 1095 | is_extendable=False, 1096 | extension_ranges=[], 1097 | oneofs=[ 1098 | ], 1099 | serialized_start=2770, 1100 | serialized_end=2810, 1101 | ) 1102 | 1103 | _RESPONSEENVELOP_WILDPOKEMONPROTO = _descriptor.Descriptor( 1104 | name='WildPokemonProto', 1105 | full_name='ResponseEnvelop.WildPokemonProto', 1106 | filename=None, 1107 | file=DESCRIPTOR, 1108 | containing_type=None, 1109 | fields=[ 1110 | _descriptor.FieldDescriptor( 1111 | name='EncounterId', full_name='ResponseEnvelop.WildPokemonProto.EncounterId', index=0, 1112 | number=1, type=4, cpp_type=4, label=1, 1113 | has_default_value=False, default_value=0, 1114 | message_type=None, enum_type=None, containing_type=None, 1115 | is_extension=False, extension_scope=None, 1116 | options=None), 1117 | _descriptor.FieldDescriptor( 1118 | name='LastModifiedMs', full_name='ResponseEnvelop.WildPokemonProto.LastModifiedMs', index=1, 1119 | number=2, type=3, cpp_type=2, label=1, 1120 | has_default_value=False, default_value=0, 1121 | message_type=None, enum_type=None, containing_type=None, 1122 | is_extension=False, extension_scope=None, 1123 | options=None), 1124 | _descriptor.FieldDescriptor( 1125 | name='Latitude', full_name='ResponseEnvelop.WildPokemonProto.Latitude', index=2, 1126 | number=3, type=1, cpp_type=5, label=1, 1127 | has_default_value=False, default_value=float(0), 1128 | message_type=None, enum_type=None, containing_type=None, 1129 | is_extension=False, extension_scope=None, 1130 | options=None), 1131 | _descriptor.FieldDescriptor( 1132 | name='Longitude', full_name='ResponseEnvelop.WildPokemonProto.Longitude', index=3, 1133 | number=4, type=1, cpp_type=5, label=1, 1134 | has_default_value=False, default_value=float(0), 1135 | message_type=None, enum_type=None, containing_type=None, 1136 | is_extension=False, extension_scope=None, 1137 | options=None), 1138 | _descriptor.FieldDescriptor( 1139 | name='SpawnPointId', full_name='ResponseEnvelop.WildPokemonProto.SpawnPointId', index=4, 1140 | number=5, type=9, cpp_type=9, label=1, 1141 | has_default_value=False, default_value=_b("").decode('utf-8'), 1142 | message_type=None, enum_type=None, containing_type=None, 1143 | is_extension=False, extension_scope=None, 1144 | options=None), 1145 | _descriptor.FieldDescriptor( 1146 | name='pokemon', full_name='ResponseEnvelop.WildPokemonProto.pokemon', index=5, 1147 | number=7, type=11, cpp_type=10, label=1, 1148 | has_default_value=False, default_value=None, 1149 | message_type=None, enum_type=None, containing_type=None, 1150 | is_extension=False, extension_scope=None, 1151 | options=None), 1152 | _descriptor.FieldDescriptor( 1153 | name='TimeTillHiddenMs', full_name='ResponseEnvelop.WildPokemonProto.TimeTillHiddenMs', index=6, 1154 | number=11, type=5, cpp_type=1, label=1, 1155 | has_default_value=False, default_value=0, 1156 | message_type=None, enum_type=None, containing_type=None, 1157 | is_extension=False, extension_scope=None, 1158 | options=None), 1159 | ], 1160 | extensions=[ 1161 | ], 1162 | nested_types=[_RESPONSEENVELOP_WILDPOKEMONPROTO_POKEMON, ], 1163 | enum_types=[ 1164 | ], 1165 | options=None, 1166 | is_extendable=False, 1167 | extension_ranges=[], 1168 | oneofs=[ 1169 | ], 1170 | serialized_start=2560, 1171 | serialized_end=2810, 1172 | ) 1173 | 1174 | _RESPONSEENVELOP_NEARBYPOKEMONPROTO = _descriptor.Descriptor( 1175 | name='NearbyPokemonProto', 1176 | full_name='ResponseEnvelop.NearbyPokemonProto', 1177 | filename=None, 1178 | file=DESCRIPTOR, 1179 | containing_type=None, 1180 | fields=[ 1181 | _descriptor.FieldDescriptor( 1182 | name='PokedexNumber', full_name='ResponseEnvelop.NearbyPokemonProto.PokedexNumber', index=0, 1183 | number=1, type=5, cpp_type=1, label=1, 1184 | has_default_value=False, default_value=0, 1185 | message_type=None, enum_type=None, containing_type=None, 1186 | is_extension=False, extension_scope=None, 1187 | options=None), 1188 | _descriptor.FieldDescriptor( 1189 | name='DistanceMeters', full_name='ResponseEnvelop.NearbyPokemonProto.DistanceMeters', index=1, 1190 | number=2, type=2, cpp_type=6, label=1, 1191 | has_default_value=False, default_value=float(0), 1192 | message_type=None, enum_type=None, containing_type=None, 1193 | is_extension=False, extension_scope=None, 1194 | options=None), 1195 | _descriptor.FieldDescriptor( 1196 | name='EncounterId', full_name='ResponseEnvelop.NearbyPokemonProto.EncounterId', index=2, 1197 | number=3, type=4, cpp_type=4, label=1, 1198 | has_default_value=False, default_value=0, 1199 | message_type=None, enum_type=None, containing_type=None, 1200 | is_extension=False, extension_scope=None, 1201 | options=None), 1202 | ], 1203 | extensions=[ 1204 | ], 1205 | nested_types=[], 1206 | enum_types=[ 1207 | ], 1208 | options=None, 1209 | is_extendable=False, 1210 | extension_ranges=[], 1211 | oneofs=[ 1212 | ], 1213 | serialized_start=2812, 1214 | serialized_end=2900, 1215 | ) 1216 | 1217 | _RESPONSEENVELOP_PROFILEPAYLOAD = _descriptor.Descriptor( 1218 | name='ProfilePayload', 1219 | full_name='ResponseEnvelop.ProfilePayload', 1220 | filename=None, 1221 | file=DESCRIPTOR, 1222 | containing_type=None, 1223 | fields=[ 1224 | _descriptor.FieldDescriptor( 1225 | name='unknown1', full_name='ResponseEnvelop.ProfilePayload.unknown1', index=0, 1226 | number=1, type=5, cpp_type=1, label=2, 1227 | has_default_value=False, default_value=0, 1228 | message_type=None, enum_type=None, containing_type=None, 1229 | is_extension=False, extension_scope=None, 1230 | options=None), 1231 | _descriptor.FieldDescriptor( 1232 | name='profile', full_name='ResponseEnvelop.ProfilePayload.profile', index=1, 1233 | number=2, type=11, cpp_type=10, label=1, 1234 | has_default_value=False, default_value=None, 1235 | message_type=None, enum_type=None, containing_type=None, 1236 | is_extension=False, extension_scope=None, 1237 | options=None), 1238 | ], 1239 | extensions=[ 1240 | ], 1241 | nested_types=[], 1242 | enum_types=[ 1243 | ], 1244 | options=None, 1245 | is_extendable=False, 1246 | extension_ranges=[], 1247 | oneofs=[ 1248 | ], 1249 | serialized_start=2902, 1250 | serialized_end=2979, 1251 | ) 1252 | 1253 | _RESPONSEENVELOP_PROFILE_AVATARDETAILS = _descriptor.Descriptor( 1254 | name='AvatarDetails', 1255 | full_name='ResponseEnvelop.Profile.AvatarDetails', 1256 | filename=None, 1257 | file=DESCRIPTOR, 1258 | containing_type=None, 1259 | fields=[ 1260 | _descriptor.FieldDescriptor( 1261 | name='unknown2', full_name='ResponseEnvelop.Profile.AvatarDetails.unknown2', index=0, 1262 | number=2, type=5, cpp_type=1, label=1, 1263 | has_default_value=False, default_value=0, 1264 | message_type=None, enum_type=None, containing_type=None, 1265 | is_extension=False, extension_scope=None, 1266 | options=None), 1267 | _descriptor.FieldDescriptor( 1268 | name='unknown3', full_name='ResponseEnvelop.Profile.AvatarDetails.unknown3', index=1, 1269 | number=3, type=5, cpp_type=1, label=1, 1270 | has_default_value=False, default_value=0, 1271 | message_type=None, enum_type=None, containing_type=None, 1272 | is_extension=False, extension_scope=None, 1273 | options=None), 1274 | _descriptor.FieldDescriptor( 1275 | name='unknown9', full_name='ResponseEnvelop.Profile.AvatarDetails.unknown9', index=2, 1276 | number=9, type=5, cpp_type=1, label=1, 1277 | has_default_value=False, default_value=0, 1278 | message_type=None, enum_type=None, containing_type=None, 1279 | is_extension=False, extension_scope=None, 1280 | options=None), 1281 | _descriptor.FieldDescriptor( 1282 | name='unknown10', full_name='ResponseEnvelop.Profile.AvatarDetails.unknown10', index=3, 1283 | number=10, type=5, cpp_type=1, label=1, 1284 | has_default_value=False, default_value=0, 1285 | message_type=None, enum_type=None, containing_type=None, 1286 | is_extension=False, extension_scope=None, 1287 | options=None), 1288 | ], 1289 | extensions=[ 1290 | ], 1291 | nested_types=[], 1292 | enum_types=[ 1293 | ], 1294 | options=None, 1295 | is_extendable=False, 1296 | extension_ranges=[], 1297 | oneofs=[ 1298 | ], 1299 | serialized_start=3276, 1300 | serialized_end=3364, 1301 | ) 1302 | 1303 | _RESPONSEENVELOP_PROFILE_CURRENCY = _descriptor.Descriptor( 1304 | name='Currency', 1305 | full_name='ResponseEnvelop.Profile.Currency', 1306 | filename=None, 1307 | file=DESCRIPTOR, 1308 | containing_type=None, 1309 | fields=[ 1310 | _descriptor.FieldDescriptor( 1311 | name='type', full_name='ResponseEnvelop.Profile.Currency.type', index=0, 1312 | number=1, type=9, cpp_type=9, label=2, 1313 | has_default_value=False, default_value=_b("").decode('utf-8'), 1314 | message_type=None, enum_type=None, containing_type=None, 1315 | is_extension=False, extension_scope=None, 1316 | options=None), 1317 | _descriptor.FieldDescriptor( 1318 | name='amount', full_name='ResponseEnvelop.Profile.Currency.amount', index=1, 1319 | number=2, type=5, cpp_type=1, label=1, 1320 | has_default_value=False, default_value=0, 1321 | message_type=None, enum_type=None, containing_type=None, 1322 | is_extension=False, extension_scope=None, 1323 | options=None), 1324 | ], 1325 | extensions=[ 1326 | ], 1327 | nested_types=[], 1328 | enum_types=[ 1329 | ], 1330 | options=None, 1331 | is_extendable=False, 1332 | extension_ranges=[], 1333 | oneofs=[ 1334 | ], 1335 | serialized_start=3366, 1336 | serialized_end=3406, 1337 | ) 1338 | 1339 | _RESPONSEENVELOP_PROFILE = _descriptor.Descriptor( 1340 | name='Profile', 1341 | full_name='ResponseEnvelop.Profile', 1342 | filename=None, 1343 | file=DESCRIPTOR, 1344 | containing_type=None, 1345 | fields=[ 1346 | _descriptor.FieldDescriptor( 1347 | name='creation_time', full_name='ResponseEnvelop.Profile.creation_time', index=0, 1348 | number=1, type=3, cpp_type=2, label=2, 1349 | has_default_value=False, default_value=0, 1350 | message_type=None, enum_type=None, containing_type=None, 1351 | is_extension=False, extension_scope=None, 1352 | options=None), 1353 | _descriptor.FieldDescriptor( 1354 | name='username', full_name='ResponseEnvelop.Profile.username', index=1, 1355 | number=2, type=9, cpp_type=9, label=1, 1356 | has_default_value=False, default_value=_b("").decode('utf-8'), 1357 | message_type=None, enum_type=None, containing_type=None, 1358 | is_extension=False, extension_scope=None, 1359 | options=None), 1360 | _descriptor.FieldDescriptor( 1361 | name='team', full_name='ResponseEnvelop.Profile.team', index=2, 1362 | number=5, type=5, cpp_type=1, label=1, 1363 | has_default_value=False, default_value=0, 1364 | message_type=None, enum_type=None, containing_type=None, 1365 | is_extension=False, extension_scope=None, 1366 | options=None), 1367 | _descriptor.FieldDescriptor( 1368 | name='tutorial', full_name='ResponseEnvelop.Profile.tutorial', index=3, 1369 | number=7, type=12, cpp_type=9, label=1, 1370 | has_default_value=False, default_value=_b(""), 1371 | message_type=None, enum_type=None, containing_type=None, 1372 | is_extension=False, extension_scope=None, 1373 | options=None), 1374 | _descriptor.FieldDescriptor( 1375 | name='avatar', full_name='ResponseEnvelop.Profile.avatar', index=4, 1376 | number=8, type=11, cpp_type=10, label=1, 1377 | has_default_value=False, default_value=None, 1378 | message_type=None, enum_type=None, containing_type=None, 1379 | is_extension=False, extension_scope=None, 1380 | options=None), 1381 | _descriptor.FieldDescriptor( 1382 | name='poke_storage', full_name='ResponseEnvelop.Profile.poke_storage', index=5, 1383 | number=9, type=5, cpp_type=1, label=1, 1384 | has_default_value=False, default_value=0, 1385 | message_type=None, enum_type=None, containing_type=None, 1386 | is_extension=False, extension_scope=None, 1387 | options=None), 1388 | _descriptor.FieldDescriptor( 1389 | name='item_storage', full_name='ResponseEnvelop.Profile.item_storage', index=6, 1390 | number=10, type=5, cpp_type=1, label=1, 1391 | has_default_value=False, default_value=0, 1392 | message_type=None, enum_type=None, containing_type=None, 1393 | is_extension=False, extension_scope=None, 1394 | options=None), 1395 | _descriptor.FieldDescriptor( 1396 | name='unknown11', full_name='ResponseEnvelop.Profile.unknown11', index=7, 1397 | number=11, type=9, cpp_type=9, label=1, 1398 | has_default_value=False, default_value=_b("").decode('utf-8'), 1399 | message_type=None, enum_type=None, containing_type=None, 1400 | is_extension=False, extension_scope=None, 1401 | options=None), 1402 | _descriptor.FieldDescriptor( 1403 | name='unknown12', full_name='ResponseEnvelop.Profile.unknown12', index=8, 1404 | number=12, type=9, cpp_type=9, label=1, 1405 | has_default_value=False, default_value=_b("").decode('utf-8'), 1406 | message_type=None, enum_type=None, containing_type=None, 1407 | is_extension=False, extension_scope=None, 1408 | options=None), 1409 | _descriptor.FieldDescriptor( 1410 | name='unknown13', full_name='ResponseEnvelop.Profile.unknown13', index=9, 1411 | number=13, type=9, cpp_type=9, label=1, 1412 | has_default_value=False, default_value=_b("").decode('utf-8'), 1413 | message_type=None, enum_type=None, containing_type=None, 1414 | is_extension=False, extension_scope=None, 1415 | options=None), 1416 | _descriptor.FieldDescriptor( 1417 | name='currency', full_name='ResponseEnvelop.Profile.currency', index=10, 1418 | number=14, type=11, cpp_type=10, label=3, 1419 | has_default_value=False, default_value=[], 1420 | message_type=None, enum_type=None, containing_type=None, 1421 | is_extension=False, extension_scope=None, 1422 | options=None), 1423 | ], 1424 | extensions=[ 1425 | ], 1426 | nested_types=[_RESPONSEENVELOP_PROFILE_AVATARDETAILS, _RESPONSEENVELOP_PROFILE_CURRENCY, ], 1427 | enum_types=[ 1428 | ], 1429 | options=None, 1430 | is_extendable=False, 1431 | extension_ranges=[], 1432 | oneofs=[ 1433 | ], 1434 | serialized_start=2982, 1435 | serialized_end=3406, 1436 | ) 1437 | 1438 | _RESPONSEENVELOP = _descriptor.Descriptor( 1439 | name='ResponseEnvelop', 1440 | full_name='ResponseEnvelop', 1441 | filename=None, 1442 | file=DESCRIPTOR, 1443 | containing_type=None, 1444 | fields=[ 1445 | _descriptor.FieldDescriptor( 1446 | name='unknown1', full_name='ResponseEnvelop.unknown1', index=0, 1447 | number=1, type=5, cpp_type=1, label=2, 1448 | has_default_value=False, default_value=0, 1449 | message_type=None, enum_type=None, containing_type=None, 1450 | is_extension=False, extension_scope=None, 1451 | options=None), 1452 | _descriptor.FieldDescriptor( 1453 | name='unknown2', full_name='ResponseEnvelop.unknown2', index=1, 1454 | number=2, type=3, cpp_type=2, label=1, 1455 | has_default_value=False, default_value=0, 1456 | message_type=None, enum_type=None, containing_type=None, 1457 | is_extension=False, extension_scope=None, 1458 | options=None), 1459 | _descriptor.FieldDescriptor( 1460 | name='api_url', full_name='ResponseEnvelop.api_url', index=2, 1461 | number=3, type=9, cpp_type=9, label=1, 1462 | has_default_value=False, default_value=_b("").decode('utf-8'), 1463 | message_type=None, enum_type=None, containing_type=None, 1464 | is_extension=False, extension_scope=None, 1465 | options=None), 1466 | _descriptor.FieldDescriptor( 1467 | name='unknown6', full_name='ResponseEnvelop.unknown6', index=3, 1468 | number=6, type=11, cpp_type=10, label=1, 1469 | has_default_value=False, default_value=None, 1470 | message_type=None, enum_type=None, containing_type=None, 1471 | is_extension=False, extension_scope=None, 1472 | options=None), 1473 | _descriptor.FieldDescriptor( 1474 | name='unknown7', full_name='ResponseEnvelop.unknown7', index=4, 1475 | number=7, type=11, cpp_type=10, label=1, 1476 | has_default_value=False, default_value=None, 1477 | message_type=None, enum_type=None, containing_type=None, 1478 | is_extension=False, extension_scope=None, 1479 | options=None), 1480 | _descriptor.FieldDescriptor( 1481 | name='payload', full_name='ResponseEnvelop.payload', index=5, 1482 | number=100, type=12, cpp_type=9, label=3, 1483 | has_default_value=False, default_value=[], 1484 | message_type=None, enum_type=None, containing_type=None, 1485 | is_extension=False, extension_scope=None, 1486 | options=None), 1487 | ], 1488 | extensions=[ 1489 | ], 1490 | nested_types=[_RESPONSEENVELOP_UNKNOWN6, _RESPONSEENVELOP_HEARTBEATPAYLOAD, _RESPONSEENVELOP_CLIENTMAPCELL, _RESPONSEENVELOP_WILDPOKEMON, _RESPONSEENVELOP_MAPPOKEMONPROTO, _RESPONSEENVELOP_POKEMONFORTPROTO, _RESPONSEENVELOP_POKEMONSUMMARYFORTPROTO, _RESPONSEENVELOP_CLIENTSPAWNPOINTPROTO, _RESPONSEENVELOP_WILDPOKEMONPROTO, _RESPONSEENVELOP_NEARBYPOKEMONPROTO, _RESPONSEENVELOP_PROFILEPAYLOAD, _RESPONSEENVELOP_PROFILE, ], 1491 | enum_types=[ 1492 | ], 1493 | options=None, 1494 | is_extendable=False, 1495 | extension_ranges=[], 1496 | oneofs=[ 1497 | ], 1498 | serialized_start=930, 1499 | serialized_end=3406, 1500 | ) 1501 | 1502 | _REQUESTENVELOP_REQUESTS.containing_type = _REQUESTENVELOP 1503 | _REQUESTENVELOP_MESSAGESINGLESTRING.containing_type = _REQUESTENVELOP 1504 | _REQUESTENVELOP_MESSAGESINGLEINT.containing_type = _REQUESTENVELOP 1505 | _REQUESTENVELOP_MESSAGETWOINTS.containing_type = _REQUESTENVELOP 1506 | _REQUESTENVELOP_MESSAGEQUAD.containing_type = _REQUESTENVELOP 1507 | _REQUESTENVELOP_WAT.containing_type = _REQUESTENVELOP 1508 | _REQUESTENVELOP_UNKNOWN3.containing_type = _REQUESTENVELOP 1509 | _REQUESTENVELOP_UNKNOWN6_UNKNOWN2.containing_type = _REQUESTENVELOP_UNKNOWN6 1510 | _REQUESTENVELOP_UNKNOWN6.fields_by_name['unknown2'].message_type = _REQUESTENVELOP_UNKNOWN6_UNKNOWN2 1511 | _REQUESTENVELOP_UNKNOWN6.containing_type = _REQUESTENVELOP 1512 | _REQUESTENVELOP_AUTHINFO_JWT.containing_type = _REQUESTENVELOP_AUTHINFO 1513 | _REQUESTENVELOP_AUTHINFO.fields_by_name['token'].message_type = _REQUESTENVELOP_AUTHINFO_JWT 1514 | _REQUESTENVELOP_AUTHINFO.containing_type = _REQUESTENVELOP 1515 | _REQUESTENVELOP.fields_by_name['requests'].message_type = _REQUESTENVELOP_REQUESTS 1516 | _REQUESTENVELOP.fields_by_name['unknown6'].message_type = _REQUESTENVELOP_UNKNOWN6 1517 | _REQUESTENVELOP.fields_by_name['auth'].message_type = _REQUESTENVELOP_AUTHINFO 1518 | _REQUESTENVELOP.fields_by_name['unknown11'].message_type = _UNKNOWNAUTH 1519 | _RESPONSEENVELOP_UNKNOWN6_UNKNOWN2.containing_type = _RESPONSEENVELOP_UNKNOWN6 1520 | _RESPONSEENVELOP_UNKNOWN6.fields_by_name['unknown2'].message_type = _RESPONSEENVELOP_UNKNOWN6_UNKNOWN2 1521 | _RESPONSEENVELOP_UNKNOWN6.containing_type = _RESPONSEENVELOP 1522 | _RESPONSEENVELOP_HEARTBEATPAYLOAD.fields_by_name['cells'].message_type = _RESPONSEENVELOP_CLIENTMAPCELL 1523 | _RESPONSEENVELOP_HEARTBEATPAYLOAD.containing_type = _RESPONSEENVELOP 1524 | _RESPONSEENVELOP_CLIENTMAPCELL.fields_by_name['Fort'].message_type = _RESPONSEENVELOP_POKEMONFORTPROTO 1525 | _RESPONSEENVELOP_CLIENTMAPCELL.fields_by_name['SpawnPoint'].message_type = _RESPONSEENVELOP_CLIENTSPAWNPOINTPROTO 1526 | _RESPONSEENVELOP_CLIENTMAPCELL.fields_by_name['WildPokemon'].message_type = _RESPONSEENVELOP_WILDPOKEMONPROTO 1527 | _RESPONSEENVELOP_CLIENTMAPCELL.fields_by_name['FortSummary'].message_type = _RESPONSEENVELOP_POKEMONSUMMARYFORTPROTO 1528 | _RESPONSEENVELOP_CLIENTMAPCELL.fields_by_name['DecimatedSpawnPoint'].message_type = _RESPONSEENVELOP_CLIENTSPAWNPOINTPROTO 1529 | _RESPONSEENVELOP_CLIENTMAPCELL.fields_by_name['MapPokemon'].message_type = _RESPONSEENVELOP_MAPPOKEMONPROTO 1530 | _RESPONSEENVELOP_CLIENTMAPCELL.fields_by_name['NearbyPokemon'].message_type = _RESPONSEENVELOP_NEARBYPOKEMONPROTO 1531 | _RESPONSEENVELOP_CLIENTMAPCELL.containing_type = _RESPONSEENVELOP 1532 | _RESPONSEENVELOP_WILDPOKEMON.fields_by_name['pokemon'].message_type = _RESPONSEENVELOP_NEARBYPOKEMONPROTO 1533 | _RESPONSEENVELOP_WILDPOKEMON.containing_type = _RESPONSEENVELOP 1534 | _RESPONSEENVELOP_MAPPOKEMONPROTO.containing_type = _RESPONSEENVELOP 1535 | _RESPONSEENVELOP_POKEMONFORTPROTO.fields_by_name['ActivePokemon'].message_type = _RESPONSEENVELOP_MAPPOKEMONPROTO 1536 | _RESPONSEENVELOP_POKEMONFORTPROTO.containing_type = _RESPONSEENVELOP 1537 | _RESPONSEENVELOP_POKEMONSUMMARYFORTPROTO.containing_type = _RESPONSEENVELOP 1538 | _RESPONSEENVELOP_CLIENTSPAWNPOINTPROTO.containing_type = _RESPONSEENVELOP 1539 | _RESPONSEENVELOP_WILDPOKEMONPROTO_POKEMON.containing_type = _RESPONSEENVELOP_WILDPOKEMONPROTO 1540 | _RESPONSEENVELOP_WILDPOKEMONPROTO.fields_by_name['pokemon'].message_type = _RESPONSEENVELOP_WILDPOKEMONPROTO_POKEMON 1541 | _RESPONSEENVELOP_WILDPOKEMONPROTO.containing_type = _RESPONSEENVELOP 1542 | _RESPONSEENVELOP_NEARBYPOKEMONPROTO.containing_type = _RESPONSEENVELOP 1543 | _RESPONSEENVELOP_PROFILEPAYLOAD.fields_by_name['profile'].message_type = _RESPONSEENVELOP_PROFILE 1544 | _RESPONSEENVELOP_PROFILEPAYLOAD.containing_type = _RESPONSEENVELOP 1545 | _RESPONSEENVELOP_PROFILE_AVATARDETAILS.containing_type = _RESPONSEENVELOP_PROFILE 1546 | _RESPONSEENVELOP_PROFILE_CURRENCY.containing_type = _RESPONSEENVELOP_PROFILE 1547 | _RESPONSEENVELOP_PROFILE.fields_by_name['avatar'].message_type = _RESPONSEENVELOP_PROFILE_AVATARDETAILS 1548 | _RESPONSEENVELOP_PROFILE.fields_by_name['currency'].message_type = _RESPONSEENVELOP_PROFILE_CURRENCY 1549 | _RESPONSEENVELOP_PROFILE.containing_type = _RESPONSEENVELOP 1550 | _RESPONSEENVELOP.fields_by_name['unknown6'].message_type = _RESPONSEENVELOP_UNKNOWN6 1551 | _RESPONSEENVELOP.fields_by_name['unknown7'].message_type = _UNKNOWNAUTH 1552 | DESCRIPTOR.message_types_by_name['RequestEnvelop'] = _REQUESTENVELOP 1553 | DESCRIPTOR.message_types_by_name['UnknownAuth'] = _UNKNOWNAUTH 1554 | DESCRIPTOR.message_types_by_name['ResponseEnvelop'] = _RESPONSEENVELOP 1555 | 1556 | RequestEnvelop = _reflection.GeneratedProtocolMessageType('RequestEnvelop', (_message.Message,), dict( 1557 | 1558 | Requests = _reflection.GeneratedProtocolMessageType('Requests', (_message.Message,), dict( 1559 | DESCRIPTOR = _REQUESTENVELOP_REQUESTS, 1560 | __module__ = 'pokemon_pb2' 1561 | # @@protoc_insertion_point(class_scope:RequestEnvelop.Requests) 1562 | )) 1563 | , 1564 | 1565 | MessageSingleString = _reflection.GeneratedProtocolMessageType('MessageSingleString', (_message.Message,), dict( 1566 | DESCRIPTOR = _REQUESTENVELOP_MESSAGESINGLESTRING, 1567 | __module__ = 'pokemon_pb2' 1568 | # @@protoc_insertion_point(class_scope:RequestEnvelop.MessageSingleString) 1569 | )) 1570 | , 1571 | 1572 | MessageSingleInt = _reflection.GeneratedProtocolMessageType('MessageSingleInt', (_message.Message,), dict( 1573 | DESCRIPTOR = _REQUESTENVELOP_MESSAGESINGLEINT, 1574 | __module__ = 'pokemon_pb2' 1575 | # @@protoc_insertion_point(class_scope:RequestEnvelop.MessageSingleInt) 1576 | )) 1577 | , 1578 | 1579 | MessageTwoInts = _reflection.GeneratedProtocolMessageType('MessageTwoInts', (_message.Message,), dict( 1580 | DESCRIPTOR = _REQUESTENVELOP_MESSAGETWOINTS, 1581 | __module__ = 'pokemon_pb2' 1582 | # @@protoc_insertion_point(class_scope:RequestEnvelop.MessageTwoInts) 1583 | )) 1584 | , 1585 | 1586 | MessageQuad = _reflection.GeneratedProtocolMessageType('MessageQuad', (_message.Message,), dict( 1587 | DESCRIPTOR = _REQUESTENVELOP_MESSAGEQUAD, 1588 | __module__ = 'pokemon_pb2' 1589 | # @@protoc_insertion_point(class_scope:RequestEnvelop.MessageQuad) 1590 | )) 1591 | , 1592 | 1593 | Wat = _reflection.GeneratedProtocolMessageType('Wat', (_message.Message,), dict( 1594 | DESCRIPTOR = _REQUESTENVELOP_WAT, 1595 | __module__ = 'pokemon_pb2' 1596 | # @@protoc_insertion_point(class_scope:RequestEnvelop.Wat) 1597 | )) 1598 | , 1599 | 1600 | Unknown3 = _reflection.GeneratedProtocolMessageType('Unknown3', (_message.Message,), dict( 1601 | DESCRIPTOR = _REQUESTENVELOP_UNKNOWN3, 1602 | __module__ = 'pokemon_pb2' 1603 | # @@protoc_insertion_point(class_scope:RequestEnvelop.Unknown3) 1604 | )) 1605 | , 1606 | 1607 | Unknown6 = _reflection.GeneratedProtocolMessageType('Unknown6', (_message.Message,), dict( 1608 | 1609 | Unknown2 = _reflection.GeneratedProtocolMessageType('Unknown2', (_message.Message,), dict( 1610 | DESCRIPTOR = _REQUESTENVELOP_UNKNOWN6_UNKNOWN2, 1611 | __module__ = 'pokemon_pb2' 1612 | # @@protoc_insertion_point(class_scope:RequestEnvelop.Unknown6.Unknown2) 1613 | )) 1614 | , 1615 | DESCRIPTOR = _REQUESTENVELOP_UNKNOWN6, 1616 | __module__ = 'pokemon_pb2' 1617 | # @@protoc_insertion_point(class_scope:RequestEnvelop.Unknown6) 1618 | )) 1619 | , 1620 | 1621 | AuthInfo = _reflection.GeneratedProtocolMessageType('AuthInfo', (_message.Message,), dict( 1622 | 1623 | JWT = _reflection.GeneratedProtocolMessageType('JWT', (_message.Message,), dict( 1624 | DESCRIPTOR = _REQUESTENVELOP_AUTHINFO_JWT, 1625 | __module__ = 'pokemon_pb2' 1626 | # @@protoc_insertion_point(class_scope:RequestEnvelop.AuthInfo.JWT) 1627 | )) 1628 | , 1629 | DESCRIPTOR = _REQUESTENVELOP_AUTHINFO, 1630 | __module__ = 'pokemon_pb2' 1631 | # @@protoc_insertion_point(class_scope:RequestEnvelop.AuthInfo) 1632 | )) 1633 | , 1634 | DESCRIPTOR = _REQUESTENVELOP, 1635 | __module__ = 'pokemon_pb2' 1636 | # @@protoc_insertion_point(class_scope:RequestEnvelop) 1637 | )) 1638 | _sym_db.RegisterMessage(RequestEnvelop) 1639 | _sym_db.RegisterMessage(RequestEnvelop.Requests) 1640 | _sym_db.RegisterMessage(RequestEnvelop.MessageSingleString) 1641 | _sym_db.RegisterMessage(RequestEnvelop.MessageSingleInt) 1642 | _sym_db.RegisterMessage(RequestEnvelop.MessageTwoInts) 1643 | _sym_db.RegisterMessage(RequestEnvelop.MessageQuad) 1644 | _sym_db.RegisterMessage(RequestEnvelop.Wat) 1645 | _sym_db.RegisterMessage(RequestEnvelop.Unknown3) 1646 | _sym_db.RegisterMessage(RequestEnvelop.Unknown6) 1647 | _sym_db.RegisterMessage(RequestEnvelop.Unknown6.Unknown2) 1648 | _sym_db.RegisterMessage(RequestEnvelop.AuthInfo) 1649 | _sym_db.RegisterMessage(RequestEnvelop.AuthInfo.JWT) 1650 | 1651 | UnknownAuth = _reflection.GeneratedProtocolMessageType('UnknownAuth', (_message.Message,), dict( 1652 | DESCRIPTOR = _UNKNOWNAUTH, 1653 | __module__ = 'pokemon_pb2' 1654 | # @@protoc_insertion_point(class_scope:UnknownAuth) 1655 | )) 1656 | _sym_db.RegisterMessage(UnknownAuth) 1657 | 1658 | ResponseEnvelop = _reflection.GeneratedProtocolMessageType('ResponseEnvelop', (_message.Message,), dict( 1659 | 1660 | Unknown6 = _reflection.GeneratedProtocolMessageType('Unknown6', (_message.Message,), dict( 1661 | 1662 | Unknown2 = _reflection.GeneratedProtocolMessageType('Unknown2', (_message.Message,), dict( 1663 | DESCRIPTOR = _RESPONSEENVELOP_UNKNOWN6_UNKNOWN2, 1664 | __module__ = 'pokemon_pb2' 1665 | # @@protoc_insertion_point(class_scope:ResponseEnvelop.Unknown6.Unknown2) 1666 | )) 1667 | , 1668 | DESCRIPTOR = _RESPONSEENVELOP_UNKNOWN6, 1669 | __module__ = 'pokemon_pb2' 1670 | # @@protoc_insertion_point(class_scope:ResponseEnvelop.Unknown6) 1671 | )) 1672 | , 1673 | 1674 | HeartbeatPayload = _reflection.GeneratedProtocolMessageType('HeartbeatPayload', (_message.Message,), dict( 1675 | DESCRIPTOR = _RESPONSEENVELOP_HEARTBEATPAYLOAD, 1676 | __module__ = 'pokemon_pb2' 1677 | # @@protoc_insertion_point(class_scope:ResponseEnvelop.HeartbeatPayload) 1678 | )) 1679 | , 1680 | 1681 | ClientMapCell = _reflection.GeneratedProtocolMessageType('ClientMapCell', (_message.Message,), dict( 1682 | DESCRIPTOR = _RESPONSEENVELOP_CLIENTMAPCELL, 1683 | __module__ = 'pokemon_pb2' 1684 | # @@protoc_insertion_point(class_scope:ResponseEnvelop.ClientMapCell) 1685 | )) 1686 | , 1687 | 1688 | WildPokemon = _reflection.GeneratedProtocolMessageType('WildPokemon', (_message.Message,), dict( 1689 | DESCRIPTOR = _RESPONSEENVELOP_WILDPOKEMON, 1690 | __module__ = 'pokemon_pb2' 1691 | # @@protoc_insertion_point(class_scope:ResponseEnvelop.WildPokemon) 1692 | )) 1693 | , 1694 | 1695 | MapPokemonProto = _reflection.GeneratedProtocolMessageType('MapPokemonProto', (_message.Message,), dict( 1696 | DESCRIPTOR = _RESPONSEENVELOP_MAPPOKEMONPROTO, 1697 | __module__ = 'pokemon_pb2' 1698 | # @@protoc_insertion_point(class_scope:ResponseEnvelop.MapPokemonProto) 1699 | )) 1700 | , 1701 | 1702 | PokemonFortProto = _reflection.GeneratedProtocolMessageType('PokemonFortProto', (_message.Message,), dict( 1703 | DESCRIPTOR = _RESPONSEENVELOP_POKEMONFORTPROTO, 1704 | __module__ = 'pokemon_pb2' 1705 | # @@protoc_insertion_point(class_scope:ResponseEnvelop.PokemonFortProto) 1706 | )) 1707 | , 1708 | 1709 | PokemonSummaryFortProto = _reflection.GeneratedProtocolMessageType('PokemonSummaryFortProto', (_message.Message,), dict( 1710 | DESCRIPTOR = _RESPONSEENVELOP_POKEMONSUMMARYFORTPROTO, 1711 | __module__ = 'pokemon_pb2' 1712 | # @@protoc_insertion_point(class_scope:ResponseEnvelop.PokemonSummaryFortProto) 1713 | )) 1714 | , 1715 | 1716 | ClientSpawnPointProto = _reflection.GeneratedProtocolMessageType('ClientSpawnPointProto', (_message.Message,), dict( 1717 | DESCRIPTOR = _RESPONSEENVELOP_CLIENTSPAWNPOINTPROTO, 1718 | __module__ = 'pokemon_pb2' 1719 | # @@protoc_insertion_point(class_scope:ResponseEnvelop.ClientSpawnPointProto) 1720 | )) 1721 | , 1722 | 1723 | WildPokemonProto = _reflection.GeneratedProtocolMessageType('WildPokemonProto', (_message.Message,), dict( 1724 | 1725 | Pokemon = _reflection.GeneratedProtocolMessageType('Pokemon', (_message.Message,), dict( 1726 | DESCRIPTOR = _RESPONSEENVELOP_WILDPOKEMONPROTO_POKEMON, 1727 | __module__ = 'pokemon_pb2' 1728 | # @@protoc_insertion_point(class_scope:ResponseEnvelop.WildPokemonProto.Pokemon) 1729 | )) 1730 | , 1731 | DESCRIPTOR = _RESPONSEENVELOP_WILDPOKEMONPROTO, 1732 | __module__ = 'pokemon_pb2' 1733 | # @@protoc_insertion_point(class_scope:ResponseEnvelop.WildPokemonProto) 1734 | )) 1735 | , 1736 | 1737 | NearbyPokemonProto = _reflection.GeneratedProtocolMessageType('NearbyPokemonProto', (_message.Message,), dict( 1738 | DESCRIPTOR = _RESPONSEENVELOP_NEARBYPOKEMONPROTO, 1739 | __module__ = 'pokemon_pb2' 1740 | # @@protoc_insertion_point(class_scope:ResponseEnvelop.NearbyPokemonProto) 1741 | )) 1742 | , 1743 | 1744 | ProfilePayload = _reflection.GeneratedProtocolMessageType('ProfilePayload', (_message.Message,), dict( 1745 | DESCRIPTOR = _RESPONSEENVELOP_PROFILEPAYLOAD, 1746 | __module__ = 'pokemon_pb2' 1747 | # @@protoc_insertion_point(class_scope:ResponseEnvelop.ProfilePayload) 1748 | )) 1749 | , 1750 | 1751 | Profile = _reflection.GeneratedProtocolMessageType('Profile', (_message.Message,), dict( 1752 | 1753 | AvatarDetails = _reflection.GeneratedProtocolMessageType('AvatarDetails', (_message.Message,), dict( 1754 | DESCRIPTOR = _RESPONSEENVELOP_PROFILE_AVATARDETAILS, 1755 | __module__ = 'pokemon_pb2' 1756 | # @@protoc_insertion_point(class_scope:ResponseEnvelop.Profile.AvatarDetails) 1757 | )) 1758 | , 1759 | 1760 | Currency = _reflection.GeneratedProtocolMessageType('Currency', (_message.Message,), dict( 1761 | DESCRIPTOR = _RESPONSEENVELOP_PROFILE_CURRENCY, 1762 | __module__ = 'pokemon_pb2' 1763 | # @@protoc_insertion_point(class_scope:ResponseEnvelop.Profile.Currency) 1764 | )) 1765 | , 1766 | DESCRIPTOR = _RESPONSEENVELOP_PROFILE, 1767 | __module__ = 'pokemon_pb2' 1768 | # @@protoc_insertion_point(class_scope:ResponseEnvelop.Profile) 1769 | )) 1770 | , 1771 | DESCRIPTOR = _RESPONSEENVELOP, 1772 | __module__ = 'pokemon_pb2' 1773 | # @@protoc_insertion_point(class_scope:ResponseEnvelop) 1774 | )) 1775 | _sym_db.RegisterMessage(ResponseEnvelop) 1776 | _sym_db.RegisterMessage(ResponseEnvelop.Unknown6) 1777 | _sym_db.RegisterMessage(ResponseEnvelop.Unknown6.Unknown2) 1778 | _sym_db.RegisterMessage(ResponseEnvelop.HeartbeatPayload) 1779 | _sym_db.RegisterMessage(ResponseEnvelop.ClientMapCell) 1780 | _sym_db.RegisterMessage(ResponseEnvelop.WildPokemon) 1781 | _sym_db.RegisterMessage(ResponseEnvelop.MapPokemonProto) 1782 | _sym_db.RegisterMessage(ResponseEnvelop.PokemonFortProto) 1783 | _sym_db.RegisterMessage(ResponseEnvelop.PokemonSummaryFortProto) 1784 | _sym_db.RegisterMessage(ResponseEnvelop.ClientSpawnPointProto) 1785 | _sym_db.RegisterMessage(ResponseEnvelop.WildPokemonProto) 1786 | _sym_db.RegisterMessage(ResponseEnvelop.WildPokemonProto.Pokemon) 1787 | _sym_db.RegisterMessage(ResponseEnvelop.NearbyPokemonProto) 1788 | _sym_db.RegisterMessage(ResponseEnvelop.ProfilePayload) 1789 | _sym_db.RegisterMessage(ResponseEnvelop.Profile) 1790 | _sym_db.RegisterMessage(ResponseEnvelop.Profile.AvatarDetails) 1791 | _sym_db.RegisterMessage(ResponseEnvelop.Profile.Currency) 1792 | 1793 | 1794 | # @@protoc_insertion_point(module_scope) 1795 | -------------------------------------------------------------------------------- /api/tests.py: -------------------------------------------------------------------------------- 1 | from django.test import TestCase 2 | 3 | # Create your tests here. 4 | -------------------------------------------------------------------------------- /api/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls import patterns, url 2 | 3 | urlpatterns = patterns('', 4 | url(r'^get_poke$', "api.views.get_poke"), 5 | url(r'^$', "api.views.load_frontend") 6 | ) 7 | -------------------------------------------------------------------------------- /api/views.py: -------------------------------------------------------------------------------- 1 | from django.http import HttpResponse 2 | import datetime 3 | import json 4 | import pokelocator_api 5 | from django.template.response import TemplateResponse 6 | import os 7 | 8 | def json_custom_parser(obj): 9 | if isinstance(obj, datetime.datetime) or isinstance(obj, datetime.date): 10 | dot_ix = 19 11 | return obj.isoformat()[:dot_ix] 12 | else: 13 | raise TypeError(obj) 14 | 15 | 16 | def get_poke(request): 17 | 18 | location = request.POST.get('location', "911 Washington Ave, Saint Louis, MO") 19 | direction = request.POST.get('direction', False) 20 | result = pokelocator_api.main(location=location, direction=direction) 21 | 22 | return HttpResponse(json.dumps({ 23 | "status": "success", 24 | "data": result 25 | }, default=json_custom_parser), content_type='application/json', status=200) 26 | 27 | 28 | def load_frontend(request): 29 | return TemplateResponse(request, 'index.html', context={ 30 | "GMAPS_API_KEY": os.environ.get('GMAPS_API_KEY', "Invalid") 31 | }) 32 | 33 | -------------------------------------------------------------------------------- /app.json: -------------------------------------------------------------------------------- 1 | { 2 | "env": { 3 | "IS_HEROKU_SERVER": "1", 4 | "GMAPS_API_KEY": "my_google_maps_api_key", 5 | "PTC_USERNAME": "my_pokeclub_username", 6 | "PTC_PASSWORD": "my_pokeclub_password", 7 | "GOOG_USERNAME": "my_google_username", 8 | "GOOG_PASSWORD": "my_google_password" 9 | }, 10 | "addons": [ 11 | "papertrail" 12 | ], 13 | "success_url": "/", 14 | "scripts": { 15 | "postdeploy": "python manage.py migrate" 16 | } 17 | } 18 | -------------------------------------------------------------------------------- /custom_middleware.py: -------------------------------------------------------------------------------- 1 | from django.http import HttpResponseRedirect 2 | 3 | class ForceSSL(object): 4 | 5 | def process_request(self, request): 6 | if not any([request.is_secure(), request.META.get("HTTP_X_FORWARDED_PROTO", "") == 'https']): 7 | url = request.build_absolute_uri(request.get_full_path()) 8 | secure_url = url.replace("http://", "https://") 9 | return HttpResponseRedirect(secure_url) 10 | 11 | -------------------------------------------------------------------------------- /hackathon/__init__.py: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/hackathon/__init__.py -------------------------------------------------------------------------------- /hackathon/settings.py: -------------------------------------------------------------------------------- 1 | """ 2 | Django settings for hackathon project. 3 | 4 | Generated by 'django-admin startproject' using Django 1.8. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/1.8/topics/settings/ 8 | USE_TZ 9 | For the full list of settings and their values, see 10 | https://docs.djangoproject.com/en/1.8/ref/settings/ 11 | """ 12 | 13 | # Build paths inside the project like this: os.path.join(BASE_DIR, ...) 14 | import os 15 | 16 | BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) 17 | 18 | 19 | # Quick-start development settings - unsuitable for production 20 | # See https://docs.djangoproject.com/en/1.8/howto/deployment/checklist/ 21 | 22 | # SECURITY WARNING: keep the secret key used in production secret! 23 | SECRET_KEY = 'cs1=lu+dp-g)pm%8px9ho5d2^j+k2fjs-@u8#3r+e!r58_f+kw' 24 | 25 | # SECURITY WARNING: don't run with debug turned on in production! 26 | DEBUG = True 27 | 28 | ALLOWED_HOSTS = [] 29 | 30 | 31 | # Application definition 32 | 33 | INSTALLED_APPS = ( 34 | 'django.contrib.admin', 35 | 'django.contrib.auth', 36 | 'django.contrib.contenttypes', 37 | 'django.contrib.sessions', 38 | 'django.contrib.messages', 39 | 'django.contrib.staticfiles', 40 | 'corsheaders', 41 | 'api' 42 | ) 43 | 44 | MIDDLEWARE_CLASSES = ( 45 | 'django.contrib.sessions.middleware.SessionMiddleware', 46 | 'corsheaders.middleware.CorsMiddleware', 47 | 'django.middleware.common.CommonMiddleware', 48 | 'django.contrib.auth.middleware.AuthenticationMiddleware', 49 | 'django.contrib.auth.middleware.SessionAuthenticationMiddleware', 50 | 'django.contrib.messages.middleware.MessageMiddleware', 51 | 'django.middleware.clickjacking.XFrameOptionsMiddleware', 52 | 'django.middleware.security.SecurityMiddleware' 53 | ) 54 | 55 | CORS_ORIGIN_ALLOW_ALL = True 56 | 57 | ROOT_URLCONF = 'hackathon.urls' 58 | 59 | WSGI_APPLICATION = 'hackathon.wsgi.application' 60 | 61 | 62 | # Database 63 | # https://docs.djangoproject.com/en/1.8/ref/settings/#databases 64 | 65 | DATABASES = { 66 | 'default': { 67 | 'ENGINE': 'django.db.backends.sqlite3', 68 | 'NAME': os.path.join(BASE_DIR, 'db.sqlite3'), 69 | } 70 | } 71 | 72 | # Internationalization 73 | # https://docs.djangoproject.com/en/1.8/topics/i18n/ 74 | 75 | LANGUAGE_CODE = 'en-us' 76 | 77 | TIME_ZONE = 'UTC' 78 | 79 | USE_I18N = True 80 | 81 | USE_L10N = True 82 | 83 | USE_TZ = False 84 | 85 | 86 | # Static files (CSS, JavaScript, Images) 87 | # https://docs.djangoproject.com/en/1.8/howto/static-files/ 88 | 89 | BASE_DIR = os.path.dirname(os.path.abspath(__file__)) 90 | 91 | STATIC_URL = '/static/' 92 | STATICFILES_DIRS = ( 93 | os.path.join(BASE_DIR, '../static'), 94 | ) 95 | 96 | TEMPLATE_DEBUG = True 97 | TEMPLATE_DIRS = (os.path.join(os.path.dirname(__file__), '..', 'static').replace('\\','/'),) 98 | 99 | 100 | if os.environ.get('IS_HEROKU_SERVER', False): # $ heroku config:add IS_HEROKU_SERVER='1' 101 | MIDDLEWARE_CLASSES += ('custom_middleware.ForceSSL',) 102 | os.environ['HTTPS'] = "on" 103 | SESSION_COOKIE_SECURE = True #Require HTTPS/SSL Cookies 104 | SESSION_COOKIE_HTTPONLY = False 105 | STATIC_ROOT = os.path.join(BASE_DIR, 'collected_static') 106 | STATICFILES_STORAGE = 'whitenoise.django.GzipManifestStaticFilesStorage' 107 | DEBUG = True #Normally you want this as False in production, but that's causing errors for some reason 108 | -------------------------------------------------------------------------------- /hackathon/urls.py: -------------------------------------------------------------------------------- 1 | from django.conf.urls import include, url 2 | from django.contrib import admin 3 | from django.conf import settings 4 | 5 | urlpatterns = [ 6 | # Examples: 7 | # url(r'^$', 'hackathon.views.home', name='home'), 8 | # url(r'^blog/', include('blog.urls')), 9 | 10 | url(r'^admin/', include(admin.site.urls)), 11 | url(r'^', include('api.urls')), 12 | ] 13 | 14 | 15 | #https://docs.djangoproject.com/en/dev/howto/static-files/#serving-static-files-during-development 16 | #This helper function works only in debug mode and only if the given prefix is local (e.g. /static/) 17 | from django.conf.urls.static import static 18 | urlpatterns += static(settings.STATIC_URL, document_root=settings.STATIC_ROOT) 19 | -------------------------------------------------------------------------------- /hackathon/wsgi.py: -------------------------------------------------------------------------------- 1 | """ 2 | WSGI config for hackathon project. 3 | 4 | It exposes the WSGI callable as a module-level variable named ``application``. 5 | 6 | For more information on this file, see 7 | https://docs.djangoproject.com/en/1.8/howto/deployment/wsgi/ 8 | """ 9 | 10 | import os 11 | 12 | from django.core.wsgi import get_wsgi_application 13 | 14 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "hackathon.settings") 15 | 16 | 17 | application = get_wsgi_application() 18 | 19 | if os.environ.get('IS_HEROKU_SERVER', False): # $ heroku config:add IS_HEROKU_SERVER='1' 20 | from whitenoise.django import DjangoWhiteNoise 21 | application = DjangoWhiteNoise(application) 22 | else: 23 | from dj_static import Cling 24 | application = Cling(application) -------------------------------------------------------------------------------- /manage.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | import os 3 | import sys 4 | 5 | if __name__ == "__main__": 6 | os.environ.setdefault("DJANGO_SETTINGS_MODULE", "hackathon.settings") 7 | 8 | from django.core.management import execute_from_command_line 9 | 10 | execute_from_command_line(sys.argv) 11 | -------------------------------------------------------------------------------- /requirements.txt: -------------------------------------------------------------------------------- 1 | Django==1.8 2 | dj-database-url==0.3.0 3 | dj-static==0.0.6 4 | gunicorn==19.1.1 5 | static==0.4 6 | wsgiref==0.1.2 7 | django-cors-headers==1.1.0 8 | whitenoise==1.0.5 9 | s2sphere==0.2.4 10 | geopy==1.11.0 11 | requests==2.9.1 12 | protobuf==2.6.1 -------------------------------------------------------------------------------- /static/favicon/favicon.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/favicon/favicon.png -------------------------------------------------------------------------------- /static/index.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | 6 | 7 | 64 |
65 | Please wait... searching for pokemon. 66 |
67 |
68 | 71 | 74 |

Search by:
75 | My Location
76 | Map Center
77 |
78 |
79 |
Detecting location...
80 |
81 | 82 | -------------------------------------------------------------------------------- /static/list.html: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | Poke-locator 5 | 43 | 44 | 45 | Your Latitude:
46 | Your Longitude:
47 | Map View 48 |

49 | 50 | 51 | 52 | 53 | 54 | 55 | 56 | 57 | 58 |
NameDistance (m)DirectionTime Left (seconds)Map


59 | 60 | -------------------------------------------------------------------------------- /static/poke/.DS_Store.ico: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/.DS_Store.ico -------------------------------------------------------------------------------- /static/poke/1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/1.png -------------------------------------------------------------------------------- /static/poke/10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/10.png -------------------------------------------------------------------------------- /static/poke/100.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/100.png -------------------------------------------------------------------------------- /static/poke/101.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/101.png -------------------------------------------------------------------------------- /static/poke/102.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/102.png -------------------------------------------------------------------------------- /static/poke/103.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/103.png -------------------------------------------------------------------------------- /static/poke/104.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/104.png -------------------------------------------------------------------------------- /static/poke/105.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/105.png -------------------------------------------------------------------------------- /static/poke/106.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/106.png -------------------------------------------------------------------------------- /static/poke/107.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/107.png -------------------------------------------------------------------------------- /static/poke/108.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/108.png -------------------------------------------------------------------------------- /static/poke/109.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/109.png -------------------------------------------------------------------------------- /static/poke/11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/11.png -------------------------------------------------------------------------------- /static/poke/110.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/110.png -------------------------------------------------------------------------------- /static/poke/111.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/111.png -------------------------------------------------------------------------------- /static/poke/112.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/112.png -------------------------------------------------------------------------------- /static/poke/113.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/113.png -------------------------------------------------------------------------------- /static/poke/114.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/114.png -------------------------------------------------------------------------------- /static/poke/115.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/115.png -------------------------------------------------------------------------------- /static/poke/116.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/116.png -------------------------------------------------------------------------------- /static/poke/117.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/117.png -------------------------------------------------------------------------------- /static/poke/118.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/118.png -------------------------------------------------------------------------------- /static/poke/119.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/119.png -------------------------------------------------------------------------------- /static/poke/12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/12.png -------------------------------------------------------------------------------- /static/poke/120.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/120.png -------------------------------------------------------------------------------- /static/poke/121.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/121.png -------------------------------------------------------------------------------- /static/poke/122.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/122.png -------------------------------------------------------------------------------- /static/poke/123.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/123.png -------------------------------------------------------------------------------- /static/poke/124.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/124.png -------------------------------------------------------------------------------- /static/poke/125.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/125.png -------------------------------------------------------------------------------- /static/poke/126.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/126.png -------------------------------------------------------------------------------- /static/poke/127.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/127.png -------------------------------------------------------------------------------- /static/poke/128.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/128.png -------------------------------------------------------------------------------- /static/poke/129.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/129.png -------------------------------------------------------------------------------- /static/poke/13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/13.png -------------------------------------------------------------------------------- /static/poke/130.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/130.png -------------------------------------------------------------------------------- /static/poke/131.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/131.png -------------------------------------------------------------------------------- /static/poke/132.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/132.png -------------------------------------------------------------------------------- /static/poke/133.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/133.png -------------------------------------------------------------------------------- /static/poke/134.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/134.png -------------------------------------------------------------------------------- /static/poke/135.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/135.png -------------------------------------------------------------------------------- /static/poke/136.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/136.png -------------------------------------------------------------------------------- /static/poke/137.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/137.png -------------------------------------------------------------------------------- /static/poke/138.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/138.png -------------------------------------------------------------------------------- /static/poke/139.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/139.png -------------------------------------------------------------------------------- /static/poke/14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/14.png -------------------------------------------------------------------------------- /static/poke/140.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/140.png -------------------------------------------------------------------------------- /static/poke/141.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/141.png -------------------------------------------------------------------------------- /static/poke/142.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/142.png -------------------------------------------------------------------------------- /static/poke/143.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/143.png -------------------------------------------------------------------------------- /static/poke/144.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/144.png -------------------------------------------------------------------------------- /static/poke/145.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/145.png -------------------------------------------------------------------------------- /static/poke/146.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/146.png -------------------------------------------------------------------------------- /static/poke/147.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/147.png -------------------------------------------------------------------------------- /static/poke/148.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/148.png -------------------------------------------------------------------------------- /static/poke/149.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/149.png -------------------------------------------------------------------------------- /static/poke/15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/15.png -------------------------------------------------------------------------------- /static/poke/150.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/150.png -------------------------------------------------------------------------------- /static/poke/151.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/151.png -------------------------------------------------------------------------------- /static/poke/16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/16.png -------------------------------------------------------------------------------- /static/poke/17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/17.png -------------------------------------------------------------------------------- /static/poke/18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/18.png -------------------------------------------------------------------------------- /static/poke/19.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/19.png -------------------------------------------------------------------------------- /static/poke/2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/2.png -------------------------------------------------------------------------------- /static/poke/20.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/20.png -------------------------------------------------------------------------------- /static/poke/21.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/21.png -------------------------------------------------------------------------------- /static/poke/22.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/22.png -------------------------------------------------------------------------------- /static/poke/23.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/23.png -------------------------------------------------------------------------------- /static/poke/24.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/24.png -------------------------------------------------------------------------------- /static/poke/25.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/25.png -------------------------------------------------------------------------------- /static/poke/26.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/26.png -------------------------------------------------------------------------------- /static/poke/27.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/27.png -------------------------------------------------------------------------------- /static/poke/28.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/28.png -------------------------------------------------------------------------------- /static/poke/29.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/29.png -------------------------------------------------------------------------------- /static/poke/3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/3.png -------------------------------------------------------------------------------- /static/poke/30.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/30.png -------------------------------------------------------------------------------- /static/poke/31.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/31.png -------------------------------------------------------------------------------- /static/poke/32.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/32.png -------------------------------------------------------------------------------- /static/poke/33.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/33.png -------------------------------------------------------------------------------- /static/poke/34.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/34.png -------------------------------------------------------------------------------- /static/poke/35.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/35.png -------------------------------------------------------------------------------- /static/poke/36.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/36.png -------------------------------------------------------------------------------- /static/poke/37.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/37.png -------------------------------------------------------------------------------- /static/poke/38.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/38.png -------------------------------------------------------------------------------- /static/poke/39.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/39.png -------------------------------------------------------------------------------- /static/poke/4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/4.png -------------------------------------------------------------------------------- /static/poke/40.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/40.png -------------------------------------------------------------------------------- /static/poke/41.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/41.png -------------------------------------------------------------------------------- /static/poke/42.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/42.png -------------------------------------------------------------------------------- /static/poke/43.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/43.png -------------------------------------------------------------------------------- /static/poke/44.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/44.png -------------------------------------------------------------------------------- /static/poke/45.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/45.png -------------------------------------------------------------------------------- /static/poke/46.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/46.png -------------------------------------------------------------------------------- /static/poke/47.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/47.png -------------------------------------------------------------------------------- /static/poke/48.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/48.png -------------------------------------------------------------------------------- /static/poke/49.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/49.png -------------------------------------------------------------------------------- /static/poke/5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/5.png -------------------------------------------------------------------------------- /static/poke/50.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/50.png -------------------------------------------------------------------------------- /static/poke/51.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/51.png -------------------------------------------------------------------------------- /static/poke/52.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/52.png -------------------------------------------------------------------------------- /static/poke/53.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/53.png -------------------------------------------------------------------------------- /static/poke/54.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/54.png -------------------------------------------------------------------------------- /static/poke/55.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/55.png -------------------------------------------------------------------------------- /static/poke/56.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/56.png -------------------------------------------------------------------------------- /static/poke/57.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/57.png -------------------------------------------------------------------------------- /static/poke/58.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/58.png -------------------------------------------------------------------------------- /static/poke/59.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/59.png -------------------------------------------------------------------------------- /static/poke/6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/6.png -------------------------------------------------------------------------------- /static/poke/60.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/60.png -------------------------------------------------------------------------------- /static/poke/61.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/61.png -------------------------------------------------------------------------------- /static/poke/62.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/62.png -------------------------------------------------------------------------------- /static/poke/63.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/63.png -------------------------------------------------------------------------------- /static/poke/64.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/64.png -------------------------------------------------------------------------------- /static/poke/65.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/65.png -------------------------------------------------------------------------------- /static/poke/66.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/66.png -------------------------------------------------------------------------------- /static/poke/67.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/67.png -------------------------------------------------------------------------------- /static/poke/68.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/68.png -------------------------------------------------------------------------------- /static/poke/69.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/69.png -------------------------------------------------------------------------------- /static/poke/7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/7.png -------------------------------------------------------------------------------- /static/poke/70.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/70.png -------------------------------------------------------------------------------- /static/poke/71.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/71.png -------------------------------------------------------------------------------- /static/poke/72.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/72.png -------------------------------------------------------------------------------- /static/poke/73.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/73.png -------------------------------------------------------------------------------- /static/poke/74.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/74.png -------------------------------------------------------------------------------- /static/poke/75.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/75.png -------------------------------------------------------------------------------- /static/poke/76.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/76.png -------------------------------------------------------------------------------- /static/poke/77.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/77.png -------------------------------------------------------------------------------- /static/poke/78.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/78.png -------------------------------------------------------------------------------- /static/poke/79.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/79.png -------------------------------------------------------------------------------- /static/poke/8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/8.png -------------------------------------------------------------------------------- /static/poke/80.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/80.png -------------------------------------------------------------------------------- /static/poke/81.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/81.png -------------------------------------------------------------------------------- /static/poke/82.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/82.png -------------------------------------------------------------------------------- /static/poke/83.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/83.png -------------------------------------------------------------------------------- /static/poke/84.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/84.png -------------------------------------------------------------------------------- /static/poke/85.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/85.png -------------------------------------------------------------------------------- /static/poke/86.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/86.png -------------------------------------------------------------------------------- /static/poke/87.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/87.png -------------------------------------------------------------------------------- /static/poke/88.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/88.png -------------------------------------------------------------------------------- /static/poke/89.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/89.png -------------------------------------------------------------------------------- /static/poke/9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/9.png -------------------------------------------------------------------------------- /static/poke/90.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/90.png -------------------------------------------------------------------------------- /static/poke/91.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/91.png -------------------------------------------------------------------------------- /static/poke/92.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/92.png -------------------------------------------------------------------------------- /static/poke/93.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/93.png -------------------------------------------------------------------------------- /static/poke/94.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/94.png -------------------------------------------------------------------------------- /static/poke/95.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/95.png -------------------------------------------------------------------------------- /static/poke/96.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/96.png -------------------------------------------------------------------------------- /static/poke/97.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/97.png -------------------------------------------------------------------------------- /static/poke/98.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/98.png -------------------------------------------------------------------------------- /static/poke/99.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/99.png -------------------------------------------------------------------------------- /static/poke/trainer.gif: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/emeth-/pokelocater/2ddf089f44e7c9c958ac97e1df5611756e641a8c/static/poke/trainer.gif --------------------------------------------------------------------------------