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 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 has_interactions_queued(sim_info: SimInfo, interaction_ids: Iterator[int]) -> bool: """has_interactions_queued(sim_info, interaction_ids) Determine if a Sim has any of the specified interactions in their interaction queue. :param sim_info: The Sim to check. :type sim_info: SimInfo :param interaction_ids: An iterable of identifiers of the interactions to check for. :type interaction_ids: int :return: True, if the Sim has any of the specified interactions queued. False, if not. :rtype: bool """ for interaction in CommonSimInteractionUtils.get_queued_interactions_gen(sim_info): interaction_id = CommonInteractionUtils.get_interaction_id(interaction) if interaction_id in interaction_ids: return True return False
def has_interactions_running(sim_info: SimInfo, interaction_ids: Iterator[int]) -> bool: """has_interactions_running(sim_info, interaction_ids) Determine if a Sim is running any of the specified interactions. :param sim_info: The Sim to check. :type sim_info: SimInfo :param interaction_ids: An iterable of identifiers of the interactions to check for. :type interaction_ids: Union[int, CommonInteractionId] :return: True, if the Sim has any of the specified interactions running. False, if not. :rtype: bool """ for interaction in CommonSimInteractionUtils.get_running_interactions_gen( sim_info): interaction_id = CommonInteractionUtils.get_interaction_id( interaction) if interaction_id in interaction_ids: return True return False
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