Ejemplo n.º 1
0
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)
Ejemplo n.º 3
0
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
Ejemplo n.º 4
0
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
Ejemplo n.º 5
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 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
Ejemplo n.º 7
0
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
Ejemplo n.º 8
0
 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
Ejemplo n.º 9
0
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()
Ejemplo n.º 10
0
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)
Ejemplo n.º 11
0
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)
Ejemplo n.º 13
0
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)
Ejemplo n.º 14
0
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)
Ejemplo n.º 16
0
 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)
Ejemplo n.º 17
0
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
Ejemplo n.º 18
0
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
Ejemplo n.º 19
0
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)
Ejemplo n.º 20
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
Ejemplo n.º 21
0
 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
Ejemplo n.º 22
0
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
Ejemplo n.º 23
0
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)
Ejemplo n.º 24
0
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)
Ejemplo n.º 25
0
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
Ejemplo n.º 26
0
 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
Ejemplo n.º 27
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 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
Ejemplo n.º 28
0
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
Ejemplo n.º 29
0
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()
Ejemplo n.º 30
0
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()