def _common_on_interaction_queued(original, self, interaction: Interaction, *_,
                                  **__) -> TestResult:
    try:
        result = CommonInteractionEventDispatcherService(
        )._on_interaction_queued(self, interaction, *_, **__)
        if result is None or result is True:
            original_result = original(self, interaction, *_, **__)
            CommonInteractionEventDispatcherService(
            )._on_interaction_post_queued(self, interaction, original_result,
                                          *_, **__)
            return original_result
        return result
    except Exception as ex:
        CommonExceptionHandler.log_exception(
            ModInfo.get_identity(),
            'Error occurred while running _on_interaction_queued for interaction {} with short name \'{}\' and display name {}. Args: {}, Kwargs: {}'
            .format(
                pformat(interaction),
                CommonInteractionUtils.get_interaction_short_name(interaction),
                CommonInteractionUtils.get_interaction_display_name(
                    interaction), _, __),
            exception=ex)
    return TestResult(
        False,
        'Interaction \'{}\' with short name \'{}\' Failed to Queue'.format(
            pformat(interaction),
            CommonInteractionUtils.get_interaction_short_name(interaction)))
 def _on_interaction_cancelled(self,
                               interaction: Interaction,
                               finishing_type: FinishingType,
                               cancel_reason_msg: str,
                               ignore_must_run: bool = False,
                               **__) -> None:
     if finishing_type is None:
         return None
     try:
         CommonEventRegistry().dispatch(
             S4CLInteractionCancelledEvent(interaction,
                                           finishing_type,
                                           cancel_reason_msg,
                                           ignore_must_run=ignore_must_run,
                                           **__))
     except Exception as ex:
         self.log.error(
             'Error occurred while running _on_interaction_cancelled for interaction {} with short name \'{}\' and display name {}. Finishing Type: {}, Cancel Reason: {}, Ignore Must Run: {}, Kwargs: {}'
             .format(
                 pformat(interaction),
                 CommonInteractionUtils.get_interaction_short_name(
                     interaction),
                 CommonInteractionUtils.get_interaction_display_name(
                     interaction), finishing_type, cancel_reason_msg,
                 ignore_must_run, __),
             exception=ex)
     return None
 def on_started(self, interaction_sim: Sim,
                interaction_target: Any) -> bool:
     self.log.format_with_message('Running \'{}\' on_started.'.format(
         self.__class__.__name__),
                                  interaction_sim=interaction_sim,
                                  interaction_target=interaction_target)
     self.log.enable()
     self.log.debug('Interactions that can be performed on \'{}\':'.format(
         interaction_target))
     interactions = CommonObjectInteractionUtils.get_all_interactions_registered_to_object_gen(
         interaction_target)
     interaction_short_names: List[str] = list()
     for interaction in interactions:
         try:
             interaction_short_names.append(
                 CommonInteractionUtils.get_interaction_short_name(
                     interaction))
         except Exception as ex:
             self.log.error(
                 'Problem while attempting to handle interaction {}'.format(
                     pformat(interaction)),
                 exception=ex)
             continue
     sorted_short_names = sorted(interaction_short_names, key=lambda x: x)
     self.log.debug(pformat(sorted_short_names))
     self.log.debug('Done Logging Available Interactions.'.format())
     self.log.disable()
     CommonBasicNotification(
         CommonStringId.S4CL_LOG_ALL_INTERACTIONS,
         CommonStringId.S4CL_DONE_LOGGING_ALL_INTERACTIONS,
         description_tokens=(CommonLogUtils.get_message_file_path(
             self.mod_identity), )).show()
     return True
 def _on_interaction_cancelled(self,
                               interaction: Interaction,
                               finishing_type: FinishingType,
                               cancel_reason_msg: str,
                               ignore_must_run: bool = False,
                               **kwargs) -> Union[bool, None]:
     if finishing_type is None:
         return None
     try:
         if not CommonEventRegistry.get().dispatch(
                 S4CLInteractionCancelledEvent(
                     interaction,
                     finishing_type,
                     cancel_reason_msg,
                     ignore_must_run=ignore_must_run,
                     **kwargs)):
             return False
     except Exception as ex:
         CommonExceptionHandler.log_exception(
             ModInfo.get_identity(),
             'Error occurred while running _on_interaction_cancelled for interaction {} with short name {} and display name {}'
             .format(
                 pformat(interaction),
                 CommonInteractionUtils.get_interaction_short_name(
                     interaction),
                 CommonInteractionUtils.get_interaction_display_name(
                     interaction)),
             exception=ex)
     return None
