def can_impregnate(sim_info: SimInfo) -> bool:
        """can_impregnate(sim_info)

        Determine if a Sim can impregnate other sims.

        :param sim_info: The Sim being checked.
        :type sim_info: SimInfo
        :return: True, if they can. False, if they cannot.
        :rtype: bool
        """
        from sims4communitylib.utils.sims.common_trait_utils import CommonTraitUtils
        from sims4communitylib.enums.traits_enum import CommonTraitId
        if CommonSpeciesUtils.is_human(sim_info):
            if CommonTraitUtils.has_trait(
                    sim_info,
                    CommonTraitId.GENDER_OPTIONS_PREGNANCY_CAN_NOT_IMPREGNATE):
                return False
            return CommonTraitUtils.has_trait(
                sim_info,
                CommonTraitId.GENDER_OPTIONS_PREGNANCY_CAN_IMPREGNATE)
        elif CommonSpeciesUtils.is_pet(sim_info):
            if CommonTraitUtils.has_trait(
                    sim_info,
                    CommonTraitId.PREGNANCY_OPTIONS_PET_CAN_NOT_REPRODUCE):
                return False
            return CommonTraitUtils.has_trait(
                sim_info, CommonTraitId.PREGNANCY_OPTIONS_PET_CAN_REPRODUCE)
        return False
 def _has_occult_traits(sim_info: SimInfo,
                        trait_ids: Iterator[int]) -> bool:
     if sim_info is None:
         return False
     equipped_traits = CommonTraitUtils.get_equipped_traits(sim_info)
     for equipped_trait in equipped_traits:
         trait_id = CommonTraitUtils.get_trait_id(equipped_trait)
         if trait_id in trait_ids:
             return True
     return False
    def update_body_frame(sim_info: SimInfo, masculine: bool) -> bool:
        """update_body_frame(sim_info, masculine)

        Update the Body Frame of a Sim.

        .. note:: Will only update Human Sims.

        :param sim_info: An instance of a Sim.
        :type sim_info: SimInfo
        :param masculine: If True, the Sim will get a Masculine frame.\
        If False, the Sim will get a Feminine frame.
        :type masculine: bool
        :return: True, if successful. False, if not.
        :rtype: bool
        """
        if sim_info is None:
            return False
        if not CommonSpeciesUtils.is_human(sim_info):
            return False
        if masculine:
            CommonTraitUtils.remove_trait(
                sim_info, CommonTraitId.GENDER_OPTIONS_FRAME_FEMININE)
            CommonTraitUtils.add_trait(
                sim_info, CommonTraitId.GENDER_OPTIONS_FRAME_MASCULINE)
        else:
            CommonTraitUtils.remove_trait(
                sim_info, CommonTraitId.GENDER_OPTIONS_FRAME_MASCULINE)
            CommonTraitUtils.add_trait(
                sim_info, CommonTraitId.GENDER_OPTIONS_FRAME_FEMININE)
        from sims4communitylib.events.sim.common_sim_event_dispatcher import CommonSimEventDispatcherService
        CommonSimEventDispatcherService(
        )._on_sim_change_gender_options_body_frame(sim_info)
        return True
    def update_clothing_preference(sim_info: SimInfo,
                                   prefer_menswear: bool) -> bool:
        """update_clothing_preference(sim_info, prefer_menswear)

        Update the Clothing Preference of a Sim.

        .. note:: Will only update Human Sims.

        :param sim_info: An instance of a Sim.
        :type sim_info: SimInfo
        :param prefer_menswear: If True, the Sim will prefer Menswear.\
        If False, the Sim will prefer Womenswear.
        :type prefer_menswear: bool
        :return: True, if successful. False, if not.
        :rtype: bool
        """
        if sim_info is None:
            return False
        if not CommonSpeciesUtils.is_human(sim_info):
            return False
        if prefer_menswear:
            CommonTraitUtils.remove_trait(
                sim_info, CommonTraitId.GENDER_OPTIONS_CLOTHING_WOMENS_WEAR)
            CommonTraitUtils.add_trait(
                sim_info, CommonTraitId.GENDER_OPTIONS_CLOTHING_MENS_WEAR)
        else:
            CommonTraitUtils.remove_trait(
                sim_info, CommonTraitId.GENDER_OPTIONS_CLOTHING_MENS_WEAR)
            CommonTraitUtils.add_trait(
                sim_info, CommonTraitId.GENDER_OPTIONS_CLOTHING_WOMENS_WEAR)
        from sims4communitylib.events.sim.common_sim_event_dispatcher import CommonSimEventDispatcherService
        CommonSimEventDispatcherService(
        )._on_sim_change_gender_options_clothing_preference(sim_info)
        return True
    def update_can_reproduce(sim_info: SimInfo, can_reproduce: bool) -> bool:
        """update_can_reproduce(sim_info, can_reproduce)

        Update a Sims ability to reproduce.

        .. note:: Will only update Pet Sims.

        :param sim_info: An instance of a Sim.
        :type sim_info: SimInfo
        :param can_reproduce: If True, the Sim will have the ability to reproduce.\
        If False, the Sim will not have the ability to reproduce.
        :type can_reproduce: bool
        :return: True, if successful. False, if not.
        :rtype: bool
        """
        if sim_info is None:
            return False
        if not CommonSpeciesUtils.is_pet(sim_info):
            return False
        if can_reproduce:
            CommonTraitUtils.remove_trait(
                sim_info,
                CommonTraitId.PREGNANCY_OPTIONS_PET_CAN_NOT_REPRODUCE)
            CommonTraitUtils.add_trait(
                sim_info, CommonTraitId.PREGNANCY_OPTIONS_PET_CAN_REPRODUCE)
        else:
            CommonTraitUtils.remove_trait(
                sim_info, CommonTraitId.PREGNANCY_OPTIONS_PET_CAN_REPRODUCE)
            CommonTraitUtils.add_trait(
                sim_info,
                CommonTraitId.PREGNANCY_OPTIONS_PET_CAN_NOT_REPRODUCE)
        from sims4communitylib.events.sim.common_sim_event_dispatcher import CommonSimEventDispatcherService
        CommonSimEventDispatcherService(
        )._on_sim_change_gender_options_can_reproduce(sim_info)
        return True
    def update_toilet_usage(sim_info: SimInfo,
                            uses_toilet_standing: bool) -> bool:
        """update_toilet_usage(sim_info, uses_toilet_standing)

        Update how a Sim uses the toilet. i.e. Toilet Standing or Toilet Sitting.

        .. note:: Will only update Human Sims.

        :param sim_info: An instance of a Sim.
        :type sim_info: SimInfo
        :param uses_toilet_standing: If True, the Sim will use toilets while standing.\
        If False, the Sim will use toilets while sitting.
        :type uses_toilet_standing: bool
        :return: True, if successful. False, if not.
        :rtype: bool
        """
        if sim_info is None:
            return False
        if not CommonSpeciesUtils.is_human(sim_info):
            return False
        if uses_toilet_standing:
            CommonTraitUtils.remove_trait(
                sim_info, CommonTraitId.GENDER_OPTIONS_TOILET_SITTING)
            CommonTraitUtils.add_trait(
                sim_info, CommonTraitId.GENDER_OPTIONS_TOILET_STANDING)
        else:
            CommonTraitUtils.remove_trait(
                sim_info, CommonTraitId.GENDER_OPTIONS_TOILET_STANDING)
            CommonTraitUtils.add_trait(
                sim_info, CommonTraitId.GENDER_OPTIONS_TOILET_SITTING)
        from sims4communitylib.events.sim.common_sim_event_dispatcher import CommonSimEventDispatcherService
        CommonSimEventDispatcherService(
        )._on_sim_change_gender_options_toilet_usage(sim_info)
        return True
    def can_not_be_impregnated(sim_info: SimInfo) -> bool:
        """can_not_be_impregnated(sim_info)

        Determine if a sim Can Not Be Impregnated.

        .. note:: Use :func:`~can_not_reproduce` for Pet Sims.
        .. note:: Will return False if the sim has the GENDER_OPTIONS_PREGNANCY_CAN_BE_IMPREGNATED trait.

        :param sim_info: The Sim to check.
        :type sim_info: SimInfo
        :return: True, if the Sim can not be impregnated. False, if the Sim can be impregnated.
        :rtype: bool
        """
        return CommonTraitUtils.has_trait(sim_info, CommonTraitId.GENDER_OPTIONS_PREGNANCY_CAN_NOT_BE_IMPREGNATED)\
               and not CommonTraitUtils.has_trait(sim_info, CommonTraitId.GENDER_OPTIONS_PREGNANCY_CAN_BE_IMPREGNATED)
    def can_not_reproduce(sim_info: SimInfo) -> bool:
        """can_not_reproduce(sim_info)

        Determine if a pet sim can reproduce.

        ..note:: Use :func:`~can_not_impregnate` and :func:`~can_not_be_impregnated` for Human Sims.
        .. note:: Will return False if the pet sim has the PREGNANCY_OPTIONS_PET_CAN_REPRODUCE trait.

        :param sim_info: The Sim to check.
        :type sim_info: SimInfo
        :return: True, if the Sim can not reproduce. False, if the Sim can reproduce.
        :rtype: bool
        """
        return CommonTraitUtils.has_trait(sim_info, CommonTraitId.PREGNANCY_OPTIONS_PET_CAN_NOT_REPRODUCE)\
               and not CommonTraitUtils.has_trait(sim_info, CommonTraitId.PREGNANCY_OPTIONS_PET_CAN_REPRODUCE)
    def can_not_impregnate(sim_info: SimInfo) -> bool:
        """can_not_impregnate(sim_info)

        Determine if a sim Can Not Impregnate.

        .. note:: Use :func:`~can_not_reproduce` for Pet Sims.
        .. note:: This will check for a sim to not also have the GENDER_OPTIONS_PREGNANCY_CAN_IMPREGNATE trait.

        :param sim_info: The Sim to check.
        :type sim_info: SimInfo
        :return: True, if the Sim can not impregnate other Sims. False, if the Sim can impregnate other Sims.
        :rtype: bool
        """
        return CommonTraitUtils.has_trait(sim_info, CommonTraitId.GENDER_OPTIONS_PREGNANCY_CAN_NOT_IMPREGNATE)\
               and not CommonTraitUtils.has_trait(sim_info, CommonTraitId.GENDER_OPTIONS_PREGNANCY_CAN_IMPREGNATE)
