예제 #1
0
    def uncover_hunt_square(self, config, container_user, chamber_character,
                            grid_pos_x, grid_pos_y):

        if not chamber_character:
            return False, 'chamber character not supplied', None
        #if container_user.character == chamber_character:
        #    return False, 'owner of chamber cannot hunt holes'

        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

        result, square, air_level = db.run_in_transaction(
            do_uncover, config, container_user.character, chamber_character,
            grid_pos_x, grid_pos_y)

        if result and square.item:
            x = random.randint(0, 700)
            y = random.randint(0, 80)
            inventory_item = Inventory_item(parent=container_user.character,
                                            character=container_user.character,
                                            item=square.item,
                                            position_x=x,
                                            position_y=y)
            inventory_item.put()
        return result, square, air_level
 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 uncover_hunt_square(self, config, container_user, chamber_character, grid_pos_x, grid_pos_y):
        
        if not chamber_character:
            return False, 'chamber character not supplied', None
        #if container_user.character == chamber_character:
        #    return False, 'owner of chamber cannot hunt holes'
        
        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
        
        result, square, air_level = db.run_in_transaction(do_uncover, config, container_user.character, chamber_character, grid_pos_x, grid_pos_y)

        if result and square.item:
            x = random.randint(0, 700)
            y = random.randint(0, 80)
            inventory_item = Inventory_item(parent = container_user.character,
                                            character = container_user.character,
                                            item = square.item,
                                            position_x = x,
                                            position_y = y)
            inventory_item.put()
        return result, square, air_level
def help(request, caller_context, container_user):
    ''' live
    '''
    chamberController = ChamberController()
    grid = container_user.character.get_hunt_grid()
    chamberController.populate_hunt_grid(grid)     #todo remove this, TESTING ONLY
    
    query = Inventory_item.all().ancestor(container_user.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)
    
    db.delete(display_items)
    
    return render_to_response('help.html', locals())
예제 #5
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 scratch(request, caller_context, container_user):
    
    config = Config(key_name='test',
                experience_limits_group = 'test',
                starting_gold = 5000,
                starting_pharaoh_bucks = 3,
                pyramid_lifetime_hours = 168,
                pyramid_warning_hours = 72,
                starting_active_bricks = 3,
                hunt_grid_horizontal_squares = 10,
                hunt_grid_vertical_squares = 5,
                dig_zone_air_capacity = 5,
                dig_zone_air_replenish_hours = 8)
    config.put()
    config = Config(key_name='prod',
                experience_limits_group = 'normal',
                starting_gold = 500,
                starting_pharaoh_bucks = 3,
                pyramid_lifetime_hours = 168,
                pyramid_warning_hours = 72,
                starting_active_bricks = 3,
                hunt_grid_horizontal_squares = 10,
                hunt_grid_vertical_squares = 5,
                dig_zone_air_capacity = 5,
                dig_zone_air_replenish_hours = 8)
    config.put()

    response = HttpResponse('scratch executed', 'text/html')
    return response

    key_name = 'Lotus Chalice'
    item = Item(key_name=key_name,
    item_name = key_name,
    image_file_name = 'lotus_chalice',
    image_file_extension = 'png',
    purchase_price_coins = 100,
    return_price_coins = 20,
    purchase_price_bucks = None,
    minimum_experience_level = None,
    large_image_width = 57,
    large_image_height = 109,
    abundance = 50)
    item.put()

    key_name = 'Cartouche'
    item = Item(key_name=key_name,
    item_name = key_name,
    image_file_name = 'cartouche',
    image_file_extension = 'png',
    purchase_price_coins = 100,
    return_price_coins = 20,
    purchase_price_bucks = None,
    minimum_experience_level = None,
    large_image_width = 69,
    large_image_height = 118,
    abundance = 25)
    item.put()

    key_name = 'Fancy Ankh'
    item = Item(key_name=key_name,
    item_name = key_name,
    image_file_name = 'fancy_ankh',
    image_file_extension = 'png',
    purchase_price_coins = 100,
    return_price_coins = 20,
    purchase_price_bucks = None,
    minimum_experience_level = None,
    large_image_width = 61,
    large_image_height = 117,
    abundance = 25)
    item.put()
    
    response = HttpResponse('scratch executed', 'text/html')
    return response
    
    
    character = container_user.character
    #key_name = 'Fancy Ankh'
    #key_name = 'Cartouche'
    key_name = 'Lotus Chalice'
    item = Item.get_by_key_name(key_name)
    if item:

        #kn = '%s_%s' % (container_user.character.character_name, key_name) 
#        inv = Inventory_item(parent=container_user.character,
#                            key_name=key_name,
#                            item=item,
#                            quantity=1)
#        inv.put()
        invItem = Inventory_item(parent= container_user.character,
                               character = container_user.character,
                               item = item,
                               position_x = 200,
                               position_y = 30)
        invItem.put()
        character.put()
        
        
#class DisplayItem(db.Model):
#    ''' item of a player being displayed in chamber
#        no key_name, use generated id
#    '''
#    character = db.ReferenceProperty(Character, required=True)
#    item = db.ReferenceProperty(Item, required=True)
#    position_x = db.IntegerProperty(required=True)
#    position_y = db.IntegerProperty(required=True)
    
        
    response = HttpResponse('scratch executed', 'text/html')
    return response