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())
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