Beispiel #10
0
 def _has_occult_trait(sim_info: SimInfo, trait: int) -> bool:
     equipped_sim_traits = CommonTraitUtils.get_equipped_traits(sim_info)
     for sim_trait in equipped_sim_traits:
         sim_trait_id = getattr(sim_trait, 'guid64', None)
         if sim_trait_id == trait:
             return True
     return False
        def _on_submit(chosen_traits: Tuple[Trait]):
            trait_tracker: TraitTracker = sim_info.trait_tracker
            for personality_trait in trait_tracker.personality_traits:
                CommonTraitUtils.remove_trait(sim_info, personality_trait)

            for chosen_trait in chosen_traits:
                CommonTraitUtils.add_trait(sim_info, chosen_trait)

            # noinspection PyUnresolvedReferences
            CommonBasicNotification(
                S4CMSimControlMenuStringId.SET_PERSONALITY_TRAITS_TITLE,
                S4CMSimControlMenuStringId.SET_PERSONALITY_TRAITS_DESCRIPTION,
                description_tokens=(
                    CommonSimUtils.get_sim_instance(sim_info),
                )).show(icon=IconInfoData(
                    obj_instance=CommonSimUtils.get_sim_instance(sim_info)))
            _reopen()
Beispiel #12
0
 def is_cat(sim_info: SimInfo) -> bool:
     """
         Determine if a sim is a Cat.
     """
     from sims4communitylib.utils.sims.common_trait_utils import CommonTraitUtils
     from sims4communitylib.enums.traits_enum import CommonTraitId
     return CommonSpeciesUtils.is_cat_species(
         CommonSpeciesUtils.get_species(sim_info)
     ) or CommonTraitUtils.has_trait(sim_info, CommonTraitId.SPECIES_CAT)
