def from_data(cls, data: Dict[str, Any],
               translations: Dict[str, Dict[str, Any]],
               game_contents: GameContents) -> 'SlotSpecification':
     s = cls()
     s.element = game_contents.get_element(data['id'])
     s.label = get(data,
                   'label',
                   s.element.element_id,
                   translations=translations)
     s.description = get(data, 'description', '', translations=translations)
     s.required = [
         SlotSpecificationItem(
             element=game_contents.get_element(element_id),
             quantity=quantity)
         for element_id, quantity in get(data, 'required', {}).items()
     ]
     s.forbidden = [
         SlotSpecificationItem(
             element=game_contents.get_element(element_id),
             quantity=quantity)
         for element_id, quantity in get(data, 'forbidden', {}).items()
     ]
     s.greedy = get(data, 'greedy', False, to_bool)
     s.consumes = get(data, 'consumes', False, to_bool)
     s.no_animation = get(data, 'noanim', False, to_bool)
     s.for_verb = game_contents.get_verb(get(data, 'actionId', None))
     return s
 def from_data(cls, file: File, data: Dict[str, Any],
               game_contents: GameContents):
     r = game_contents.get_verb(data['id'])
     r.file = file
     r.label = get(data, 'label')
     r.description = get(data, 'description')
     r.at_start = get(data, 'atStart', False, to_bool)
     if 'slots' in data and data['slots']:
         r.primary_slot_specification = VerbSlotSpecification.from_data(
             data['slots'][0], game_contents)
     r.comments = get(data, 'comments', None)
     return r
 def from_data(cls, file: File, data: Dict[str, Any],
               game_contents: GameContents) -> 'Recipe':
     r = game_contents.get_recipe(data['id'])
     r.file = file
     r.label = get(data, 'label', data['id'])
     r.start_description = get(data, 'startdescription')
     r.description = get(data, 'description')
     r.action = game_contents.get_verb(get(data, 'actionId'))
     r.requirements = RecipeRequirement.from_data(
         get(data, 'requirements', {}), game_contents)
     r.effects = RecipeEffect.from_data(get(data, 'effects', {}),
                                        game_contents)
     if 'aspects' in data:
         # TODO Remove this when fixed
         if isinstance(data['aspects'], str):
             logging.error('Invalid value for aspects for recipe {}'.format(
                 data['id']))
         else:
             r.aspects = RecipeAspect.from_data(get(data, 'aspects', {}),
                                                game_contents)
     r.mutation_effects = MutationEffect.from_data(
         get(data, 'mutations', []), game_contents)
     r.signal_ending_flavour = EndingFlavour(
         get(data, 'signalEndingFlavour', 'none').lower())
     r.craftable = get(data, 'craftable', False, to_bool)
     r.hint_only = get(data, 'hintonly', False, to_bool)
     r.warmup = get(data, 'warmup', 0, int)
     r.deck_effect = RecipeDeckEffect.from_data(get(data, 'deckeffect', {}),
                                                game_contents)
     r.alternative_recipes = [
         RecipeAlternativeRecipeDetails.from_data(lrd, game_contents)
         for lrd in get(data, 'alternativerecipes', [])
     ]
     r.linked_recipes = [
         RecipeLinkedRecipeDetails.from_data(lrd, game_contents)
         for lrd in get(data, 'linked', [])
     ]
     r.ending_flag = get(data, 'ending')
     r.max_executions = get(data, 'maxexecutions', 0, int)
     r.burn_image = get(data, 'burnimage')
     r.portal_effect = PortalEffect(
         get(data, 'portaleffect', 'none').lower())
     r.slot_specifications = [
         RecipeSlotSpecification.from_data(v, game_contents)
         for v in get(data, 'slots', [])
     ]
     r.signal_important_loop = get(data, 'signalimportantloop', False,
                                   to_bool)
     return r
 def from_data(cls, file: File, data: Dict[str, Any],
               translations: Dict[str, Dict[str, Any]],
               game_contents: GameContents):
     r = game_contents.get_verb(data['id'])
     r.file = file
     r.label = get(data, 'label', translations=translations)
     r.description = get(data, 'description', translations=translations)
     r.at_start = get(data, 'atStart', False, to_bool)
     if 'slots' in data and data['slots']:
         r.primary_slot_specification = VerbSlotSpecification.from_data(
             data['slots'][0], {
                 c: c_transformation["slots"][0]
                 for c, c_transformation in translations.items()
                 if "slots" in c_transformation
             }, game_contents)
     r.comments = get(data, 'comments', None)
     return r
