def update_sim_underwear_data(sim_identifier): sim_info = TurboManagerUtil.Sim.get_sim_info(sim_identifier) current_outfit_category = TurboSimUtil.CAS.get_current_outfit(sim_info)[0] if current_outfit_category == TurboCASUtil.OutfitCategory.SPECIAL: return from wickedwhims.nudity.nudity_settings import get_nudity_setting, NuditySetting if get_nudity_setting( NuditySetting.UNDERWEAR_SWITCH_STATE, variable_type=bool) and not has_sim_trait( sim_info, SimTrait.WW_NO_UNDERWEAR) and is_underwear_outfit( current_outfit_category): set_sim_top_underwear_state( sim_info, True if TurboSimUtil.Gender.is_female(sim_info) else False) set_sim_bottom_underwear_state(sim_info, True) top_state = get_sim_body_state(sim_info, 6) bottom_state = get_sim_body_state(sim_info, 7) if top_state == BodyState.UNDERWEAR: set_sim_top_underwear_state(sim_info, True) elif top_state == BodyState.NUDE: set_sim_top_underwear_state(sim_info, False) if bottom_state == BodyState.UNDERWEAR: set_sim_bottom_underwear_state(sim_info, True) else: set_sim_bottom_underwear_state(sim_info, False) else: set_sim_top_underwear_state(sim_info, False) set_sim_bottom_underwear_state(sim_info, False)
def on_building_basic_elements(cls, interaction_instance, sequence): sim = cls.get_interaction_sim(interaction_instance) top_body_state = get_sim_body_state(sim, TurboCASUtil.BodyType.UPPER_BODY) bottom_body_state = get_sim_body_state( sim, TurboCASUtil.BodyType.LOWER_BODY) strip_type_top = StripType.NUDE if top_body_state == BodyState.UNDERWEAR else StripType.NONE strip_type_bottom = StripType.NUDE if bottom_body_state == BodyState.UNDERWEAR else StripType.NONE strip_result = strip_outfit(sim, strip_type_top=strip_type_top, strip_type_bottom=strip_type_bottom, skip_outfit_change=True, save_original=False) if strip_result is True: set_sim_top_naked_state(sim, True) set_sim_bottom_naked_state(sim, True) set_sim_top_underwear_state(sim, False) set_sim_bottom_underwear_state(sim, False) nudity_notification( text=3110156917, text_tokens=(sim, ), icon=sim, sims=(sim, ), is_autonomy=cls.get_interaction_source(interaction_instance) == TurboInteractionUtil.InteractionSource.AUTONOMY) return TurboSimUtil.CAS.get_change_outfit_element( sim, (TurboCASUtil.OutfitCategory.SPECIAL, 0), do_spin=True, interaction=interaction_instance)
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 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 get_sim_body_state(sim, 6) == BodyState.OUTFIT and get_sim_body_state( sim, 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 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 _wickedwhims_undress_bottom_on_toilet_use(interaction_instance): global HAS_SIMS_USING_TOILET if not get_nudity_setting(NuditySetting.TOILET_USE_UNDRESS_STATE, variable_type=bool): return interaction_guid = TurboResourceUtil.Resource.get_guid64(interaction_instance) if interaction_guid not in TOILET_USE_INTERACTIONS: return HAS_SIMS_USING_TOILET = True sim = TurboInteractionUtil.get_interaction_sim(interaction_instance) if sim_ev(sim).on_toilet_outfit_state != OutfitStateBeforeToiletUse.NONE: return if TurboSimUtil.Age.is_younger_than(sim, TurboSimUtil.Age.CHILD): return if has_sim_outfit_bottom(sim): bottom_body_state = get_sim_body_state(sim, 7) if bottom_body_state != BodyState.NUDE: strip_result = strip_outfit(sim, strip_type_bottom=StripType.NUDE, allow_stripping_feet=False) if strip_result is True: sim_ev(sim).on_toilet_outfit_state = int(OutfitStateBeforeToiletUse.UNDERWEAR if bottom_body_state == BodyState.UNDERWEAR else OutfitStateBeforeToiletUse.OUTFIT) set_sim_bottom_naked_state(sim, True) set_sim_bottom_underwear_state(sim, False) else: sim_ev(sim).on_toilet_outfit_state = int(OutfitStateBeforeToiletUse.NONE) else: top_state = StripType.NUDE if TurboSimUtil.Gender.is_male(sim) else StripType.UNDERWEAR if is_sim_top_underwear(sim) else StripType.NUDE strip_result = strip_outfit(sim, strip_type_top=top_state, strip_type_bottom=StripType.NUDE) if is_sim_outfit_fullbody(sim) and strip_result is True: sim_ev(sim).on_toilet_outfit_state = int(OutfitStateBeforeToiletUse.OUTFIT) set_sim_top_naked_state(sim, True) set_sim_bottom_naked_state(sim, True) set_sim_bottom_underwear_state(sim, False)
def set_sim_penis_state(sim_identifier, is_hard, length, set_if_nude=False, force=False): sim_info = TurboManagerUtil.Sim.get_sim_info(sim_identifier) if not has_sim_trait(sim_info, SimTrait.GENDEROPTIONS_TOILET_STANDING): return has_to_update_state = sim_ev( sim_info).is_penis_hard != is_hard or force is True sim_ev(sim_info).is_penis_hard = is_hard sim_ev(sim_info).penis_hard_cooldown = length if has_to_update_state is True: update_nude_body_data(sim_info, force_update=True) current_outfit = TurboSimUtil.CAS.get_current_outfit(sim_info) if set_if_nude is True and ( current_outfit[0] == TurboCASUtil.OutfitCategory.SPECIAL and current_outfit[1] == 0 or current_outfit[0] == TurboCASUtil.OutfitCategory.BATHING): bottom_body_state = get_sim_body_state( sim_info, TurboCASUtil.BodyType.LOWER_BODY) if bottom_body_state == BodyState.NUDE: set_bodytype_caspart(sim_info, (TurboCASUtil.OutfitCategory.SPECIAL, 0), TurboCASUtil.BodyType.LOWER_BODY, sim_ev(sim_info).nude_outfit_parts[7]) update_sim_penis_texture(sim_info) try: TurboSimUtil.CAS.refresh_outfit(sim_info) except: pass
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 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
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 get_sim_body_state( sim, TurboCASUtil.BodyType.LOWER_BODY) == BodyState.UNDERWEAR return get_sim_body_state( sim, TurboCASUtil.BodyType.UPPER_BODY ) == BodyState.UNDERWEAR and get_sim_body_state( sim, TurboCASUtil.BodyType.LOWER_BODY) == BodyState.UNDERWEAR
def on_interaction_start(cls, interaction_instance): target = cls.get_interaction_target(interaction_instance) strip_type_top = StripType.NUDE if get_sim_body_state( target, TurboCASUtil.BodyType.UPPER_BODY ) == BodyState.UNDERWEAR else StripType.UNDERWEAR if TurboSimUtil.Gender.is_female( target) and is_underwear_outfit( get_modified_outfit(target)[0]) else StripType.NUDE strip_type_bottom = StripType.NUDE if get_sim_body_state( target, TurboCASUtil.BodyType.LOWER_BODY ) == BodyState.UNDERWEAR else StripType.UNDERWEAR if is_underwear_outfit( get_modified_outfit(target)[0]) else StripType.NUDE strip_outfit(target, strip_type_top=strip_type_top, strip_type_bottom=strip_type_bottom) set_sim_top_naked_state(target, strip_type_top == StripType.NUDE) set_sim_top_underwear_state(target, strip_type_top != StripType.NUDE) set_sim_bottom_naked_state(target, strip_type_bottom == StripType.NUDE) set_sim_bottom_underwear_state(target, strip_type_bottom != StripType.NUDE) 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 put_sim_underwear_on(sim_identifier, skip_outfit_change=False): sim_info = TurboManagerUtil.Sim.get_sim_info(sim_identifier) set_sim_top_naked_state(sim_info, False) set_sim_bottom_naked_state(sim_info, False) set_sim_top_underwear_state(sim_info, True) set_sim_bottom_underwear_state(sim_info, True) top_outfit_type = StripType.UNDERWEAR if TurboSimUtil.Gender.is_female( sim_info) and get_sim_body_state( sim_info, 6) == BodyState.NUDE else StripType.NONE bottom_outfit_type = StripType.UNDERWEAR if get_sim_actual_body_state( sim_info, 7) == BodyState.NUDE else StripType.NONE strip_outfit(sim_info, strip_type_top=top_outfit_type, strip_type_bottom=bottom_outfit_type, skip_outfit_change=skip_outfit_change, save_original=False)
def _wickedwhims_undress_top_on_breast_feeding(interaction_instance): if not get_nudity_setting(NuditySetting.BREAST_FEEDING_UNDRESS_STATE, variable_type=bool): return interaction_guid = TurboResourceUtil.Resource.get_guid64( interaction_instance) if interaction_guid != BREAST_FEEDING_INTERACTIONS: return sim = TurboInteractionUtil.get_interaction_sim(interaction_instance) if sim_ev( sim ).on_breast_feeding_outfit_state != OutfitStateBeforeBreastFeeding.NONE: return if TurboSimUtil.Age.is_younger_than(sim, TurboSimUtil.Age.CHILD): return if has_sim_outfit_top(sim): top_body_state = get_sim_body_state(sim, 6) if top_body_state != BodyState.NUDE: strip_result = strip_outfit(sim, strip_type_top=StripType.NUDE, allow_stripping_gloves=False) if strip_result is True: sim_ev(sim).on_breast_feeding_outfit_state = int( OutfitStateBeforeBreastFeeding. UNDERWEAR if top_body_state == BodyState. UNDERWEAR else OutfitStateBeforeBreastFeeding.OUTFIT) set_sim_top_naked_state(sim, True) set_sim_top_underwear_state(sim, False) else: sim_ev(sim).on_breast_feeding_outfit_state = int( OutfitStateBeforeBreastFeeding.NONE) else: bottom_state = StripType.UNDERWEAR if is_sim_bottom_underwear( sim) else StripType.NUDE strip_result = strip_outfit(sim, strip_type_top=StripType.NUDE, strip_type_bottom=bottom_state) if is_sim_outfit_fullbody(sim) and strip_result is True: sim_ev(sim).on_breast_feeding_outfit_state = int( OutfitStateBeforeBreastFeeding.OUTFIT) set_sim_top_naked_state(sim, True) set_sim_top_underwear_state(sim, False) set_sim_bottom_naked_state(sim, True)
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)
def on_interaction_start(cls, interaction_instance): sim = cls.get_interaction_target(interaction_instance) nudity_debug_info = '' nudity_debug_info += 'Body States:\n' nudity_debug_info += ' Top: ' + str(get_sim_body_state(sim, 6)) + '\n' nudity_debug_info += ' Bottom: ' + str(get_sim_body_state(sim, 7)) + '\n' nudity_debug_info += '\nBody Additional States:\n' nudity_debug_info += ' Top: ' + str( get_sim_additional_body_state(sim, 6, get_sim_body_state( sim, 6))) + '\n' nudity_debug_info += ' Bottom: ' + str( get_sim_additional_body_state(sim, 7, get_sim_body_state( sim, 7))) + '\n' nudity_debug_info += '\nBody Actual States:\n' nudity_debug_info += ' Top: ' + str(get_sim_actual_body_state( sim, 6)) + '\n' nudity_debug_info += ' Bottom: ' + str( get_sim_actual_body_state(sim, 7)) + '\n' nudity_debug_info += '\nOutfit Body Types:\n' nudity_debug_info += ' Has Top: ' + str( has_sim_outfit_top(sim)) + '\n' nudity_debug_info += ' Has Bottom: ' + str( has_sim_outfit_bottom(sim)) + '\n' nudity_debug_info += ' Has Full Body: ' + str( is_sim_outfit_fullbody(sim)) + '\n' nudity_debug_info += '\nNudity Outfit Parts:\n' nudity_debug_info += ' Top: ' + str( sim_ev(sim).nude_outfit_parts[6]) + '\n' nudity_debug_info += ' Bottom: ' + str( sim_ev(sim).nude_outfit_parts[7]) + '\n' nudity_debug_info += ' Feet: ' + str( sim_ev(sim).nude_outfit_parts[8]) + '\n' nudity_debug_info += ' Penis Texture: ' + str( sim_ev(sim).nude_outfit_parts[115]) + '\n' nudity_debug_info += '\nPenis Outfit Parts:\n' nudity_debug_info += ' Soft: ' + str( sim_ev(sim).penis_outfit_parts['soft']) + '\n' nudity_debug_info += ' Hard: ' + str( sim_ev(sim).penis_outfit_parts['hard']) + '\n' nudity_debug_info += '\nPenis Parts Authors:\n' nudity_debug_info += ' Soft: ' + str( sim_ev(sim).outfit_soft_penis_author) + '\n' nudity_debug_info += ' Hard: ' + str( sim_ev(sim).outfit_hard_penis_author) + '\n' nudity_debug_info += '\nPenis State:\n' nudity_debug_info += ' Is Hard: ' + str( sim_ev(sim).is_penis_hard) + '\n' nudity_debug_info += ' Penis Cooldown: ' + str( sim_ev(sim).penis_hard_cooldown) + '\n' nudity_debug_info += '\nOriginal Outfit Data:\n' nudity_debug_info += ' Has Modifications: ' + str( sim_ev(sim).has_original_outfit_modifications) + '\n' nudity_debug_info += ' Category: ' + str( sim_ev(sim).original_outfit_category) + '\n' nudity_debug_info += ' Index: ' + str( sim_ev(sim).original_outfit_index) + '\n' nudity_debug_info += ' Update Locked: ' + str( sim_ev(sim).is_outfit_update_locked) + '\n' nudity_debug_info += '\nNudity Skill:\n' nudity_debug_info += ' Is Naturist/Is Exhibitionist: ' + str( is_sim_naturist(sim)) + '/' + str(is_sim_exhibitionist(sim)) + '\n' nudity_debug_info += ' Level: ' + str( get_sim_nudity_skill_level(sim) + get_sim_nudity_skill_progress(sim)) + '\n' nudity_debug_info += ' Influence Score: ' + str( sim_ev(sim).nudity_skill_influence_score) + '\n' nudity_debug_info += ' Fatigue: ' + str( get_sim_statistic_value( sim, SimCommodity.WW_NUDITY_SKILL_FATIGUE)) + '\n' nudity_debug_info += '\nNudity Reaction:\n' nudity_debug_info += ' Full Reaction Cooldown: ' + str( sim_ev(sim).full_nudity_reaction_cooldown) + '\n' nudity_debug_info += ' Inner Reaction Cooldown: ' + str( sim_ev(sim).inner_nudity_reaction_cooldown) + '\n' nudity_debug_info += '\nSpecial:\n' nudity_debug_info += ' Is Flashing: ' + str( sim_ev(sim).is_flashing) + '\n' nudity_debug_info += ' Toilet Use Outfit State: ' + str( sim_ev(sim).on_toilet_outfit_state) + '\n' nudity_debug_info += ' Breast Feeding Outfit State: ' + str( sim_ev(sim).on_breast_feeding_outfit_state) + '\n' display_notification(text=nudity_debug_info, title=str(TurboSimUtil.Name.get_name(sim)[0]) + ' ' + str(TurboSimUtil.Name.get_name(sim)[1]) + ' Nudity Debug', secondary_icon=sim)
def is_strapon_on_sim(sim_identifier): sim_info = TurboManagerUtil.Sim.get_sim_info(sim_identifier) return get_sim_additional_body_state( sim_info, 7, get_sim_body_state(sim_info, 7)) == AdditionalBodyState.STRAPON