Beispiel #13
0
 def is_ghost(sim_info: SimInfo) -> bool:
     """
         Determine if a sim is a Ghost.
     """
     equipped_sim_traits = CommonTraitUtils.get_equipped_traits(sim_info)
     for trait in equipped_sim_traits:
         is_ghost_trait = getattr(trait, 'is_ghost_trait', None)
         if is_ghost_trait:
             return True
     return False
Beispiel #14
0
 def on_started(self, interaction_sim: Sim,
                interaction_target: Sim) -> bool:
     self.log.format_with_message('Running \'{}\' on_started.'.format(
         self.__class__.__name__),
                                  interaction_sim=interaction_sim,
                                  interaction_target=interaction_target)
     target_sim_info = CommonSimUtils.get_sim_info(interaction_target)
     target_sim_name = CommonSimNameUtils.get_full_name(target_sim_info)
     sim_traits = ', '.join(
         CommonTraitUtils.get_trait_names(
             CommonTraitUtils.get_traits(target_sim_info)))
     text = ''
     text += 'Traits:\n{}\n\n'.format(sim_traits)
     CommonBasicNotification(
         CommonLocalizationUtils.create_localized_string(
             '{} Traits'.format(target_sim_name)),
         CommonLocalizationUtils.create_localized_string(text)).show(
             icon=IconInfoData(obj_instance=interaction_target))
     return True
    def can_create_pregnancy(sim_info: SimInfo) -> bool:
        """can_create_pregnancy(sim_info)

        Determine if a Sim can either impregnate, be impregnated, or can reproduce.

        .. note:: Will return False if the Sim can both impregnate and not impregnate,\
            if the Sim can both be impregnated and not be impregnated\
            or if the Sim can both reproduce and not reproduce.

        .. note:: A Sim can impregnate when they can either impregnate other Sims, can be impregnated by other Sims, or if they are a Pet, can reproduce.

        :param sim_info: The Sim to check.
        :type sim_info: SimInfo
        :return: True, if the Sim can create pregnancies. False, if the Sim can not create pregnancies.
        :rtype: bool
        """
        return CommonTraitUtils.can_impregnate(
            sim_info) or CommonTraitUtils.can_be_impregnated(
                sim_info) or CommonTraitUtils.can_reproduce(sim_info)
