def change_sim_desire_level(sim_identifier, amount):
    sim_info = TurboManagerUtil.Sim.get_sim_info(sim_identifier)
    if CNSimUtils.is_toddler(sim_info):
        return
    change_sim_statistic_value(sim_info, amount,
                               SimCommodity.WW_SEX_MASTER_DESIRE)
    _update_sim_desire_effects(sim_info)
def has_sim_permission_for_nudity(sim_identifier,
                                  nudity_setting_test=False,
                                  extra_skill_level=0,
                                  **kwargs):
    sim = TurboManagerUtil.Sim.get_sim_instance(sim_identifier)
    if TurboSimUtil.Age.is_younger_than(sim, TurboSimUtil.Age.CHILD):
        return (False, (NudityPermissionDenied.IS_UNDERAGED, ))
    if CNSimUtils.can_have_sex(sim):
        return (False, (NudityPermissionDenied.IS_UNDERAGED, ))
    if nudity_setting_test is True and not get_nudity_setting(
            NuditySetting.NUDITY_SWITCH_STATE, variable_type=bool):
        return (True, tuple())
    if has_current_lot_trait(
            LotTrait.WW_LOTTRAIT_NUDIST
    ) and TurboWorldUtil.Lot.is_position_on_active_lot(
            TurboSimUtil.Location.get_position(sim)):
        return (True, tuple())
    if has_sim_buff(sim, SimBuff.WW_NUDITY_TEMPORARY_BRAVE):
        return (True, tuple())
    nudity_skill_level = min(
        5,
        get_sim_nudity_skill_level(sim) + extra_skill_level)
    if is_sim_exhibitionist(sim):
        score = nudity_skill_level * 120
    else:
        score = nudity_skill_level * 100
    denied_permissions = set()
    for permission_check in (_home_test, _outside_test, _sims_test):
        test_result = permission_check(sim, score, **kwargs)
        if test_result and test_result[0] != 0:
            score += test_result[0]
            denied_permissions.add(test_result[1])
            if score <= 0:
                return (False, denied_permissions)
    return (True, denied_permissions)
Exemple #3
0
def get_age_limits_for_sex(sims_list):
    youngest_sim_age = None
    oldest_sim_age = None
    for actor_sim_info in sims_list:
        if actor_sim_info is None:
            continue
        if youngest_sim_age is None or TurboSimUtil.Age.is_younger_than(actor_sim_info, youngest_sim_age):
            youngest_sim_age = TurboSimUtil.Age.get_age(actor_sim_info)
        if oldest_sim_age is None or TurboSimUtil.Age.is_older_than(actor_sim_info, oldest_sim_age):
            oldest_sim_age = TurboSimUtil.Age.get_age(actor_sim_info)
    is_allowing_teens = get_sex_setting(SexSetting.TEENS_SEX_STATE, variable_type=bool)
    is_child_only = youngest_sim_age == oldest_sim_age == TurboSimUtil.Age.CHILD
    is_teen_only = youngest_sim_age == oldest_sim_age == TurboSimUtil.Age.TEEN
    has_teen = youngest_sim_age == TurboSimUtil.Age.TEEN or oldest_sim_age == TurboSimUtil.Age.TEEN
    has_child = youngest_sim_age == TurboSimUtil.Age.CHILD or oldest_sim_age == TurboSimUtil.Age.CHILD
    if not get_relationship_setting(RelationshipSetting.ROMANCE_AGE_RESTRICTION_STATE, variable_type=bool):
        if is_child_only and is_allowing_teens:
            return (TurboSimUtil.Age.CHILD, TurboSimUtil.Age.CHILD)
        if is_teen_only and is_allowing_teens:
            return (TurboSimUtil.Age.TEEN, TurboSimUtil.Age.TEEN)
        if has_child and is_allowing_teens:
            return (TurboSimUtil.Age.CHILD, TurboSimUtil.Age.ELDER)
        if has_teen and is_allowing_teens:
            return (TurboSimUtil.Age.TEEN, TurboSimUtil.Age.ELDER)
        return (TurboSimUtil.Age.YOUNGADULT, TurboSimUtil.Age.ELDER)
    else:
        if not CNSimUtils.teen_sex_is_enabled():
            return (TurboSimUtil.Age.YOUNGADULT, TurboSimUtil.Age.ELDER)
        return (TurboSimUtil.Age.CHILD, TurboSimUtil.Age.ELDER)
