def on_interaction_test(cls, interaction_context, interaction_target):
     sim = cls.get_interaction_sim(interaction_context)
     if CNSimUtils.can_have_sex(sim):
         return False
     if is_sim_in_sex(sim) or (is_sim_going_to_sex(sim)
                               or is_sim_in_sex(interaction_target)
                               ) or is_sim_going_to_sex(interaction_target):
         return False
     return True
 def on_interaction_test(cls, interaction_context, interaction_target):
     if not TurboTypesUtil.Sims.is_sim(interaction_target):
         return False
     sim = cls.get_interaction_sim(interaction_context)
     if is_sim_in_sex(sim) or (is_sim_going_to_sex(sim)
                               or is_sim_in_sex(interaction_target)
                               ) or is_sim_going_to_sex(interaction_target):
         return False
     return True
 def on_interaction_test(cls, interaction_context, interaction_target):
     sim = cls.get_interaction_sim(interaction_context)
     if is_sim_in_sex(sim) or (is_sim_going_to_sex(sim)
                               or is_sim_in_sex(interaction_target)
                               ) or is_sim_going_to_sex(interaction_target):
         return False
     if not CNSimUtils.can_have_sex(sim):
         return False
     if is_sim_outfit_fullbody(sim):
         return False
     if get_sim_body_state(sim, 6) == BodyState.OUTFIT:
         return True
     return False
 def on_interaction_test(cls, interaction_context, interaction_target):
     if not TurboTypesUtil.Sims.is_sim(interaction_target):
         return False
     sim = cls.get_interaction_sim(interaction_context)
     if is_sim_in_sex(sim) or (is_sim_going_to_sex(sim)
                               or is_sim_in_sex(interaction_target)
                               ) or is_sim_going_to_sex(interaction_target):
         return False
     if get_sim_body_state(interaction_target, 6) != BodyState.OUTFIT:
         return True
     if get_sim_body_state(interaction_target, 7) != BodyState.OUTFIT:
         return True
     return False
def _sim_miscarriage_reaction(sim_identifier):
    line_of_sight = TurboMathUtil.LineOfSight.create(
        TurboSimUtil.Location.get_routing_surface(sim_identifier),
        TurboSimUtil.Location.get_position(sim_identifier), 8.0)
    for sim in TurboManagerUtil.Sim.get_all_sim_instance_gen(humans=True,
                                                             pets=False):
        if sim is sim_identifier:
            pass
        if TurboSimUtil.Age.is_younger_than(sim,
                                            TurboSimUtil.Age.BABY,
                                            or_equal=True):
            pass
        while not is_sim_in_sex(sim):
            if is_sim_going_to_sex(sim):
                pass
            if has_sim_situations(sim, (SimSituation.GRIMREAPER, )):
                pass
            if not is_sim_available(sim):
                pass
            if not TurboMathUtil.LineOfSight.test(
                    line_of_sight, TurboSimUtil.Location.get_position(sim)):
                pass
            TurboSimUtil.Interaction.push_affordance(
                sim,
                SimInteraction.WW_PREGNANCY_MISCARRIAGE_REACTION,
                target=sim_identifier,
                interaction_context=TurboInteractionUtil.InteractionContext.
                SOURCE_SCRIPT,
                insert_strategy=TurboInteractionUtil.QueueInsertStrategy.NEXT,
                must_run_next=True,
                priority=TurboInteractionUtil.Priority.Critical,
                run_priority=TurboInteractionUtil.Priority.Critical)
