def _wickedwhims_is_sim_allowed_for_nudity(privacy_instance, tested_sim): if get_nudity_setting(NuditySetting.NUDITY_PRIVACY, variable_type=bool) or TurboResourceUtil.Resource.get_guid64(TurboPrivacyUtil.get_privacy_interaction(privacy_instance)) in PRIVACY_NUDE_INTERACTIONS: return PrivacyResult.ALLOW if get_nudity_setting(NuditySetting.NUDITY_SWITCH_STATE, variable_type=bool): privacy_interaction = TurboPrivacyUtil.get_privacy_interaction(privacy_instance) if TurboResourceUtil.Resource.get_guid64(privacy_interaction) in PRIVACY_NUDE_INTERACTIONS: (sim_has_permission, _) = has_sim_permission_for_nudity(TurboInteractionUtil.get_interaction_sim(privacy_interaction), ignore_location_test=True, targets=(tested_sim,)) if sim_has_permission is True: (target_has_permission, _) = has_sim_permission_for_nudity(tested_sim, ignore_location_test=True, targets=(TurboInteractionUtil.get_interaction_sim(privacy_interaction),)) if target_has_permission is True: return PrivacyResult.ALLOW return PrivacyResult.DEFAULT
def _has_permission_to_undress(interaction_sim, interaction_context): (has_permission, denied_permissions) = has_sim_permission_for_nudity( interaction_sim, nudity_setting_test=True) if has_permission is True: return True is_autonomy = interaction_context == TurboInteractionUtil.InteractionSource.AUTONOMY if is_autonomy is True: return False text_tokens = [interaction_sim] for denied_permission in denied_permissions: if denied_permission == NudityPermissionDenied.NOT_AT_HOME: text_tokens.append(2434379342) elif denied_permission == NudityPermissionDenied.OUTSIDE: text_tokens.append(14125364) else: if denied_permission == NudityPermissionDenied.TOO_MANY_SIMS_AROUND: text_tokens.append(902300171) for _ in range(11 - len(text_tokens)): text_tokens.append(0) nudity_notification(text=2447814946, text_tokens=text_tokens, icon=interaction_sim, sims=(interaction_sim, ), is_autonomy=is_autonomy) return False
def _has_chance_for_random_undressing(sim_info): if not get_nudity_setting(NuditySetting.NUDITY_SWITCH_STATE, variable_type=bool): return False if get_nudity_setting( NuditySetting.INTERACTION_AUTONOMY_UNDRESSING_TYPE, variable_type=int) == NudityAutonomyUndressLevelSetting.DISABLED: return False if get_nudity_setting( NuditySetting.AUTONOMY_TYPE, variable_type=int ) == NudityAutonomyTypeSetting.DISABLED or get_nudity_setting( NuditySetting.AUTONOMY_TYPE, variable_type=int ) == NudityAutonomyTypeSetting.NPC_ONLY and TurboSimUtil.Sim.is_player( sim_info): return False if not has_sim_permission_for_nudity(sim_info)[0]: return False if get_nudity_setting( NuditySetting.INTERACTION_AUTONOMY_UNDRESSING_TYPE, variable_type=int) == NudityAutonomyUndressLevelSetting.ALWAYS: return True if get_nudity_setting( NuditySetting.INTERACTION_AUTONOMY_UNDRESSING_TYPE, variable_type=int) == NudityAutonomyUndressLevelSetting.RANDOM: base_chance = 0.0 base_chance += 0.08 * get_sim_nudity_skill_level(sim_info) if is_sim_exhibitionist(sim_info): base_chance += 0.1 if random.uniform(0, 1) <= base_chance: return True return False
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 get_score(cls, resolver): yield_to_irq() target = resolver.get_participant( ParticipantType.TargetSim) or resolver.get_participant( ParticipantType.Listeners) if has_sim_permission_for_nudity(target)[0]: return 100 return 0
def on_interaction_start(cls, interaction_instance): target = cls.get_interaction_target(interaction_instance) (has_permission, _) = has_sim_permission_for_nudity(target, nudity_setting_test=True) if has_permission is False: return False if is_sim_outfit_fullbody(target): set_sim_top_underwear_state(target, False) set_sim_bottom_underwear_state(target, False) TurboSimUtil.Interaction.push_affordance( target, SimInteraction.WW_EXHIBITIONISM_UNDRESS_OUTFIT if is_sim_exhibitionist(target) else SimInteraction.WW_NATURISM_UNDRESS_OUTFIT, interaction_context=TurboInteractionUtil.InteractionContext. SOURCE_SCRIPT, insert_strategy=TurboInteractionUtil.QueueInsertStrategy.NEXT, must_run_next=True, priority=TurboInteractionUtil.Priority.High) return True if get_sim_body_state(target, 6) != BodyState.NUDE: set_sim_top_underwear_state(target, False) TurboSimUtil.Interaction.push_affordance( target, SimInteraction.WW_EXHIBITIONISM_UNDRESS_OUTFIT_TOP if is_sim_exhibitionist(target) else SimInteraction.WW_NATURISM_UNDRESS_OUTFIT_TOP, interaction_context=TurboInteractionUtil.InteractionContext. SOURCE_SCRIPT, insert_strategy=TurboInteractionUtil.QueueInsertStrategy.NEXT, must_run_next=True, priority=TurboInteractionUtil.Priority.High) return True if get_sim_body_state(target, 7) != BodyState.NUDE: set_sim_bottom_underwear_state(target, False) TurboSimUtil.Interaction.push_affordance( target, SimInteraction.WW_EXHIBITIONISM_UNDRESS_OUTFIT_BOTTOM if is_sim_exhibitionist(target) else SimInteraction.WW_NATURISM_UNDRESS_OUTFIT_BOTTOM, interaction_context=TurboInteractionUtil.InteractionContext. SOURCE_SCRIPT, insert_strategy=TurboInteractionUtil.QueueInsertStrategy.NEXT, must_run_next=True, priority=TurboInteractionUtil.Priority.High) return True return False
def test_sim_nudity_permission(sim): if CNSimUtils.is_toddler(sim): return False if CNSimUtils.can_have_sex(sim): return False if sim_ev(sim).is_flashing is True or sim_ev( sim).on_toilet_outfit_state != -1 or sim_ev( sim).on_breast_feeding_outfit_state != -1: return False if not is_sim_in_special_outfit(sim): return False sim_outfit_level = get_sim_outfit_level(sim) if sim_outfit_level != OutfitLevel.NUDE: return False if not is_sim_available(sim): return False for interaction_id in TurboSimUtil.Interaction.get_running_interactions_ids( sim): if interaction_id in NUDITY_EXCEPTION_INTERACTIONS: return for interaction_id in TurboSimUtil.Interaction.get_queued_interactions_ids( sim): if interaction_id in NUDITY_EXCEPTION_INTERACTIONS: return (has_permission, denied_permissions) = has_sim_permission_for_nudity(sim) if has_permission is True: return False sim_ev(sim).last_nudity_denied_permissions = denied_permissions if is_sim_exhibitionist(sim): dress_up_interaction = SimInteraction.WW_EXHIBITIONISM_FORCE_DRESS_UP else: dress_up_interaction = SimInteraction.WW_NATURISM_FORCE_DRESS_UP TurboSimUtil.Interaction.push_affordance( sim, dress_up_interaction, interaction_context=TurboInteractionUtil.InteractionContext. SOURCE_AUTONOMY, insert_strategy=TurboInteractionUtil.QueueInsertStrategy.NEXT, must_run_next=True, run_priority=TurboInteractionUtil.Priority.High, priority=TurboInteractionUtil.Priority.High, skip_if_running=True) 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 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 get_score(cls, resolver): yield_to_irq() sim = resolver.get_participant(ParticipantType.Actor) if has_sim_permission_for_nudity(sim)[0]: return 100 return 0
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 _wickedwhims_undress_swimwear_on_jumping_to_water(interaction_instance): if not get_nudity_setting(NuditySetting.NUDITY_SWITCH_STATE, variable_type=bool): return interaction_guid = TurboResourceUtil.Resource.get_guid64( interaction_instance) if interaction_guid not in JUMPING_INTERACTIONS: return sim_info = TurboManagerUtil.Sim.get_sim_info( TurboInteractionUtil.get_interaction_sim(interaction_instance)) if TurboSimUtil.Age.is_younger_than(sim_info, TurboSimUtil.Age.CHILD): return if get_modified_outfit( sim_info)[0] != TurboCASUtil.OutfitCategory.SWIMWEAR: return if is_sim_outfit_fullbody(sim_info): return if random.uniform(0, 1) > 0.1: return has_stripped = False if TurboSimUtil.Gender.is_male(sim_info): if get_sim_body_state(sim_info, 7) != BodyState.OUTFIT: return strip_result = strip_outfit(sim_info, strip_type_bottom=StripType.NUDE) if strip_result is True: set_sim_bottom_naked_state(sim_info, True) has_stripped = True else: can_undress_top = get_sim_body_state(sim_info, 6) == BodyState.OUTFIT can_undress_bottom = get_sim_body_state(sim_info, 7) == BodyState.OUTFIT undress_top = False undress_bottom = False if can_undress_top is True and can_undress_bottom is True: if bool(random.getrandbits(1)): undress_top = True else: undress_bottom = True elif can_undress_top is True: undress_top = True elif can_undress_bottom is True: undress_bottom = True if undress_top is False and undress_bottom is False: return if undress_top is True: strip_result = strip_outfit(sim_info, strip_type_top=StripType.NUDE) if strip_result is True: set_sim_top_naked_state(sim_info, True) has_stripped = True elif undress_bottom is True: strip_result = strip_outfit(sim_info, strip_type_bottom=StripType.NUDE) if strip_result is True: set_sim_bottom_naked_state(sim_info, True) has_stripped = True if has_stripped is True: display_notification(text=267480274, text_tokens=(sim_info, ), secondary_icon=sim_info) if not has_sim_permission_for_nudity(sim_info)[0]: add_sim_buff(sim_info, SimBuff.OBJECT_JUMPSTAND_SWIMSUITMALFUNCTION) if random.uniform(0, 1) <= 0.45: add_sim_buff(sim_info, SimBuff.WW_NUDITY_TEMPORARY_BRAVE)