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)
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
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)
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
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)
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)
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)