def get_chamber_display(self, config, logged_in_character, chamber_character):
     chamber_display = {}
     query = Inventory_item.all().ancestor(chamber_character)
     query.filter('position_y >', 0) # only pull items that are on display
     query.order('position_y').order('position_x')
     display_items = query.fetch(1000)
     chamber_display['display_items'] = display_items
     chamber_display['character'] = chamber_character
     hunt_grid = chamber_character.get_hunt_grid()
     chamber_display['hunt_grid'] = hunt_grid
     key_name = '%s_%s' % (logged_in_character.key().name(), chamber_character.key().name())
     hunt_zone_status = Hunt_zone_user_status.get_by_key_name(key_names = key_name,
                                                            parent = chamber_character)
     if hunt_zone_status:
         elapsed_time = datetime.utcnow() - hunt_zone_status.updated
         total_seconds = (elapsed_time.microseconds + (elapsed_time.seconds + elapsed_time.days *  24 * 3600) * 10**6) / 10**6
         #elapsed_minutes = total_seconds / 60
         elapsed_hours = total_seconds / 3600
         air_per_hour = float(config.hunt_zone_air_capacity) / float(config.hunt_zone_air_replenish_hours)
         new_air = int(elapsed_hours * air_per_hour)
         hunt_zone_status.air_level = new_air + hunt_zone_status.air_level
         if hunt_zone_status.air_level >  config.hunt_zone_air_capacity:
             hunt_zone_status.air_level = config.hunt_zone_air_capacity
     else:
         hunt_zone_status = Hunt_zone_user_status(parent = chamber_character,
                                    key_name = key_name,
                                    chamber_character = chamber_character,
                                    huntging_character = logged_in_character,
                                    air_level = config.hunt_zone_air_capacity,
                                    updated = datetime.utcnow())
     hunt_zone_status.put()
         
     chamber_display['hunt_zone_user_status'] = hunt_zone_status
     return chamber_display
Exemple #2
0
        def do_uncover(config, character, chamber_character, grid_pos_x,
                       grid_pos_y):

            key_name = '%s_%s' % (character.key().name(),
                                  chamber_character.key().name())
            hunt_zone_status = Hunt_zone_user_status.get_by_key_name(
                parent=chamber_character, key_names=key_name)
            if not hunt_zone_status:
                logging.error('no user status found for this hunt zone')
                return False, 'Could not determine air status', None
            if hunt_zone_status.air_level < 1:
                return False, 'Not enough air', None  #don't change text without changing JS.  String match.

            square, reason = self.get_hunt_square(chamber_character,
                                                  grid_pos_x, grid_pos_y)
            if not square:
                return False, reason, None

            if not square.covered:
                logging.debug('square %s already uncovered')
                return True, square, None  # return False, 'square was already revealed'

            square.covered = False
            hunt_zone_status.air_level -= 1
            hunt_zone_status.updated = datetime.utcnow()
            db.put([square, hunt_zone_status])
            return True, square, hunt_zone_status.air_level
Exemple #3
0
    def get_chamber_display(self, config, logged_in_character,
                            chamber_character):
        chamber_display = {}
        query = Inventory_item.all().ancestor(chamber_character)
        query.filter('position_y >', 0)  # only pull items that are on display
        query.order('position_y').order('position_x')
        display_items = query.fetch(1000)
        chamber_display['display_items'] = display_items
        chamber_display['character'] = chamber_character
        hunt_grid = chamber_character.get_hunt_grid()
        chamber_display['hunt_grid'] = hunt_grid
        key_name = '%s_%s' % (logged_in_character.key().name(),
                              chamber_character.key().name())
        hunt_zone_status = Hunt_zone_user_status.get_by_key_name(
            key_names=key_name, parent=chamber_character)
        if hunt_zone_status:
            elapsed_time = datetime.utcnow() - hunt_zone_status.updated
            total_seconds = (elapsed_time.microseconds +
                             (elapsed_time.seconds +
                              elapsed_time.days * 24 * 3600) * 10**6) / 10**6
            #elapsed_minutes = total_seconds / 60
            elapsed_hours = total_seconds / 3600
            air_per_hour = float(config.hunt_zone_air_capacity) / float(
                config.hunt_zone_air_replenish_hours)
            new_air = int(elapsed_hours * air_per_hour)
            hunt_zone_status.air_level = new_air + hunt_zone_status.air_level
            if hunt_zone_status.air_level > config.hunt_zone_air_capacity:
                hunt_zone_status.air_level = config.hunt_zone_air_capacity
        else:
            hunt_zone_status = Hunt_zone_user_status(
                parent=chamber_character,
                key_name=key_name,
                chamber_character=chamber_character,
                huntging_character=logged_in_character,
                air_level=config.hunt_zone_air_capacity,
                updated=datetime.utcnow())
        hunt_zone_status.put()

        chamber_display['hunt_zone_user_status'] = hunt_zone_status
        return chamber_display
        def do_uncover(config, character, chamber_character, grid_pos_x, grid_pos_y):
            
            key_name = '%s_%s' % (character.key().name(), chamber_character.key().name())
            hunt_zone_status = Hunt_zone_user_status.get_by_key_name(parent = chamber_character,
                                                         key_names = key_name)
            if not hunt_zone_status:
                logging.error('no user status found for this hunt zone')
                return False, 'Could not determine air status', None
            if hunt_zone_status.air_level < 1:
                return False, 'Not enough air', None #don't change text without changing JS.  String match.

            square, reason = self.get_hunt_square(chamber_character, grid_pos_x, grid_pos_y)
            if not square:
                return False, reason, None

            if not square.covered:
                logging.debug('square %s already uncovered')
                return True, square, None # return False, 'square was already revealed'
        
            square.covered = False
            hunt_zone_status.air_level -= 1
            hunt_zone_status.updated = datetime.utcnow()
            db.put([square, hunt_zone_status])
            return True, square, hunt_zone_status.air_level