def test_interaction( sim_info: SimInfo, interaction_id: int, social_super_interaction_id: int=None, target: Any=None, interaction_context: InteractionContext=None, **kwargs ) -> TestResult: """test_interaction(\ sim_info,\ interaction_id,\ social_super_interaction_id=None,\ target=None,\ interaction_context,\ skip_if_running=False,\ **kwargs\ ) Test to see if an Interaction can be pushed into the queue of a Sim. :param sim_info: An instance of a Sim. :type sim_info: SimInfo :param interaction_id: The decimal identifier of an interaction. :type interaction_id: int :param social_super_interaction_id: The decimal identifier of a social super interaction to queue the interaction under. Default is None :type social_super_interaction_id: int, optional :param target: The target of the interaction. Default is None. :type target: Any, optional :param interaction_context: The context to queue the interaction with. See also :func:`~create_interaction_context`. Default is None. :type interaction_context: InteractionContext, optional :return: The result of testing a push of the interaction to the queue of a Sim. :rtype: TestResult """ sim = CommonSimUtils.get_sim_instance(sim_info) if sim is None or sim.si_state is None or sim.queue is None or sim.posture_state is None or sim.posture is None: return TestResult.NONE interaction_instance = CommonInteractionUtils._load_interaction_instance(interaction_id) if interaction_instance is None: return TestResult.NONE interaction_context = interaction_context or CommonSimInteractionUtils.create_interaction_context( sim_info, insert_strategy=QueueInsertStrategy.LAST ) if CommonInteractionUtils.is_super_interaction(interaction_instance): return CommonSimInteractionUtils.test_super_interaction( sim_info, interaction_id, target=target, interaction_context=interaction_context, **kwargs ) if CommonInteractionUtils.is_social_mixer_interaction(interaction_instance): return CommonSimInteractionUtils.test_social_mixer_interaction( sim_info, interaction_id, social_super_interaction_id, target=target, interaction_context=interaction_context, **kwargs ) return CommonSimInteractionUtils.test_mixer_interaction( sim_info, interaction_id, target=target, interaction_context=interaction_context )
def __init__(self, sim_info: SimInfo): super().__init__() self._sim_id = CommonSimUtils.get_sim_id(sim_info) self._sim_info = sim_info self._data = dict()
def queue_interaction( sim_info: SimInfo, interaction_id: int, social_super_interaction_id: int=None, target: Any=None, interaction_context: InteractionContext=None, skip_if_running: bool=False, **kwargs ) -> EnqueueResult: """queue_interaction(\ sim_info,\ interaction_id,\ social_super_interaction_id=None,\ target=None,\ interaction_context,\ skip_if_running=False,\ **kwargs\ ) Push an Interaction into the queue of a Sim. :param sim_info: An instance of a Sim. :type sim_info: SimInfo :param interaction_id: The decimal identifier of an interaction. :type interaction_id: int :param social_super_interaction_id: The decimal identifier of a social super interaction to queue the interaction under. Default is None :type social_super_interaction_id: int, optional :param target: The target of the interaction. Default is None. :type target: Any, optional :param interaction_context: The context to queue the interaction with. See also :func:`~create_interaction_context`. Default is None. :type interaction_context: InteractionContext, optional :param skip_if_running: If True, the interaction will not be queued, if it is already queued or running. If False, the interaction will be queued, even if it is already queued or running. :return: The result of pushing the interaction to the queue of a Sim. :rtype: EnqueueResult """ sim = CommonSimUtils.get_sim_instance(sim_info) if sim is None or sim.si_state is None or sim.queue is None or sim.posture_state is None or sim.posture is None: return EnqueueResult.NONE interaction_instance = CommonInteractionUtils._load_interaction_instance(interaction_id) if interaction_instance is None: return EnqueueResult.NONE if skip_if_running and CommonSimInteractionUtils.has_interaction_running_or_queued(sim_info, interaction_id): return EnqueueResult.NONE interaction_context = interaction_context or CommonSimInteractionUtils.create_interaction_context( sim_info, insert_strategy=QueueInsertStrategy.LAST ) if CommonInteractionUtils.is_super_interaction(interaction_instance): return CommonSimInteractionUtils.queue_super_interaction( sim_info, interaction_id, target=target, interaction_context=interaction_context, **kwargs ) if CommonInteractionUtils.is_social_mixer_interaction(interaction_instance): return CommonSimInteractionUtils.queue_social_mixer_interaction( sim_info, interaction_id, social_super_interaction_id, target=target, interaction_context=interaction_context, **kwargs ) return CommonSimInteractionUtils.queue_mixer_interaction( sim_info, interaction_id, target=target, interaction_context=interaction_context )
def _common_testing_show_choose_object_dialog(_connection: int=None): output = sims4.commands.CheatOutput(_connection) output('Showing test choose object dialog.') def _on_chosen(choice: str, outcome: CommonChoiceOutcome): output('Chose {} with result: {}.'.format(pformat(choice), pformat(outcome))) try: # LocalizedStrings within other LocalizedStrings title_tokens = (CommonLocalizationUtils.create_localized_string(CommonStringId.TESTING_SOME_TEXT_FOR_TESTING, text_color=CommonLocalizedStringColor.GREEN),) description_tokens = (CommonLocalizationUtils.create_localized_string(CommonStringId.TESTING_TEST_TEXT_WITH_SIM_FIRST_AND_LAST_NAME, tokens=(CommonSimUtils.get_active_sim_info(),), text_color=CommonLocalizedStringColor.BLUE),) from sims4communitylib.utils.common_icon_utils import CommonIconUtils options = [ ObjectPickerRow( option_id=1, name=CommonLocalizationUtils.create_localized_string(CommonStringId.TESTING_SOME_TEXT_FOR_TESTING), row_description=CommonLocalizationUtils.create_localized_string(CommonStringId.TESTING_TEST_BUTTON_ONE), row_tooltip=None, icon=CommonIconUtils.load_checked_square_icon(), tag='Value 1' ), ObjectPickerRow( option_id=2, name=CommonLocalizationUtils.create_localized_string(CommonStringId.TESTING_SOME_TEXT_FOR_TESTING), row_description=CommonLocalizationUtils.create_localized_string(CommonStringId.TESTING_TEST_BUTTON_TWO), row_tooltip=None, icon=CommonIconUtils.load_arrow_navigate_into_icon(), tag='Value 2' ), ObjectPickerRow( option_id=3, name=CommonLocalizationUtils.create_localized_string('Value 3'), row_description=CommonLocalizationUtils.create_localized_string(CommonStringId.TESTING_TEST_BUTTON_TWO), row_tooltip=None, icon=CommonIconUtils.load_arrow_navigate_into_icon(), tag='Value 3' ) ] dialog = CommonChooseObjectDialog( CommonStringId.TESTING_TEST_TEXT_WITH_STRING_TOKEN, CommonStringId.TESTING_TEST_TEXT_WITH_STRING_TOKEN, tuple(options), title_tokens=title_tokens, description_tokens=description_tokens, per_page=2 ) dialog.show(on_chosen=_on_chosen) except Exception as ex: CommonExceptionHandler.log_exception(ModInfo.get_identity(), 'Failed to show dialog', exception=ex) output('Failed to show dialog, please locate your exception log file.') output('Done showing.')
def on_started(self, interaction_sim: Sim, interaction_target: Any) -> bool: source_sim_info = CommonSimUtils.get_sim_info(interaction_sim) self._mod_settings_menu.open(source_sim_info, target=interaction_target) return True
def _common_testing_show_choose_objects_option_dialog(_connection: int = None): output = sims4.commands.CheatOutput(_connection) output('Showing test choose objects option dialog.') def _on_option_chosen(option_identifier: str, choice: str): output('Chose option {} with value: {}.'.format( pformat(option_identifier), pformat(choice))) def _on_submit(choices: Tuple[str]): output('Chose options {}.'.format(pformat(choices))) try: # LocalizedStrings within other LocalizedStrings title_tokens = (CommonLocalizationUtils.create_localized_string( CommonStringId.TESTING_SOME_TEXT_FOR_TESTING, text_color=CommonLocalizedStringColor.GREEN), ) description_tokens = (CommonLocalizationUtils.create_localized_string( CommonStringId.TESTING_TEST_TEXT_WITH_SIM_FIRST_AND_LAST_NAME, tokens=(CommonSimUtils.get_active_sim_info(), ), text_color=CommonLocalizedStringColor.BLUE), ) option_dialog = CommonChooseObjectsOptionDialog( CommonStringId.TESTING_TEST_TEXT_WITH_STRING_TOKEN, CommonStringId.TESTING_TEST_TEXT_WITH_STRING_TOKEN, title_tokens=title_tokens, description_tokens=description_tokens, per_page=2) from sims4communitylib.utils.common_icon_utils import CommonIconUtils option_dialog.add_option( CommonDialogObjectOption( 'Option 1', 'Value 1', CommonDialogOptionContext( CommonStringId.TESTING_SOME_TEXT_FOR_TESTING, CommonStringId.TESTING_TEST_BUTTON_ONE, icon=CommonIconUtils.load_checked_square_icon()), on_chosen=_on_option_chosen)) option_dialog.add_option( CommonDialogObjectOption( 'Option 2', 'Value 2', CommonDialogOptionContext( CommonStringId.TESTING_SOME_TEXT_FOR_TESTING, CommonStringId.TESTING_TEST_BUTTON_TWO, icon=CommonIconUtils.load_arrow_navigate_into_icon()), on_chosen=_on_option_chosen)) option_dialog.add_option( CommonDialogObjectOption( 'Option 3', 'Value 3', CommonDialogOptionContext( CommonLocalizationUtils.create_localized_string('Value 3'), CommonStringId.TESTING_TEST_BUTTON_TWO, icon=CommonIconUtils.load_arrow_navigate_into_icon()), on_chosen=_on_option_chosen)) option_dialog.show(on_submit=_on_submit, sim_info=CommonSimUtils.get_active_sim_info(), min_selectable=1, max_selectable=2) except Exception as ex: CommonExceptionHandler.log_exception(ModInfo.get_identity(), 'Failed to show dialog', exception=ex) output('Failed to show dialog, please locate your exception log file.') output('Done showing.')
def _nrd_testing_show_relationship_decay(_connection: int=None): output = CheatOutput(_connection) output('Showing Relationship Decay Values.') _NRDRelationshipUtils().show_relationships(CommonSimUtils.get_sim_info_for_all_sims_generator()) output('Done')
def _common_testing_show_multi_pane_choose_dialog(_connection: int = None): output = sims4.commands.CheatOutput(_connection) output('Showing test multi-pane choose dialog.') def _on_submit(choices_made: Dict[int, Any], outcome: CommonChoiceOutcome) -> None: output('On Submit choices_made: {} and outcome: {}'.format( pformat(choices_made), pformat(outcome))) def _on_sub_dialog_one_chosen(choice: Any, outcome: CommonChoiceOutcome) -> None: output('Sub Dialog one choice made: {} outcome: {}'.format( pformat(choice), pformat(outcome))) def _on_sub_dialog_two_chosen(choice: Any, outcome: CommonChoiceOutcome) -> None: output('Sub Dialog two choice made: {} outcome: {}'.format( pformat(choice), pformat(outcome))) sim_info = CommonSimUtils.get_active_sim_info() try: # LocalizedStrings within other LocalizedStrings title_tokens = (CommonLocalizationUtils.create_localized_string( CommonStringId.TESTING_SOME_TEXT_FOR_TESTING, text_color=CommonLocalizedStringColor.GREEN), ) description_tokens = (CommonLocalizationUtils.create_localized_string( CommonStringId.TESTING_TEST_TEXT_WITH_SIM_FIRST_AND_LAST_NAME, tokens=(CommonSimUtils.get_active_sim_info(), ), text_color=CommonLocalizedStringColor.BLUE), ) from sims4communitylib.utils.common_icon_utils import CommonIconUtils # Create the dialog. dialog = CommonMultiPaneChooseDialog( ModInfo.get_identity(), CommonStringId.TESTING_TEST_TEXT_WITH_STRING_TOKEN, CommonStringId.TESTING_TEST_TEXT_WITH_STRING_TOKEN, title_tokens=title_tokens, description_tokens=description_tokens) sub_dialog_one_options = [ ObjectPickerRow( option_id=1, name=CommonLocalizationUtils.create_localized_string( CommonStringId.TESTING_SOME_TEXT_FOR_TESTING), row_description=CommonLocalizationUtils. create_localized_string( CommonStringId.TESTING_TEST_BUTTON_ONE), row_tooltip=None, icon=CommonIconUtils.load_checked_square_icon(), tag='Value 1'), ObjectPickerRow( option_id=2, name=CommonLocalizationUtils.create_localized_string( CommonStringId.TESTING_SOME_TEXT_FOR_TESTING), row_description=CommonLocalizationUtils. create_localized_string( CommonStringId.TESTING_TEST_BUTTON_TWO), row_tooltip=None, icon=CommonIconUtils.load_arrow_navigate_into_icon(), tag='Value 2'), ObjectPickerRow( option_id=3, name=CommonLocalizationUtils.create_localized_string( 'Value 3'), row_description=CommonLocalizationUtils. create_localized_string( CommonStringId.TESTING_TEST_BUTTON_TWO), row_tooltip=None, icon=CommonIconUtils.load_arrow_navigate_into_icon(), tag='Value 3') ] # Add sub dialog one. sub_dialog_one = CommonChooseObjectDialog( CommonStringId.TESTING_TEST_TEXT_WITH_STRING_TOKEN, CommonStringId.TESTING_TEST_TEXT_WITH_STRING_TOKEN, tuple(sub_dialog_one_options), title_tokens=title_tokens, description_tokens=description_tokens) dialog.add_sub_dialog(sub_dialog_one, on_chosen=_on_sub_dialog_one_chosen, sim_info=sim_info) # Add sub dialog two. sub_dialog_two_options = [ ObjectPickerRow( option_id=4, name=CommonLocalizationUtils.create_localized_string( 'Value 4'), row_description=CommonLocalizationUtils. create_localized_string( CommonStringId.TESTING_TEST_BUTTON_ONE), row_tooltip=None, icon=CommonIconUtils.load_checked_square_icon(), tag='Value 4'), ObjectPickerRow( option_id=5, name=CommonLocalizationUtils.create_localized_string( 'Value 5'), row_description=CommonLocalizationUtils. create_localized_string( CommonStringId.TESTING_TEST_BUTTON_TWO), row_tooltip=None, icon=CommonIconUtils.load_arrow_navigate_into_icon(), tag='Value 5'), ObjectPickerRow( option_id=6, name=CommonLocalizationUtils.create_localized_string( 'Value 6'), row_description=CommonLocalizationUtils. create_localized_string( CommonStringId.TESTING_TEST_BUTTON_TWO), row_tooltip=None, icon=CommonIconUtils.load_arrow_navigate_into_icon(), tag='Value 6') ] sub_dialog_two = CommonChooseObjectDialog( CommonStringId.TESTING_TEST_TEXT_WITH_STRING_TOKEN, CommonStringId.TESTING_TEST_TEXT_WITH_STRING_TOKEN, tuple(sub_dialog_two_options), title_tokens=title_tokens, description_tokens=description_tokens) dialog.add_sub_dialog(sub_dialog_two, on_chosen=_on_sub_dialog_two_chosen, include_pagination=True) # Show the dialog. dialog.show(on_submit=_on_submit) except Exception as ex: CommonExceptionHandler.log_exception(ModInfo.get_identity(), 'Failed to show dialog', exception=ex) output('Failed to show dialog, please locate your exception log file.') output('Done showing.')
def _on_sim_spawned(self, sim_info: SimInfo, *_, **__) -> bool: from sims4communitylib.utils.sims.common_sim_utils import CommonSimUtils return CommonEventRegistry.get().dispatch( S4CLSimSpawnedEvent(CommonSimUtils.get_sim_info(sim_info)))
def _on_sim_buff_removed(self, buff: Buff, sim_id: int) -> None: sim_info = CommonSimUtils.get_sim_info(sim_id) if sim_info is None: return CommonEventRegistry.get().dispatch( S4CLSimBuffRemovedEvent(sim_info, buff))
def soft_reset(sim_info: SimInfo, reset_reason: ResetReason = ResetReason.RESET_EXPECTED, hard_reset_on_exception: bool = False, source: Any = None, cause: Any = 'S4CL Soft Reset') -> bool: """soft_reset(sim_info, reset_reason=ResetReason.RESET_EXPECTED, hard_reset_on_exception=False, source=None, cause=None) Perform a soft reset on a Sim. :param sim_info: An instance of an Sim. :type sim_info: SimInfo :param reset_reason: The reason for the reset. Default is ResetReason.RESET_EXPECTED. :type reset_reason: ResetReason, optional :param hard_reset_on_exception: If set to True, a hard reset of the Object will be attempted upon an error occurring. If set to False, nothing will occur if the reset failed. Default is False. :type hard_reset_on_exception: bool, optional :param source: The source of the reset. Default is the GameObject. :type source: Any, optional :param cause: The cause of the reset. Default is 'S4CL Soft Reset'. :type cause: Any, optional :return: True, if the reset was successful. False, if not. :rtype: bool """ sim = CommonSimUtils.get_sim_instance(sim_info) if sim is None: return True # noinspection PyBroadException try: # noinspection PyArgumentList if sim._should_be_swimming() or _buildbuy.is_location_pool( services.current_zone_id(), sim.position, sim.location.level): posture_type = posture_graph.SIM_SWIM_POSTURE_TYPE else: posture_type = posture_graph.SIM_DEFAULT_POSTURE_TYPE if sim.queue is not None: for interaction in sim.queue: interaction.cancel(FinishingType.KILLED, 'S4CL soft_reset sim.queue') sim.queue.on_reset() sim.queue.unlock() if sim.si_state is not None: for interaction in sim.si_state: interaction.cancel(FinishingType.KILLED, 'S4CL soft_reset sim.si_state') # noinspection PyBroadException try: sim.si_state.on_reset() except: sim._si_state = SIState(sim) sim.si_state.on_reset() else: sim._si_state = SIState(sim) sim.si_state.on_reset() if sim.ui_manager is not None: sim.ui_manager.remove_all_interactions() sim.socials_locked = False sim.last_affordance = None sim.two_person_social_transforms.clear() sim.on_reset_send_op(reset_reason) # noinspection PyPropertyAccess if sim.posture_state is not None: # noinspection PyPropertyAccess sim.posture_state.on_reset(reset_reason) sim._stop_animation_interaction() sim.asm_auto_exit.clear() sim._start_animation_interaction() # noinspection PyBroadException try: sim.posture_state = PostureState( sim, None, get_origin_spec(posture_type), {PostureSpecVariable.HAND: (Hand.LEFT, )}) except: sim.posture_state = PostureState( sim, None, get_origin_spec(posture_graph.SIM_DEFAULT_POSTURE_TYPE), {PostureSpecVariable.HAND: (Hand.LEFT, )}) sim._posture_target_refs.clear() sim.run_full_autonomy_next_ping() return True except: if hard_reset_on_exception: return CommonSimSpawnUtils.hard_reset(sim_info, reset_reason, source=source, cause=cause) return False
def _on_sim_spawned(self, sim_info: SimInfo, *_, **__): from sims4communitylib.events.zone_spin.common_zone_spin_event_dispatcher import CommonZoneSpinEventDispatcher if CommonZoneSpinEventDispatcher.get().game_loading: return False from sims4communitylib.utils.sims.common_sim_utils import CommonSimUtils return CommonEventRegistry.get().dispatch(S4CLSimSpawnedEvent(CommonSimUtils.get_sim_info(sim_info)))
def _common_testing_show_multi_pane_choose_option_dialog( _connection: int = None): output = sims4.commands.CheatOutput(_connection) output('Showing test multi pane choose option dialog.') def _on_option_chosen_in_dialog_one(option_identifier: str, choice: str): output('Chose option in dialog one {} with value: {}.'.format( pformat(option_identifier), pformat(choice))) def _on_option_chosen_in_dialog_two(option_identifier: str, choice: str): output('Chose option in dialog two {} with value: {}.'.format( pformat(option_identifier), pformat(choice))) def _on_submit(chosen_options: Dict[int, Any]): output('Chosen options from all dialogs {}.'.format( pformat(chosen_options))) try: # LocalizedStrings within other LocalizedStrings title_tokens = (CommonLocalizationUtils.create_localized_string( CommonStringId.TESTING_SOME_TEXT_FOR_TESTING, text_color=CommonLocalizedStringColor.GREEN), ) description_tokens = (CommonLocalizationUtils.create_localized_string( CommonStringId.TESTING_TEST_TEXT_WITH_SIM_FIRST_AND_LAST_NAME, tokens=(CommonSimUtils.get_active_sim_info(), ), text_color=CommonLocalizedStringColor.BLUE), ) sub_dialog_one = CommonChooseObjectOptionDialog( CommonStringId.TESTING_TEST_TEXT_WITH_STRING_TOKEN, CommonStringId.TESTING_TEST_TEXT_WITH_STRING_TOKEN, title_tokens=title_tokens, description_tokens=description_tokens, per_page=2) sub_dialog_one.add_option( CommonDialogObjectOption( 'Option 1', 'Value 1', CommonDialogOptionContext( CommonStringId.TESTING_SOME_TEXT_FOR_TESTING, CommonStringId.TESTING_TEST_BUTTON_ONE, icon=CommonIconUtils.load_checked_square_icon()), on_chosen=_on_option_chosen_in_dialog_one)) sub_dialog_one.add_option( CommonDialogObjectOption( 'Option 2', 'Value 2', CommonDialogOptionContext( CommonStringId.TESTING_SOME_TEXT_FOR_TESTING, CommonStringId.TESTING_TEST_BUTTON_TWO, icon=CommonIconUtils.load_arrow_navigate_into_icon()), on_chosen=_on_option_chosen_in_dialog_one)) sub_dialog_one.add_option( CommonDialogObjectOption( 'Option 3', 'Value 3', CommonDialogOptionContext( CommonLocalizationUtils.create_localized_string('Value 3'), CommonStringId.TESTING_TEST_BUTTON_TWO, icon=CommonIconUtils.load_arrow_navigate_into_icon()), on_chosen=_on_option_chosen_in_dialog_one)) sub_dialog_two = CommonChooseObjectOptionDialog( CommonStringId.TESTING_TEST_TEXT_WITH_STRING_TOKEN, CommonStringId.TESTING_TEST_TEXT_WITH_STRING_TOKEN, title_tokens=title_tokens, description_tokens=description_tokens, per_page=2) sub_dialog_two.add_option( CommonDialogObjectOption( 'Option 4', 'Value 4', CommonDialogOptionContext( CommonStringId.TESTING_SOME_TEXT_FOR_TESTING, CommonStringId.TESTING_TEST_BUTTON_ONE, icon=CommonIconUtils.load_checked_square_icon()), on_chosen=_on_option_chosen_in_dialog_two)) sub_dialog_two.add_option( CommonDialogObjectOption( 'Option 5', 'Value 5', CommonDialogOptionContext( CommonStringId.TESTING_SOME_TEXT_FOR_TESTING, CommonStringId.TESTING_TEST_BUTTON_TWO, icon=CommonIconUtils.load_arrow_navigate_into_icon()), on_chosen=_on_option_chosen_in_dialog_two)) sub_dialog_two.add_option( CommonDialogObjectOption( 'Option 6', 'Value 6', CommonDialogOptionContext( CommonLocalizationUtils.create_localized_string('Value 3'), CommonStringId.TESTING_TEST_BUTTON_TWO, icon=CommonIconUtils.load_arrow_navigate_into_icon()), on_chosen=_on_option_chosen_in_dialog_two)) option_dialog = CommonMultiPaneChooseOptionDialog( ModInfo.get_identity(), CommonStringId.TESTING_TEST_TEXT_WITH_STRING_TOKEN, CommonStringId.TESTING_TEST_TEXT_WITH_STRING_TOKEN, title_tokens=title_tokens, description_tokens=description_tokens) option_dialog.add_sub_dialog(sub_dialog_one) option_dialog.add_sub_dialog(sub_dialog_two) option_dialog.show(on_submit=_on_submit, sim_info=CommonSimUtils.get_active_sim_info()) except Exception as ex: CommonExceptionHandler.log_exception(ModInfo.get_identity(), 'Failed to show dialog', exception=ex) output('Failed to show dialog, please locate your exception log file.') output('Done showing.')
def _common_testing_show_ok_cancel_dialog(_connection: int=None): output = sims4.commands.CheatOutput(_connection) output('Showing test ok cancel dialog.') def _ok_chosen(_: UiDialogOkCancel): output('Ok option chosen.') def _cancel_chosen(_: UiDialogOkCancel): output('Cancel option chosen.') try: # LocalizedStrings within other LocalizedStrings title_tokens = (CommonLocalizationUtils.create_localized_string(CommonStringId.TESTING_SOME_TEXT_FOR_TESTING, text_color=CommonLocalizedStringColor.GREEN),) description_tokens = (CommonLocalizationUtils.create_localized_string(CommonStringId.TESTING_TEST_TEXT_WITH_SIM_FIRST_AND_LAST_NAME, tokens=(CommonSimUtils.get_active_sim_info(),), text_color=CommonLocalizedStringColor.BLUE),) dialog = CommonOkCancelDialog( CommonStringId.TESTING_TEST_TEXT_WITH_STRING_TOKEN, CommonStringId.TESTING_TEST_TEXT_WITH_STRING_TOKEN, title_tokens=title_tokens, description_tokens=description_tokens, ok_text_identifier=CommonLocalizationUtils.create_localized_string(CommonStringId.TESTING_TEST_BUTTON_ONE, text_color=CommonLocalizedStringColor.RED), cancel_text_identifier=CommonStringId.TESTING_TEST_BUTTON_TWO ) dialog.show(on_ok_selected=_ok_chosen, on_cancel_selected=_cancel_chosen) except Exception as ex: CommonExceptionHandler.log_exception(ModInfo.get_identity().name, 'Failed to show dialog', exception=ex) output('Failed to show ok cancel dialog, please locate your exception log file.') output('Done showing.')
def test_social_mixer_interaction( sim_info: SimInfo, social_mixer_interaction_id: int, social_super_interaction_id: int, target: SimInfo=None, interaction_context: InteractionContext=None, **kwargs ) -> TestResult: """test_social_mixer_interaction(\ sim_info,\ social_mixer_interaction_id,\ social_super_interaction_id,\ target=None,\ interaction_context=None,\ **kwargs\ ) Test to see if a Social Mixer Interaction can be pushed into the queue of a Sim. :param sim_info: An instance of a Sim. :type sim_info: SimInfo :param social_mixer_interaction_id: The decimal identifier of a social mixer interaction. :type social_mixer_interaction_id: int :param social_super_interaction_id: The decimal identifier of a social super interaction to queue the social mixer interaction under. :type social_super_interaction_id: int :param target: The target of the interaction. Default is None. :type target: Any, optional :param interaction_context: The context to queue the interaction with. See also :func:`~create_interaction_context`. Default is None. :type interaction_context: InteractionContext, optional :return: The result of testing a push of the interaction to the queue of a Sim. :rtype: TestResult """ if social_super_interaction_id is not None and social_mixer_interaction_id is None: return CommonSimInteractionUtils.test_super_interaction(social_super_interaction_id, target=target, interaction_context=interaction_context) sim = CommonSimUtils.get_sim_instance(sim_info) # noinspection PyTypeChecker super_affordance_instance = CommonInteractionUtils._load_interaction_instance(social_super_interaction_id) if super_affordance_instance is None: return TestResult.NONE mixer_affordance_instance = CommonInteractionUtils._load_interaction_instance(social_mixer_interaction_id) if mixer_affordance_instance is None: return TestResult.NONE def _get_existing_social_super_interaction(si_iter) -> Interaction: for si in si_iter: if si.super_affordance != super_affordance_instance: continue if si.social_group is None: continue target_sim = CommonSimUtils.get_sim_instance(target) if target_sim is not None and target_sim not in si.social_group: continue return si.super_interaction interaction_context = interaction_context or CommonSimInteractionUtils.create_interaction_context(sim_info) super_interaction = _get_existing_social_super_interaction(sim.si_state) or _get_existing_social_super_interaction(sim.queue) if super_interaction is None: si_result = sim.test_super_affordance( super_affordance_instance, target, interaction_context, picked_object=target, **kwargs ) if not si_result or not si_result.result: return TestResult.NONE super_interaction = si_result.interaction pick = super_interaction.context.pick preferred_objects = super_interaction.context.preferred_objects context = super_interaction.context.clone_for_continuation( super_interaction, insert_strategy=interaction_context.insert_strategy, source_interaction_id=super_interaction.id, source_interaction_sim_id=CommonSimUtils.get_sim_id(sim_info), pick=pick, preferred_objects=preferred_objects, must_run_next=interaction_context.must_run_next ) aop = AffordanceObjectPair( mixer_affordance_instance, target, super_affordance_instance, super_interaction, picked_object=target, push_super_on_prepare=True ) return aop.test(context)
def _on_sim_change_age(self, sim_info: SimInfo, new_age: Age, current_age: Age) -> bool: from sims4communitylib.utils.sims.common_sim_utils import CommonSimUtils return CommonEventRegistry.get().dispatch( S4CLSimChangedAgeEvent(CommonSimUtils.get_sim_info(sim_info), current_age, new_age))
def test_mixer_interaction( sim_info: SimInfo, mixer_interaction_id: int, target: Any=None, interaction_context: InteractionContext=None, **kwargs ) -> TestResult: """test_mixer_interaction(\ sim_info,\ mixer_interaction_id,\ target=None,\ interaction_context=None,\ **kwargs\ ) Test to see if a Mixer Interaction can be pushed into the Queue of a Sim. :param sim_info: An instance of a Sim. :type sim_info: SimInfo :param mixer_interaction_id: The decimal identifier of a mixer interaction. :type mixer_interaction_id: int :param target: The target of the interaction. Default is None. :type target: Any, optional :param interaction_context: The context to queue the interaction with. See also :func:`~create_interaction_context`. Default is None. :type interaction_context: InteractionContext, optional :return: The result of testing a push of the interaction to the queue of a Sim. :rtype: TestResult """ from autonomy.content_sets import get_valid_aops_gen sim = CommonSimUtils.get_sim_instance(sim_info) if sim is None: return TestResult.NONE if sim.posture is None: return TestResult.NONE if target is not None and CommonTypeUtils.is_sim_or_sim_info(target): target = CommonSimUtils.get_sim_instance(target) mixer_interaction_instance = CommonInteractionUtils._load_interaction_instance(mixer_interaction_id) if mixer_interaction_instance is None: return TestResult.NONE source_interaction = sim.posture.source_interaction if source_interaction is None: return TestResult.NONE if hasattr(mixer_interaction_instance, 'lock_out_time') and mixer_interaction_instance.lock_out_time: sim_specific_lockout = mixer_interaction_instance.lock_out_time.target_based_lock_out else: sim_specific_lockout = False if sim_specific_lockout and sim.is_sub_action_locked_out(mixer_interaction_instance): return TestResult.NONE super_interaction_instance = source_interaction.super_affordance interaction_context = interaction_context or CommonSimInteractionUtils.create_interaction_context(sim_info) for (aop, test_result) in get_valid_aops_gen( target, mixer_interaction_instance, super_interaction_instance, source_interaction, interaction_context, False, push_super_on_prepare=False ): test_result: TestResult = test_result if test_result is None or test_result.result: continue interaction_constraint = aop.constraint_intersection(sim=sim, posture_state=None) # noinspection PyPropertyAccess posture_constraint = sim.posture_state.posture_constraint_strict constraint_intersection = interaction_constraint.intersect(posture_constraint) if not constraint_intersection.valid: continue return aop.test(interaction_context, **kwargs)
def _common_testing_show_input_integer_dialog(_connection: int=None): output = sims4.commands.CheatOutput(_connection) output('Showing test input integer dialog.') def _on_chosen(choice: int, outcome: CommonChoiceOutcome): output('Chose {} with result: {}.'.format(pformat(choice), pformat(outcome))) try: # LocalizedStrings within other LocalizedStrings title_tokens = (CommonLocalizationUtils.create_localized_string(CommonStringId.TESTING_SOME_TEXT_FOR_TESTING, text_color=CommonLocalizedStringColor.GREEN),) description_tokens = (CommonLocalizationUtils.create_localized_string(CommonStringId.TESTING_TEST_TEXT_WITH_SIM_FIRST_AND_LAST_NAME, tokens=(CommonSimUtils.get_active_sim_info(),), text_color=CommonLocalizedStringColor.BLUE),) from sims4communitylib.utils.common_icon_utils import CommonIconUtils dialog = CommonInputIntegerDialog( CommonStringId.TESTING_TEST_TEXT_WITH_STRING_TOKEN, CommonStringId.TESTING_TEST_TEXT_WITH_STRING_TOKEN, 2, title_tokens=title_tokens, description_tokens=description_tokens ) dialog.show(on_submit=_on_chosen) except Exception as ex: CommonExceptionHandler.log_exception(ModInfo.get_identity(), 'Failed to show dialog', exception=ex) output('Failed to show dialog, please locate your exception log file.') output('Done showing.')
def run( self, sim_info: SimInfo, on_completed: Callable[[bool], None] = CommonFunctionUtils.noop) -> bool: def _reopen() -> None: self.run(sim_info, on_completed=on_completed) def _on_close() -> None: on_completed(False) option_dialog = CommonChooseObjectOptionDialog( S4CMSimModifySkillsStringId.SET_SKILL_LEVELS, 0, on_close=_on_close, mod_identity=self.mod_identity, per_page=20000) def _on_input_setting_changed(_skill: Skill, new_skill_level: int, outcome: CommonChoiceOutcome): if new_skill_level is None or CommonChoiceOutcome.is_error_or_cancel( outcome): _reopen() return self.log.format_with_message('Setting skill level for Sim.', _skill=_skill, new_skill_level=new_skill_level) CommonSimSkillUtils.set_current_skill_level( sim_info, _skill, new_skill_level) if new_skill_level == 0: CommonSimSkillUtils.remove_skill(sim_info, _skill) _reopen() skill_manager = CommonResourceUtils.get_instance_manager( Types.STATISTIC) sim = CommonSimUtils.get_sim_instance(sim_info) for skill in skill_manager.get_ordered_types(only_subclasses_of=Skill): skill: Skill = skill skill_id = CommonSkillUtils.get_skill_id(skill) if skill_id is None: self.log.format_with_message('Missing skill id for Skill.', skill=skill) continue try: self.verbose_log.format_with_message( 'Attempting to display skill', skill=skill, skill_id=skill_id, sim=sim_info) if not skill.can_add(sim): self.verbose_log.format_with_message( 'Failed, Skill is not allowed for Sim.', skill=skill, skill_id=skill_id, sim=sim_info) continue if not CommonSimSkillUtils.has_skill(sim_info, skill_id): current_skill_level = 0 else: current_skill_level = int( CommonSimSkillUtils.get_current_skill_level( sim_info, skill_id, use_effective_skill_level=False)) stat_name = getattr(skill, 'stat_name', None) # noinspection PyUnresolvedReferences if stat_name and skill.stat_name.hash is not 0: # noinspection PyUnresolvedReferences display_name = skill.stat_name else: skill_name = skill.__name__ or 'Unknown Skill Name' skill_name = skill_name[0].upper() + skill_name[1:] display_name = LocalizationHelperTuning.get_raw_text( skill_name) # noinspection PyUnresolvedReferences if skill.hidden: display_name = CommonLocalizationUtils.create_localized_string( S4CMSimControlMenuStringId.STRING_SPACE_PAREN_STRING, tokens=(display_name, S4CMSimControlMenuStringId.HIDDEN)) display_name = CommonLocalizationUtils.create_localized_string( S4CMSimControlMenuStringId.STRING_COLON_SPACE_STRING, tokens=(display_name, str(current_skill_level))) # noinspection PyUnresolvedReferences description = CommonLocalizationUtils.create_localized_string( skill.skill_description, tokens=(sim_info, )) # noinspection PyUnresolvedReferences icon = skill.icon or CommonIconUtils.load_question_mark_icon() # MISSING ICON Identifier _MISSING_IMAGE_ICON_ID = 3526464109639239417 if icon.instance == 0 or icon.instance == _MISSING_IMAGE_ICON_ID: icon = CommonIconUtils.load_question_mark_icon() option_dialog.add_option( CommonDialogInputIntegerOption( self.mod_identity, skill, current_skill_level, CommonDialogOptionContext( display_name, description, icon=icon, is_enabled=self._is_skill_allowed_for_modification( sim_info, skill)), dialog_description_identifier=S4CMSimModifySkillsStringId .ENTER_A_VALE_BETWEEN_MIN_AND_MAX_FOR_SKILL, dialog_description_tokens=(str(0), str(int(skill.max_level)), str(current_skill_level)), min_value=0, max_value=int(skill.max_level), on_chosen=_on_input_setting_changed)) except Exception as ex: self.log.format_error_with_message('Failed to display skill.', skill=skill, skill_name=skill.__name__, skill_id=skill_id, exception=ex) if not option_dialog.has_options(): self.log.format_with_message('No skills available for the Sim!') on_completed(False) return False option_dialog.show(sim_info=sim_info, sort_options=True) return True
def _create_dialog(self) -> Union[UiDialogOkCancel, None]: return UiDialogOkCancel.TunableFactory().default(CommonSimUtils.get_active_sim_info(), text=lambda *_, **__: self.description, title=lambda *_, **__: self.title, text_ok=lambda *_, **__: self.ok_text, text_cancel=lambda *_, **__: self.cancel_text)