Beispiel #16
0
 def is_small_dog(sim_info: SimInfo) -> bool:
     """
         Determine if a sim is a Small Dog.
     """
     from sims4communitylib.utils.sims.common_trait_utils import CommonTraitUtils
     from sims4communitylib.enums.traits_enum import CommonTraitId
     return CommonSpeciesUtils.is_dog_species(
         CommonSpeciesUtils.get_species(
             sim_info)) and CommonTraitUtils.has_trait(
                 sim_info, CommonTraitId.SPECIES_EXTENDED_SMALL_DOGS)
Beispiel #17
0
    def is_alien(sim_info: SimInfo) -> bool:
        """is_alien(sim_info)

        Determine if a Sim is an Alien.

        :param sim_info: An instance of a Sim.
        :type sim_info: SimInfo
        :return: True, if the Sim is an Alien. False, if not.
        :rtype: bool
        """
        return CommonTraitUtils.has_trait(sim_info, CommonTraitId.OCCULT_ALIEN)
Beispiel #18
0
    def is_plant_sim(sim_info: SimInfo) -> bool:
        """is_plant_sim(sim_info)

        Determine if a Sim is a Plant Sim.

        :param sim_info: An instance of a Sim.
        :type sim_info: SimInfo
        :return: True, if the Sim is a Plant Sim. False, if not.
        :rtype: bool
        """
        return CommonTraitUtils.has_trait(sim_info, CommonTraitId.PLANT_SIM)