Exemple #6
0
def get_sims_for_sex(skip_males=False, skip_females=False, skip_cmales=False, skip_cfemales=False, only_npc=False, relative_sims=(), min_sims_age=TurboSimUtil.Age.CHILD, max_sims_age=TurboSimUtil.Age.ELDER, skip_sims_ids=()):
    for sim in TurboManagerUtil.Sim.get_all_sim_instance_gen(humans=True, pets=False):
        if TurboManagerUtil.Sim.get_sim_id(sim) in skip_sims_ids:
            continue
        if only_npc is True and TurboSimUtil.Sim.is_player(sim):
            continue
        if skip_cmales is True and get_sim_sex_gender(sim, ignore_sim_specific_gender=True) == SexGenderType.CMALE:
            continue
        if skip_males is True and get_sim_sex_gender(sim, ignore_sim_specific_gender=True) == SexGenderType.MALE:
            continue
        if skip_cfemales is True and get_sim_sex_gender(sim, ignore_sim_specific_gender=True) == SexGenderType.CFEMALE:
            continue
        if skip_females is True and get_sim_sex_gender(sim, ignore_sim_specific_gender=True) == SexGenderType.FEMALE:
            continue
        if not TurboSimUtil.Age.is_younger_than(sim, min_sims_age):
            if TurboSimUtil.Age.is_older_than(sim, max_sims_age):
                continue
            if not (is_sim_in_sex(sim) or is_sim_going_to_sex(sim)):
                if sim_ev(sim).active_pre_sex_handler is not None:
                    continue
                if has_sim_traits(sim, (SimTrait.HIDDEN_ISEVENTNPC_CHALLENGE, SimTrait.ISGRIMREAPER)):
                    continue
                if not is_sim_available(sim):
                    continue
                if relative_sims:
                    is_incest = False
                    for incest_test_sim in relative_sims:
                        if is_true_family_relationship(sim, incest_test_sim):
                            is_incest = True
                            break
                    if is_incest is True:
                        continue
                yield TurboManagerUtil.Sim.get_sim_id(sim)
 def on_interaction_test(cls, interaction_context, interaction_target):
     if not TurboTypesUtil.Sims.is_sim(interaction_target):
         return False
     if not get_nudity_setting(NuditySetting.UNDERWEAR_SWITCH_STATE,
                               variable_type=bool) or has_sim_trait(
                                   interaction_target,
                                   SimTrait.WW_NO_UNDERWEAR):
         return False
     sim = cls.get_interaction_sim(interaction_context)
     if is_sim_in_sex(sim) or (is_sim_going_to_sex(sim)
                               or is_sim_in_sex(interaction_target)
                               ) or is_sim_going_to_sex(interaction_target):
         return False
     if CNSimUtils.can_have_sex(interaction_target):
         return False
     return True
def update_sim_coming_pregnancy(sim_identifier, force=False):
    sim_info = TurboManagerUtil.Sim.get_sim_info(sim_identifier)
    if sim_ev(sim_info).pregnancy_coming_flag is False:
        return
    if is_sim_in_sex(sim_info) or is_sim_going_to_sex(sim_info):
        return
    if sim_ev(sim_info).pregnancy_counter <= 120 and force is False:
        return
    sim_ev(sim_info).pregnancy_coming_flag = False
    sim_ev(sim_info).pregnancy_counter = 0
    partners_ids_list = get_sim_ids_with_relationsip_bit(
        sim_info, SimRelationshipBit.WW_POTENTIAL_PREGNANCY_PARENT)
    if not partners_ids_list:
        return
    sims_list = list()
    for partner_sim_id in partners_ids_list:
        partner_sim_info = TurboManagerUtil.Sim.get_sim_info(partner_sim_id)
        while partner_sim_info is not None:
            sims_list.append(partner_sim_info)
            remove_relationsip_bit_with_sim(
                sim_info, partner_sim_info,
                SimRelationshipBit.WW_POTENTIAL_PREGNANCY_PARENT)
    if not sims_list:
        return
    random_sim_partner = random.choice(sims_list)
    apply_sim_pregnancy(sim_info, random_sim_partner)
Exemple #9
0
 def on_interaction_test(cls, interaction_context, interaction_target):
     if not TurboTypesUtil.Sims.is_sim(interaction_target):
         return False
     if has_sim_trait(interaction_target,
                      SimTrait.GENDEROPTIONS_TOILET_STANDING):
         return False
     sim = cls.get_interaction_sim(interaction_context)
     if is_sim_in_sex(sim) or (is_sim_going_to_sex(sim)
                               or is_sim_in_sex(interaction_target)
                               ) or is_sim_going_to_sex(interaction_target):
         return False
     if not CNSimUtils.can_have_sex(interaction_target):
         return False
     if not has_loaded_strapon():
         return False
     return True
