def _find_players(self, count): self._clear_players() # Hardcoded 24-player limit (unlikely to change before Reforged) for i in range(0, 23): mm = SharedMemoryFile(4+self._game_size+self._player_size*i, self._player_size) player = ObserverPlayer.parse(mm.data()) if player.type == "PLAYER" or player.type == "COMPUTER": self._player_mms.append(mm) if len(self._player_mms) >= count: return else: mm.close() raise Exception("Attempted to find %s players but found only %s" % (count, len(self._player_mms)))
def _get_player_state(self, index): player = ObserverPlayer.parse(self._player_mms[index].data()) # We can do some light processing here. For now, just delete the _io # garbage from construct as well as the counts which we don't need. del player._io del player.heroes_count del player.buildings_on_map_count del player.upgrades_completed_count del player.units_on_map_count del player.researches_in_progress_count for hero in player.heroes: del hero._io del hero.abilities_count del hero.inventory_count for ability in hero.abilities: del ability._io for item in hero.inventory: del item._io for building in player.buildings_on_map: del building._io for upgrade in player.upgrades_completed: del upgrade._io for unit in player.units_on_map: del unit._io for research in player.researches_in_progress: del research._io return player