class ImmediateSuperInteraction(SuperInteraction):
    __qualname__ = 'ImmediateSuperInteraction'
    INSTANCE_TUNABLES = {
        'basic_content':
        TunableBasicContentSet(no_content=True, default='no_content'),
        'basic_extras':
        TunableList(
            description=
            'Additional elements to run around the basic content of the interaction.',
            tunable=TunableVariant(
                state_change=TunableStateChange(),
                create_situation=CreateSituationElement.TunableFactory(),
                create_object=ObjectCreationElement.TunableFactory(),
                notification=NotificationElement.TunableFactory(),
                payment=PaymentElement.TunableFactory(),
                destroy_object=ObjectDestructionElement.TunableFactory(),
                vfx=PlayVisualEffectElement.TunableFactory()))
    }

    @classproperty
    def immediate(cls):
        return True
Exemple #2
0
class ImmediateSuperInteraction(SuperInteraction):
    INSTANCE_TUNABLES = {
        'basic_content':
        TunableBasicContentSet(no_content=True, default='no_content'),
        'basic_extras':
        TunableList(
            description=
            'Additional elements to run around the basic content of the interaction.',
            tunable=TunableVariant(
                add_to_household=AddToHouseholdElement.TunableFactory(),
                business_buy_lot=BusinessBuyLot.TunableFactory(),
                business_employee_action=BusinessEmployeeAction.TunableFactory(
                ),
                camera_focus=CameraFocusElement.TunableFactory(),
                create_object=ObjectCreationElement.TunableFactory(),
                create_photo_memory=CreatePhotoMemory.TunableFactory(),
                create_sim=SimCreationElement.TunableFactory(),
                create_situation=CreateSituationElement.TunableFactory(),
                destroy_object=ObjectDestructionElement.TunableFactory(),
                display_notebook_ui=NotebookDisplayElement.TunableFactory(),
                do_command=DoCommand.TunableFactory(),
                join_situation=JoinSituationElement.TunableFactory(),
                notification=NotificationElement.TunableFactory(),
                payment=PaymentElement.TunableFactory(),
                pregnancy=PregnancyElement.TunableFactory(),
                push_leave_lot_interaction=PushNpcLeaveLotNowInteraction.
                TunableFactory(),
                remove_from_travel_group=TravelGroupRemove.TunableFactory(),
                save_participant=SaveParticipantElement.TunableFactory(),
                state_change=TunableStateChange(),
                university_enrollment_ui=UniversityEnrollmentElement.
                TunableFactory(),
                vfx=PlayVisualEffectElement.TunableFactory(),
                walls_up_override=SetWallsUpOverrideElement.TunableFactory()))
    }

    @classproperty
    def immediate(cls):
        return True