def _trigger_desire_reaction_on_game_update():
    for sim in TurboManagerUtil.Sim.get_all_sim_instance_gen(humans=True, pets=False):
        if TurboSimUtil.Age.is_younger_than(sim, TurboSimUtil.Age.CHILD):
            continue
        if not CNSimUtils.can_have_sex(sim):
            continue
        if not is_sim_in_sex(sim):
            if is_sim_going_to_sex(sim):
                continue
            if has_sim_situations(sim, (SimSituation.GRIMREAPER, SimSituation.FIRE, SimSituation.BABYBIRTH_HOSPITAL)):
                continue
            if not is_sim_available(sim):
                continue
            line_of_sight = TurboMathUtil.LineOfSight.create(TurboSimUtil.Location.get_routing_surface(sim), TurboSimUtil.Location.get_position(sim), 8.0)
            for target in TurboManagerUtil.Sim.get_all_sim_instance_gen(humans=True, pets=False):
                if sim is target:
                    continue
                if TurboSimUtil.Age.is_younger_than(target, TurboSimUtil.Age.CHILD):
                    continue
                if not _has_reaction_to_nudity(sim, target):
                    continue
                if TurboSimUtil.Gender.get_gender(target) not in get_sim_preferenced_genders(sim):
                    continue
                if not TurboSimUtil.Location.is_visible(target):
                    continue
                if TurboSimUtil.Spawner.is_leaving(target):
                    continue
                (desire_limit, desire_increase) = _get_desire_nudity_value(target)
                if not desire_limit <= 0 and desire_increase > 0:
                    if get_sim_desire_level(sim) > desire_limit:
                        continue
                    if not TurboMathUtil.LineOfSight.test(line_of_sight, TurboSimUtil.Location.get_position(target)):
                        continue
                    change_sim_desire_level(sim, desire_increase)
Exemple #11
0
def _is_sim_ready_to_undress(sim):
    if is_sim_in_sex(sim) or is_sim_going_to_sex(sim):
        return False
    if get_sim_actual_body_state(
            sim, 6) == BodyState.NUDE and get_sim_actual_body_state(
                sim, 7) == BodyState.NUDE:
        return False
    if has_sim_traits(sim, (SimTrait.HIDDEN_ISEVENTNPC_CHALLENGE, )):
        return False
    if has_sim_situations(
            sim,
        (SimSituation.BARISTA_VENUE, SimSituation.HIREDNPC_BARISTA,
         SimSituation.BARBARTENDER, SimSituation.BARTENDER_RESTAURANT,
         SimSituation.HIREDNPC_BARTENDER, SimSituation.HIREDNPC_CATERER,
         SimSituation.HIREDNPC_CATERER_VEGETARIAN, SimSituation.HIREDNPC_DJ,
         SimSituation.HIREDNPC_DJ_LEVEL10, SimSituation.SINGLEJOB_CLUB_DJ,
         SimSituation.SINGLEJOB_CLUB_DJ_LEVEL10,
         SimSituation.HIREDNPC_ENTERTAINER_GUITAR,
         SimSituation.HIREDNPC_ENTERTAINER_MICCOMEDY,
         SimSituation.HIREDNPC_ENTERTAINER_ORGAN,
         SimSituation.HIREDNPC_ENTERTAINER_PIANO,
         SimSituation.HIREDNPC_ENTERTAINER_VIOLIN,
         SimSituation.BUTLER_SITUATION,
         SimSituation.GARDENER_SERVICE_SITUATION, SimSituation.NANNY_SITUATION,
         SimSituation.GYMTRAINER_VENUE, SimSituation.LANDLORD,
         SimSituation.LIBRARYVENUE_LIBRARIAN, SimSituation.MAID_SITUATION,
         SimSituation.MAILMAN_SITUATION, SimSituation.PIZZADELIVERY_NEW,
         SimSituation.FORESTRANGER_VACATIONARRIVAL,
         SimSituation.REFLEXOLOGIST_VENUE, SimSituation.REPAIR_SITUATION,
         SimSituation.TRAGICCLOWN, SimSituation.YOGAINSTRUCTOR_VENUE,
         SimSituation.MASSAGETHERAPIST_VENUE,
         SimSituation.MASSAGETHERAPIST_SERVICECALL, SimSituation.CHEFSITUATION,
         SimSituation.HOST_1, SimSituation.RESTAURANT_WAITSTAFF,
         SimSituation.RESTAURANTDINER_SUB_NPC_CRITIC,
         SimSituation.RETAILEMPLOYEE_HARDWORKER,
         SimSituation.RETAILEMPLOYEE_NPCSTORE_HARDWORKER,
         SimSituation.SINGLEJOB_COWORKER_RETAILEMPLOYEE,
         SimSituation.HIREDNPC_STALLVENDOR, SimSituation.HIREDNPC_VENDORSTALL,
         SimSituation.OPENSTREETS_STALLVENDOR,
         SimSituation.CAREER_DOCTOR_NPC_DOCTOR,
         SimSituation.CAREER_DOCTOR_NPC_ASSISTANT,
         SimSituation.CAREER_DOCTOR_NPC_DOCTOR_DIAGNOSER,
         SimSituation.CAREER_DOCTOR_NPC_NURSE,
         SimSituation.CAREER_DOCTOR_NPC_PATIENT_ADMITTED,
         SimSituation.DETECTIVE_APB, SimSituation.DETECTIVE_APBNEUTRAL,
         SimSituation.CAREER_DETECTIVE_APBPLAYER,
         SimSituation.SINGLEJOB_COWORKER_SCIENTIST,
         SimSituation.SINGLEJOB_COWORKER_SCIENTIST_FRONTDESK,
         SimSituation.CAREEREVENTSITUATIONS_SCIENTISTCAREER_MAIN,
         SimSituation.GRIMREAPER, SimSituation.FIRE,
         SimSituation.BABYBIRTH_HOSPITAL, SimSituation.PARK_CHILDPLAYING,
         SimSituation.CAREGIVER_TODDLER, SimSituation.DATE,
         SimSituation.DATE_TEEN)):
        return False
    if not is_sim_available(sim):
        return False
    if not has_sim_permission_for_nudity(sim)[0]:
        return False
    return True
 def on_interaction_test(cls, interaction_context, interaction_target):
     sim = cls.get_interaction_sim(interaction_context)
     if is_sim_in_sex(sim) or is_sim_going_to_sex(sim):
         return False
     if get_sim_body_state(sim,
                           TurboCASUtil.BodyType.SHOES) == BodyState.OUTFIT:
         return True
     return False
