def _try_to_take_and_use_condoms(sim_identifier): sim = TurboManagerUtil.Sim.get_sim_instance(sim_identifier) if sim is None: return (False, 0) if sim_ev(sim).active_sex_handler is None: return (False, 0) sims_that_can_impregnate_list = list() for actor_sim in sim_ev(sim).active_sex_handler.get_actors_sim_info_gen(): while sim_ev(actor_sim).has_condom_on is False and has_sim_trait( actor_sim, SimTrait.GENDEROPTIONS_PREGNANCY_CANIMPREGNATE): sims_that_can_impregnate_list.append(actor_sim) if not sims_that_can_impregnate_list: return (False, 0) condoms_count = get_object_amount_in_sim_inventory( sim, CONDOM_WRAPPER_OBJECT_ID) if condoms_count < len(sims_that_can_impregnate_list): return (False, condoms_count) if not remove_object_from_sim_inventory( sim, CONDOM_WRAPPER_OBJECT_ID, len(sims_that_can_impregnate_list)): return (False, len(sims_that_can_impregnate_list)) for actor_sim in sims_that_can_impregnate_list: sim_ev(actor_sim).has_condom_on = True _update_sim_condom_status_buff(actor_sim) increase_sim_ww_statistic(actor_sim, 'times_used_contraception') return (True, len(sims_that_can_impregnate_list))
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)
def _test_join_to_sex_single_interaction(interaction_sim, interaction_target, sex_category_types): ''' :param interaction_sim: Sim that wants to join to an existing sex interaction :param interaction_target: Sim that owns an existing interaction ''' if interaction_target is None or not TurboTypesUtil.Sims.is_sim(interaction_target): return False if sim_ev(interaction_target).active_sex_handler is None: return False if not is_sim_ready_for_sex(interaction_sim): return False active_sex_handler = sim_ev(interaction_target).active_sex_handler if sim_ev(interaction_target).active_pre_sex_handler is not None and sim_ev(interaction_target).active_pre_sex_handler.get_identifier() != active_sex_handler.get_identifier(): return False genders_list = list() for actor_sim_info in active_sex_handler.get_actors_sim_info_gen(): genders_list.append(get_sim_sex_gender(actor_sim_info)) genders_list.append(get_sim_sex_gender(interaction_sim)) has_animations = False for sex_category_type in sex_category_types: while has_animations_with_params(sex_category_type, active_sex_handler.get_object_identifier(), genders_list): has_animations = True break if has_animations is False: return False test_incest_of_sims = () if get_relationship_setting(RelationshipSetting.INCEST_STATE, variable_type=bool) else tuple(active_sex_handler.get_actors_sim_info_gen()) (min_age_limit, max_age_limit) = get_age_limits_for_sex(tuple(active_sex_handler.get_actors_sim_info_gen())) skip_sims_ids = [TurboManagerUtil.Sim.get_sim_id(actor_sim_info) for actor_sim_info in active_sex_handler.get_actors_sim_info_gen()] target_sim_id = TurboManagerUtil.Sim.get_sim_id(interaction_sim) for sim_id in get_sims_for_sex(relative_sims=test_incest_of_sims, min_sims_age=min_age_limit, max_sims_age=max_age_limit, skip_sims_ids=skip_sims_ids): while sim_id == target_sim_id: return True return False
def _is_only_mixer_reaction(sim): is_ready_for_inner = sim_ev(sim).inner_cum_reaction_cooldown <= 0 if is_ready_for_inner is True and 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.GYMTRAINER_VENUE, SimSituation.MAID_SITUATION, SimSituation.MAILMAN_SITUATION, SimSituation.PIZZADELIVERY_NEW, SimSituation.REPAIR_SITUATION, SimSituation.MASSAGETHERAPIST_VENUE, SimSituation.MASSAGETHERAPIST_SERVICECALL, SimSituation.CHEFSITUATION, SimSituation.HOST_1, SimSituation.RESTAURANT_WAITSTAFF, 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)): return True is_ready_for_full = sim_ev(sim).full_cum_reaction_cooldown <= 0 if is_ready_for_full is False: return True return False
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 not get_sex_setting(SexSetting.MANUAL_NPC_SEX_STATE, variable_type=bool): if sim_ev(cls.get_interaction_sim( interaction_context)).active_sex_handler is None: return False if sim_ev(cls.get_interaction_sim( interaction_context)).active_sex_handler is not sim_ev( interaction_target).active_sex_handler: return False elif sim_ev(interaction_target).active_sex_handler is None: return False active_sex_handler = sim_ev(interaction_target).active_sex_handler target_actor_id = active_sex_handler.get_actor_id_by_sim_id( TurboManagerUtil.Sim.get_sim_id(interaction_target)) target_actor_data = active_sex_handler.get_animation_instance( ).get_actor(target_actor_id) if target_actor_data is None: return False for (actor_id, actor_sim) in active_sex_handler.get_sims_list(): if actor_id == target_actor_id: pass actor_data = active_sex_handler.get_animation_instance().get_actor( actor_id) if actor_data is None: return False while is_compatible_actor(actor_sim, actor_data, interaction_target, target_actor_data): return True return False
def _is_sim_on_birth_control(sim_identifier): if get_sex_setting(SexSetting.BIRTH_CONTROL_MODE, variable_type=int) == BirthControlModeSetting.PERFECT: if has_sim_trait(sim_identifier, SimTrait.GENDEROPTIONS_PREGNANCY_CANIMPREGNATE ) and sim_ev(sim_identifier).has_condom_on is True: return True if has_sim_trait( sim_identifier, SimTrait.GENDEROPTIONS_PREGNANCY_CANBEIMPREGNATED ) and sim_ev( sim_identifier ).day_used_birth_control_pills == TurboWorldUtil.Time.get_absolute_days( ): return True return False if get_sex_setting(SexSetting.BIRTH_CONTROL_MODE, variable_type=int) == BirthControlModeSetting.REALISTIC: random_inst = random.Random( (TurboWorldUtil.Time.get_absolute_days() + TurboWorldUtil.Time.get_absolute_hours()) * 768) if has_sim_trait(sim_identifier, SimTrait.GENDEROPTIONS_PREGNANCY_CANIMPREGNATE ) and sim_ev(sim_identifier).has_condom_on is True: return random_inst.uniform(0, 1) < 0.95 if has_sim_trait( sim_identifier, SimTrait.GENDEROPTIONS_PREGNANCY_CANBEIMPREGNATED ) and sim_ev( sim_identifier ).day_used_birth_control_pills == TurboWorldUtil.Time.get_absolute_days( ): return random_inst.uniform(0, 1) < 0.91 return False return False
def try_to_take_and_use_condoms(sim_identifier, silent_failure=False): sim_info = TurboManagerUtil.Sim.get_sim_info(sim_identifier) (result, amount) = _try_to_take_and_use_condoms(sim_info) if sim_ev(sim_info).active_sex_handler is not None and not sim_ev( sim_info).active_sex_handler.is_npc_only(): if result: if amount == 1: display_notification(text=4082674743, text_tokens=(sim_info, ), title=1873179704, secondary_icon=sim_info) else: display_notification(text=2429963938, text_tokens=(str(amount), sim_info), title=1873179704, secondary_icon=sim_info) if silent_failure is False: display_notification(text=3990632821, title=1873179704, secondary_icon=sim_info) elif silent_failure is False: display_notification(text=3990632821, title=1873179704, secondary_icon=sim_info) return result
def on_interaction_start(cls, interaction_instance): sim = cls.get_interaction_sim(interaction_instance) pre_sex_handler = sim_ev(sim).active_pre_sex_handler sim_ev(sim).is_ready_to_sex = True if pre_sex_handler is None: clear_sim_sex_extra_data(sim, only_pre_active_data=True) unprepare_npc_sim_from_sex(sim) return False if not _attempt_sex_init(pre_sex_handler): result = TurboSimUtil.Interaction.push_affordance( sim, SimInteraction.WW_WAIT_FOR_SEX_PARTNER, insert_strategy=TurboInteractionUtil.QueueInsertStrategy.FIRST, run_priority=TurboInteractionUtil.Priority.Critical, priority=TurboInteractionUtil.Priority.Critical, skip_if_running=True) if result: sim_ev( sim ).in_sex_process_interaction = TurboInteractionUtil.get_interaction_from_enqueue_result( result) cls.cancel_interaction( interaction_instance, finishing_type=TurboInteractionUtil.FinishingType.NATURAL) else: interaction_instance.has_proceeded = True
def _wickedwhims_restart_sex_handlers_on_first_load(): if has_game_loaded(): return for sim in TurboManagerUtil.Sim.get_all_sim_instance_gen(humans=True, pets=False): while sim_ev(sim).active_sex_handler is not None: sim_ev(sim).active_sex_handler.restart()
def update_sim_condom_state(sim_identifier): sim_info = TurboManagerUtil.Sim.get_sim_info(sim_identifier) if sim_ev(sim_info).has_condom_on is True and sim_ev( sim_info).active_sex_handler is None and sim_ev( sim_info).active_pre_sex_handler is None: sim_ev(sim_info).has_condom_on = False _update_sim_condom_status_buff(sim_info)
def _can_sim_receive_cum(interaction_sim, interaction_target, cum_type): if interaction_target is None or not TurboTypesUtil.Sims.is_sim(interaction_target): return False if not get_sex_setting(SexSetting.MANUAL_NPC_SEX_STATE, variable_type=bool): if sim_ev(interaction_sim).active_sex_handler is None: return False if sim_ev(interaction_sim).active_sex_handler is not sim_ev(interaction_target).active_sex_handler: return False elif sim_ev(interaction_target).active_sex_handler is None: return False active_sex_handler = sim_ev(interaction_target).active_sex_handler if active_sex_handler.is_at_climax is False: return False if cum_type == CumLayerType.V****A and has_sim_trait(interaction_target, SimTrait.GENDEROPTIONS_TOILET_STANDING): return False has_sim_that_can_cum = False for actor_sim_info in active_sex_handler.get_actors_sim_info_gen(): if TurboManagerUtil.Sim.get_sim_id(actor_sim_info) == TurboManagerUtil.Sim.get_sim_id(interaction_target): pass if not has_sim_trait(actor_sim_info, SimTrait.GENDEROPTIONS_TOILET_STANDING): pass has_sim_that_can_cum = True break if has_sim_that_can_cum is False: return False if has_sim_cas_part_id(interaction_target, get_cum_layer_cas_id(cum_type)): return False return True
def _start_solo_sex_interaction(pre_sex_handler): creator_sim = TurboManagerUtil.Sim.get_sim_instance( pre_sex_handler.get_creator_sim_id()) if creator_sim is None: clear_sim_sex_extra_data( TurboManagerUtil.Sim.get_sim_info( pre_sex_handler.get_creator_sim_id())) return False sim_ev(creator_sim).is_in_process_to_sex = True for interaction_id in TurboSimUtil.Interaction.get_queued_interactions_ids( creator_sim): TurboSimUtil.Interaction.cancel_queued_interaction( creator_sim, interaction_id) TurboSimUtil.Interaction.unlock_queue(creator_sim) TurboSimUtil.Routing.refresh_portals(creator_sim) result = TurboSimUtil.Interaction.push_affordance( creator_sim, SimInteraction.WW_ROUTE_TO_SEX_LOCATION, insert_strategy=TurboInteractionUtil.QueueInsertStrategy.FIRST, run_priority=TurboInteractionUtil.Priority.Critical, priority=TurboInteractionUtil.Priority.Critical) if result: sim_ev( creator_sim ).in_sex_process_interaction = TurboInteractionUtil.get_interaction_from_enqueue_result( result) return bool(result)
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 _change_sex(interaction_sim, sex_category_type): sex_allowed = is_sim_allowed_for_animation(sim_ev(interaction_sim).active_sex_handler.get_actors_sim_info_gen(), sex_category_type) if not sex_allowed: display_not_allowed_message(sex_allowed) return False open_change_sex_animations_picker_dialog(sim_ev(interaction_sim).active_sex_handler, sex_category_type) return True
def clear_sim_sex_extra_data(sim_identifier, only_active_data=False, only_pre_active_data=False): sim_info = TurboManagerUtil.Sim.get_sim_info(sim_identifier) if only_pre_active_data is False: sim_ev(sim_info).is_playing_sex = False sim_ev(sim_info).active_sex_handler_identifier = '-1' sim_ev(sim_info).active_sex_handler = None sim_ev(sim_info).sim_sex_state_snapshot = dict() sim_ev(sim_info).sim_immutable_sex_state_snapshot = dict() set_sim_statistic_value(sim_info, 0, SimCommodity.WW_READY_TO_CLIMAX) if is_main_debug_flag_enabled(): display_notification(text='Cleared Sim Active Sex Data', title='Sex Extra Data Clear', secondary_icon=sim_info) if only_active_data is False: sim_ev(sim_info).has_setup_sex = False sim_ev(sim_info).active_pre_sex_handler = None sim_ev(sim_info).is_ready_to_sex = False sim_ev(sim_info).is_in_process_to_sex = False sim_ev(sim_info).in_sex_process_interaction = None set_sim_statistic_value(sim_info, 0, SimCommodity.WW_IS_SIM_IN_SEX) if is_main_debug_flag_enabled(): display_notification(text='Cleared Sim Pre Sex Data', title='Sex Extra Data Clear', secondary_icon=sim_info)
def on_building_basic_elements(cls, interaction_instance, sequence): sim = cls.get_interaction_sim(interaction_instance) is_autonomy = cls.get_interaction_source( interaction_instance ) == TurboInteractionUtil.InteractionSource.AUTONOMY if TurboSimUtil.Sim.is_player(sim) and is_autonomy: text_tokens = [sim] if is_autonomy is True and sim_ev( sim).last_nudity_denied_permissions is not None: for denied_permission in sim_ev( sim).last_nudity_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=2998371344, text_tokens=text_tokens, icon=sim, sims=(sim, ), is_autonomy=is_autonomy) sim_ev(sim).last_nudity_denied_permissions = None outfit_category_and_index = dress_up_outfit(sim, skip_outfit_change=True) return TurboSimUtil.CAS.get_change_outfit_element( sim, outfit_category_and_index, do_spin=True, interaction=interaction_instance, dirty_outfit=True)
def get_sim_additional_body_state(sim_identifier, bodytype, bodystate, outfit_category_and_index=None): sim_info = TurboManagerUtil.Sim.get_sim_info(sim_identifier) if bodytype in sim_ev(sim_info).additional_body_state_cache: return sim_ev(sim_info).additional_body_state_cache[bodytype] result = _get_sim_additional_body_state(sim_info, bodytype, bodystate, outfit_category_and_index=outfit_category_and_index) sim_ev(sim_info).additional_body_state_cache[bodytype] = result return result
def _cum_reaction(sim, target, only_mixer=False): si_result = TurboSimUtil.Interaction.push_affordance( sim, SimInteraction.WW_SEX_CUM_REACTION, target=target, interaction_context=TurboInteractionUtil.InteractionContext. SOURCE_SCRIPT, insert_strategy=TurboInteractionUtil.QueueInsertStrategy.NEXT ) if only_mixer is False else None if not si_result and ( si_result is None or TurboInteractionUtil.can_interaction_fallback_to_mixer_interaction( sim, si_result.execute_result.interaction)): si_result = TurboSimUtil.Interaction.push_affordance( sim, SimInteraction.WW_SEX_CUM_REACTION_MIXER, target=target, interaction_context=TurboInteractionUtil.InteractionContext. SOURCE_REACTION, insert_strategy=TurboInteractionUtil.QueueInsertStrategy.NEXT) if si_result: cooldown_offset = random.randint(-1, 2) sim_ev(sim).full_cum_reaction_cooldown = 12 + cooldown_offset sim_ev(sim).inner_cum_reaction_cooldown = 6 + cooldown_offset return True return False
def reset_pregnancy_boost_data(sim_identifier): absolute_days = TurboWorldUtil.Time.get_absolute_days( ) + ABSOLUTE_DAYS_OFFSET menstrual_cycle_days = get_sim_menstrual_cycle_days(sim_identifier) if absolute_days > sim_ev(sim_identifier).pregnancy_fertility_boost[ 0] + menstrual_cycle_days: sim_ev(sim_identifier).pregnancy_fertility_boost = (0, 1.0)
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): sim = cls.get_interaction_sim(interaction_instance) target = cls.get_interaction_target(interaction_instance) pre_sex_handler = sim_ev(sim).active_pre_sex_handler if pre_sex_handler is None or target is None: clear_sim_sex_extra_data(sim) if target is not None: clear_sim_sex_extra_data(target) return False apply_asking_for_woohoo_relations(sim, target, True) for actor_sim in pre_sex_handler.get_actors_sim_instance_gen(): sim_ev(actor_sim).is_in_process_to_sex = True sim_ev(actor_sim).active_pre_sex_handler = pre_sex_handler prepare_npc_sim_to_sex(actor_sim) TurboSimUtil.Routing.refresh_portals(actor_sim) TurboSimUtil.Interaction.unlock_queue(actor_sim) result = TurboSimUtil.Interaction.push_affordance( actor_sim, SimInteraction.WW_ROUTE_TO_SEX_LOCATION, insert_strategy=TurboInteractionUtil.QueueInsertStrategy.FIRST, priority=TurboInteractionUtil.Priority.Critical, run_priority=TurboInteractionUtil.Priority.Critical) while result: sim_ev( actor_sim ).in_sex_process_interaction = TurboInteractionUtil.get_interaction_from_enqueue_result( result) return True
def apply_nudity_skill_influence(sim_identifier, amount, overall_limit=7.0): current_influence_score = sim_ev( sim_identifier).nudity_skill_influence_score if current_influence_score <= overall_limit: current_influence_score += amount sim_ev(sim_identifier ).nudity_skill_influence_score = current_influence_score
def update_sim_nudity_skill_on_mirror_use(sim_identifier): if sim_ev(sim_identifier ).is_running_mirror_nudity_skill_interaction is False: return if not TurboSimUtil.Interaction.is_running_interaction( sim_identifier, SimInteraction.WW_MIRROR_ADMIRE_YOUR_BODY): sim_ev( sim_identifier).is_running_mirror_nudity_skill_interaction = False return sim_outfit_level = get_sim_outfit_level(sim_identifier) sim_nudity_skill_level = get_sim_nudity_skill_level(sim_identifier) if sim_outfit_level == OutfitLevel.NUDE or sim_outfit_level == OutfitLevel.BATHING: increase_sim_nudity_skill( sim_identifier, get_nudity_skill_points_modifier( NuditySkillIncreaseReason.MIRROR_NAKED_OUTFIT) / sim_nudity_skill_level, extra_fatigue=0.2, reason=NuditySkillIncreaseReason.MIRROR_NAKED_OUTFIT) else: increase_sim_nudity_skill( sim_identifier, get_nudity_skill_points_modifier( NuditySkillIncreaseReason.MIRROR_REVEALING_OUTFIT) / sim_nudity_skill_level, extra_fatigue=0.05, reason=NuditySkillIncreaseReason.MIRROR_REVEALING_OUTFIT)
def reset_mod_on_update(): if HAS_UPDATED_THE_MOD is False: return display_notification(text=4037785225, text_tokens=(get_mod_version_str(), ), title='WickedWhims', information_level=TurboUIUtil.Notification. UiDialogNotificationLevel.PLAYER, is_safe=True) reset_active_sex_handlers() from wickedwhims.sex.sex_operators.general_sex_handlers_operator import clear_sim_sex_extra_data for sim_info in TurboManagerUtil.Sim.get_all_sim_info_gen(humans=True, pets=False): pre_sex_handler = sim_ev(sim_info).active_pre_sex_handler active_sex_handler = sim_ev(sim_info).active_sex_handler clear_sim_sex_extra_data(sim_info) try: while active_sex_handler is not None: active_sex_handler.stop(hard_stop=True, is_end=True, stop_reason='On stop sex command.') except: pass while pre_sex_handler is not None or active_sex_handler is not None: if not TurboSimUtil.CAS.has_outfit( sim_info, (TurboCASUtil.OutfitCategory.EVERYDAY, 0)): TurboSimUtil.CAS.generate_outfit( sim_info, (TurboCASUtil.OutfitCategory.EVERYDAY, 0)) TurboSimUtil.CAS.set_current_outfit( sim_info, (TurboCASUtil.OutfitCategory.EVERYDAY, 0)) TurboSimUtil.CAS.update_previous_outfit(sim_info) TurboSimUtil.Sim.reset_sim(sim_info)
def _has_outfit_parts_to_undress(interaction_sim, interaction_target, body_types): if interaction_target is None or not TurboTypesUtil.Sims.is_sim( interaction_target): return False if not get_sex_setting(SexSetting.INSTANT_UNDRESSING_STATE, variable_type=bool): if not get_sex_setting(SexSetting.MANUAL_NPC_SEX_STATE, variable_type=bool): if sim_ev(interaction_sim).active_sex_handler is None: return False if sim_ev(interaction_sim).active_sex_handler is not sim_ev( interaction_target).active_sex_handler: return False if sim_ev(interaction_target).active_sex_handler is None: return False elif sim_ev(interaction_target).active_sex_handler is None: return False for body_type in body_types: body_state = get_sim_actual_body_state(interaction_target, body_type) if body_state == BodyState.NUDE: pass part_id = get_sim_outfit_cas_part_from_bodytype( interaction_target, body_type) if part_id == -1: pass return False
def on_interaction_start(cls, interaction_instance): target = cls.get_interaction_target(interaction_instance) if get_nudity_setting( NuditySetting.COMPLETE_UNDRESSING_TYPE, variable_type=int) == CompleteUndressingTypeSetting.DEFAULT: reset_sim_bathing_outfits(target) copy_outfit_to_special( target, set_special_outfit=True, outfit_category_and_index=(TurboCASUtil.OutfitCategory.BATHING, 0), override_outfit_parts={ 115: sim_ev(target).nude_outfit_parts[115] }) else: copy_outfit_to_special( target, set_special_outfit=True, outfit_category_and_index=get_modified_outfit(target), override_outfit_parts={ TurboCASUtil.BodyType.UPPER_BODY: sim_ev(target).nude_outfit_parts[ TurboCASUtil.BodyType.UPPER_BODY], TurboCASUtil.BodyType.LOWER_BODY: sim_ev(target).nude_outfit_parts[ TurboCASUtil.BodyType.LOWER_BODY], TurboCASUtil.BodyType.SHOES: sim_ev(target).nude_outfit_parts[ TurboCASUtil.BodyType.SHOES], TurboCASUtil.BodyType.FULL_BODY: 0, TurboCASUtil.BodyType.HAT: 0, TurboCASUtil.BodyType.CUMMERBUND: 0, TurboCASUtil.BodyType.EARRINGS: 0, TurboCASUtil.BodyType.GLASSES: 0, TurboCASUtil.BodyType.NECKLACE: 0, TurboCASUtil.BodyType.GLOVES: 0, TurboCASUtil.BodyType.WRIST_LEFT: 0, TurboCASUtil.BodyType.WRIST_RIGHT: 0, TurboCASUtil.BodyType.SOCKS: 0, TurboCASUtil.BodyType.TIGHTS: 0, 115: sim_ev(target).nude_outfit_parts[115] }) set_sim_top_naked_state(target, True) set_sim_bottom_naked_state(target, True) set_sim_top_underwear_state(target, False) set_sim_bottom_underwear_state(target, False) return True
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 sim_ev(interaction_target).active_sex_handler is None: return False if sim_ev(cls.get_interaction_sim(interaction_context)).active_sex_handler is sim_ev(interaction_target).active_sex_handler: return False return True
def _update_and_get_influence_score(sim_info): influence_score = 7 if sim_ev( sim_info).nudity_skill_influence_score >= 7 else sim_ev( sim_info).nudity_skill_influence_score sim_ev(sim_info).nudity_skill_influence_score = max( 0, sim_ev(sim_info).nudity_skill_influence_score - influence_score) return influence_score
def _wickedwhims_init_ev_variables(sim_info): if sim_ev(sim_info).is_ready(): return sim_ev(sim_info).unready() init_main_sim_ev_data(sim_info) init_nudity_sim_ev_data(sim_info) init_sex_sim_ev_data(sim_info) sim_ev(sim_info).ready()
def _test_for_broken_sex_interaction(sim_identifier): sim = TurboManagerUtil.Sim.get_sim_instance(sim_identifier) if sim_ev(sim).active_sex_handler is None: return if sim_ev(sim).active_sex_handler.is_playing is True and not TurboSimUtil.Interaction.is_running_interaction(sim, SimInteraction.WW_SEX_ANIMATION_DEFAULT) and not TurboSimUtil.Interaction.has_queued_interaction(sim, SimInteraction.WW_SEX_ANIMATION_DEFAULT): if sim_ev(sim).active_sex_handler.one_second_counter > 3: display_notification(text=2431239863) sim_ev(sim).active_sex_handler.reset()