Ejemplo n.º 1
0
def _wickedwhims_block_sim_interaction_queue_during_sex(interaction_instance):
    interaction_guid = TurboResourceUtil.Resource.get_guid64(
        interaction_instance)
    sim = TurboInteractionUtil.get_interaction_sim(interaction_instance)
    target = TurboInteractionUtil.get_interaction_target(
        interaction_instance) if TurboTypesUtil.Sims.is_sim(
            TurboInteractionUtil.get_interaction_target(
                interaction_instance)) else None
    if _block_sim_interactions_during_sex(
            sim,
            interaction_guid) is False or _block_sim_interactions_during_sex(
                target, interaction_guid) is False:
        return False
    return True
Ejemplo n.º 2
0
def _wickedwhims_increase_sim_nudity_skill_on_related_interactions(interaction_instance):
    if not get_nudity_setting(NuditySetting.NUDITY_SWITCH_STATE, variable_type=bool):
        return
    interaction_guid = TurboResourceUtil.Resource.get_guid64(interaction_instance)
    sim = TurboInteractionUtil.get_interaction_sim(interaction_instance)
    for (interaction_id, direct_target, skill_points) in NUDE_REWARD_INTERACTION_IDS:
        if interaction_id != interaction_guid:
            continue
        if direct_target is True:
            target_sim = TurboInteractionUtil.get_interaction_target(interaction_instance) or sim
            if target_sim is None:
                target_sim = sim
        else:
            target_sim = sim
        if target_sim is None:
            return
        sim_info = TurboManagerUtil.Sim.get_sim_info(target_sim)
        if sim_info is None:
            return
        target_outfit_level = get_sim_outfit_level(target_sim)
        target_nudity_skill_level = get_sim_nudity_skill_level(target_sim)
        if target_outfit_level == OutfitLevel.NUDE or target_outfit_level == OutfitLevel.BATHING:
            increase_sim_nudity_skill(target_sim, skill_points, extra_fatigue=2.0)
        else:
            if target_outfit_level == OutfitLevel.REVEALING or target_outfit_level == OutfitLevel.UNDERWEAR:
                increase_sim_nudity_skill(target_sim, skill_points/target_nudity_skill_level, extra_fatigue=2.0)
Ejemplo n.º 3
0
def _wickedwhims_on_kiss_interactions_outcome(interaction_instance, outcome_result):
    if outcome_result:
        interaction_guid = TurboResourceUtil.Resource.get_guid64(interaction_instance)
        if interaction_guid in SIM_KISS_INTERACTIONS:
            sim_info = TurboManagerUtil.Sim.get_sim_info(TurboInteractionUtil.get_interaction_sim(interaction_instance))
            target_sim_info = TurboManagerUtil.Sim.get_sim_info(TurboInteractionUtil.get_interaction_target(interaction_instance))
            if target_sim_info is not None and (has_sim_trait(target_sim_info, SimTrait.WW_CUMSLUT) or has_sim_trait(target_sim_info, SimTrait.SLOB)):
                if has_sim_cas_part_id(sim_info, CUM_FACE_LAYER):
                    apply_sim_cum_layer(target_sim_info, (CumLayerType.FACE,))
def route_sim_away_from_interaction(source_interaction, target_sim):
    embarrassed_affordance = TurboResourceUtil.Services.get_instance(
        TurboResourceUtil.ResourceTypes.INTERACTION,
        SimInteraction.STAND_PASSIVE)
    privacy = Privacy(source_interaction, (), (), 8, 30, 0.35, 0.01, 0.1,
                      False, None, None, embarrassed_affordance, None)
    for sim in TurboManagerUtil.Sim.get_all_sim_instance_gen(humans=True,
                                                             pets=False):
        privacy.add_exempt_sim(sim)
    privacy.build_privacy(
        target=TurboInteractionUtil.get_interaction_target(source_interaction))
    privacy.remove_privacy()
    result = privacy._route_sim_away(target_sim)
    return bool(result)
