Example #1
0
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)
Example #2
0
def _has_chance_for_random_undressing(sim_info):
    if not get_nudity_setting(NuditySetting.NUDITY_SWITCH_STATE,
                              variable_type=bool):
        return False
    if get_nudity_setting(
            NuditySetting.INTERACTION_AUTONOMY_UNDRESSING_TYPE,
            variable_type=int) == NudityAutonomyUndressLevelSetting.DISABLED:
        return False
    if get_nudity_setting(
            NuditySetting.AUTONOMY_TYPE, variable_type=int
    ) == NudityAutonomyTypeSetting.DISABLED or get_nudity_setting(
            NuditySetting.AUTONOMY_TYPE, variable_type=int
    ) == NudityAutonomyTypeSetting.NPC_ONLY and TurboSimUtil.Sim.is_player(
            sim_info):
        return False
    if not has_sim_permission_for_nudity(sim_info)[0]:
        return False
    if get_nudity_setting(
            NuditySetting.INTERACTION_AUTONOMY_UNDRESSING_TYPE,
            variable_type=int) == NudityAutonomyUndressLevelSetting.ALWAYS:
        return True
    if get_nudity_setting(
            NuditySetting.INTERACTION_AUTONOMY_UNDRESSING_TYPE,
            variable_type=int) == NudityAutonomyUndressLevelSetting.RANDOM:
        base_chance = 0.0
        base_chance += 0.08 * get_sim_nudity_skill_level(sim_info)
        if is_sim_exhibitionist(sim_info):
            base_chance += 0.1
        if random.uniform(0, 1) <= base_chance:
            return True
    return False
Example #3
0
 def on_interaction_start(cls, interaction_instance):
     target = cls.get_interaction_target(interaction_instance)
     (has_permission,
      _) = has_sim_permission_for_nudity(target, nudity_setting_test=True)
     if has_permission is False:
         return False
     if is_sim_outfit_fullbody(target):
         set_sim_top_underwear_state(target, False)
         set_sim_bottom_underwear_state(target, False)
         TurboSimUtil.Interaction.push_affordance(
             target,
             SimInteraction.WW_EXHIBITIONISM_UNDRESS_OUTFIT
             if is_sim_exhibitionist(target) else
             SimInteraction.WW_NATURISM_UNDRESS_OUTFIT,
             interaction_context=TurboInteractionUtil.InteractionContext.
             SOURCE_SCRIPT,
             insert_strategy=TurboInteractionUtil.QueueInsertStrategy.NEXT,
             must_run_next=True,
             priority=TurboInteractionUtil.Priority.High)
         return True
     if get_sim_body_state(target, 6) != BodyState.NUDE:
         set_sim_top_underwear_state(target, False)
         TurboSimUtil.Interaction.push_affordance(
             target,
             SimInteraction.WW_EXHIBITIONISM_UNDRESS_OUTFIT_TOP
             if is_sim_exhibitionist(target) else
             SimInteraction.WW_NATURISM_UNDRESS_OUTFIT_TOP,
             interaction_context=TurboInteractionUtil.InteractionContext.
             SOURCE_SCRIPT,
             insert_strategy=TurboInteractionUtil.QueueInsertStrategy.NEXT,
             must_run_next=True,
             priority=TurboInteractionUtil.Priority.High)
         return True
     if get_sim_body_state(target, 7) != BodyState.NUDE:
         set_sim_bottom_underwear_state(target, False)
         TurboSimUtil.Interaction.push_affordance(
             target,
             SimInteraction.WW_EXHIBITIONISM_UNDRESS_OUTFIT_BOTTOM
             if is_sim_exhibitionist(target) else
             SimInteraction.WW_NATURISM_UNDRESS_OUTFIT_BOTTOM,
             interaction_context=TurboInteractionUtil.InteractionContext.
             SOURCE_SCRIPT,
             insert_strategy=TurboInteractionUtil.QueueInsertStrategy.NEXT,
             must_run_next=True,
             priority=TurboInteractionUtil.Priority.High)
         return True
     return False
def _has_reaction_to_nudity(sim, target):
    if TurboSimUtil.Age.get_age(sim) == TurboSimUtil.Age.TEEN or TurboSimUtil.Age.get_age(sim) == TurboSimUtil.Age.CHILD:
        return True
    if is_sim_naturist(sim) and TurboSimUtil.Age.is_older_than(sim, TurboSimUtil.Age.ADULT, or_equal=True) and (TurboSimUtil.Age.get_age(target) == TurboSimUtil.Age.TEEN or TurboSimUtil.Age.get_age(target) == TurboSimUtil.Age.CHILD):
        return True
    if is_sim_exhibitionist(sim):
        return True
    return False
