199 lines
6.1 KiB
Python
Executable File
199 lines
6.1 KiB
Python
Executable File
|
|
//Compile out Title Update changes to header functions.
|
|
//Must be before includes.
|
|
//CONST_INT USE_TU_CHANGES 0 // Removed by Kenneth R.
|
|
|
|
// Includes
|
|
USING "rage_builtins.sch"
|
|
USING "globals.sch"
|
|
USING "player_ped_public.sch"
|
|
USING "dialogue_public.sch"
|
|
USING "RC_helper_functions.sch"
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
// //
|
|
// SCRIPT NAME : postRC_Epsilon4.sc //
|
|
// AUTHOR : //
|
|
// DESCRIPTION : Handles Marnie and Jimmy's conversations as they //
|
|
// walk to their car after completing Eps 4 //
|
|
// //
|
|
//////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
ENUM MISSION_STAGE
|
|
MS_INIT,
|
|
MS_RUNNING,
|
|
MS_CLEANUP
|
|
ENDENUM
|
|
|
|
MISSION_STAGE mStage = MS_INIT
|
|
structPedsForConversation convStruct
|
|
INT iConvTimer
|
|
|
|
PED_INDEX pedMarnie
|
|
PED_INDEX pedJimmy
|
|
|
|
/// PURPOSE:
|
|
/// Initialises variables etc
|
|
PROC INIT()
|
|
|
|
CPRINTLN(DEBUG_MISSION, "Post Eps 4: Trying to grab peds now...")
|
|
|
|
INT cnt
|
|
INT i
|
|
PED_INDEX tmpArray[32]
|
|
|
|
IF IS_ENTITY_ALIVE(PLAYER_PED_ID())
|
|
cnt = GET_PED_NEARBY_PEDS(PLAYER_PED_ID(), tmpArray)
|
|
ENDIF
|
|
|
|
REPEAT cnt i
|
|
IF IS_ENTITY_ALIVE(tmpArray[i])
|
|
IF (GET_ENTITY_MODEL(tmpArray[i]) = GET_NPC_PED_MODEL(CHAR_JIMMY_BOSTON))
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_MISSION, "Post Eps 4: - Jimmy get!")
|
|
#ENDIF
|
|
pedJimmy = tmpArray[i]
|
|
IF NOT IS_ENTITY_A_MISSION_ENTITY(pedJimmy)
|
|
SET_ENTITY_AS_MISSION_ENTITY(pedJimmy)
|
|
ENDIF
|
|
|
|
SET_PED_MONEY(pedJimmy, 0)
|
|
SET_PED_CAN_BE_TARGETTED(pedJimmy, FALSE)
|
|
SET_PED_NAME_DEBUG(pedJimmy, "POSTJIMMY")
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(pedJimmy, RELGROUPHASH_PLAYER)
|
|
ADD_PED_FOR_DIALOGUE(ConvStruct, 5, pedJimmy, "JIMMYBOSTON", TRUE)
|
|
|
|
ENDIF
|
|
IF (GET_ENTITY_MODEL(tmpArray[i]) = GET_NPC_PED_MODEL(CHAR_MARNIE))
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_MISSION, "Post Eps 4: - Marnie get!")
|
|
#ENDIF
|
|
pedMarnie = tmpArray[i]
|
|
IF NOT IS_ENTITY_A_MISSION_ENTITY(pedMarnie)
|
|
SET_ENTITY_AS_MISSION_ENTITY(pedMarnie)
|
|
ENDIF
|
|
|
|
SET_PED_MONEY(pedMarnie, 0)
|
|
SET_PED_CAN_BE_TARGETTED(pedMarnie, FALSE)
|
|
SET_PED_NAME_DEBUG(pedMarnie, "POSTMARNIE")
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(pedMarnie, RELGROUPHASH_PLAYER)
|
|
ADD_PED_FOR_DIALOGUE(ConvStruct, 4, pedMarnie, "MARNIE", TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
mStage = MS_RUNNING
|
|
ENDPROC
|
|
|
|
PROC CHECK_PEDS_FOR_CONVERSATION()
|
|
|
|
IF IS_ENTITY_ALIVE(pedJimmy)
|
|
// If the player is <=3m from Jimmy, play one of his ambient lines, with an 8sec delay between them
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
AND NOT IS_PED_FLEEING(pedJimmy)
|
|
AND NOT IS_PED_RAGDOLL(pedJimmy)
|
|
AND NOT IS_PED_PRONE(pedJimmy)
|
|
AND NOT IS_PED_INJURED(pedJimmy)
|
|
AND NOT IS_PED_IN_ANY_VEHICLE(pedJimmy)
|
|
IF GET_DISTANCE_BETWEEN_ENTITIES(pedJimmy, PLAYER_PED_ID()) <= 2.3
|
|
IF (GET_GAME_TIMER() - iConvTimer) > 8000
|
|
IF CREATE_CONVERSATION(ConvStruct, "EPS4AUD", "EPS4_FOLLJ", CONV_PRIORITY_MEDIUM)
|
|
iConvTimer = GET_GAME_TIMER()
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF GET_DISTANCE_BETWEEN_ENTITIES(pedJimmy, PLAYER_PED_ID()) > 150.0
|
|
SAFE_DELETE_PED(pedJimmy) // Jimmy won't be alive after this, it'll set the bool to false the frame after
|
|
ENDIF
|
|
ELSE
|
|
SAFE_RELEASE_PED(pedJimmy) // In case he still exists but is dead - no point holding onto the ped index anymore
|
|
ENDIF
|
|
|
|
IF IS_ENTITY_ALIVE(pedMarnie)
|
|
// If the player is <=3m from Marnie, play one of his ambient lines, with an 8sec delay between them
|
|
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
AND NOT IS_PED_FLEEING(pedMarnie)
|
|
AND NOT IS_PED_RAGDOLL(pedMarnie)
|
|
AND NOT IS_PED_PRONE(pedMarnie)
|
|
AND NOT IS_PED_INJURED(pedMarnie)
|
|
AND NOT IS_PED_IN_ANY_VEHICLE(pedMarnie)
|
|
IF GET_DISTANCE_BETWEEN_ENTITIES(pedMarnie, PLAYER_PED_ID()) <= 2.7
|
|
IF (GET_GAME_TIMER() - iConvTimer) > 8000
|
|
IF CREATE_CONVERSATION(ConvStruct, "EPS4AUD", "EPS4_FOLLM", CONV_PRIORITY_MEDIUM)
|
|
iConvTimer = GET_GAME_TIMER()
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF GET_DISTANCE_BETWEEN_ENTITIES(pedMarnie, PLAYER_PED_ID()) > 150.0
|
|
SAFE_DELETE_PED(pedMarnie) // Marnie won't be alive after this, it'll set the bool to false the frame after
|
|
ENDIF
|
|
ELSE
|
|
SAFE_RELEASE_PED(pedMarnie) // In case he still exists but is dead - no point holding onto the ped index anymore
|
|
ENDIF
|
|
|
|
IF NOT IS_ENTITY_ALIVE(pedMarnie)
|
|
AND NOT IS_ENTITY_ALIVE(pedJimmy)
|
|
mStage = MS_CLEANUP
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// Script Cleanup
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
/// PURPOSE:
|
|
/// Terminates ambient script after performing cleanup functions
|
|
PROC SCRIPT_CLEANUP()
|
|
CPRINTLN(DEBUG_MISSION, "POSTRC_EPS4.SC - SCRIPT CLEANUP")
|
|
REMOVE_PED_FOR_DIALOGUE(convStruct, 4) // "MARNIE"
|
|
REMOVE_PED_FOR_DIALOGUE(convStruct, 5) // "JIMMY"
|
|
CPRINTLN(DEBUG_MISSION, "POSTRC_EPS4.SC - TERMINATING AMBIENT SCRIPT")
|
|
TERMINATE_THIS_THREAD()
|
|
ENDPROC
|
|
|
|
// ===========================================================================================================
|
|
// Script Loop
|
|
// ===========================================================================================================
|
|
|
|
SCRIPT
|
|
|
|
CPRINTLN(DEBUG_MISSION, "POSTRC_EPS4.SC - INIT AMBIENT SCRIPT")
|
|
|
|
// Default callbacks
|
|
IF HAS_FORCE_CLEANUP_OCCURRED(DEFAULT_FORCE_CLEANUP_FLAGS|FORCE_CLEANUP_FLAG_DEBUG_MENU)
|
|
CPRINTLN(DEBUG_MISSION, "POSTRC_EPS4.SC - DEFAULT CLEANUP")
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
|
|
// Main loop
|
|
WHILE (TRUE)
|
|
|
|
WAIT(0)
|
|
|
|
// Terminate if we are not Michael
|
|
IF SHOULD_POST_RC_SCRIPT_TERMINATE(CHAR_MICHAEL)
|
|
SCRIPT_CLEANUP()
|
|
ELSE
|
|
SWITCH mStage
|
|
CASE MS_INIT
|
|
INIT()
|
|
BREAK
|
|
|
|
CASE MS_RUNNING
|
|
CHECK_PEDS_FOR_CONVERSATION()
|
|
BREAK
|
|
|
|
CASE MS_CLEANUP
|
|
SCRIPT_CLEANUP()
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
ENDWHILE
|
|
ENDSCRIPT
|