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