def update_naturism_buffs(sim_info, category_and_index):
    if TurboSimUtil.Age.is_younger_than(sim_info, TurboSimUtil.Age.CHILD):
        return
    has_naturist_buff = has_sim_buff(
        sim_info, SimBuff.WW_NATURISM_SKILL_LEVEL_2) or (
            has_sim_buff(sim_info, SimBuff.WW_NATURISM_SKILL_LEVEL_3) or
            (has_sim_buff(sim_info, SimBuff.WW_NATURISM_SKILL_LEVEL_4)
             or has_sim_buff(sim_info, SimBuff.WW_NATURISM_SKILL_LEVEL_5)))
    sim_outfit_level = get_sim_outfit_level(
        sim_info, outfit_category_and_index=category_and_index)
    is_sim_allowed_for_buff = (sim_outfit_level == OutfitLevel.NUDE
                               or sim_outfit_level == OutfitLevel.BATHING
                               ) and is_sim_naturist(sim_info)
    if has_naturist_buff is False and is_sim_allowed_for_buff is True:
        nudity_skill_level = get_sim_nudity_skill_level(sim_info)
        naturism_buff = None
        if nudity_skill_level <= 1:
            naturism_buff = SimBuff.WW_NATURISM_SKILL_LEVEL_1
        elif nudity_skill_level == 2:
            naturism_buff = SimBuff.WW_NATURISM_SKILL_LEVEL_2
        elif nudity_skill_level == 3:
            naturism_buff = SimBuff.WW_NATURISM_SKILL_LEVEL_3
        elif nudity_skill_level == 4:
            naturism_buff = SimBuff.WW_NATURISM_SKILL_LEVEL_4
        elif nudity_skill_level >= 5:
            naturism_buff = SimBuff.WW_NATURISM_SKILL_LEVEL_5
        if naturism_buff is not None:
            add_sim_buff(sim_info, naturism_buff)
    if has_naturist_buff is True and is_sim_allowed_for_buff is False:
        remove_sim_buff(sim_info, SimBuff.WW_NATURISM_SKILL_LEVEL_2)
        remove_sim_buff(sim_info, SimBuff.WW_NATURISM_SKILL_LEVEL_3)
        remove_sim_buff(sim_info, SimBuff.WW_NATURISM_SKILL_LEVEL_4)
        remove_sim_buff(sim_info, SimBuff.WW_NATURISM_SKILL_LEVEL_5)
def _update_sim_condom_status_buff(sim_identifier):
    sim_info = TurboManagerUtil.Sim.get_sim_info(sim_identifier)
    if sim_ev(sim_info).has_condom_on is True:
        if not has_sim_buff(sim_info, SimBuff.WW_PREGNANCY_IS_WEARING_CONDOM):
            add_sim_buff(sim_info, SimBuff.WW_PREGNANCY_IS_WEARING_CONDOM)
    elif has_sim_buff(sim_info, SimBuff.WW_PREGNANCY_IS_WEARING_CONDOM):
        remove_sim_buff(sim_info, SimBuff.WW_PREGNANCY_IS_WEARING_CONDOM)
Beispiel #3
0
def _reaction_to_pregnancy(sim, target):
    si_result = TurboSimUtil.Interaction.push_affordance(sim, SimInteraction.WW_TEEN_PREGNANCY_REACTION, target=target, interaction_context=TurboInteractionUtil.InteractionContext.SOURCE_SCRIPT, insert_strategy=TurboInteractionUtil.QueueInsertStrategy.NEXT, priority=TurboInteractionUtil.Priority.Critical, run_priority=TurboInteractionUtil.Priority.Critical)
    if si_result:
        add_relationsip_bit_with_sim(sim, target, SimRelationshipBit.WW_KNOWS_ABOUT_TEEN_PREGNANCY)
        add_sim_buff(sim, SimBuff.WW_ANGRY_AT_TEEN_PREGNANCY)
        return True
    return False
Beispiel #4
0
def update_sim_birth_control_status_buff(sim_identifier):
    sim_info = TurboManagerUtil.Sim.get_sim_info(sim_identifier)
    if sim_ev(
            sim_info
    ).day_used_birth_control_pills == TurboWorldUtil.Time.get_absolute_days():
        if not has_sim_buff(sim_info,
                            SimBuff.WW_PREGNANCY_IS_ON_BIRTH_CONTROL):
            add_sim_buff(sim_info, SimBuff.WW_PREGNANCY_IS_ON_BIRTH_CONTROL)
    elif has_sim_buff(sim_info, SimBuff.WW_PREGNANCY_IS_ON_BIRTH_CONTROL):
        remove_sim_buff(sim_info, SimBuff.WW_PREGNANCY_IS_ON_BIRTH_CONTROL)
