@@ -96,6 +96,11 @@ def __init__(self, config):
9696 self .player_stats = PlayerStats ({})
9797 self .inventory = Player_Inventory ([])
9898
99+ self ._last_got_map_objects = 0
100+ self ._map_objects_rate_limit = 5.0
101+ self .map_objects = {}
102+ self .encountered_pokemons = TTLCache (maxsize = 120 , ttl = self ._map_objects_rate_limit * 2 )
103+
99104 self .start_time = time ()
100105 self .exp_start = None
101106 self .exp_current = None
@@ -523,7 +528,8 @@ def walk_back_to_origin(self):
523528 def spin_nearest_fort (self ):
524529 map_cells = self .nearby_map_objects ()['responses' ].get ('GET_MAP_OBJECTS' , {}).get ('map_cells' , [])
525530 forts = PGoApi .flatmap (lambda c : c .get ('forts' , []), map_cells )
526- destinations = filtered_forts (self ._origPosF , self ._posf , forts , self .STAY_WITHIN_PROXIMITY , self .visited_forts )
531+ destinations = filtered_forts (self ._origPosF , self ._posf , forts , self .STAY_WITHIN_PROXIMITY , self .visited_forts ,
532+ self .experimental )
527533 if destinations :
528534 nearest_fort = destinations [0 ][0 ]
529535 nearest_fort_dis = destinations [0 ][1 ]
@@ -569,6 +575,10 @@ def fort_search_pgoapi(self, fort, player_postion, fort_distance):
569575 self .log .debug ("Could not spin fort - fort not in range %s" , res )
570576 self .log .info ("Could not spin fort http://maps.google.com/maps?q=%s,%s, Not in Range %s" , fort ['latitude' ],
571577 fort ['longitude' ], fort_distance )
578+ elif result == 3 :
579+ self .log .debug ("Could not spin fort - still on cooldown %s" , res )
580+ self .log .info ("Could not spin fort http://maps.google.com/maps?q=%s,%s, Still on cooldown" , fort ['latitude' ],
581+ fort ['longitude' ])
572582 else :
573583 self .log .debug ("Could not spin fort %s" , res )
574584 self .log .info ("Could not spin fort http://maps.google.com/maps?q=%s,%s, Error id: %s" , fort ['latitude' ],
@@ -632,6 +642,7 @@ def catch_near_pokemon(self):
632642
633643 map_cells = self .nearby_map_objects ()['responses' ].get ('GET_MAP_OBJECTS' , {}).get ('map_cells' , [])
634644 pokemons = PGoApi .flatmap (lambda c : c .get ('catchable_pokemons' , []), map_cells )
645+ pokemons = filter (lambda p : (p ['encounter_id' ] not in self .encountered_pokemons ), pokemons )
635646
636647 # catch first pokemon:
637648 origin = (self ._posf [0 ], self ._posf [1 ])
@@ -653,12 +664,15 @@ def catch_near_pokemon(self):
653664 return catches_successful
654665
655666 def nearby_map_objects (self ):
656- position = self .get_position ()
657- neighbors = get_neighbors (self ._posf )
658- self .gsleep (1.0 )
659- return self .get_map_objects (latitude = position [0 ], longitude = position [1 ],
660- since_timestamp_ms = [0 ] * len (neighbors ),
661- cell_id = neighbors ).call ()
667+ if time () - self ._last_got_map_objects > self ._map_objects_rate_limit :
668+ position = self .get_position ()
669+ neighbors = get_neighbors (self ._posf )
670+ gevent .sleep (1.0 )
671+ self .map_objects = self .get_map_objects (latitude = position [0 ], longitude = position [1 ],
672+ since_timestamp_ms = [0 ] * len (neighbors ),
673+ cell_id = neighbors ).call ()
674+ self ._last_got_map_objects = time ()
675+ return self .map_objects
662676
663677 def attempt_catch (self , encounter_id , spawn_point_id , capture_probability = None ):
664678 catch_status = - 1
@@ -989,14 +1003,15 @@ def encounter_pokemon(self, pokemon_data, retry=False, new_loc=None): # take in
9891003 self .send_update_pos ()
9901004 # self.gsleep(2)
9911005
1006+ self .encountered_pokemons [encounter_id ] = pokemon_data
9921007 return self .do_catch_pokemon (encounter_id , spawn_point_id , capture_probability , pokemon )
9931008 elif result == 7 :
9941009 self .log .info ("Couldn't catch %s Your pokemon bag was full, attempting to clear and re-try" , pokemon .pokemon_type )
9951010 self .cleanup_pokemon ()
9961011 if not retry :
9971012 return self .encounter_pokemon (pokemon_data , retry = True , new_loc = new_loc )
9981013 else :
999- self .log .info ("Could not start encounter for pokemon: %s" , pokemon .pokemon_type )
1014+ self .log .info ("Could not start encounter for pokemon: %s, status %s " , pokemon .pokemon_type , result )
10001015 return False
10011016 except Exception as e :
10021017 self .log .error ("Error in pokemon encounter %s" , e )
0 commit comments