def _translate_motive(self, sim_info: SimInfo, motive_name: str) -> int: if motive_name == CMMotive.BOWEL: if CommonSpeciesUtils.is_dog(sim_info): return CommonMotiveId.PET_DOG_BOWEL elif CommonSpeciesUtils.is_cat(sim_info): return CommonMotiveId.PET_CAT_BOWEL return -1 else: return CMMotiveUtils._MOTIVE_MAPPINGS[motive_name]
def _try_apply_traits(self, sim_info: SimInfo): if CommonSpeciesUtils.is_human(sim_info): CommonTraitUtils.remove_trait( sim_info, S4CMTraitId.S4CM_CONTROLLABLE_LARGE_DOG_SIM, S4CMTraitId.S4CM_CONTROLLABLE_SMALL_DOG_SIM, S4CMTraitId.S4CM_CONTROLLABLE_CAT_SIM, S4CMTraitId.S4CM_CONTROLLABLE_FOX_SIM) if CommonTraitUtils.has_trait( sim_info, S4CMTraitId.S4CM_CONTROLLABLE_HUMAN_SIM): return CommonTraitUtils.add_trait(sim_info, S4CMTraitId.S4CM_CONTROLLABLE_HUMAN_SIM) elif CommonSpeciesUtils.is_large_dog(sim_info): CommonTraitUtils.remove_trait( sim_info, S4CMTraitId.S4CM_CONTROLLABLE_HUMAN_SIM, S4CMTraitId.S4CM_CONTROLLABLE_SMALL_DOG_SIM, S4CMTraitId.S4CM_CONTROLLABLE_CAT_SIM, S4CMTraitId.S4CM_CONTROLLABLE_FOX_SIM) if CommonTraitUtils.has_trait( sim_info, S4CMTraitId.S4CM_CONTROLLABLE_LARGE_DOG_SIM): return CommonTraitUtils.add_trait( sim_info, S4CMTraitId.S4CM_CONTROLLABLE_LARGE_DOG_SIM) elif CommonSpeciesUtils.is_small_dog(sim_info): CommonTraitUtils.remove_trait( sim_info, S4CMTraitId.S4CM_CONTROLLABLE_HUMAN_SIM, S4CMTraitId.S4CM_CONTROLLABLE_LARGE_DOG_SIM, S4CMTraitId.S4CM_CONTROLLABLE_CAT_SIM, S4CMTraitId.S4CM_CONTROLLABLE_FOX_SIM) if CommonTraitUtils.has_trait( sim_info, S4CMTraitId.S4CM_CONTROLLABLE_SMALL_DOG_SIM): return CommonTraitUtils.add_trait( sim_info, S4CMTraitId.S4CM_CONTROLLABLE_SMALL_DOG_SIM) elif CommonSpeciesUtils.is_cat(sim_info): CommonTraitUtils.remove_trait( sim_info, S4CMTraitId.S4CM_CONTROLLABLE_HUMAN_SIM, S4CMTraitId.S4CM_CONTROLLABLE_LARGE_DOG_SIM, S4CMTraitId.S4CM_CONTROLLABLE_SMALL_DOG_SIM, S4CMTraitId.S4CM_CONTROLLABLE_FOX_SIM) if CommonTraitUtils.has_trait( sim_info, S4CMTraitId.S4CM_CONTROLLABLE_CAT_SIM): return CommonTraitUtils.add_trait(sim_info, S4CMTraitId.S4CM_CONTROLLABLE_CAT_SIM) elif CommonSpeciesUtils.is_fox(sim_info): CommonTraitUtils.remove_trait( sim_info, S4CMTraitId.S4CM_CONTROLLABLE_HUMAN_SIM, S4CMTraitId.S4CM_CONTROLLABLE_LARGE_DOG_SIM, S4CMTraitId.S4CM_CONTROLLABLE_SMALL_DOG_SIM, S4CMTraitId.S4CM_CONTROLLABLE_CAT_SIM) if CommonTraitUtils.has_trait( sim_info, S4CMTraitId.S4CM_CONTROLLABLE_FOX_SIM): return CommonTraitUtils.add_trait(sim_info, S4CMTraitId.S4CM_CONTROLLABLE_FOX_SIM)
def get_bowels_level(sim_info: SimInfo) -> float: """ Retrieve the bowels level of a Sim. """ if CommonSpeciesUtils.is_human(sim_info): return -1.0 elif CommonSpeciesUtils.is_dog(sim_info): return CommonSimMotiveUtils._get_motive_level( sim_info, CommonMotiveId.PET_DOG_BOWEL) elif CommonSpeciesUtils.is_cat(sim_info): return CommonSimMotiveUtils._get_motive_level( sim_info, CommonMotiveId.PET_CAT_BOWEL) return -1.0
def get_species(sim_info: SimInfo) -> int: """ Retrieve the CommonSpecies of a sim. Use this instead of CommonSpeciesUtils.get_species to determine a more specific species. """ from sims4communitylib.utils.sims.common_species_utils import CommonSpeciesUtils if CommonSpeciesUtils.is_human(sim_info): return CommonSpecies.HUMAN elif CommonSpeciesUtils.is_small_dog(sim_info): return CommonSpecies.SMALL_DOG elif CommonSpeciesUtils.is_large_dog(sim_info): return CommonSpecies.LARGE_DOG elif CommonSpeciesUtils.is_cat(sim_info): return CommonSpecies.CAT return CommonSpecies.INVALID
def get_bowels_level(sim_info: SimInfo) -> float: """get_bowels_level(sim_info) Retrieve the bowels level of a Sim. :param sim_info: The Sim to get the level of. :type sim_info: SimInfo :return: The current level of the Motive of the Sim. :rtype: float """ if CommonSpeciesUtils.is_human(sim_info): return -1.0 elif CommonSpeciesUtils.is_dog(sim_info): return CommonSimMotiveUtils._get_motive_level(sim_info, CommonMotiveId.PET_DOG_BOWEL) elif CommonSpeciesUtils.is_cat(sim_info): return CommonSimMotiveUtils._get_motive_level(sim_info, CommonMotiveId.PET_CAT_BOWEL) return -1.0
def get_stand_interaction(sim_info: SimInfo) -> Union[int, None]: """get_stand_interaction(sim_info) Retrieve a Stand interaction appropriate for a Sim. :param sim_info: An instance of a Sim. :type sim_info: SimInfo :return: The decimal identifier of a Stand interaction appropriate for the Sim or None if no Stand interaction was found to be appropriate. :rtype: Union[int, None] """ from sims4communitylib.utils.sims.common_species_utils import CommonSpeciesUtils if CommonSpeciesUtils.is_human(sim_info): return CommonInteractionId.SIM_STAND elif CommonSpeciesUtils.is_dog(sim_info): return CommonInteractionId.DOG_STAND elif CommonSpeciesUtils.is_cat(sim_info): return CommonInteractionId.CAT_STAND return None
def get_species(sim_info: SimInfo) -> 'CommonSpecies': """get_species(sim_info) Retrieve the CommonSpecies of a sim. Use this instead of CommonSpeciesUtils.get_species to determine a more specific species. :param sim_info: An instance of a Sim. :type sim_info: SimInfo :return: A species matching the Sim or CommonSpecies.INVALID if no matching species is found. :rtype: CommonSpecies """ from sims4communitylib.utils.sims.common_species_utils import CommonSpeciesUtils if CommonSpeciesUtils.is_human(sim_info): return CommonSpecies.HUMAN elif CommonSpeciesUtils.is_small_dog(sim_info): return CommonSpecies.SMALL_DOG elif CommonSpeciesUtils.is_large_dog(sim_info): return CommonSpecies.LARGE_DOG elif CommonSpeciesUtils.is_cat(sim_info): return CommonSpecies.CAT return CommonSpecies.INVALID
def _try_apply_traits(self, sim_info: SimInfo): if CommonSpeciesUtils.is_human(sim_info): CommonTraitUtils.remove_trait( sim_info, CommonTraitId.S4CL_MAIN_TRAIT_LARGE_DOG, CommonTraitId.S4CL_MAIN_TRAIT_SMALL_DOG, CommonTraitId.S4CL_MAIN_TRAIT_CAT) if CommonTraitUtils.has_trait(sim_info, CommonTraitId.S4CL_MAIN_TRAIT_HUMAN): return CommonTraitUtils.add_trait(sim_info, CommonTraitId.S4CL_MAIN_TRAIT_HUMAN) elif CommonSpeciesUtils.is_large_dog(sim_info): CommonTraitUtils.remove_trait( sim_info, CommonTraitId.S4CL_MAIN_TRAIT_HUMAN, CommonTraitId.S4CL_MAIN_TRAIT_SMALL_DOG, CommonTraitId.S4CL_MAIN_TRAIT_CAT) if CommonTraitUtils.has_trait( sim_info, CommonTraitId.S4CL_MAIN_TRAIT_LARGE_DOG): return CommonTraitUtils.add_trait(sim_info, CommonTraitId.S4CL_MAIN_TRAIT_LARGE_DOG) elif CommonSpeciesUtils.is_small_dog(sim_info): CommonTraitUtils.remove_trait( sim_info, CommonTraitId.S4CL_MAIN_TRAIT_HUMAN, CommonTraitId.S4CL_MAIN_TRAIT_LARGE_DOG, CommonTraitId.S4CL_MAIN_TRAIT_CAT) if CommonTraitUtils.has_trait( sim_info, CommonTraitId.S4CL_MAIN_TRAIT_SMALL_DOG): return CommonTraitUtils.add_trait(sim_info, CommonTraitId.S4CL_MAIN_TRAIT_SMALL_DOG) elif CommonSpeciesUtils.is_cat(sim_info): CommonTraitUtils.remove_trait( sim_info, CommonTraitId.S4CL_MAIN_TRAIT_HUMAN, CommonTraitId.S4CL_MAIN_TRAIT_LARGE_DOG, CommonTraitId.S4CL_MAIN_TRAIT_SMALL_DOG) if CommonTraitUtils.has_trait(sim_info, CommonTraitId.S4CL_MAIN_TRAIT_CAT): return CommonTraitUtils.add_trait(sim_info, CommonTraitId.S4CL_MAIN_TRAIT_CAT)
def get_in_labor_buff(sim_info: SimInfo) -> Union[int, CommonBuffId]: """get_in_labor_buff(sim_info) Retrieve an In Labor buff appropriate for causing the Sim to go into labor (Give Birth). :param sim_info: An instance of a Sim. :type sim_info: SimInfo :return: The decimal identifier of a Buff that will cause the specified Sim to go into labor. If no appropriate Buff is found, -1 will be returned. :rtype: Union[int, CommonBuffId] """ from sims4communitylib.utils.sims.common_gender_utils import CommonGenderUtils sim_name = CommonSimNameUtils.get_full_name(sim_info) log.debug( 'Locating appropriate Buff for inducing labor in \'{}\'.'.format( sim_name)) is_female = CommonGenderUtils.is_female(sim_info) if CommonSpeciesUtils.is_human(sim_info): log.debug('\'{}\' is Human.'.format(sim_name)) if is_female: log.debug('\'{}\' is Female.'.format(sim_name)) return CommonBuffId.PREGNANCY_IN_LABOR else: log.debug('\'{}\' is Male.'.format(sim_name)) return CommonBuffId.PREGNANCY_IN_LABOR_MALE elif CommonSpeciesUtils.is_dog(sim_info): log.debug('\'{}\' is a Dog.'.format(sim_name)) if is_female: log.debug('\'{}\' is Female.'.format(sim_name)) return CommonBuffId.PREGNANCY_IN_LABOR_PET_DOG elif CommonSpeciesUtils.is_cat(sim_info): log.debug('\'{}\' is a Cat.'.format(sim_name)) if is_female: log.debug('\'{}\' is Female.'.format(sim_name)) return CommonBuffId.PREGNANCY_IN_LABOR_PET_CAT log.debug( 'No appropriate Buff located to induce labor in \'{}\'.'.format( sim_name)) return -1