Beispiel #19
0
    def is_plant_sim(sim_info: SimInfo) -> bool:
        """is_plant_sim(sim_info)

        Determine if a sim is a Plant Sim.

        :param sim_info: The Sim to check.
        :type sim_info: SimInfo
        :return: True, if the Sim is the Occult. False, if not.
        :rtype: bool
        """
        return CommonTraitUtils.has_trait(sim_info, CommonTraitId.PLANT_SIM)
    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)
        trait_strings: List[str] = list()
        for trait in CommonTraitUtils.get_traits(target_sim_info):
            trait_name = CommonTraitUtils.get_trait_name(trait)
            trait_id = CommonTraitUtils.get_trait_id(trait)
            trait_strings.append('{} ({})'.format(trait_name, trait_id))

        trait_strings = sorted(trait_strings, key=lambda x: x)
        sim_traits = ', '.join(trait_strings)
        text = ''
        text += 'Traits:\n{}\n\n'.format(sim_traits)
        CommonBasicNotification(
            CommonLocalizationUtils.create_localized_string('{} Traits ({})'.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
Beispiel #21
0
    def is_vampire(sim_info: SimInfo) -> bool:
        """is_vampire(sim_info)

        Determine if a sim is a Vampire.

        :param sim_info: The Sim to check.
        :type sim_info: SimInfo
        :return: True, if the Sim is the Occult. False, if not.
        :rtype: bool
        """
        return CommonTraitUtils.has_trait(sim_info, CommonTraitId.OCCULT_VAMPIRE)
    def has_breasts(sim_info: SimInfo) -> bool:
        """has_breasts(sim_info)

        Determine if a Sim has breasts.

        .. note:: This will True if breasts are being forced on the Sim.

        :param sim_info: An instance of a Sim.
        :type sim_info: SimInfo
        :return: True, if the Sim has breasts. False, if not.
        :rtype: bool
        """
        if CommonGenderUtils.is_female(
                sim_info) and not CommonTraitUtils.has_trait(
                    sim_info, CommonTraitId.BREASTS_FORCE_OFF):
            return True
        if CommonGenderUtils.is_male(sim_info) and CommonTraitUtils.has_trait(
                sim_info, CommonTraitId.BREASTS_FORCE_ON):
            return True
        return False
Beispiel #23
0
    def is_alien(sim_info: SimInfo) -> bool:
        """is_alien(sim_info)

        Determine if a sim is an Alien.

        :param sim_info: The Sim to check.
        :type sim_info: SimInfo
        :return: True, if the Sim is the Occult. False, if not.
        :rtype: bool
        """
        return CommonTraitUtils.has_trait(sim_info, CommonTraitId.OCCULT_ALIEN)
Beispiel #24
0
 def can_impregnate(sim_info: SimInfo) -> bool:
     """ Determine if a Sim can impregnate other sims. """
     from sims4communitylib.utils.sims.common_trait_utils import CommonTraitUtils
     from sims4communitylib.enums.traits_enum import CommonTraitId
     if CommonSpeciesUtils.is_human(sim_info):
         if CommonTraitUtils.has_trait(
                 sim_info,
                 CommonTraitId.GENDER_OPTIONS_PREGNANCY_CAN_NOT_IMPREGNATE):
             return False
         return CommonTraitUtils.has_trait(
             sim_info,
             CommonTraitId.GENDER_OPTIONS_PREGNANCY_CAN_IMPREGNATE)
     elif CommonSpeciesUtils.is_pet(sim_info):
         if CommonTraitUtils.has_trait(
                 sim_info,
                 CommonTraitId.PREGNANCY_OPTIONS_PET_CAN_NOT_REPRODUCE):
             return False
         return CommonTraitUtils.has_trait(
             sim_info, CommonTraitId.PREGNANCY_OPTIONS_PET_CAN_REPRODUCE)
     return False
Beispiel #25
0
    def is_vampire(sim_info: SimInfo) -> bool:
        """is_vampire(sim_info)

        Determine if a Sim is a Vampire.

        :param sim_info: An instance of a Sim.
        :type sim_info: SimInfo
        :return: True, if the Sim is a Vampire. False, if not.
        :rtype: bool
        """
        return CommonTraitUtils.has_trait(sim_info,
                                          CommonTraitId.OCCULT_VAMPIRE)
    def prefers_womenswear(sim_info: SimInfo) -> bool:
        """prefers_womenswear(sim_info)

        Determine if a sim prefers Womens Clothing.

        :param sim_info: The Sim to check.
        :type sim_info: SimInfo
        :return: True, if the Sim does. False, if the Sim does not.
        :rtype: bool
        """
        return CommonTraitUtils.has_trait(
            sim_info, CommonTraitId.GENDER_OPTIONS_CLOTHING_WOMENS_WEAR)
    def uses_toilet_sitting(sim_info: SimInfo) -> bool:
        """uses_toilet_sitting(sim_info)

        Determine if a sim uses the toilet while sitting.

        :param sim_info: The Sim to check.
        :type sim_info: SimInfo
        :return: True, if the Sim uses toilets while sitting. False, if the Sim does not use toilets while sitting.
        :rtype: bool
        """
        return CommonTraitUtils.has_trait(
            sim_info, CommonTraitId.GENDER_OPTIONS_TOILET_SITTING)
Beispiel #28
0
 def is_robot(sim_info: SimInfo) -> bool:
     """
         Determine if a sim is a Robot.
     """
     if not hasattr(TraitType, 'ROBOT'):
         return False
     equipped_sim_traits = CommonTraitUtils.get_equipped_traits(sim_info)
     for trait in equipped_sim_traits:
         trait_type = getattr(trait, 'trait_type', -1)
         if trait_type == TraitType.ROBOT:
             return True
     return False
    def has_feminine_frame(sim_info: SimInfo) -> bool:
        """has_feminine_frame(sim_info)

        Determine if a sim has a Feminine Body Frame.

        :param sim_info: The Sim to check.
        :type sim_info: SimInfo
        :return: True, if the Sim does. False, if the Sim does not.
        :rtype: bool
        """
        return CommonTraitUtils.has_trait(
            sim_info, CommonTraitId.GENDER_OPTIONS_FRAME_FEMININE)
Beispiel #30
0
    def is_skeleton(sim_info: SimInfo) -> bool:
        """is_skeleton(sim_info)

        Determine if a Sim is a Skeleton.

        :param sim_info: An instance of a Sim.
        :type sim_info: SimInfo
        :return: True, if the Sim is the a Skeleton. False, if not.
        :rtype: bool
        """
        equipped_sim_traits = CommonTraitUtils.get_equipped_traits(sim_info)
        skeleton_trait_ids = {
            CommonTraitId.HIDDEN_SKELETON,
            CommonTraitId.HIDDEN_SKELETON_SERVICE_SKELETON,
            CommonTraitId.HIDDEN_SKELETON_TEMPLE_SKELETON
        }
        for trait in equipped_sim_traits:
            trait_id = CommonTraitUtils.get_trait_id(trait)
            if trait_id in skeleton_trait_ids:
                return True
        return False