Exemple #13
0
 def on_interaction_test(cls, interaction_context, interaction_target):
     if not TurboTypesUtil.Sims.is_sim(interaction_target):
         return False
     if TurboSimUtil.Age.is_younger_than(interaction_target,
                                         TurboSimUtil.Age.CHILD):
         return False
     if CNSimUtils.can_have_sex(interaction_target):
         return False
     if is_sim_in_sex(cls.get_interaction_sim(
             interaction_context)) or is_sim_going_to_sex(
                 cls.get_interaction_sim(interaction_context)):
         return False
     if is_sim_in_sex(interaction_target) or is_sim_going_to_sex(
             interaction_target):
         return False
     if not has_sim_trait(interaction_target,
                          SimTrait.GENDEROPTIONS_TOILET_STANDING):
         return False
     return True
 def on_interaction_test(cls, interaction_context, interaction_target):
     if not get_sex_setting(SexSetting.GENDER_RECOGNITION_SIM_SPECIFIC_STATE, variable_type=bool):
         return False
     if get_sex_setting(SexSetting.SEX_GENDER_TYPE, variable_type=int) == SexGenderTypeSetting.SEX_BASED:
         return False
     if interaction_target is None or not TurboTypesUtil.Sims.is_sim(interaction_target):
         return False
     if is_sim_in_sex(interaction_target) or is_sim_planning_for_sex(interaction_target):
         return False
     if sim_ev(interaction_target).gender_recognition == 0:
         return False
     return True