def _trigger_desire_reaction_on_game_update():
    for sim in TurboManagerUtil.Sim.get_all_sim_instance_gen(humans=True, pets=False):
        if TurboSimUtil.Age.is_younger_than(sim, TurboSimUtil.Age.CHILD):
            continue
        if not CNSimUtils.can_have_sex(sim):
            continue
        if not is_sim_in_sex(sim):
            if is_sim_going_to_sex(sim):
                continue
            if has_sim_situations(sim, (SimSituation.GRIMREAPER, SimSituation.FIRE, SimSituation.BABYBIRTH_HOSPITAL)):
                continue
            if not is_sim_available(sim):
                continue
            line_of_sight = TurboMathUtil.LineOfSight.create(TurboSimUtil.Location.get_routing_surface(sim), TurboSimUtil.Location.get_position(sim), 8.0)
            for target in TurboManagerUtil.Sim.get_all_sim_instance_gen(humans=True, pets=False):
                if sim is target:
                    continue
                if TurboSimUtil.Age.is_younger_than(target, TurboSimUtil.Age.CHILD):
                    continue
                if not _has_reaction_to_nudity(sim, target):
                    continue
                if TurboSimUtil.Gender.get_gender(target) not in get_sim_preferenced_genders(sim):
                    continue
                if not TurboSimUtil.Location.is_visible(target):
                    continue
                if TurboSimUtil.Spawner.is_leaving(target):
                    continue
                (desire_limit, desire_increase) = _get_desire_nudity_value(target)
                if not desire_limit <= 0 and desire_increase > 0:
                    if get_sim_desire_level(sim) > desire_limit:
                        continue
                    if not TurboMathUtil.LineOfSight.test(line_of_sight, TurboSimUtil.Location.get_position(target)):
                        continue
                    change_sim_desire_level(sim, desire_increase)
 def on_interaction_test(cls, interaction_context, interaction_target):
     sim = cls.get_interaction_sim(interaction_context)
     if CNSimUtils.can_have_sex(sim):
         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
     return True
def get_available_for_sex_sims(only_on_hypersexual_lot=False,
                               forbidden_traits=()):
    sims_list = set()
    for sim in TurboManagerUtil.Sim.get_all_sim_instance_gen(humans=True,
                                                             pets=False):
        if TurboSimUtil.Age.is_younger_than(sim, TurboSimUtil.Age.CHILD):
            continue
        if not CNSimUtils.teen_sex_is_enabled(
        ) and CNSimUtils.is_child_or_teen(sim):
            continue
        if not get_sex_setting(
                SexSetting.PLAYER_AUTONOMY_STATE,
                variable_type=bool) and TurboSimUtil.Sim.is_player(sim):
            continue
        object_id = TurboResourceUtil.Resource.get_id(sim)
        if is_autonomy_sex_locations_disabled(object_id):
            continue
        if TurboWorldUtil.Time.get_absolute_ticks() < sim_ev(
                sim
        ).last_sex_autonomy + get_time_between_sex_autonomy_attempts():
            continue
        if not sim_ev(sim).active_sex_handler is not None:
            if sim_ev(sim).active_pre_sex_handler is not None:
                continue
            if not is_sim_allowed_for_autonomy(sim):
                continue
            if not _is_sim_needs_fine(sim):
                continue
            if _is_sim_fearing_possible_pregnancy(sim):
                continue
            if not is_sim_available(sim):
                continue
            if _has_sim_sex_forbidden_traits(
                    sim, forbidden_traits=forbidden_traits):
                continue
            if _has_sim_sex_forbidden_buffs(sim):
                continue
            if _is_sim_in_sex_forbidden_situation(sim):
                continue
            if only_on_hypersexual_lot is True and not TurboWorldUtil.Lot.is_position_on_active_lot(
                    TurboSimUtil.Location.get_position(sim)):
                continue
            sims_list.add(sim)
    return sims_list