Exemple #3
0
class KnowOtherSimTraitOp(BaseTargetedLootOperation):
    TRAIT_SPECIFIED = 0
    TRAIT_RANDOM = 1
    TRAIT_ALL = 2
    FACTORY_TUNABLES = {
        'traits':
        TunableVariant(
            description=
            '\n            The traits that the subject may learn about the target.\n            ',
            specified=TunableTuple(
                description=
                '\n                Specify individual traits that can be learned.\n                ',
                locked_args={'learned_type': TRAIT_SPECIFIED},
                potential_traits=TunableList(
                    description=
                    '\n                    A list of traits that the subject may learn about the target.\n                    ',
                    tunable=Trait.TunableReference())),
            random=TunableTuple(
                description=
                '\n                Specify a random number of traits to learn.\n                ',
                locked_args={'learned_type': TRAIT_RANDOM},
                count=TunableRange(
                    description=
                    '\n                    The number of potential traits the subject may learn about\n                    the target.\n                    ',
                    tunable_type=int,
                    default=1,
                    minimum=1)),
            all=TunableTuple(
                description=
                "\n                The subject Sim may learn all of the target's traits.\n                ",
                locked_args={'learned_type': TRAIT_ALL}),
            default='specified'),
        'notification':
        OptionalTunable(
            description=
            "\n            Specify a notification that will be displayed for every subject if\n            information is learned about each individual target_subject. This\n            should probably be used only if you can ensure that target_subject\n            does not return multiple participants. The first two additional\n            tokens are the Sim and target Sim, respectively. A third token\n            containing a string with a bulleted list of trait names will be a\n            String token in here. If you are learning multiple traits, you\n            should probably use it. If you're learning a single trait, you can\n            get away with writing specific text that does not use this token.\n            ",
            tunable=NotificationElement.TunableFactory(
                locked_args={'recipient_subject': None})),
        'notification_no_more_traits':
        OptionalTunable(
            description=
            '\n            Specify a notification that will be displayed when a Sim knows\n            all traits of another target Sim.\n            ',
            tunable=NotificationElement.TunableFactory(
                locked_args={'recipient_subject': None}))
    }

    def __init__(self, *args, traits, notification,
                 notification_no_more_traits, **kwargs):
        super().__init__(*args, **kwargs)
        self.traits = traits
        self.notification = notification
        self.notification_no_more_traits = notification_no_more_traits

    @property
    def loot_type(self):
        return interactions.utils.LootType.RELATIONSHIP_BIT

    @staticmethod
    def _select_traits(knowledge, trait_tracker, random_count=None):
        traits = tuple(trait for trait in trait_tracker.personality_traits
                       if trait not in knowledge.known_traits)
        if random_count is not None and traits:
            return random.sample(traits, min(random_count, len(traits)))
        return traits

    def _apply_to_subject_and_target(self, subject, target, resolver):
        knowledge = subject.relationship_tracker.get_knowledge(target.sim_id,
                                                               initialize=True)
        if knowledge is None:
            return
        trait_tracker = target.trait_tracker
        if self.traits.learned_type == self.TRAIT_SPECIFIED:
            traits = tuple(trait for trait in self.traits.potential_traits
                           if trait_tracker.has_trait(trait)
                           if trait not in knowledge.known_traits)
        elif self.traits.learned_type == self.TRAIT_ALL:
            traits = self._select_traits(knowledge, trait_tracker)
        elif self.traits.learned_type == self.TRAIT_RANDOM:
            traits = self._select_traits(knowledge,
                                         trait_tracker,
                                         random_count=self.traits.count)
            if not traits and self.notification_no_more_traits is not None:
                interaction = resolver.interaction
                if interaction is not None:
                    self.notification_no_more_traits(
                        interaction).show_notification(
                            additional_tokens=(subject, target),
                            recipients=(subject, ),
                            icon_override=IconInfoData(obj_instance=target))
        for trait in traits:
            knowledge.add_known_trait(trait)
        if traits:
            interaction = resolver.interaction
            if interaction is not None and self.notification is not None:
                trait_string = LocalizationHelperTuning.get_bulleted_list(
                    None, *(trait.display_name(target) for trait in traits))
                self.notification(interaction).show_notification(
                    additional_tokens=(subject, target, trait_string),
                    recipients=(subject, ),
                    icon_override=IconInfoData(obj_instance=target))
