def get_score(cls, resolver: Resolver) -> int:
        """get_score(resolver)

        Calculate the score.
        """
        try:
            yield_to_irq()
            cls.get_verbose_log().format_with_message('Retrieving score.',
                                                      class_name=cls.__name__)
            source_sim = resolver.get_participant(ParticipantType.Actor)
            if source_sim is None or not CommonTypeUtils.is_sim_or_sim_info(
                    source_sim):
                cls.get_verbose_log().format_with_message(
                    'Failed, the Source was not a Sim.', source=source_sim)
                return cls.get_default_score()
            source_sim_info = CommonSimUtils.get_sim_info(source_sim)
            interaction_instance = resolver.interaction or getattr(
                resolver, 'affordance', None)
            score = cls.calculate_score(resolver, source_sim_info,
                                        interaction_instance)
            cls.get_verbose_log().format_with_message(
                'Retrieved score for Sim.',
                source_sim=source_sim_info,
                score=score)
            return score
        except Exception as ex:
            cls.get_verbose_log().error(
                'Error occurred while retrieving score.', exception=ex)
        return cls.get_default_score()
 def is_available_for(self,
                      source_sim_info: SimInfo,
                      target: Any = None) -> bool:
     self.log.debug(
         'Checking if OC menu is available for \'{}\' and Target \'{}\'.'
         .format(CommonSimNameUtils.get_full_name(source_sim_info),
                 target))
     if target is None or not CommonTypeUtils.is_sim_or_sim_info(
             target):
         self.log.debug('Target is not a Sim.')
         return False
     if not OCSettingUtils.is_enabled_for_interactions(source_sim_info):
         log.debug(
             'Failed, Source Sim is not available for Outfit Customization.'
         )
         return False
     target_sim_info = CommonSimUtils.get_sim_info(target)
     if not OCSettingUtils.is_enabled_for_interactions(target_sim_info):
         self.log.debug(
             'Failed, Target Sim is not available for Outfit Customization.'
         )
         return False
     self.log.debug(
         'OC menu is available for Source Sim and Target Sim.')
     return True
 def on_test(cls, interaction_sim: Sim, interaction_target: Any,
             interaction_context: InteractionContext,
             **kwargs) -> TestResult:
     cls.get_log().format_with_message(
         'Running \'{}\' on_test.'.format(cls.__name__),
         interaction_sim=interaction_sim,
         interaction_target=interaction_target,
         interaction_context=interaction_context,
         kwargles=kwargs)
     if interaction_target is None or not CommonTypeUtils.is_sim_instance(
             interaction_target):
         cls.get_log().debug('Failed, Target is not a Sim.')
         return TestResult.NONE
     sim_info = CommonSimUtils.get_sim_info(interaction_sim)
     if not OCSettingUtils.is_enabled_for_interactions(sim_info):
         cls.get_log().debug(
             'Failed, Active Sim is not available for Outfit Customization.'
         )
         return TestResult.NONE
     target_sim_info = CommonSimUtils.get_sim_info(interaction_target)
     if not OCSettingUtils.is_enabled_for_interactions(target_sim_info):
         cls.get_log().debug(
             'Failed, Target Sim is not available for Outfit Customization.'
         )
         return TestResult.NONE
     cls.get_log().debug('Success.')
     return TestResult.TRUE
Beispiel #4
0
 def on_test(cls, interaction_sim: Sim, interaction_target: Any,
             interaction_context: InteractionContext,
             **kwargs) -> TestResult:
     if interaction_target is None or not CommonTypeUtils.is_sim_or_sim_info(
             interaction_target):
         cls.get_log().debug('Failed, Target is not a Sim.')
         return TestResult.NONE
     cls.get_log().debug('Success, can show active Buffs.')
     return TestResult.TRUE