def _react_to_sims_sex(sim):
    if not get_sex_setting(SexSetting.REACTION_TO_SEX_STATE,
                           variable_type=bool):
        return False
    if TurboSimUtil.Age.is_younger_than(sim,
                                        TurboSimUtil.Age.BABY,
                                        or_equal=True):
        return False
    registered_sex_handlers = get_active_sex_handlers()
    if not registered_sex_handlers:
        return False
    try_to_react = True
    if sim_ev(sim).sex_reaction_attempt_cooldown > 0:
        try_to_react = False
    if sim_ev(sim).sex_reaction_cooldown > 0:
        try_to_react = False
    if try_to_react is False:
        return False
    if is_sim_in_sex(sim) or is_sim_going_to_sex(sim):
        return False
    if has_sim_situations(sim, (SimSituation.GRIMREAPER, SimSituation.FIRE,
                                SimSituation.BABYBIRTH_HOSPITAL)):
        return False
    if not is_sim_available(sim):
        return False
    for interaction_id in TurboSimUtil.Interaction.get_running_interactions_ids(
            sim):
        if interaction_id == SimInteraction.WW_STOP_SEX:
            return True
    line_of_sight = TurboMathUtil.LineOfSight.create(
        TurboSimUtil.Location.get_routing_surface(sim),
        TurboSimUtil.Location.get_position(sim), 8.0)
    for sex_handler in registered_sex_handlers:
        if not sex_handler.is_playing is False:
            if sex_handler.is_ready_to_unregister is True:
                continue
            if sex_handler.get_identifier() in sim_ev(
                    sim).sex_reaction_handlers_list:
                continue
            if sex_handler.get_creator_sim_id(
            ) == TurboManagerUtil.Sim.get_sim_id(sim):
                continue
            sex_interaction_los_position = sex_handler.get_los_position()
            if not TurboMathUtil.LineOfSight.test(
                    line_of_sight, sex_interaction_los_position):
                continue
            sim_ev(sim).sex_reaction_attempt_cooldown = 2
            if _jealousy_from_sex_reaction(sim, sex_handler):
                return True
            if _general_sex_reaction(sim, sex_handler):
                return True
    return False
 def on_interaction_test(cls, interaction_context, interaction_target):
     sim = cls.get_interaction_sim(interaction_context)
     if is_sim_outfit_fullbody(sim):
         return False
     if is_sim_in_sex(sim) or is_sim_going_to_sex(sim):
         return False
     if TurboSimUtil.CAS.get_current_outfit(
             sim)[0] == TurboCASUtil.OutfitCategory.BATHING:
         return True
     if get_sim_actual_body_state(
             sim, 6) != BodyState.OUTFIT or get_sim_actual_body_state(
                 sim, 7) != BodyState.OUTFIT:
         return True
     return False
def _reaction_to_sims_cum(sim):
    if not get_sex_setting(SexSetting.REACTION_TO_CUM_STATE,
                           variable_type=bool):
        return False
    if TurboSimUtil.Age.is_younger_than(sim,
                                        TurboSimUtil.Age.TODDLER,
                                        or_equal=True):
        return False
    full_reaction_cooldown = sim_ev(sim).full_cum_reaction_cooldown
    inner_reaction_cooldown = sim_ev(sim).inner_cum_reaction_cooldown
    if full_reaction_cooldown > 0 and inner_reaction_cooldown > 0:
        return False
    if is_sim_in_sex(sim) or is_sim_going_to_sex(sim):
        return False
    if not is_sim_available(sim):
        return False
    if has_sim_situations(sim, (SimSituation.GRIMREAPER, SimSituation.FIRE,
                                SimSituation.BABYBIRTH_HOSPITAL)):
        return False
    if _has_sim_visible_cum(sim):
        return False
    line_of_sight = TurboMathUtil.LineOfSight.create(
        TurboSimUtil.Location.get_routing_surface(sim),
        TurboSimUtil.Location.get_position(sim), 2.5)
    targets = list()
    for target in TurboManagerUtil.Sim.get_all_sim_instance_gen(humans=True,
                                                                pets=False):
        if sim is target:
            continue
        if TurboSimUtil.Age.is_younger_than(target, TurboSimUtil.Age.CHILD):
            continue
        if has_relationship_bit_with_sim(sim, target,
                                         SimRelationshipBit.WW_JUST_HAD_SEX):
            continue
        if not _has_sim_visible_cum(target):
            continue
        if not TurboSimUtil.Location.is_visible(target):
            continue
        if TurboSimUtil.Spawner.is_leaving(target):
            continue
        if not TurboMathUtil.LineOfSight.test(
                line_of_sight, TurboSimUtil.Location.get_position(target)):
            continue
        targets.append(target)
    if targets:
        is_mixer_only = _is_only_mixer_reaction(sim)
        target = random.choice(targets)
        if _cum_reaction(sim, target, only_mixer=is_mixer_only):
            return True
    return False