Exemple #5
0
def _common_broadcaster_apply(original, self: Broadcaster, *_, **__) -> None:
    try:
        return original(self, *_, **__)
    except Exception as ex:
        if self.interaction is not None:
            interaction = self.interaction
            # noinspection PyTypeChecker
            CommonExceptionHandler.log_exception(
                None,
                'Error occurred while running apply_broadcaster_effect for broadcaster {} for interaction {} with short name {} and display name {}'
                .format(
                    pformat(self), pformat(interaction),
                    CommonInteractionUtils.get_interaction_short_name(
                        interaction),
                    CommonInteractionUtils.get_interaction_display_name(
                        interaction)),
                exception=ex)
        elif self.broadcasting_object is not None:
            broadcasting_object = self.broadcasting_object
            # noinspection PyTypeChecker
            CommonExceptionHandler.log_exception(
                None,
                'Error occurred while running apply_broadcaster_effect for broadcaster {} from object {}'
                .format(pformat(self), pformat(broadcasting_object)),
                exception=ex)
        else:
            # noinspection PyTypeChecker
            CommonExceptionHandler.log_exception(
                None,
                'Error occurred while running apply_broadcaster_effect for broadcaster {}'
                .format(pformat(self)),
                exception=ex)
    return None
    def on_started(self, interaction_sim: Sim,
                   interaction_target: Sim) -> bool:
        target_sim_info = CommonSimUtils.get_sim_info(interaction_target)
        target_sim_name = CommonSimNameUtils.get_full_name(target_sim_info)
        from sims4communitylib.utils.sims.common_sim_interaction_utils import CommonSimInteractionUtils
        from sims4communitylib.utils.resources.common_interaction_utils import CommonInteractionUtils
        running_interaction_strings: List[str] = list()
        for interaction in CommonSimInteractionUtils.get_running_interactions_gen(
                target_sim_info):
            interaction_name = CommonInteractionUtils.get_interaction_short_name(
                interaction)
            interaction_id = CommonInteractionUtils.get_interaction_id(
                interaction)
            running_interaction_strings.append('{} ({})'.format(
                interaction_name, interaction_id))
        running_interaction_strings = sorted(running_interaction_strings,
                                             key=lambda x: x)
        running_interaction_names = ', '.join(running_interaction_strings)

        queued_interaction_strings: List[str] = list()
        for interaction in CommonSimInteractionUtils.get_queued_interactions_gen(
                target_sim_info):
            interaction_name = CommonInteractionUtils.get_interaction_short_name(
                interaction)
            interaction_id = CommonInteractionUtils.get_interaction_id(
                interaction)
            queued_interaction_strings.append('{} ({})'.format(
                interaction_name, interaction_id))
        queued_interaction_strings = sorted(queued_interaction_strings,
                                            key=lambda x: x)
        queued_interaction_names = ', '.join(queued_interaction_strings)
        text = ''
        text += 'Running Interactions:\n{}\n\n'.format(
            running_interaction_names)
        text += 'Queued Interactions:\n{}\n\n'.format(queued_interaction_names)
        CommonBasicNotification(
            CommonLocalizationUtils.create_localized_string(
                '{} Running and Queued Interactions ({})'.format(
                    target_sim_name,
                    CommonSimUtils.get_sim_id(target_sim_info))),
            CommonLocalizationUtils.create_localized_string(text)).show(
                icon=IconInfoData(obj_instance=interaction_target))
        return True
    def on_started(self, interaction_sim: Sim, interaction_target: Any) -> bool:
        self.log.enable()
        object_id = CommonObjectUtils.get_object_id(interaction_target) if interaction_target is not None else -1
        definition_id = -1
        if isinstance(interaction_target, Sim):
            object_id = CommonSimUtils.get_sim_id(interaction_target)
        elif isinstance(interaction_target, GameObject):
            definition = CommonObjectUtils.get_game_object_definition(interaction_target)
            if definition is not None:
                definition_id = definition.id
        self.log.debug('Interactions that can be performed on \'{}\' id:{} def_id:{}:'.format(interaction_target, object_id, definition_id))
        interactions = CommonObjectInteractionUtils.get_all_interactions_registered_to_object_gen(interaction_target)
        interaction_target: GameObject = interaction_target
        interaction_short_names: List[str] = list()
        for interaction in interactions:
            interaction: Interaction = interaction
            try:
                interaction_short_names.append('{} ({})'.format(CommonInteractionUtils.get_interaction_short_name(interaction), CommonInteractionUtils.get_interaction_id(interaction)))
            except Exception as ex:
                self.log.error('Problem while attempting to handle interaction {}'.format(pformat(interaction)), exception=ex)
                continue
        for component in interaction_target.components:
            if not hasattr(component, 'component_super_affordances_gen'):
                continue
            for affordance in component.component_super_affordances_gen():
                try:
                    interaction_short_names.append('{} ({})'.format(CommonInteractionUtils.get_interaction_short_name(affordance), CommonInteractionUtils.get_interaction_id(affordance)))
                except Exception as ex:
                    self.log.error('Problem while attempting to handle affordance {}'.format(pformat(affordance)), exception=ex)
                    continue

        sorted_short_names = sorted(interaction_short_names, key=lambda x: x)
        self.log.format(interactions=sorted_short_names)
        self.log.debug('Done Logging Available Interactions.')
        self.log.disable()
        CommonBasicNotification(
            CommonStringId.S4CL_LOG_ALL_INTERACTIONS,
            CommonStringId.S4CL_DONE_LOGGING_ALL_INTERACTIONS,
            description_tokens=(CommonLogUtils.get_message_file_path(self.mod_identity), )
        ).show()
        return True
 def should_allow_interaction(self, interaction: Interaction) -> bool:
     """ Block interactions in the queue. """
     interaction_id = CommonInteractionUtils.get_interaction_id(interaction)
     if interaction_id in self.get_quick_meal_interactions():
         self.log.debug('Interaction is quick meal!')
         return False
     interaction_name = CommonInteractionUtils.get_interaction_short_name(
         interaction)
     if interaction_name is None:
         return True
     if self._is_quick_meal(interaction_name):
         return False
     return True