def _nudity_reaction(sim, target, only_mixer=False, force=False):
    increase_sim_ww_statistic(sim, 'times_reacted_to_nudity')
    increase_sim_ww_statistic(target, 'times_been_seen_nude')
    if _is_positive_to_sim_nudity(sim, target):
        positive_reaction_affordance = random.choice(
            (SimInteraction.WW_NUDITY_REACTION_POSITIVE_1,
             SimInteraction.WW_NUDITY_REACTION_POSITIVE_2,
             SimInteraction.WW_NUDITY_REACTION_POSITIVE_3))
        si_result = TurboSimUtil.Interaction.push_affordance(
            sim,
            positive_reaction_affordance,
            target=target,
            interaction_context=TurboInteractionUtil.InteractionContext.
            SOURCE_SCRIPT,
            insert_strategy=TurboInteractionUtil.QueueInsertStrategy.NEXT if
            force is False else TurboInteractionUtil.QueueInsertStrategy.FIRST,
            priority=TurboInteractionUtil.Priority.High
            if force is False else TurboInteractionUtil.Priority.Critical,
            run_priority=TurboInteractionUtil.Priority.High
            if force is False else TurboInteractionUtil.Priority.Critical
        ) if only_mixer is False else None
    else:
        si_result = TurboSimUtil.Interaction.push_affordance(
            sim,
            SimInteraction.WW_NUDITY_REACTION_SHOCK,
            target=target,
            interaction_context=TurboInteractionUtil.InteractionContext.
            SOURCE_SCRIPT,
            insert_strategy=TurboInteractionUtil.QueueInsertStrategy.NEXT if
            force is False else TurboInteractionUtil.QueueInsertStrategy.FIRST,
            priority=TurboInteractionUtil.Priority.High
            if force is False else TurboInteractionUtil.Priority.Critical,
            run_priority=TurboInteractionUtil.Priority.High
            if force is False else TurboInteractionUtil.Priority.Critical
        ) if only_mixer is False else None
    if not si_result and (
            si_result is None or
            TurboInteractionUtil.can_interaction_fallback_to_mixer_interaction(
                sim, si_result.execute_result.interaction)):
        si_result = TurboSimUtil.Interaction.push_affordance(
            sim,
            SimInteraction.WW_NUDITY_REACTION_MIXER,
            target=target,
            interaction_context=TurboInteractionUtil.InteractionContext.
            SOURCE_REACTION,
            insert_strategy=TurboInteractionUtil.QueueInsertStrategy.NEXT)
    if si_result:
        if TurboSimUtil.Age.get_age(sim) == TurboSimUtil.Age.CHILD:
            add_sim_buff(sim, SimBuff.PRIVACY_EMBARRASSED)
        cooldown_offset = random.randint(-1, 2)
        sim_ev(sim).full_nudity_reaction_cooldown = 12 + cooldown_offset
        sim_ev(sim).inner_nudity_reaction_cooldown = 6 + cooldown_offset
        set_sim_penis_state(sim, True, 8, set_if_nude=True)
        return True
    return False
Beispiel #6
0
def _after_sex_buffs(sims_list):
    if len(sims_list) > 1:
        for (_, sim_info) in sims_list:
            add_sim_trait(sim_info, SimTrait.HIDDEN_HADWOOHOO)
            while not TurboSimUtil.Occult.is_ghost(sim_info):
                while True:
                    for (_, target_sim_info) in sims_list:
                        while sim_info is not target_sim_info and TurboSimUtil.Occult.is_ghost(
                                target_sim_info):
                            add_sim_buff(sim_info, SimBuff.WOOHOO_WITH_GHOST)
                            break
Beispiel #7
0
def test_sex_satifaction_moodlets(output=None):
    sim = TurboManagerUtil.Sim.get_active_sim()
    for buff_id in SEX_SATISFACTION_BUFFS.values():
        if set_buff_timeout(buff_id, 60):
            add_sim_buff(sim, buff_id, reason=4052013031)
            set_buff_timeout(buff_id, 600)
    for buff_id in SEX_UNSATISFACTION_BUFFS.values():
        if set_buff_timeout(buff_id, 60):
            add_sim_buff(sim, buff_id, reason=4052013031)
            set_buff_timeout(buff_id, 600)
    output('Sex Satisfaction moodlets applied.')
def _update_sim_desire_effects(sim_identifier):
    sim_info = TurboManagerUtil.Sim.get_sim_info(sim_identifier)
    master_desire_level = get_sim_statistic_value(
        sim_info, SimCommodity.WW_SEX_MASTER_DESIRE)
    if master_desire_level >= 85:
        if not has_sim_buff(sim_info, SimBuff.WW_DESIRE_NEGATIVE):
            remove_sim_buff(sim_info, SimBuff.WW_DESIRE_POSITIVE)
            add_sim_buff(sim_info,
                         SimBuff.WW_DESIRE_NEGATIVE,
                         reason=2404119453)
    elif not (master_desire_level >= 50
              and has_sim_buff(sim_info, SimBuff.WW_DESIRE_POSITIVE)):
        add_sim_buff(sim_info, SimBuff.WW_DESIRE_POSITIVE, reason=2404119453)
Beispiel #9
0
def _flash_sim_result(sim, target):
    sim_ev(sim).is_flashing = True
    increase_sim_nudity_skill(sim,
                              get_nudity_skill_points_modifier(
                                  NuditySkillIncreaseReason.FLASHING_BODY),
                              extra_fatigue=5.0)
    is_prefered_gender = TurboSimUtil.Gender.get_gender(
        sim) in get_sim_preferenced_genders(target)
    if is_prefered_gender is True:
        apply_nudity_skill_influence(target, 0.05, overall_limit=6.5)
        change_sim_desire_level(target, 10)
        change_sim_desire_level(sim, 4.5)
    if not has_sim_buff(sim, SimBuff.WW_NUDITY_HAS_FLASHED):
        add_sim_buff(sim, SimBuff.WW_NUDITY_HAS_FLASHED)