def _trigger_cuckold_solo_sex_autonomy_on_game_update():
    if get_sex_setting(SexSetting.AUTONOMY_LEVEL, variable_type=int) == SexAutonomyLevelSetting.DISABLED:
        return False
    if not get_sex_setting(SexSetting.AUTONOMY_WATCH_SEX_STATE, variable_type=bool):
        return False
    for sim in get_available_for_sex_sims():
        if not sim_ev(sim).sex_reaction_handlers_list:
            pass
        sim_id = TurboManagerUtil.Sim.get_sim_id(sim)
        if sim_id in LAST_CUCKOLD_SOLO_ATTEMPT and TurboWorldUtil.Time.get_absolute_ticks() - LAST_CUCKOLD_SOLO_ATTEMPT[sim_id] <= 40000:
            pass
        active_sex_handler = None
        for interaction_instance in TurboSimUtil.Interaction.get_running_interactions(sim):
            while TurboResourceUtil.Resource.get_guid64(interaction_instance) == SimInteraction.WW_SEX_WATCH_DEFAULT:
                target = TurboInteractionUtil.get_interaction_target(interaction_instance)
                if TurboWorldUtil.Time.get_absolute_ticks() - int(TurboInteractionUtil.get_interaction_start_time(interaction_instance)) < 10000:
                    break
                active_sex_handler = sim_ev(target).active_sex_handler
                break
        if active_sex_handler is None:
            pass
        if active_sex_handler.get_identifier() not in sim_ev(sim).sex_reaction_handlers_list:
            pass
        if get_sex_setting(SexSetting.AUTONOMY_LEVEL, variable_type=int) == SexAutonomyLevelSetting.HIGH:
            random_chance = 0.15 + (0.15 if has_sim_trait(sim, SimTrait.WW_CUCKOLD) else 0.0)
        elif get_sex_setting(SexSetting.AUTONOMY_LEVEL, variable_type=int) == SexAutonomyLevelSetting.LOW:
            random_chance = 0.05 + (0.15 if has_sim_trait(sim, SimTrait.WW_CUCKOLD) else 0.0)
        else:
            random_chance = 0.1 + (0.15 if has_sim_trait(sim, SimTrait.WW_CUCKOLD) else 0.0)
        if random.uniform(0, 1) > random_chance:
            return False
        result = start_cuckold_solo_sex_interaction(sim, active_sex_handler)
        if not result:
            LAST_CUCKOLD_SOLO_ATTEMPT[sim_id] = TurboWorldUtil.Time.get_absolute_ticks()
        else:
            return True
def _wickedwhims_on_sims_talking_desire_interactions_outcome(
        interaction_instance, outcome_result):
    sim_info = TurboManagerUtil.Sim.get_sim_info(
        TurboInteractionUtil.get_interaction_sim(interaction_instance))
    target_sim_info = TurboManagerUtil.Sim.get_sim_info(
        TurboInteractionUtil.get_interaction_target(interaction_instance))
    if target_sim_info is None:
        return
    if CNSimUtils.is_toddler(sim_info) or CNSimUtils.is_toddler(
            target_sim_info):
        return
    sim_is_child = CNSimUtils.is_child_or_teen(sim_info)
    target_is_child = CNSimUtils.is_child_or_teen(target_sim_info)
    if not CNSimUtils.teen_sex_is_enabled() and (sim_is_child
                                                 or target_is_child):
        return
    if sim_is_child and TurboSimUtil.Age.is_older_than(target_sim_info,
                                                       TurboSimUtil.Age.CHILD):
        return
    if get_relationship_setting(
            RelationshipSetting.ROMANCE_AGE_RESTRICTION_STATE,
            variable_type=bool
    ) or target_is_child and TurboSimUtil.Age.is_older_than(
            sim_info, TurboSimUtil.Age.CHILD):
        return
    if has_sim_trait(sim_info, SimTrait.WW_SEXUALLY_ABSTINENT):
        set_sim_desire_level(sim_info, 0)
        return
    if int(GameTag.SOCIAL_FLIRTY) in TurboInteractionUtil.get_affordance_tags(
            interaction_instance):
        if outcome_result is True:
            target_desire_amount = 10
            sim_desire_amount = 5
            if has_sim_trait(sim_info, SimTrait.ALLURING):
                target_desire_amount += 3
            if has_sim_trait(target_sim_info, SimTrait.ROMANTIC):
                target_desire_amount += 3
            if has_sim_trait(
                    target_sim_info,
                    SimTrait.OCCULTVAMPIRE) and is_sim_on_period(sim_info):
                target_desire_amount += 3
            if has_sim_trait(target_sim_info, SimTrait.UNFLIRTY):
                target_desire_amount -= 5
            sim_outfit_level = get_sim_outfit_level(sim_info)
            if sim_outfit_level == OutfitLevel.NUDE or sim_outfit_level == OutfitLevel.BATHING:
                target_desire_amount += 3
            change_sim_desire_level(target_sim_info, target_desire_amount)
            change_sim_desire_level(sim_info, sim_desire_amount)
        else:
            change_sim_desire_level(target_sim_info, -7.5)
            change_sim_desire_level(sim_info, -3.5)
    elif int(
            GameTag.INTERACTION_FRIENDLY
    ) in TurboInteractionUtil.get_affordance_tags(interaction_instance):
        if outcome_result is True:
            if get_sim_desire_level(
                    sim_info) < 10 and TurboSimUtil.Gender.get_gender(
                        target_sim_info) in get_sim_preferenced_genders(
                            sim_info):
                nudity_multiplier = 0.0
                target_sim_outfit_level = get_sim_outfit_level(target_sim_info)
                if target_sim_outfit_level == OutfitLevel.NUDE or target_sim_outfit_level == OutfitLevel.BATHING:
                    nudity_multiplier += 2.0
                if has_sim_trait(target_sim_info, SimTrait.INCREDIBLYFRIENDLY):
                    change_sim_desire_level(sim_info, 2.5 * nudity_multiplier)
                else:
                    change_sim_desire_level(sim_info, 1 * nudity_multiplier)
            if get_sim_desire_level(
                    target_sim_info) < 5 and TurboSimUtil.Gender.get_gender(
                        sim_info) in get_sim_preferenced_genders(
                            target_sim_info):
                if has_sim_trait(sim_info, SimTrait.INCREDIBLYFRIENDLY):
                    change_sim_desire_level(target_sim_info, 2.5)
                else:
                    change_sim_desire_level(target_sim_info, 1)
    elif int(GameTag.INTERACTION_MEAN
             ) in TurboInteractionUtil.get_affordance_tags(
                 interaction_instance) and outcome_result is True:
        if not has_sim_trait(target_sim_info, SimTrait.EVIL):
            change_sim_desire_level(target_sim_info, -9)
        if not has_sim_trait(sim_info, SimTrait.EVIL):
            change_sim_desire_level(sim_info, -5)
