Files
2025-09-29 00:52:08 +02:00

733 lines
24 KiB
Scheme
Executable File

//- commands headers -//
//- script headers -//
//- public headers -//
USING "locates_public.sch"
USING "shop_public.sch"
//- private headers -//
USING "friendActivity_system_private.sch"
USING "friendActivity_journey_private.sch"
#IF IS_DEBUG_BUILD
//- debug headers -//
#ENDIF
//---------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------
//-- Friend activity - Squad state private functions and data types
// sam.hackett@rockstarleeds.com
//---------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------
//---------------------------------------------------------------------------------------------------
//-- Squad - Debug
//---------------------------------------------------------------------------------------------------
#IF IS_DEBUG_BUILD
PROC DEBUG_DisplaySquadInfo()
// Print soldier info
INT iSlot
REPEAT MAX_BATTLE_BUDDIES iSlot
DEBUG_DisplaySquadMemberInfo(gActivity.mSoldiers[iSlot])
ENDREPEAT
// Print trapped friend info
IF gActivity.mFriendA.eState = FRIEND_TRAPPED
OR gActivity.mFriendB.eState = FRIEND_TRAPPED
DEBUG_DisplayFriendInfo(gActivity.mFriendA, 4)
DEBUG_DisplayFriendInfo(gActivity.mFriendB, 5)
ENDIF
// Print activity locations
INT iLine = CONST_iActivityDebugPrintLine
enumBattleBuddyBehaviourFlag eFlag
REPEAT MAX_BATTLEBUDDY_BEHAVIOUR_FLAGS eFlag
IF IS_BATTLEBUDDY_BEHAVIOUR_REQUESTED(eFlag)
IF DrawFriendLiteralString(GetLabel_enumBattleBuddyBehaviourFlag(eFlag), iLine, HUD_COLOUR_WHITE)
iLine++
ENDIF
ENDIF
ENDREPEAT
ENDPROC
FUNC STRING GetLabel_HateGroup(REL_GROUP_HASH hGroup)
SWITCH hGroup
CASE RELGROUPHASH_HATES_PLAYER RETURN "RELGROUPHASH_HATES_PLAYER" BREAK
CASE RELGROUPHASH_AMBIENT_GANG_LOST RETURN "RELGROUPHASH_AMBIENT_GANG_LOST" BREAK
CASE RELGROUPHASH_AMBIENT_GANG_MEXICAN RETURN "RELGROUPHASH_AMBIENT_GANG_MEXICAN" BREAK
CASE RELGROUPHASH_AMBIENT_GANG_FAMILY RETURN "RELGROUPHASH_AMBIENT_GANG_FAMILY" BREAK
CASE RELGROUPHASH_AMBIENT_ARMY RETURN "RELGROUPHASH_AMBIENT_ARMY" BREAK
CASE RELGROUPHASH_SECURITY_GUARD RETURN "RELGROUPHASH_SECURITY_GUARD" BREAK
CASE RELGROUPHASH_AMBIENT_GANG_MARABUNTE RETURN "RELGROUPHASH_AMBIENT_GANG_MARABUNTE" BREAK
CASE RELGROUPHASH_AMBIENT_GANG_CULT RETURN "RELGROUPHASH_AMBIENT_GANG_CULT" BREAK
CASE RELGROUPHASH_AMBIENT_GANG_SALVA RETURN "RELGROUPHASH_AMBIENT_GANG_SALVA" BREAK
CASE RELGROUPHASH_AMBIENT_GANG_WEICHENG RETURN "RELGROUPHASH_AMBIENT_GANG_WEICHENG" BREAK
CASE RELGROUPHASH_AMBIENT_GANG_BALLAS RETURN "RELGROUPHASH_AMBIENT_GANG_BALLAS" BREAK
CASE RELGROUPHASH_AMBIENT_GANG_HILLBILLY RETURN "RELGROUPHASH_AMBIENT_GANG_HILLBILLY" BREAK
CASE RELGROUPHASH_AGGRESSIVE_INVESTIGATE RETURN "RELGROUPHASH_AGGRESSIVE_INVESTIGATE" BREAK
ENDSWITCH
RETURN "<unknown group>"
ENDFUNC
#ENDIF
//---------------------------------------------------------------------------------------------------
//-- Squad - Switching
//---------------------------------------------------------------------------------------------------
PROC Private_UpdateHotswap()
SWITCH gActivity.eHotswapStage
CASE SWAP_STATE_Wait
gActivity.bIsAnySwitchAvailable = FALSE
// Register members with hotswap selector
INT i
REPEAT MAX_BATTLE_BUDDIES i
IF Private_RegisterSoldierForSwapping(gActivity.mSoldiers[i], gActivity.sSelectorPeds)
gActivity.bIsAnySwitchAvailable = TRUE
ENDIF
ENDREPEAT
// Set default quick switch
IF Private_CheckBehaviourFlag(BBF_SwitchDefaultTrevor)
SET_SELECTOR_PED_PRIORITY(gActivity.sSelectorPeds, SELECTOR_PED_TREVOR, SELECTOR_PED_MICHAEL, SELECTOR_PED_FRANKLIN)
ELSE
CLEAR_SELECTOR_PED_PRIORITY(gActivity.sSelectorPeds)
ENDIF
// Check for hotswap
IF IS_PLAYER_PLAYING(PLAYER_ID()) AND gActivity.bIsAnySwitchAvailable
IF UPDATE_SELECTOR_HUD(gActivity.sSelectorPeds)
IF HAS_SELECTOR_PED_BEEN_SELECTED(gActivity.sSelectorPeds, SELECTOR_PED_FRANKLIN)
OR HAS_SELECTOR_PED_BEEN_SELECTED(gActivity.sSelectorPeds, SELECTOR_PED_MICHAEL)
OR HAS_SELECTOR_PED_BEEN_SELECTED(gActivity.sSelectorPeds, SELECTOR_PED_TREVOR)
CPRINTLN(DEBUG_FRIENDS, "BATTLEBUDDY - ** HOT SWAP STARTED **")
gActivity.sCamDetails.pedTo = gActivity.sSelectorPeds.pedID[gActivity.sSelectorPeds.eNewSelectorPed]
gActivity.sCamDetails.bRun = TRUE
gActivity.eHotswapStage = SWAP_STATE_CamIn
REPEAT MAX_BATTLE_BUDDIES i
Private_ClearSoldierExtraHealth(gActivity.mSoldiers[i])
ENDREPEAT
ENDIF
ENDIF
ENDIF
BREAK
CASE SWAP_STATE_CamIn
IF gActivity.sCamDetails.bSplineActive = FALSE
IF IS_PED_INJURED(gActivity.sCamDetails.pedTo)
CPRINTLN(DEBUG_FRIENDS, "BATTLEBUDDY - ** HOT SWAP ABORTED BEFORE START - TARGET PED INVALID/DEAD **")
gActivity.eHotswapStage = SWAP_STATE_Wait
EXIT
ENDIF
ENDIF
IF RUN_SWITCH_CAM_FROM_PLAYER_TO_PED(gActivity.sCamDetails)
IF gActivity.sCamDetails.bOKToSwitchPed
IF NOT gActivity.sCamDetails.bPedSwitched
IF TAKE_CONTROL_OF_SELECTOR_PED(gActivity.sSelectorPeds, TRUE)
CPRINTLN(DEBUG_FRIENDS, "BATTLEBUDDY - ** HOT SWAP SWITCHED CHARS **")
gActivity.eHotswapStage = SWAP_STATE_CamOut
BOOL bIsNewPlayerGettingIntoCar
bIsNewPlayerGettingIntoCar = (IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID(), TRUE) AND NOT IS_PED_SITTING_IN_ANY_VEHICLE(PLAYER_PED_ID()))
IF NOT bIsNewPlayerGettingIntoCar
CLEAR_PED_TASKS(PLAYER_PED_ID())
ENDIF
REPEAT MAX_BATTLE_BUDDIES i
IF gActivity.mSoldiers[i].hPed <> PLAYER_PED_ID()
Private_SetSoldierExtraHealth(gActivity.mSoldiers[i])
ENDIF
ENDREPEAT
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
CASE SWAP_STATE_CamOut
IF NOT RUN_SWITCH_CAM_FROM_PLAYER_TO_PED(gActivity.sCamDetails)
IF DOES_ENTITY_EXIST(gActivity.sSelectorPeds.pedID[SELECTOR_PED_MICHAEL])
g_sPlayerPedRequest.sSelectorPeds.pedID[SELECTOR_PED_MICHAEL] = gActivity.sSelectorPeds.pedID[SELECTOR_PED_MICHAEL]
ENDIF
IF DOES_ENTITY_EXIST(gActivity.sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN])
g_sPlayerPedRequest.sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN] = gActivity.sSelectorPeds.pedID[SELECTOR_PED_FRANKLIN]
ENDIF
IF DOES_ENTITY_EXIST(gActivity.sSelectorPeds.pedID[SELECTOR_PED_TREVOR])
g_sPlayerPedRequest.sSelectorPeds.pedID[SELECTOR_PED_TREVOR] = gActivity.sSelectorPeds.pedID[SELECTOR_PED_TREVOR]
ENDIF
CPRINTLN(DEBUG_FRIENDS, "BATTLEBUDDY - ** HOT SWAP DONE **")
gActivity.eHotswapStage = SWAP_STATE_Wait
ENDIF
BREAK
ENDSWITCH
ENDPROC
//---------------------------------------------------------------------------------------------------
//-- Squad - Group helpers
//---------------------------------------------------------------------------------------------------
//PROC Private_UpdatePlayerGroupOrder()
//
// // Get player group
// GROUP_INDEX hGroup = GET_PLAYER_GROUP(PLAYER_ID())
// IF hGroup = NULL
// EXIT
// ENDIF
//
// // Check if group size has changed...
// INT iLeaderCount, iFollowerCount
// GET_GROUP_SIZE(hGroup, iLeaderCount, iFollowerCount)
//
// IF iLeaderCount+iFollowerCount > 0
// IF GET_PED_AS_GROUP_LEADER(hGroup) <> PLAYER_PED_ID()
// SCRIPT_ASSERT("UPDATE_PLAYER_GROUP_ORDER() - Player is not leader of PLAYER_GROUP_ID()")
// ENDIF
// ENDIF
//
// IF gActivity.iPlayerGroupFollowerCount <> iFollowerCount
//
// // Check if mission peds need moving up list
// BOOL bFoundBattleBuddy = FALSE
// BOOL bFoundDisplacedMissionPed = FALSE
//
// INT i
// REPEAT iFollowerCount i
// PED_INDEX hPed = GET_PED_AS_GROUP_MEMBER(hGroup, i)
// IF IS_PED_UNINJURED(hPed)
// IF GET_PLAYER_PED_ENUM(hPed) <> NO_CHARACTER
// bFoundBattleBuddy = TRUE
//
// ELIF bFoundBattleBuddy
// bFoundDisplacedMissionPed = TRUE
// CPRINTLN(DEBUG_FRIENDS, "BATTLEBUDDY - GroupOrder: Npc ", GetLabel_enumCharacterList(GET_NPC_PED_ENUM(hPed)), " is too far back in group order (", i, ")")
// ENDIF
// ENDIF
// ENDREPEAT
//
// // If order needs updating -> Remove and re-add battle buddies who are already in group
// IF bFoundDisplacedMissionPed
//
// REPEAT MAX_BATTLE_BUDDIES i
// IF IS_PED_UNINJURED(gActivity.mSoldiers[i].hPed)
// IF IS_PED_GROUP_MEMBER(gActivity.mSoldiers[i].hPed, hGroup)
// REMOVE_PED_FROM_GROUP(gActivity.mSoldiers[i].hPed)
// SET_PED_AS_GROUP_MEMBER(gActivity.mSoldiers[i].hPed, hGroup)
// ENDIF
// ENDIF
// ENDREPEAT
//
// CPRINTLN(DEBUG_FRIENDS, "BATTLEBUDDY - GroupOrder: Group has been reordered (count ", iFollowerCount, ")")
//
// ENDIF
//
// // Update group size check
// gActivity.iPlayerGroupFollowerCount = iFollowerCount
//
// ENDIF
//
//ENDPROC
PROC Private_InitHatedRelGroups()
// Set group key
gActivity.hateGroups[0].hRelGroup = RELGROUPHASH_HATES_PLAYER
gActivity.hateGroups[1].hRelGroup = RELGROUPHASH_AMBIENT_GANG_LOST
gActivity.hateGroups[2].hRelGroup = RELGROUPHASH_AMBIENT_GANG_MEXICAN
gActivity.hateGroups[3].hRelGroup = RELGROUPHASH_AMBIENT_GANG_FAMILY
gActivity.hateGroups[4].hRelGroup = RELGROUPHASH_AMBIENT_ARMY
gActivity.hateGroups[5].hRelGroup = RELGROUPHASH_SECURITY_GUARD
gActivity.hateGroups[6].hRelGroup = RELGROUPHASH_AMBIENT_GANG_MARABUNTE
gActivity.hateGroups[7].hRelGroup = RELGROUPHASH_AMBIENT_GANG_CULT
gActivity.hateGroups[8].hRelGroup = RELGROUPHASH_AMBIENT_GANG_SALVA
gActivity.hateGroups[9].hRelGroup = RELGROUPHASH_AMBIENT_GANG_WEICHENG
gActivity.hateGroups[10].hRelGroup = RELGROUPHASH_AMBIENT_GANG_BALLAS
gActivity.hateGroups[11].hRelGroup = RELGROUPHASH_AMBIENT_GANG_HILLBILLY
gActivity.hateGroups[12].hRelGroup = RELGROUPHASH_AGGRESSIVE_INVESTIGATE
// Reset stored original relationships to none
INT i
REPEAT MAX_HATE_GROUPS i
// ACQUAINTANCE_TYPE_PED_HATE is used to denote group's relationship has not been changed
gActivity.hateGroups[i].eOriginalRelType = ACQUAINTANCE_TYPE_PED_HATE
ENDREPEAT
ENDPROC
PROC Private_AddHatedRelGroup(REL_GROUP_HASH hRelGroup, RELATIONSHIP_TYPE eOriginalRelType)
CPRINTLN(DEBUG_FRIENDS, "Private_AddHatedRelGroup() - Rel group ped in combat with/damaged playable char, set RELGROUPHASH_PLAYER to hate the group \"", GetLabel_HateGroup(hRelGroup), "\"")
// Set player group to hate this group
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, RELGROUPHASH_PLAYER, hRelGroup)
REGISTER_HATED_TARGETS_AROUND_PED(PLAYER_PED_ID(), 100.0)
// Backup original state
INT i
REPEAT MAX_HATE_GROUPS i
IF gActivity.hateGroups[i].hRelGroup = hRelGroup
gActivity.hateGroups[i].eOriginalRelType = eOriginalRelType
ENDIF
ENDREPEAT
ENDPROC
PROC Private_ResetHatedRelGroups()
INT i
REPEAT MAX_HATE_GROUPS i
IF gActivity.hateGroups[i].eOriginalRelType <> ACQUAINTANCE_TYPE_PED_HATE
CPRINTLN(DEBUG_FRIENDS, "Private_ResetHatedRelGroups() - Reseting \"", GetLabel_HateGroup(gActivity.hateGroups[i].hRelGroup), "\"")
SET_RELATIONSHIP_BETWEEN_GROUPS(gActivity.hateGroups[i].eOriginalRelType, RELGROUPHASH_PLAYER, gActivity.hateGroups[i].hRelGroup)
gActivity.hateGroups[i].eOriginalRelType = ACQUAINTANCE_TYPE_PED_HATE
ENDIF
ENDREPEAT
ENDPROC
PROC Private_UpdateHatedRelGroups()
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
// Check if player is wanted
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) > 0
IF GET_RELATIONSHIP_BETWEEN_GROUPS(RELGROUPHASH_PLAYER, RELGROUPHASH_COP) <> ACQUAINTANCE_TYPE_PED_HATE
CPRINTLN(DEBUG_FRIENDS, "Private_UpdateHatedRelGroups() - Player is wanted, set RELGROUPHASH_PLAYER to hate the cops")
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, RELGROUPHASH_PLAYER, RELGROUPHASH_COP)
REGISTER_HATED_TARGETS_AROUND_PED(PLAYER_PED_ID(), 100.0)
ENDIF
ELSE
IF GET_RELATIONSHIP_BETWEEN_GROUPS(RELGROUPHASH_PLAYER, RELGROUPHASH_COP) <> ACQUAINTANCE_TYPE_PED_NONE
CPRINTLN(DEBUG_FRIENDS, "Private_UpdateHatedRelGroups() - Player is NOT wanted, set RELGROUPHASH_PLAYER to NOT hate the cops")
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_NONE, RELGROUPHASH_PLAYER, RELGROUPHASH_COP)
ENDIF
ENDIF
// Check if any nearby peds are in combat with a playable character (check one playable ped every 3 frames)
IF GET_FRAME_COUNT() % 10 = 0
INT iChar = (GET_FRAME_COUNT() % 30) / 10
PED_INDEX hPlayablePed = gActivity.mSoldiers[iChar].hPed // Get playable ped
IF IS_PED_UNINJURED(hPlayablePed)
IF (COUNT_PEDS_IN_COMBAT_WITH_TARGET(hPlayablePed) > 0) // Get nearby peds
PED_INDEX nearbyPeds[25]
INT iNearCount = GET_PED_NEARBY_PEDS(hPlayablePed, nearbyPeds)
INT i
REPEAT iNearCount i // If any nearby peds are in combat with/traded damaged with playable ped...
IF IS_PED_UNINJURED(nearbyPeds[i])
IF IS_PED_IN_COMBAT(nearbyPeds[i], hPlayablePed)
OR HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(nearbyPeds[i], hPlayablePed)
OR HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(hPlayablePed, nearbyPeds[i])
REL_GROUP_HASH hAttackedRelGroup
hAttackedRelGroup = GET_PED_RELATIONSHIP_GROUP_HASH(nearbyPeds[i])
IF hAttackedRelGroup <> RELGROUPHASH_NO_RELATIONSHIP
AND hAttackedRelGroup <> RELGROUPHASH_PLAYER // Make sure player hates this group (unless it's a group that should be ignored)
AND hAttackedRelGroup <> RELGROUPHASH_CIVMALE
AND hAttackedRelGroup <> RELGROUPHASH_CIVFEMALE
AND hAttackedRelGroup <> RELGROUPHASH_COP
RELATIONSHIP_TYPE eRelType = GET_RELATIONSHIP_BETWEEN_GROUPS(RELGROUPHASH_PLAYER, hAttackedRelGroup)
IF eRelType <> ACQUAINTANCE_TYPE_PED_HATE
// If one of the standard rel groups, backup players original relationship to it
Private_AddHatedRelGroup(hAttackedRelGroup, eRelType)
ENDIF
ENDIF
ENDIF
ENDIF
ENDREPEAT
ENDIF
ENDIF
ENDIF
// Iterate through this frame's events
// INT iEventIndex
// REPEAT GET_NUMBER_OF_EVENTS(SCRIPT_EVENT_QUEUE_AI) iEventIndex
//
// // Get event
// EVENT_NAMES eEventType = GET_EVENT_AT_INDEX(SCRIPT_EVENT_QUEUE_AI, iEventIndex)
// STRUCT_ENTITY_ID sEventEntityStruct
//
// // Process event
// SWITCH (eEventType)
//
//// CASE EVENT_ACQUAINTANCE_PED_HATE // Could supporting this help?
//// CASE EVENT_RESPONDED_TO_THREAT // Could supporting this help?
// CASE EVENT_ENTITY_DAMAGED
// GET_EVENT_DATA(SCRIPT_EVENT_QUEUE_AI, iEventIndex, sEventEntityStruct, SIZE_OF(sEventEntityStruct))
//
// IF DOES_ENTITY_EXIST(sEventEntityStruct.EntityId) AND IS_ENTITY_A_PED(sEventEntityStruct.EntityId)
//
// // If ped was damaged by player, get his rel group
// PED_INDEX hDamagedPed
// hDamagedPed = GET_PED_INDEX_FROM_ENTITY_INDEX(sEventEntityStruct.EntityId)
//
// IF DOES_ENTITY_EXIST(hDamagedPed)
// IF hDamagedPed <> PLAYER_PED_ID()
// AND HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(hDamagedPed, PLAYER_PED_ID())
// REL_GROUP_HASH hAttackedRelGroup
// hAttackedRelGroup = GET_PED_RELATIONSHIP_GROUP_HASH(hDamagedPed)
//
// IF hAttackedRelGroup <> RELGROUPHASH_PLAYER
// AND hAttackedRelGroup <> RELGROUPHASH_CIVMALE
// AND hAttackedRelGroup <> RELGROUPHASH_CIVFEMALE
// IF GET_RELATIONSHIP_BETWEEN_GROUPS(RELGROUPHASH_PLAYER, hAttackedRelGroup) <> ACQUAINTANCE_TYPE_PED_HATE
// SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, RELGROUPHASH_PLAYER, hAttackedRelGroup)
// REGISTER_HATED_TARGETS_AROUND_PED(PLAYER_PED_ID(), 100.0)
//
// CPRINTLN(DEBUG_FRIENDS, "Private_UpdateHatedRelGroups() - Player damaged rel group, set RELGROUPHASH_PLAYER to hate the group")
// ENDIF
// ENDIF
// ENDIF
// ENDIF
// ENDIF
// BREAK
//
// ENDSWITCH
// ENDREPEAT
ENDIF
ENDPROC
//---------------------------------------------------------------------------------------------------
//-- Squad - Main
//---------------------------------------------------------------------------------------------------
//PROC PROCESS_SQUAD_REBOOT_STATE() // BBUDDIES REMOVED
//
// Private_ClearActivityFailReason()
// Private_RequestFriendText()
//
// //-- Check if replay is rebooting
// IF IS_REPLAY_BEING_PROCESSED()
//
// IF IS_PLAYER_PLAYING(PLAYER_ID())
//
// //-- Process activity members
// Private_ProcessAddSoldiers()
// Private_ProcessMembers()
//
//// IF Private_AreSoldiersFailed()
////
//// Private_SetActivityFailReason(FAF_RetryAbort)
////
//// ENDIF
//
// ENDIF
//
// //-- Check if replay reboot is complete
// ELSE
//
// IF NOT IS_PLAYER_PLAYING(PLAYER_ID())
// Private_SetActivityFailReason(FAF_PlayerDeathArrest)
//
//
// ELSE
// Private_SetActivityState(ACTIVITY_STATE_SquadRoaming)
//
// ENDIF
//
// ENDIF
//
// // TODO: Don't forget to sort out all the CLEANUP !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
//
//
//ENDPROC
//PROC PROCESS_SQUAD_ROAMING_STATE() // BBUDDIES REMOVED
//
// Private_ClearActivityFailReason()
//
// //-- Check if replay has been initiated
// IF IS_REPLAY_BEING_PROCESSED()
//
// Private_ClearObjective()
// IF GET_MISSION_FLOW_SAFE_TO_CLEANUP()
// Private_SetActivityFailReason(FAF_RetryAbort)
// ENDIF
//
//
// //-- Check if player is dead
// ELIF NOT IS_PLAYER_PLAYING(PLAYER_ID())
//
// Private_SetActivityFailReason(FAF_PlayerDeathArrest)
//
//
// //-- If player has started prep mission...
// ELIF IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_STORY_PREP)
//
// Private_SetActivityState(ACTIVITY_STATE_SquadMission)
//
//
// //-- 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)
//
// Private_RejectMembersForMission(FALSE)
// Private_SetActivityFailReason(FAF_PlayerOnMission)
//
//
// //-- Waiting to get mission flag...
// ELIF NOT Private_SetCurrentlyOnFriendMission(gActivity.iCandidateID)
//
// DISABLE_SELECTOR_THIS_FRAME()
// EXIT
//
//
// ELIF Private_RequestFriendText()
//
// IF gActivity.iStateProgress = 0
// IF gActivity.bRestoreLocationBlips = FALSE
// Private_BackupLocationBlips()
// gActivity.bRestoreLocationBlips = TRUE
// ENDIF
// Private_ClearLocationBlips()
// gActivity.iStateProgress++
// ENDIF
//
// //-- Process activity members
// Private_ProcessAddSoldiers()
// Private_ProcessMembers()
// Private_ProcessRemoveMembers()
//
// Private_ProcessSystem(TRUE)
//
// // -- Update hotswaps, groups and display debug
// Private_UpdateHotSwap()
//// Private_UpdatePlayerGroupOrder()
// Private_UpdateHatedRelGroups()
//
// #IF IS_DEBUG_BUILD
// DEBUG_DisplaySquadInfo()
// #ENDIF
//
// IF NOT Private_AreAnyMembersValid() // Are friends failed
//
// Private_ClearObjective()
// IF Private_AreAllMembersRemoved()
// Private_SetActivityFailReason(FAF_MemberFail)
// ENDIF
//
// ENDIF
//
// ENDIF
//
//
// // TODO: Don't forget to sort out all the CLEANUP !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
//
//
//ENDPROC
//PROC INIT_SQUAD_MISSION_STATE()
// CPRINTLN(DEBUG_FRIENDS, "INIT_SQUAD_MISSION_STATE()") // BBUDDIES REMOVED
//
// SET_SQUAD_MISSION_TO_CURRENT_ZONE()
// Private_SetZoneRejection(FALSE)
//
// // TODO: Set squad idle dialogue state
//ENDPROC
//
//PROC PROCESS_SQUAD_MISSION_STATE()
//
// Private_ClearActivityFailReason()
//
// //-- Check if replay has been initiated
// IF IS_REPLAY_BEING_PROCESSED()
//
// IF GET_MISSION_FLOW_SAFE_TO_CLEANUP()
// Private_SetActivityFailReason(FAF_RetryAbort)
// ENDIF
//
//
// //-- Check if player is alive
// ELIF NOT IS_PLAYER_PLAYING(PLAYER_ID())
//
// EXIT // Allow replay to handle this
//
//
// //-- If has prep mission ended successfully...
// ELIF NOT IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_STORY_PREP)
//
///* IF gActivity.bResumeFriendsAfterSquad
// IF Private_TransferMembersToFriends()
// Private_SetActivityState(ACTIVITY_STATE_Journey)
// ELSE
// Private_SetActivityState(ACTIVITY_STATE_DropoffSquad) // TODO: Should this go straight to fail/success or something?
// ENDIF
// ELSE
// Private_SetActivityState(ACTIVITY_STATE_DropoffSquad)
// ENDIF
//*/
// IF gActivity.bResumeFriendsAfterSquad AND Private_TransferMembersToFriends()
// Private_SetActivityState(ACTIVITY_STATE_Journey)
// ELSE
// Private_SetActivityState(ACTIVITY_STATE_DropoffSquad)
// ENDIF
//
//
// ELIF Private_RequestFriendText()
//
// //-- Process activity members
// Private_ProcessAddSoldiers()
// Private_ProcessMembers()
// Private_ProcessRemoveMembers()
//
// Private_ProcessSystem(TRUE)
//
// // -- Update hotswaps, groups and display debug
// Private_UpdateHotSwap()
//// Private_UpdatePlayerGroupOrder()
// Private_UpdateHatedRelGroups()
//
// #IF IS_DEBUG_BUILD
// DEBUG_DisplaySquadInfo()
// #ENDIF
//
// ENDIF
//
// // TODO: Don't forget to sort out all the CLEANUP !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1
//
//
//ENDPROC
//FUNC BOOL PROCESS_DROPOFF_SQUAD_STATE() // BBUDDIES REMOVED
//
// // Gets rid of all the battle buddies
// BOOL bAreAnyMembersRemaining = FALSE
//
// INT iSlot
// REPEAT MAX_BATTLE_BUDDIES iSlot
// IF gActivity.mSoldiers[iSlot].eState <> SOLDIER_NULL
// Private_SetSoldierRejected(gActivity.mSoldiers[iSlot], SP_MISSION_NONE, TRUE, FAP_SQUAD_PASSED)
// bAreAnyMembersRemaining = TRUE
// ENDIF
// ENDREPEAT
//
// // If all are gone, cleanup
// IF NOT bAreAnyMembersRemaining
// RETURN TRUE
// ENDIF
//
// RETURN FALSE
//
//ENDFUNC
PROC INIT_TRAPPED_STATE()
CPRINTLN(DEBUG_FRIENDS, "INIT_SQUAD_MISSION_STATE()") // BBUDDIES REMOVED
SET_SQUAD_MISSION_TO_CURRENT_ZONE()
Private_SetZoneRejection(FALSE)
// TODO: Set squad idle dialogue state
ENDPROC
PROC PROCESS_TRAPPED_STATE()
Private_ClearActivityFailReason()
//-- 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()
IF GET_MISSION_FLOW_SAFE_TO_CLEANUP()
Private_SetActivityFailReason(FAF_RetryAbort)
ENDIF
//-- Check if player is dead
ELIF NOT IS_PLAYER_PLAYING(PLAYER_ID())
Private_ClearObjective()
// Private_ClearDropoffScenarioBlocking()
Private_SetActivityFailReason(FAF_PlayerDeathArrest)
//-- 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_STORY_PREP)
Private_ClearObjective()
// Private_ClearDropoffScenarioBlocking()
Private_RejectMembersForMission(FALSE)
Private_SetActivityFailReason(FAF_PlayerOnMission)
ELIF Private_RequestFriendText()
//-- Process activity members
Private_ProcessMembers()
Private_ProcessRemoveMembers()
Private_ProcessSystem(TRUE)
#IF IS_DEBUG_BUILD
DEBUG_DisplayFriendInfo(gActivity.mFriendA, 0)
DEBUG_DisplayFriendInfo(gActivity.mFriendB, 2)
#ENDIF
Private_ClearObjective()
IF NOT Private_AreAnyMembersValid() // Are friends failed
IF Private_AreAllMembersRemoved()
Private_SetActivityFailReason(FAF_MemberFail)
ENDIF
ENDIF
ENDIF
ENDPROC