Example #5
0
def _get_sim_value(sim, target):
    base_sim_value = 25
    sim_value_modifier = 0
    if has_relationship_bit_with_sim(
            sim, target, SimRelationshipBit.
            ROMANTIC_ENGAGED) or has_relationship_bit_with_sim(
                sim, target, SimRelationshipBit.ROMANTIC_MARRIED
            ) or has_relationship_bit_with_sim(
                sim, target, SimRelationshipBit.ROMANTIC_SIGNIFICANT_OTHER):
        return base_sim_value / 4
    if has_relationship_bit_with_sim(sim, target,
                                     SimRelationshipBit.WW_JUST_HAD_SEX):
        return base_sim_value / 4
    if has_relationship_bit_with_sim(
            sim, target, SimRelationshipBit.ROMANTIC_HAVEDONEWOOHOO_RECENTLY):
        return base_sim_value / 2
    if has_relationship_bit_with_sim(
            sim, target, SimRelationshipBit.FRIENDSHIP_BFF
    ) or has_relationship_bit_with_sim(
            sim, target, SimRelationshipBit.FRIENDSHIP_BFF_EVIL
    ) or has_relationship_bit_with_sim(
            sim, target, SimRelationshipBit.FRIENDSHIP_BFF_BROMANTICPARTNER):
        return base_sim_value / 2
    current_nudity_level = get_sim_nudity_skill_level(sim)
    if is_sim_naturist(sim) and TurboSimUtil.Relationship.is_family(
            sim, target):
        base_sim_value = 22.5
    elif current_nudity_level == 2:
        sim_value_modifier = 69.1
    if is_sim_exhibitionist(sim):
        sim_value_modifier += -5
    current_friendship_score = int(
        get_relationship_with_sim(sim, target,
                                  RelationshipTrackType.FRIENDSHIP))
    current_friendship_score *= 0.45 * current_nudity_level if current_friendship_score > 0 else 0.45 * (
        6 - current_nudity_level)
    current_romance_score = int(
        get_relationship_with_sim(sim, target, RelationshipTrackType.ROMANCE))
    current_romance_score *= 0.8 * current_nudity_level if current_romance_score > 0 else 0.8 * (
        6 - current_nudity_level)
    current_relationship_amount = (current_friendship_score +
                                   current_romance_score) / 2
    if current_relationship_amount > 0:
        return base_sim_value * (
            1 - current_relationship_amount / 100) + sim_value_modifier
    if current_relationship_amount < 0:
        return base_sim_value + base_sim_value * (
            abs(current_relationship_amount) / 100) + sim_value_modifier
    return base_sim_value + sim_value_modifier
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
Example #7
0
 def on_interaction_start(cls, interaction_instance):
     target = cls.get_interaction_target(interaction_instance)
     result = TurboSimUtil.Interaction.push_affordance(
         target,
         SimInteraction.WW_EXHIBITIONISM_FORCE_DRESS_UP
         if is_sim_exhibitionist(target) else
         SimInteraction.WW_NATURISM_FORCE_DRESS_UP,
         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)
     if result:
         sim_ev(
             target
         ).last_nudity_autonomy = TurboWorldUtil.Time.get_absolute_ticks(
         ) + 360000
     return True
Example #8
0
 def on_interaction_test(cls, interaction_context, interaction_target):
     sim = cls.get_interaction_sim(interaction_context)
     if not is_sim_exhibitionist(sim):
         return False
     return super().on_interaction_test(interaction_context,
                                        interaction_target)