def test_sim_nudity_permission(sim):
    if CNSimUtils.is_toddler(sim):
        return False
    if CNSimUtils.can_have_sex(sim):
        return False
    if sim_ev(sim).is_flashing is True or sim_ev(
            sim).on_toilet_outfit_state != -1 or sim_ev(
                sim).on_breast_feeding_outfit_state != -1:
        return False
    if not is_sim_in_special_outfit(sim):
        return False
    sim_outfit_level = get_sim_outfit_level(sim)
    if sim_outfit_level != OutfitLevel.NUDE:
        return False
    if not is_sim_available(sim):
        return False
    for interaction_id in TurboSimUtil.Interaction.get_running_interactions_ids(
            sim):
        if interaction_id in NUDITY_EXCEPTION_INTERACTIONS:
            return
    for interaction_id in TurboSimUtil.Interaction.get_queued_interactions_ids(
            sim):
        if interaction_id in NUDITY_EXCEPTION_INTERACTIONS:
            return
    (has_permission, denied_permissions) = has_sim_permission_for_nudity(sim)
    if has_permission is True:
        return False
    sim_ev(sim).last_nudity_denied_permissions = denied_permissions
    if is_sim_exhibitionist(sim):
        dress_up_interaction = SimInteraction.WW_EXHIBITIONISM_FORCE_DRESS_UP
    else:
        dress_up_interaction = SimInteraction.WW_NATURISM_FORCE_DRESS_UP
    TurboSimUtil.Interaction.push_affordance(
        sim,
        dress_up_interaction,
        interaction_context=TurboInteractionUtil.InteractionContext.
        SOURCE_AUTONOMY,
        insert_strategy=TurboInteractionUtil.QueueInsertStrategy.NEXT,
        must_run_next=True,
        run_priority=TurboInteractionUtil.Priority.High,
        priority=TurboInteractionUtil.Priority.High,
        skip_if_running=True)
    return True
 def on_interaction_test(cls, interaction_context, interaction_target):
     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 False
     if get_sim_body_state(
             sim, TurboCASUtil.BodyType.UPPER_BODY) == 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):
     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 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 False
     if get_sim_body_state(
             sim, TurboCASUtil.BodyType.UPPER_BODY) == BodyState.UNDERWEAR:
         return True
     return False
 def on_interaction_test(cls, interaction_context, interaction_target):
     if not TurboTypesUtil.Sims.is_sim(interaction_target):
         return False
     if not get_nudity_setting(NuditySetting.UNDERWEAR_SWITCH_STATE,
                               variable_type=bool) or has_sim_trait(
                                   interaction_target,
                                   SimTrait.WW_NO_UNDERWEAR):
         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 CNSimUtils.can_have_sex(interaction_target):
         return False
     return True
Exemple #13
0
 def on_interaction_test(cls, interaction_context, interaction_target):
     if not TurboTypesUtil.Sims.is_sim(interaction_target):
         return False
     if has_sim_trait(interaction_target,
                      SimTrait.GENDEROPTIONS_TOILET_STANDING):
         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 not CNSimUtils.can_have_sex(interaction_target):
         return False
     if not has_loaded_strapon():
         return False
     return True
def increase_sim_nudity_skill(sim_identifier,
                              amount,
                              extra_fatigue=0.0,
                              reason=NuditySkillIncreaseReason.NONE):
    if amount <= 0:
        return
    if TurboSimUtil.Age.is_younger_than(sim_identifier,
                                        TurboSimUtil.Age.CHILD):
        return
    if CNSimUtils.can_have_sex(sim_identifier):
        return
    if reason == NuditySkillIncreaseReason.BEING_IN_NAKED_OUTFIT or reason == NuditySkillIncreaseReason.BEING_IN_BATHING_OUTFIT or reason == NuditySkillIncreaseReason.BEING_IN_REVEALING_OUTFIT:
        if has_sim_trait(sim_identifier, SimTrait.SHAMELESS):
            amount += get_nudity_skill_points_modifier(
                NuditySkillIncreaseReason.SHAMELESS_BONUS_BONUS)
        if has_sim_mood(sim_identifier, SimMood.CONFIDENT) or has_sim_trait(
                sim_identifier, SimTrait.SELFASSURED):
            amount += get_nudity_skill_points_modifier(
                NuditySkillIncreaseReason.CONFIDENCE_BONUS)
    elif (reason == NuditySkillIncreaseReason.MIRROR_REVEALING_OUTFIT
          or reason == NuditySkillIncreaseReason.MIRROR_NAKED_OUTFIT or reason
          == NuditySkillIncreaseReason.SEEING_NUDITY) and has_sim_trait(
              sim_identifier, SimTrait.LONER):
        amount += get_nudity_skill_points_modifier(
            NuditySkillIncreaseReason.SHAMELESS_BONUS_BONUS)
    nudity_skill_level = get_sim_nudity_skill_level(sim_identifier)
    amount /= nudity_skill_level
    nudity_skill_fatigue = get_sim_statistic_value(
        sim_identifier, SimCommodity.WW_NUDITY_SKILL_FATIGUE, add=True)
    amount *= nudity_skill_fatigue / 100
    set_sim_statistic_value(
        sim_identifier,
        max(
            0, nudity_skill_fatigue -
            (amount * nudity_skill_level + extra_fatigue)),
        SimCommodity.WW_NUDITY_SKILL_FATIGUE)
    if has_current_lot_trait(LotTrait.WW_LOTTRAIT_NUDIST):
        sim = TurboManagerUtil.Sim.get_sim_instance(sim_identifier)
        if sim is not None and TurboWorldUtil.Lot.is_position_on_active_lot(
                TurboSimUtil.Location.get_position(sim)):
            amount *= 0.25
    change_sim_skill_percentage_value(
        sim_identifier, amount, get_nudity_nudity_skill_type(sim_identifier))
    set_sim_statistic_value(sim_identifier,
                            get_sim_nudity_skill_level(sim_identifier),
                            SimCommodity.WW_NUDITY_SKILL_LEVEL)