def _update_nudity_buffs(sim_info, category_and_index):
    if TurboSimUtil.Age.is_younger_than(sim_info, TurboSimUtil.Age.CHILD):
        return
    if not is_sim_naturist(
            sim_info) or get_sim_nudity_skill_level(sim_info) < 2:
        return
    has_nudity_buff = has_sim_buff(sim_info, SimBuff.WW_NUDITY_IS_NAKED_HIGH)
    sim_outfit_level = get_sim_outfit_level(
        sim_info, outfit_category_and_index=category_and_index)
    is_sim_nude = sim_outfit_level == OutfitLevel.NUDE or sim_outfit_level == OutfitLevel.BATHING
    if has_nudity_buff is False and is_sim_nude is True:
        add_sim_buff(sim_info, SimBuff.WW_NUDITY_IS_NAKED_HIGH)
    if has_nudity_buff is True and is_sim_nude is False:
        remove_sim_buff(sim_info, SimBuff.WW_NUDITY_IS_NAKED_HIGH)
Beispiel #11
0
def _apply_sim_sex_satisfaction_moodlet(sim_info, satisfaction_type,
                                        satisfaction_level):
    satisfaction_moodlet_timeout = 60 * max(1, satisfaction_level)
    satisfaction_moodlet = None
    if satisfaction_level <= 0:
        if satisfaction_type in SEX_UNSATISFACTION_BUFFS:
            satisfaction_moodlet = SEX_UNSATISFACTION_BUFFS[satisfaction_type]
    elif satisfaction_type in SEX_SATISFACTION_BUFFS:
        satisfaction_moodlet = SEX_SATISFACTION_BUFFS[satisfaction_type]
    if satisfaction_moodlet is None:
        return
    clear_all_satifaction_data(sim_info)
    if set_buff_timeout(satisfaction_moodlet, satisfaction_moodlet_timeout):
        add_sim_buff(sim_info, satisfaction_moodlet, reason=4052013031)
    set_buff_timeout(satisfaction_moodlet, 600)
 def on_interaction_start(cls, interaction_instance):
     sim = cls.get_interaction_sim(interaction_instance)
     household = TurboSimUtil.Household.get_household(sim)
     if household is None:
         return False
     if not TurboWorldUtil.Household.subtract_funds(household, 1500):
         return False
     sim_info = TurboManagerUtil.Sim.get_sim_info(sim)
     TurboSimUtil.Pregnancy.clear_pregnancy(sim_info)
     if has_sim_trait(sim_info, SimTrait.HATESCHILDREN):
         add_sim_buff(sim_info, SimBuff.WW_PREGNANCY_TERMINATION_HAPPY, reason=3441893392)
     else:
         add_sim_buff(sim_info, SimBuff.WW_PREGNANCY_TERMINATION_SAD, reason=3441893392)
     display_notification(text=3344178125, text_tokens=(sim_info,), title=2364600527, secondary_icon=sim_info)
     increase_sim_ww_statistic(sim_info, 'times_terminated_pregnancy')
     TurboSimUtil.Interaction.push_affordance(sim, SimInteraction.WW_GO_HOME, interaction_context=TurboInteractionUtil.InteractionContext.SOURCE_SCRIPT, insert_strategy=TurboInteractionUtil.QueueInsertStrategy.NEXT, must_run_next=True, priority=TurboInteractionUtil.Priority.Critical, run_priority=TurboInteractionUtil.Priority.Critical)
     return True
def _try_trigger_sim_miscarriage(sim_identifier):
    if not get_sex_setting(SexSetting.MISCARRIAGE_SWITCH, variable_type=bool):
        return False
    if not TurboSimUtil.Pregnancy.is_pregnant(sim_identifier):
        return False
    if has_sim_buffs(sim_identifier, MISCARRIAGE_DISALLOWED_PREGNANCY_BUFFS):
        return False
    if not has_sim_buffs(sim_identifier, MISCARRIAGE_ALLOWED_PREGNANCY_BUFFS):
        return False
    pregnancy_days = get_sex_setting(SexSetting.PREGNANCY_DURATION,
                                     variable_type=int)
    miscarriage_potential_pregnancy_hours = 0.72 * pregnancy_days * 24
    miscarriage_chance = sim_ev(
        sim_identifier
    ).miscarriage_potential / 3.8 / miscarriage_potential_pregnancy_hours
    if random.uniform(0, 1) >= miscarriage_chance:
        return False
    if remove_sim_pregnancy(sim_identifier):
        add_sim_buff(sim_identifier,
                     SimBuff.WW_PREGNANCY_MISCARRIAGE,
                     reason=3245985980)
        TurboSimUtil.Interaction.push_affordance(
            sim_identifier,
            SimInteraction.WW_PREGNANCY_MISCARRIAGE,
            interaction_context=TurboInteractionUtil.InteractionContext.
            SOURCE_SCRIPT,
            insert_strategy=TurboInteractionUtil.QueueInsertStrategy.NEXT,
            must_run_next=True,
            priority=TurboInteractionUtil.Priority.Critical,
            run_priority=TurboInteractionUtil.Priority.Critical)
        miscarriage_puddle_object = TurboObjectUtil.GameObject.create_object(
            12327982570318338407)
        if miscarriage_puddle_object:
            TurboObjectUtil.Puddle.place_puddle(miscarriage_puddle_object,
                                                sim_identifier)
        TurboWorldUtil.Time.set_current_time_speed(
            TurboWorldUtil.Time.ClockSpeedMode.NORMAL)
        display_notification(text=1234477375,
                             text_tokens=(sim_identifier, ),
                             title=971885236,
                             visual_type=TurboUIUtil.Notification.
                             UiDialogNotificationVisualType.SPECIAL_MOMENT,
                             secondary_icon=sim_identifier)
        TurboUIUtil.Camera.move_to_sim(sim_identifier)
        _sim_miscarriage_reaction(sim_identifier)