Example #9
0
 def on_interaction_start(cls, interaction_instance):
     sim = cls.get_interaction_target(interaction_instance)
     nudity_debug_info = ''
     nudity_debug_info += 'Body States:\n'
     nudity_debug_info += '  Top: ' + str(get_sim_body_state(sim, 6)) + '\n'
     nudity_debug_info += '  Bottom: ' + str(get_sim_body_state(sim,
                                                                7)) + '\n'
     nudity_debug_info += '\nBody Additional States:\n'
     nudity_debug_info += '  Top: ' + str(
         get_sim_additional_body_state(sim, 6, get_sim_body_state(
             sim, 6))) + '\n'
     nudity_debug_info += '  Bottom: ' + str(
         get_sim_additional_body_state(sim, 7, get_sim_body_state(
             sim, 7))) + '\n'
     nudity_debug_info += '\nBody Actual States:\n'
     nudity_debug_info += '  Top: ' + str(get_sim_actual_body_state(
         sim, 6)) + '\n'
     nudity_debug_info += '  Bottom: ' + str(
         get_sim_actual_body_state(sim, 7)) + '\n'
     nudity_debug_info += '\nOutfit Body Types:\n'
     nudity_debug_info += '  Has Top: ' + str(
         has_sim_outfit_top(sim)) + '\n'
     nudity_debug_info += '  Has Bottom: ' + str(
         has_sim_outfit_bottom(sim)) + '\n'
     nudity_debug_info += '  Has Full Body: ' + str(
         is_sim_outfit_fullbody(sim)) + '\n'
     nudity_debug_info += '\nNudity Outfit Parts:\n'
     nudity_debug_info += '  Top: ' + str(
         sim_ev(sim).nude_outfit_parts[6]) + '\n'
     nudity_debug_info += '  Bottom: ' + str(
         sim_ev(sim).nude_outfit_parts[7]) + '\n'
     nudity_debug_info += '  Feet: ' + str(
         sim_ev(sim).nude_outfit_parts[8]) + '\n'
     nudity_debug_info += '  Penis Texture: ' + str(
         sim_ev(sim).nude_outfit_parts[115]) + '\n'
     nudity_debug_info += '\nPenis Outfit Parts:\n'
     nudity_debug_info += '  Soft: ' + str(
         sim_ev(sim).penis_outfit_parts['soft']) + '\n'
     nudity_debug_info += '  Hard: ' + str(
         sim_ev(sim).penis_outfit_parts['hard']) + '\n'
     nudity_debug_info += '\nPenis Parts Authors:\n'
     nudity_debug_info += '  Soft: ' + str(
         sim_ev(sim).outfit_soft_penis_author) + '\n'
     nudity_debug_info += '  Hard: ' + str(
         sim_ev(sim).outfit_hard_penis_author) + '\n'
     nudity_debug_info += '\nPenis State:\n'
     nudity_debug_info += '  Is Hard: ' + str(
         sim_ev(sim).is_penis_hard) + '\n'
     nudity_debug_info += '  Penis Cooldown: ' + str(
         sim_ev(sim).penis_hard_cooldown) + '\n'
     nudity_debug_info += '\nOriginal Outfit Data:\n'
     nudity_debug_info += '  Has Modifications: ' + str(
         sim_ev(sim).has_original_outfit_modifications) + '\n'
     nudity_debug_info += '  Category: ' + str(
         sim_ev(sim).original_outfit_category) + '\n'
     nudity_debug_info += '  Index: ' + str(
         sim_ev(sim).original_outfit_index) + '\n'
     nudity_debug_info += '  Update Locked: ' + str(
         sim_ev(sim).is_outfit_update_locked) + '\n'
     nudity_debug_info += '\nNudity Skill:\n'
     nudity_debug_info += '  Is Naturist/Is Exhibitionist: ' + str(
         is_sim_naturist(sim)) + '/' + str(is_sim_exhibitionist(sim)) + '\n'
     nudity_debug_info += '  Level: ' + str(
         get_sim_nudity_skill_level(sim) +
         get_sim_nudity_skill_progress(sim)) + '\n'
     nudity_debug_info += '  Influence Score: ' + str(
         sim_ev(sim).nudity_skill_influence_score) + '\n'
     nudity_debug_info += '  Fatigue: ' + str(
         get_sim_statistic_value(
             sim, SimCommodity.WW_NUDITY_SKILL_FATIGUE)) + '\n'
     nudity_debug_info += '\nNudity Reaction:\n'
     nudity_debug_info += '  Full Reaction Cooldown: ' + str(
         sim_ev(sim).full_nudity_reaction_cooldown) + '\n'
     nudity_debug_info += '  Inner Reaction Cooldown: ' + str(
         sim_ev(sim).inner_nudity_reaction_cooldown) + '\n'
     nudity_debug_info += '\nSpecial:\n'
     nudity_debug_info += '  Is Flashing: ' + str(
         sim_ev(sim).is_flashing) + '\n'
     nudity_debug_info += '  Toilet Use Outfit State: ' + str(
         sim_ev(sim).on_toilet_outfit_state) + '\n'
     nudity_debug_info += '  Breast Feeding Outfit State: ' + str(
         sim_ev(sim).on_breast_feeding_outfit_state) + '\n'
     display_notification(text=nudity_debug_info,
                          title=str(TurboSimUtil.Name.get_name(sim)[0]) +
                          ' ' + str(TurboSimUtil.Name.get_name(sim)[1]) +
                          ' Nudity Debug',
                          secondary_icon=sim)
Example #10
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