Exemple #15
0
def can_sim_have_period(sim_identifier):
    if TurboSimUtil.Age.is_younger_than(sim_identifier,
                                        TurboSimUtil.Age.CHILD):
        return False
    if TurboSimUtil.Age.is_older_than(sim_identifier,
                                      TurboSimUtil.Age.ELDER,
                                      or_equal=True):
        return False
    if not CNSimUtils.can_have_sex(sim_identifier):
        return False
    if not has_sim_trait(sim_identifier,
                         SimTrait.GENDEROPTIONS_PREGNANCY_CANBEIMPREGNATED):
        return False
    if has_sim_trait(sim_identifier, SimTrait.WW_INFERTILE):
        return False
    if has_sim_trait(sim_identifier, SimTrait.PLANTSIM):
        return False
    return True
Exemple #16
0
 def on_interaction_test(cls, interaction_context, interaction_target):
     if not TurboTypesUtil.Sims.is_sim(interaction_target):
         return False
     if TurboSimUtil.Age.is_younger_than(interaction_target,
                                         TurboSimUtil.Age.CHILD):
         return False
     if CNSimUtils.can_have_sex(interaction_target):
         return False
     if is_sim_in_sex(cls.get_interaction_sim(
             interaction_context)) or is_sim_going_to_sex(
                 cls.get_interaction_sim(interaction_context)):
         return False
     if is_sim_in_sex(interaction_target) or is_sim_going_to_sex(
             interaction_target):
         return False
     if not has_sim_trait(interaction_target,
                          SimTrait.GENDEROPTIONS_TOILET_STANDING):
         return False
     return True
def update_sim_nudity_skill_on_active_nudity(sim_identifier):
    if TurboSimUtil.Age.is_younger_than(sim_identifier,
                                        TurboSimUtil.Age.CHILD):
        return
    if CNSimUtils.can_have_sex(sim_identifier):
        return
    if is_sim_in_sex(sim_identifier) or is_sim_going_to_sex(sim_identifier):
        return
    if not is_sim_available(sim_identifier):
        return
    sim_outfit_level = get_sim_outfit_level(sim_identifier)
    if sim_outfit_level == OutfitLevel.OUTFIT:
        return
    sims_around_value = _get_sims_around_value(sim_identifier, max_sims=6)
    if sim_outfit_level == OutfitLevel.NUDE:
        increase_sim_nudity_skill(
            sim_identifier,
            sims_around_value * get_nudity_skill_points_modifier(
                NuditySkillIncreaseReason.BEING_IN_NAKED_OUTFIT),
            extra_fatigue=0.05,
            reason=NuditySkillIncreaseReason.BEING_IN_NAKED_OUTFIT)
    elif sim_outfit_level == OutfitLevel.BATHING:
        sim_nudity_skill_level = get_sim_nudity_skill_level(sim_identifier)
        increase_sim_nudity_skill(
            sim_identifier,
            sims_around_value * (get_nudity_skill_points_modifier(
                NuditySkillIncreaseReason.BEING_IN_BATHING_OUTFIT) /
                                 sim_nudity_skill_level),
            extra_fatigue=0.15,
            reason=NuditySkillIncreaseReason.BEING_IN_BATHING_OUTFIT)
    elif sim_outfit_level == OutfitLevel.REVEALING or sim_outfit_level == OutfitLevel.UNDERWEAR:
        sim_nudity_skill_level = get_sim_nudity_skill_level(sim_identifier)
        increase_sim_nudity_skill(
            sim_identifier,
            sims_around_value *
            (get_nudity_skill_points_modifier(
                NuditySkillIncreaseReason.BEING_IN_REVEALING_OUTFIT) /
             (sim_nudity_skill_level * sim_nudity_skill_level)),
            extra_fatigue=0.15,
            reason=NuditySkillIncreaseReason.BEING_IN_REVEALING_OUTFIT)
