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