def _common_on_super_interaction_cancelled(original, self, *_, **__) -> Any:
    try:
        CommonInteractionEventDispatcherService.get(
        )._on_super_interaction_cancelled(self, *_, **__)
        return original(self, *_, **__)
    except Exception as ex:
        CommonExceptionHandler.log_exception(
            ModInfo.get_identity(),
            'Error occurred while running _on_super_interaction_cancelled for interaction {} with short name {} and display name {}'
            .format(pformat(self),
                    CommonInteractionUtils.get_interaction_short_name(self),
                    CommonInteractionUtils.get_interaction_display_name(self)),
            exception=ex)
    return None
def _common_on_interaction_outcome(original, self, *_, **__) -> Any:
    try:
        CommonInteractionEventDispatcherService()._on_interaction_outcome(
            self, *_, **__)
        return original(self, *_, **__)
    except Exception as ex:
        CommonExceptionHandler.log_exception(
            ModInfo.get_identity(),
            'Error occurred while running _on_interaction_outcome for interaction {} with short name \'{}\' and display name {}. Args: {}, Kwargs: {}'
            .format(pformat(self),
                    CommonInteractionUtils.get_interaction_short_name(self),
                    CommonInteractionUtils.get_interaction_display_name(self),
                    _, __),
            exception=ex)
    return False
 def _on_interaction_outcome(self, interaction: Interaction,
                             outcome: InteractionOutcome,
                             result: OutcomeResult) -> None:
     if interaction.sim is None:
         return None
     try:
         CommonEventRegistry().dispatch(
             S4CLInteractionOutcomeEvent(interaction, outcome, result))
     except Exception as ex:
         self.log.error(
             'Error occurred while running _on_interaction_outcome for interaction {} with short name \'{}\' and display name {}. Outcome: {}, Result: {}'
             .format(
                 pformat(interaction),
                 CommonInteractionUtils.get_interaction_short_name(
                     interaction),
                 CommonInteractionUtils.get_interaction_display_name(
                     interaction), outcome, result),
             exception=ex)
     return None
 def _on_interaction_run(self, interaction_queue: InteractionQueue,
                         timeline: Timeline, interaction: Interaction, *_,
                         **__) -> Union[bool, None]:
     if interaction is None or interaction.sim is None:
         return None
     try:
         return CommonEventRegistry.get().dispatch(
             S4CLInteractionRunEvent(interaction, interaction_queue))
     except Exception as ex:
         CommonExceptionHandler.log_exception(
             ModInfo.get_identity(),
             'Error occurred while running _on_interaction_run for interaction {} with short name {} and display name {}'
             .format(
                 pformat(interaction),
                 CommonInteractionUtils.get_interaction_short_name(
                     interaction),
                 CommonInteractionUtils.get_interaction_display_name(
                     interaction)),
             exception=ex)
     return False
 def _on_interaction_outcome(self, interaction: Interaction,
                             outcome: InteractionOutcome,
                             result: OutcomeResult) -> Union[bool, Any]:
     if interaction.sim is None:
         return False
     try:
         return CommonEventRegistry.get().dispatch(
             S4CLInteractionOutcomeEvent(interaction, outcome, result))
     except Exception as ex:
         CommonExceptionHandler.log_exception(
             ModInfo.get_identity(),
             'Error occurred while running _on_interaction_outcome for interaction {} with short name {} and display name {}'
             .format(
                 pformat(interaction),
                 CommonInteractionUtils.get_interaction_short_name(
                     interaction),
                 CommonInteractionUtils.get_interaction_display_name(
                     interaction)),
             exception=ex)
     return False
 def _on_interaction_run(self, interaction_queue: InteractionQueue,
                         timeline: Timeline, interaction: Interaction,
                         run_result: bool, *_, **__) -> None:
     if interaction is None or interaction.sim is None:
         return None
     try:
         CommonEventRegistry().dispatch(
             S4CLInteractionRunEvent(interaction, interaction_queue,
                                     run_result))
     except Exception as ex:
         self.log.error(
             'Error occurred while running _on_interaction_run for interaction {} with short name \'{}\' and display name {}. Original Run Result: {}, Args: {}, Kwargs: {}'
             .format(
                 pformat(interaction),
                 CommonInteractionUtils.get_interaction_short_name(
                     interaction),
                 CommonInteractionUtils.get_interaction_display_name(
                     interaction), str(run_result), _, __),
             exception=ex)
     return None
 def _on_interaction_post_queued(self, interaction_queue: InteractionQueue,
                                 interaction: Interaction,
                                 queue_result: TestResult, *_,
                                 **__) -> None:
     if interaction is None or interaction.sim is None:
         return None
     try:
         CommonEventRegistry().dispatch(
             S4CLInteractionPostQueuedEvent(interaction, interaction_queue,
                                            queue_result))
     except Exception as ex:
         self.log.error(
             'Error occurred while running _on_interaction_post_queued for interaction {} with short name \'{}\' and display name {}. Queue Result: {}, Args: {}, Kwargs: {}'
             .format(
                 pformat(interaction),
                 CommonInteractionUtils.get_interaction_short_name(
                     interaction),
                 CommonInteractionUtils.get_interaction_display_name(
                     interaction), queue_result, _, __),
             exception=ex)
     return None
 def _on_interaction_pre_run(self, interaction_queue: InteractionQueue,
                             timeline: Timeline, interaction: Interaction,
                             *_, **__) -> Union[bool, None]:
     if interaction is None or interaction.sim is None:
         return None
     try:
         if not CommonEventRegistry().dispatch(
                 S4CLInteractionPreRunEvent(interaction, interaction_queue,
                                            timeline)):
             return False
     except Exception as ex:
         self.log.error(
             'Error occurred while running _on_interaction_pre_run for interaction {} with short name \'{}\' and display name {}. Args: {}, Kwargs: {}'
             .format(
                 pformat(interaction),
                 CommonInteractionUtils.get_interaction_short_name(
                     interaction),
                 CommonInteractionUtils.get_interaction_display_name(
                     interaction), _, __),
             exception=ex)
     return None
