391 lines
11 KiB
Python
Executable File
391 lines
11 KiB
Python
Executable File
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
//
|
|
// MISSION NAME : postRC_Barry1and2.sc
|
|
// AUTHOR : Aaron Gandaa
|
|
// DESCRIPTION : Clean up For Barry 1 and 2
|
|
//
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
|
|
//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 "rgeneral_include.sch"
|
|
USING "RC_Helper_Functions.sch"
|
|
|
|
//----------------------
|
|
// VARIABLES
|
|
//----------------------
|
|
OBJECT_INDEX chairObject
|
|
OBJECT_INDEX deskObject
|
|
OBJECT_INDEX signObject
|
|
PED_INDEX barryPed
|
|
|
|
STRING sBarryAnimDict = "RCMBarryLeadInOut"
|
|
STRING sBarryAnimLoop = "idle"
|
|
|
|
INT iBarryDialogueTimer = 0
|
|
INT iNumber = 0
|
|
INT iDisableControlTimer
|
|
|
|
VECTOR vPos = <<189.5964, -956.0344, 29.5771>>
|
|
VECTOR vBarryPos = <<190.2424, -956.3790, 28.63>>
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
WIDGET_GROUP_ID mDebugWidget
|
|
BOOL bMissionFlagTest = FALSE
|
|
#ENDIF
|
|
|
|
//----------------------
|
|
// FUNCTIONS
|
|
//----------------------
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
PROC CREATE_DEBUG_WIDGETS()
|
|
mDebugWidget = START_WIDGET_GROUP("PostRC_Barry1And2")
|
|
ADD_WIDGET_BOOL("Mission Flag Test", bMissionFlagTest)
|
|
STOP_WIDGET_GROUP()
|
|
ENDPROC
|
|
|
|
PROC UPDATE_DEBUG_WIDGETS()
|
|
IF (bMissionFlagTest)
|
|
SET_MISSION_FLAG(TRUE)
|
|
bMissionFlagTest = FALSE
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC CLEANUP_DEBUG_WIDGETS()
|
|
IF DOES_WIDGET_GROUP_EXIST(mDebugWidget)
|
|
DELETE_WIDGET_GROUP(mDebugWidget)
|
|
ENDIF
|
|
ENDPROC
|
|
#ENDIF
|
|
|
|
PROC SCRIPT_CLEANUP(BOOL bDelete=FALSE)
|
|
CPRINTLN(DEBUG_AMBIENT, "POSTRC_BARRY1AND2 - SCRIPT_CLEANUP")
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CLEANUP_DEBUG_WIDGETS()
|
|
#ENDIF
|
|
|
|
/*
|
|
IF IS_ENTITY_ALIVE(barryPed)
|
|
STOP_PED_SPEAKING(barryPed, TRUE)
|
|
ENDIF
|
|
*/
|
|
|
|
IF bDelete
|
|
SAFE_DELETE_PED(barryPed)
|
|
ELSE
|
|
SAFE_RELEASE_PED(barryPed, TRUE)
|
|
ENDIF
|
|
|
|
IF IS_ENTITY_ALIVE(deskObject)
|
|
FREEZE_ENTITY_POSITION(deskObject, FALSE)
|
|
ENDIF
|
|
IF IS_ENTITY_ALIVE(chairObject)
|
|
FREEZE_ENTITY_POSITION(chairObject, FALSE)
|
|
ENDIF
|
|
|
|
IF bDelete
|
|
SAFE_DELETE_OBJECT(chairObject)
|
|
SAFE_DELETE_OBJECT(deskObject)
|
|
SAFE_DELETE_OBJECT(signObject)
|
|
ELSE
|
|
SAFE_RELEASE_OBJECT(chairObject)
|
|
SAFE_RELEASE_OBJECT(deskObject)
|
|
SAFE_RELEASE_OBJECT(signObject)
|
|
ENDIF
|
|
|
|
REMOVE_ANIM_DICT(sBarryAnimDict)
|
|
CLEAR_ADDITIONAL_TEXT(AMBIENT_DIALOGUE_TEXT_SLOT, FALSE)
|
|
|
|
TERMINATE_THIS_THREAD()
|
|
ENDPROC
|
|
|
|
PROC SETUP_BARRY()
|
|
IF IS_ENTITY_ALIVE(barryPed)
|
|
CPRINTLN(DEBUG_AMBIENT, "POSTRC_BARRY1AND2 - SETUP BARRY!")
|
|
IF NOT IS_ENTITY_A_MISSION_ENTITY(barryPed)
|
|
SET_ENTITY_AS_MISSION_ENTITY(barryPed)
|
|
ENDIF
|
|
|
|
SET_PED_PROP_INDEX(barryPed, ANCHOR_EYES, 0) //Glasses prop.
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(barryPed, TRUE)
|
|
SET_PED_MONEY(barryPed, 0)
|
|
SET_PED_CAN_BE_TARGETTED(barryPed, FALSE)
|
|
SET_PED_NAME_DEBUG(barryPed, "POSTBARRY")
|
|
SET_PED_RELATIONSHIP_GROUP_HASH(barryPed, RELGROUPHASH_PLAYER)
|
|
|
|
SET_ENTITY_COLLISION(barryPed, FALSE)
|
|
FREEZE_ENTITY_POSITION(barryPed, TRUE)
|
|
SET_ENTITY_COORDS(barryPed, vBarryPos, TRUE)
|
|
SET_ENTITY_HEADING(barryPed, RAD_TO_DEG(1.12))
|
|
FREEZE_ENTITY_POSITION(barryPed, TRUE)
|
|
|
|
TASK_PLAY_ANIM(barryPed, sBarryAnimDict, sBarryAnimLoop, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_LOOPING | AF_NOT_INTERRUPTABLE)
|
|
TASK_LOOK_AT_ENTITY(barryPed, PLAYER_PED_ID(), -1)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
// mothballing - we'll just create him
|
|
//FUNC BOOL GET_BARRY_PED()
|
|
// INT cnt
|
|
// INT i
|
|
// PED_INDEX tmpArray[32]
|
|
//
|
|
// cnt = GET_PED_NEARBY_PEDS(PLAYER_PED_ID(), tmpArray)
|
|
//
|
|
// REPEAT cnt i
|
|
// IF IS_ENTITY_ALIVE(tmpArray[i])
|
|
// CPRINTLN(DEBUG_AMBIENT, "POSTRC_BARRY1AND2 - PED FOUND!")
|
|
// IF (GET_ENTITY_MODEL(tmpArray[i]) = GET_NPC_PED_MODEL(CHAR_BARRY))
|
|
//
|
|
// CPRINTLN(DEBUG_AMBIENT, "POSTRC_BARRY1AND2 - BARRY GET!")
|
|
// barryPed = tmpArray[i]
|
|
//
|
|
// RETURN TRUE
|
|
// ENDIF
|
|
// ENDIF
|
|
// ENDREPEAT
|
|
//
|
|
// RETURN FALSE
|
|
//ENDFUNC
|
|
|
|
PROC SETUP_PROPS()
|
|
// get desk (should be left over from outro cutscene)
|
|
IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<190.56, -956.40, 28.63>>, 20.0, PROP_PROTEST_TABLE_01)
|
|
deskObject = GET_CLOSEST_OBJECT_OF_TYPE(<<190.56, -956.40, 28.63>>, 20.0, PROP_PROTEST_TABLE_01, FALSE)
|
|
IF IS_ENTITY_OK(deskObject)
|
|
IF NOT IS_ENTITY_A_MISSION_ENTITY(deskObject)
|
|
SET_ENTITY_AS_MISSION_ENTITY(deskObject)
|
|
CPRINTLN(DEBUG_AMBIENT, "POSTRC_BARRY1AND2 - DESK GET!")
|
|
ENDIF
|
|
vPos = <<189.5964, -956.0344, 29.540>>
|
|
SET_ENTITY_COORDS(deskObject, vPos)
|
|
SET_ENTITY_HEADING(deskObject, RAD_TO_DEG(-2.01))
|
|
FREEZE_ENTITY_POSITION(deskObject, TRUE)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
// get chair (should be left over from outro cutscene)
|
|
IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(<<190.56, -956.40, 28.63>>, 20.0, PROP_CHAIR_08)
|
|
chairObject = GET_CLOSEST_OBJECT_OF_TYPE(<<190.56, -956.40, 28.63>>, 20.0, PROP_CHAIR_08, FALSE)
|
|
IF IS_ENTITY_OK(chairObject)
|
|
IF NOT IS_ENTITY_A_MISSION_ENTITY(chairObject)
|
|
SET_ENTITY_AS_MISSION_ENTITY(chairObject)
|
|
CPRINTLN(DEBUG_AMBIENT, "POSTRC_BARRY1AND2 - CHAIR GET!")
|
|
ENDIF
|
|
vPos = <<190.2574, -956.3513, 29.621>>
|
|
SET_ENTITY_COORDS(chairObject, vPos)
|
|
SET_ENTITY_HEADING(chairObject, RAD_TO_DEG(-1.68))
|
|
FREEZE_ENTITY_POSITION(chairObject, TRUE)
|
|
ENDIF
|
|
ELSE
|
|
CPRINTLN(DEBUG_AMBIENT, "POSTRC_BARRY1AND2 - CREATING CHAIR!")
|
|
vPos = <<190.2574, -956.3513, 29.621>>
|
|
CREATE_SCENE_PROP(chairObject, PROP_CHAIR_08, vPos, RAD_TO_DEG(-1.68))
|
|
SET_ENTITY_COORDS(chairObject, vPos)
|
|
SET_ENTITY_HEADING(chairObject, RAD_TO_DEG(-1.68))
|
|
FREEZE_ENTITY_POSITION(chairObject, TRUE)
|
|
|
|
ENDIF
|
|
// get standing sign
|
|
vPos = <<192.4462, -953.5946, 29.0919>>
|
|
IF DOES_OBJECT_OF_TYPE_EXIST_AT_COORDS(vPos, 25.0, Prop_Protest_Sign_01)
|
|
signObject = GET_CLOSEST_OBJECT_OF_TYPE(vPos, 25.0, Prop_Protest_Sign_01, FALSE)
|
|
IF IS_ENTITY_OK(signObject)
|
|
IF NOT IS_ENTITY_A_MISSION_ENTITY(signObject)
|
|
SET_ENTITY_AS_MISSION_ENTITY(signObject)
|
|
CPRINTLN(DEBUG_AMBIENT, "POSTRC_BARRY1AND2 - SIGN GET!")
|
|
ENDIF
|
|
// Correct height if moving existing object
|
|
vPos.z = 29.603
|
|
SET_ENTITY_COORDS(signObject, vPos)
|
|
SET_ENTITY_HEADING(signObject, 23.45)
|
|
ENDIF
|
|
ELSE
|
|
CPRINTLN(DEBUG_AMBIENT, "POSTRC_BARRY1AND2 - CREATING SIGN!")
|
|
CREATE_SCENE_PROP(signObject, Prop_Protest_Sign_01, vPos, 23.45)
|
|
SET_ENTITY_COORDS(signObject, vPos)
|
|
SET_ENTITY_HEADING(signObject, 23.45)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
FUNC STRING GET_NEXT_BARRY_DIALOGUE()
|
|
STRING DialogueName
|
|
|
|
// Get dialogue label
|
|
SWITCH iNumber
|
|
CASE 0
|
|
DialogueName = "BARY1_RCMLI1"
|
|
BREAK
|
|
CASE 1
|
|
DialogueName = "BARY1_RCMLI2"
|
|
BREAK
|
|
CASE 2
|
|
DialogueName = "BARY1_RCMLI3"
|
|
BREAK
|
|
CASE 3
|
|
DialogueName = "BARY1_RCMLI4"
|
|
BREAK
|
|
CASE 4
|
|
DialogueName = "BARY1_RCMLI5"
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
// increase count for next time
|
|
iNumber ++
|
|
IF iNumber > 4
|
|
iNumber = 0
|
|
ENDIF
|
|
|
|
RETURN DialogueName
|
|
ENDFUNC
|
|
|
|
/// PURPOSE: Play ambient dialogue from the RC ped every so often
|
|
FUNC BOOL PLAY_POST_BARRY_AMBIENT_DIALOGUE()
|
|
|
|
|
|
IF IS_ENTITY_ALIVE(PLAYER_PED_ID())
|
|
AND IS_ENTITY_ALIVE(barryPed)
|
|
AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
AND (GET_GAME_TIMER() > iBarryDialogueTimer)
|
|
AND GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), barryPed) < 20.0
|
|
AND NOT GET_MISSION_FLAG()
|
|
structPedsForConversation s_conversation
|
|
ADD_PED_FOR_DIALOGUE(s_conversation, 0, barryPed, "BARRY")
|
|
ADD_NON_CRITICAL_STANDARD_CONVERSATION_TO_BUFFER(s_conversation, "BARY1AU", GET_NEXT_BARRY_DIALOGUE(), CONV_PRIORITY_MEDIUM)
|
|
iBarryDialogueTimer = GET_GAME_TIMER() + GET_RANDOM_INT_IN_RANGE(12000, 18000)
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
// let barry and props get exploded
|
|
PROC HANDLE_EXPLOSIONS()
|
|
|
|
IF IS_EXPLOSION_IN_SPHERE(EXP_TAG_DONTCARE, vBarryPos, 5.0)
|
|
CPRINTLN(DEBUG_AMBIENT, "POSTRC_BARRY1AND2 - Explosion detected!")
|
|
IF IS_ENTITY_ALIVE(barryPed)
|
|
FREEZE_ENTITY_POSITION(barryPed, FALSE)
|
|
APPLY_DAMAGE_TO_PED(barryPed, 1000, TRUE)
|
|
ENDIF
|
|
IF IS_ENTITY_ALIVE(deskObject)
|
|
FREEZE_ENTITY_POSITION(deskObject, FALSE)
|
|
ENDIF
|
|
IF IS_ENTITY_ALIVE(chairObject)
|
|
FREEZE_ENTITY_POSITION(chairObject, FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
SCRIPT
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "POSTRC_BARRY1AND2 - INIT AMBIENT SCRIPT")
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_BEHIND)
|
|
|
|
IF IS_ENTITY_OK(PLAYER_PED_ID())
|
|
IF GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) != 0
|
|
CPRINTLN(DEBUG_AMBIENT, "POSTRC_BARRY1AND2 - Resetting wanted level to zero")
|
|
SET_PLAYER_WANTED_LEVEL(PLAYER_ID(), 0)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Default callbacks
|
|
IF HAS_FORCE_CLEANUP_OCCURRED(DEFAULT_FORCE_CLEANUP_FLAGS|FORCE_CLEANUP_FLAG_DEBUG_MENU|FORCE_CLEANUP_FLAG_REPEAT_PLAY)
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
|
|
REQUEST_ANIM_DICT(sBarryAnimDict)
|
|
REQUEST_ADDITIONAL_TEXT("BARY1", AMBIENT_DIALOGUE_TEXT_SLOT)
|
|
|
|
WHILE NOT HAS_ANIM_DICT_LOADED(sBarryAnimDict)
|
|
OR NOT HAS_ADDITIONAL_TEXT_LOADED(AMBIENT_DIALOGUE_TEXT_SLOT)
|
|
CPRINTLN(DEBUG_AMBIENT, "POSTRC_BARRY1AND2 - Waiting on loads...")
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_BEHIND)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
CPRINTLN(DEBUG_AMBIENT, "POSTRC_BARRY1AND2 - disable look behind, post load")
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_BEHIND)
|
|
|
|
IS_ENTITY_OK(PLAYER_PED_ID())
|
|
|
|
// allow time for mission passed graphic
|
|
iBarryDialogueTimer = GET_GAME_TIMER() + 13000
|
|
// start on a random line
|
|
iNumber = GET_RANDOM_INT_IN_RANGE(0,5)
|
|
|
|
SETUP_PROPS()
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CREATE_DEBUG_WIDGETS()
|
|
#ENDIF
|
|
|
|
WHILE NOT CREATE_NPC_PED_ON_FOOT(barryPed, CHAR_BARRY, vBarryPos, RAD_TO_DEG(1.12), FALSE)
|
|
CPRINTLN(DEBUG_AMBIENT, "POSTRC_BARRY1AND2 - CREATING BARRY!")
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_BEHIND)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
CPRINTLN(DEBUG_AMBIENT, "POSTRC_BARRY1AND2 - disable look behind, post barry creation")
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_BEHIND)
|
|
SETUP_BARRY()
|
|
iDisableControlTimer = GET_GAME_TIMER() + 1000
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "POSTRC_BARRY1AND2 - disable look behind, post barry setup")
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_BEHIND)
|
|
|
|
// Main loop
|
|
WHILE (TRUE)
|
|
IS_ENTITY_OK(PLAYER_PED_ID())
|
|
IF GET_GAME_TIMER() < iDisableControlTimer
|
|
CPRINTLN(DEBUG_AMBIENT, "POSTRC_BARRY1AND2 - disable look behind, waiting for timer...")
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_LOOK_BEHIND)
|
|
ENDIF
|
|
|
|
HANDLE_EXPLOSIONS()
|
|
|
|
IF NOT IS_ENTITY_OK(barryPed)
|
|
CPRINTLN(DEBUG_AMBIENT, "POSTRC_BARRY1AND2 - BARRY IS PROBABLY DEAD - CLEANUP")
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
|
|
IF PLAY_POST_BARRY_AMBIENT_DIALOGUE()
|
|
CPRINTLN(DEBUG_AMBIENT, "POSTRC_BARRY1AND2: Shhh... Barry is saying something important...")
|
|
ENDIF
|
|
|
|
IF (GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(PLAYER_PED_ID(), vBarryPos) > 70.0)
|
|
CPRINTLN(DEBUG_AMBIENT, "POSTRC_BARRY1AND2 - BARRY IS FAR ENOUGH - QUIT SCRIPT")
|
|
SAFE_RELEASE_OBJECT(chairObject)
|
|
SAFE_RELEASE_OBJECT(deskObject)
|
|
SAFE_RELEASE_OBJECT(signObject)
|
|
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_H)
|
|
SET_MISSION_FLAG(TRUE)
|
|
ENDIF
|
|
|
|
UPDATE_DEBUG_WIDGETS()
|
|
#ENDIF
|
|
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
ENDSCRIPT
|
|
|
|
|
|
|
|
|