Beispiel #14
0
def update_cum_buffs(sim_info, outfit_category_and_index=None):
    if TurboSimUtil.Age.is_younger_than(sim_info, TurboSimUtil.Age.CHILD):
        return
    has_positive_buff = has_sim_buff(sim_info, SimBuff.WW_CUM_ON_BODY_POSITIVE)
    has_negative_buff = has_sim_buff(sim_info, SimBuff.WW_CUM_ON_BODY_NEGATIVE)
    if has_sim_cas_part_id(sim_info, (CUM_FACE_LAYER, CUM_CHEST_LAYER, CUM_BACK_LAYER, CUM_VAGINA_LAYER, CUM_BUTT_LAYER, CUM_FEET_LAYER), outfit_category_and_index=outfit_category_and_index):
        if has_positive_buff is False and has_negative_buff is False:
            if has_sim_trait(sim_info, SimTrait.WW_CUMSLUT) or has_sim_trait(sim_info, SimTrait.ROMANTIC):
                add_sim_buff(sim_info, SimBuff.WW_CUM_ON_BODY_POSITIVE)
            elif has_sim_trait(sim_info, SimTrait.HATESCHILDREN):
                return
            else:
                add_sim_buff(sim_info, SimBuff.WW_CUM_ON_BODY_NEGATIVE)
        return
    if has_positive_buff is True:
        remove_sim_buff(sim_info, SimBuff.WW_CUM_ON_BODY_POSITIVE)
    if has_negative_buff is True:
        remove_sim_buff(sim_info, SimBuff.WW_CUM_ON_BODY_NEGATIVE)
Beispiel #15
0
def apply_period_related_buffs(sim_identifier):
    sim_info = TurboManagerUtil.Sim.get_sim_info(sim_identifier)
    sim_id = TurboManagerUtil.Sim.get_sim_id(sim_info)
    menstrual_cycle_days = get_sim_menstrual_cycle_days(sim_info)
    absolute_days = TurboWorldUtil.Time.get_absolute_days(
    ) + ABSOLUTE_DAYS_OFFSET
    cycle_day = absolute_days % menstrual_cycle_days + 1
    cycle_number = max(1, int(absolute_days / menstrual_cycle_days))
    random_inst = random.Random(sim_id / cycle_number)
    (_, _, cramps_duration, period_duration) = get_cycle_durations()
    is_on_birth_control = sim_ev(
        sim_info
    ).day_used_birth_control_pills == TurboWorldUtil.Time.get_absolute_days()
    if is_on_birth_control is True:
        period_duration = 0
    else:
        period_duration = random_inst.randint(*period_duration)
    if period_duration > 0 and cycle_day <= period_duration:
        if has_sim_trait(sim_info, SimTrait.OCCULTVAMPIRE):
            period_buff = SimBuff.WW_PREGNANCY_PERIOD_VAMPIRE_UNCOMFORTABLE
        else:
            period_buff = random_inst.choice(
                (SimBuff.WW_PREGNANCY_PERIOD_FINE,
                 SimBuff.WW_PREGNANCY_PERIOD_FLIRTY,
                 SimBuff.WW_PREGNANCY_PERIOD_DAZED,
                 SimBuff.WW_PREGNANCY_PERIOD_SAD,
                 SimBuff.WW_PREGNANCY_PERIOD_TENSE,
                 SimBuff.WW_PREGNANCY_PERIOD_UNCOMFORTABLE))
        add_sim_buff(sim_info, period_buff)
    is_using_weed = is_basemental_drugs_installed() and (
        has_sim_buff(sim_info, SimBuff.BASEMENTAL_WEED_HIGH_ON_AK47) or
        (has_sim_buff(sim_info, SimBuff.BASEMENTAL_WEED_HIGH_ON_OG_KUSH) or
         has_sim_buff(sim_info, SimBuff.BASEMENTAL_WEED_HIGH_ON_PURPLE_HAZE)))
    if is_on_birth_control is True or is_using_weed is True:
        cramps_duration = 0
    else:
        cramps_duration = random_inst.randint(
            *cramps_duration) if random_inst.uniform(0, 1) <= 0.5 else 0
    if cramps_duration > 0 and cycle_day > menstrual_cycle_days - cramps_duration:
        add_sim_buff(sim_info,
                     random_inst.choice((SimBuff.WW_PREGNANCY_CRAMPS_LOW,
                                         SimBuff.WW_PREGNANCY_CRAMPS_MEDIUM,
                                         SimBuff.WW_PREGNANCY_CRAMPS_HIGH)),
                     reason=2061236478)