Beispiel #5
0
 def on_test(cls, interaction_sim: Sim, interaction_target: Any, interaction_context: InteractionContext, **kwargs) -> TestResult:
     if interaction_target is None or CommonTypeUtils.is_sim_or_sim_info(interaction_target):
         cls.get_log().debug('Failed, Target is None.')
         return TestResult.NONE
     interaction_target: GameObject = interaction_target
     if CommonObjectStateUtils.is_dirty(interaction_target):
         cls.get_log().debug('Failed, the Object is already dirty.')
         return TestResult.NONE
     cls.get_log().debug('Success, can make object dirty.')
     return TestResult.TRUE
 def on_started(self, interaction_sim: Sim,
                interaction_target: Any) -> bool:
     self.log.debug('Running \'{}\' on_started.'.format(
         OpenCustomGenderSettingsInteraction.__name__))
     if not CommonTypeUtils.is_sim_instance(interaction_target):
         self.log.debug('Target is not a sim.')
         return False
     CommonTimeUtils.pause_the_game()
     target_sim_info = CommonSimUtils.get_sim_info(interaction_target)
     CustomGenderSettingsDialog(target_sim_info).open()
     return True
 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)
     if interaction_target is None or not CommonTypeUtils.is_sim_or_sim_info(
             interaction_target):
         self.log.debug('Failed, Target is not a sim.')
         return TestResult.NONE
     target_sim_info = CommonSimUtils.get_sim_info(interaction_target)
     OCCustomizeOutfitDialog(target_sim_info).open()
     return True
Beispiel #8
0
 def on_test(cls, interaction_sim: Sim, interaction_target: Any,
             interaction_context: InteractionContext,
             **kwargs) -> TestResult:
     if interaction_target is None or CommonTypeUtils.is_sim_or_sim_info(
             interaction_target):
         cls.get_log().debug('Failed, Target is None.')
         return TestResult.NONE
     interaction_target: GameObject = interaction_target
     if not CommonObjectStateUtils.is_broken(interaction_target):
         cls.get_log().debug('Failed, the Object is not broken.')
         return TestResult.NONE
     cls.get_log().debug('Success, can fix object.')
     return TestResult.TRUE
Beispiel #9
0
 def on_test(cls, interaction_sim: Sim, interaction_target: Any, interaction_context: InteractionContext, **kwargs) -> TestResult:
     cls.get_log().format_with_message(
         'Running \'{}\' on_test.'.format(cls.__name__),
         interaction_sim=interaction_sim,
         interaction_target=interaction_target,
         interaction_context=interaction_context,
         kwargles=kwargs
     )
     if interaction_target is None or not CommonTypeUtils.is_sim_or_sim_info(interaction_target):
         cls.get_log().debug('Failed, Target is not a Sim.')
         return TestResult.NONE
     cls.get_log().debug('Success, can show active Buffs.')
     return TestResult.TRUE
 def on_test(cls, interaction_sim: Sim, interaction_target: Any,
             interaction_context: InteractionContext,
             **kwargs) -> TestResult:
     if interaction_target is None or not CommonTypeUtils.is_sim_or_sim_info(
             interaction_target):
         cls.get_log().debug('Failed, Target was invalid.')
         return TestResult.NONE
     sim_info = CommonSimUtils.get_sim_info(interaction_target)
     active_sim_location = CommonSimLocationUtils.get_location(sim_info)
     if active_sim_location is None:
         cls.get_log().debug('Failed, No location for active Sim.')
         return TestResult.NONE
     cls.get_log().debug('Success, can teleport.')
     return TestResult.TRUE
