USING "flow_public_core_override.sch" USING "player_scene_schedule.sch" ///private header for family task control scripts /// alwyn.roberts@rockstarnorth.com /// FUNC BOOL HasTimeToWaitPassedFromLastPassedMission(FLOAT fSecondsToWait) IF (g_iLastMissionPassedGameTime < 0) RETURN FALSE ENDIF INT iGameTime = GET_GAME_TIMER() IF (iGameTime < (g_iLastMissionPassedGameTime+ROUND(fSecondsToWait*1000.0))) RETURN FALSE ENDIF RETURN TRUE ENDFUNC FUNC BOOL PRIVATE_Does_FamilyMember_Have_MichaelSofa_Event(enumFamilyMember eFamilyMember) IF IS_MISSION_AVAILABLE(SP_MISSION_TREVOR_1) RETURN TRUE ENDIF SWITCH eFamilyMember CASE FM_MICHAEL_SON IF g_eCurrentFamilyEvent[FM_MICHAEL_SON] = FE_M2_SON_watching_TV OR g_eCurrentFamilyEvent[FM_MICHAEL_SON] = FE_M7_SON_watching_TV_with_tracey RETURN TRUE ENDIF BREAK CASE FM_MICHAEL_DAUGHTER IF g_eCurrentFamilyEvent[FM_MICHAEL_DAUGHTER] = FE_M_DAUGHTER_workout_with_mp3 OR g_eCurrentFamilyEvent[FM_MICHAEL_DAUGHTER] = FE_M_DAUGHTER_walks_to_room_music OR g_eCurrentFamilyEvent[FM_MICHAEL_DAUGHTER] = FE_M_DAUGHTER_dancing_practice OR g_eCurrentFamilyEvent[FM_MICHAEL_DAUGHTER] = FE_M_DAUGHTER_watching_TV_sober OR g_eCurrentFamilyEvent[FM_MICHAEL_DAUGHTER] = FE_M_DAUGHTER_watching_TV_drunk OR g_eCurrentFamilyEvent[FM_MICHAEL_DAUGHTER] = FE_M_DAUGHTER_crying_over_a_guy OR g_eCurrentFamilyEvent[FM_MICHAEL_DAUGHTER] = FE_M7_SON_watching_TV_with_tracey RETURN TRUE ENDIF BREAK CASE FM_MICHAEL_WIFE IF g_eCurrentFamilyEvent[FM_MICHAEL_WIFE] = FE_M2_WIFE_in_face_mask OR g_eCurrentFamilyEvent[FM_MICHAEL_WIFE] = FE_M7_WIFE_in_face_mask // OR g_eCurrentFamilyEvent[FM_MICHAEL_WIFE] = FE_M_WIFE_getting_nails_done // OR g_eCurrentFamilyEvent[FM_MICHAEL_WIFE] = FE_M_WIFE_getting_botox_done OR g_eCurrentFamilyEvent[FM_MICHAEL_WIFE] = FE_M2_WIFE_passed_out_SOFA OR g_eCurrentFamilyEvent[FM_MICHAEL_WIFE] = FE_M7_WIFE_passed_out_SOFA RETURN TRUE ENDIF BREAK // CASE FM_MICHAEL_MEXMAID // IF g_eCurrentFamilyEvent[FM_MICHAEL_MEXMAID] = FE_M_MEXMAID_watching_TV // RETURN TRUE // ENDIF // BREAK ENDSWITCH RETURN FALSE ENDFUNC FUNC BOOL PRIVATE_Does_FamilyEvents_Overlap_MichaelLivingroom(enumFamilyMember eFamilyMember) IF (eFamilyMember <> FM_MICHAEL_SON) IF PRIVATE_Does_FamilyMember_Have_MichaelSofa_Event(FM_MICHAEL_SON) RETURN TRUE ENDIF ENDIF IF (eFamilyMember <> FM_MICHAEL_DAUGHTER) IF PRIVATE_Does_FamilyMember_Have_MichaelSofa_Event(FM_MICHAEL_DAUGHTER) RETURN TRUE ENDIF ENDIF IF (eFamilyMember <> FM_MICHAEL_WIFE) IF g_eLastMissionPassed = SP_MISSION_ME_AMANDA IF NOT HasTimeToWaitPassedFromLastPassedMission(60.0) RETURN TRUE ENDIF ENDIF IF PRIVATE_Does_FamilyMember_Have_MichaelSofa_Event(FM_MICHAEL_WIFE) OR g_eCurrentFamilyEvent[FM_MICHAEL_WIFE] = FE_M2_WIFE_phones_man_OR_therapist OR g_eCurrentFamilyEvent[FM_MICHAEL_WIFE] = FE_M7_WIFE_phones_man_OR_therapist OR g_eCurrentFamilyEvent[FM_MICHAEL_WIFE] = FE_M_WIFE_hangs_up_and_wanders RETURN TRUE ENDIF ENDIF IF (eFamilyMember <> FM_MICHAEL_MEXMAID) IF PRIVATE_Does_FamilyMember_Have_MichaelSofa_Event(FM_MICHAEL_MEXMAID) OR g_eCurrentFamilyEvent[FM_MICHAEL_MEXMAID] = FE_M_MEXMAID_stealing_stuff OR g_eCurrentFamilyEvent[FM_MICHAEL_MEXMAID] = FE_M_MEXMAID_stealing_stuff_caught RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL PRIVATE_Does_FamilyEvents_Overlap_MichaelShower(enumFamilyMember eFamilyMember) IF (eFamilyMember <> FM_MICHAEL_DAUGHTER) IF g_eCurrentFamilyEvent[FM_MICHAEL_DAUGHTER] = FE_M_DAUGHTER_shower RETURN TRUE ENDIF ENDIF IF (eFamilyMember <> FM_MICHAEL_SON) IF g_eCurrentFamilyEvent[FM_MICHAEL_SON] = FE_M_SON_rapping_in_the_shower RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL PRIVATE_Does_FamilyEvents_Overlap_MichaelGarden(enumFamilyMember eFamilyMember) IF (eFamilyMember <> FM_MICHAEL_DAUGHTER) IF g_eCurrentFamilyEvent[FM_MICHAEL_DAUGHTER] = FE_M2_DAUGHTER_sunbathing OR g_eCurrentFamilyEvent[FM_MICHAEL_DAUGHTER] = FE_M7_DAUGHTER_sunbathing RETURN TRUE ENDIF ENDIF IF (eFamilyMember <> FM_MICHAEL_WIFE) IF g_eCurrentFamilyEvent[FM_MICHAEL_WIFE] = FE_M2_WIFE_sunbathing OR g_eCurrentFamilyEvent[FM_MICHAEL_WIFE] = FE_M7_WIFE_sunbathing RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL PRIVATE_Does_FamilyEvents_Overlap_MichaelDriveway(enumFamilyMember eFamilyMember) IF g_eLastMissionPassed = SP_MISSION_ME_TRACEY IF NOT HasTimeToWaitPassedFromLastPassedMission(60.0) RETURN TRUE ENDIF ENDIF IF (Get_Player_Timetable_Scene_In_Progress() = PR_SCENE_M2_CARSLEEP_a) RETURN TRUE ENDIF IF (eFamilyMember <> FM_MICHAEL_SON) IF g_eCurrentFamilyEvent[FM_MICHAEL_SON] = FE_M_SON_Borrows_sisters_car RETURN TRUE ENDIF ENDIF IF (eFamilyMember <> FM_MICHAEL_DAUGHTER) IF g_eCurrentFamilyEvent[FM_MICHAEL_DAUGHTER] = FE_M_DAUGHTER_Going_out_in_her_car RETURN TRUE ENDIF ENDIF IF (eFamilyMember <> FM_MICHAEL_WIFE) IF g_eCurrentFamilyEvent[FM_MICHAEL_WIFE] = FE_M_WIFE_leaving_in_car // OR g_eCurrentFamilyEvent[FM_MICHAEL_WIFE] = FE_M_WIFE_leaving_in_car_v2 // OR g_eCurrentFamilyEvent[FM_MICHAEL_WIFE] = FE_M_WIFE_MD_leaving_in_car_v3 RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL PRIVATE_Does_FamilyEvents_Overlap_MichaelStairs(enumFamilyMember eFamilyMember) IF (eFamilyMember <> FM_MICHAEL_SON) IF g_eCurrentFamilyEvent[FM_MICHAEL_SON] = FE_M_SON_Fighting_with_sister_A OR g_eCurrentFamilyEvent[FM_MICHAEL_SON] = FE_M_SON_Fighting_with_sister_B OR g_eCurrentFamilyEvent[FM_MICHAEL_SON] = FE_M_SON_Fighting_with_sister_C OR g_eCurrentFamilyEvent[FM_MICHAEL_SON] = FE_M_SON_Fighting_with_sister_D // OR g_eCurrentFamilyEvent[FM_MICHAEL_SON] = FE_M_WIFE_screaming_at_son_P1 OR g_eCurrentFamilyEvent[FM_MICHAEL_SON] = FE_M_WIFE_screaming_at_son_P2 OR g_eCurrentFamilyEvent[FM_MICHAEL_SON] = FE_M_WIFE_screaming_at_son_P3 RETURN TRUE ENDIF ENDIF IF (eFamilyMember <> FM_MICHAEL_DAUGHTER) IF g_eCurrentFamilyEvent[FM_MICHAEL_DAUGHTER] = FE_M_DAUGHTER_screaming_at_dad OR g_eCurrentFamilyEvent[FM_MICHAEL_DAUGHTER] = FE_M_SON_Fighting_with_sister_A OR g_eCurrentFamilyEvent[FM_MICHAEL_DAUGHTER] = FE_M_SON_Fighting_with_sister_B OR g_eCurrentFamilyEvent[FM_MICHAEL_DAUGHTER] = FE_M_SON_Fighting_with_sister_C OR g_eCurrentFamilyEvent[FM_MICHAEL_DAUGHTER] = FE_M_SON_Fighting_with_sister_D OR g_eCurrentFamilyEvent[FM_MICHAEL_DAUGHTER] = FE_M_WIFE_screaming_at_daughter RETURN TRUE ENDIF ENDIF IF (eFamilyMember <> FM_MICHAEL_WIFE) IF g_eCurrentFamilyEvent[FM_MICHAEL_WIFE] = FE_M_WIFE_screaming_at_daughter // OR g_eCurrentFamilyEvent[FM_MICHAEL_WIFE] = FE_M_WIFE_screaming_at_son_P1 OR g_eCurrentFamilyEvent[FM_MICHAEL_WIFE] = FE_M_WIFE_screaming_at_son_P2 OR g_eCurrentFamilyEvent[FM_MICHAEL_WIFE] = FE_M_WIFE_screaming_at_son_P3 RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL PRIVATE_Does_FamilyEvents_Overlap_MichaelTV(enumFamilyMember eFamilyMember) IF (eFamilyMember <> FM_MICHAEL_SON) IF g_eCurrentFamilyEvent[FM_MICHAEL_SON] = FE_M2_SON_gaming_loop OR g_eCurrentFamilyEvent[FM_MICHAEL_SON] = FE_M7_SON_gaming OR g_eCurrentFamilyEvent[FM_MICHAEL_SON] = FE_M2_SON_watching_TV OR g_eCurrentFamilyEvent[FM_MICHAEL_SON] = FE_M7_SON_watching_TV_with_tracey OR g_eCurrentFamilyEvent[FM_MICHAEL_SON] = FE_M7_FAMILY_watching_TV RETURN TRUE ENDIF ENDIF IF (eFamilyMember <> FM_MICHAEL_DAUGHTER) IF g_eCurrentFamilyEvent[FM_MICHAEL_DAUGHTER] = FE_M7_FAMILY_watching_TV OR g_eCurrentFamilyEvent[FM_MICHAEL_DAUGHTER] = FE_M_DAUGHTER_watching_TV_drunk OR g_eCurrentFamilyEvent[FM_MICHAEL_DAUGHTER] = FE_M_DAUGHTER_watching_TV_sober OR g_eCurrentFamilyEvent[FM_MICHAEL_DAUGHTER] = FE_M_DAUGHTER_dancing_practice OR g_eCurrentFamilyEvent[FM_MICHAEL_DAUGHTER] = FE_M_DAUGHTER_workout_with_mp3 RETURN TRUE ENDIF ENDIF IF (eFamilyMember <> FM_MICHAEL_WIFE) IF g_eCurrentFamilyEvent[FM_MICHAEL_WIFE] = FE_M7_FAMILY_watching_TV RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL PRIVATE_Does_FamilyEvents_Overlap_Trevor0Trailer(enumFamilyMember eFamilyMember) IF (eFamilyMember <> FM_TREVOR_0_RON) IF g_eCurrentFamilyEvent[FM_TREVOR_0_RON] = FE_T0_RONEX_trying_to_pick_up_signals RETURN TRUE ENDIF ENDIF IF (eFamilyMember <> FM_TREVOR_0_MICHAEL) IF g_eCurrentFamilyEvent[FM_TREVOR_0_MICHAEL] = FE_T0_MICHAEL_depressed_head_in_hands OR g_eCurrentFamilyEvent[FM_TREVOR_0_MICHAEL] = FE_T0_MICHAEL_on_phone_to_therapist RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL PRIVATE_Does_FamilyEvents_Overlap_Trevor0Garden(enumFamilyMember eFamilyMember) IF (eFamilyMember <> FM_TREVOR_0_RON) IF g_eCurrentFamilyEvent[FM_TREVOR_0_RON] = FE_T0_RONEX_outside_looking_lonely OR g_eCurrentFamilyEvent[FM_TREVOR_0_RON] = FE_T0_RONEX_doing_target_practice RETURN TRUE ENDIF ENDIF IF (eFamilyMember <> FM_TREVOR_0_MICHAEL) IF g_eCurrentFamilyEvent[FM_TREVOR_0_MICHAEL] = FE_T0_MICHAEL_sunbathing RETURN TRUE ENDIF ENDIF IF (eFamilyMember <> FM_TREVOR_0_TREVOR) IF g_eCurrentFamilyEvent[FM_TREVOR_0_TREVOR] = FE_T0_TREVOR_blowing_shit_up OR g_eCurrentFamilyEvent[FM_TREVOR_0_TREVOR] = FE_T0_TREVOR_and_kidnapped_wife_walk RETURN TRUE ENDIF ENDIF IF (eFamilyMember <> FM_TREVOR_0_WIFE) IF g_eCurrentFamilyEvent[FM_TREVOR_0_WIFE] = FE_T0_KIDNAPPED_WIFE_does_garden_work OR g_eCurrentFamilyEvent[FM_TREVOR_0_WIFE] = FE_T0_TREVOR_and_kidnapped_wife_walk RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL PRIVATE_Does_FamilyEvents_Overlap(enumFamilyMember eFamilyMember, enumFamilyEvents eFamilyEvent) SWITCH eFamilyEvent CASE FE_M_SON_rapping_in_the_shower RETURN PRIVATE_Does_FamilyEvents_Overlap_MichaelShower(eFamilyMember) BREAK CASE FE_M_DAUGHTER_shower RETURN PRIVATE_Does_FamilyEvents_Overlap_MichaelShower(eFamilyMember) BREAK CASE FE_M_SON_Borrows_sisters_car CASE FE_M7_SON_going_for_a_bike_ride //#1713901 CASE FE_M7_SON_coming_back_from_a_bike_ride //#1713901 RETURN PRIVATE_Does_FamilyEvents_Overlap_MichaelDriveway(eFamilyMember) BREAK CASE FE_M_DAUGHTER_Going_out_in_her_car RETURN PRIVATE_Does_FamilyEvents_Overlap_MichaelDriveway(eFamilyMember) BREAK // CASE FE_M_WIFE_leaving_in_car_v2 // CASE FE_M_WIFE_MD_leaving_in_car_v3 CASE FE_M_WIFE_leaving_in_car RETURN PRIVATE_Does_FamilyEvents_Overlap_MichaelDriveway(eFamilyMember) BREAK CASE FE_M_DAUGHTER_crying_over_a_guy RETURN PRIVATE_Does_FamilyEvents_Overlap_MichaelLivingroom(eFamilyMember) BREAK CASE FE_M2_WIFE_passed_out_SOFA CASE FE_M7_WIFE_passed_out_SOFA RETURN PRIVATE_Does_FamilyEvents_Overlap_MichaelLivingroom(eFamilyMember) BREAK CASE FE_M_DAUGHTER_watching_TV_sober FALLTHRU CASE FE_M_DAUGHTER_watching_TV_drunk FALLTHRU CASE FE_M2_SON_watching_TV FALLTHRU CASE FE_M7_SON_watching_TV_with_tracey FALLTHRU CASE FE_M_DAUGHTER_workout_with_mp3 FALLTHRU CASE FE_M_DAUGHTER_dancing_practice FALLTHRU CASE FE_M7_FAMILY_watching_TV IF PRIVATE_Does_FamilyEvents_Overlap_MichaelLivingroom(eFamilyMember) OR PRIVATE_Does_FamilyEvents_Overlap_MichaelTV(eFamilyMember) RETURN TRUE ENDIF BREAK CASE FE_M_SON_Fighting_with_sister_A CASE FE_M_SON_Fighting_with_sister_B CASE FE_M_SON_Fighting_with_sister_C CASE FE_M_SON_Fighting_with_sister_D RETURN PRIVATE_Does_FamilyEvents_Overlap_MichaelStairs(eFamilyMember) BREAK CASE FE_M_DAUGHTER_screaming_at_dad RETURN PRIVATE_Does_FamilyEvents_Overlap_MichaelStairs(eFamilyMember) BREAK // CASE FE_M_WIFE_screaming_at_son_P1 // RETURN PRIVATE_Does_FamilyEvents_Overlap_MichaelStairs(eFamilyMember) // BREAK CASE FE_M_WIFE_screaming_at_son_P2 RETURN PRIVATE_Does_FamilyEvents_Overlap_MichaelStairs(eFamilyMember) BREAK CASE FE_M_WIFE_screaming_at_son_P3 RETURN PRIVATE_Does_FamilyEvents_Overlap_MichaelStairs(eFamilyMember) BREAK CASE FE_M_WIFE_screaming_at_daughter RETURN PRIVATE_Does_FamilyEvents_Overlap_MichaelStairs(eFamilyMember) BREAK CASE FE_M_WIFE_gets_drink_in_kitchen IF g_eCurrentFamilyEvent[FM_MICHAEL_MEXMAID] = FE_M_MEXMAID_stealing_stuff OR g_eCurrentFamilyEvent[FM_MICHAEL_MEXMAID] = FE_M_MEXMAID_stealing_stuff_caught RETURN TRUE ENDIF BREAK CASE FE_M2_SON_gaming_loop CASE FE_M7_SON_gaming RETURN PRIVATE_Does_FamilyEvents_Overlap_MichaelTV(eFamilyMember) BREAK CASE FE_M2_DAUGHTER_sunbathing CASE FE_M7_DAUGHTER_sunbathing CASE FE_M2_WIFE_sunbathing CASE FE_M7_WIFE_sunbathing RETURN PRIVATE_Does_FamilyEvents_Overlap_MichaelGarden(eFamilyMember) BREAK // CASE FE_M_MEXMAID_watching_TV FALLTHRU CASE FE_M_MEXMAID_stealing_stuff CASE FE_M_MEXMAID_stealing_stuff_caught RETURN PRIVATE_Does_FamilyEvents_Overlap_MichaelLivingroom(eFamilyMember) BREAK // CASE FE_M_MEXMAID_cooking_for_son // IF g_eCurrentFamilyEvent[FM_MICHAEL_SON] = FE_M_FAMILY_on_laptops // OR g_eCurrentFamilyEvent[FM_MICHAEL_DAUGHTER] = FE_M_FAMILY_on_laptops // OR g_eCurrentFamilyEvent[FM_MICHAEL_WIFE] = FE_M_FAMILY_on_laptops // RETURN TRUE // ENDIF // BREAK CASE FE_T0_KIDNAPPED_WIFE_talks_to_Michael IF g_eCurrentFamilyEvent[FM_TREVOR_0_MICHAEL] = FAMILY_MEMBER_BUSY RETURN TRUE ENDIF BREAK CASE FE_T0_RONEX_trying_to_pick_up_signals CASE FE_T0_MICHAEL_depressed_head_in_hands CASE FE_T0_MICHAEL_on_phone_to_therapist RETURN PRIVATE_Does_FamilyEvents_Overlap_Trevor0Trailer(eFamilyMember) BREAK CASE FE_T0_RONEX_outside_looking_lonely CASE FE_T0_RONEX_doing_target_practice CASE FE_T0_MICHAEL_sunbathing CASE FE_T0_TREVOR_blowing_shit_up CASE FE_T0_TREVOR_and_kidnapped_wife_walk CASE FE_T0_KIDNAPPED_WIFE_does_garden_work RETURN PRIVATE_Does_FamilyEvents_Overlap_Trevor0Garden(eFamilyMember) BREAK ENDSWITCH RETURN FALSE ENDFUNC FUNC BOOL PRIVATE_Is_Shared_FamilyEvents_Busy(enumFamilyEvents eFamilyEvent) SWITCH eFamilyEvent CASE FE_M_FAMILY_on_laptops CASE FE_M7_FAMILY_finished_breakfast CASE FE_M7_FAMILY_finished_pizza CASE FE_M7_FAMILY_watching_TV IF (g_eCurrentFamilyEvent[FM_MICHAEL_DAUGHTER] <> NO_FAMILY_EVENTS) OR (g_eCurrentFamilyEvent[FM_MICHAEL_WIFE] <> NO_FAMILY_EVENTS) RETURN TRUE ENDIF BREAK CASE FE_M2_SON_watching_TV IF (g_eCurrentFamilyEvent[FM_MICHAEL_DAUGHTER] <> NO_FAMILY_EVENTS) RETURN TRUE ENDIF BREAK // CASE FE_M_WIFE_screaming_at_son_P1 CASE FE_M_WIFE_screaming_at_son_P2 CASE FE_M_WIFE_screaming_at_son_P3 // CASE FE_M7_WIFE_shopping_with_son IF (g_eCurrentFamilyEvent[FM_MICHAEL_SON] <> NO_FAMILY_EVENTS) RETURN TRUE ENDIF BREAK CASE FE_M_WIFE_screaming_at_daughter CASE FE_M7_WIFE_shopping_with_daughter IF (g_eCurrentFamilyEvent[FM_MICHAEL_DAUGHTER] <> NO_FAMILY_EVENTS) RETURN TRUE ENDIF BREAK ENDSWITCH RETURN FALSE ENDFUNC FUNC BOOL PRIVATE_Is_FamilyEvent_With_Busy_Friend(enumFamilyMember eFamilyMember) //, enumFamilyEvents eFamilyEvent) #IF IS_DEBUG_BUILD IF NOT g_savedGlobals.sFlow.isGameflowActive RETURN FALSE ENDIF #ENDIF // PED_SCENE_STRUCT sPedScene // PLAYER_TIMETABLE_SCENE_STRUCT sPassedScene // // sPedScene.iStage = 0 // sPedScene.eScene = eReqScene // sPedScene.ePed = g_sPlayerPedRequest.ePed // // IF SETUP_PLAYER_TIMETABLE_FOR_SCENE(sPedScene, sPassedScene) IF (eFamilyMember <> NO_FAMILY_MEMBER) AND (eFamilyMember <> MAX_FAMILY_MEMBER) enumCharacterList friendCharID = NO_CHARACTER INT iBIT_SCENE_BUDDY = BIT_NOBODY SWITCH eFamilyMember CASE FM_FRANKLIN_LAMAR CASE FM_FRANKLIN_STRETCH friendCharID = CHAR_LAMAR iBIT_SCENE_BUDDY = BIT_LAMAR BREAK CASE FM_MICHAEL_SON friendCharID = CHAR_JIMMY iBIT_SCENE_BUDDY = BIT_JIMMY BREAK CASE FM_MICHAEL_WIFE friendCharID = CHAR_AMANDA iBIT_SCENE_BUDDY = BIT_AMANDA BREAK CASE FM_MICHAEL_DAUGHTER friendCharID = CHAR_TRACEY iBIT_SCENE_BUDDY = BIT_NOBODY BREAK DEFAULT RETURN FALSE BREAK ENDSWITCH IF (iBIT_SCENE_BUDDY != BIT_NOBODY) INT availableMissionIndex REPEAT COUNT_OF(g_availableMissions) availableMissionIndex //Is a valid mission saved in this slot? IF g_availableMissions[availableMissionIndex].index != ILLEGAL_ARRAY_POSITION //Yes. Check the coreVars index it points to. INT iMissionID = g_flowUnsaved.coreVars[g_availableMissions[availableMissionIndex].index].iValue1 SP_MISSIONS eMissionID = INT_TO_ENUM(SP_MISSIONS, iMissionID) IF IS_BITMASK_SET(g_sMissionStaticData[eMissionID].friendCharBitset, iBIT_SCENE_BUDDY) // #IF IS_DEBUG_BUILD // IF g_bDebugCprint_SceneScheduleInfo // CPRINTLN(DEBUG_FAMILY, "eFamilyMember ") // CPRINTLN(DEBUG_FAMILY, Get_String_From_FamilyMember(eFamilyMember)) // CPRINTLN(DEBUG_FAMILY, " blocked on mission \"") // CPRINTLN(DEBUG_FAMILY, GET_SP_MISSION_DISPLAY_STRING_FROM_ID(eMissionID)) // CPRINTLN(DEBUG_FAMILY, "\"") // CprintNL() // ENDIF // #ENDIF RETURN TRUE ENDIF ENDIF ENDREPEAT IF GET_CONNECTION_FROM_FRIENDS(GET_FRIEND_FROM_CHAR(GET_CURRENT_PLAYER_PED_ENUM()), GET_FRIEND_FROM_CHAR(friendCharID)) < MAX_FRIEND_CONNECTIONS CONST_FLOAT CONST_fPlayerRealtimeMinuteWait_phone 1.0 CONST_FLOAT CONST_fPlayerRealtimeMinuteWait_face 5.0 FLOAT fLastContactTime = Private_GET_FRIEND_LAST_CONTACT_TIME(GET_CURRENT_PLAYER_PED_ENUM(), friendCharID) SWITCH Private_GET_FRIEND_LAST_CONTACT_TYPE(GET_CURRENT_PLAYER_PED_ENUM(), friendCharID) CASE FRIEND_CONTACT_PHONE IF fLastContactTime <= (CONST_fPlayerRealtimeMinuteWait_phone*60.0) RETURN TRUE ENDIF BREAK CASE FRIEND_CONTACT_FACE IF fLastContactTime <= (CONST_fPlayerRealtimeMinuteWait_face*60.0) RETURN TRUE ENDIF BREAK DEFAULT // BREAK ENDSWITCH ENDIF ENDIF INT iQueueGameTimer = GET_GAME_TIMER() CONST_INT iCONST_QueueGameTimerMs 150000 //2.5min INT index REPEAT g_savedGlobals.sCommsControlData.iNoQueuedCalls index IF g_savedGlobals.sCommsControlData.sQueuedCalls[index].sCommData.eNPCCharacter = friendCharID INT iQueuedCallsDelay = g_savedGlobals.sCommsControlData.sQueuedCalls[index].sCommData.iQueueTime - iQueueGameTimer IF (iQueuedCallsDelay < iCONST_QueueGameTimerMs) CPRINTLN(DEBUG_FAMILY, "schedule blocked for queued comms") RETURN TRUE ENDIF ENDIF ENDREPEAT ENDIF // ENDIF RETURN FALSE ENDFUNC FUNC BOOL PRIVATE_Is_FamilyEvent_Near_Player(enumFamilyMember eFamilyMember, enumFamilyEvents eFamilyEvent) #IF IS_DEBUG_BUILD IF NOT g_savedGlobals.sFlow.isGameflowActive RETURN FALSE ENDIF #ENDIF IF (g_eCurrentFamilyEvent[eFamilyMember] = FE_ANY_wander_family_event) RETURN FALSE ENDIF VECTOR vFamilySceneCoord FLOAT fInitHead IF PRIVATE_Get_FamilyMember_Init_Offset(eFamilyMember, eFamilyEvent, vFamilySceneCoord, fInitHead) SWITCH eFamilyMember CASE FM_MICHAEL_SON CASE FM_MICHAEL_DAUGHTER CASE FM_MICHAEL_WIFE CASE FM_MICHAEL_MEXMAID CASE FM_MICHAEL_GARDENER vFamilySceneCoord += << -812.0607, 179.5117, 71.1531 >> BREAK CASE FM_FRANKLIN_AUNT CASE FM_FRANKLIN_LAMAR CASE FM_FRANKLIN_STRETCH vFamilySceneCoord += << -14.3064, -1435.9974, 30.1160 >> BREAK CASE FM_TREVOR_0_RON CASE FM_TREVOR_0_MICHAEL CASE FM_TREVOR_0_TREVOR CASE FM_TREVOR_0_WIFE CASE FM_TREVOR_0_MOTHER vFamilySceneCoord += << 1974.6129, 3819.1438, 32.4374 >> BREAK CASE FM_TREVOR_1_FLOYD vFamilySceneCoord += << -1152.5707, -1517.6010, 9.6346 >> BREAK ENDSWITCH VECTOR vPlayerCoord = GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE) CONST_FLOAT fMIN_DIST_FROM_PLAYER 5.0 //2.5 IF VDIST2(vFamilySceneCoord, vPlayerCoord) < (fMIN_DIST_FROM_PLAYER*fMIN_DIST_FROM_PLAYER) RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL PRIVATE_Is_FamilyEvent_Near_Trigger(enumFamilyMember eFamilyMember, enumFamilyEvents eFamilyEvent) #IF IS_DEBUG_BUILD IF NOT g_savedGlobals.sFlow.isGameflowActive RETURN FALSE ENDIF #ENDIF VECTOR vFamilySceneCoord // FLOAT fInitHead // IF PRIVATE_Get_FamilyMember_Init_Offset(eFamilyMember, eFamilyEvent, // vFamilySceneCoord, fInitHead) enumCharacterList eFamilyChar = NO_CHARACTER SWITCH eFamilyMember CASE FM_MICHAEL_SON CASE FM_MICHAEL_DAUGHTER CASE FM_MICHAEL_WIFE CASE FM_MICHAEL_MEXMAID CASE FM_MICHAEL_GARDENER vFamilySceneCoord += << -812.0607, 179.5117, 71.1531 >> BREAK CASE FM_FRANKLIN_AUNT CASE FM_FRANKLIN_LAMAR CASE FM_FRANKLIN_STRETCH vFamilySceneCoord += << -14.3064, -1435.9974, 30.1160 >> BREAK CASE FM_TREVOR_0_RON CASE FM_TREVOR_0_MICHAEL CASE FM_TREVOR_0_TREVOR CASE FM_TREVOR_0_WIFE CASE FM_TREVOR_0_MOTHER vFamilySceneCoord += << 1974.6129, 3819.1438, 32.4374 >> IF (eFamilyMember = FM_TREVOR_0_MICHAEL) eFamilyChar = CHAR_MICHAEL ELIF (eFamilyMember = FM_TREVOR_0_TREVOR) eFamilyChar = CHAR_TREVOR ELSE IF (eFamilyEvent = FE_T0_KIDNAPPED_WIFE_talks_to_Michael) eFamilyChar = CHAR_MICHAEL // ELIF (eFamilyEvent = FM_TREVOR_0_TREVOR) // eFamilyChar = CHAR_TREVOR ELSE eFamilyChar = NO_CHARACTER ENDIF ENDIF BREAK CASE FM_TREVOR_1_FLOYD vFamilySceneCoord += << -1152.5707, -1517.6010, 9.6346 >> BREAK ENDSWITCH IF (eFamilyChar = NO_CHARACTER) RETURN FALSE ENDIF // // // // // VECTOR vPlayerCoord = GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE) // // IF VDIST2(vFamilySceneCoord, vPlayerCoord) < (2.5*2.5) // RETURN TRUE // ENDIF // // // // INT iTriggerIndex REPEAT MAX_MISSION_TRIGGERS iTriggerIndex IF g_TriggerableMissions[iTriggerIndex].bUsed SP_MISSIONS eMissionID = g_TriggerableMissions[iTriggerIndex].eMissionID FLOAT fFriendRejectDistance = g_TriggerableMissions[iTriggerIndex].sScene.fFriendRejectDistance INT iFriendsToAcceptBitset = g_TriggerableMissions[iTriggerIndex].sScene.iFriendsToAcceptBitset STATIC_BLIP_NAME_ENUM eBlip = g_sMissionStaticData[eMissionID].blip VECTOR vBlipCoord = GET_STATIC_BLIP_POSITION(eBlip) FLOAT fDist2FamilyToTrigger = VDIST2(vFamilySceneCoord, vBlipCoord) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "PRIVATE_Is_FamilyEvent_Near_Trigger(", Get_String_From_FamilyMember(eFamilyMember), ", ", Get_String_From_FamilyEvent(eFamilyEvent), ") [", GET_SP_MISSION_DISPLAY_STRING_FROM_ID(eMissionID), ", ", fFriendRejectDistance, ":", SQRT(fDist2FamilyToTrigger), ", ", IS_BIT_SET(iFriendsToAcceptBitset, ENUM_TO_INT(eFamilyChar)), "]") #ENDIF IF NOT IS_BIT_SET(iFriendsToAcceptBitset, ENUM_TO_INT(eFamilyChar)) IF (fDist2FamilyToTrigger < (fFriendRejectDistance*fFriendRejectDistance)) RETURN TRUE ENDIF ENDIF ENDIF ENDREPEAT // ENDIF RETURN FALSE ENDFUNC FUNC BOOL PRIVATE_Is_FamilyEvent_Blocked_For_Last_Passed_Mission(enumFamilyMember eFamilyMember, enumFamilyEvents eFamilyEvent) SWITCH g_eLastMissionPassed // CASE SP_MISSION_ARMENIAN_1 //#550889 // IF (eFamilyMember = FM_FRANKLIN_AUNT) // // #IF IS_DEBUG_BUILD // CPRINTLN(DEBUG_FAMILY, "PRIVATE_Is_FamilyEvent_Blocked_For_Last_Passed_Mission(") // CPRINTLN(DEBUG_FAMILY, Get_String_From_FamilyMember(eFamilyMember)) // CPRINTLN(DEBUG_FAMILY, ", ") // CPRINTLN(DEBUG_FAMILY, Get_String_From_FamilyEvent(eFamilyEvent)) // CPRINTLN(DEBUG_FAMILY, ")") // CprintNL() // #ENDIF // // RETURN TRUE // ENDIF // BREAK CASE SP_MISSION_FAMILY_3 //#407123 IF (eFamilyEvent = FE_M_SON_Borrows_sisters_car) OR (eFamilyEvent = FE_M_DAUGHTER_Going_out_in_her_car) // OR (eFamilyEvent = FE_M_WIFE_leaving_in_car_v2) // OR (eFamilyEvent = FE_M_WIFE_MD_leaving_in_car_v3) OR (eFamilyEvent = FE_M_WIFE_leaving_in_car) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "PRIVATE_Is_FamilyEvent_Blocked_For_Last_Passed_Mission(", Get_String_From_FamilyEvent(eFamilyEvent), ", ", Get_String_From_FamilyEvent(eFamilyEvent), ")") #ENDIF RETURN TRUE ENDIF IF (eFamilyMember = FM_MICHAEL_GARDENER) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "PRIVATE_Is_FamilyEvent_Blocked_For_Last_Passed_Mission(", Get_String_From_FamilyMember(eFamilyMember), ", ", Get_String_From_FamilyEvent(eFamilyEvent), ")") #ENDIF RETURN TRUE ENDIF BREAK CASE SP_MISSION_MICHAEL_4 //#1076003 & #1573264 IF (eFamilyMember = FM_MICHAEL_SON) OR (eFamilyMember = FM_MICHAEL_DAUGHTER) OR (eFamilyMember = FM_MICHAEL_WIFE) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "PRIVATE_Is_FamilyEvent_Blocked_For_Last_Passed_Mission(", Get_String_From_FamilyMember(eFamilyMember), ", ", Get_String_From_FamilyEvent(eFamilyEvent), ")") #ENDIF RETURN TRUE ENDIF BREAK /* CASE SP_MISSION_ME_AMANDA IF (eFamilyMember = FM_MICHAEL_WIFE) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "PRIVATE_Is_FamilyEvent_Blocked_For_Last_Passed_Mission(") CPRINTLN(DEBUG_FAMILY, Get_String_From_FamilyMember(eFamilyMember)) CPRINTLN(DEBUG_FAMILY, ", ") CPRINTLN(DEBUG_FAMILY, Get_String_From_FamilyEvent(eFamilyEvent)) CPRINTLN(DEBUG_FAMILY, ")") CprintNL() #ENDIF RETURN TRUE ENDIF BREAK CASE SP_MISSION_ME_JIMMY IF (eFamilyMember = FM_MICHAEL_SON) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "PRIVATE_Is_FamilyEvent_Blocked_For_Last_Passed_Mission(") CPRINTLN(DEBUG_FAMILY, Get_String_From_FamilyMember(eFamilyMember)) CPRINTLN(DEBUG_FAMILY, ", ") CPRINTLN(DEBUG_FAMILY, Get_String_From_FamilyEvent(eFamilyEvent)) CPRINTLN(DEBUG_FAMILY, ")") CprintNL() #ENDIF RETURN TRUE ENDIF BREAK */ CASE SP_MISSION_ME_TRACEY IF (eFamilyEvent = FE_M_SON_Borrows_sisters_car) #IF USE_TU_CHANGES OR (eFamilyEvent = FE_M7_SON_coming_back_from_a_bike_ride) #ENDIF OR (eFamilyEvent = FE_M_DAUGHTER_Going_out_in_her_car) // OR (eFamilyEvent = FE_M_WIFE_leaving_in_car_v2) // OR (eFamilyEvent = FE_M_WIFE_MD_leaving_in_car_v3) OR (eFamilyEvent = FE_M_WIFE_leaving_in_car) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "PRIVATE_Is_FamilyEvent_Blocked_For_Last_Passed_Mission(", Get_String_From_FamilyMember(eFamilyMember), ", ", Get_String_From_FamilyEvent(eFamilyEvent), ")") #ENDIF RETURN TRUE ENDIF BREAK ENDSWITCH //#1542252 IF (eFamilyEvent = FE_M2_SON_gaming_loop) IF GET_MISSION_COMPLETE_STATE(SP_MISSION_FAMILY_2) AND NOT GET_MISSION_COMPLETE_STATE(SP_MISSION_FAMILY_4) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "PRIVATE_Is_FamilyEvent_Blocked_For_Last_Passed_Mission(", Get_String_From_FamilyMember(eFamilyMember), ", ", Get_String_From_FamilyEvent(eFamilyEvent), ")") #ENDIF RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL PRIVATE_Is_FamilyEvent_In_Bad_Weather(enumFamilyEvents eFamilyEvent) CONST_INT iEXTRASUNNY HASH("EXTRASUNNY") CONST_INT iCLEAR HASH("CLEAR") CONST_INT iCLOUDS HASH("CLOUDS") CONST_INT iSMOG HASH("SMOG") CONST_INT iCLOUDY HASH("CLOUDY") CONST_INT iOVERCAST HASH("OVERCAST") CONST_INT iRAIN HASH("RAIN") CONST_INT iTHUNDER HASH("THUNDER") CONST_INT iCLEARING HASH("CLEARING") CONST_INT iNEUTRAL HASH("NEUTRAL") CONST_INT iSNOW HASH("SNOW") CONST_INT iMULTIPLAYER HASH("MULTIPLAYER") INT iPREV_WEATHER_TYPE_HASH_NAME, iNEXT_WEATHER_TYPE_HASH_NAME SWITCH eFamilyEvent CASE FE_M2_DAUGHTER_sunbathing CASE FE_M7_DAUGHTER_sunbathing CASE FE_M2_WIFE_sunbathing CASE FE_M7_WIFE_sunbathing CASE FE_T0_MICHAEL_sunbathing // * bug #1590884 * * * * * * * * * * * // CASE FE_M_GARDENER_with_leaf_blower CASE FE_M_GARDENER_planting_flowers // CASE FE_M_GARDENER_cleaning_pool CASE FE_M_GARDENER_mowing_lawn // CASE FE_M_GARDENER_watering_flowers CASE FE_M_GARDENER_on_phone // CASE FE_M_GARDENER_smoking_weed // * * * * * * * * * * * * * * * * * * // iPREV_WEATHER_TYPE_HASH_NAME = GET_PREV_WEATHER_TYPE_HASH_NAME() iNEXT_WEATHER_TYPE_HASH_NAME = GET_NEXT_WEATHER_TYPE_HASH_NAME() BOOL bInvalidPrevWeather, bInvalidNextWeather bInvalidPrevWeather = FALSE bInvalidNextWeather = FALSE IF (iPREV_WEATHER_TYPE_HASH_NAME = iRAIN) OR (iPREV_WEATHER_TYPE_HASH_NAME = iTHUNDER) OR (iPREV_WEATHER_TYPE_HASH_NAME = iSNOW) bInvalidPrevWeather = TRUE ENDIF IF (iNEXT_WEATHER_TYPE_HASH_NAME = iRAIN) OR (iNEXT_WEATHER_TYPE_HASH_NAME = iTHUNDER) OR (iNEXT_WEATHER_TYPE_HASH_NAME = iSNOW) bInvalidPrevWeather = TRUE ENDIF IF bInvalidPrevWeather OR bInvalidNextWeather RETURN TRUE ENDIF BREAK ENDSWITCH RETURN FALSE ENDFUNC FUNC BOOL PRIVATE_Is_FamilyEvent_Available(enumFamilyMember eFamilyMember, enumFamilyEvents eFamilyEvent) IF NOT GET_MISSION_COMPLETE_STATE(SP_MISSION_FAMILY_4) IF (eFamilyMember = FM_MICHAEL_SON) OR (eFamilyMember = FM_MICHAEL_DAUGHTER) OR (eFamilyMember = FM_MICHAEL_WIFE) OR (eFamilyMember = FM_MICHAEL_MEXMAID) OR (eFamilyMember = FM_MICHAEL_GARDENER) IF IS_PED_THE_CURRENT_PLAYER_PED(CHAR_TREVOR) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "PRIVATE_Is_FamilyEvent_Blocked_For_TrevorBeforeFam4(", Get_String_From_FamilyMember(eFamilyMember), ")") #ENDIF RETURN FALSE ENDIF ENDIF ENDIF IF eFamilyEvent = g_savedGlobals.sFamilyData.ePreviousFamilyEvent[eFamilyMember] #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "PRIVATE_Is_FamilyEvent_Blocked_For_Previous_Family_Event(", Get_String_From_FamilyEvent(eFamilyEvent), ")") #ENDIF RETURN FALSE ENDIF IF PRIVATE_Does_FamilyEvents_Overlap(eFamilyMember, eFamilyEvent) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "PRIVATE_Does_FamilyEvents_Overlap(", Get_String_From_FamilyEvent(eFamilyEvent), ")") #ENDIF RETURN FALSE ENDIF IF PRIVATE_Is_FamilyEvent_Blocked_For_Last_Passed_Mission(eFamilyMember, eFamilyEvent) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "PRIVATE_Is_FamilyEvent_Blocked_For_Last_Passed_Mission(", Get_String_From_FamilyEvent(eFamilyEvent), ")") #ENDIF RETURN FALSE ENDIF IF PRIVATE_Is_Shared_FamilyEvents_Busy(eFamilyEvent) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "PRIVATE_Is_Shared_FamilyEvents_Busy(", Get_String_From_FamilyEvent(eFamilyEvent), ")") #ENDIF RETURN FALSE ENDIF IF PRIVATE_Is_FamilyEvent_Near_Player(eFamilyMember, eFamilyEvent) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "PRIVATE_Is_FamilyEvent_Near_Player(", Get_String_From_FamilyEvent(eFamilyEvent), ")") #ENDIF RETURN FALSE ENDIF IF PRIVATE_Is_FamilyEvent_In_Bad_Weather(eFamilyEvent) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "PRIVATE_Is_FamilyEvent_In_Bad_Weather(", Get_String_From_FamilyEvent(eFamilyEvent), ")") #ENDIF RETURN FALSE ENDIF IF (Get_Player_Timetable_Scene_In_Progress() = PR_SCENE_M7_FAKEYOGA) IF eFamilyEvent = FE_M_FAMILY_on_laptops OR eFamilyEvent = FE_M_FAMILY_MIC4_locked_in_room OR eFamilyEvent = FE_M7_FAMILY_finished_breakfast OR eFamilyEvent = FE_M7_FAMILY_finished_pizza OR eFamilyEvent = FE_M7_FAMILY_watching_TV #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "PRIVATE_Is_FamilyEvent_During_Fakeyoga(", Get_String_From_FamilyEvent(eFamilyEvent), ")") #ENDIF RETURN FALSE ENDIF ENDIF RETURN TRUE ENDFUNC FUNC BOOL PRIVATE_Get_Desired_FamilyEventFromArray(enumFamilyMember eFamilyMember, enumFamilyEvents &eEventArray[], FLOAT &fPercentArray[], enumFamilyEvents &eDesiredEvent) //get a percentage... FLOAT fMaxPercent = 0 INT iLoop REPEAT COUNT_OF(fPercentArray) iLoop IF PRIVATE_Is_FamilyEvent_Available(eFamilyMember, eEventArray[iLoop]) fMaxPercent += fPercentArray[iLoop] ENDIF ENDREPEAT FLOAT fPercent = GET_RANDOM_FLOAT_IN_RANGE(0, fMaxPercent) REPEAT COUNT_OF(fPercentArray) iLoop IF PRIVATE_Is_FamilyEvent_Available(eFamilyMember, eEventArray[iLoop]) IF fPercent < fPercentArray[iLoop] eDesiredEvent = eEventArray[iLoop] RETURN TRUE ENDIF fPercent -= fPercentArray[iLoop] ENDIF ENDREPEAT eDesiredEvent = NO_FAMILY_EVENTS #IF IS_DEBUG_BUILD TEXT_LABEL_63 str = ("invalid fPercent in Get_Desired_") str += GET_STRING_FROM_STRING(Get_String_From_FamilyMember(eFamilyMember), GET_LENGTH_OF_LITERAL_STRING("FM_"), GET_LENGTH_OF_LITERAL_STRING(Get_String_From_FamilyMember(eFamilyMember))) str += ("_Event()") CPRINTLN(DEBUG_FAMILY, str) // SCRIPT_ASSERT(str) #ENDIF RETURN FALSE ENDFUNC FUNC BOOL ScheduleEventForThisChar(enumCharacterList ePed) IF IS_PED_THE_CURRENT_PLAYER_PED(ePed) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "ScheduleEventForThisChar(", GET_PLAYER_PED_STRING(ePed), ") - ped us current ped") #ENDIF RETURN FALSE ENDIF TIMEOFDAY sLastTimeActive = g_savedGlobals.sPlayerData.sInfo.sLastTimeActive[ePed] IF Is_TIMEOFDAY_Valid(sLastTimeActive) IF NOT HasHourPassedSinceCharLastTimeActive(ePed) #IF IS_DEBUG_BUILD INT iSeconds, iMinutes, iHours, iDays, iMonths, iYears GET_DIFFERENCE_BETWEEN_NOW_AND_TIMEOFDAY(sLastTimeActive, iSeconds, iMinutes, iHours, iDays, iMonths, iYears) CPRINTLN(DEBUG_FAMILY, "ScheduleEventForThisChar(", GET_PLAYER_PED_STRING(ePed), ") - hour hasnt passes since last active[", iSeconds, "s ", iMinutes, "m ", iHours, "h ", iDays, "d ", iMonths+(iYears*12), "m", "]") #ENDIF RETURN FALSE ENDIF ENDIF IF NOT IS_PLAYER_PED_AVAILABLE(ePed) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "ScheduleEventForThisChar(", GET_PLAYER_PED_STRING(ePed), ") - ped is not available") #ENDIF RETURN FALSE ENDIF RETURN TRUE ENDFUNC // ******************************************************************************************* // FAMILY PRIVATE SON SCHEDULED SLOT FUNCTIONS // ******************************************************************************************* FUNC BOOL PRIVATE_Force_Family_EventAvailableMissions(enumFamilyMember eFamilyMember, enumFamilyEvents &eFamilyEvent, SP_MISSIONS &eReturnedSpMissions) eReturnedSpMissions = SP_MISSION_NONE SWITCH eFamilyMember CASE FM_MICHAEL_SON IF IS_MISSION_AVAILABLE(SP_MISSION_FAMILY_1) eReturnedSpMissions = SP_MISSION_FAMILY_1 eFamilyEvent = NO_FAMILY_EVENTS RETURN TRUE ENDIF IF IS_MISSION_AVAILABLE(SP_MISSION_FAMILY_4) //#1088344 eReturnedSpMissions = SP_MISSION_FAMILY_4 eFamilyEvent = NO_FAMILY_EVENTS RETURN TRUE ENDIF IF (g_eLastMissionPassed = SP_MISSION_LESTER_1) //#1336824 IF HasTimeToWaitPassedFromLastPassedMission(60.0) eReturnedSpMissions = SP_MISSION_LESTER_1 #IF NOT IS_NEXTGEN_BUILD eFamilyEvent = FE_M_SON_rapping_in_the_shower #ENDIF #IF IS_NEXTGEN_BUILD eFamilyEvent = NO_FAMILY_EVENTS #ENDIF RETURN TRUE ENDIF ENDIF BREAK CASE FM_MICHAEL_DAUGHTER IF GetMichaelScheduleStage() = MSS_M2_WithFamily IF GET_MISSION_COMPLETE_STATE(SP_MISSION_FAMILY_4) //tracey leaves after fam4 eReturnedSpMissions = SP_MISSION_FAMILY_4 eFamilyEvent = NO_FAMILY_EVENTS RETURN TRUE ENDIF ENDIF IF IS_MISSION_AVAILABLE(SP_MISSION_FAMILY_2) eReturnedSpMissions = SP_MISSION_FAMILY_2 eFamilyEvent = NO_FAMILY_EVENTS RETURN TRUE ENDIF IF IS_MISSION_AVAILABLE(SP_MISSION_FAMILY_1) //#1024884 eReturnedSpMissions = SP_MISSION_FAMILY_1 eFamilyEvent = FE_M_DAUGHTER_watching_TV_sober RETURN TRUE ENDIF IF IS_MISSION_AVAILABLE(SP_MISSION_FAMILY_4) //#1122724 eReturnedSpMissions = SP_MISSION_FAMILY_4 eFamilyEvent = NO_FAMILY_EVENTS RETURN TRUE ENDIF IF IS_MISSION_AVAILABLE(SP_MISSION_FAMILY_3) //#1282380 eReturnedSpMissions = SP_MISSION_FAMILY_3 eFamilyEvent = NO_FAMILY_EVENTS RETURN TRUE ENDIF IF (g_eLastMissionPassed = SP_MISSION_LESTER_1) //#1336824 IF HasTimeToWaitPassedFromLastPassedMission(60.0) eReturnedSpMissions = SP_MISSION_LESTER_1 eFamilyEvent = FE_M_DAUGHTER_on_phone_to_friends RETURN TRUE ENDIF ENDIF BREAK CASE FM_MICHAEL_WIFE IF IS_MISSION_AVAILABLE(SP_MISSION_FAMILY_1) //#1024884 eReturnedSpMissions = SP_MISSION_FAMILY_1 eFamilyEvent = FE_M_WIFE_gets_drink_in_kitchen RETURN TRUE ENDIF IF IS_MISSION_AVAILABLE(SP_MISSION_FAMILY_3) eReturnedSpMissions = SP_MISSION_FAMILY_3 eFamilyEvent = NO_FAMILY_EVENTS RETURN TRUE ENDIF IF IS_MISSION_AVAILABLE(SP_MISSION_FAMILY_4) //#1088344 eReturnedSpMissions = SP_MISSION_FAMILY_4 eFamilyEvent = NO_FAMILY_EVENTS RETURN TRUE ENDIF IF (g_eLastMissionPassed = SP_MISSION_ME_AMANDA) //#1738671 IF HasTimeToWaitPassedFromLastPassedMission(60.0) eReturnedSpMissions = SP_MISSION_ME_AMANDA eFamilyEvent = FE_M_WIFE_gets_drink_in_kitchen RETURN TRUE ENDIF ENDIF BREAK CASE FM_MICHAEL_MEXMAID IF (g_eLastMissionPassed = SP_MISSION_LESTER_1) //#1771082 eReturnedSpMissions = SP_MISSION_LESTER_1 eFamilyEvent = NO_FAMILY_EVENTS RETURN TRUE ENDIF BREAK CASE FM_FRANKLIN_AUNT IF (g_eLastMissionPassed = SP_MISSION_ARMENIAN_1) //#1390895 IF NOT HasTimeToWaitPassedFromLastPassedMission(60.0) eReturnedSpMissions = SP_MISSION_ARMENIAN_1 eFamilyEvent = FE_F_AUNT_watching_TV RETURN TRUE ENDIF ENDIF IF IS_MISSION_AVAILABLE(SP_MISSION_LAMAR) eReturnedSpMissions = SP_MISSION_LAMAR eFamilyEvent = NO_FAMILY_EVENTS RETURN TRUE ENDIF IF IS_MISSION_AVAILABLE(SP_MISSION_FRANKLIN_1) eReturnedSpMissions = SP_MISSION_FRANKLIN_1 eFamilyEvent = NO_FAMILY_EVENTS RETURN TRUE ENDIF BREAK CASE FM_FRANKLIN_LAMAR CASE FM_FRANKLIN_STRETCH IF (g_eLastMissionPassed = SP_MISSION_LAMAR) IF HasTimeToWaitPassedFromLastPassedMission(60.0) IF g_savedGlobals.sFamilyData.ePreviousFamilyEvent[FM_FRANKLIN_STRETCH] != FE_F_LAMAR_and_STRETCH_wandering AND g_savedGlobals.sFamilyData.ePreviousFamilyEvent[FM_FRANKLIN_LAMAR] != FE_F_LAMAR_and_STRETCH_wandering eReturnedSpMissions = SP_MISSION_LAMAR eFamilyEvent = FE_F_LAMAR_and_STRETCH_wandering RETURN TRUE ELSE PRINTLN("bug #1668574 would have happened here, fix must have worked") ENDIF ENDIF ENDIF IF NOT GET_MISSION_COMPLETE_STATE(SP_MISSION_LAMAR) //1081258 eReturnedSpMissions = SP_MISSION_LAMAR eFamilyEvent = NO_FAMILY_EVENTS RETURN TRUE ENDIF IF IS_MISSION_AVAILABLE(SP_MISSION_FRANKLIN_1) //1090775 eReturnedSpMissions = SP_MISSION_FRANKLIN_1 eFamilyEvent = NO_FAMILY_EVENTS RETURN TRUE ENDIF IF GET_MISSION_COMPLETE_STATE(SP_MISSION_FRANKLIN_1) //1081258 eReturnedSpMissions = SP_MISSION_FRANKLIN_1 eFamilyEvent = NO_FAMILY_EVENTS RETURN TRUE ENDIF BREAK CASE FM_TREVOR_0_RON IF (g_eLastMissionPassed = SP_MISSION_TREVOR_1) //1111358 IF HasTimeToWaitPassedFromLastPassedMission(60.0) eReturnedSpMissions = SP_MISSION_TREVOR_1 eFamilyEvent = NO_FAMILY_EVENTS RETURN TRUE ENDIF ENDIF IF (g_eLastMissionPassed = SP_MISSION_EXILE_1) //1167803 IF HasTimeToWaitPassedFromLastPassedMission(60.0) eReturnedSpMissions = SP_MISSION_EXILE_1 eFamilyEvent = NO_FAMILY_EVENTS RETURN TRUE ENDIF ENDIF IF IS_MISSION_AVAILABLE(SP_MISSION_TREVOR_2) eReturnedSpMissions = SP_MISSION_TREVOR_2 eFamilyEvent = NO_FAMILY_EVENTS RETURN TRUE ENDIF IF IS_MISSION_AVAILABLE(SP_MISSION_TREVOR_3) eReturnedSpMissions = SP_MISSION_TREVOR_3 eFamilyEvent = NO_FAMILY_EVENTS RETURN TRUE ENDIF IF IS_MISSION_AVAILABLE(SP_MISSION_EXILE_3) //1090653 eReturnedSpMissions = SP_MISSION_EXILE_3 eFamilyEvent = NO_FAMILY_EVENTS RETURN TRUE ENDIF BREAK // CASE FM_TREVOR_0_MICHAEL // IF g_SavedGlobals.sPlayerSceneData.g_ePlayerLastScene[CHAR_MICHAEL] = PR_SCENE_Ma_MICHAEL2 // eFamilyEvent = FE_M_MICHAEL_MIC2_washing_face // RETURN TRUE // ENDIF // // eFamilyEvent = NO_FAMILY_EVENTS // RETURN FALSE // BREAK CASE FM_TREVOR_0_TREVOR IF IS_MISSION_AVAILABLE(SP_MISSION_EXILE_3) //1090653 eReturnedSpMissions = SP_MISSION_EXILE_3 eFamilyEvent = NO_FAMILY_EVENTS RETURN TRUE ENDIF BREAK CASE FM_TREVOR_0_WIFE IF IS_MISSION_AVAILABLE(SP_MISSION_EXILE_3) //1090653 eReturnedSpMissions = SP_MISSION_EXILE_3 eFamilyEvent = NO_FAMILY_EVENTS RETURN TRUE ENDIF BREAK CASE FM_TREVOR_1_FLOYD // block Floyd for the pre-Docks Heist 1 setup stuff) IF IS_MISSION_AVAILABLE(SP_HEIST_DOCKS_1) eReturnedSpMissions = SP_HEIST_DOCKS_1 eFamilyEvent = FAMILY_MEMBER_BUSY RETURN TRUE ENDIF BREAK ENDSWITCH IF PRIVATE_Is_FamilyEvent_With_Busy_Friend(eFamilyMember) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "PRIVATE_Is_FamilyEvent_With_Busy_Friend(", Get_String_From_FamilyMember(eFamilyMember), ")") #ENDIF eReturnedSpMissions = SP_MISSION_MAX eFamilyEvent = FAMILY_MEMBER_BUSY RETURN TRUE ENDIF RETURN FALSE ENDFUNC // ******************************************************************************************* // FAMILY PRIVATE SON SCHEDULED SLOT FUNCTIONS // ******************************************************************************************* /// PURPOSE: /// 06:00 - 11:59 /// PARAMS: /// eFamilyEvent - /// RETURNS: /// FUNC BOOL PRIVATE_Get_Desired_Michael_Son_Morning_Event(enumFamilyEvents &eFamilyEvent) enumMichaelScheduleStage thisMichaelScheduleStage = GetMichaelScheduleStage() IF (thisMichaelScheduleStage = MSS_M2_WithFamily) CONST_FLOAT fCHANCE_SON_sleeping 60.0 CONST_FLOAT fCHANCE_SON_gaming 10.0 CONST_FLOAT fCHANCE_SON_out 10.0 CONST_FLOAT fCHANCE_SON_rapping 10.0 CONST_FLOAT fCHANCE_FAMILY_allOnline 10.0 enumFamilyEvents eEventArray[5] FLOAT fPercentArray[5] eEventArray[0] = FE_M_SON_sleeping fPercentArray[0] = fCHANCE_SON_sleeping eEventArray[1] = FE_M2_SON_gaming_loop fPercentArray[1] = fCHANCE_SON_gaming eEventArray[2] = NO_FAMILY_EVENTS fPercentArray[2] = fCHANCE_SON_out eEventArray[3] = FE_M_SON_rapping_in_the_shower fPercentArray[3] = fCHANCE_SON_rapping IF NOT GET_MISSION_COMPLETE_STATE(SP_MISSION_FAMILY_4) //tracey leaves after fam4 eEventArray[4] = FE_M_FAMILY_on_laptops fPercentArray[4] = fCHANCE_FAMILY_allOnline ELSE eEventArray[4] = NO_FAMILY_EVENTS fPercentArray[4] = 0.0 ENDIF RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_SON, eEventArray, fPercentArray, eFamilyEvent) ELIF (thisMichaelScheduleStage = MSS_M4_WithoutFamily) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF ((thisMichaelScheduleStage = MSS_M6_Exiled) OR (thisMichaelScheduleStage = MSS_M9_killedMichael)) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF (thisMichaelScheduleStage = MSS_M7_ReunitedWithFamily) IF (g_eLastMissionPassed = SP_MISSION_MICHAEL_4) //#1153884 eFamilyEvent = FE_M_FAMILY_MIC4_locked_in_room RETURN TRUE ENDIF CONST_FLOAT fCHANCE_SON_jumping_jacks 15.0 CONST_FLOAT fCHANCE_SON_Gaming 15.0 CONST_FLOAT fCHANCE_SON_going_for_a_bike_ride 15.0 CONST_FLOAT fCHANCE_SON_coming_back_from_a_bike_ride 15.0 CONST_FLOAT fCHANCE_SON_on_laptop_looking_for_jobs 15.0 CONST_FLOAT fCHANCE_SON_watching_TV_with_tracey 10.0 CONST_FLOAT fCHANCE_FAMILY_finished_breakfast 15.0 CONST_FLOAT fCHANCE_FAMILY_finished_pizza 15.0 CONST_FLOAT fCHANCE_FAMILY_watching_TV 15.0 enumFamilyEvents eEventArray[9] FLOAT fPercentArray[9] eEventArray[0] = FE_M7_SON_jumping_jacks fPercentArray[0] = fCHANCE_SON_jumping_jacks eEventArray[1] = FE_M7_SON_Gaming fPercentArray[1] = fCHANCE_SON_Gaming eEventArray[2] = FE_M7_SON_going_for_a_bike_ride fPercentArray[2] = fCHANCE_SON_going_for_a_bike_ride eEventArray[3] = FE_M7_SON_coming_back_from_a_bike_ride fPercentArray[3] = fCHANCE_SON_coming_back_from_a_bike_ride eEventArray[4] = FE_M7_SON_on_laptop_looking_for_jobs fPercentArray[4] = fCHANCE_SON_on_laptop_looking_for_jobs eEventArray[5] = FE_M7_FAMILY_watching_TV fPercentArray[5] = fCHANCE_SON_watching_TV_with_tracey eEventArray[6] = FE_M7_FAMILY_finished_breakfast fPercentArray[6] = fCHANCE_FAMILY_finished_breakfast eEventArray[7] = FE_M7_FAMILY_finished_pizza fPercentArray[7] = fCHANCE_FAMILY_finished_pizza eEventArray[8] = FE_M7_FAMILY_watching_TV fPercentArray[8] = fCHANCE_FAMILY_watching_TV RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_SON, eEventArray, fPercentArray, eFamilyEvent) ELSE SCRIPT_ASSERT("invalid thisMichaelScheduleStage in PRIVATE_Get_Desired_Michael_Son_Morning_Event()") eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF ENDFUNC /// PURPOSE: /// 12:00 - 17:59 /// PARAMS: /// eFamilyEvent - /// RETURNS: /// FUNC BOOL PRIVATE_Get_Desired_Michael_Son_Afternoon_Event(enumFamilyEvents &eFamilyEvent) enumMichaelScheduleStage thisMichaelScheduleStage = GetMichaelScheduleStage() IF (thisMichaelScheduleStage = MSS_M2_WithFamily) CONST_FLOAT fCHANCE_SON_borrowCar 20.0 CONST_FLOAT fCHANCE_FAMILY_allOnline 10.0 CONST_FLOAT fCHANCE_SON_out 20.0 CONST_FLOAT fCHANCE_SON_gaming 40.0 CONST_FLOAT fCHANCE_SON_crackingOff 10.0 enumFamilyEvents eEventArray[5] FLOAT fPercentArray[5] IF NOT GET_MISSION_COMPLETE_STATE(SP_MISSION_FAMILY_4) //tracey leaves after fam4 IF NOT IS_MISSION_AVAILABLE(SP_MISSION_ME_TRACEY) eEventArray[0] = FE_M_SON_Borrows_sisters_car fPercentArray[0] = fCHANCE_SON_borrowCar ELSE eEventArray[0] = NO_FAMILY_EVENTS fPercentArray[0] = 0.0 ENDIF eEventArray[1] = FE_M_FAMILY_on_laptops fPercentArray[1] = fCHANCE_FAMILY_allOnline ELSE eEventArray[0] = NO_FAMILY_EVENTS fPercentArray[0] = 0.0 eEventArray[1] = NO_FAMILY_EVENTS fPercentArray[1] = 0.0 ENDIF eEventArray[2] = NO_FAMILY_EVENTS fPercentArray[2] = fCHANCE_SON_out eEventArray[3] = FE_M2_SON_gaming_loop fPercentArray[3] = fCHANCE_SON_gaming eEventArray[4] = FE_M_SON_watching_porn fPercentArray[4] = fCHANCE_SON_crackingOff RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_SON, eEventArray, fPercentArray, eFamilyEvent) ELIF (thisMichaelScheduleStage = MSS_M4_WithoutFamily) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF ((thisMichaelScheduleStage = MSS_M6_Exiled) OR (thisMichaelScheduleStage = MSS_M9_killedMichael)) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF (thisMichaelScheduleStage = MSS_M7_ReunitedWithFamily) IF (g_eLastMissionPassed = SP_MISSION_MICHAEL_4) //#1153884 eFamilyEvent = FE_M_FAMILY_MIC4_locked_in_room RETURN TRUE ENDIF CONST_FLOAT fCHANCE_SON_jumping_jacks 15.0 CONST_FLOAT fCHANCE_SON_Gaming 15.0 CONST_FLOAT fCHANCE_SON_going_for_a_bike_ride 15.0 CONST_FLOAT fCHANCE_SON_coming_back_from_a_bike_ride 15.0 CONST_FLOAT fCHANCE_SON_on_laptop_looking_for_jobs 15.0 CONST_FLOAT fCHANCE_SON_watching_TV_with_tracey 10.0 CONST_FLOAT fCHANCE_FAMILY_finished_breakfast 15.0 CONST_FLOAT fCHANCE_FAMILY_finished_pizza 15.0 CONST_FLOAT fCHANCE_FAMILY_watching_TV 15.0 enumFamilyEvents eEventArray[9] FLOAT fPercentArray[9] eEventArray[0] = FE_M7_SON_jumping_jacks fPercentArray[0] = fCHANCE_SON_jumping_jacks eEventArray[1] = FE_M7_SON_Gaming fPercentArray[1] = fCHANCE_SON_Gaming eEventArray[2] = FE_M7_SON_going_for_a_bike_ride fPercentArray[2] = fCHANCE_SON_going_for_a_bike_ride eEventArray[3] = FE_M7_SON_coming_back_from_a_bike_ride fPercentArray[3] = fCHANCE_SON_coming_back_from_a_bike_ride eEventArray[4] = FE_M7_SON_on_laptop_looking_for_jobs fPercentArray[4] = fCHANCE_SON_on_laptop_looking_for_jobs eEventArray[5] = FE_M7_FAMILY_watching_TV fPercentArray[5] = fCHANCE_SON_watching_TV_with_tracey eEventArray[6] = FE_M7_FAMILY_finished_breakfast fPercentArray[6] = fCHANCE_FAMILY_finished_breakfast eEventArray[7] = FE_M7_FAMILY_finished_pizza fPercentArray[7] = fCHANCE_FAMILY_finished_pizza eEventArray[8] = FE_M7_FAMILY_watching_TV fPercentArray[8] = fCHANCE_FAMILY_watching_TV RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_SON, eEventArray, fPercentArray, eFamilyEvent) ELSE SCRIPT_ASSERT("invalid thisMichaelScheduleStage in PRIVATE_Get_Desired_Michael_Son_Afternoon_Event()") eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF ENDFUNC /// PURPOSE: /// 18:00 - 23:59 /// PARAMS: /// eFamilyEvent - /// RETURNS: /// FUNC BOOL PRIVATE_Get_Desired_Michael_Son_Evening_Event(enumFamilyEvents &eFamilyEvent) enumMichaelScheduleStage thisMichaelScheduleStage = GetMichaelScheduleStage() IF (thisMichaelScheduleStage = MSS_M2_WithFamily) CONST_FLOAT fCHANCE_SON_munchRoom 10.0 CONST_FLOAT fCHANCE_SON_phone 10.0 CONST_FLOAT fCHANCE_SON_ecstasy 15.0 CONST_FLOAT fCHANCE_FAMILY_allOnline 10.0 CONST_FLOAT fCHANCE_SON_fightSister 15.0 CONST_FLOAT fCHANCE_SON_bedroomPot 40.0 enumFamilyEvents eEventArray[6+3] FLOAT fPercentArray[6+3] eEventArray[0] = FE_M_SON_in_room_asks_for_munchies fPercentArray[0] = fCHANCE_SON_munchRoom eEventArray[1] = FE_M_SON_phone_calls_in_room fPercentArray[1] = fCHANCE_SON_phone eEventArray[2] = FE_M_SON_on_ecstasy_AND_friendly fPercentArray[2] = fCHANCE_SON_ecstasy eEventArray[3] = FE_M_SON_smoking_weed_in_a_bong fPercentArray[3] = fCHANCE_SON_bedroomPot IF NOT GET_MISSION_COMPLETE_STATE(SP_MISSION_FAMILY_4) //tracey leaves after fam4 eEventArray[4] = FE_M_FAMILY_on_laptops fPercentArray[4] = fCHANCE_FAMILY_allOnline eEventArray[5] = FE_M_SON_Fighting_with_sister_A fPercentArray[5] = fCHANCE_SON_fightSister / 4.0 eEventArray[6] = FE_M_SON_Fighting_with_sister_B fPercentArray[6] = fCHANCE_SON_fightSister / 4.0 eEventArray[7] = FE_M_SON_Fighting_with_sister_C fPercentArray[7] = fCHANCE_SON_fightSister / 4.0 eEventArray[8] = FE_M_SON_Fighting_with_sister_D fPercentArray[8] = fCHANCE_SON_fightSister / 4.0 ELSE eEventArray[4] = NO_FAMILY_EVENTS fPercentArray[4] = 0.0 eEventArray[5] = NO_FAMILY_EVENTS fPercentArray[5] = 0.0 eEventArray[6] = NO_FAMILY_EVENTS fPercentArray[6] = 0.0 eEventArray[7] = NO_FAMILY_EVENTS fPercentArray[7] = 0.0 eEventArray[8] = NO_FAMILY_EVENTS fPercentArray[8] = 0.0 ENDIF RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_SON, eEventArray, fPercentArray, eFamilyEvent) ELIF (thisMichaelScheduleStage = MSS_M4_WithoutFamily) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF ((thisMichaelScheduleStage = MSS_M6_Exiled) OR (thisMichaelScheduleStage = MSS_M9_killedMichael)) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF (thisMichaelScheduleStage = MSS_M7_ReunitedWithFamily) IF (g_eLastMissionPassed = SP_MISSION_MICHAEL_4) //#1153884 eFamilyEvent = FE_M_FAMILY_MIC4_locked_in_room RETURN TRUE ENDIF CONST_FLOAT fCHANCE_SON_jumping_jacks 15.0 CONST_FLOAT fCHANCE_SON_Gaming 15.0 CONST_FLOAT fCHANCE_SON_going_for_a_bike_ride 15.0 CONST_FLOAT fCHANCE_SON_coming_back_from_a_bike_ride 15.0 CONST_FLOAT fCHANCE_SON_on_laptop_looking_for_jobs 15.0 CONST_FLOAT fCHANCE_SON_watching_TV_with_tracey 10.0 CONST_FLOAT fCHANCE_FAMILY_finished_breakfast 15.0 CONST_FLOAT fCHANCE_FAMILY_finished_pizza 15.0 CONST_FLOAT fCHANCE_FAMILY_watching_TV 15.0 enumFamilyEvents eEventArray[9] FLOAT fPercentArray[9] eEventArray[0] = FE_M7_SON_jumping_jacks fPercentArray[0] = fCHANCE_SON_jumping_jacks eEventArray[1] = FE_M7_SON_Gaming fPercentArray[1] = fCHANCE_SON_Gaming eEventArray[2] = FE_M7_SON_going_for_a_bike_ride fPercentArray[2] = fCHANCE_SON_going_for_a_bike_ride eEventArray[3] = FE_M7_SON_coming_back_from_a_bike_ride fPercentArray[3] = fCHANCE_SON_coming_back_from_a_bike_ride eEventArray[4] = FE_M7_SON_on_laptop_looking_for_jobs fPercentArray[4] = fCHANCE_SON_on_laptop_looking_for_jobs eEventArray[5] = FE_M7_FAMILY_watching_TV fPercentArray[5] = fCHANCE_SON_watching_TV_with_tracey eEventArray[6] = FE_M7_FAMILY_finished_breakfast fPercentArray[6] = fCHANCE_FAMILY_finished_breakfast eEventArray[7] = FE_M7_FAMILY_finished_pizza fPercentArray[7] = fCHANCE_FAMILY_finished_pizza eEventArray[8] = FE_M7_FAMILY_watching_TV fPercentArray[8] = fCHANCE_FAMILY_watching_TV RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_SON, eEventArray, fPercentArray, eFamilyEvent) ELSE SCRIPT_ASSERT("invalid thisMichaelScheduleStage in PRIVATE_Get_Desired_Michael_Son_Evening_Event()") eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF ENDFUNC /// PURPOSE: /// 00:00 - 05:59 /// PARAMS: /// eFamilyEvent - /// RETURNS: /// FUNC BOOL PRIVATE_Get_Desired_Michael_Son_Night_Event(enumFamilyEvents &eFamilyEvent) enumMichaelScheduleStage thisMichaelScheduleStage = GetMichaelScheduleStage() IF (thisMichaelScheduleStage = MSS_M2_WithFamily) CONST_FLOAT fCHANCE_SON_munchFridge 30.0 CONST_FLOAT fCHANCE_SON_phone 30.0 CONST_FLOAT fCHANCE_SON_out 10.0 CONST_FLOAT fCHANCE_SON_gaming 30.0 enumFamilyEvents eEventArray[4] FLOAT fPercentArray[4] eEventArray[0] = FE_M_SON_raids_fridge_for_food fPercentArray[0] = fCHANCE_SON_munchFridge eEventArray[1] = FE_M_SON_phone_calls_in_room fPercentArray[1] = fCHANCE_SON_phone eEventArray[2] = NO_FAMILY_EVENTS fPercentArray[2] = fCHANCE_SON_out eEventArray[3] = FE_M2_SON_gaming_loop fPercentArray[3] = fCHANCE_SON_gaming RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_SON, eEventArray, fPercentArray, eFamilyEvent) ELIF (thisMichaelScheduleStage = MSS_M4_WithoutFamily) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF ((thisMichaelScheduleStage = MSS_M6_Exiled) OR (thisMichaelScheduleStage = MSS_M9_killedMichael)) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF (thisMichaelScheduleStage = MSS_M7_ReunitedWithFamily) IF (g_eLastMissionPassed = SP_MISSION_MICHAEL_4) //#1153884 eFamilyEvent = FE_M_FAMILY_MIC4_locked_in_room RETURN TRUE ENDIF CONST_FLOAT fCHANCE_SON_jumping_jacks 15.0 CONST_FLOAT fCHANCE_SON_Gaming 15.0 CONST_FLOAT fCHANCE_SON_going_for_a_bike_ride 15.0 CONST_FLOAT fCHANCE_SON_coming_back_from_a_bike_ride 15.0 CONST_FLOAT fCHANCE_SON_on_laptop_looking_for_jobs 15.0 CONST_FLOAT fCHANCE_SON_watching_TV_with_tracey 10.0 CONST_FLOAT fCHANCE_FAMILY_finished_breakfast 15.0 CONST_FLOAT fCHANCE_FAMILY_finished_pizza 15.0 CONST_FLOAT fCHANCE_FAMILY_watching_TV 15.0 enumFamilyEvents eEventArray[9] FLOAT fPercentArray[9] eEventArray[0] = FE_M7_SON_jumping_jacks fPercentArray[0] = fCHANCE_SON_jumping_jacks eEventArray[1] = FE_M7_SON_Gaming fPercentArray[1] = fCHANCE_SON_Gaming eEventArray[2] = FE_M7_SON_going_for_a_bike_ride fPercentArray[2] = fCHANCE_SON_going_for_a_bike_ride eEventArray[3] = FE_M7_SON_coming_back_from_a_bike_ride fPercentArray[3] = fCHANCE_SON_coming_back_from_a_bike_ride eEventArray[4] = FE_M7_SON_on_laptop_looking_for_jobs fPercentArray[4] = fCHANCE_SON_on_laptop_looking_for_jobs eEventArray[5] = FE_M7_FAMILY_watching_TV fPercentArray[5] = fCHANCE_SON_watching_TV_with_tracey eEventArray[6] = FE_M7_FAMILY_finished_breakfast fPercentArray[6] = fCHANCE_FAMILY_finished_breakfast eEventArray[7] = FE_M7_FAMILY_finished_pizza fPercentArray[7] = fCHANCE_FAMILY_finished_pizza eEventArray[8] = FE_M7_FAMILY_watching_TV fPercentArray[8] = fCHANCE_FAMILY_watching_TV RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_SON, eEventArray, fPercentArray, eFamilyEvent) ELSE SCRIPT_ASSERT("invalid thisMichaelScheduleStage in PRIVATE_Get_Desired_Michael_Son_Night_Event()") eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF ENDFUNC // ******************************************************************************************* // FAMILY PRIVATE DAUGHTER SCHEDULED SLOT FUNCTIONS // ******************************************************************************************* /// PURPOSE: /// 06:00 - 11:59 /// PARAMS: /// eFamilyEvent - /// RETURNS: /// FUNC BOOL PRIVATE_Get_Desired_Michael_Daughter_Morning_Event(enumFamilyEvents &eFamilyEvent) enumMichaelScheduleStage thisMichaelScheduleStage = GetMichaelScheduleStage() IF (thisMichaelScheduleStage = MSS_M2_WithFamily) CONST_FLOAT fCHANCE_DAUGHTER_sunbathing 15.0 CONST_FLOAT fCHANCE_DAUGHTER_doing_work_out 15.0 CONST_FLOAT fCHANCE_DAUGHTER_Going_out_in_her_car 15.0 CONST_FLOAT fCHANCE_DAUGHTER_Walking_to_room_ipod 10.0 CONST_FLOAT fCHANCE_DAUGHTER_Out 20.0 CONST_FLOAT fCHANCE_DAUGHTER_dancing_practice 15.0 enumFamilyEvents eEventArray[6] FLOAT fPercentArray[6] eEventArray[0] = FE_M2_DAUGHTER_sunbathing fPercentArray[0] = fCHANCE_DAUGHTER_sunbathing eEventArray[1] = FE_M_DAUGHTER_workout_with_mp3 fPercentArray[1] = fCHANCE_DAUGHTER_doing_work_out IF NOT IS_MISSION_AVAILABLE(SP_MISSION_ME_TRACEY) eEventArray[2] = FE_M_DAUGHTER_Going_out_in_her_car fPercentArray[2] = fCHANCE_DAUGHTER_Going_out_in_her_car ELSE eEventArray[2] = NO_FAMILY_EVENTS fPercentArray[2] = 0.0 ENDIF eEventArray[3] = FE_M_DAUGHTER_walks_to_room_music fPercentArray[3] = fCHANCE_DAUGHTER_Walking_to_room_ipod eEventArray[4] = NO_FAMILY_EVENTS fPercentArray[4] = fCHANCE_DAUGHTER_Out eEventArray[5] = FE_M_DAUGHTER_dancing_practice fPercentArray[5] = fCHANCE_DAUGHTER_dancing_practice RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_DAUGHTER, eEventArray, fPercentArray, eFamilyEvent) ELIF (thisMichaelScheduleStage = MSS_M4_WithoutFamily) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF ((thisMichaelScheduleStage = MSS_M6_Exiled) OR (thisMichaelScheduleStage = MSS_M9_killedMichael)) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF (thisMichaelScheduleStage = MSS_M7_ReunitedWithFamily) IF (g_eLastMissionPassed = SP_MISSION_MICHAEL_4) //#1153884 eFamilyEvent = FE_M_FAMILY_MIC4_locked_in_room RETURN TRUE ENDIF CONST_FLOAT fCHANCE_DAUGHTER_studying_on_phone 33.33333333 CONST_FLOAT fCHANCE_DAUGHTER_studying_does_nails 33.33333333 CONST_FLOAT fCHANCE_DAUGHTER_sunbathing 33.33333333 enumFamilyEvents eEventArray[3] FLOAT fPercentArray[3] eEventArray[0] = FE_M7_DAUGHTER_studying_on_phone fPercentArray[0] = fCHANCE_DAUGHTER_studying_on_phone eEventArray[1] = FE_M7_DAUGHTER_studying_does_nails fPercentArray[1] = fCHANCE_DAUGHTER_studying_does_nails eEventArray[2] = FE_M7_DAUGHTER_sunbathing fPercentArray[2] = fCHANCE_DAUGHTER_sunbathing RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_DAUGHTER, eEventArray, fPercentArray, eFamilyEvent) ELSE SCRIPT_ASSERT("invalid thisMichaelScheduleStage in PRIVATE_Get_Desired_Michael_Daughter_Morning_Event()") eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF ENDFUNC /// PURPOSE: /// 12:00 - 17:59 /// PARAMS: /// eFamilyEvent - /// RETURNS: /// FUNC BOOL PRIVATE_Get_Desired_Michael_Daughter_Afternoon_Event(enumFamilyEvents &eFamilyEvent) enumMichaelScheduleStage thisMichaelScheduleStage = GetMichaelScheduleStage() IF (thisMichaelScheduleStage = MSS_M2_WithFamily) CONST_FLOAT fCHANCE_DAUGHTER_sunbathing 15.0 CONST_FLOAT fCHANCE_DAUGHTER_purging_in_the_bathroom 10.0 CONST_FLOAT fCHANCE_DAUGHTER_on_phone 10.0 CONST_FLOAT fCHANCE_DAUGHTER_Going_out_in_her_car 10.0 CONST_FLOAT fCHANCE_DAUGHTER_shower 10.0 CONST_FLOAT fCHANCE_DAUGHTER_dancing_practice 20.0 CONST_FLOAT fCHANCE_DAUGHTER_watching_TV 10.0 CONST_FLOAT fCHANCE_DAUGHTER_couchsleep 10.0 CONST_FLOAT fCHANCE_DAUGHTER_Out 5.0 enumFamilyEvents eEventArray[10] FLOAT fPercentArray[10] eEventArray[0] = FE_M2_DAUGHTER_sunbathing fPercentArray[0] = fCHANCE_DAUGHTER_sunbathing eEventArray[1] = FE_M_DAUGHTER_purges_in_the_bathroom fPercentArray[1] = fCHANCE_DAUGHTER_purging_in_the_bathroom eEventArray[2] = FE_M_DAUGHTER_on_phone_to_friends fPercentArray[2] = fCHANCE_DAUGHTER_on_phone IF NOT IS_MISSION_AVAILABLE(SP_MISSION_ME_TRACEY) eEventArray[3] = FE_M_DAUGHTER_Going_out_in_her_car fPercentArray[3] = fCHANCE_DAUGHTER_Going_out_in_her_car ELSE eEventArray[3] = NO_FAMILY_EVENTS fPercentArray[3] = 0.0 ENDIF eEventArray[4] = FE_M_DAUGHTER_shower fPercentArray[4] = fCHANCE_DAUGHTER_shower eEventArray[5] = FE_M_DAUGHTER_dancing_practice fPercentArray[5] = fCHANCE_DAUGHTER_dancing_practice eEventArray[6] = FE_M_DAUGHTER_watching_TV_sober fPercentArray[6] = fCHANCE_DAUGHTER_watching_TV / 2.0 eEventArray[7] = FE_M_DAUGHTER_watching_TV_drunk fPercentArray[7] = fCHANCE_DAUGHTER_watching_TV / 2.0 eEventArray[8] = FE_M_DAUGHTER_couchsleep fPercentArray[8] = fCHANCE_DAUGHTER_couchsleep eEventArray[9] = NO_FAMILY_EVENTS fPercentArray[9] = fCHANCE_DAUGHTER_Out RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_DAUGHTER, eEventArray, fPercentArray, eFamilyEvent) ELIF (thisMichaelScheduleStage = MSS_M4_WithoutFamily) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF ((thisMichaelScheduleStage = MSS_M6_Exiled) OR (thisMichaelScheduleStage = MSS_M9_killedMichael)) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF (thisMichaelScheduleStage = MSS_M7_ReunitedWithFamily) IF (g_eLastMissionPassed = SP_MISSION_MICHAEL_4) //#1153884 eFamilyEvent = FE_M_FAMILY_MIC4_locked_in_room RETURN TRUE ENDIF CONST_FLOAT fCHANCE_DAUGHTER_studying_on_phone 33.33333333 CONST_FLOAT fCHANCE_DAUGHTER_studying_does_nails 33.33333333 CONST_FLOAT fCHANCE_DAUGHTER_sunbathing 33.33333333 enumFamilyEvents eEventArray[3] FLOAT fPercentArray[3] eEventArray[0] = FE_M7_DAUGHTER_studying_on_phone fPercentArray[0] = fCHANCE_DAUGHTER_studying_on_phone eEventArray[1] = FE_M7_DAUGHTER_studying_does_nails fPercentArray[1] = fCHANCE_DAUGHTER_studying_does_nails eEventArray[2] = FE_M7_DAUGHTER_sunbathing fPercentArray[2] = fCHANCE_DAUGHTER_sunbathing RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_DAUGHTER, eEventArray, fPercentArray, eFamilyEvent) ELSE SCRIPT_ASSERT("invalid thisMichaelScheduleStage in PRIVATE_Get_Desired_Michael_Daughter_Afternoon_Event()") eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF ENDFUNC /// PURPOSE: /// 18:00 - 23:59 /// PARAMS: /// eFamilyEvent - /// RETURNS: /// FUNC BOOL PRIVATE_Get_Desired_Michael_Daughter_Evening_Event(enumFamilyEvents &eFamilyEvent) enumMichaelScheduleStage thisMichaelScheduleStage = GetMichaelScheduleStage() IF (thisMichaelScheduleStage = MSS_M2_WithFamily) CONST_FLOAT fCHANCE_DAUGHTER_purging_in_the_bathroom 10.0 CONST_FLOAT fCHANCE_DAUGHTER_screaming_to_dad 10.0 CONST_FLOAT fCHANCE_DAUGHTER_sniffing_drugs 10.0 CONST_FLOAT fCHANCE_DAUGHTER_Sex_sounds_from_room 10.0 CONST_FLOAT fCHANCE_DAUGHTER_on_phone_to_friends 10.0 CONST_FLOAT fCHANCE_DAUGHTER_crying_over_a_guy 10.0 CONST_FLOAT fCHANCE_DAUGHTER_Fighting_with_Jimmy 20.0 CONST_FLOAT fCHANCE_DAUGHTER_Going_out_in_her_car 10.0 enumFamilyEvents eEventArray[7] FLOAT fPercentArray[7] eEventArray[0] = FE_M_DAUGHTER_purges_in_the_bathroom fPercentArray[0] = fCHANCE_DAUGHTER_purging_in_the_bathroom eEventArray[1] = FE_M_DAUGHTER_screaming_at_dad fPercentArray[1] = fCHANCE_DAUGHTER_screaming_to_dad eEventArray[2] = FE_M_DAUGHTER_sniffs_drugs_in_toilet fPercentArray[2] = fCHANCE_DAUGHTER_sniffing_drugs eEventArray[3] = FE_M_DAUGHTER_sex_sounds_from_room fPercentArray[3] = fCHANCE_DAUGHTER_Sex_sounds_from_room eEventArray[4] = FE_M_DAUGHTER_on_phone_to_friends fPercentArray[4] = fCHANCE_DAUGHTER_on_phone_to_friends eEventArray[5] = FE_M_DAUGHTER_crying_over_a_guy fPercentArray[5] = fCHANCE_DAUGHTER_crying_over_a_guy IF NOT IS_MISSION_AVAILABLE(SP_MISSION_ME_TRACEY) eEventArray[6] = FE_M_DAUGHTER_Going_out_in_her_car fPercentArray[6] = fCHANCE_DAUGHTER_Going_out_in_her_car ELSE eEventArray[6] = NO_FAMILY_EVENTS fPercentArray[6] = 0.0 ENDIF // eEventArray[7] = FE_M_SON_Fighting_with_sister_A fPercentArray[7] = fCHANCE_DAUGHTER_Fighting_with_Jimmy / 4.0 // eEventArray[8] = FE_M_SON_Fighting_with_sister_B fPercentArray[8] = fCHANCE_DAUGHTER_Fighting_with_Jimmy / 4.0 // eEventArray[9] = FE_M_SON_Fighting_with_sister_C fPercentArray[9] = fCHANCE_DAUGHTER_Fighting_with_Jimmy / 4.0 // eEventArray[10] = FE_M_SON_Fighting_with_sister_D fPercentArray[10] = fCHANCE_DAUGHTER_Fighting_with_Jimmy / 4.0 RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_DAUGHTER, eEventArray, fPercentArray, eFamilyEvent) ELIF (thisMichaelScheduleStage = MSS_M4_WithoutFamily) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF ((thisMichaelScheduleStage = MSS_M6_Exiled) OR (thisMichaelScheduleStage = MSS_M9_killedMichael)) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF (thisMichaelScheduleStage = MSS_M7_ReunitedWithFamily) IF (g_eLastMissionPassed = SP_MISSION_MICHAEL_4) //#1153884 eFamilyEvent = FE_M_FAMILY_MIC4_locked_in_room RETURN TRUE ENDIF CONST_FLOAT fCHANCE_DAUGHTER_studying_on_phone 30.0 CONST_FLOAT fCHANCE_DAUGHTER_studying_does_nails 30.0 CONST_FLOAT fCHANCE_DAUGHTER_on_phone_to_friends 30.0 CONST_FLOAT fCHANCE_DAUGHTER_Out 10.0 enumFamilyEvents eEventArray[4] FLOAT fPercentArray[4] eEventArray[0] = FE_M7_DAUGHTER_studying_on_phone fPercentArray[0] = fCHANCE_DAUGHTER_studying_on_phone eEventArray[1] = FE_M7_DAUGHTER_studying_does_nails fPercentArray[1] = fCHANCE_DAUGHTER_studying_does_nails eEventArray[2] = FE_M_DAUGHTER_on_phone_to_friends fPercentArray[2] = fCHANCE_DAUGHTER_on_phone_to_friends eEventArray[3] = NO_FAMILY_EVENTS fPercentArray[3] = fCHANCE_DAUGHTER_Out RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_DAUGHTER, eEventArray, fPercentArray, eFamilyEvent) ELSE SCRIPT_ASSERT("invalid thisMichaelScheduleStage in PRIVATE_Get_Desired_Michael_Daughter_Evening_Event()") eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF ENDFUNC /// PURPOSE: /// 00:00 - 05:59 /// PARAMS: /// eFamilyEvent - /// RETURNS: /// FUNC BOOL PRIVATE_Get_Desired_Michael_Daughter_Night_Event(enumFamilyEvents &eFamilyEvent) enumMichaelScheduleStage thisMichaelScheduleStage = GetMichaelScheduleStage() IF (thisMichaelScheduleStage = MSS_M2_WithFamily) CONST_FLOAT fCHANCE_DAUGHTER_Sex_sounds_from_room 10.0 CONST_FLOAT fCHANCE_DAUGHTER_crying_over_a_guy 10.0 CONST_FLOAT fCHANCE_DAUGHTER_Coming_home_drunk 30.0 CONST_FLOAT fCHANCE_DAUGHTER_sleeping 30.0 CONST_FLOAT fCHANCE_DAUGHTER_Out 20.0 enumFamilyEvents eEventArray[5] FLOAT fPercentArray[5] eEventArray[0] = FE_M_DAUGHTER_sex_sounds_from_room fPercentArray[0] = fCHANCE_DAUGHTER_Sex_sounds_from_room eEventArray[1] = FE_M_DAUGHTER_crying_over_a_guy fPercentArray[1] = fCHANCE_DAUGHTER_crying_over_a_guy eEventArray[2] = FE_M_DAUGHTER_Coming_home_drunk fPercentArray[2] = fCHANCE_DAUGHTER_Coming_home_drunk eEventArray[3] = FE_M_DAUGHTER_sleeping fPercentArray[3] = fCHANCE_DAUGHTER_sleeping eEventArray[4] = NO_FAMILY_EVENTS fPercentArray[4] = fCHANCE_DAUGHTER_Out RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_DAUGHTER, eEventArray, fPercentArray, eFamilyEvent) ELIF (thisMichaelScheduleStage = MSS_M4_WithoutFamily) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF ((thisMichaelScheduleStage = MSS_M6_Exiled) OR (thisMichaelScheduleStage = MSS_M9_killedMichael)) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF (thisMichaelScheduleStage = MSS_M7_ReunitedWithFamily) IF (g_eLastMissionPassed = SP_MISSION_MICHAEL_4) //#1153884 eFamilyEvent = FE_M_FAMILY_MIC4_locked_in_room RETURN TRUE ENDIF CONST_FLOAT fCHANCE_DAUGHTER_studying_on_phone 30.0 CONST_FLOAT fCHANCE_DAUGHTER_studying_does_nails 30.0 CONST_FLOAT fCHANCE_DAUGHTER_sleeping 30.0 CONST_FLOAT fCHANCE_DAUGHTER_Out 10.0 enumFamilyEvents eEventArray[4] FLOAT fPercentArray[4] eEventArray[0] = FE_M7_DAUGHTER_studying_on_phone fPercentArray[0] = fCHANCE_DAUGHTER_studying_on_phone eEventArray[1] = FE_M7_DAUGHTER_studying_does_nails fPercentArray[1] = fCHANCE_DAUGHTER_studying_does_nails eEventArray[2] = FE_M_DAUGHTER_sleeping fPercentArray[2] = fCHANCE_DAUGHTER_sleeping eEventArray[3] = NO_FAMILY_EVENTS fPercentArray[3] = fCHANCE_DAUGHTER_Out RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_DAUGHTER, eEventArray, fPercentArray, eFamilyEvent) ELSE SCRIPT_ASSERT("invalid thisMichaelScheduleStage in PRIVATE_Get_Desired_Michael_Daughter_Night_Event()") eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF ENDFUNC // ******************************************************************************************* // FAMILY PRIVATE WIFE SCHEDULED SLOT FUNCTIONS // ******************************************************************************************* FUNC BOOL CanSchedule_FE_M_WIFE_playing_tennis() //"launcher_tennis" IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<-773.723145,168.832703,65>>, <<-772.290100,136.815643,68>>, 22) CPRINTLN(DEBUG_FAMILY, "Player is on the tennis court. Not scheduling wife to play...") RETURN FALSE ENDIF CPRINTLN(DEBUG_FAMILY, "Player is NOT on the tennis court. Wife is allowed to play.") RETURN TRUE ENDFUNC /// PURPOSE: /// 06:00 - 11:59 /// PARAMS: /// eFamilyEvent - /// RETURNS: /// FUNC BOOL PRIVATE_Get_Desired_Michael_Wife_Morning_Event(enumFamilyEvents &eFamilyEvent) IF Get_Player_Timetable_Scene_In_Progress() = PR_SCENE_M7_FAKEYOGA eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF enumMichaelScheduleStage thisMichaelScheduleStage = GetMichaelScheduleStage() IF (thisMichaelScheduleStage = MSS_M2_WithFamily) CONST_FLOAT fCHANCE_WIFE_screams_at_Mexican_maid 10.0 CONST_FLOAT fCHANCE_WIFE_in_face_mask 20.0 CONST_FLOAT fCHANCE_WIFE_doing_yoga_OR_Tennis 20.0 // CONST_FLOAT fCHANCE_WIFE_getting_nails_done 20.0 CONST_FLOAT fCHANCE_WIFE_Out 10.0 CONST_FLOAT fCHANCE_WIFE_leaving_in_car 10.0 enumFamilyEvents eEventArray[7-1-1] FLOAT fPercentArray[7-1-1] eEventArray[0] = FE_M_WIFE_screams_at_mexmaid fPercentArray[0] = fCHANCE_WIFE_screams_at_Mexican_maid eEventArray[1] = FE_M2_WIFE_in_face_mask fPercentArray[1] = fCHANCE_WIFE_in_face_mask IF NOT GET_MISSION_COMPLETE_STATE(SP_MISSION_FAMILY_3) IF CanSchedule_FE_M_WIFE_playing_tennis() eEventArray[2] = FE_M_WIFE_playing_tennis fPercentArray[2] = fCHANCE_WIFE_doing_yoga_OR_Tennis ELSE eEventArray[2] = NO_FAMILY_EVENTS fPercentArray[2] = 0.0 ENDIF ELSE eEventArray[2] = FE_M2_WIFE_doing_yoga fPercentArray[2] = fCHANCE_WIFE_doing_yoga_OR_Tennis ENDIF // eEventArray[3] = FE_M_WIFE_getting_nails_done fPercentArray[3] = fCHANCE_WIFE_getting_nails_done eEventArray[3] = NO_FAMILY_EVENTS fPercentArray[3] = fCHANCE_WIFE_Out IF NOT IS_MISSION_AVAILABLE(SP_MISSION_FAMILY_5) //865391 // eEventArray[4] = FE_M_WIFE_leaving_in_car_v2 fPercentArray[4] = fCHANCE_WIFE_leaving_in_car / 2.0 eEventArray[6-1-1] = FE_M_WIFE_leaving_in_car fPercentArray[6-1-1] = fCHANCE_WIFE_leaving_in_car ELSE // eEventArray[5-1-1] = NO_FAMILY_EVENTS fPercentArray[5-1-1] = 0.0 eEventArray[6-1-1] = NO_FAMILY_EVENTS fPercentArray[6-1-1] = 0.0 ENDIF RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_WIFE, eEventArray, fPercentArray, eFamilyEvent) ELIF (thisMichaelScheduleStage = MSS_M4_WithoutFamily) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF ((thisMichaelScheduleStage = MSS_M6_Exiled) OR (thisMichaelScheduleStage = MSS_M9_killedMichael)) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF (thisMichaelScheduleStage = MSS_M7_ReunitedWithFamily) IF (g_eLastMissionPassed = SP_MISSION_MICHAEL_4) //#1153884 eFamilyEvent = FE_M_FAMILY_MIC4_locked_in_room RETURN TRUE ENDIF CONST_FLOAT fCHANCE_WIFE_Making_juice 25.0 CONST_FLOAT fCHANCE_WIFE_shopping_with_daughter 25.0 CONST_FLOAT fCHANCE_WIFE_shopping_with_son 25.0 CONST_FLOAT fCHANCE_WIFE_on_phone 25.0 CONST_FLOAT fCHANCE_WIFE_in_face_mask 20.0 CONST_FLOAT fCHANCE_WIFE_doing_yoga_OR_Tennis 20.0 enumFamilyEvents eEventArray[6] FLOAT fPercentArray[6] eEventArray[0] = FE_M7_WIFE_Making_juice fPercentArray[0] = fCHANCE_WIFE_Making_juice eEventArray[1] = FE_M7_WIFE_shopping_with_daughter fPercentArray[1] = fCHANCE_WIFE_shopping_with_daughter // eEventArray[2] = FE_M7_WIFE_shopping_with_son fPercentArray[2] = fCHANCE_WIFE_shopping_with_son eEventArray[2] = NO_FAMILY_EVENTS fPercentArray[2] = 0.0 // eEventArray[3] = FE_M7_WIFE_on_phone fPercentArray[3] = fCHANCE_WIFE_on_phone eEventArray[3] = NO_FAMILY_EVENTS fPercentArray[3] = 0.0 eEventArray[4] = FE_M7_WIFE_in_face_mask fPercentArray[4] = fCHANCE_WIFE_in_face_mask eEventArray[5] = FE_M7_WIFE_doing_yoga fPercentArray[5] = fCHANCE_WIFE_doing_yoga_OR_Tennis RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_WIFE, eEventArray, fPercentArray, eFamilyEvent) ELSE SCRIPT_ASSERT("invalid thisMichaelScheduleStage in PRIVATE_Get_Desired_Michael_Wife_Morning_Event()") eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF ENDFUNC /// PURPOSE: /// 12:00 - 17:59 /// PARAMS: /// eFamilyEvent - /// RETURNS: /// FUNC BOOL PRIVATE_Get_Desired_Michael_Wife_Afternoon_Event(enumFamilyEvents &eFamilyEvent) IF Get_Player_Timetable_Scene_In_Progress() = PR_SCENE_M7_FAKEYOGA eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF enumMichaelScheduleStage thisMichaelScheduleStage = GetMichaelScheduleStage() IF (thisMichaelScheduleStage = MSS_M2_WithFamily) CONST_FLOAT fCHANCE_WIFE_screams_at_Mexican_maid 10.0 CONST_FLOAT fCHANCE_WIFE_with_shopping_bags_enter 10.0 CONST_FLOAT fCHANCE_WIFE_gets_drink_in_kitchen 10.0 CONST_FLOAT fCHANCE_WIFE_sunbathing 20.0 CONST_FLOAT fCHANCE_WIFE_doing_yoga_OR_Tennis 10.0 // CONST_FLOAT fCHANCE_WIFE_getting_botox_done 5.0 //20.0 CONST_FLOAT fCHANCE_WIFE_passed_out_SOFA 15.0 //10.0 CONST_FLOAT fCHANCE_WIFE_Out 10.0 enumFamilyEvents eEventArray[7] FLOAT fPercentArray[7] eEventArray[0] = FE_M_WIFE_screams_at_mexmaid fPercentArray[0] = fCHANCE_WIFE_screams_at_Mexican_maid eEventArray[1] = FE_M2_WIFE_with_shopping_bags_enter fPercentArray[1] = fCHANCE_WIFE_with_shopping_bags_enter eEventArray[2] = FE_M_WIFE_gets_drink_in_kitchen fPercentArray[2] = fCHANCE_WIFE_gets_drink_in_kitchen eEventArray[3] = FE_M2_WIFE_sunbathing fPercentArray[3] = fCHANCE_WIFE_sunbathing // eEventArray[4] = FE_M_WIFE_getting_botox_done fPercentArray[4] = fCHANCE_WIFE_getting_botox_done eEventArray[4] = FE_M2_WIFE_passed_out_SOFA fPercentArray[4] = fCHANCE_WIFE_passed_out_SOFA eEventArray[6-1] = NO_FAMILY_EVENTS fPercentArray[6-1] = fCHANCE_WIFE_Out IF NOT GET_MISSION_COMPLETE_STATE(SP_MISSION_FAMILY_3) IF CanSchedule_FE_M_WIFE_playing_tennis() eEventArray[7-1] = FE_M_WIFE_playing_tennis fPercentArray[7-1] = fCHANCE_WIFE_doing_yoga_OR_Tennis ELSE eEventArray[7-1] = NO_FAMILY_EVENTS fPercentArray[7-1] = 0.0 ENDIF ELSE eEventArray[7-1] = FE_M2_WIFE_doing_yoga fPercentArray[7-1] = fCHANCE_WIFE_doing_yoga_OR_Tennis ENDIF RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_WIFE, eEventArray, fPercentArray, eFamilyEvent) ELIF (thisMichaelScheduleStage = MSS_M4_WithoutFamily) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF ((thisMichaelScheduleStage = MSS_M6_Exiled) OR (thisMichaelScheduleStage = MSS_M9_killedMichael)) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF (thisMichaelScheduleStage = MSS_M7_ReunitedWithFamily) IF (g_eLastMissionPassed = SP_MISSION_MICHAEL_4) //#1153884 eFamilyEvent = FE_M_FAMILY_MIC4_locked_in_room RETURN TRUE ENDIF CONST_FLOAT fCHANCE_WIFE_Making_juice 25.0 CONST_FLOAT fCHANCE_WIFE_shopping_with_daughter 25.0 CONST_FLOAT fCHANCE_WIFE_shopping_with_son 25.0 CONST_FLOAT fCHANCE_WIFE_on_phone 25.0 CONST_FLOAT fCHANCE_WIFE_sunbathing 20.0 CONST_FLOAT fCHANCE_WIFE_doing_yoga_OR_Tennis 10.0 CONST_FLOAT fCHANCE_WIFE_passed_out_SOFA 15.0 //10.0 CONST_FLOAT fCHANCE_WIFE_with_shopping_bags_enter 10.0 enumFamilyEvents eEventArray[8] FLOAT fPercentArray[8] eEventArray[0] = FE_M7_WIFE_Making_juice fPercentArray[0] = fCHANCE_WIFE_Making_juice eEventArray[1] = FE_M7_WIFE_shopping_with_daughter fPercentArray[1] = fCHANCE_WIFE_shopping_with_daughter // eEventArray[2] = FE_M7_WIFE_shopping_with_son fPercentArray[2] = fCHANCE_WIFE_shopping_with_son eEventArray[2] = NO_FAMILY_EVENTS fPercentArray[2] = 0.0 // eEventArray[3] = FE_M7_WIFE_on_phone fPercentArray[3] = fCHANCE_WIFE_on_phone eEventArray[3] = NO_FAMILY_EVENTS fPercentArray[3] = 0.0 eEventArray[4] = FE_M7_WIFE_doing_yoga fPercentArray[5] = fCHANCE_WIFE_doing_yoga_OR_Tennis eEventArray[5] = FE_M7_WIFE_passed_out_SOFA fPercentArray[5] = fCHANCE_WIFE_passed_out_SOFA eEventArray[6] = FE_M7_WIFE_sunbathing fPercentArray[6] = fCHANCE_WIFE_sunbathing eEventArray[7] = FE_M7_WIFE_with_shopping_bags_enter fPercentArray[7] = fCHANCE_WIFE_with_shopping_bags_enter RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_WIFE, eEventArray, fPercentArray, eFamilyEvent) ELSE SCRIPT_ASSERT("invalid thisMichaelScheduleStage in PRIVATE_Get_Desired_Michael_Wife_Afternoon_Event()") eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF ENDFUNC /// PURPOSE: /// 18:00 - 23:59 /// PARAMS: /// eFamilyEvent - /// RETURNS: /// FUNC BOOL PRIVATE_Get_Desired_Michael_Wife_Evening_Event(enumFamilyEvents &eFamilyEvent) IF Get_Player_Timetable_Scene_In_Progress() = PR_SCENE_M7_FAKEYOGA eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF enumMichaelScheduleStage thisMichaelScheduleStage = GetMichaelScheduleStage() IF (thisMichaelScheduleStage = MSS_M2_WithFamily) CONST_FLOAT fCHANCE_WIFE_in_face_mask 20.0 CONST_FLOAT fCHANCE_WIFE_passed_out_SOFA 20.0 CONST_FLOAT fCHANCE_WIFE_Out 25.0 CONST_FLOAT fCHANCE_WIFE_screaming_at_son 7.5 CONST_FLOAT fCHANCE_WIFE_screaming_at_daughter 7.5 CONST_FLOAT fCHANCE_WIFE_phones_man_OR_therapist 10.0 enumFamilyEvents eEventArray[8] FLOAT fPercentArray[8] eEventArray[0] = FE_M2_WIFE_in_face_mask fPercentArray[0] = fCHANCE_WIFE_in_face_mask eEventArray[1] = FE_M2_WIFE_passed_out_SOFA fPercentArray[1] = fCHANCE_WIFE_passed_out_SOFA eEventArray[2] = NO_FAMILY_EVENTS fPercentArray[2] = fCHANCE_WIFE_Out // eEventArray[3] = FE_M_WIFE_screaming_at_son_P1 fPercentArray[3] = fCHANCE_WIFE_screaming_at_son / 3.0 eEventArray[3] = NO_FAMILY_EVENTS fPercentArray[3] = 0.0 eEventArray[4] = FE_M_WIFE_screaming_at_son_P2 fPercentArray[4] = fCHANCE_WIFE_screaming_at_son / 3.0 eEventArray[5] = FE_M_WIFE_screaming_at_son_P3 fPercentArray[5] = fCHANCE_WIFE_screaming_at_son / 3.0 IF NOT GET_MISSION_COMPLETE_STATE(SP_MISSION_FAMILY_4) //tracey leaves after fam4 eEventArray[6] = FE_M_WIFE_screaming_at_daughter fPercentArray[6] = fCHANCE_WIFE_screaming_at_daughter ELSE eEventArray[6] = NO_FAMILY_EVENTS fPercentArray[6] = 0.0 ENDIF eEventArray[7] = FE_M2_WIFE_phones_man_OR_therapist fPercentArray[7] = fCHANCE_WIFE_phones_man_OR_therapist RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_WIFE, eEventArray, fPercentArray, eFamilyEvent) ELIF (thisMichaelScheduleStage = MSS_M4_WithoutFamily) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF ((thisMichaelScheduleStage = MSS_M6_Exiled) OR (thisMichaelScheduleStage = MSS_M9_killedMichael)) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF (thisMichaelScheduleStage = MSS_M7_ReunitedWithFamily) IF (g_eLastMissionPassed = SP_MISSION_MICHAEL_4) //#1153884 eFamilyEvent = FE_M_FAMILY_MIC4_locked_in_room RETURN TRUE ENDIF CONST_FLOAT fCHANCE_WIFE_Making_juice 25.0 CONST_FLOAT fCHANCE_WIFE_shopping_with_daughter 25.0 CONST_FLOAT fCHANCE_WIFE_shopping_with_son 25.0 CONST_FLOAT fCHANCE_WIFE_on_phone 25.0 CONST_FLOAT fCHANCE_WIFE_in_face_mask 20.0 CONST_FLOAT fCHANCE_WIFE_passed_out_SOFA 20.0 CONST_FLOAT fCHANCE_WIFE_phones_man_OR_therapist 10.0 enumFamilyEvents eEventArray[7] FLOAT fPercentArray[7] eEventArray[0] = FE_M7_WIFE_Making_juice fPercentArray[0] = fCHANCE_WIFE_Making_juice eEventArray[1] = FE_M7_WIFE_shopping_with_daughter fPercentArray[1] = fCHANCE_WIFE_shopping_with_daughter // eEventArray[2] = FE_M7_WIFE_shopping_with_son fPercentArray[2] = fCHANCE_WIFE_shopping_with_son eEventArray[2] = NO_FAMILY_EVENTS fPercentArray[2] = 0.0 // eEventArray[3] = FE_M7_WIFE_on_phone fPercentArray[3] = fCHANCE_WIFE_on_phone eEventArray[3] = NO_FAMILY_EVENTS fPercentArray[3] = 0.0 eEventArray[4] = FE_M7_WIFE_in_face_mask fPercentArray[4] = fCHANCE_WIFE_in_face_mask eEventArray[5] = FE_M7_WIFE_passed_out_SOFA fPercentArray[5] = fCHANCE_WIFE_passed_out_SOFA eEventArray[6] = FE_M7_WIFE_phones_man_OR_therapist fPercentArray[6] = fCHANCE_WIFE_phones_man_OR_therapist RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_WIFE, eEventArray, fPercentArray, eFamilyEvent) ELSE SCRIPT_ASSERT("invalid thisMichaelScheduleStage in PRIVATE_Get_Desired_Michael_Wife_Evening_Event()") eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF ENDFUNC /// PURPOSE: /// 00:00 - 05:59 /// PARAMS: /// eFamilyEvent - /// RETURNS: /// FUNC BOOL PRIVATE_Get_Desired_Michael_Wife_Night_Event(enumFamilyEvents &eFamilyEvent) IF Get_Player_Timetable_Scene_In_Progress() = PR_SCENE_M7_FAKEYOGA eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF enumMichaelScheduleStage thisMichaelScheduleStage = GetMichaelScheduleStage() IF (thisMichaelScheduleStage = MSS_M2_WithFamily) CONST_FLOAT fCHANCE_WIFE_using_vibrator 10.0 CONST_FLOAT fCHANCE_WIFE_passed_out_BED 10.0 CONST_FLOAT fCHANCE_WIFE_sleeping 70.0 CONST_FLOAT fCHANCE_WIFE_Out 10.0 enumFamilyEvents eEventArray[4] FLOAT fPercentArray[4] #IF NOT IS_JAPANESE_BUILD eEventArray[0] = FE_M2_WIFE_using_vibrator fPercentArray[0] = fCHANCE_WIFE_using_vibrator #ENDIF #IF IS_JAPANESE_BUILD eEventArray[0] = FE_M2_WIFE_sleeping fPercentArray[0] = fCHANCE_WIFE_using_vibrator #ENDIF eEventArray[1] = FE_M_WIFE_passed_out_BED fPercentArray[1] = fCHANCE_WIFE_passed_out_BED eEventArray[2] = FE_M2_WIFE_sleeping fPercentArray[2] = fCHANCE_WIFE_sleeping eEventArray[3] = NO_FAMILY_EVENTS fPercentArray[3] = fCHANCE_WIFE_Out RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_WIFE, eEventArray, fPercentArray, eFamilyEvent) ELIF (thisMichaelScheduleStage = MSS_M4_WithoutFamily) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF ((thisMichaelScheduleStage = MSS_M6_Exiled) OR (thisMichaelScheduleStage = MSS_M9_killedMichael)) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF (thisMichaelScheduleStage = MSS_M7_ReunitedWithFamily) IF (g_eLastMissionPassed = SP_MISSION_MICHAEL_4) //#1153884 eFamilyEvent = FE_M_FAMILY_MIC4_locked_in_room RETURN TRUE ENDIF CONST_FLOAT fCHANCE_WIFE_Making_juice 25.0 CONST_FLOAT fCHANCE_WIFE_shopping_with_daughter 25.0 CONST_FLOAT fCHANCE_WIFE_shopping_with_son 25.0 CONST_FLOAT fCHANCE_WIFE_on_phone 25.0 CONST_FLOAT fCHANCE_WIFE_using_vibrator 10.0 CONST_FLOAT fCHANCE_WIFE_sleeping 20.0 enumFamilyEvents eEventArray[6] FLOAT fPercentArray[6] eEventArray[0] = FE_M7_WIFE_Making_juice fPercentArray[0] = fCHANCE_WIFE_Making_juice eEventArray[1] = FE_M7_WIFE_shopping_with_daughter fPercentArray[1] = fCHANCE_WIFE_shopping_with_daughter // eEventArray[2] = FE_M7_WIFE_shopping_with_son fPercentArray[2] = fCHANCE_WIFE_shopping_with_son eEventArray[2] = NO_FAMILY_EVENTS fPercentArray[2] = 0.0 // eEventArray[3] = FE_M7_WIFE_on_phone fPercentArray[3] = fCHANCE_WIFE_on_phone eEventArray[3] = NO_FAMILY_EVENTS fPercentArray[3] = 0.0 #IF NOT IS_JAPANESE_BUILD eEventArray[4] = FE_M7_WIFE_using_vibrator fPercentArray[4] = fCHANCE_WIFE_using_vibrator #ENDIF #IF IS_JAPANESE_BUILD eEventArray[4] = FE_M7_WIFE_sleeping fPercentArray[4] = fCHANCE_WIFE_using_vibrator #ENDIF eEventArray[5] = FE_M7_WIFE_sleeping fPercentArray[5] = fCHANCE_WIFE_sleeping RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_WIFE, eEventArray, fPercentArray, eFamilyEvent) ELSE SCRIPT_ASSERT("invalid thisMichaelScheduleStage in PRIVATE_Get_Desired_Michael_Wife_Night_Event()") eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF ENDFUNC // ******************************************************************************************* // FAMILY PRIVATE MEXMAID SCHEDULED SLOT FUNCTIONS // ******************************************************************************************* /// PURPOSE: /// 06:00 - 11:59 /// PARAMS: /// eFamilyEvent - /// RETURNS: /// FUNC BOOL PRIVATE_Get_Desired_Michael_MexMaid_Morning_Event(enumFamilyEvents &eFamilyEvent) IF (g_eLastMissionPassed = SP_MISSION_MICHAEL_4) //#815139 IF NOT HasTimeToWaitPassedFromLastPassedMission(60.0*60.0) //#1167871 eFamilyEvent = FE_M_MEXMAID_MIC4_clean_window RETURN TRUE ENDIF ENDIF enumMichaelScheduleStage thisMichaelScheduleStage = GetMichaelScheduleStage() IF (thisMichaelScheduleStage = MSS_M2_WithFamily) CONST_FLOAT fCHANCE_MEXMAID_cleaning_up 20.0 CONST_FLOAT fCHANCE_MEXMAID_does_the_dishes 20.0 // CONST_FLOAT fCHANCE_MEXMAID_cooking_for_son 20.0 // CONST_FLOAT fCHANCE_MEXMAID_watching_TV 20.0 CONST_FLOAT fCHANCE_MEXMAID_out 10.0 enumFamilyEvents eEventArray[5-1-1] FLOAT fPercentArray[5-1-1] eEventArray[0] = FE_M2_MEXMAID_cleans_booze_pot_other fPercentArray[0] = fCHANCE_MEXMAID_cleaning_up eEventArray[1] = FE_M_MEXMAID_does_the_dishes fPercentArray[1] = fCHANCE_MEXMAID_does_the_dishes // eEventArray[2] = FE_M_MEXMAID_cooking_for_son fPercentArray[2] = fCHANCE_MEXMAID_cooking_for_son // eEventArray[2] = FE_M_MEXMAID_watching_TV fPercentArray[2] = fCHANCE_MEXMAID_watching_TV eEventArray[4-1-1] = NO_FAMILY_EVENTS fPercentArray[4-1-1] = fCHANCE_MEXMAID_out RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_MEXMAID, eEventArray, fPercentArray, eFamilyEvent) ELIF (thisMichaelScheduleStage = MSS_M4_WithoutFamily) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF ((thisMichaelScheduleStage = MSS_M6_Exiled) OR (thisMichaelScheduleStage = MSS_M9_killedMichael)) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF (thisMichaelScheduleStage = MSS_M7_ReunitedWithFamily) CONST_FLOAT fCHANCE_MEXMAID_cleaning_up 20.0 CONST_FLOAT fCHANCE_MEXMAID_does_the_dishes 20.0 // CONST_FLOAT fCHANCE_MEXMAID_cooking_for_son 20.0 CONST_FLOAT fCHANCE_MEXMAID_watching_TV 20.0 CONST_FLOAT fCHANCE_MEXMAID_out 20.0 enumFamilyEvents eEventArray[4] FLOAT fPercentArray[4] eEventArray[0] = FE_M7_MEXMAID_cleans_booze_pot_other fPercentArray[0] = fCHANCE_MEXMAID_cleaning_up eEventArray[1] = FE_M_MEXMAID_does_the_dishes fPercentArray[1] = fCHANCE_MEXMAID_does_the_dishes // eEventArray[2] = FE_M_MEXMAID_cooking_for_son fPercentArray[2] = fCHANCE_MEXMAID_cooking_for_son // eEventArray[2] = FE_M_MEXMAID_watching_TV fPercentArray[2] = fCHANCE_MEXMAID_watching_TV eEventArray[4-1-1] = NO_FAMILY_EVENTS fPercentArray[4-1-1] = fCHANCE_MEXMAID_out RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_MEXMAID, eEventArray, fPercentArray, eFamilyEvent) ELSE SCRIPT_ASSERT("invalid thisMichaelScheduleStage in PRIVATE_Get_Desired_Michael_MexMaid_Morning_Event()") eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF ENDFUNC /// PURPOSE: /// 12:00 - 17:59 /// PARAMS: /// eFamilyEvent - /// RETURNS: /// FUNC BOOL PRIVATE_Get_Desired_Michael_MexMaid_Afternoon_Event(enumFamilyEvents &eFamilyEvent) IF (g_eLastMissionPassed = SP_MISSION_MICHAEL_4) //#815139 IF NOT HasTimeToWaitPassedFromLastPassedMission(60.0*60.0) //#1167871 eFamilyEvent = FE_M_MEXMAID_MIC4_clean_window RETURN TRUE ENDIF ENDIF enumMichaelScheduleStage thisMichaelScheduleStage = GetMichaelScheduleStage() IF (thisMichaelScheduleStage = MSS_M2_WithFamily) CONST_FLOAT fCHANCE_MEXMAID_cleaning_up 25.0 //20.0 // CONST_FLOAT fCHANCE_MEXMAID_watching_TV 25.0 //20.0 CONST_FLOAT fCHANCE_MEXMAID_stealing_stuff 25.0 //20.0 CONST_FLOAT fCHANCE_MEXMAID_out 12.5 //20.0 enumFamilyEvents eEventArray[4] FLOAT fPercentArray[4] eEventArray[0] = FE_M2_MEXMAID_cleans_booze_pot_other fPercentArray[0] = fCHANCE_MEXMAID_cleaning_up // eEventArray[1] = FE_M_MEXMAID_watching_TV fPercentArray[1] = fCHANCE_MEXMAID_watching_TV IF NOT IS_MISSION_AVAILABLE(SP_MISSION_FAMILY_4) //1416624 eEventArray[2-1] = FE_M_MEXMAID_stealing_stuff fPercentArray[2-1] = fCHANCE_MEXMAID_stealing_stuff ELSE eEventArray[2-1] = NO_FAMILY_EVENTS fPercentArray[2-1] = 0.0 ENDIF eEventArray[2] = NO_FAMILY_EVENTS fPercentArray[2] = fCHANCE_MEXMAID_out RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_MEXMAID, eEventArray, fPercentArray, eFamilyEvent) ELIF (thisMichaelScheduleStage = MSS_M4_WithoutFamily) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF ((thisMichaelScheduleStage = MSS_M6_Exiled) OR (thisMichaelScheduleStage = MSS_M9_killedMichael)) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF (thisMichaelScheduleStage = MSS_M7_ReunitedWithFamily) CONST_FLOAT fCHANCE_MEXMAID_cleaning_up 25.0 //20.0 // CONST_FLOAT fCHANCE_MEXMAID_watching_TV 25.0 //20.0 CONST_FLOAT fCHANCE_MEXMAID_stealing_stuff 25.0 //20.0 CONST_FLOAT fCHANCE_MEXMAID_out 12.5 //20.0 enumFamilyEvents eEventArray[3] FLOAT fPercentArray[3] eEventArray[0] = FE_M7_MEXMAID_cleans_booze_pot_other fPercentArray[0] = fCHANCE_MEXMAID_cleaning_up // eEventArray[1] = FE_M_MEXMAID_watching_TV fPercentArray[1] = fCHANCE_MEXMAID_watching_TV IF NOT IS_MISSION_AVAILABLE(SP_MISSION_FAMILY_4) //1416624 eEventArray[2-1] = FE_M_MEXMAID_stealing_stuff fPercentArray[2-1] = fCHANCE_MEXMAID_stealing_stuff ELSE eEventArray[2-1] = NO_FAMILY_EVENTS fPercentArray[2-1] = 0.0 ENDIF eEventArray[2] = NO_FAMILY_EVENTS fPercentArray[2] = fCHANCE_MEXMAID_out RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_MEXMAID, eEventArray, fPercentArray, eFamilyEvent) ELSE SCRIPT_ASSERT("invalid thisMichaelScheduleStage in PRIVATE_Get_Desired_Michael_MexMaid_Afternoon_Event()") eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF ENDFUNC // ******************************************************************************************* // FAMILY PRIVATE GARDENER SCHEDULED SLOT FUNCTIONS // ******************************************************************************************* /// PURPOSE: /// 06:00 - 11:59 /// PARAMS: /// eFamilyEvent - /// RETURNS: /// FUNC BOOL PRIVATE_Get_Desired_Michael_Gardener_Morning_Event(enumFamilyEvents &eFamilyEvent) IF (g_eLastMissionPassed = SP_MISSION_FAMILY_3) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF enumMichaelScheduleStage thisMichaelScheduleStage = GetMichaelScheduleStage() IF (thisMichaelScheduleStage = MSS_M2_WithFamily) CONST_FLOAT fCHANCE_GARDENER_with_leaf_blower 12.5 CONST_FLOAT fCHANCE_GARDENER_planting_flowers 12.5 CONST_FLOAT fCHANCE_GARDENER_trimming_hedges 12.5 CONST_FLOAT fCHANCE_GARDENER_mowing_lawn 12.5 CONST_FLOAT fCHANCE_GARDENER_watering_flowers 12.5 CONST_FLOAT fCHANCE_GARDENER_spraying_for_weeds 12.5 CONST_FLOAT fCHANCE_GARDENER_cleaning_pool 12.5 CONST_FLOAT fCHANCE_GARDENER_on_phone 12.5 CONST_FLOAT fCHANCE_GARDENER_smoking_weed 12.0 CONST_FLOAT fCHANCE_GARDENER_out 0.5 enumFamilyEvents eEventArray[8] FLOAT fPercentArray[8] eEventArray[0] = FE_M_GARDENER_with_leaf_blower fPercentArray[0] = fCHANCE_GARDENER_with_leaf_blower eEventArray[1] = FE_M_GARDENER_planting_flowers fPercentArray[1] = fCHANCE_GARDENER_planting_flowers eEventArray[2] = FE_M_GARDENER_mowing_lawn fPercentArray[2] = fCHANCE_GARDENER_mowing_lawn eEventArray[3] = FE_M_GARDENER_watering_flowers fPercentArray[3] = fCHANCE_GARDENER_watering_flowers IF NOT IS_MISSION_AVAILABLE(SP_MISSION_FAMILY_1) eEventArray[4] = FE_M_GARDENER_cleaning_pool fPercentArray[4] = fCHANCE_GARDENER_cleaning_pool ELSE eEventArray[4] = NO_FAMILY_EVENTS fPercentArray[4] = 0.0 ENDIF eEventArray[5] = FE_M_GARDENER_on_phone fPercentArray[6-1] = fCHANCE_GARDENER_on_phone eEventArray[6] = FE_M_GARDENER_smoking_weed fPercentArray[7-1] = fCHANCE_GARDENER_smoking_weed eEventArray[7] = NO_FAMILY_EVENTS fPercentArray[7] = fCHANCE_GARDENER_out RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_GARDENER, eEventArray, fPercentArray, eFamilyEvent) ELIF (thisMichaelScheduleStage = MSS_M4_WithoutFamily) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF ((thisMichaelScheduleStage = MSS_M6_Exiled) OR (thisMichaelScheduleStage = MSS_M9_killedMichael)) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ELIF (thisMichaelScheduleStage = MSS_M7_ReunitedWithFamily) CONST_FLOAT fCHANCE_GARDENER_with_leaf_blower 12.5 CONST_FLOAT fCHANCE_GARDENER_planting_flowers 12.5 CONST_FLOAT fCHANCE_GARDENER_trimming_hedges 12.5 CONST_FLOAT fCHANCE_GARDENER_mowing_lawn 12.5 CONST_FLOAT fCHANCE_GARDENER_watering_flowers 12.5 CONST_FLOAT fCHANCE_GARDENER_spraying_for_weeds 12.5 CONST_FLOAT fCHANCE_GARDENER_cleaning_pool 12.5 CONST_FLOAT fCHANCE_GARDENER_on_phone 12.5 CONST_FLOAT fCHANCE_GARDENER_smoking_weed 12.0 CONST_FLOAT fCHANCE_GARDENER_out 0.5 enumFamilyEvents eEventArray[8] FLOAT fPercentArray[8] eEventArray[0] = FE_M_GARDENER_with_leaf_blower fPercentArray[0] = fCHANCE_GARDENER_with_leaf_blower eEventArray[1] = FE_M_GARDENER_planting_flowers fPercentArray[1] = fCHANCE_GARDENER_planting_flowers // eEventArray[2] = FE_M_GARDENER_trimming_hedges fPercentArray[2] = fCHANCE_GARDENER_trimming_hedges eEventArray[2] = FE_M_GARDENER_mowing_lawn fPercentArray[2] = fCHANCE_GARDENER_mowing_lawn eEventArray[3] = FE_M_GARDENER_watering_flowers fPercentArray[3] = fCHANCE_GARDENER_watering_flowers eEventArray[4] = FE_M_GARDENER_cleaning_pool fPercentArray[4] = fCHANCE_GARDENER_cleaning_pool eEventArray[6-1] = FE_M_GARDENER_on_phone fPercentArray[6-1] = fCHANCE_GARDENER_on_phone eEventArray[7-1] = FE_M_GARDENER_smoking_weed fPercentArray[7-1] = fCHANCE_GARDENER_smoking_weed eEventArray[7] = NO_FAMILY_EVENTS fPercentArray[7] = fCHANCE_GARDENER_out RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_MICHAEL_GARDENER, eEventArray, fPercentArray, eFamilyEvent) ELSE SCRIPT_ASSERT("invalid thisMichaelScheduleStage in PRIVATE_Get_Desired_Michael_Gardener_Morning_Event()") eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF ENDFUNC // ******************************************************************************************* // FAMILY PRIVATE AUNT SCHEDULED SLOT FUNCTIONS // ******************************************************************************************* /// PURPOSE: /// 06:00 - 11:59 /// PARAMS: /// eFamilyEvent - /// RETURNS: /// FUNC BOOL PRIVATE_Get_Desired_Franklin_Aunt_Event(enumFamilyEvents &eFamilyEvent) IF IS_MISSION_AVAILABLE(SP_MISSION_ARMENIAN_1) //1350535 OR (g_eLastMissionPassed = SP_MISSION_ARMENIAN_1) //555813 eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF //#1582147 IF (g_eSelectedPlayerCharScene = PR_SCENE_F0_TANISHAFIGHT) IF IS_PLAYER_SWITCH_IN_PROGRESS() OR Is_Player_Timetable_Scene_In_Progress() eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF ENDIF IF Get_Mission_Flow_Flag_State(FLOWFLAG_FRANKLIN_MOVED_TO_HILLS_APARTMENT) eFamilyEvent = FE_F_AUNT_returned_to_aunts RETURN TRUE ENDIF CONST_FLOAT fCHANCE_F_AUNT_pelvic_floor_exercises 25.0 CONST_FLOAT fCHANCE_F_AUNT_in_face_mask 25.0 CONST_FLOAT fCHANCE_F_AUNT_watching_TV 25.0 CONST_FLOAT fCHANCE_F_AUNT_listens_to_selfhelp_tapes 25.0 enumFamilyEvents eEventArray[4] FLOAT fPercentArray[4] eEventArray[0] = FE_F_AUNT_pelvic_floor_exercises fPercentArray[0] = fCHANCE_F_AUNT_pelvic_floor_exercises eEventArray[1] = FE_F_AUNT_in_face_mask fPercentArray[1] = fCHANCE_F_AUNT_in_face_mask eEventArray[2] = FE_F_AUNT_watching_TV fPercentArray[2] = fCHANCE_F_AUNT_watching_TV eEventArray[3] = FE_F_AUNT_listens_to_selfhelp_tapes_x fPercentArray[3] = fCHANCE_F_AUNT_listens_to_selfhelp_tapes RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_FRANKLIN_AUNT, eEventArray, fPercentArray, eFamilyEvent) ENDFUNC /* // ******************************************************************************************* // FAMILY PRIVATE LAMAR SCHEDULED SLOT FUNCTIONS // ******************************************************************************************* /// PURPOSE: /// 06:00 - 11:59 /// PARAMS: /// eFamilyEvent - /// RETURNS: /// FUNC BOOL PRIVATE_Get_Desired_Franklin_Lamar_Event(enumFamilyEvents &eFamilyEvent) IF g_eCurrentFamilyEvent[FM_FRANKLIN_STRETCH] = FAMILY_MEMBER_BUSY eFamilyEvent = FAMILY_MEMBER_BUSY RETURN FALSE ENDIF IF (g_eLastMissionPassed = SP_MISSION_LAMAR) eFamilyEvent = FE_F_LAMAR_and_STRETCH_wandering RETURN TRUE ENDIF IF Get_Mission_Flow_Flag_State(FLOWFLAG_FRANKLIN_MOVED_TO_HILLS_APARTMENT) //1128582 eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF CONST_FLOAT fCHANCE_F_LAMAR_and_STRETCH_chill_outside 25.0 CONST_FLOAT fCHANCE_F_LAMAR_and_STRETCH_bbq_outside 25.0 CONST_FLOAT fCHANCE_F_LAMAR_and_STRETCH_arguing 25.0 CONST_FLOAT fCHANCE_F_LAMAR_and_STRETCH_shout_at_cops 25.0 enumFamilyEvents eEventArray[4] FLOAT fPercentArray[4] eEventArray[0] = FE_F_LAMAR_and_STRETCH_chill_outside fPercentArray[0] = fCHANCE_F_LAMAR_and_STRETCH_chill_outside eEventArray[1] = FE_F_LAMAR_and_STRETCH_bbq_outside fPercentArray[1] = fCHANCE_F_LAMAR_and_STRETCH_bbq_outside eEventArray[2] = FE_F_LAMAR_and_STRETCH_arguing fPercentArray[2] = fCHANCE_F_LAMAR_and_STRETCH_arguing // IF NOT IS_MISSION_AVAILABLE(SP_MISSION_FAMILY_1) //#1097888 // eEventArray[3] = FE_F_LAMAR_and_STRETCH_shout_at_cops fPercentArray[3] = fCHANCE_F_LAMAR_and_STRETCH_shout_at_cops // ELSE // eEventArray[3] = NO_FAMILY_EVENTS fPercentArray[3] = 0.0 // ENDIF RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_FRANKLIN_LAMAR, eEventArray, fPercentArray, eFamilyEvent) ENDFUNC // ******************************************************************************************* // FAMILY PRIVATE STRETCH SCHEDULED SLOT FUNCTIONS // ******************************************************************************************* /// PURPOSE: /// 06:00 - 11:59 /// PARAMS: /// eFamilyEvent - /// RETURNS: /// FUNC BOOL PRIVATE_Get_Desired_Franklin_Stretch_Event(enumFamilyEvents &eFamilyEvent) IF g_eCurrentFamilyEvent[FM_FRANKLIN_LAMAR] = FAMILY_MEMBER_BUSY eFamilyEvent = FAMILY_MEMBER_BUSY RETURN FALSE ENDIF IF (g_eLastMissionPassed = SP_MISSION_LAMAR) eFamilyEvent = FE_F_LAMAR_and_STRETCH_wandering RETURN TRUE ENDIF IF Get_Mission_Flow_Flag_State(FLOWFLAG_FRANKLIN_MOVED_TO_HILLS_APARTMENT) //1128582 eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF CONST_FLOAT fCHANCE_F_LAMAR_and_STRETCH_chill_outside 25.0 CONST_FLOAT fCHANCE_F_LAMAR_and_STRETCH_bbq_outside 25.0 CONST_FLOAT fCHANCE_F_LAMAR_and_STRETCH_arguing 25.0 CONST_FLOAT fCHANCE_F_LAMAR_and_STRETCH_shout_at_cops 25.0 enumFamilyEvents eEventArray[5] FLOAT fPercentArray[5] eEventArray[0] = FE_F_LAMAR_and_STRETCH_chill_outside fPercentArray[0] = fCHANCE_F_LAMAR_and_STRETCH_chill_outside eEventArray[1] = FE_F_LAMAR_and_STRETCH_bbq_outside fPercentArray[1] = fCHANCE_F_LAMAR_and_STRETCH_bbq_outside eEventArray[2] = FE_F_LAMAR_and_STRETCH_arguing fPercentArray[2] = fCHANCE_F_LAMAR_and_STRETCH_arguing // IF NOT IS_MISSION_AVAILABLE(SP_MISSION_FAMILY_1) //#1097888 // eEventArray[3] = FE_F_LAMAR_and_STRETCH_shout_at_cops fPercentArray[3] = fCHANCE_F_LAMAR_and_STRETCH_shout_at_cops // ELSE // eEventArray[3] = NO_FAMILY_EVENTS fPercentArray[3] = 0.0 // ENDIF eEventArray[4] = FE_F_LAMAR_and_STRETCH_wandering fPercentArray[4] = 1.0 RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_FRANKLIN_STRETCH, eEventArray, fPercentArray, eFamilyEvent) ENDFUNC */ // ******************************************************************************************* // FAMILY PRIVATE RON 0 SCHEDULED SLOT FUNCTIONS // ******************************************************************************************* /// PURPOSE: /// 06:00 - 11:59 /// PARAMS: /// eFamilyEvent - /// RETURNS: /// FUNC BOOL PRIVATE_Get_Desired_Trevor_0_Ron_Event(enumFamilyEvents &eFamilyEvent) //#1494189 IF IS_BIT_SET(g_savedGlobals.sRandomChars.savedRC[RC_MRS_PHILIPS_1].rcFlags, ENUM_TO_INT(RC_FLAG_COMPLETED)) AND NOT IS_BIT_SET(g_savedGlobals.sRandomChars.savedRC[RC_MRS_PHILIPS_2].rcFlags, ENUM_TO_INT(RC_FLAG_COMPLETED)) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF CONST_FLOAT fCHANCE_RON_monitoring_police_frequency 16.6 CONST_FLOAT fCHANCE_RON_listens_to_radio_broadcast 16.6 CONST_FLOAT fCHANCE_RON_ranting_about_government 16.6 CONST_FLOAT fCHANCE_RON_smoking_crystal 16.6 CONST_FLOAT fCHANCE_RON_drinks_moonshine_from_a_jar 16.6 CONST_FLOAT fCHANCE_RON_stares_through_binoculars 16.6 CONST_FLOAT fCHANCE_RONEX_outside_looking_lonely 20.0 CONST_FLOAT fCHANCE_RONEX_trying_to_pick_up_signals 20.0 CONST_FLOAT fCHANCE_RONEX_working_a_moonshine_sill 20.0 CONST_FLOAT fCHANCE_RONEX_doing_target_practice 20.0 CONST_FLOAT fCHANCE_RONEX_conspiracies_boring_Michael 20.0 enumFamilyEvents eEventArray[6] FLOAT fPercentArray[6] IF g_eLastMissionPassed = SP_MISSION_TREVOR_1 //#1492828 IF HasTimeToWaitPassedFromLastPassedMission(60.0) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF ENDIF IF NOT Get_Mission_Flow_Flag_State(FLOWFLAG_MICHAEL_TREVOR_EXILE_STARTED) IF NOT IS_PED_THE_CURRENT_PLAYER_PED(CHAR_TREVOR) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF eEventArray[0] = FE_T0_RON_monitoring_police_frequency fPercentArray[0] = fCHANCE_RON_monitoring_police_frequency eEventArray[1] = FE_T0_RON_listens_to_radio_broadcast fPercentArray[1] = fCHANCE_RON_listens_to_radio_broadcast eEventArray[2] = FE_T0_RON_ranting_about_government_LAYING fPercentArray[2] = fCHANCE_RON_ranting_about_government eEventArray[3] = FE_T0_RON_smoking_crystal fPercentArray[3] = fCHANCE_RON_smoking_crystal eEventArray[4] = FE_T0_RON_drinks_moonshine_from_a_jar fPercentArray[4] = fCHANCE_RON_drinks_moonshine_from_a_jar INT iGET_CLOCK_HOURS = GET_CLOCK_HOURS() IF (iGET_CLOCK_HOURS > 20 or iGET_CLOCK_HOURS < 6) eEventArray[5] = FE_T0_RON_stares_through_binoculars fPercentArray[5] = fCHANCE_RON_stares_through_binoculars ELSE eEventArray[5] = NO_FAMILY_EVENTS fPercentArray[5] = 0.0 ENDIF ELSE IF NOT IS_PED_THE_CURRENT_PLAYER_PED(CHAR_TREVOR) IF IS_MISSION_AVAILABLE(SP_MISSION_EXILE_2) eFamilyEvent = FE_T0_RONEX_outside_looking_lonely RETURN TRUE ENDIF eEventArray[0] = FE_T0_RONEX_outside_looking_lonely fPercentArray[0] = fCHANCE_RONEX_outside_looking_lonely ELSE INT iGET_CLOCK_HOURS = GET_CLOCK_HOURS() IF (iGET_CLOCK_HOURS > 20 or iGET_CLOCK_HOURS < 6) eEventArray[0] = FE_T0_RON_stares_through_binoculars fPercentArray[0] = fCHANCE_RON_stares_through_binoculars ELSE eEventArray[0] = NO_FAMILY_EVENTS fPercentArray[0] = 0.0 ENDIF ENDIF eEventArray[1] = FE_T0_RONEX_trying_to_pick_up_signals fPercentArray[1] = fCHANCE_RONEX_trying_to_pick_up_signals eEventArray[2] = FE_T0_RONEX_working_a_moonshine_sill fPercentArray[2] = fCHANCE_RONEX_working_a_moonshine_sill eEventArray[3] = FE_T0_RONEX_doing_target_practice fPercentArray[3] = fCHANCE_RONEX_doing_target_practice eEventArray[4] = NO_FAMILY_EVENTS fPercentArray[4] = 0.0 eEventArray[5] = NO_FAMILY_EVENTS fPercentArray[5] = 0.0 ENDIF RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_TREVOR_0_RON, eEventArray, fPercentArray, eFamilyEvent) ENDFUNC // ******************************************************************************************* // FAMILY PRIVATE MICHAEL 1 SCHEDULED SLOT FUNCTIONS // ******************************************************************************************* /// PURPOSE: /// 06:00 - 11:59 /// PARAMS: /// eFamilyEvent - /// RETURNS: /// FUNC BOOL PRIVATE_Get_Desired_Trevor_0_Michael_Event(enumFamilyEvents &eFamilyEvent) IF IS_BIT_SET(g_savedGlobals.sRandomChars.savedRC[RC_MRS_PHILIPS_1].rcFlags, ENUM_TO_INT(RC_FLAG_COMPLETED)) AND NOT IS_BIT_SET(g_savedGlobals.sRandomChars.savedRC[RC_MRS_PHILIPS_2].rcFlags, ENUM_TO_INT(RC_FLAG_COMPLETED)) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF IF NOT ScheduleEventForThisChar(CHAR_MICHAEL) eFamilyEvent = FAMILY_MEMBER_BUSY RETURN FALSE ENDIF IF NOT Get_Mission_Flow_Flag_State(FLOWFLAG_MICHAEL_TREVOR_EXILE_STARTED) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF IF NOT GET_MISSION_COMPLETE_STATE(SP_MISSION_EXILE_1) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF IF Get_Mission_Flow_Flag_State(FLOWFLAG_MICHAEL_TREVOR_EXILE_FINISHED) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF CONST_FLOAT fCHANCE_MICHAEL_depressed_head_in_hands 25.0 CONST_FLOAT fCHANCE_MICHAEL_sunbathing 25.0 CONST_FLOAT fCHANCE_MICHAEL_drinking_beer 25.0 CONST_FLOAT fCHANCE_MICHAEL_on_phone_to_therapist 25.0 enumFamilyEvents eEventArray[4] FLOAT fPercentArray[4] eEventArray[0] = FE_T0_MICHAEL_depressed_head_in_hands fPercentArray[0] = fCHANCE_MICHAEL_depressed_head_in_hands eEventArray[1] = FE_T0_MICHAEL_sunbathing IF IS_BIT_SET(g_savedGlobals.sPlayerData.sInfo.sLimitedWardrobeItems[LPW_MICHAEL_COUNTRYSIDE].iItemBitset[COMP_TYPE_OUTFIT][(ENUM_TO_INT(OUTFIT_P0_YOGA_FLIP_FLOPS)/32)], (ENUM_TO_INT(OUTFIT_P0_YOGA_FLIP_FLOPS)%32)) fPercentArray[1] = fCHANCE_MICHAEL_sunbathing * 2.0 ELSE fPercentArray[1] = fCHANCE_MICHAEL_sunbathing ENDIF eEventArray[2] = FE_T0_MICHAEL_drinking_beer fPercentArray[2] = fCHANCE_MICHAEL_drinking_beer eEventArray[3] = FE_T0_MICHAEL_on_phone_to_therapist fPercentArray[3] = fCHANCE_MICHAEL_on_phone_to_therapist RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_TREVOR_0_MICHAEL, eEventArray, fPercentArray, eFamilyEvent) ENDFUNC // ******************************************************************************************* // FAMILY PRIVATE TREVOR 1 SCHEDULED SLOT FUNCTIONS // ******************************************************************************************* /// PURPOSE: /// 06:00 - 11:59 /// PARAMS: /// eFamilyEvent - /// RETURNS: /// FUNC BOOL PRIVATE_Get_Desired_Trevor_0_Trevor_Event(enumFamilyEvents &eFamilyEvent) IF IS_BIT_SET(g_savedGlobals.sRandomChars.savedRC[RC_MRS_PHILIPS_1].rcFlags, ENUM_TO_INT(RC_FLAG_COMPLETED)) AND NOT IS_BIT_SET(g_savedGlobals.sRandomChars.savedRC[RC_MRS_PHILIPS_2].rcFlags, ENUM_TO_INT(RC_FLAG_COMPLETED)) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF IF NOT ScheduleEventForThisChar(CHAR_TREVOR) eFamilyEvent = FAMILY_MEMBER_BUSY RETURN FALSE ENDIF IF NOT Get_Mission_Flow_Flag_State(FLOWFLAG_MICHAEL_TREVOR_EXILE_STARTED) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF CONST_FLOAT fCHANCE_TREVOR_and_kidnapped_wife_walk 15.0 CONST_FLOAT fCHANCE_TREVOR_and_kidnapped_wife_stare 12.5 CONST_FLOAT fCHANCE_TREVOR_smoking_crystal 15.0 CONST_FLOAT fCHANCE_TREVOR_doing_a_shit 15.0 CONST_FLOAT fCHANCE_TREVOR_and_kidnapped_wife_laugh 12.5 CONST_FLOAT fCHANCE_TREVOR_blowing_shit_up 15.0 CONST_FLOAT fCHANCE_TREVOR_passed_out_naked_drunk 15.0 enumFamilyEvents eEventArray[7] FLOAT fPercentArray[7] IF NOT GET_MISSION_COMPLETE_STATE(SP_MISSION_FBI_5) eEventArray[0] = FE_T0_TREVOR_and_kidnapped_wife_walk fPercentArray[0] = fCHANCE_TREVOR_and_kidnapped_wife_walk eEventArray[1] = FE_T0_TREVOR_and_kidnapped_wife_stare fPercentArray[1] = fCHANCE_TREVOR_and_kidnapped_wife_stare //eEventArray[4] = FE_T0_TREVOR_and_kidnapped_wife_laugh fPercentArray[4] = fCHANCE_TREVOR_and_kidnapped_wife_laugh eEventArray[4] = NO_FAMILY_EVENTS fPercentArray[4] = 0.0 ELSE eEventArray[0] = NO_FAMILY_EVENTS fPercentArray[0] = 0.0 eEventArray[1] = NO_FAMILY_EVENTS fPercentArray[1] = 0.0 eEventArray[4] = NO_FAMILY_EVENTS fPercentArray[4] = 0.0 ENDIF eEventArray[2] = FE_T0_TREVOR_smoking_crystal fPercentArray[2] = fCHANCE_TREVOR_smoking_crystal #IF NOT IS_JAPANESE_BUILD eEventArray[3] = FE_T0_TREVOR_doing_a_shit fPercentArray[3] = fCHANCE_TREVOR_doing_a_shit #ENDIF #IF IS_JAPANESE_BUILD eEventArray[3] = NO_FAMILY_EVENTS fPercentArray[3] = 0.0 #ENDIF eEventArray[5] = FE_T0_TREVOR_blowing_shit_up fPercentArray[5] = fCHANCE_TREVOR_blowing_shit_up eEventArray[6] = FE_T0_TREVOR_passed_out_naked_drunk fPercentArray[6] = fCHANCE_TREVOR_passed_out_naked_drunk RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_TREVOR_0_TREVOR, eEventArray, fPercentArray, eFamilyEvent) ENDFUNC // ******************************************************************************************* // FAMILY PRIVATE WIFE 1 SCHEDULED SLOT FUNCTIONS // ******************************************************************************************* /// PURPOSE: /// 06:00 - 11:59 /// PARAMS: /// eFamilyEvent - /// RETURNS: /// FUNC BOOL PRIVATE_Get_Desired_Trevor_0_Wife_Event(enumFamilyEvents &eFamilyEvent) IF IS_BIT_SET(g_savedGlobals.sRandomChars.savedRC[RC_MRS_PHILIPS_1].rcFlags, ENUM_TO_INT(RC_FLAG_COMPLETED)) AND NOT IS_BIT_SET(g_savedGlobals.sRandomChars.savedRC[RC_MRS_PHILIPS_2].rcFlags, ENUM_TO_INT(RC_FLAG_COMPLETED)) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF IF NOT Get_Mission_Flow_Flag_State(FLOWFLAG_MICHAEL_TREVOR_EXILE_STARTED) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF IF GET_MISSION_COMPLETE_STATE(SP_MISSION_FBI_5) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF IF IS_MISSION_AVAILABLE(SP_MISSION_EXILE_2) eFamilyEvent = FE_T0_KIDNAPPED_WIFE_cleaning RETURN TRUE ENDIF CONST_FLOAT fCHANCE_kidnapped_wife_cleaning 25.0 CONST_FLOAT fCHANCE_kidnapped_wife_does_garden_work 25.0 CONST_FLOAT fCHANCE_kidnapped_wife_talks_to_Michael 25.0 CONST_FLOAT fCHANCE_kidnapped_wife_cooking_a_meal 25.0 enumFamilyEvents eEventArray[3] FLOAT fPercentArray[3] eEventArray[0] = FE_T0_KIDNAPPED_WIFE_cleaning fPercentArray[0] = fCHANCE_kidnapped_wife_cleaning eEventArray[1] = FE_T0_KIDNAPPED_WIFE_does_garden_work fPercentArray[1] = fCHANCE_kidnapped_wife_does_garden_work // eEventArray[3] = FE_T0_KIDNAPPED_WIFE_cooking_a_meal fPercentArray[3] = fCHANCE_kidnapped_wife_cooking_a_meal IF NOT Get_Mission_Flow_Flag_State(FLOWFLAG_MICHAEL_TREVOR_EXILE_FINISHED) IF ScheduleEventForThisChar(CHAR_MICHAEL) eEventArray[2] = FE_T0_KIDNAPPED_WIFE_talks_to_Michael fPercentArray[2] = fCHANCE_kidnapped_wife_talks_to_Michael ELSE eEventArray[2] = NO_FAMILY_EVENTS fPercentArray[2] = 0.0 ENDIF ELSE eEventArray[2] = NO_FAMILY_EVENTS fPercentArray[2] = 0.0 ENDIF RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_TREVOR_0_WIFE, eEventArray, fPercentArray, eFamilyEvent) ENDFUNC // ******************************************************************************************* // FAMILY PRIVATE MOTHER 1 SCHEDULED SLOT FUNCTIONS // ******************************************************************************************* /// PURPOSE: /// 06:00 - 11:59 /// PARAMS: /// eFamilyEvent - /// RETURNS: /// FUNC BOOL PRIVATE_Get_Desired_Trevor_0_Mother_Event(enumFamilyEvents &eFamilyEvent) IF IS_BIT_SET(g_savedGlobals.sRandomChars.savedRC[RC_MRS_PHILIPS_1].rcFlags, ENUM_TO_INT(RC_FLAG_COMPLETED)) AND NOT IS_BIT_SET(g_savedGlobals.sRandomChars.savedRC[RC_MRS_PHILIPS_2].rcFlags, ENUM_TO_INT(RC_FLAG_COMPLETED)) eFamilyEvent = FE_T0_MOTHER_duringRandomChar RETURN TRUE ENDIF eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDFUNC // ******************************************************************************************* // FAMILY PRIVATE FLOYD SCHEDULED SLOT FUNCTIONS // ******************************************************************************************* /// PURPOSE: /// 06:00 - 11:59 /// PARAMS: /// eFamilyEvent - /// RETURNS: /// FUNC BOOL PRIVATE_Get_Desired_Trevor_1_Floyd_Event(enumFamilyEvents &eFamilyEvent) #IF IS_DEBUG_BUILD IF g_savedGlobals.sFlow.isGameflowActive #ENDIF IF NOT GET_MISSION_COMPLETE_STATE(SP_MISSION_TREVOR_3) //#1530187 eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF IF GET_MISSION_COMPLETE_STATE(SP_MISSION_TREVOR_4) eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF IF g_eLastMissionPassed = SP_HEIST_DOCKS_1 //#414673 IF NOT HasTimeToWaitPassedFromLastPassedMission(60.0) eFamilyEvent = FE_T1_FLOYD_with_wade_post_docks1 RETURN TRUE ENDIF ENDIF IF g_eLastMissionPassed = SP_MISSION_TREVOR_3 //#951026 eFamilyEvent = FAMILY_MEMBER_BUSY RETURN FALSE ENDIF IF IS_MISSION_AVAILABLE(SP_HEIST_DOCKS_1) //#1265175 OR IS_MISSION_AVAILABLE(SP_HEIST_DOCKS_2A) //#1265175 OR IS_MISSION_AVAILABLE(SP_MISSION_TREVOR_4) //#1265175 eFamilyEvent = FAMILY_MEMBER_BUSY RETURN FALSE ENDIF #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "in flow mode???") ELSE CPRINTLN(DEBUG_FAMILY, "NOT in flow mode???") ENDIF #ENDIF CONST_FLOAT fCHANCE_T1_FLOYD_cleaning 20.0 CONST_FLOAT fCHANCE_T1_FLOYD_cries_in_foetal_position 20.0 CONST_FLOAT fCHANCE_T1_FLOYD_on_phone_to_girlfriend 20.0 CONST_FLOAT fCHANCE_T1_FLOYD_hiding_from_Trevor 20.0 CONST_FLOAT fCHANCE_T1_FLOYD_is_sleeping 20.0 CONST_FLOAT fCHANCE_T1_FLOYD_out 20.0 enumFamilyEvents eEventArray[6+2] FLOAT fPercentArray[6+2] IF GET_BUILDING_STATE(BUILDINGNAME_ES_FLOYDS_APPARTMENT_MESS_1) != BUILDINGSTATE_DESTROYED eEventArray[0] = FE_T1_FLOYD_cleaning fPercentArray[0] = fCHANCE_T1_FLOYD_cleaning ELSE eEventArray[0] = NO_FAMILY_EVENTS fPercentArray[0] = 0.0 ENDIF IF GET_MISSION_COMPLETE_STATE(SP_MISSION_FAMILY_4) //#1529111 eEventArray[1] = FE_T1_FLOYD_cries_in_foetal_position fPercentArray[1] = fCHANCE_T1_FLOYD_cries_in_foetal_position ELSE eEventArray[1] = NO_FAMILY_EVENTS fPercentArray[1] = 0.0 ENDIF eEventArray[2] = FE_T1_FLOYD_on_phone_to_girlfriend fPercentArray[2] = fCHANCE_T1_FLOYD_on_phone_to_girlfriend eEventArray[3] = FE_T1_FLOYD_hiding_from_Trevor_a fPercentArray[3] = fCHANCE_T1_FLOYD_hiding_from_Trevor / 3.0 eEventArray[3+1] = FE_T1_FLOYD_hiding_from_Trevor_b fPercentArray[3+1] = fCHANCE_T1_FLOYD_hiding_from_Trevor / 3.0 eEventArray[3+2] = FE_T1_FLOYD_hiding_from_Trevor_c fPercentArray[3+2] = fCHANCE_T1_FLOYD_hiding_from_Trevor / 3.0 eEventArray[4+2] = FE_T1_FLOYD_is_sleeping fPercentArray[4+2] = fCHANCE_T1_FLOYD_is_sleeping eEventArray[5+2] = NO_FAMILY_EVENTS fPercentArray[5+2] = fCHANCE_T1_FLOYD_out RETURN PRIVATE_Get_Desired_FamilyEventFromArray(FM_TREVOR_1_FLOYD, eEventArray, fPercentArray, eFamilyEvent) ENDFUNC // ******************************************************************************************* // FAMILY PRIVATE SCHEDULED SLOT FUNCTIONS // ******************************************************************************************* /// PURPOSE: /// 06:00 - 11:59 /// PARAMS: /// eFamilyMember - /// eFamilyEvent - /// RETURNS: /// FUNC BOOL PRIVATE_Get_Desired_FamilyMember_Morning_Event(enumFamilyMember eFamilyMember, enumFamilyEvents &eFamilyEvent) SWITCH eFamilyMember CASE FM_MICHAEL_SON RETURN PRIVATE_Get_Desired_Michael_Son_Morning_Event(eFamilyEvent) BREAK CASE FM_MICHAEL_DAUGHTER RETURN PRIVATE_Get_Desired_Michael_Daughter_Morning_Event(eFamilyEvent) BREAK CASE FM_MICHAEL_WIFE RETURN PRIVATE_Get_Desired_Michael_Wife_Morning_Event(eFamilyEvent) BREAK CASE FM_MICHAEL_MEXMAID RETURN PRIVATE_Get_Desired_Michael_MexMaid_Morning_Event(eFamilyEvent) BREAK CASE FM_MICHAEL_GARDENER RETURN PRIVATE_Get_Desired_Michael_Gardener_Morning_Event(eFamilyEvent) BREAK CASE FM_FRANKLIN_AUNT RETURN PRIVATE_Get_Desired_Franklin_Aunt_Event(eFamilyEvent) BREAK CASE FM_FRANKLIN_LAMAR RETURN FALSE //PRIVATE_Get_Desired_Lamar_Event(eFamilyEvent) BREAK CASE FM_FRANKLIN_STRETCH RETURN FALSE //PRIVATE_Get_Desired_Franklin_Stretch_Event(eFamilyEvent) BREAK CASE FM_TREVOR_0_RON RETURN PRIVATE_Get_Desired_Trevor_0_Ron_Event(eFamilyEvent) BREAK CASE FM_TREVOR_0_MICHAEL RETURN PRIVATE_Get_Desired_Trevor_0_Michael_Event(eFamilyEvent) BREAK CASE FM_TREVOR_0_TREVOR RETURN PRIVATE_Get_Desired_Trevor_0_Trevor_Event(eFamilyEvent) BREAK CASE FM_TREVOR_0_WIFE RETURN PRIVATE_Get_Desired_Trevor_0_Wife_Event(eFamilyEvent) BREAK CASE FM_TREVOR_0_MOTHER RETURN PRIVATE_Get_Desired_Trevor_0_Mother_Event(eFamilyEvent) BREAK CASE FM_TREVOR_1_FLOYD RETURN PRIVATE_Get_Desired_Trevor_1_Floyd_Event(eFamilyEvent) BREAK ENDSWITCH eFamilyEvent = NO_FAMILY_EVENTS SCRIPT_ASSERT("invalid eFamilyMember in PRIVATE_Get_Desired_FamilyMember_Morning_Event()") RETURN FALSE ENDFUNC /// PURPOSE: /// 12:00 - 17:59 /// PARAMS: /// eFamilyMember - /// eFamilyEvent - /// RETURNS: /// FUNC BOOL PRIVATE_Get_Desired_FamilyMember_Afternoon_Event(enumFamilyMember eFamilyMember, enumFamilyEvents &eFamilyEvent) SWITCH eFamilyMember CASE FM_MICHAEL_SON RETURN PRIVATE_Get_Desired_Michael_Son_Afternoon_Event(eFamilyEvent) BREAK CASE FM_MICHAEL_DAUGHTER RETURN PRIVATE_Get_Desired_Michael_Daughter_Afternoon_Event(eFamilyEvent) BREAK CASE FM_MICHAEL_WIFE RETURN PRIVATE_Get_Desired_Michael_Wife_Afternoon_Event(eFamilyEvent) BREAK CASE FM_MICHAEL_MEXMAID RETURN PRIVATE_Get_Desired_Michael_MexMaid_Afternoon_Event(eFamilyEvent) BREAK CASE FM_MICHAEL_GARDENER eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE BREAK CASE FM_FRANKLIN_AUNT RETURN PRIVATE_Get_Desired_Franklin_Aunt_Event(eFamilyEvent) BREAK CASE FM_FRANKLIN_LAMAR RETURN FALSE //PRIVATE_Get_Desired_Lamar_Event(eFamilyEvent) BREAK CASE FM_FRANKLIN_STRETCH RETURN FALSE //PRIVATE_Get_Desired_Stretch_Event(eFamilyEvent) BREAK CASE FM_TREVOR_0_RON RETURN PRIVATE_Get_Desired_Trevor_0_Ron_Event(eFamilyEvent) BREAK CASE FM_TREVOR_0_MICHAEL RETURN PRIVATE_Get_Desired_Trevor_0_Michael_Event(eFamilyEvent) BREAK CASE FM_TREVOR_0_TREVOR RETURN PRIVATE_Get_Desired_Trevor_0_Trevor_Event(eFamilyEvent) BREAK CASE FM_TREVOR_0_WIFE RETURN PRIVATE_Get_Desired_Trevor_0_Wife_Event(eFamilyEvent) BREAK CASE FM_TREVOR_0_MOTHER RETURN PRIVATE_Get_Desired_Trevor_0_Mother_Event(eFamilyEvent) BREAK CASE FM_TREVOR_1_FLOYD RETURN PRIVATE_Get_Desired_Trevor_1_Floyd_Event(eFamilyEvent) BREAK ENDSWITCH eFamilyEvent = NO_FAMILY_EVENTS SCRIPT_ASSERT("invalid eFamilyMember in PRIVATE_Get_Desired_FamilyMember_Afternoon_Event()") RETURN FALSE ENDFUNC /// PURPOSE: /// 18:00 - 23:59 /// PARAMS: /// eFamilyMember - /// eFamilyEvent - /// RETURNS: /// FUNC BOOL PRIVATE_Get_Desired_FamilyMember_Evening_Event(enumFamilyMember eFamilyMember, enumFamilyEvents &eFamilyEvent) SWITCH eFamilyMember CASE FM_MICHAEL_SON RETURN PRIVATE_Get_Desired_Michael_Son_Evening_Event(eFamilyEvent) BREAK CASE FM_MICHAEL_DAUGHTER RETURN PRIVATE_Get_Desired_Michael_Daughter_Evening_Event(eFamilyEvent) BREAK CASE FM_MICHAEL_WIFE RETURN PRIVATE_Get_Desired_Michael_Wife_Evening_Event(eFamilyEvent) BREAK CASE FM_MICHAEL_MEXMAID eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE BREAK CASE FM_MICHAEL_GARDENER eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE BREAK CASE FM_FRANKLIN_AUNT RETURN PRIVATE_Get_Desired_Franklin_Aunt_Event(eFamilyEvent) BREAK CASE FM_FRANKLIN_LAMAR RETURN FALSE //PRIVATE_Get_Desired_Lamar_Event(eFamilyEvent) BREAK CASE FM_FRANKLIN_STRETCH RETURN FALSE //PRIVATE_Get_Desired_Stretch_Event(eFamilyEvent) BREAK CASE FM_TREVOR_0_RON RETURN PRIVATE_Get_Desired_Trevor_0_Ron_Event(eFamilyEvent) BREAK CASE FM_TREVOR_0_MICHAEL RETURN PRIVATE_Get_Desired_Trevor_0_Michael_Event(eFamilyEvent) BREAK CASE FM_TREVOR_0_TREVOR RETURN PRIVATE_Get_Desired_Trevor_0_Trevor_Event(eFamilyEvent) BREAK CASE FM_TREVOR_0_WIFE RETURN PRIVATE_Get_Desired_Trevor_0_Wife_Event(eFamilyEvent) BREAK CASE FM_TREVOR_0_MOTHER RETURN PRIVATE_Get_Desired_Trevor_0_Mother_Event(eFamilyEvent) BREAK CASE FM_TREVOR_1_FLOYD RETURN PRIVATE_Get_Desired_Trevor_1_Floyd_Event(eFamilyEvent) BREAK ENDSWITCH eFamilyEvent = NO_FAMILY_EVENTS SCRIPT_ASSERT("invalid eFamilyMember in PRIVATE_Get_Desired_FamilyMember_Evening_Event()") RETURN FALSE ENDFUNC /// PURPOSE: /// 00:00 - 05:59 /// PARAMS: /// eFamilyMember - /// eFamilyEvent - /// RETURNS: /// FUNC BOOL PRIVATE_Get_Desired_FamilyMember_Night_Event(enumFamilyMember eFamilyMember, enumFamilyEvents &eFamilyEvent) SWITCH eFamilyMember CASE FM_MICHAEL_SON RETURN PRIVATE_Get_Desired_Michael_Son_Night_Event(eFamilyEvent) BREAK CASE FM_MICHAEL_DAUGHTER RETURN PRIVATE_Get_Desired_Michael_Daughter_Night_Event(eFamilyEvent) BREAK CASE FM_MICHAEL_WIFE RETURN PRIVATE_Get_Desired_Michael_Wife_Night_Event(eFamilyEvent) BREAK CASE FM_MICHAEL_MEXMAID eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE BREAK CASE FM_MICHAEL_GARDENER eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE BREAK CASE FM_FRANKLIN_AUNT RETURN PRIVATE_Get_Desired_Franklin_Aunt_Event(eFamilyEvent) BREAK CASE FM_FRANKLIN_LAMAR RETURN FALSE //PRIVATE_Get_Desired_Lamar_Event(eFamilyEvent) BREAK CASE FM_FRANKLIN_STRETCH RETURN FALSE //PRIVATE_Get_Desired_Stretch_Event(eFamilyEvent) BREAK CASE FM_TREVOR_0_RON RETURN PRIVATE_Get_Desired_Trevor_0_Ron_Event(eFamilyEvent) BREAK CASE FM_TREVOR_0_MICHAEL RETURN PRIVATE_Get_Desired_Trevor_0_Michael_Event(eFamilyEvent) BREAK CASE FM_TREVOR_0_TREVOR RETURN PRIVATE_Get_Desired_Trevor_0_Trevor_Event(eFamilyEvent) BREAK CASE FM_TREVOR_0_WIFE RETURN PRIVATE_Get_Desired_Trevor_0_Wife_Event(eFamilyEvent) BREAK CASE FM_TREVOR_0_MOTHER RETURN PRIVATE_Get_Desired_Trevor_0_Mother_Event(eFamilyEvent) BREAK CASE FM_TREVOR_1_FLOYD RETURN PRIVATE_Get_Desired_Trevor_1_Floyd_Event(eFamilyEvent) BREAK ENDSWITCH eFamilyEvent = NO_FAMILY_EVENTS SCRIPT_ASSERT("invalid eFamilyMember in PRIVATE_Get_Desired_FamilyMember_Night_Event()") RETURN FALSE ENDFUNC // ******************************************************************************************* // FAMILY PRIVATE SCHEDULE FUNCTIONS // ******************************************************************************************* FUNC BOOL PRIVATE_Get_Desired_FamilyMember_Event(enumFamilyMember eFamilyMember, enumFamilyEvents &eFamilyEvent, BOOL bIgnoreInvalidReturns = FALSE) IF g_bMagDemoActive SWITCH eFamilyMember CASE FM_MICHAEL_DAUGHTER eFamilyEvent = FE_M_DAUGHTER_workout_with_mp3 RETURN TRUE BREAK CASE FM_MICHAEL_MEXMAID eFamilyEvent = FE_M2_MEXMAID_clean_window RETURN TRUE BREAK CASE FM_MICHAEL_WIFE eFamilyEvent = FE_M_WIFE_leaving_in_car RETURN TRUE BREAK ENDSWITCH eFamilyEvent = NO_FAMILY_EVENTS RETURN FALSE ENDIF IF NOT bIgnoreInvalidReturns SP_MISSIONS eReturnedSpMissions IF PRIVATE_Force_Family_EventAvailableMissions(eFamilyMember, eFamilyEvent, eReturnedSpMissions) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "PRIVATE_Get_Desired_FamilyMember_Event(", Get_String_From_FamilyMember(eFamilyMember), ") = FALSE, PRIVATE_Force_Family_EventAvailableMissions(", GET_SP_MISSION_DISPLAY_STRING_FROM_ID(eReturnedSpMissions, TRUE), ")") #ENDIF RETURN TRUE ELSE #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "PRIVATE_Get_Desired_FamilyMember_Event(", Get_String_From_FamilyMember(eFamilyMember), "... PRIVATE_Force_Family_EventAvailableMissions(", GET_SP_MISSION_DISPLAY_STRING_FROM_ID(eReturnedSpMissions, TRUE), ")") #ENDIF ENDIF ELSE #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "PRIVATE_Get_Desired_FamilyMember_Event(", Get_String_From_FamilyMember(eFamilyMember), ")... bIgnoreInvalidReturns!!!") #ENDIF ENDIF //#1586404 IF (eFamilyMember = FM_MICHAEL_WIFE) IF IS_PLAYER_SWITCH_IN_PROGRESS() AND (g_eSelectedPlayerCharScene = PR_SCENE_M7_FAKEYOGA) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "PRIVATE_Get_Desired_FamilyMember_Event(", Get_String_From_FamilyMember(eFamilyMember), ") = FALSE, PR_SCENE_M7_FAKEYOGA(switch)") #ENDIF RETURN FALSE ENDIF IF (Get_Player_Timetable_Scene_In_Progress() = PR_SCENE_M7_FAKEYOGA) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "PRIVATE_Get_Desired_FamilyMember_Event(", Get_String_From_FamilyMember(eFamilyMember), ") = FALSE, PR_SCENE_M7_FAKEYOGA(scene)") #ENDIF RETURN FALSE ENDIF ENDIF IF (eFamilyEvent <> NO_FAMILY_EVENTS) IF PRIVATE_Is_FamilyEvent_Near_Trigger(eFamilyMember, eFamilyEvent) #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "PRIVATE_Get_Desired_FamilyMember_Event(", Get_String_From_FamilyMember(eFamilyMember), ") = FALSE, PRIVATE_Is_FamilyEvent_Near_Trigger()") #ENDIF RETURN FALSE ENDIF ENDIF SWITCH GET_CLOCK_HOURS() /* 06:00 - 11:59 */ CASE 6 CASE 7 CASE 8 CASE 9 CASE 10 CASE 11 //time window A (morning) RETURN PRIVATE_Get_Desired_FamilyMember_Morning_Event(eFamilyMember, eFamilyEvent) BREAK /* 12:00 - 17:59 */ CASE 12 CASE 13 CASE 14 CASE 15 CASE 16 CASE 17 //time window B (afternoon) RETURN PRIVATE_Get_Desired_FamilyMember_Afternoon_Event(eFamilyMember, eFamilyEvent) BREAK /* 18:00 - 23:59 */ CASE 18 CASE 19 CASE 20 CASE 21 CASE 22 CASE 23 //time window C (evening) RETURN PRIVATE_Get_Desired_FamilyMember_Evening_Event(eFamilyMember, eFamilyEvent) BREAK /* 00:00 - 05:59 */ CASE 0 CASE 1 CASE 2 CASE 3 CASE 4 CASE 5 //time window D (night) RETURN PRIVATE_Get_Desired_FamilyMember_Night_Event(eFamilyMember, eFamilyEvent) BREAK ENDSWITCH eFamilyEvent = NO_FAMILY_EVENTS SCRIPT_ASSERT("invalid GET_CLOCK_HOURS() in PRIVATE_Get_Desired_FamilyMember_Event()") RETURN FALSE ENDFUNC // ******************************************************************************************* // FAMILY PRIVATE SCHEDULE FUNCTIONS // ******************************************************************************************* FUNC BOOL PRIVATE_Is_Valid_Find_FamilyMember_Event(enumFamilyMember eFamilyMember, enumFamilyEvents eFamilyEvent) SWITCH eFamilyMember CASE FM_MICHAEL_SON SWITCH eFamilyEvent // CASE FE_M_SON_gaming FALLTHRU // CASE FE_M_SON_rapping_in_the_shower FALLTHRU // CASE FE_M_SON_Borrows_sisters_car FALLTHRU // CASE FE_M_SON_watching_porn FALLTHRU // CASE FE_M_SON_in_room_asks_for_munchies FALLTHRU // CASE FE_M_SON_phone_calls_in_room FALLTHRU // CASE FE_M_SON_on_ecstasy_AND_friendly FALLTHRU // CASE FE_M_SON_Fighting_with_sister FALLTHRU // CASE FE_M_SON_smoking_weed_in_a_bong FALLTHRU // CASE FE_M_SON_raids_fridge_for_food FALLTHRU // CASE FE_M_SON_sleeping FALLTHRU CASE FE_M7_SON_jumping_jacks // CASE FE_M7_SON_Gaming FALLTHRU // CASE FE_M7_SON_going_for_a_bike_ride FALLTHRU // CASE FE_M7_SON_coming_back_from_a_bike_ride FALLTHRU // CASE FE_M7_SON_on_laptop_looking_for_jobs IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL RETURN TRUE ELSE #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "invalid eFamilyEvent ", Get_String_From_FamilyMember(eFamilyMember), " in PRIVATE_Is_Valid_Find_FamilyMember_Event(", Get_String_From_FamilyEvent(eFamilyEvent), ") - player char is not michael") #ENDIF RETURN FALSE ENDIF BREAK DEFAULT #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "invalid eFamilyEvent ", Get_String_From_FamilyMember(eFamilyMember), " in PRIVATE_Is_Valid_Find_FamilyMember_Event(", Get_String_From_FamilyEvent(eFamilyEvent), ")") #ENDIF RETURN FALSE BREAK ENDSWITCH BREAK CASE FM_MICHAEL_DAUGHTER SWITCH eFamilyEvent // CASE FE_M_DAUGHTER_sunbathing FALLTHRU // CASE FE_M_DAUGHTER_Going_out_in_her_car FALLTHRU // CASE FE_M_DAUGHTER_Coming_home_drunk FALLTHRU CASE FE_M_DAUGHTER_on_phone_to_friends FALLTHRU // CASE FE_M_DAUGHTER_shower FALLTHRU // CASE FE_M_DAUGHTER_workout_with_mp3 FALLTHRU // CASE FE_M_DAUGHTER_dancing_practice FALLTHRU // CASE FE_M_DAUGHTER_watching_TV_sober FALLTHRU // CASE FE_M_DAUGHTER_watching_TV_drunk FALLTHRU // CASE FE_M_DAUGHTER_crying_over_a_guy FALLTHRU // CASE FE_M_DAUGHTER_screaming_at_dad FALLTHRU // CASE FE_M_DAUGHTER_purges_in_the_bathroom FALLTHRU // CASE FE_M_DAUGHTER_sniffs_drugs_in_toilet FALLTHRU // CASE FE_M_DAUGHTER_sex_sounds_from_room FALLTHRU CASE FE_M_DAUGHTER_walks_to_room_music FALLTHRU // CASE FE_M_DAUGHTER_sleeping FALLTHRU // CASE FE_M_DAUGHTER_couchsleep FALLTHRU CASE FE_M7_DAUGHTER_studying_on_phone FALLTHRU CASE FE_M7_DAUGHTER_studying_does_nails //FALLTHRU // CASE FE_M7_DAUGHTER_sunbathing RETURN TRUE BREAK DEFAULT #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "invalid eFamilyEvent ", Get_String_From_FamilyMember(eFamilyMember), " in PRIVATE_Is_Valid_Find_FamilyMember_Event(", Get_String_From_FamilyEvent(eFamilyEvent), ")") #ENDIF RETURN FALSE BREAK ENDSWITCH BREAK CASE FM_MICHAEL_WIFE SWITCH eFamilyEvent // CASE FE_M_WIFE_screams_at_mexmaid FALLTHRU // CASE FE_M_WIFE_in_face_mask FALLTHRU // CASE FE_M_WIFE_playing_tennis FALLTHRU // CASE FE_M2_WIFE_doing_yoga FALLTHRU // CASE FE_M7_WIFE_doing_yoga FALLTHRU // CASE FE_M_WIFE_getting_nails_done FALLTHRU // CASE FE_M_WIFE_leaving_in_car FALLTHRU // CASE FE_M_WIFE_leaving_in_car_v2 FALLTHRU // CASE FE_M_WIFE_MD_leaving_in_car_v3 FALLTHRU // CASE FE_M_WIFE_with_shopping_bags_enter FALLTHRU // CASE FE_M_WIFE_with_shopping_bags_idle FALLTHRU // CASE FE_M_WIFE_with_shopping_bags_exit FALLTHRU CASE FE_M_WIFE_gets_drink_in_kitchen // CASE FE_M2_WIFE_sunbathing FALLTHRU // CASE FE_M7_WIFE_sunbathing FALLTHRU // CASE FE_M_WIFE_getting_botox_done FALLTHRU // CASE FE_M_WIFE_passed_out_SOFA FALLTHRU // CASE FE_M_WIFE_screaming_at_son_P1 FALLTHRU // CASE FE_M_WIFE_screaming_at_son_P2 FALLTHRU // CASE FE_M_WIFE_screaming_at_son_P3 FALLTHRU // CASE FE_M_WIFE_screaming_at_daughter FALLTHRU // CASE FE_M2_WIFE_phones_man_OR_therapist FALLTHRU // CASE FE_M_WIFE_hangs_up_and_wanders FALLTHRU // CASE FE_M_WIFE_using_vibrator FALLTHRU // CASE FE_M_WIFE_passed_out_BED FALLTHRU // CASE FE_M_WIFE_sleeping FALLTHRU // CASE FE_M7_WIFE_Making_juice FALLTHRU // CASE FE_M7_WIFE_shopping_with_daughter FALLTHRU // CASE FE_M7_WIFE_on_phone FALLTHRU // CASE FE_M7_WIFE_shopping_with_son RETURN TRUE BREAK DEFAULT #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "invalid eFamilyEvent ", Get_String_From_FamilyMember(eFamilyMember), " in PRIVATE_Is_Valid_Find_FamilyMember_Event(", Get_String_From_FamilyEvent(eFamilyEvent), ")") #ENDIF RETURN FALSE BREAK ENDSWITCH BREAK CASE FM_MICHAEL_MEXMAID SWITCH eFamilyEvent CASE FE_M2_MEXMAID_cleans_booze_pot_other CASE FE_M7_MEXMAID_cleans_booze_pot_other RETURN TRUE BREAK DEFAULT #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "invalid eFamilyEvent ", Get_String_From_FamilyMember(eFamilyMember), " in PRIVATE_Is_Valid_Find_FamilyMember_Event(", Get_String_From_FamilyEvent(eFamilyEvent), ")") #ENDIF RETURN FALSE BREAK ENDSWITCH BREAK #IF USE_TU_CHANGES CASE FM_MICHAEL_GARDENER SWITCH eFamilyEvent CASE FE_M_GARDENER_on_phone CASE FE_M_GARDENER_smoking_weed RETURN TRUE BREAK DEFAULT #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "invalid eFamilyEvent ", Get_String_From_FamilyMember(eFamilyMember), " in PRIVATE_Is_Valid_Find_FamilyMember_Event(", Get_String_From_FamilyEvent(eFamilyEvent), ")") #ENDIF RETURN FALSE BREAK ENDSWITCH BREAK #ENDIF CASE FM_FRANKLIN_LAMAR CASE FM_FRANKLIN_STRETCH SWITCH eFamilyEvent // CASE FE_F_LAMAR_and_STRETCH_chill_outside FALLTHRU // CASE FE_F_LAMAR_and_STRETCH_bbq_outside FALLTHRU // CASE FE_F_LAMAR_and_STRETCH_arguing FALLTHRU // CASE FE_F_LAMAR_and_STRETCH_shout_at_cops FALLTHRU CASE FE_F_LAMAR_and_STRETCH_wandering RETURN TRUE BREAK DEFAULT #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "invalid eFamilyEvent ", Get_String_From_FamilyMember(eFamilyMember), " in PRIVATE_Is_Valid_Find_FamilyMember_Event(", Get_String_From_FamilyEvent(eFamilyEvent), ")") #ENDIF RETURN FALSE BREAK ENDSWITCH BREAK CASE FM_TREVOR_0_RON SWITCH eFamilyEvent // CASE FE_T0_RON_monitoring_police_frequency FALLTHRU // CASE FE_T0_RON_listens_to_radio_broadcast FALLTHRU // CASE FE_T0_RON_ranting_about_government FALLTHRU // CASE FE_T0_RON_smoking_crystal FALLTHRU // CASE FE_T0_RON_drinks_moonshine_from_a_jar FALLTHRU CASE FE_T0_RON_stares_through_binoculars RETURN TRUE BREAK DEFAULT #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "invalid eFamilyEvent ", Get_String_From_FamilyMember(eFamilyMember), " in PRIVATE_Is_Valid_Find_FamilyMember_Event(", Get_String_From_FamilyEvent(eFamilyEvent), ")") #ENDIF RETURN FALSE BREAK ENDSWITCH BREAK CASE FM_TREVOR_0_WIFE RETURN FALSE BREAK CASE FM_TREVOR_1_FLOYD SWITCH eFamilyEvent CASE FE_T1_FLOYD_cleaning // FALLTHRU // CASE FE_T1_FLOYD_cries_in_foetal_position FALLTHRU // CASE FE_T1_FLOYD_pineapple FALLTHRU // CASE FE_T1_FLOYD_on_phone_to_girlfriend FALLTHRU // CASE FE_T1_FLOYD_hangs_up_and_wanders FALLTHRU // CASE FE_T1_FLOYD_hiding_from_Trevor_a FALLTHRU // CASE FE_T1_FLOYD_hiding_from_Trevor_b FALLTHRU // CASE FE_T1_FLOYD_hiding_from_Trevor_c // CASE FE_T1_FLOYD_is_sleeping RETURN TRUE BREAK DEFAULT #IF IS_DEBUG_BUILD CPRINTLN(DEBUG_FAMILY, "invalid eFamilyEvent ", Get_String_From_FamilyMember(eFamilyMember), " in PRIVATE_Is_Valid_Find_FamilyMember_Event(", Get_String_From_FamilyEvent(eFamilyEvent), ")") #ENDIF RETURN FALSE BREAK ENDSWITCH BREAK DEFAULT #IF IS_DEBUG_BUILD TEXT_LABEL_63 str str = ("invalid eFamilyMember ") str += (Get_String_From_FamilyMember(eFamilyMember)) str += (" in Is_Valid_Find_FamEvent") CPRINTLN(DEBUG_FAMILY, str) SCRIPT_ASSERT(str) #ENDIF RETURN FALSE BREAK ENDSWITCH RETURN FALSE ENDFUNC