Beispiel #16
0
def _wickedwhims_undress_swimwear_on_jumping_to_water(interaction_instance):
    if not get_nudity_setting(NuditySetting.NUDITY_SWITCH_STATE,
                              variable_type=bool):
        return
    interaction_guid = TurboResourceUtil.Resource.get_guid64(
        interaction_instance)
    if interaction_guid not in JUMPING_INTERACTIONS:
        return
    sim_info = TurboManagerUtil.Sim.get_sim_info(
        TurboInteractionUtil.get_interaction_sim(interaction_instance))
    if TurboSimUtil.Age.is_younger_than(sim_info, TurboSimUtil.Age.CHILD):
        return
    if get_modified_outfit(
            sim_info)[0] != TurboCASUtil.OutfitCategory.SWIMWEAR:
        return
    if is_sim_outfit_fullbody(sim_info):
        return
    if random.uniform(0, 1) > 0.1:
        return
    has_stripped = False
    if TurboSimUtil.Gender.is_male(sim_info):
        if get_sim_body_state(sim_info, 7) != BodyState.OUTFIT:
            return
        strip_result = strip_outfit(sim_info, strip_type_bottom=StripType.NUDE)
        if strip_result is True:
            set_sim_bottom_naked_state(sim_info, True)
            has_stripped = True
    else:
        can_undress_top = get_sim_body_state(sim_info, 6) == BodyState.OUTFIT
        can_undress_bottom = get_sim_body_state(sim_info,
                                                7) == BodyState.OUTFIT
        undress_top = False
        undress_bottom = False
        if can_undress_top is True and can_undress_bottom is True:
            if bool(random.getrandbits(1)):
                undress_top = True
            else:
                undress_bottom = True
        elif can_undress_top is True:
            undress_top = True
        elif can_undress_bottom is True:
            undress_bottom = True
        if undress_top is False and undress_bottom is False:
            return
        if undress_top is True:
            strip_result = strip_outfit(sim_info,
                                        strip_type_top=StripType.NUDE)
            if strip_result is True:
                set_sim_top_naked_state(sim_info, True)
                has_stripped = True
        elif undress_bottom is True:
            strip_result = strip_outfit(sim_info,
                                        strip_type_bottom=StripType.NUDE)
            if strip_result is True:
                set_sim_bottom_naked_state(sim_info, True)
                has_stripped = True
    if has_stripped is True:
        display_notification(text=267480274,
                             text_tokens=(sim_info, ),
                             secondary_icon=sim_info)
        if not has_sim_permission_for_nudity(sim_info)[0]:
            add_sim_buff(sim_info,
                         SimBuff.OBJECT_JUMPSTAND_SWIMSUITMALFUNCTION)
        if random.uniform(0, 1) <= 0.45:
            add_sim_buff(sim_info, SimBuff.WW_NUDITY_TEMPORARY_BRAVE)
def _jealousy_from_sex_reaction(sim, sex_handler):
    if not get_relationship_setting(RelationshipSetting.JEALOUSY_STATE,
                                    variable_type=bool):
        return False
    if sex_handler.get_actors_amount() <= 1:
        return False
    if TurboSimUtil.Age.is_younger_than(sim, TurboSimUtil.Age.CHILD):
        return False
    if has_sim_trait(sim, SimTrait.WW_POLYAMOROUS) or has_sim_trait(
            sim, SimTrait.WW_CUCKOLD):
        return False
    (found_lovers,
     found_non_lovers) = _get_jealousy_sims_from_sex_handler(sim, sex_handler)
    if found_lovers and found_non_lovers:
        for target in found_non_lovers:
            relationship_amount_modifier = -3 if not has_sim_trait(
                sim, SimTrait.JEALOUS) else -6
            change_relationship_with_sim(sim, target,
                                         RelationshipTrackType.FRIENDSHIP,
                                         relationship_amount_modifier)
            if get_relationship_with_sim(sim, target,
                                         RelationshipTrackType.ROMANCE) > 0:
                change_relationship_with_sim(sim, target,
                                             RelationshipTrackType.ROMANCE,
                                             relationship_amount_modifier)
        for target in found_lovers:
            jealousy_success = False
            for jealousy_interaction in JEALOUSY_WOOHOO_REACTION_LIST:
                result = TurboSimUtil.Interaction.push_affordance(
                    sim,
                    jealousy_interaction,
                    target=target,
                    interaction_context=TurboInteractionUtil.
                    InteractionContext.SOURCE_SCRIPT,
                    insert_strategy=TurboInteractionUtil.QueueInsertStrategy.
                    NEXT,
                    must_run_next=True,
                    priority=TurboInteractionUtil.Priority.High,
                    run_priority=TurboInteractionUtil.Priority.High)
                if result:
                    jealousy_success = True
                    break
            if has_sim_buff(sim, SimBuff.JEALOUSY_CHEATER):
                current_romance_rel_amount = get_relationship_with_sim(
                    sim, target, RelationshipTrackType.ROMANCE)
                if current_romance_rel_amount >= 30 and 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_GETTINGMARRIED)
                        ) or has_relationship_bit_with_sim(
                            sim, target,
                            SimRelationshipBit.ROMANTIC_SIGNIFICANT_OTHER):
                    add_sim_buff(sim,
                                 SimBuff.JEALOUSY_HIDDEN_WITNESSEDCHEATING)
            if jealousy_success is True:
                sim_ev(sim).sex_reaction_cooldown = 5
                return True
    return False