Beispiel #11
0
 def is_available_for(self,
                      source_sim_info: SimInfo,
                      target: Any = None) -> bool:
     self.log.debug(
         'Checking if Change Motives dialog is available for \'{}\' and Target \'{}\'.'
         .format(CommonSimNameUtils.get_full_name(source_sim_info),
                 target))
     if target is None or not CommonTypeUtils.is_sim_or_sim_info(
             target):
         self.log.debug('Target is not a Sim.')
         return False
     self.log.debug(
         'Change Motives menu is available for Source Sim and Target Sim.'
     )
     return True
    def test_super_interaction(
        sim_info: SimInfo,
        super_interaction_id: int,
        target: Any=None,
        interaction_context: InteractionContext=None,
        **kwargs
    ) -> TestResult:
        """test_super_interaction(\
            sim_info,\
            super_interaction_id,\
            target=None,\
            interaction_context=None,\
            **kwargs\
        )

        Test to see if a Super Interaction can be pushed into the queue of a Sim.

        :param sim_info: An instance of a Sim.
        :type sim_info: SimInfo
        :param super_interaction_id: The decimal identifier of a super interaction.
        :type 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
        """
        sim = CommonSimUtils.get_sim_instance(sim_info)
        if sim is None:
            return TestResult.NONE

        if target is not None and CommonTypeUtils.is_sim_or_sim_info(target):
            target = CommonSimUtils.get_sim_instance(target)

        interaction_context = interaction_context or CommonSimInteractionUtils.create_interaction_context(sim_info)
        super_interaction_instance = CommonInteractionUtils._load_interaction_instance(super_interaction_id)
        if super_interaction_instance is None:
            return TestResult.NONE

        return sim.test_super_affordance(
            super_interaction_instance,
            target,
            interaction_context,
            picked_object=target,
            **kwargs
        )
Beispiel #13
0
 def _update_args(self, *args: Any) -> Tuple[Any]:
     if not args:
         return args
     from sims4communitylib.utils.common_type_utils import CommonTypeUtils
     from sims4communitylib.utils.sims.common_sim_name_utils import CommonSimNameUtils
     from sims4communitylib.utils.sims.common_sim_utils import CommonSimUtils
     new_args: List[Any] = list()
     for arg in args:
         if CommonTypeUtils.is_sim_or_sim_info(arg):
             sim_info = CommonSimUtils.get_sim_info(arg)
             if sim_info is None:
                 new_args.append(arg)
             else:
                 new_args.append('{} ({})'.format(CommonSimNameUtils.get_full_name(sim_info), str(CommonSimUtils.get_sim_id(sim_info))))
         else:
             new_args.append(arg)
     return tuple(new_args)
Beispiel #14
0
 def _update_kwargs(self, **kwargs: Any) -> Dict[str, Any]:
     if not kwargs:
         return kwargs
     new_kwargs: Dict[str, Any] = dict()
     from sims4communitylib.utils.common_type_utils import CommonTypeUtils
     from sims4communitylib.utils.sims.common_sim_name_utils import CommonSimNameUtils
     from sims4communitylib.utils.sims.common_sim_utils import CommonSimUtils
     for (key, val) in kwargs.items():
         if CommonTypeUtils.is_sim_or_sim_info(val):
             sim_info = CommonSimUtils.get_sim_info(val)
             if sim_info is None:
                 new_kwargs[key] = val
             else:
                 new_kwargs[key] = '{} ({})'.format(CommonSimNameUtils.get_full_name(sim_info), str(CommonSimUtils.get_sim_id(sim_info)))
         else:
             new_kwargs[key] = val
     return new_kwargs
Beispiel #15
0
    def queue_super_interaction(sim_info: SimInfo,
                                super_interaction_id: Union[
                                    int, CommonInteractionId],
                                target: Any = None,
                                interaction_context: InteractionContext = None,
                                **kwargs) -> EnqueueResult:
        """queue_super_interaction(\
            sim_info,\
            super_interaction_id,\
            target=None,\
            interaction_context=None,\
            **kwargs\
        )

        Push a Super Interaction into the queue of a Sim.

        :param sim_info: An instance of a Sim.
        :type sim_info: SimInfo
        :param super_interaction_id: The decimal identifier of a super interaction.
        :type super_interaction_id: Union[int, CommonInteractionId]
        :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 pushing the interaction to the queue of a Sim.
        :rtype: EnqueueResult
        """
        sim = CommonSimUtils.get_sim_instance(sim_info)
        if sim is None:
            return EnqueueResult.NONE

        if target is not None and CommonTypeUtils.is_sim_or_sim_info(target):
            target = CommonSimUtils.get_sim_instance(target)

        interaction_context = interaction_context or CommonSimInteractionUtils.create_interaction_context(
            sim_info)
        super_interaction_instance = CommonInteractionUtils.load_interaction_by_id(
            super_interaction_id)
        if super_interaction_instance is None:
            return EnqueueResult.NONE

        return sim.push_super_affordance(super_interaction_instance,
                                         target,
                                         interaction_context,
                                         picked_object=target,
                                         **kwargs)