def _common_on_interaction_run(original, self, timeline: Timeline,
                               interaction: Interaction, *_, **__) -> bool:
    try:
        result = CommonInteractionEventDispatcherService(
        )._on_interaction_pre_run(self, timeline, interaction, *_, **__)
        if result is None or result is True:
            original_result = original(self, timeline, interaction, *_, **__)
            CommonInteractionEventDispatcherService()._on_interaction_run(
                self, timeline, interaction, original_result, *_, **__)
            return original_result
        return result
    except Exception as ex:
        CommonExceptionHandler.log_exception(
            ModInfo.get_identity(),
            'Error occurred while running _on_interaction_run for interaction {} with short name \'{}\' and display name {}. Args: {}, Kwargs: {}'
            .format(
                pformat(interaction),
                CommonInteractionUtils.get_interaction_short_name(interaction),
                CommonInteractionUtils.get_interaction_display_name(
                    interaction), _, __),
            exception=ex)
    return False
 def _on_interaction_queued(self, interaction_queue: InteractionQueue,
                            interaction: Interaction, *_,
                            **__) -> Union[TestResult, None]:
     if interaction is None or interaction.sim is None:
         return None
     try:
         if not CommonEventRegistry().dispatch(
                 S4CLInteractionQueuedEvent(interaction,
                                            interaction_queue)):
             return TestResult(
                 False, 'Interaction \'{}\' Failed to Queue'.format(
                     pformat(interaction)))
     except Exception as ex:
         self.log.error(
             'Error occurred while running _on_interaction_queued for interaction {} with short name \'{}\' and display name {}. Args: {}, Kwargs: {}'
             .format(
                 pformat(interaction),
                 CommonInteractionUtils.get_interaction_short_name(
                     interaction),
                 CommonInteractionUtils.get_interaction_display_name(
                     interaction), _, __),
             exception=ex)
     return None