Exemple #18
0
 def on_interaction_test(cls, interaction_context, interaction_target):
     if interaction_target is None or not TurboTypesUtil.Sims.is_sim(
             interaction_target):
         return False
     if is_sim_in_sex(cls.get_interaction_sim(interaction_context)):
         return False
     active_sex_handler = sim_ev(interaction_target).active_sex_handler
     if active_sex_handler is None:
         return False
     if TurboManagerUtil.Sim.get_sim_id(
             cls.get_interaction_sim(interaction_context)
     ) in active_sex_handler.go_away_sims_list:
         return False
     return True
 def on_interaction_test(cls, interaction_context, interaction_target):
     sim = cls.get_interaction_sim(interaction_context)
     if not CNSimUtils.can_have_sex(sim):
         return False
     if is_sim_in_sex(sim) or is_sim_going_to_sex(sim):
         return False
     if is_sim_outfit_fullbody(sim):
         return True
     if get_sim_body_state(
             sim, TurboCASUtil.BodyType.UPPER_BODY
     ) == BodyState.OUTFIT and get_sim_body_state(
             sim, TurboCASUtil.BodyType.LOWER_BODY) == BodyState.OUTFIT:
         return True
     return False
 def on_interaction_test(cls, interaction_context, interaction_target):
     if not TurboTypesUtil.Sims.is_sim(interaction_target):
         return False
     sim = cls.get_interaction_sim(interaction_context)
     if not CNSimUtils.teen_sex_is_enabled() and (
             CNSimUtils.is_child_or_teen(sim)
             or CNSimUtils.is_child_or_teen(interaction_target)):
         return False
     skill_level = get_sim_nudity_skill_level(sim)
     if skill_level <= 1:
         return False
     if is_sim_in_sex(sim) or (is_sim_going_to_sex(sim)
                               or is_sim_in_sex(interaction_target)
                               ) or is_sim_going_to_sex(interaction_target):
         return False
     if not has_sim_permission_for_nudity(sim)[0]:
         return False
     if is_sim_outfit_fullbody(interaction_target):
         return True
     if get_sim_body_state(interaction_target, 6) == BodyState.OUTFIT:
         return True
     if get_sim_body_state(interaction_target, 7) == BodyState.OUTFIT:
         return True
     return False
 def on_interaction_test(cls, interaction_context, interaction_target):
     sim = cls.get_interaction_sim(interaction_context)
     if not get_nudity_setting(NuditySetting.UNDERWEAR_SWITCH_STATE,
                               variable_type=bool) or has_sim_trait(
                                   sim, SimTrait.WW_NO_UNDERWEAR):
         return False
     if is_sim_in_sex(sim) or is_sim_going_to_sex(sim):
         return False
     if TurboSimUtil.Gender.is_male(sim):
         return False
     if is_underwear_outfit(get_modified_outfit(sim)[0]) and (
             not is_sim_bottom_underwear(sim)
             or TurboSimUtil.Gender.is_female(sim)
             and not is_sim_top_underwear(sim)):
         return True
     return False
 def on_interaction_test(cls, interaction_context, interaction_target):
     sim = cls.get_interaction_sim(interaction_context)
     if not get_nudity_setting(NuditySetting.UNDERWEAR_SWITCH_STATE,
                               variable_type=bool) or has_sim_trait(
                                   sim, SimTrait.WW_NO_UNDERWEAR):
         return False
     if CNSimUtils.can_have_sex(sim):
         return False
     if is_sim_in_sex(sim) or is_sim_going_to_sex(sim):
         return False
     if TurboSimUtil.Gender.is_male(sim):
         return False
     if get_sim_body_state(
             sim, TurboCASUtil.BodyType.UPPER_BODY) == BodyState.UNDERWEAR:
         return True
     return False
def update_sim_nudity_skill_on_active_nudity(sim_identifier):
    if TurboSimUtil.Age.is_younger_than(sim_identifier,
                                        TurboSimUtil.Age.CHILD):
        return
    if CNSimUtils.can_have_sex(sim_identifier):
        return
    if is_sim_in_sex(sim_identifier) or is_sim_going_to_sex(sim_identifier):
        return
    if not is_sim_available(sim_identifier):
        return
    sim_outfit_level = get_sim_outfit_level(sim_identifier)
    if sim_outfit_level == OutfitLevel.OUTFIT:
        return
    sims_around_value = _get_sims_around_value(sim_identifier, max_sims=6)
    if sim_outfit_level == OutfitLevel.NUDE:
        increase_sim_nudity_skill(
            sim_identifier,
            sims_around_value * get_nudity_skill_points_modifier(
                NuditySkillIncreaseReason.BEING_IN_NAKED_OUTFIT),
            extra_fatigue=0.05,
            reason=NuditySkillIncreaseReason.BEING_IN_NAKED_OUTFIT)
    elif sim_outfit_level == OutfitLevel.BATHING:
        sim_nudity_skill_level = get_sim_nudity_skill_level(sim_identifier)
        increase_sim_nudity_skill(
            sim_identifier,
            sims_around_value * (get_nudity_skill_points_modifier(
                NuditySkillIncreaseReason.BEING_IN_BATHING_OUTFIT) /
                                 sim_nudity_skill_level),
            extra_fatigue=0.15,
            reason=NuditySkillIncreaseReason.BEING_IN_BATHING_OUTFIT)
    elif sim_outfit_level == OutfitLevel.REVEALING or sim_outfit_level == OutfitLevel.UNDERWEAR:
        sim_nudity_skill_level = get_sim_nudity_skill_level(sim_identifier)
        increase_sim_nudity_skill(
            sim_identifier,
            sims_around_value *
            (get_nudity_skill_points_modifier(
                NuditySkillIncreaseReason.BEING_IN_REVEALING_OUTFIT) /
             (sim_nudity_skill_level * sim_nudity_skill_level)),
            extra_fatigue=0.15,
            reason=NuditySkillIncreaseReason.BEING_IN_REVEALING_OUTFIT)