class ServiceNpcRequest(XevtTriggeredElement):
    __qualname__ = 'ServiceNpcRequest'
    MINUTES_ADD_TO_SERVICE_ARRIVAL = 5
    HIRE = 1
    CANCEL = 2
    FACTORY_TUNABLES = {
        'description':
        '\n        Request a service NPC as part of an interaction. Note for timing field:\n        Only beginning and end will work because xevents will trigger\n        immediately on the server for service requests\n        ',
        'request_type':
        TunableVariant(
            description=
            '\n                Specify the type of service NPC Request. You can hire, dismiss,\n                fire, or cancel a service npc.',
            hire=TunableTuple(
                description=
                '\n                A reference to the tuned service npc instance that will be\n                requested at the specified time.',
                locked_args={'request_type': HIRE},
                service=TunableReference(services.service_npc_manager())),
            cancel=TunableTuple(
                locked_args={'request_type': CANCEL},
                service=TunableReference(services.service_npc_manager()),
                description=
                'A reference to the tuned service that will be cancelled. This only really applies to recurring services where a cancelled service will never have any service npcs show up again until re-requested.'
            ),
            default='hire'),
        'notification':
        OptionalTunable(
            description=
            '\n                When enabled, display a notification when the service npc is \n                successfully hired/cancelled.\n                If hired, last token is DateAndTime when service npc will\n                arrive. (usually this is 1)\n                ',
            tunable=NotificationElement.TunableFactory(
                locked_args={
                    'timing': XevtTriggeredElement.LOCKED_AT_BEGINNING
                }))
    }

    def __init__(self,
                 interaction,
                 *args,
                 request_type,
                 notification,
                 sequence=(),
                 **kwargs):
        super().__init__(interaction,
                         request_type=request_type,
                         notification=notification,
                         sequence=sequence,
                         *args,
                         **kwargs)
        self._request_type = request_type
        self.notification = notification
        self._household = interaction.sim.household
        self._service_npc_user_specified_data_id = None
        self._recurring = False
        self._read_interaction_parameters(**interaction.interaction_parameters)

    def _read_interaction_parameters(self,
                                     service_npc_user_specified_data_id=None,
                                     service_npc_recurring_request=False,
                                     **kwargs):
        self._service_npc_user_specified_data_id = service_npc_user_specified_data_id
        self._recurring = service_npc_recurring_request

    def _do_behavior(self):
        request_type = self._request_type.request_type
        service_npc = self._request_type.service
        if service_npc is None:
            return
        service_npc_service = services.current_zone().service_npc_service
        if request_type == self.HIRE:
            finishing_time = service_npc_service.request_service(
                self._household,
                service_npc,
                user_specified_data_id=self.
                _service_npc_user_specified_data_id,
                is_recurring=self._recurring)
            if self.notification is not None and finishing_time is not None:
                finishing_time = finishing_time + create_time_span(
                    minutes=self.MINUTES_ADD_TO_SERVICE_ARRIVAL)
                notification_element = self.notification(self.interaction)
                notification_element.show_notification(
                    additional_tokens=(finishing_time, ))
        elif request_type == self.CANCEL:
            service_npc_service.cancel_service(self._household, service_npc)
            if self.notification is not None:
                notification_element = self.notification(self.interaction)
                notification_element._do_behavior()
Exemple #5
0
 def __init__(self, **kwargs):
     super().__init__(audio_modification=TunableAudioModificationElement(), audio_sting=TunableAudioSting.TunableFactory(), balloon=TunableBalloon(), broadcaster=BroadcasterRequest.TunableFactory(), buff=TunableBuffElement(), camera_focus=CameraFocusElement.TunableFactory(), career_selection=careers.career_tuning.CareerSelectElement.TunableFactory(), change_outfit=ChangeOutfitElement.TunableFactory(), create_object=ObjectCreationElement.TunableFactory(), create_sim=SimCreationElement.TunableFactory(), create_situation=CreateSituationElement.TunableFactory(), deliver_bill=DeliverBill.TunableFactory(), destroy_object=ObjectDestructionElement.TunableFactory(), destroy_specified_objects_from_target_inventory=DestroySpecifiedObjectsFromTargetInventory.TunableFactory(), do_command=DoCommand.TunableFactory(), dynamic_spawn_point=DynamicSpawnPointElement.TunableFactory(), exit_carry_while_holding=TunableExitCarryWhileHolding(), enter_carry_while_holding=TunableEnterCarryWhileHolding(), fade_children=FadeChildrenElement.TunableFactory(), inventory_transfer=InventoryTransfer.TunableFactory(), invite=InviteSimElement.TunableFactory(), life_event=TunableLifeEventElement(), notification=NotificationElement.TunableFactory(), npc_summon=TunableSummonNpc(), focus=TunableFocusElement(), parent_object=ParentObjectElement.TunableFactory(), payment=PaymentElement.TunableFactory(), pregnancy=PregnancyElement.TunableFactory(), put_object_in_mail=PutObjectInMail.TunableFactory(), royalty_payment=TunableRoyaltyPayment.TunableFactory(), send_to_inventory=SendToInventory.TunableFactory(), service_npc_request=ServiceNpcRequest.TunableFactory(), set_game_speed=TunableSetClockSpeed.TunableFactory(), set_goodbye_notification=SetGoodbyeNotificationElement.TunableFactory(), set_visibility_state=SetVisibilityStateElement.TunableFactory(), slot_item_harvest=SlotItemHarvest.TunableFactory(), stat_transfer_remove=TunableStatisticTransferRemove(), state_change=TunableStateChange(), store_sim=StoreSimElement.TunableFactory(), transfer_name=NameTransfer.TunableFactory(), transience_change=TunableTransienceChange(), trigger_reaction=ReactionTriggerElement.TunableFactory(), update_physique=UpdatePhysique.TunableFactory(), vfx=PlayVisualEffectElement.TunableFactory(), **kwargs)