Beispiel #16
0
def _hkh_check_if_nice_interaction(event_data: S4CLInteractionQueuedEvent):
    interaction_sim = event_data.interaction.sim
    interaction_target = event_data.interaction.target
    if not CommonTypeUtils.is_sim_or_sim_info(interaction_target):
        return True
    sim_info = CommonSimUtils.get_sim_info(interaction_sim)
    target_sim_info = CommonSimUtils.get_sim_info(interaction_target)
    if event_data.interaction.is_user_directed:
        return True
    friendship_track = CommonRelationshipUtils.get_relationship_level_of_sims(
        sim_info, target_sim_info, CommonRelationshipTrackId.FRIENDSHIP)
    if friendship_track > -50.0:
        return True
    interaction_game_tags = event_data.interaction.get_category_tags()
    if CommonGameTag.INTERACTION_FRIENDLY in interaction_game_tags or CommonGameTag.INTERACTION_FUNNY in interaction_game_tags or CommonGameTag.SOCIAL_FLIRTY in interaction_game_tags:
        return False
    return True
 def on_test(cls, interaction_sim: Sim, interaction_target: Any, interaction_context: InteractionContext, **kwargs) -> TestResult:
     cls.get_log().format_with_message('Running \'{}\' on_test.'.format(cls.__name__), interaction_sim=interaction_sim, interaction_target=interaction_target, interaction_context=interaction_context, kwargles=kwargs)
     if interaction_target is None or not CommonTypeUtils.is_sim_or_sim_info(interaction_target):
         cls.get_log().debug('Target is not a Sim.')
         return TestResult.NONE
     target_sim_info = CommonSimUtils.get_sim_info(interaction_target)
     target_sim_name = CommonSimNameUtils.get_full_name(target_sim_info)
     if not CommonSimPregnancyUtils.can_be_impregnated(target_sim_info):
         cls.get_log().debug('\'{}\' cannot be impregnated and thus cannot be pregnant.')
         return TestResult.NONE
     if not hasattr(target_sim_info, 'pregnancy_tracker'):
         cls.get_log().debug('Target does not have a pregnancy tracker.')
         return TestResult.NONE
     cls.get_log().debug('Checking if \'{}\' is pregnant.'.format(target_sim_name))
     if not CommonSimPregnancyUtils.is_pregnant(target_sim_info):
         cls.get_log().format_with_message('\'{}\' is not pregnant.'.format(target_sim_name))
         return cls.create_test_result(False, reason='\'{}\' is not pregnant.'.format(target_sim_name), tooltip=CommonLocalizationUtils.create_localized_tooltip(CommonStringId.S4CL_SIM_IS_NOT_PREGNANT, tooltip_tokens=(target_sim_info, )))
     cls.get_log().debug('Success.')
     return TestResult.TRUE