def _general_sex_reaction(sim, sex_handler):
    skip_reaction = False
    if sex_handler.get_actors_amount(
    ) == 1 and sex_handler.get_animation_instance().get_sex_category(
    ) == SexCategoryType.TEASING:
        target = next(iter(sex_handler.get_actors_sim_instance_gen()))
        if target is not None:
            skip_reaction = True
            if TurboSimUtil.Gender.is_female(
                    target) and get_sim_actual_body_state(
                        target,
                        6) == BodyState.NUDE or get_sim_actual_body_state(
                            target, 7) == BodyState.NUDE:
                skip_reaction = False
    if skip_reaction is True:
        return False
    sex_creator_sim = TurboManagerUtil.Sim.get_sim_instance(
        sex_handler.get_creator_sim_id())
    if sex_creator_sim is None:
        return False
    (sex_reaction_data, sex_reaction_should_left,
     sex_reaction_target_override) = get_reaction_type(sim, sex_handler)
    if not get_sex_setting(SexSetting.PRIVACY_STATE, variable_type=bool):
        sex_reaction_should_left = False
    sim_id = TurboManagerUtil.Sim.get_sim_id(sim)
    if sex_reaction_should_left is True:
        if sim_id in sex_handler.go_away_sims_list:
            go_away_reaction_result = TurboSimUtil.Interaction.push_affordance(
                sim,
                SimInteraction.WW_GO_AWAY_FROM_SEX,
                target=sex_creator_sim,
                interaction_context=TurboInteractionUtil.InteractionContext.
                SOURCE_SCRIPT,
                insert_strategy=TurboInteractionUtil.QueueInsertStrategy.NEXT,
                must_run_next=True,
                priority=TurboInteractionUtil.Priority.High,
                run_priority=TurboInteractionUtil.Priority.High)
            return bool(go_away_reaction_result)
        sex_handler.go_away_sims_list.add(sim_id)
    else:
        sim_ev(sim).sex_reaction_handlers_list.append(
            sex_handler.get_identifier())
    if sim_id in sex_handler.has_reacted_sims_list:
        reaction_result = TurboSimUtil.Interaction.push_affordance(
            sim,
            sex_reaction_data[1],
            target=sex_reaction_target_override
            if sex_reaction_target_override is not None else sex_creator_sim,
            insert_strategy=TurboInteractionUtil.QueueInsertStrategy.NEXT,
            priority=TurboInteractionUtil.Priority.High,
            run_priority=TurboInteractionUtil.Priority.High,
            skip_if_running=True)
    else:
        reaction_result = TurboSimUtil.Interaction.push_affordance(
            sim,
            sex_reaction_data[1],
            target=sex_reaction_target_override
            if sex_reaction_target_override is not None else sex_creator_sim,
            insert_strategy=TurboInteractionUtil.QueueInsertStrategy.FIRST,
            must_run_next=True,
            priority=TurboInteractionUtil.Priority.Critical,
            run_priority=TurboInteractionUtil.Priority.Critical,
            skip_if_running=True)
    if reaction_result:
        increase_sim_ww_statistic(sim, 'times_reacted_to_sex')
        increase_sim_ww_statistic(sex_creator_sim, 'times_been_seen_in_sex')
        if sex_reaction_data[2] is not None:
            add_sim_buff(sim, sex_reaction_data[2])
        if sex_reaction_should_left is True:
            sim_ev(sim).sex_reaction_attempt_cooldown = 0
        sex_handler.has_reacted_sims_list.add(sim_id)
        return True
    return False