Exemple #18
0
def _test_for_sex_start(interaction_context, interaction_sim,
                        interaction_target, sex_category_types):
    if interaction_target is None:
        return False
    if not is_sim_ready_for_sex(interaction_sim) or sim_ev(
            interaction_sim).active_pre_sex_handler is not None:
        return False
    if not CNSimUtils.can_have_sex(interaction_sim):
        return False
    if TurboTypesUtil.Objects.is_game_object(interaction_target):
        interaction_target = TurboObjectUtil.GameObject.get_parent(
            interaction_target)
        if not is_sim_allowed_on_active_lot(
                interaction_sim
        ) and TurboWorldUtil.Lot.is_position_on_active_lot(
                TurboObjectUtil.Position.get_position(interaction_target)):
            return False
    else:
        if not is_safe_floor_object_position(interaction_target,
                                             interaction_context):
            return False
        if TurboTypesUtil.Objects.is_terrain(
                interaction_target) and not is_sim_allowed_on_active_lot(
                    interaction_sim
                ) and TurboWorldUtil.Lot.is_position_on_active_lot(
                    get_floor_object_position(interaction_target,
                                              interaction_context)):
            return False
    object_identifier = SexInteractionLocationType.get_location_identifier(
        interaction_target)
    sim_gender = get_sim_sex_gender(interaction_sim)
    for sex_category_type in sex_category_types:
        if sex_category_type is None:
            continue
        if has_object_identifier_animations(object_identifier,
                                            sex_category_type, sim_gender):
            return True
    return False
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)
Exemple #20
0
def _trigger_nudity_autonomy_on_game_update():
    if not get_nudity_setting(NuditySetting.NUDITY_SWITCH_STATE,
                              variable_type=bool):
        return
    if get_nudity_setting(
            NuditySetting.AUTONOMY_TYPE,
            variable_type=int) == NudityAutonomyTypeSetting.DISABLED:
        return
    is_special_lot = TurboWorldUtil.Venue.get_current_venue_type() in (
        VenueType.BAR, VenueType.LOUNGE, VenueType.CLUB)
    for sim in TurboManagerUtil.Sim.get_all_sim_instance_gen(humans=True,
                                                             pets=False):
        if TurboSimUtil.Age.is_younger_than(sim, TurboSimUtil.Age.CHILD):
            continue
        if CNSimUtils.can_have_sex(sim):
            continue
        if TurboWorldUtil.Time.get_absolute_ticks() <= sim_ev(
                sim).last_nudity_autonomy:
            continue
        if get_nudity_setting(
                NuditySetting.AUTONOMY_TYPE, variable_type=int
        ) == NudityAutonomyTypeSetting.NPC_ONLY and TurboSimUtil.Sim.is_player(
                sim):
            continue
        if not is_sim_allowed_for_autonomy(sim):
            continue
        if not _is_sim_ready_to_undress(sim):
            sim_ev(
                sim
            ).last_nudity_autonomy = TurboWorldUtil.Time.get_absolute_ticks(
            ) + 30000
        is_sim_on_lot = TurboWorldUtil.Lot.is_position_on_active_lot(
            TurboSimUtil.Location.get_position(sim))
        has_child_sims_on_lot = False
        for target in TurboManagerUtil.Sim.get_all_sim_instance_gen(
                humans=True, pets=False):
            if sim is target:
                continue
            if is_special_lot is False and TurboSimUtil.Age.is_younger_than(
                    target, TurboSimUtil.Age.CHILD):
                has_child_sims_on_lot = True
                break
            if get_sim_outfit_level(target) == OutfitLevel.NUDE:
                if is_sim_on_lot is True and TurboWorldUtil.Lot.is_position_on_active_lot(
                        TurboSimUtil.Location.get_position(target)
                ) or TurboMathUtil.Position.get_distance(
                        TurboSimUtil.Location.get_position(sim),
                        TurboSimUtil.Location.get_position(target)) <= 12:
                    continue
        if has_child_sims_on_lot is True:
            sim_ev(
                sim
            ).last_nudity_autonomy = TurboWorldUtil.Time.get_absolute_ticks(
            ) + 30000
        if is_sim_exhibitionist(sim):
            continue
        if random.uniform(0, 1) > sim_ev(sim).nudity_autonomy_chance:
            sim_ev(
                sim
            ).last_nudity_autonomy = TurboWorldUtil.Time.get_absolute_ticks(
            ) + 25000
        if trigger_nudity_autonomy(sim):
            sim_ev(
                sim
            ).last_nudity_autonomy = TurboWorldUtil.Time.get_absolute_ticks(
            ) + 55000
            sim_ev(sim).nudity_autonomy_chance = 0.05
            return
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)