Beispiel #18
0
 def is_available_for(self,
                      source_sim_info: SimInfo,
                      target: Any = None) -> bool:
     self.log.format_with_message(
         'Checking if customize sliders are available for Source Sim and Target.',
         source_sim=source_sim_info,
         target=target)
     if target is None or not CommonTypeUtils.is_sim_or_sim_info(
             target):
         self.log.debug('Failed, Target is not a Sim.')
         return False
     target_sim_info = CommonSimUtils.get_sim_info(target)
     from cncustomsliderframework.sliders.query.slider_query_utils import CSFSliderQueryUtils
     if not CSFSliderQueryUtils().has_sliders_for_sim(target_sim_info):
         self.log.debug(
             'Failed, No CSF sliders available for the Target Sim.')
         return False
     self.log.debug(
         'CSF Menu is available for Source Sim and Target Sim.')
     return True
 def on_test(cls, interaction_sim: Sim, interaction_target: Any,
             interaction_context: InteractionContext,
             **kwargs) -> TestResult:
     if interaction_target is None or not CommonTypeUtils.is_sim_or_sim_info(
             interaction_target):
         cls.get_log().debug('Failed, Target is not a Sim.')
         return TestResult.NONE
     target_sim_info = CommonSimUtils.get_sim_info(interaction_target)
     if not S4CMSettingUtils.is_sim_allowed_to_perform_adult_sim_operations(
             target_sim_info):
         cls.get_log().format_with_message(
             'Failed, Target Sim is not enabled for interactions.',
             target=target_sim_info)
         return TestResult.NONE
     if CommonOutfitUtils.is_wearing_bathing_outfit(target_sim_info):
         cls.get_log().format_with_message(
             'Failed, Target Sim is already wearing their bathing outfit.',
             target=target_sim_info)
         return TestResult.NONE
     cls.get_log().format_with_message(
         'Success, can Change Outfit To Nude.', target=target_sim_info)
     return TestResult.TRUE
 def on_test(cls, interaction_sim: Sim, interaction_target: Any,
             interaction_context: InteractionContext,
             **kwargs) -> TestResult:
     cls.get_log().debug('Running \'{}\' on_test.'.format(
         OpenCustomGenderSettingsInteraction.__name__))
     if interaction_target is None or not CommonTypeUtils.is_sim_instance(
             interaction_target):
         cls.get_log().debug('Failed, Target is not a Sim.')
         return TestResult.NONE
     sim_info = CommonSimUtils.get_sim_info(interaction_sim)
     if not cls._get_setting_utils().is_enabled_for_interactions(sim_info):
         cls.get_log().debug(
             'Failed, Active Sim is not enabled for CGS interactions.')
         return TestResult.NONE
     target_sim_info = CommonSimUtils.get_sim_info(interaction_target)
     if not cls._get_setting_utils().is_enabled_for_interactions(
             target_sim_info):
         cls.get_log().debug(
             'Failed, Target Sim is not enabled for CGS interactions.')
         return TestResult.NONE
     cls.get_log().debug('Success, can open Custom Gender Settings.')
     return TestResult.TRUE
 def on_test(cls, interaction_sim: Sim, interaction_target: Any,
             interaction_context: InteractionContext,
             **kwargs) -> TestResult:
     if interaction_target is None or not CommonTypeUtils.is_sim_or_sim_info(
             interaction_target):
         cls.get_log().debug('Target is not a Sim.')
         return TestResult.NONE
     target_sim_info = CommonSimUtils.get_sim_info(interaction_target)
     if not CommonHouseholdUtils.is_part_of_active_household(
             target_sim_info):
         cls.get_log().format_with_message(
             'Failed, Target Sim is not a part of the Active Household.',
             target_sim=target_sim_info)
         return TestResult.NONE
     if CommonHouseholdUtils.get_number_of_sims_in_household_of_sim(
             CommonSimUtils.get_active_sim_info()) <= 1:
         cls.get_log().format_with_message(
             'Failed, Target Sim is the last Sim in their household. They cannot be removed!',
             target_sim=target_sim_info)
         return TestResult.NONE
     cls.get_log().debug(
         'Success, can remove Target Sim from the Active Household.')
     return TestResult.TRUE
 def should_add(self, script_object: ScriptObject, *args, **kwargs) -> bool:
     return CommonTypeUtils.is_sim_instance(script_object)
 def should_add(self, script_object: Sim, *_, **__) -> bool:
     return CommonTypeUtils.is_sim_or_sim_info(script_object)
 def should_add(self, script_object: ScriptObject, *args, **kwargs) -> bool:
     if not CommonTypeUtils.is_game_object(script_object):
         return False
     script_object: GameObject = script_object
     return CommonObjectStateUtils.can_become_dirty(script_object)
 def should_add(self, script_object: ScriptObject, *args, **kwargs) -> bool:
     return not CommonTypeUtils.is_sim_or_sim_info(script_object)
    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)