297 lines
9.1 KiB
Scheme
Executable File
297 lines
9.1 KiB
Scheme
Executable File
//- commands headers -//
|
|
|
|
//- script headers -//
|
|
|
|
//- public headers -//
|
|
|
|
//- private headers -//
|
|
USING "friendActivity_system_private.sch"
|
|
USING "friendActivity_journey_private.sch"
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
//- debug headers -//
|
|
#ENDIF
|
|
|
|
|
|
//---------------------------------------------------------------------------------------------------
|
|
//---------------------------------------------------------------------------------------------------
|
|
//-- Friend activity - Pickup state private functions and data types
|
|
// sam.hackett@rockstarleeds.com
|
|
//---------------------------------------------------------------------------------------------------
|
|
//---------------------------------------------------------------------------------------------------
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PROC DEBUG_DisplayPickupInfo()
|
|
DEBUG_DisplayFriendInfo(gActivity.mFriendA, 0)
|
|
DEBUG_DisplayFriendInfo(gActivity.mFriendB, 2)
|
|
// DEBUG_DisplayGlobalFriendIDs(20)
|
|
ENDPROC
|
|
#ENDIF
|
|
|
|
//---------------------------------------------------------------------------------------------------
|
|
//-- Pickup - Switching/basic functions
|
|
//---------------------------------------------------------------------------------------------------
|
|
|
|
PROC Private_GrabMemberPeds()
|
|
Private_SyncFriendPed(gActivity.mPlayer)
|
|
Private_SyncFriendPed(gActivity.mFriendA)
|
|
Private_SyncFriendPed(gActivity.mFriendB)
|
|
ENDPROC
|
|
|
|
FUNC BOOL Private_HandleSwitching()
|
|
|
|
IF Private_IsPlayerSwitching()
|
|
|
|
// If player char changes...
|
|
enumCharacterList eActualPlayerChar = GET_CURRENT_PLAYER_PED_ENUM()
|
|
|
|
IF gActivity.ePlayerChar <> eActualPlayerChar
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL_63 tOld = GetLabel_enumFriend(GET_FRIEND_FROM_CHAR(gActivity.ePlayerChar))
|
|
TEXT_LABEL_63 tNew = GetLabel_enumFriend(GET_FRIEND_FROM_CHAR(eActualPlayerChar))
|
|
CPRINTLN(DEBUG_FRIENDS, " --- SWITCH (", tOld, " -> ", tNew, ") ---")
|
|
#ENDIF
|
|
|
|
// Stop blocking scenarios at pickup point
|
|
Private_ClearFriendScenarioBlocking(gActivity.mPlayer)
|
|
Private_ClearFriendScenarioBlocking(gActivity.mFriendA)
|
|
Private_ClearFriendScenarioBlocking(gActivity.mFriendB)
|
|
|
|
// Player will have travelled, so update their pickup location to nearest one in use
|
|
Private_UpdateFriendPickupLocToNearest(gActivity.mPlayer)
|
|
|
|
// Switch members
|
|
Private_SortMembers(FALSE)
|
|
Private_GrabMemberPeds()
|
|
|
|
// Ensure the two friends will never try to occupy the same waiting spot
|
|
Private_SetFriendPickupLocOffset(gActivity.mFriendA, 0)
|
|
Private_SetFriendPickupLocOffset(gActivity.mFriendB, 1)
|
|
|
|
// Enable blocking scenarios at pickup point
|
|
Private_SetFriendScenarioBlocking(gActivity.mPlayer)
|
|
Private_SetFriendScenarioBlocking(gActivity.mFriendA)
|
|
Private_SetFriendScenarioBlocking(gActivity.mFriendB)
|
|
|
|
// Mark as switched
|
|
gActivity.ePlayerChar = eActualPlayerChar
|
|
gActivity.bUpdateAfterSwitch = TRUE
|
|
|
|
ENDIF
|
|
|
|
ELSE
|
|
// Grab any instances of the peds that get made by anyone else
|
|
Private_GrabMemberPeds()
|
|
|
|
// Update switch overrides after switch ends
|
|
IF gActivity.bUpdateAfterSwitch
|
|
Private_ClearFriendSwitchOverride(gActivity.mPlayer)
|
|
Private_SetFriendSwitchOverride(gActivity.mFriendA)
|
|
Private_SetFriendSwitchOverride(gActivity.mFriendB)
|
|
|
|
CPRINTLN(DEBUG_FRIENDS, " --- END SWITCH ---")
|
|
gActivity.bUpdateAfterSwitch = FALSE
|
|
|
|
IF Private_IsPlayerThirdParty()
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
|
|
ENDFUNC
|
|
|
|
FUNC BOOL Private_AreAnyFriendsPickedUp()
|
|
IF gActivity.mPlayer.bWasPickedUp
|
|
OR gActivity.mFriendA.bWasPickedUp
|
|
OR gActivity.mFriendB.bWasPickedUp
|
|
RETURN TRUE
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
//---------------------------------------------------------------------------------------------------
|
|
//-- Pickup - Main loop
|
|
//---------------------------------------------------------------------------------------------------
|
|
|
|
/// PURPOSE:
|
|
/// Update function for the "Pickup" state in the friend activity
|
|
/// PARAMS:
|
|
/// pickup - global data for the pickup state
|
|
/// RETURNS:
|
|
/// If the buddy has been successfully picked up.
|
|
PROC PROCESS_PICKUP_STATE()
|
|
|
|
Private_ClearActivityFailReason()
|
|
|
|
//-- Check for non-starters...
|
|
//----------------------------
|
|
// TODO: Need to check if player is in a taxi?
|
|
|
|
|
|
//-- If replay (as in playback) system requested clear entities...
|
|
IF REPLAY_SYSTEM_HAS_REQUESTED_A_SCRIPT_CLEANUP()
|
|
|
|
Private_ClearObjective()
|
|
Private_SetActivityFailReason(FAF_PlaybackAbort)
|
|
EXIT
|
|
|
|
//-- Check if replay (as in retry failed mission) has been initiated
|
|
ELIF IS_REPLAY_BEING_PROCESSED()
|
|
|
|
Private_ClearObjective()
|
|
IF GET_MISSION_FLOW_SAFE_TO_CLEANUP()
|
|
Private_SetActivityFailReason(FAF_RetryAbort)
|
|
ENDIF
|
|
|
|
//-- If player is dead/arrested...
|
|
ELIF NOT IS_PLAYER_PLAYING(PLAYER_ID())
|
|
|
|
Private_ClearObjective()
|
|
Private_SetActivityFailReason(FAF_PlayerDeathArrest)
|
|
|
|
|
|
//-- If player has started prep mission...
|
|
ELIF IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_STORY_PREP) // BBUDDIES REPLACED
|
|
|
|
Private_ClearObjective()
|
|
|
|
Private_SetDialogueState(gActivity.mDialogue, FDIALOGUE_SQUAD)
|
|
Private_SetDialogueIdleState(gActivity.mDialogue, FDIALOGUE_SQUAD_IDLE)
|
|
|
|
gActivity.eLogFailCharA = NO_CHARACTER
|
|
gActivity.eLogFailCharB = NO_CHARACTER
|
|
|
|
Private_RejectMembersForMission(FALSE, FAP_REJECTION_OK, TRUE)
|
|
Private_SetActivityState(ACTIVITY_STATE_Trapped)
|
|
|
|
|
|
//-- If player has started squad-allowed mission...
|
|
// ELIF IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_STORY_PREP) // BBUDDIES REMOVED
|
|
//
|
|
// Private_ClearObjective()
|
|
//
|
|
// SET_SQUAD_MISSION_TO_CURRENT_ZONE()
|
|
// Private_TransferMembersToSquad()
|
|
// Private_SetActivityState(ACTIVITY_STATE_SquadMission)
|
|
|
|
|
|
//-- If player has called soldiers...
|
|
// ELIF ARE_ANY_SQUAD_CONNECTIONS_PENDING_OR_ACTIVE() // BBUDDIES REMOVED
|
|
//
|
|
// Private_ClearObjective()
|
|
//
|
|
// Private_TransferMembersToSquad()
|
|
// Private_SetActivityState(ACTIVITY_STATE_SquadRoaming)
|
|
|
|
|
|
//-- If knockout scene has started...
|
|
ELIF IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_GRIEFING)
|
|
|
|
Private_ClearObjective()
|
|
// Private_ClearDropoffScenarioBlocking()
|
|
|
|
Private_DeleteMembersForGriefing()
|
|
Private_SetActivityFailReason(FAF_PlayerOnMission)
|
|
|
|
|
|
//-- If player has started story mission...
|
|
ELIF IS_CURRENTLY_ON_MISSION_TO_TYPE(MISSION_TYPE_FRIEND_ACTIVITY)
|
|
AND NOT IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_FRIEND_ACTIVITY)
|
|
AND NOT IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_FRIEND_ACTIVITY_WITH_MG)
|
|
AND NOT IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_SWITCH)
|
|
|
|
Private_ClearObjective()
|
|
|
|
Private_RejectMembersForMission(FALSE)
|
|
Private_SetActivityFailReason(FAF_PlayerOnMission)
|
|
|
|
|
|
//-- If player has switched to third party...
|
|
ELIF NOT Private_HandleSwitching()
|
|
|
|
CPRINTLN(DEBUG_FRIENDS, "FriendActivity: Player switched to third party")
|
|
|
|
// Remove friends
|
|
Private_CleanupFriend(gActivity.mPlayer, MC_Release)
|
|
Private_CleanupFriend(gActivity.mFriendA, MC_Release)
|
|
Private_CleanupFriend(gActivity.mFriendB, MC_Release)
|
|
|
|
Private_ClearObjective()
|
|
Private_SetActivityFailReason(FAF_PlayerSwitch)
|
|
EXIT
|
|
|
|
|
|
//-- Waiting to get mission flag...
|
|
ELIF Private_AreAnyFriendsPickedUp() AND NOT Private_SetCurrentlyOnFriendMission(gActivity.iCandidateID)
|
|
|
|
DISABLE_SELECTOR_THIS_FRAME()
|
|
EXIT
|
|
|
|
|
|
ELIF Private_LoadFriendPickupResources()
|
|
|
|
|
|
//-- Process activity members
|
|
Private_ProcessAddFriends(FALSE)
|
|
Private_ProcessMembers()
|
|
Private_ProcessRemoveMembers()
|
|
|
|
Private_ProcessSystem()
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
DEBUG_DisplayPickupInfo()
|
|
#ENDIF
|
|
|
|
// Change follow dist based on if player is normal/in interior/in fight
|
|
Private_UpdateFriendGroupSpacing()
|
|
|
|
//-- Set objective
|
|
|
|
IF Private_AreAnyFriendsPickedUp()
|
|
IF gActivity.bRestoreLocationBlips = FALSE
|
|
Private_BackupLocationBlips()
|
|
gActivity.bRestoreLocationBlips = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF Private_IsPlayerSwitching() // Is switching
|
|
|
|
Private_ClearObjective()
|
|
|
|
ELIF NOT Private_AreAnyMembersValid() // Are friends failed
|
|
|
|
Private_ClearObjective()
|
|
IF Private_AreAllMembersRemoved()
|
|
Private_SetActivityFailReason(FAF_MemberFail)
|
|
ENDIF
|
|
|
|
ELIF (gActivity.mFriendA.eState = FRIEND_LOST OR gActivity.mFriendA.eState = FRIEND_FAIL_LOST OR gActivity.mFriendA.eState = FRIEND_PLUMMET) // Any friend lost
|
|
OR (gActivity.mFriendB.eState = FRIEND_LOST OR gActivity.mFriendB.eState = FRIEND_FAIL_LOST OR gActivity.mFriendB.eState = FRIEND_PLUMMET)
|
|
|
|
Private_DisplayObjective_Lost()
|
|
|
|
ELIF gActivity.mPlayer.eState = FRIEND_PICKUP // Any friend waiting to be picked up
|
|
OR gActivity.mFriendA.eState = FRIEND_PICKUP
|
|
OR gActivity.mFriendB.eState = FRIEND_PICKUP
|
|
|
|
Private_DisplayObjective_Pickup()
|
|
|
|
ELSE // All friends have been picked up, proceed to next stage
|
|
Private_ClearObjective()
|
|
Private_SortMembers(TRUE)
|
|
|
|
Private_SetActivityState(ACTIVITY_STATE_Journey)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
// TODO: Make sure anims (and text?) are released on friendActivity.sc cleanup
|
|
|
|
|