class ServiceNpcSituation(SituationComplexCommon):
    __qualname__ = 'ServiceNpcSituation'
    INSTANCE_TUNABLES = {
        '_service_npc_job':
        TunableSituationJobAndRoleState(
            description=
            '\n            The job for service sim in this situation and the corresponding\n            starting role state for service sim. EX: the job for a maid would\n            be the maid_job.\n            ',
            display_name='Service Npc Job'),
        'start_work_test_and_state':
        OptionalTunable(
            description=
            "\n            If tuned, the situation will start by going to the ArriveOnLotState,\n            and the service npc won't go into their 'working state' until\n            the tuned test passes. When the test passes, the service npc will\n            go into the work state with the tuned role state.\n            \n            If this is left as None, the service npc will start the situation\n            going to the working state.\n            ",
            tunable=TunableJobStateAndTest()),
        'finish_job_states':
        TunableMapping(
            description=
            '\n            Tune pairs of job finish role states with job finish tests. When\n            those tests pass, the sim will transition to the paired role state.\n            The situation will also be transitioned to the Leaving situation\n            state.\n            ',
            key_type=ServiceNpcEndWorkReason,
            value_type=TunableFinishJobStateAndTest()),
        'preroll_autonomy':
        OptionalTunable(
            description=
            '\n            If enabled, we will forcefully run an autonomy request when the\n            service npc first gets spawned on the lot. The tunable specifies\n            tests/settings for how to post process a manual autonomy request on\n            the service npc. EX: preroll autonomy for the maid when she first\n            gets onto the lot has an affordance link that blacklists her from\n            doing the serviceNpc_noMoreWork interaction.\n            ',
            tunable=ServicePrerollAutonomy.TunableFactory()),
        'fake_perform_on_preroll_failure':
        OptionalTunable(
            description=
            "\n            Enable this ONLY if preroll_autonomy is tuned.\n            When enabled, the situation to listen to the interaction pushed by\n            preroll autonomy and check if that interaction succeeded in running.\n            If the interaction failed to run for any reason, the situation will\n            run the service npc's fake_perform_job.\n            \n            Ex: for the mailman, preroll autonomy is tuned so the mailman has\n            to delivery mail. if the delivery mail interaction is pushed,\n            but the mailman cannot route to the mailbox, we will still deliver\n            the mail using the service npc mailman tuning's fake perform job\n            ",
            tunable=TunableTuple(notification=OptionalTunable(
                description=
                '\n                    If enabled, a notification will be displayed when the\n                    preroll fails and the fake perform modified some items.\n                    ',
                tunable=NotificationElement.TunableFactory(
                    locked_args={
                        'timing': XevtTriggeredElement.LOCKED_AT_BEGINNING,
                        'recipient_subject': None
                    })))),
        'fail_on_preroll_execute_failure':
        Tunable(
            description=
            '\n            If the preroll execution failed, we consider that there was no\n            preroll done and go to the failure state.\n            ',
            tunable_type=bool,
            default=True)
    }
    REMOVE_INSTANCE_TUNABLES = ('_level_data', '_buff', '_cost',
                                '_NPC_host_filter', '_NPC_hosted_player_tests',
                                'NPC_hosted_situation_start_message',
                                'venue_types', 'venue_invitation_message')
    CANCEL_SERVICE_LEAVING_REASONS = set(
        (ServiceNpcEndWorkReason.FIRED, ServiceNpcEndWorkReason.NOT_PAID))

    @staticmethod
    def _states():
        return [(1, ArrivingOnLotSituationState), (2, WorkingSituationState),
                (3, LeaveSituationState)]

    @classmethod
    def default_job(cls):
        return cls._service_npc_job.job

    @classmethod
    def _get_tuned_job_and_default_role_state_tuples(cls):
        return [(cls._service_npc_job.job, cls._service_npc_job.role_state)]

    def __init__(self, *args, **kwargs):
        super().__init__(*args, **kwargs)
        reader = self._seed.custom_init_params_reader
        self._service_npc_type = services.service_npc_manager().get(
            reader.read_uint64('service_npc_type_id', 0))
        if self._service_npc_type is None:
            raise ValueError(
                'Invalid service npc type for situation: {}'.format(self))
        self._hiring_household = services.household_manager().get(
            reader.read_uint64('household_id', 0))
        if self._hiring_household is None:
            raise ValueError(
                'Invalid household for situation: {}'.format(self))
        self._is_recurring = reader.read_bool('is_recurring', False)
        self._object_definition_to_craft = reader.read_uint64(
            'user_specified_data_id', 0)
        self._crafted_object_id = reader.read_uint64('crafted_object_id', 0)
        self._service_start_time = services.time_service().sim_now
        self._had_preroll_work = True
        self._is_leaving = False

    def start_situation(self):
        if services.get_super_speed_three_service(
        ).in_or_has_requested_super_speed_three():
            clock_service = services.game_clock_service()
            clock_service.stop_super_speed_three()
        super().start_situation()
        self._change_state(ArrivingOnLotSituationState())

    def _save_custom_situation(self, writer):
        super()._save_custom_situation(writer)
        writer.write_uint64('household_id', self._hiring_household.id)
        writer.write_uint64('service_npc_type_id',
                            self._service_npc_type.guid64)
        writer.write_uint64('is_recurring', self._is_recurring)
        writer.write_uint64('user_specified_data_id',
                            self._object_definition_to_craft)
        writer.write_uint64('crafted_object_id', self._crafted_object_id)

    def _on_set_sim_job(self, sim, job_type):
        service_record = self._hiring_household.get_service_npc_record(
            self._service_npc_type.guid64)
        service_record.add_preferred_sim(sim.sim_info.id)
        self._service_npc_type.on_service_sim_entered_situation(sim, self)
        start_work_test = self._get_start_work_test()
        if start_work_test is None and self.start_work_test_and_state is not None:
            self._set_job_role_state(
                self.default_job(),
                self.start_work_test_and_state.role_state,
                role_affordance_target=self.role_affordance_target)

    def _on_set_sim_role_state(self, sim, job_type, role_state_type,
                               role_affordance_target):
        super()._on_set_sim_role_state(sim, job_type, role_state_type,
                                       role_affordance_target)
        if self._get_start_work_test() is None:
            self._change_state(WorkingSituationState())

    def _on_remove_sim_from_situation(self, sim):
        if sim is self.service_sim() and (
                not self._is_recurring and not self._is_leaving
        ) and services.current_zone().service_npc_service is not None:
            services.current_zone().service_npc_service.cancel_service(
                self._hiring_household, self._service_npc_type)
        super()._on_remove_sim_from_situation(sim)

    @property
    def _should_cancel_leave_interaction_on_premature_removal(self):
        return True

    def service_sim(self):
        sim = next(self.all_sims_in_job_gen(self.default_job()), None)
        return sim

    def on_ask_sim_to_leave(self, sim):
        return False

    def _on_preroll_cancelled(self, interaction):
        if interaction.uncanceled:
            return
        num_objects_modified = self._service_npc_type.fake_perform(
            self._hiring_household)
        if num_objects_modified > 0:
            notification = self.fake_perform_on_preroll_failure.notification
            if notification is not None:
                hiring_household_client = self._hiring_household.client
                if hiring_household_client is not None and hiring_household_client.active_sim is not None:
                    notification_element = notification(interaction)
                    notification_element.show_notification(
                        recipients=(hiring_household_client.active_sim, ))

    def _on_starting_work(self):
        if self.preroll_autonomy is not None:
            chosen_interaction = self.preroll_autonomy().run_preroll(
                self.service_sim())
            if chosen_interaction is None:
                self._had_preroll_work = False
            else:
                execute_result = AffordanceObjectPair.execute_interaction(
                    chosen_interaction)
                if not execute_result:
                    if self.fail_on_preroll_execute_failure:
                        self._had_preroll_work = False
                        if self.fake_perform_on_preroll_failure is not None:
                            self._on_preroll_cancelled(chosen_interaction)
                        elif self.fake_perform_on_preroll_failure is not None:
                            chosen_interaction.register_on_cancelled_callback(
                                self._on_preroll_cancelled)
                elif self.fake_perform_on_preroll_failure is not None:
                    chosen_interaction.register_on_cancelled_callback(
                        self._on_preroll_cancelled)
        if not self._had_preroll_work:
            self._change_state(
                LeaveSituationState(ServiceNpcEndWorkReason.NO_WORK_TO_DO))

    def _situation_timed_out(self, _):
        if not self._is_leaving:
            self._change_state(
                LeaveSituationState(ServiceNpcEndWorkReason.FINISHED_WORK))

    def _on_leaving_situation(self, end_work_reason):
        service_npc_type = self._service_npc_type
        household = self._hiring_household
        try:
            now = services.time_service().sim_now
            time_worked = now - self._service_start_time
            time_worked_in_hours = time_worked.in_hours()
            if self._had_preroll_work:
                cost = service_npc_type.get_cost(time_worked_in_hours)
            else:
                cost = 0
            if cost > 0:
                (paid_amount,
                 billed_amount) = service_npc_type.try_charge_for_service(
                     household, cost)
                end_work_reason = ServiceNpcEndWorkReason.NOT_PAID
            else:
                paid_amount = 0
                billed_amount = 0
            self._send_end_work_notification(end_work_reason, paid_amount,
                                             billed_amount)
            service_record = household.get_service_npc_record(
                service_npc_type.guid64)
            service_record.time_last_finished_service = now
            if end_work_reason == ServiceNpcEndWorkReason.FIRED:
                service_sim = self.service_sim()
                if service_record is not None:
                    service_record.add_fired_sim(service_sim.id)
                    service_record.remove_preferred_sim(service_sim.id)
            while end_work_reason in ServiceNpcSituation.CANCEL_SERVICE_LEAVING_REASONS:
                services.current_zone().service_npc_service.cancel_service(
                    household, service_npc_type)
        except Exception as e:
            logger.exception(
                'Exception while executing _on_leaving_situation for situation {}',
                self,
                exc=e)
        finally:
            if not self._is_recurring:
                services.current_zone().service_npc_service.cancel_service(
                    household, service_npc_type)
        return end_work_reason

    def _send_end_work_notification(self, end_work_reason, *localization_args):
        end_work_tuning = self.finish_job_states[end_work_reason]
        notification = end_work_tuning.notification
        if notification is None:
            return
        for client in services.current_zone().client_manager.values():
            recipient = client.active_sim
            while recipient is not None:
                dialog = notification(recipient)
                dialog.show_dialog(additional_tokens=localization_args,
                                   icon_override=(None, self.service_sim()))
                break

    @property
    def hiring_household(self):
        return self._hiring_household

    @property
    def object_definition_to_craft(self):
        return self._object_definition_to_craft

    def set_crafted_object_id(self, object_id):
        self._crafted_object_id = object_id

    @property
    def role_affordance_target(self):
        target = services.object_manager().get(self._crafted_object_id)
        if target is None:
            target = services.current_zone().inventory_manager.get(
                self._crafted_object_id)
        return target

    def _get_start_work_test(self):
        if self.start_work_test_and_state is not None:
            start_work_test = self.start_work_test_and_state.enter_state_test
            if start_work_test.affordances or start_work_test.tags:
                return start_work_test

    def _get_role_state_overrides(self, sim, job_type, role_state_type,
                                  role_affordance_target):
        return (role_state_type, self.role_affordance_target)