Exemple #5
0
 def from_data(cls, file: File, data: Dict[str, Any],
               translations: Dict[str, Dict[str, Any]],
               game_contents: GameContents) -> 'Recipe':
     r = game_contents.get_recipe(data['id'])
     r.file = file
     r.label = get(data, 'label', data['id'], translations=translations)
     r.start_description = get(data,
                               'startdescription',
                               translations=translations)
     r.description = get(data, 'description', translations=translations)
     r.action = game_contents.get_verb(get(data, 'actionId'))
     r.requirements = RecipeRequirement.from_data(
         get(data, 'requirements', {}), game_contents)
     r.table_requirements = RecipeTableRequirement.from_data(
         get(data, 'tablereqs', {}), game_contents)
     r.extant_requirements = RecipeExtantRequirement.from_data(
         get(data, 'extantreqs', {}), game_contents)
     r.effects = RecipeEffect.from_data(get(data, 'effects', {}),
                                        game_contents)
     if 'aspects' in data:
         # TODO Remove this when fixed
         if isinstance(data['aspects'], str):
             logging.error('Invalid value for aspects for recipe {}'.format(
                 data['id']))
         else:
             r.aspects = RecipeAspect.from_data(get(data, 'aspects', {}),
                                                game_contents)
     r.mutation_effects = MutationEffect.from_data(
         get(data, 'mutations', []), game_contents)
     r.purge = RecipePurge.from_data(get(data, 'purge', {}), game_contents)
     r.halt_verb = RecipeHaltVerb.from_data(get(data, 'haltverb', {}),
                                            game_contents)
     r.delete_verb = RecipeDeleteVerb.from_data(get(data, 'deleteverb', {}),
                                                game_contents)
     r.signal_ending_flavour = EndingFlavour(
         get(data, 'signalEndingFlavour', 'None'))
     r.craftable = get(data, 'craftable', False, to_bool)
     r.hint_only = get(data, 'hintonly', False, to_bool)
     r.warmup = get(data, 'warmup', 0, int)
     r.deck_effect = RecipeDeckEffect.from_data(get(data, 'deckeffect', {}),
                                                game_contents)
     internal_deck = get(data, 'internaldeck')
     if internal_deck:
         internal_deck['id'] = "internal:" + r.recipe_id
         r.internal_deck = Deck.from_data(file, internal_deck, {},
                                          game_contents)
     alternative_recipes = get(data, 'alternativerecipes', [])
     if not alternative_recipes:
         alternative_recipes = get(data, 'alt', [])
     r.alternative_recipes = [
         RecipeAlternativeRecipeDetails.from_data(
             lrd, RecipeAlternativeRecipeDetailsChallengeRequirement,
             game_contents) for lrd in alternative_recipes
     ]
     r.linked_recipes = [
         RecipeLinkedRecipeDetails.from_data(
             lrd, RecipeLinkedRecipeDetailsChallengeRequirement,
             game_contents) for lrd in get(data, 'linked', [])
     ]
     r.ending_flag = get(data, 'ending')
     r.max_executions = get(data, 'maxexecutions', 0, int)
     r.burn_image = get(data, 'burnimage')
     r.portal_effect = PortalEffect(
         get(data, 'portaleffect', 'none').lower())
     r.slot_specifications = [
         RecipeSlotSpecification.from_data(
             v, {
                 c: c_transformation["slots"][i]
                 for c, c_transformation in translations.items()
                 if "slots" in c_transformation
             }, game_contents) for i, v in enumerate(get(data, 'slots', []))
     ]
     r.signal_important_loop = get(data, 'signalimportantloop', False,
                                   to_bool)
     r.comments = get(data, 'comments', None)
     if not r.comments:
         r.comments = get(data, 'comment', None)
     return r