def _wickedwhims_on_sex_autonomy_romance_interactions_outcome(
        interaction_instance, outcome_result):
    if outcome_result is False:
        return
    if get_sex_setting(SexSetting.AUTONOMY_LEVEL,
                       variable_type=int) == SexAutonomyLevelSetting.DISABLED:
        return
    if not get_sex_setting(SexSetting.AUTONOMY_ROMANCE_SEX_STATE,
                           variable_type=bool):
        return
    interaction_guid = TurboResourceUtil.Resource.get_guid64(
        interaction_instance)
    if interaction_guid == SimInteraction.WW_SOCIAL_MIXER_ASK_FOR_SEX_DEFAULT or interaction_guid == SimInteraction.WW_SOCIAL_MIXER_AUTONOMY_ASK_FOR_SEX_DEFAULT:
        return
    sim_info = TurboManagerUtil.Sim.get_sim_info(
        TurboInteractionUtil.get_interaction_sim(interaction_instance))
    if not sim_ev(sim_info).is_ready():
        return
    if sim_ev(sim_info).active_sex_handler is not None or sim_ev(
            sim_info).active_pre_sex_handler is not None:
        return
    if is_autonomy_sex_locations_disabled(
            TurboResourceUtil.Resource.get_id(sim_info)):
        return
    target_sim_info = TurboManagerUtil.Sim.get_sim_info(
        TurboInteractionUtil.get_interaction_target(interaction_instance))
    if target_sim_info is None:
        return
    if sim_ev(target_sim_info).active_sex_handler is not None or sim_ev(
            target_sim_info).active_pre_sex_handler is not None:
        return
    if is_autonomy_sex_locations_disabled(
            TurboResourceUtil.Resource.get_id(target_sim_info)):
        return
    if not get_sex_setting(
            SexSetting.PLAYER_AUTONOMY_STATE,
            variable_type=bool) and TurboSimUtil.Sim.is_player(
                sim_info) and TurboSimUtil.Sim.is_player(target_sim_info):
        return
    if not CNSimUtils.teen_sex_is_enabled() and (
            CNSimUtils.is_child_or_teen(sim_info)
            or CNSimUtils.is_child_or_teen(target_sim_info)):
        return
    if int(
            GameTag.SOCIAL_FLIRTY
    ) not in TurboInteractionUtil.get_affordance_tags(interaction_instance):
        return
    if not is_sim_allowed_for_autonomy(
            TurboManagerUtil.Sim.get_sim_instance(sim_info)):
        return
    if TurboWorldUtil.Time.get_absolute_ticks(
    ) < sim_ev(sim_info
               ).last_sex_autonomy + get_time_between_sex_autonomy_attempts():
        return
    if get_sex_pair_score(
            sim_info,
            target_sim_info) < get_relationship_sex_acceptance_threshold():
        return
    is_flirty_conversation = TurboSimUtil.Mood.get_mood(
        sim_info) == SimMood.FLIRTY and TurboSimUtil.Mood.get_mood(
            target_sim_info) == SimMood.FLIRTY
    has_target_high_desire = get_sim_desire_level(target_sim_info) >= 80
    if get_sex_setting(SexSetting.AUTONOMY_LEVEL,
                       variable_type=int) == SexAutonomyLevelSetting.HIGH:
        random_chance = 0.25 + (0.25 if is_flirty_conversation else 0.0) + (
            0.25 if has_target_high_desire else 0.0)
    elif get_sex_setting(SexSetting.AUTONOMY_LEVEL,
                         variable_type=int) == SexAutonomyLevelSetting.LOW:
        random_chance = 0.05 + (0.1 if is_flirty_conversation else
                                0.0) + (0.1 if has_target_high_desire else 0.0)
    else:
        random_chance = 0.1 + (0.2 if is_flirty_conversation else
                               0.0) + (0.2 if has_target_high_desire else 0.0)
    if random.uniform(0, 1) <= random_chance:
        sims_pair = (sim_info, target_sim_info)
        location_style_and_delay = get_sex_location_style_and_chance(sims_pair)
        if location_style_and_delay[
                0] != LocationStyleType.NONE and random.uniform(
                    0, 1) <= location_style_and_delay[1]:
            sex_location = get_sex_autonomy_location(
                sims_pair, location_style=location_style_and_delay[0])
            if sex_location is not None:
                trigger_sex_autonomy_interaction(sims_pair, sex_location)