Ejemplo n.º 1
0
  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)))
Ejemplo n.º 2
0
  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