def open_gate(*args, **kwargs): caster = args[0] gate_entity = args[1] results = [] player = kwargs.get('player') game_map = kwargs.get('game_map') jail_key = caster.inventory.check_item_by_index("jail_key") master_key = caster.inventory.check_item_by_index("master_key") if jail_key or master_key: # Don't Consume Key if not master_key: results.append({"change_map_object": [gate_entity, 2], 'message': Message('You unlock the cell consuming a {}.'.format(jail_key.name), tcod.yellow)}) jail_key.item.use_function = eval("ItemFunctions.consume") results.extend(caster.inventory.use(jail_key)) else: results.append({"change_map_object": [gate_entity, 2], 'message': Message('You unlock the cell.', tcod.yellow)}) # Free Denizens of Jail and Make them Head towards Exit or Follow Player # if caster == player: if game_map.level == 'undergrave': for jail_cell in game_map.map.jail_cells: if gate_entity in jail_cell.entrances: ai_type = 1 # ai_type = randint(1, 2) for prisoner_entity in jail_cell.entities: EventFunctions.change_faction(entity=prisoner_entity, new_faction='Rebels') # TODO: Either follow player depending on alignment score/wander/head toward exit if ai_type == 1: prisoner_entity.dialogue = Dialogue(['Lead the way boss!']) # encounter = prisoner_entity.ai = FollowAI(follow_entity=player, encounter=prisoner_entity.ai.encounter) prisoner_entity.ai.owner = prisoner_entity # prisoner_entity.ai.encounter.main_target = game_map.stairs else: prisoner_entity.dialogue = Dialogue(['Freedom! I\'m getting outta here!!']) prisoner_entity.ai.encounter.main_target = game_map.stairs # Remove Jail from "Rooms to Avoid" because it has been opened. Room is now Patrollable. game_map.map.jail_cells.remove(jail_cell) break else: results.append({'message': Message('A locked jail gate blocks your way.', tcod.yellow)}) return results