def apply_asking_for_woohoo_relations(sim_identifier,
                                      target_sim_identifier,
                                      status,
                                      display_message=True):
    sim_info = TurboManagerUtil.Sim.get_sim_info(sim_identifier)
    target_sim_info = TurboManagerUtil.Sim.get_sim_info(target_sim_identifier)
    if sim_info is None or target_sim_info is None:
        return
    set_sim_motive_value(sim_info,
                         SimMotive.SOCIAL,
                         get_sim_motive_value(sim_info, SimMotive.SOCIAL) + 8,
                         skip_disabled=True)
    set_sim_motive_value(
        target_sim_info,
        SimMotive.SOCIAL,
        get_sim_motive_value(target_sim_info, SimMotive.SOCIAL) + 8,
        skip_disabled=True)
    if has_sim_trait(sim_info, SimTrait.EVIL) and has_sim_trait(
            sim_info, SimTrait.GOOD) or has_sim_trait(
                sim_info, SimTrait.GOOD) and has_sim_trait(
                    sim_info, SimTrait.EVIL):
        if random.uniform(0, 1) <= 0.05:
            add_sim_buff(sim_info, SimBuff.GOODVSEVIL_ANGRY)
        if random.uniform(0, 1) <= 0.05:
            add_sim_buff(target_sim_info, SimBuff.GOODVSEVIL_ANGRY)
        if random.uniform(0, 1) <= 0.05:
            add_sim_buff(sim_info, SimBuff.GOODVSEVIL_SAD)
        if random.uniform(0, 1) <= 0.05:
            add_sim_buff(target_sim_info, SimBuff.GOODVSEVIL_SAD)
        change_sim_statistic_value(sim_info, 50,
                                   SimCommodity.TRAIT_ROMANTIC_AFFECTION)
    if status is True:
        TurboSimUtil.Gender.set_gender_preference(
            sim_info, TurboSimUtil.Gender.get_gender(target_sim_info),
            TurboSimUtil.Gender.get_gender_preference(
                sim_info, TurboSimUtil.Gender.get_gender(target_sim_info)) +
            10)
        change_sim_statistic_value(sim_info, 10,
                                   SimCommodity.BUFF_SOCIAL_FLIRTYCONVERSATION)
        change_sim_statistic_value(target_sim_info, 10,
                                   SimCommodity.BUFF_SOCIAL_FLIRTYCONVERSATION)
        change_sim_statistic_value(sim_info, -10,
                                   SimCommodity.BUFF_SOCIAL_ANGRYCONVERSATION)
        change_sim_statistic_value(target_sim_info, -10,
                                   SimCommodity.BUFF_SOCIAL_ANGRYCONVERSATION)
        change_sim_statistic_value(
            sim_info, -10, SimCommodity.BUFF_SOCIAL_EMBARRASSINGCONVERSATION)
        change_sim_statistic_value(
            target_sim_info, -10,
            SimCommodity.BUFF_SOCIAL_EMBARRASSINGCONVERSATION)
        change_sim_statistic_value(sim_info, -10,
                                   SimCommodity.BUFF_SOCIAL_BORINGCONVERSATION)
        change_sim_statistic_value(target_sim_info, -10,
                                   SimCommodity.BUFF_SOCIAL_BORINGCONVERSATION)
        change_sim_statistic_value(sim_info, -10,
                                   SimCommodity.BUFF_SOCIAL_HAPPYCONVERSATION)
        change_sim_statistic_value(target_sim_info, -10,
                                   SimCommodity.BUFF_SOCIAL_HAPPYCONVERSATION)
        change_sim_statistic_value(
            sim_info, -10, SimCommodity.BUFF_SOCIAL_PLAYFULCONVERSATION)
        change_sim_statistic_value(
            target_sim_info, -10, SimCommodity.BUFF_SOCIAL_PLAYFULCONVERSATION)
        change_relationship_with_sim(sim_info, target_sim_info,
                                     ShortTermRelationshipTrackType.ROMANCE, 5)
        change_relationship_with_sim(target_sim_info, sim_info,
                                     ShortTermRelationshipTrackType.ROMANCE, 5)
        current_fun_short_rel_amount = get_relationship_with_sim(
            sim_info, target_sim_info, ShortTermRelationshipTrackType.FUN)
        short_fun_rel_gain_amount = 0
        if -100 <= current_fun_short_rel_amount <= -50:
            short_fun_rel_gain_amount += 20
        elif -50 <= current_fun_short_rel_amount <= -15:
            short_fun_rel_gain_amount += 10
        elif 15 <= current_fun_short_rel_amount <= 50:
            short_fun_rel_gain_amount += -10
        elif 50 <= current_fun_short_rel_amount <= 100:
            short_fun_rel_gain_amount += -20
        change_relationship_with_sim(sim_info, target_sim_info,
                                     ShortTermRelationshipTrackType.FUN,
                                     short_fun_rel_gain_amount)
        change_relationship_with_sim(target_sim_info, sim_info,
                                     ShortTermRelationshipTrackType.FUN,
                                     short_fun_rel_gain_amount)
        current_friendship_short_rel_amount = get_relationship_with_sim(
            sim_info, target_sim_info,
            ShortTermRelationshipTrackType.FRIENDSHIP)
        short_friendship_rel_gain_amount = 0
        if -100 <= current_friendship_short_rel_amount <= -50:
            short_friendship_rel_gain_amount += 20
        elif -50 <= current_friendship_short_rel_amount <= -15:
            short_friendship_rel_gain_amount += 10
        elif 15 <= current_friendship_short_rel_amount <= 50:
            short_friendship_rel_gain_amount += 5
        change_relationship_with_sim(sim_info, target_sim_info,
                                     ShortTermRelationshipTrackType.FRIENDSHIP,
                                     short_friendship_rel_gain_amount)
        change_relationship_with_sim(target_sim_info, sim_info,
                                     ShortTermRelationshipTrackType.FRIENDSHIP,
                                     short_friendship_rel_gain_amount)
        current_awkwardness_short_rel_amount = get_relationship_with_sim(
            sim_info, target_sim_info,
            ShortTermRelationshipTrackType.AWKWARDNESS)
        short_awkwardness_rel_gain_amount = 0
        if -100 <= current_awkwardness_short_rel_amount <= -50:
            short_awkwardness_rel_gain_amount += 20
        elif -50 <= current_awkwardness_short_rel_amount <= -15:
            short_awkwardness_rel_gain_amount += 10
        change_relationship_with_sim(
            sim_info, target_sim_info,
            ShortTermRelationshipTrackType.AWKWARDNESS,
            short_friendship_rel_gain_amount)
        change_relationship_with_sim(
            target_sim_info, sim_info,
            ShortTermRelationshipTrackType.AWKWARDNESS,
            short_friendship_rel_gain_amount)
        increase_sim_ww_statistic(sim_info, 'times_sex_got_accepted')
    else:
        change_relationship_with_sim(
            sim_info, target_sim_info,
            ShortTermRelationshipTrackType.AWKWARDNESS, -10)
        change_relationship_with_sim(
            target_sim_info, sim_info,
            ShortTermRelationshipTrackType.AWKWARDNESS, -10)
        current_romance_short_rel_amount = get_relationship_with_sim(
            sim_info, target_sim_info, ShortTermRelationshipTrackType.ROMANCE)
        short_romance_rel_gain_amount = 0
        if -100 <= current_romance_short_rel_amount <= -50:
            short_romance_rel_gain_amount += 20
        elif -50 <= current_romance_short_rel_amount <= -15:
            short_romance_rel_gain_amount += 10
        elif 15 <= current_romance_short_rel_amount <= 50:
            short_romance_rel_gain_amount += -10
        elif 50 <= current_romance_short_rel_amount <= 100:
            short_romance_rel_gain_amount += -20
        change_relationship_with_sim(sim_info, target_sim_info,
                                     ShortTermRelationshipTrackType.ROMANCE,
                                     short_romance_rel_gain_amount)
        change_relationship_with_sim(target_sim_info, sim_info,
                                     ShortTermRelationshipTrackType.ROMANCE,
                                     short_romance_rel_gain_amount)
        current_friendship_short_rel_amount = get_relationship_with_sim(
            sim_info, target_sim_info,
            ShortTermRelationshipTrackType.FRIENDSHIP)
        short_friendship_rel_gain_amount = 0
        if -100 <= current_friendship_short_rel_amount <= -50:
            short_friendship_rel_gain_amount += 20
        elif -50 <= current_friendship_short_rel_amount <= -15:
            short_friendship_rel_gain_amount += 10
        elif 15 <= current_friendship_short_rel_amount <= 50:
            short_friendship_rel_gain_amount += -10
        elif 50 <= current_friendship_short_rel_amount <= 100:
            short_friendship_rel_gain_amount += -20
        change_relationship_with_sim(sim_info, target_sim_info,
                                     ShortTermRelationshipTrackType.FRIENDSHIP,
                                     short_friendship_rel_gain_amount)
        change_relationship_with_sim(target_sim_info, sim_info,
                                     ShortTermRelationshipTrackType.FRIENDSHIP,
                                     short_friendship_rel_gain_amount)
        current_fun_short_rel_amount = get_relationship_with_sim(
            sim_info, target_sim_info, ShortTermRelationshipTrackType.FUN)
        short_fun_rel_gain_amount = 0
        if -50 <= current_fun_short_rel_amount <= -15:
            short_fun_rel_gain_amount += 10
        if 15 <= current_fun_short_rel_amount <= 50:
            short_fun_rel_gain_amount += -10
        elif 50 <= current_fun_short_rel_amount <= 100:
            short_fun_rel_gain_amount += -20
        change_relationship_with_sim(sim_info, target_sim_info,
                                     ShortTermRelationshipTrackType.FUN,
                                     short_fun_rel_gain_amount)
        change_relationship_with_sim(target_sim_info, sim_info,
                                     ShortTermRelationshipTrackType.FUN,
                                     short_fun_rel_gain_amount)
        current_friendship_rel_amount = get_relationship_with_sim(
            sim_info, target_sim_info, RelationshipTrackType.FRIENDSHIP)
        friendship_rel_gain_amount = 0
        if -100 <= current_friendship_rel_amount <= -40:
            friendship_rel_gain_amount += -2
        elif -40 <= current_friendship_rel_amount <= 0:
            friendship_rel_gain_amount += -2
        elif 0 <= current_friendship_rel_amount <= 20:
            friendship_rel_gain_amount += -2
        elif 20 <= current_friendship_rel_amount <= 40:
            friendship_rel_gain_amount += -2
        elif 40 <= current_friendship_rel_amount <= 80:
            friendship_rel_gain_amount += -3
        elif 80 <= current_friendship_rel_amount <= 100:
            friendship_rel_gain_amount += -4
        if has_sim_trait(sim_info, SimTrait.LONER) and sim_ev(
                sim_info).active_sex_handler is None and random.uniform(
                    0, 1) <= 0.2:
            add_sim_buff(sim_info, SimBuff.EMBARRASSED_LONER)
        current_romance_rel_amount = get_relationship_with_sim(
            sim_info, target_sim_info, RelationshipTrackType.ROMANCE)
        romance_rel_gain_amount = 0
        if -100 <= current_romance_rel_amount <= -40:
            romance_rel_gain_amount += -2
        elif -40 <= current_romance_rel_amount <= 0:
            romance_rel_gain_amount += -2
        elif 0 <= current_romance_rel_amount <= 20:
            romance_rel_gain_amount += -2
        elif 20 <= current_romance_rel_amount <= 40:
            romance_rel_gain_amount += -2
        elif 40 <= current_romance_rel_amount <= 80:
            romance_rel_gain_amount += -2
        elif 80 <= current_romance_rel_amount <= 100:
            romance_rel_gain_amount += -2
        change_sim_statistic_value(sim_info, -20,
                                   SimCommodity.BUFF_SOCIAL_FLIRTYCONVERSATION)
        change_sim_statistic_value(target_sim_info, -20,
                                   SimCommodity.BUFF_SOCIAL_FLIRTYCONVERSATION)
        change_sim_statistic_value(sim_info, -20,
                                   SimCommodity.BUFF_SOCIAL_ANGRYCONVERSATION)
        change_sim_statistic_value(target_sim_info, -20,
                                   SimCommodity.BUFF_SOCIAL_ANGRYCONVERSATION)
        if has_sim_trait(sim_info, SimTrait.LONER):
            embarrassing_conversation_commodity_amount = 40
        else:
            embarrassing_conversation_commodity_amount = 20
        if sim_ev(sim_info).active_sex_handler is None:
            change_sim_statistic_value(
                sim_info, embarrassing_conversation_commodity_amount,
                SimCommodity.BUFF_SOCIAL_EMBARRASSINGCONVERSATION)
        change_sim_statistic_value(sim_info, -20,
                                   SimCommodity.BUFF_SOCIAL_BORINGCONVERSATION)
        change_sim_statistic_value(target_sim_info, -20,
                                   SimCommodity.BUFF_SOCIAL_BORINGCONVERSATION)
        change_sim_statistic_value(sim_info, -20,
                                   SimCommodity.BUFF_SOCIAL_HAPPYCONVERSATION)
        change_sim_statistic_value(target_sim_info, -20,
                                   SimCommodity.BUFF_SOCIAL_HAPPYCONVERSATION)
        change_sim_statistic_value(
            sim_info, -20, SimCommodity.BUFF_SOCIAL_PLAYFULCONVERSATION)
        change_sim_statistic_value(
            target_sim_info, -20, SimCommodity.BUFF_SOCIAL_PLAYFULCONVERSATION)
        add_relationsip_bit_with_sim(
            sim_info, target_sim_info,
            SimRelationshipBit.SHORTTERM_RECENTNEGATIVESOCIAL)
        if display_message is True and (
                TurboSimUtil.Sim.is_player(sim_info)
                or TurboSimUtil.Sim.is_player(target_sim_info)):
            display_notification(text=215847180,
                                 text_tokens=(target_sim_info, sim_info),
                                 title=0,
                                 secondary_icon=target_sim_info)
        increase_sim_ww_statistic(sim_info, 'times_sex_got_rejected')