def react_to_sims_nudity(sim):
    if not get_nudity_setting(NuditySetting.REACTION_TO_NUDITY_STATE,
                              variable_type=bool):
        return False
    if TurboSimUtil.Age.is_younger_than(sim,
                                        TurboSimUtil.Age.TODDLER,
                                        or_equal=True):
        return False
    full_reaction_cooldown = sim_ev(sim).full_nudity_reaction_cooldown
    inner_reaction_cooldown = sim_ev(sim).inner_nudity_reaction_cooldown
    if full_reaction_cooldown > 0:
        return False
    if inner_reaction_cooldown > 0:
        return False
    if full_reaction_cooldown > 0 and inner_reaction_cooldown > 0:
        return False
    if is_sim_in_sex(sim) or is_sim_going_to_sex(sim):
        return False
    if has_sim_situations(sim, (SimSituation.GRIMREAPER, SimSituation.FIRE,
                                SimSituation.BABYBIRTH_HOSPITAL)):
        return False
    sim_outfit_level = get_sim_outfit_level(sim)
    if sim_outfit_level == OutfitLevel.NUDE or sim_outfit_level == OutfitLevel.BATHING:
        return False
    if not is_sim_available(sim):
        return False
    has_permission_to_nudity = None
    line_of_sight = TurboMathUtil.LineOfSight.create(
        TurboSimUtil.Location.get_routing_surface(sim),
        TurboSimUtil.Location.get_position(sim), 8.0)
    targets = list()
    for target in TurboManagerUtil.Sim.get_all_sim_instance_gen(humans=True,
                                                                pets=False):
        if sim is target:
            continue
        if has_relationship_bit_with_sim(sim, target,
                                         SimRelationshipBit.WW_JUST_HAD_SEX):
            continue
        if TurboSimUtil.Age.is_younger_than(target, TurboSimUtil.Age.CHILD):
            continue
        if is_sim_in_sex(target):
            continue
        if not TurboSimUtil.Location.is_visible(target):
            continue
        if TurboSimUtil.Spawner.is_leaving(target):
            continue
        target_outfit_level = get_sim_outfit_level(target)
        if target_outfit_level != OutfitLevel.NUDE and target_outfit_level != OutfitLevel.BATHING:
            continue
        if not TurboMathUtil.LineOfSight.test(
                line_of_sight, TurboSimUtil.Location.get_position(target)):
            continue
        if target_outfit_level == OutfitLevel.BATHING:
            extra_skill_level = 1
        else:
            extra_skill_level = 0
        update_sim_nudity_skill_on_seeing_nudity(sim, target)
        if has_permission_to_nudity is None:
            has_permission_to_nudity = has_sim_permission_for_nudity(
                sim, extra_skill_level=extra_skill_level)[0]
        if has_permission_to_nudity is True:
            continue
        targets.append(target)
    if targets:
        is_mixer_only = _is_only_mixer_reaction(sim)
        target = random.choice(targets)
        if _nudity_reaction(sim, target, only_mixer=is_mixer_only):
            return True
    return False
 def on_interaction_test(cls, interaction_context, interaction_target):
     sim = cls.get_interaction_sim(interaction_context)
     if is_sim_in_sex(sim) or is_sim_going_to_sex(sim):
         return False
     return True