Exemple #7
0
	def __init__ (self, **kwargs):
		super().__init__(add_to_ensemble = AddToEnsemble.TunableFactory(),
						 add_to_household = AddToHouseholdElement.TunableFactory(),
						 add_to_travel_group = TravelGroupAdd.TunableFactory(),
						 adventure = Adventure.TunableFactory(),
						 audio_modification = TunableAudioModificationElement(),
						 audio_sting = TunableAudioSting.TunableFactory(),
						 balloon = TunableBalloon(),
						 broadcaster = BroadcasterRequest.TunableFactory(),
						 buff = TunableBuffElement(),
						 buff_fire_and_forget = BuffFireAndForgetElement.TunableFactory(),
						 business_buy_lot = BusinessBuyLot.TunableFactory(),
						 business_employee_action = BusinessEmployeeAction.TunableFactory(),
						 call_to_action_turn_off = TurnOffCallToAction.TunableFactory(),
						 camera_focus = CameraFocusElement.TunableFactory(),
						 career_selection = careers.career_tuning.CareerSelectElement.TunableFactory(),
						 change_age = ChangeAgeElement.TunableFactory(),
						 change_outfit = ChangeOutfitElement.TunableFactory(),
						 conditional_layer = ManipulateConditionalLayer.TunableFactory(),
						 create_object = ObjectCreationElement.TunableFactory(),
						 create_photo_memory = CreatePhotoMemory.TunableFactory(),
						 create_sim = SimCreationElement.TunableFactory(),
						 create_situation = CreateSituationElement.TunableFactory(),
						 deliver_bill = DeliverBill.TunableFactory(),
						 destroy_ensemble = DestroyEnsemble.TunableFactory(),
						 destroy_object = ObjectDestructionElement.TunableFactory(),
						 destroy_situations_by_tags = DestroySituationsByTagsElement.TunableFactory(),
						 destroy_specified_objects_from_target_inventory = DestroySpecifiedObjectsFromTargetInventory.TunableFactory(),
						 display_notebook_ui = NotebookDisplayElement.TunableFactory(),
						 do_command = DoCommand.TunableFactory(),
						 dynamic_spawn_point = DynamicSpawnPointElement.TunableFactory(),
						 end_vacation = TravelGroupEnd.TunableFactory(),
						 exit_carry_while_holding = TunableExitCarryWhileHolding(),
						 extend_vacation = TravelGroupExtend.TunableFactory(),
						 enter_carry_while_holding = EnterCarryWhileHolding.TunableFactory(),

						 fade_children = FadeChildrenElement.TunableFactory(),
						 familiar_bind = BindFamiliarElement.TunableFactory(),
						 familiar_dismiss = DismissFamiliarElement.TunableFactory(),
						 focus = TunableFocusElement(),
						 inventory_transfer = InventoryTransfer.TunableFactory(),
						 invite = InviteSimElement.TunableFactory(),
						 join_situation = JoinSituationElement.TunableFactory(),
						 leave_situation = LeaveSituationElement.TunableFactory(),
						 loot = LootElement.TunableFactory(),
						 lot_decoration = LotDecorationElement.TunableFactory(),
						 life_event = TunableLifeEventElement(),
						 mark_object_as_stolen = MarkObjectAsStolen.TunableFactory(),
						 notification = NotificationElement.TunableFactory(),
						 npc_summon = TunableSummonNpc(),
						 object_relationship_social = ObjectRelationshipSocialTrigger.TunableFactory(),
						 painting_state_transfer = PaintingStateTransfer.TunableFactory(),
						 parent_object = ParentObjectElement.TunableFactory(),
						 payment = PaymentElement.TunableFactory(),

						 play_stored_audio_from_source = TunablePlayStoredAudioFromSource.TunableFactory(),
						 pregnancy = PregnancyElement.TunableFactory(),
						 put_near = PutNearElement.TunableFactory(),
						 put_object_in_mail = PutObjectInMail.TunableFactory(),
						 put_sim_in_rabbit_hole = RabbitHoleElement.TunableFactory(),
						 record_trends = RecordTrendsElement.TunableFactory(),
						 remove_from_ensemble = RemoveFromEnsemble.TunableFactory(),
						 remove_from_travel_group = TravelGroupRemove.TunableFactory(),
						 replace_object = ReplaceObject.TunableFactory(),
						 retail_customer_action = RetailCustomerAction.TunableFactory(),
						 return_stolen_object = ReturnStolenObject.TunableFactory(),
						 route_events = RouteEventProviderRequest.TunableFactory(),
						 routing_formation = RoutingFormationElement.TunableFactory(),
						 royalty_payment = TunableRoyaltyPayment.TunableFactory(),
						 save_participant = SaveParticipantElement.TunableFactory(),
						 send_to_inventory = SendToInventory.TunableFactory(),

						 service_npc_request = ServiceNpcRequest.TunableFactory(),
						 set_as_head = SetAsHeadElement.TunableFactory(),
						 set_game_speed = TunableSetClockSpeed.TunableFactory(),
						 set_goodbye_notification = SetGoodbyeNotificationElement.TunableFactory(),
						 set_photo_filter = SetPhotoFilter.TunableFactory(),
						 set_posture = SetPosture.TunableFactory(),
						 set_visibility_state = SetVisibilityStateElement.TunableFactory(),
						 slot_objects_from_inventory = SlotObjectsFromInventory.TunableFactory(),
						 slot_item_transfer = SlotItemTransfer.TunableFactory(),
						 stat_transfer_remove = TunableStatisticTransferRemove(),
						 state_change = TunableStateChange(),
						 store_sim = StoreSimElement.TunableFactory(),
						 submit_to_festival_contest = FestivalContestSubmitElement.TunableFactory(),
						 switch_occult = SwitchOccultElement.TunableFactory(),
						 take_photo = TakePhoto.TunableFactory(),
						 track_diagnostic_action = TrackDiagnosticAction.TunableFactory(),

						 transfer_carry_while_holding = TransferCarryWhileHolding.TunableFactory(),
						 transfer_name = NameTransfer.TunableFactory(),
						 transfer_stored_audio_component = TransferStoredAudioComponent.TunableFactory(),
						 transience_change = TunableTransienceChange(),
						 trigger_reaction = ReactionTriggerElement.TunableFactory(),
						 university_enrollment_ui = UniversityEnrollmentElement.TunableFactory(),
						 update_family_portrait = UpdateFamilyPortrait.TunableFactory(),
						 update_object_value = UpdateObjectValue.TunableFactory(),
						 update_physique = UpdatePhysique.TunableFactory(),
						 update_display_number = UpdateDisplayNumber.TunableFactory(),
						 walls_up_override = SetWallsUpOverrideElement.TunableFactory(),
						 vfx = PlayVisualEffectElement.TunableFactory(),
						 **kwargs)