1351 lines
42 KiB
Python
Executable File
1351 lines
42 KiB
Python
Executable File
// Includes
|
|
USING "ob_safehouse_common.sch"
|
|
USING "freemode_header.sch"
|
|
USING "context_control_public.sch"
|
|
USING "net_realty_mess_include.sch"
|
|
USING "net_mission_trigger_public.sch"
|
|
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
//
|
|
// MISSION NAME : ob_bong.sc
|
|
// DESCRIPTION : Franklin and Michael's bong safehouse activity
|
|
//
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
// Enums
|
|
ENUM ACTIVITY_STATE
|
|
AS_LOAD_ASSETS,
|
|
AS_RUN_ACTIVITY,
|
|
AS_END
|
|
ENDENUM
|
|
ACTIVITY_STATE eState = AS_LOAD_ASSETS
|
|
|
|
ENUM TRIGGER_STATE
|
|
TS_PLAYER_OUT_OF_RANGE,
|
|
TS_WAIT_FOR_PLAYER,
|
|
TS_GRAB_PLAYER,
|
|
TS_RUN_ANIM,
|
|
TS_TRIGGER_EXIT_ANIM,
|
|
TS_BREAKOUT_EARLY,
|
|
TS_RESET
|
|
ENDENUM
|
|
TRIGGER_STATE eTriggerState = TS_PLAYER_OUT_OF_RANGE
|
|
|
|
ENUM MP_TRIGGER_STATE
|
|
MP_TS_PLAYER_OUT_OF_RANGE,
|
|
MP_TS_WAIT_FOR_PLAYER,
|
|
MP_TS_TRIGGER_SMOKE_ANIM,
|
|
MP_TS_CHECK_SMOKE_ANIM,
|
|
MP_TS_RUN_SMOKE_ANIM,
|
|
MP_TS_TRIGGER_EXIT_ANIM,
|
|
MP_TS_CHECK_EXIT_ANIM,
|
|
MP_TS_BREAKOUT_EARLY,
|
|
MP_TS_RESET
|
|
ENDENUM
|
|
MP_TRIGGER_STATE eMPTriggerState = MP_TS_PLAYER_OUT_OF_RANGE
|
|
|
|
CONST_FLOAT STONED_PHASE 0.5
|
|
|
|
BOOL bBongSmoke = FALSE
|
|
BOOL bBreakoutEarly = FALSE
|
|
BOOL bLighterFlame = FALSE
|
|
BOOL bLighterSparks = FALSE
|
|
BOOL bSetupAnimDict = FALSE
|
|
BOOL bSetupPTFX = FALSE
|
|
//BOOL bTriggeredCam2 = FALSE
|
|
BOOL bTriggeredExitCam = FALSE
|
|
BOOL bTakenHit = FALSE
|
|
BOOL bAppliedAnim = FALSE
|
|
BOOL bConvoKilled = FALSE
|
|
BOOL bInLowApt = FALSE
|
|
|
|
//FLOAT fCam2PhaseTime = 0.1
|
|
//FLOAT fExitCamPhaseTime = 0.7
|
|
|
|
INT iCurProperty
|
|
INT mSynchedScene
|
|
INT iUsageStat
|
|
INT iContextIntention = NEW_CONTEXT_INTENTION
|
|
|
|
CAMERA_INDEX CamIndex
|
|
|
|
OBJECT_INDEX mLighter
|
|
|
|
PTFX_ID ptfxLighter
|
|
STRING sClipSet = "move_m@drunk@slightlydrunk"
|
|
STRING sAnimDict
|
|
STRING sPedSmokeAnim
|
|
STRING sBongSmokeAnim
|
|
STRING sPedExitAnim
|
|
STRING sBongExitAnim
|
|
STRING sLighterSmokeAnim
|
|
STRING sLighterExitAnim
|
|
|
|
VECTOR vTriggerPos
|
|
FLOAT fTriggerHead
|
|
|
|
VECTOR vScenePos
|
|
VECTOR vSceneHead
|
|
|
|
//VECTOR vCamPos
|
|
//VECTOR vCamHead
|
|
//
|
|
//VECTOR vCam2Pos
|
|
//VECTOR vCam2Head
|
|
|
|
//VECTOR vExitCamPos
|
|
//VECTOR vExitCamHead
|
|
|
|
WEAPON_TYPE storedWeapon
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// Script Cleanup
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
PROC CLEANUP_BONG_ACTIVITY()
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: Cleaning up...")
|
|
|
|
// Unload audio
|
|
RELEASE_AMBIENT_AUDIO_BANK()
|
|
|
|
// Clear help message
|
|
IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("SA_BONG2")
|
|
CLEAR_HELP(TRUE)
|
|
ENDIF
|
|
|
|
// Remove particle fx
|
|
IF bSetupPTFX
|
|
REMOVE_PTFX_ASSET()
|
|
ENDIF
|
|
|
|
// Remove animation dictionary
|
|
IF bSetupAnimDict
|
|
REMOVE_ANIM_DICT(sAnimDict)
|
|
ENDIF
|
|
|
|
// Player is no longer stoned
|
|
CLEANUP_STONED_EFFECT()
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(mSynchedScene)
|
|
SET_SYNCHRONIZED_SCENE_PHASE(mSynchedScene, 1.0)
|
|
ENDIF
|
|
|
|
// B*1918442
|
|
IF bAppliedAnim = TRUE // if we have applied the drunk clipset
|
|
IF bTakenHit = FALSE // but we haven't made the player drunk, reset them
|
|
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
|
CLEAR_PED_ALTERNATE_MOVEMENT_ANIM(PLAYER_PED_ID(), AAT_IDLE)
|
|
RESET_PED_MOVEMENT_CLIPSET(PLAYER_PED_ID(), 0.0)
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: Cleaning up - reset movement clipset changes")
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF g_bInMultiplayer
|
|
|
|
RELEASE_CONTEXT_INTENTION(iContextIntention)
|
|
|
|
IF bSafehouseSetControlOff
|
|
NET_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
ENDIF
|
|
|
|
// End script
|
|
TERMINATE_THIS_MULTIPLAYER_THREAD_NO_ARGS()
|
|
|
|
ELSE
|
|
|
|
// Clean up the audio scenes
|
|
IF IS_AUDIO_SCENE_ACTIVE("FRANKLIN_SAFEHOUSE_ACTIVITIES_SCENE")
|
|
STOP_AUDIO_SCENE("FRANKLIN_SAFEHOUSE_ACTIVITIES_SCENE")
|
|
ENDIF
|
|
|
|
IF IS_AUDIO_SCENE_ACTIVE("MICHAEL_SAFEHOUSE_ACTIVITIES_SCENE")
|
|
STOP_AUDIO_SCENE("MICHAEL_SAFEHOUSE_ACTIVITIES_SCENE")
|
|
ENDIF
|
|
|
|
// Remove monalogues
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
REMOVE_PED_FOR_DIALOGUE(mWeedConv, 0)
|
|
REMOVE_PED_FOR_DIALOGUE(mWeedConv, 1)
|
|
|
|
// B*1895222 - Reactivate the chop script only if the player started the activity
|
|
IF bIsFranklin
|
|
IF bSafehouseSetControlOff
|
|
REACTIVATE_NAMED_WORLD_BRAINS_WAITING_TILL_OUT_OF_RANGE("chop")
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Restore control and remove motion blur
|
|
SAFE_RESTORE_PLAYER_CONTROL()
|
|
|
|
// End script
|
|
TERMINATE_THIS_THREAD()
|
|
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
// Script Functions
|
|
// -----------------------------------------------------------------------------------------------------------
|
|
/// PURPOSE:
|
|
/// Requests and loads the correct animation dictionary.
|
|
FUNC BOOL HAS_BONG_ANIM_DICT_LOADED()
|
|
|
|
IF bIsFranklin
|
|
sPedSmokeAnim = "bong_FRA"
|
|
sPedExitAnim = "exit_FRA"
|
|
sBongSmokeAnim = "bong_bong"
|
|
sLighterSmokeAnim = "bong_lighter"
|
|
//sCamAnim = "bong_cam"
|
|
ELSE
|
|
sPedSmokeAnim = "michael_short"
|
|
sPedExitAnim = "michael_exit"
|
|
sBongSmokeAnim = "bong_short"
|
|
sLighterSmokeAnim = "lighter_short"
|
|
//sCamAnim = "bong_cam"
|
|
ENDIF
|
|
|
|
// Load animations
|
|
REQUEST_ANIM_DICT(sAnimDict)
|
|
|
|
IF HAS_ANIM_DICT_LOADED(sAnimDict)
|
|
bSetupAnimDict = TRUE
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Requests and loads particle effects for this activity
|
|
FUNC BOOL HAS_BONG_PTFX_ASSET_LOADED()
|
|
|
|
// Load PTFX
|
|
REQUEST_PTFX_ASSET()
|
|
IF HAS_PTFX_ASSET_LOADED()
|
|
bSetupPTFX = TRUE
|
|
RETURN TRUE
|
|
ELSE
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDFUNC
|
|
|
|
|
|
FUNC BOOL HAS_BONG_AUDIO_LOADED()
|
|
|
|
IF bIsFranklin
|
|
REQUEST_AMBIENT_AUDIO_BANK("SAFEHOUSE_FRANKLIN_USE_BONG")
|
|
ELSE
|
|
REQUEST_AMBIENT_AUDIO_BANK("SAFEHOUSE_MICHAEL_USE_BONG")
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Have particle effects and animations loaded for this activity
|
|
FUNC BOOL HAVE_ASSETS_LOADED()
|
|
|
|
IF HAS_BONG_ANIM_DICT_LOADED()
|
|
IF HAS_BONG_PTFX_ASSET_LOADED()
|
|
IF HAS_BONG_AUDIO_LOADED()
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: Assets have loaded...")
|
|
RETURN TRUE
|
|
ELSE
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: Audio loading...")
|
|
ENDIF
|
|
ELSE
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: PTFX loading...")
|
|
ENDIF
|
|
ELSE
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: Anims loading...")
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_LOW_APT_SOFA_IN_USE()
|
|
|
|
IF bInLowApt
|
|
AND IS_BIT_SET(MPSpecGlobals.iBitSet, GLOBAL_SPEC_BS_USING_MP_TV_SEAT)
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Returns anim phase for bong smoke FX
|
|
FUNC FLOAT GET_BREAKOUT_PHASE()
|
|
IF bIsFranklin
|
|
RETURN 0.350
|
|
ELSE
|
|
RETURN 0.550
|
|
ENDIF
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Returns anim phase for bong smoke FX
|
|
FUNC FLOAT GET_PHASE_TIME_FOR_BONG_SMOKE()
|
|
IF bIsFranklin
|
|
RETURN 0.440
|
|
ELSE
|
|
RETURN 0.495
|
|
ENDIF
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Returns anim phase for lighter flame FX
|
|
FUNC FLOAT GET_PHASE_TIME_FOR_LIGHTER_FLAME(BOOL bStartFX=TRUE)
|
|
IF bIsFranklin
|
|
IF bStartFX
|
|
RETURN 0.194
|
|
ELSE
|
|
RETURN 0.438
|
|
ENDIF
|
|
ELSE
|
|
IF bStartFX
|
|
RETURN 0.246
|
|
ELSE
|
|
RETURN 0.470
|
|
ENDIF
|
|
ENDIF
|
|
ENDFUNC
|
|
|
|
FUNC VECTOR GET_LIGHTER_FLAME_POS()
|
|
|
|
IF bIsFranklin
|
|
RETURN <<-0.005,0.0,0.05>>
|
|
ELSE
|
|
RETURN <<0.0,0.0,0.06>>
|
|
ENDIF
|
|
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Returns anim phase for lighter sparks FX
|
|
FUNC FLOAT GET_PHASE_TIME_FOR_LIGHTER_SPARKS()
|
|
IF bIsFranklin
|
|
RETURN 0.185
|
|
ELSE
|
|
RETURN 0.244
|
|
ENDIF
|
|
ENDFUNC
|
|
|
|
// Detect breakout of animation
|
|
PROC CHECK_FOR_BREAKOUT()
|
|
IF NOT bBreakoutEarly
|
|
INT iLeftX, iLeftY, iRightX, iRightY
|
|
GET_CONTROL_VALUE_OF_ANALOGUE_STICKS(iLeftX, iLeftY, iRightX, iRightY)
|
|
IF iLeftX < -64 OR iLeftX > 64 // Left/Right
|
|
OR iLeftY < -64 OR iLeftY > 64 // Forwards/Backwards
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: BREAKOUT DETECTED")
|
|
bBreakoutEarly = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
FUNC FLOAT GET_EXIT_PHASE_TIME()
|
|
|
|
IF bIsFranklin
|
|
RETURN 0.783
|
|
ELSE
|
|
RETURN 0.899
|
|
ENDIF
|
|
ENDFUNC
|
|
|
|
FUNC FLOAT GET_HEADING()
|
|
IF bIsFranklin
|
|
RETURN -47.5447
|
|
ELSE
|
|
RETURN 7.9319
|
|
ENDIF
|
|
ENDFUNC
|
|
|
|
FUNC FLOAT GET_PITCH
|
|
IF bIsFranklin
|
|
RETURN -7.5031
|
|
ELSE
|
|
RETURN 0.7148
|
|
ENDIF
|
|
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Updates SINGLE PLAYER bong smoking activity
|
|
PROC UPDATE_BONG_ACTIVITY()
|
|
|
|
vTriggerPos = GET_TRIGGER_VEC_FOR_THIS_OBJECT()
|
|
VECTOR vTriggerSize = << 1.2, 1.2, 1.2 >>
|
|
FLOAT fScenePhase = 0.0
|
|
FLOAT fReturnStartPhase, fReturnEndPhase
|
|
|
|
SWITCH eTriggerState
|
|
|
|
CASE TS_PLAYER_OUT_OF_RANGE
|
|
|
|
IF IS_TRIGGER_AREA_OK(vTriggerPos, vTriggerSize)
|
|
AND IS_PED_HEADING_TOWARDS_POSITION(PLAYER_PED_ID(), GET_ENTITY_COORDS(mTrigger), TRIGGER_ANGLE)
|
|
AND NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("FAM_WEAPDIS")
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: Player close to trigger...")
|
|
PRINT_HELP_FOREVER(GET_HELP_TEXT_FOR_THIS_ACTIVITY())
|
|
eTriggerState = TS_WAIT_FOR_PLAYER
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE TS_WAIT_FOR_PLAYER
|
|
IF CAN_PLAYER_START_CUTSCENE()
|
|
IF IS_TRIGGER_AREA_OK(vTriggerPos, vTriggerSize)
|
|
AND IS_PED_HEADING_TOWARDS_POSITION(PLAYER_PED_ID(), GET_ENTITY_COORDS(mTrigger), TRIGGER_ANGLE)
|
|
|
|
IF NOT IS_PLAYER_FREE_AIMING(PLAYER_ID())
|
|
AND NOT IS_PLAYER_TARGETTING_ANYTHING(PLAYER_ID())
|
|
AND IS_CONTROL_PRESSED(FRONTEND_CONTROL, INPUT_CONTEXT)
|
|
|
|
//vStartPos = GET_ENTITY_COORDS(mTrigger)
|
|
//fStartHead = GET_ENTITY_HEADING(mTrigger)
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: Activity triggered...")
|
|
SHOW_DEBUG_FOR_THIS_OBJECT()
|
|
|
|
IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED(GET_HELP_TEXT_FOR_THIS_ACTIVITY())
|
|
CLEAR_HELP(TRUE)
|
|
ENDIF
|
|
|
|
IF bIsFranklin
|
|
Request_Drunk_Audio_Scene("FRANKLIN_SAFEHOUSE_ACTIVITIES_SCENE")
|
|
//START_AUDIO_SCENE("FRANKLIN_SAFEHOUSE_ACTIVITIES_SCENE")
|
|
ELSE
|
|
Request_Drunk_Audio_Scene("MICHAEL_SAFEHOUSE_ACTIVITIES_SCENE")
|
|
//START_AUDIO_SCENE("MICHAEL_SAFEHOUSE_ACTIVITIES_SCENE")
|
|
ENDIF
|
|
|
|
CLEAR_AREA_OF_PROJECTILES(vTriggerPos, 3.0)
|
|
IF GET_FOLLOW_PED_CAM_VIEW_MODE() != CAM_VIEW_MODE_FIRST_PERSON
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
|
|
ELSE
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE, SPC_LEAVE_CAMERA_CONTROL_ON)
|
|
ENDIF
|
|
bSafehouseSetControlOff = TRUE
|
|
GET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), storedWeapon)
|
|
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
|
|
|
|
IF DOES_ENTITY_EXIST(mTrigger)
|
|
IF NOT IS_ENTITY_ATTACHED(mTrigger)
|
|
FREEZE_ENTITY_POSITION(mTrigger, FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE, DEFAULT, FALSE)
|
|
eTriggerState = TS_GRAB_PLAYER
|
|
ENDIF
|
|
ELSE
|
|
IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED(GET_HELP_TEXT_FOR_THIS_ACTIVITY())
|
|
CLEAR_HELP(TRUE)
|
|
ENDIF
|
|
eTriggerState = TS_PLAYER_OUT_OF_RANGE
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE TS_GRAB_PLAYER
|
|
|
|
DISABLE_SELECTOR_THIS_FRAME()
|
|
HIDE_HUD_AND_RADAR_THIS_FRAME()
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_NEXT_CAMERA)
|
|
|
|
mSynchedScene = CREATE_SYNCHRONIZED_SCENE(GET_SYNCHED_SCENE_VECTOR(), GET_SYNCHED_SCENE_ROT())
|
|
|
|
// Apply the anim to the player and all props he uses.
|
|
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), mSynchedScene, sAnimDict, GET_ENTER_ANIM_FOR_THIS_ACTIVITY(), NORMAL_BLEND_IN, REALLY_SLOW_BLEND_OUT)
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(mTrigger, mSynchedScene, GET_ENTER_ANIM_FOR_THIS_ENTITY(), sAnimDict, NORMAL_BLEND_IN, REALLY_SLOW_BLEND_OUT)
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(GET_SECONDARY_ENTITY(), mSynchedScene, GET_ENTER_ANIM_FOR_SECOND_ENTITY(), sAnimDict, NORMAL_BLEND_IN, REALLY_SLOW_BLEND_OUT)
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(mSynchedScene)
|
|
SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(mSynchedScene, FALSE)
|
|
ENDIF
|
|
|
|
// Setup camera
|
|
|
|
IF GET_FOLLOW_PED_CAM_VIEW_MODE() != CAM_VIEW_MODE_FIRST_PERSON
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: not using 1st person so creating CamIndex")
|
|
CamIndex = CREATE_CAM("DEFAULT_ANIMATED_CAMERA", TRUE)
|
|
|
|
PLAY_SYNCHRONIZED_CAM_ANIM(CamIndex, mSynchedScene, GET_CAMERA_FOR_THIS_ACTIVITY(), sAnimDict)
|
|
SHAKE_CAM(CamIndex, "HAND_SHAKE", DEFAULT_CAM_SHAKE)
|
|
RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
|
ELSE
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: using 1st person so not creating CamIndex")
|
|
DESTROY_ALL_CAMS() // Ensure there are no script cams
|
|
ENDIF
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: TS_RUN_ANIM")
|
|
eTriggerState = TS_RUN_ANIM
|
|
|
|
BREAK
|
|
|
|
CASE TS_RUN_ANIM
|
|
|
|
DISABLE_SELECTOR_THIS_FRAME()
|
|
HIDE_HUD_AND_RADAR_THIS_FRAME()
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_NEXT_CAMERA)
|
|
CHECK_FOR_BREAKOUT()
|
|
|
|
IF NOT bAppliedAnim
|
|
|
|
REQUEST_CLIP_SET(sClipSet)
|
|
|
|
IF HAS_CLIP_SET_LOADED(sClipSet)
|
|
|
|
//FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_ON_FOOT_IDLE)
|
|
SET_PED_MOVEMENT_CLIPSET(PLAYER_PED_ID(), sClipSet)
|
|
SET_PED_ALTERNATE_MOVEMENT_ANIM(PLAYER_PED_ID(), AAT_IDLE, sClipSet, "idle")
|
|
bAppliedAnim = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Monitor for particle effects/early breakout
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(mSynchedScene)
|
|
|
|
fScenePhase = GET_SYNCHRONIZED_SCENE_PHASE(mSynchedScene)
|
|
|
|
IF NOT bConvoKilled
|
|
IF fScenePhase > 0.15
|
|
IF IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: Killing any previous convo")
|
|
KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE()
|
|
ENDIF
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: Convo check done...")
|
|
bConvoKilled = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Lighter flame
|
|
IF bLighterFlame = FALSE
|
|
IF fScenePhase > GET_PHASE_TIME_FOR_LIGHTER_FLAME()
|
|
ptfxLighter = START_PARTICLE_FX_LOOPED_ON_ENTITY("scr_sh_lighter_flame", GET_SECONDARY_ENTITY(), GET_LIGHTER_FLAME_POS(), <<0.0,0.0,0.0>>)
|
|
SET_PARTICLE_FX_LOOPED_EVOLUTION(ptfxLighter, "inhale", 1)
|
|
bLighterFlame = TRUE
|
|
ENDIF
|
|
ELSE
|
|
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxLighter)
|
|
IF fScenePhase > GET_PHASE_TIME_FOR_LIGHTER_FLAME(FALSE)
|
|
STOP_PARTICLE_FX_LOOPED(ptfxLighter)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Lighter sparks
|
|
IF bLighterSparks = FALSE
|
|
IF GET_SYNCHRONIZED_SCENE_PHASE(mSynchedScene) > GET_PHASE_TIME_FOR_LIGHTER_SPARKS()
|
|
STOP_CURRENT_PLAYING_AMBIENT_SPEECH(PLAYER_PED_ID())
|
|
START_PARTICLE_FX_NON_LOOPED_ON_ENTITY("scr_sh_lighter_sparks", GET_SECONDARY_ENTITY(), << 0.0, 0.0, 0.06 >>, << 0.0, 0.0, 0.0 >>)
|
|
bLighterSparks = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Bong smoke fx
|
|
IF bBongSmoke = FALSE
|
|
IF fScenePhase > GET_PHASE_TIME_FOR_BONG_SMOKE()
|
|
START_PARTICLE_FX_NON_LOOPED_ON_PED_BONE("scr_sh_bong_smoke", PLAYER_PED_ID(), << -0.025, 0.13, 0.0 >>, <<0,0,0>>, BONETAG_HEAD)
|
|
bBongSmoke = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF fScenePhase > STONED_PHASE
|
|
IF NOT bTakenHit
|
|
IF IS_NOT_1ST_PERSON_AND_DOES_CAM_EXIST(CamIndex)
|
|
Player_Takes_Weed_Hit(PLAYER_PED_ID(), CamIndex)
|
|
ELSE
|
|
Player_Takes_Weed_Hit(PLAYER_PED_ID(), NULL)
|
|
ENDIF
|
|
iTimesUsed++
|
|
bTakenHit = TRUE
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: Player_Takes_Weed_Hit called ")
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT bTriggeredExitCam
|
|
IF fScenePhase > GET_EXIT_PHASE_TIME()
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: TRIGGERING EXIT CAM")
|
|
|
|
RENDER_SCRIPT_CAMS(FALSE, FALSE)
|
|
|
|
// Normal gameplay camera
|
|
IF IS_NOT_1ST_PERSON_AND_DOES_CAM_EXIST(CamIndex)
|
|
DESTROY_CAM(CamIndex)
|
|
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(GET_HEADING())
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(GET_PITCH())
|
|
|
|
SHAKE_GAMEPLAY_CAM("HAND_SHAKE", DEFAULT_CAM_SHAKE)
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE, SPC_LEAVE_CAMERA_CONTROL_ON)
|
|
ENDIF
|
|
|
|
bTriggeredExitCam = TRUE
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
// Handle breakout of animation
|
|
IF bBreakoutEarly
|
|
|
|
IF FIND_ANIM_EVENT_PHASE(sAnimDict, GET_ENTER_ANIM_FOR_THIS_ACTIVITY(), "ScriptEvent", fReturnStartPhase, fReturnEndPhase)
|
|
IF fScenePhase >= fReturnStartPhase AND fScenePhase <= fReturnEndPhase
|
|
CPRINTLN(DEBUG_AMBIENT, "[SA] Bong: Found ScriptEvent at ", fScenePhase)
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: Breakout Early - TS_RUN_ANIM -> TS_TRIGGER_EXIT_ANIM")
|
|
eTriggerState = TS_TRIGGER_EXIT_ANIM
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// IF FIND_ANIM_EVENT_PHASE(sAnimDict, GET_ENTER_ANIM_FOR_THIS_ACTIVITY(), "WalkInterruptible", fReturnStartPhase, fReturnEndPhase)
|
|
// IF fScenePhase >= fReturnStartPhase AND fScenePhase <= fReturnEndPhase
|
|
// CPRINTLN(DEBUG_AMBIENT, "[SA] Bong: Found WalkInterruptible at ", fScenePhase)
|
|
// CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: Breakout Early - TS_RUN_ANIM -> TS_TRIGGER_EXIT_ANIM")
|
|
// eTriggerState = TS_TRIGGER_EXIT_ANIM
|
|
// ENDIF
|
|
// ENDIF
|
|
ENDIF
|
|
|
|
// Synchronised scene has finished
|
|
ELSE
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: TS_RUN_ANIM -> TS_RESET")
|
|
eTriggerState = TS_RESET
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE TS_TRIGGER_EXIT_ANIM
|
|
|
|
DISABLE_SELECTOR_THIS_FRAME()
|
|
HIDE_HUD_AND_RADAR_THIS_FRAME()
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_NEXT_CAMERA)
|
|
|
|
mSynchedScene = CREATE_SYNCHRONIZED_SCENE(GET_SYNCHED_SCENE_VECTOR(), GET_SYNCHED_SCENE_ROT())
|
|
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), mSynchedScene, sAnimDict, GET_EXIT_ANIM_FOR_THIS_ACTIVITY(), SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT)
|
|
|
|
// Apply the exit anim to the player and all props he uses.
|
|
IF bEntityHasExitAnim
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(mTrigger, mSynchedScene, GET_EXIT_ANIM_FOR_THIS_ENTITY(), sAnimDict, SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT)
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(GET_SECONDARY_ENTITY(), mSynchedScene, GET_EXIT_ANIM_FOR_SECOND_ENTITY(), sAnimDict, SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT)
|
|
IF IS_NOT_1ST_PERSON_AND_DOES_CAM_EXIST(CamIndex)
|
|
IF NOT bIsFranklin
|
|
SET_CAM_ANIM_CURRENT_PHASE(CamIndex, 1.0)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(mSynchedScene)
|
|
SET_SYNCHRONIZED_SCENE_HOLD_LAST_FRAME(mSynchedScene, FALSE)
|
|
ENDIF
|
|
|
|
bBreakoutEarly = FALSE
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: TS_BREAKOUT_EARLY")
|
|
eTriggerState = TS_BREAKOUT_EARLY
|
|
|
|
BREAK
|
|
|
|
CASE TS_BREAKOUT_EARLY
|
|
|
|
DISABLE_SELECTOR_THIS_FRAME()
|
|
HIDE_HUD_AND_RADAR_THIS_FRAME()
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_NEXT_CAMERA)
|
|
CHECK_FOR_BREAKOUT()
|
|
|
|
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(mSynchedScene)
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: TS_RESET due to scene ending")
|
|
eTriggerState = TS_RESET
|
|
ELSE
|
|
|
|
IF NOT bTakenHit
|
|
IF IS_NOT_1ST_PERSON_AND_DOES_CAM_EXIST(CamIndex)
|
|
Player_Takes_Weed_Hit(PLAYER_PED_ID(), CamIndex)
|
|
ELSE
|
|
Player_Takes_Weed_Hit(PLAYER_PED_ID(), NULL)
|
|
ENDIF
|
|
iTimesUsed++
|
|
bTakenHit = TRUE
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: TS_BREAKOUT_EARLY Player_Takes_Weed_Hit called ")
|
|
ENDIF
|
|
|
|
IF bBreakoutEarly
|
|
|
|
//CPRINTLN(DEBUG_AMBIENT, "[SA] Bong: Player wants to break out of the exit anim")
|
|
|
|
IF FIND_ANIM_EVENT_PHASE(sAnimDict, GET_EXIT_ANIM_FOR_THIS_ACTIVITY(), "WalkInterruptible", fReturnStartPhase, fReturnEndPhase)
|
|
IF (fScenePhase >= fReturnStartPhase) AND (fScenePhase <= fReturnEndPhase)
|
|
CPRINTLN(DEBUG_AMBIENT, "[SA] Bong: Found WalkInterruptible at ", fScenePhase)
|
|
CPRINTLN(DEBUG_AMBIENT, "[SA] Bong: TS_BREAKOUT_EARLY -> TS_RESET (EXIT BREAKOUT!)")
|
|
eTriggerState = TS_RESET
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF FIND_ANIM_EVENT_PHASE(sAnimDict, GET_EXIT_ANIM_FOR_THIS_ACTIVITY(), "ScriptEvent", fReturnStartPhase, fReturnEndPhase)
|
|
IF (fScenePhase >= fReturnStartPhase) AND (fScenePhase <= fReturnEndPhase)
|
|
CPRINTLN(DEBUG_AMBIENT, "[SA] Bong: Found ScriptEvent at ", fScenePhase)
|
|
CPRINTLN(DEBUG_AMBIENT, "[SA] Bong: TS_BREAKOUT_EARLY -> TS_RESET (EXIT BREAKOUT!)")
|
|
eTriggerState = TS_RESET
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Frankin has an exit cam
|
|
IF bIsFranklin
|
|
IF NOT bTriggeredExitCam
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: TRIGGERING EXIT CAM")
|
|
|
|
RENDER_SCRIPT_CAMS(FALSE, FALSE)
|
|
|
|
// Normal gameplay camera
|
|
IF IS_NOT_1ST_PERSON_AND_DOES_CAM_EXIST(CamIndex)
|
|
DESTROY_CAM(CamIndex)
|
|
SET_GAMEPLAY_CAM_RELATIVE_HEADING(GET_HEADING())
|
|
SET_GAMEPLAY_CAM_RELATIVE_PITCH(GET_PITCH())
|
|
|
|
SHAKE_GAMEPLAY_CAM("HAND_SHAKE", DEFAULT_CAM_SHAKE)
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE, SPC_LEAVE_CAMERA_CONTROL_ON)
|
|
ENDIF
|
|
bTriggeredExitCam = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE TS_RESET
|
|
|
|
// Clear tasks
|
|
CLEAR_PED_TASKS(PLAYER_PED_ID())
|
|
|
|
REACTIVATE_NAMED_WORLD_BRAINS_WAITING_TILL_OUT_OF_RANGE("chop")
|
|
|
|
// Normal gameplay camera
|
|
IF IS_NOT_1ST_PERSON_AND_DOES_CAM_EXIST(CamIndex)
|
|
STOP_RENDERING_SCRIPT_CAMS_USING_CATCH_UP()
|
|
ENDIF
|
|
|
|
IF IS_AUDIO_SCENE_ACTIVE("FRANKLIN_SAFEHOUSE_ACTIVITIES_SCENE")
|
|
STOP_AUDIO_SCENE("FRANKLIN_SAFEHOUSE_ACTIVITIES_SCENE")
|
|
ENDIF
|
|
|
|
IF IS_AUDIO_SCENE_ACTIVE("MICHAEL_SAFEHOUSE_ACTIVITIES_SCENE")
|
|
STOP_AUDIO_SCENE("MICHAEL_SAFEHOUSE_ACTIVITIES_SCENE")
|
|
ENDIF
|
|
|
|
// Increment tracking stat
|
|
IF STAT_GET_INT(NUM_SH_BONG_SMOKED, iUsageStat)
|
|
STAT_SET_INT(NUM_SH_BONG_SMOKED, iUsageStat+1)
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(mTrigger)
|
|
IF NOT IS_ENTITY_ATTACHED(mTrigger)
|
|
FREEZE_ENTITY_POSITION(mTrigger, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Reset Flags
|
|
bBongSmoke = FALSE
|
|
bLighterFlame = FALSE
|
|
bLighterSparks = FALSE
|
|
bBreakoutEarly = FALSE
|
|
bTriggeredExitCam = FALSE
|
|
bTakenHit = FALSE
|
|
bConvoKilled = FALSE
|
|
|
|
// Restore control
|
|
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
bSafehouseSetControlOff = FALSE
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE, DEFAULT, FALSE)
|
|
eTriggerState = TS_PLAYER_OUT_OF_RANGE
|
|
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
FUNC BOOL HAS_SOMEONE_KNOCKED_BONG_OVER()
|
|
|
|
VECTOR vBongRot = GET_ENTITY_ROTATION(GET_CLOSEST_OBJECT_OF_TYPE(vTriggerPos, 2.0, PROP_BONG_01, FALSE))
|
|
|
|
IF (vBongRot.x < 0.1) AND (vBongRot.x > -0.1)
|
|
AND (vBongRot.y < 0.1) AND( vBongRot.y > -0.1)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: SOMEONE KNOCKED THE BONG OVER")
|
|
RETURN TRUE
|
|
|
|
ENDFUNC
|
|
|
|
PROC MP_UPDATE_BONG_ACTIVITY()
|
|
|
|
VECTOR vTriggerSize = << 1.2, 1.2, 1.2 >>
|
|
FLOAT fScenePhase = 0.0
|
|
FLOAT fReturnStartPhase, fReturnEndPhase
|
|
|
|
SWITCH eMPTriggerState
|
|
|
|
CASE MP_TS_PLAYER_OUT_OF_RANGE
|
|
|
|
IF iPersonalAptActivity = ci_APT_ACT_BONG
|
|
iPersonalAptActivity = ci_APT_ACT_IDLE
|
|
ENDIF
|
|
|
|
IF IS_TRIGGER_AREA_OK(vTriggerPos, vTriggerSize)
|
|
AND MP_IS_APARTMENT_ACTIVITY_FREE_AND_PLAYER_IS_AVAILABLE(ci_APT_ACT_BONG )
|
|
AND NOT HAS_SOMEONE_KNOCKED_BONG_OVER()
|
|
AND GET_ENTITY_HEADING(PLAYER_PED_ID()) >= (fTriggerHead - TRIGGER_ANGLE)
|
|
AND GET_ENTITY_HEADING(PLAYER_PED_ID()) <= (fTriggerHead + TRIGGER_ANGLE)
|
|
AND GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) = GET_INTERIOR_FROM_ENTITY(mTrigger)
|
|
IF iContextIntention = NEW_CONTEXT_INTENTION
|
|
REGISTER_CONTEXT_INTENTION(iContextIntention, CP_MEDIUM_PRIORITY, "SA_BONG2")
|
|
ENDIF
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: MP_TS_WAIT_FOR_PLAYER")
|
|
eMPTriggerState = MP_TS_WAIT_FOR_PLAYER
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MP_TS_WAIT_FOR_PLAYER
|
|
IF CAN_PLAYER_START_CUTSCENE()
|
|
IF IS_TRIGGER_AREA_OK(vTriggerPos, vTriggerSize)
|
|
AND MP_IS_APARTMENT_ACTIVITY_FREE_AND_PLAYER_IS_AVAILABLE(ci_APT_ACT_BONG )
|
|
AND GET_ENTITY_HEADING(PLAYER_PED_ID()) >= (fTriggerHead - TRIGGER_ANGLE)
|
|
AND GET_ENTITY_HEADING(PLAYER_PED_ID()) <= (fTriggerHead + TRIGGER_ANGLE)
|
|
AND NOT IS_PLAYER_FREE_AIMING(PLAYER_ID())
|
|
AND NOT IS_PLAYER_TARGETTING_ANYTHING(PLAYER_ID())
|
|
AND NOT HAS_SOMEONE_KNOCKED_BONG_OVER()
|
|
|
|
IF HAS_CONTEXT_BUTTON_TRIGGERED(iContextIntention)
|
|
|
|
iPersonalAptActivity = ci_APT_ACT_BONG
|
|
|
|
IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("SA_BONG2")
|
|
CLEAR_HELP(TRUE)
|
|
ENDIF
|
|
|
|
RELEASE_CONTEXT_INTENTION(iContextIntention)
|
|
DISABLE_INTERACTION_MENU()
|
|
|
|
CLEAR_AREA_OF_PROJECTILES(vTriggerPos, 3.0)
|
|
NET_SET_PLAYER_CONTROL(PLAYER_ID(), FALSE, NSPC_LEAVE_CAMERA_CONTROL_ON)
|
|
bSafehouseSetControlOff = TRUE
|
|
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
|
|
|
|
IF DOES_ENTITY_EXIST(mTrigger)
|
|
IF NOT IS_ENTITY_ATTACHED(mTrigger)
|
|
FREEZE_ENTITY_POSITION(mTrigger, FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(mLighter)
|
|
IF NOT IS_ENTITY_ATTACHED(mLighter)
|
|
FREEZE_ENTITY_POSITION(mLighter, FALSE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
TASK_GO_STRAIGHT_TO_COORD(PLAYER_PED_ID(), vTriggerPos, PEDMOVEBLENDRATIO_WALK, 5000, fTriggerHead, DEFAULT_NAVMESH_RADIUS)
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE, DEFAULT, FALSE)
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: MP_TS_TRIGGER_SMOKE_ANIM")
|
|
eMPTriggerState = MP_TS_TRIGGER_SMOKE_ANIM
|
|
ENDIF
|
|
|
|
ELSE
|
|
RELEASE_CONTEXT_INTENTION(iContextIntention)
|
|
IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("SA_BONG2")
|
|
CLEAR_HELP(TRUE)
|
|
ENDIF
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: MP_TS_PLAYER_OUT_OF_RANGE")
|
|
eMPTriggerState = MP_TS_PLAYER_OUT_OF_RANGE
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MP_TS_TRIGGER_SMOKE_ANIM
|
|
|
|
DISABLE_SELECTOR_THIS_FRAME()
|
|
HIDE_HUD_AND_RADAR_THIS_FRAME()
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_NEXT_CAMERA)
|
|
DISABLE_ALL_MP_HUD_THIS_FRAME()
|
|
|
|
IF GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_GO_STRAIGHT_TO_COORD) = FINISHED_TASK
|
|
|
|
REMOVE_PLAYER_MASK()
|
|
|
|
mSynchedScene = CREATE_SYNCHRONIZED_SCENE(vScenePos, vSceneHead)
|
|
|
|
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), mSynchedScene, sAnimDict, sPedSmokeAnim, SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS|SYNCED_SCENE_DONT_INTERRUPT)
|
|
IF NOT PLAY_SYNCHRONIZED_ENTITY_ANIM(mTrigger, mSynchedScene, sBongSmokeAnim, sAnimDict, SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT)
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: CANNOT PLAY BONG ANIM.")
|
|
ENDIF
|
|
IF NOT PLAY_SYNCHRONIZED_ENTITY_ANIM(mLighter, mSynchedScene, sLighterSmokeAnim, sAnimDict, SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT)
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: CANNOT PLAY LIGHTER ANIM.")
|
|
ENDIF
|
|
|
|
// Initialise camera
|
|
// CamIndex = CREATE_CAMERA()
|
|
//
|
|
// IF DOES_CAM_EXIST(CamIndex)
|
|
// SET_CAM_ACTIVE(CamIndex, TRUE)
|
|
// RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
|
// SET_CAM_PARAMS(CamIndex, vCamPos, vCamHead, 35.0)
|
|
// SHAKE_CAM(CamIndex, "HAND_SHAKE", DEFAULT_CAM_SHAKE)
|
|
// ENDIF
|
|
//
|
|
// CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: USING ANIMATED CAMERA!")
|
|
// CamIndex = CREATE_CAM("DEFAULT_ANIMATED_CAMERA", TRUE)
|
|
//
|
|
// PLAY_SYNCHRONIZED_CAM_ANIM(CamIndex, mSynchedScene, GET_CAMERA_FOR_THIS_ACTIVITY(), sAnimDict)
|
|
// SHAKE_CAM(CamIndex, "HAND_SHAKE", DEFAULT_CAM_SHAKE)
|
|
// RENDER_SCRIPT_CAMS(TRUE, FALSE)
|
|
//
|
|
// PLAY_SYNCHRONIZED_CAM_ANIM(CamIndex, mSynchedScene, "bong_cam", sAnimDict)
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: MP_TS_CHECK_SMOKE_ANIM")
|
|
eMPTriggerState = MP_TS_CHECK_SMOKE_ANIM
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE MP_TS_CHECK_SMOKE_ANIM
|
|
|
|
DISABLE_SELECTOR_THIS_FRAME()
|
|
HIDE_HUD_AND_RADAR_THIS_FRAME()
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_NEXT_CAMERA)
|
|
DISABLE_ALL_MP_HUD_THIS_FRAME()
|
|
|
|
IF IS_SYNCHRONIZED_SCENE_RUNNING(mSynchedScene)
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: MP_TS_RUN_SMOKE_ANIM")
|
|
eMPTriggerState = MP_TS_RUN_SMOKE_ANIM
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE MP_TS_RUN_SMOKE_ANIM
|
|
|
|
DISABLE_SELECTOR_THIS_FRAME()
|
|
HIDE_HUD_AND_RADAR_THIS_FRAME()
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_NEXT_CAMERA)
|
|
DISABLE_ALL_MP_HUD_THIS_FRAME()
|
|
|
|
//CHECK_FOR_BREAKOUT()
|
|
|
|
// Monitor for particle effects/early breakout
|
|
//IF IS_SYNCHRONIZED_SCENE_RUNNING(mSynchedScene)
|
|
IF GET_SYNCHRONIZED_SCENE_PHASE(mSynchedScene) < 0.95
|
|
|
|
fScenePhase = GET_SYNCHRONIZED_SCENE_PHASE(mSynchedScene)
|
|
|
|
IF bSetupPTFX
|
|
// Lighter flame
|
|
IF bLighterFlame = FALSE
|
|
IF fScenePhase > GET_PHASE_TIME_FOR_LIGHTER_FLAME()
|
|
ptfxLighter = START_PARTICLE_FX_LOOPED_ON_ENTITY("scr_sh_lighter_flame", mLighter, GET_LIGHTER_FLAME_POS(), <<0.0,0.0,0.0>>)
|
|
bLighterFlame = TRUE
|
|
ENDIF
|
|
ELSE
|
|
IF DOES_PARTICLE_FX_LOOPED_EXIST(ptfxLighter)
|
|
IF fScenePhase > GET_PHASE_TIME_FOR_LIGHTER_FLAME(FALSE)
|
|
STOP_PARTICLE_FX_LOOPED(ptfxLighter)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Lighter sparks
|
|
IF bLighterSparks = FALSE
|
|
IF fScenePhase > GET_PHASE_TIME_FOR_LIGHTER_SPARKS()
|
|
STOP_CURRENT_PLAYING_AMBIENT_SPEECH(PLAYER_PED_ID())
|
|
START_PARTICLE_FX_NON_LOOPED_ON_ENTITY("scr_sh_lighter_sparks", mLighter, << 0.0, 0.0, 0.06 >>, << 0.0, 0.0, 0.0 >>)
|
|
bLighterSparks = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Bong smoke fx
|
|
IF bBongSmoke = FALSE
|
|
IF fScenePhase > GET_PHASE_TIME_FOR_BONG_SMOKE()
|
|
START_PARTICLE_FX_NON_LOOPED_ON_PED_BONE("scr_sh_bong_smoke", PLAYER_PED_ID(), << -0.025, 0.13, 0.0 >>, <<0,0,0>>, BONETAG_HEAD)
|
|
bBongSmoke = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF fScenePhase > STONED_PHASE
|
|
IF NOT bTakenHit
|
|
Player_Takes_Weed_Hit(PLAYER_PED_ID())
|
|
//iTimesUsed++
|
|
bTakenHit = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// IF NOT bTriggeredCam2
|
|
// IF fScenePhase > fCam2PhaseTime
|
|
//
|
|
// CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: TRIGGERING CAM 2")
|
|
//
|
|
// IF DOES_CAM_EXIST(CamIndex)
|
|
// SET_CAM_PARAMS(CamIndex, vCam2Pos, vCam2Head, 40.0)
|
|
// SHAKE_CAM(CamIndex, "HAND_SHAKE", DEFAULT_CAM_SHAKE)
|
|
// ENDIF
|
|
//
|
|
// bTriggeredCam2 = TRUE
|
|
//
|
|
// ENDIF
|
|
// ENDIF
|
|
|
|
// IF NOT bTriggeredExitCam
|
|
// IF fScenePhase > fExitCamPhaseTime
|
|
//
|
|
// RENDER_SCRIPT_CAMS(FALSE, FALSE)
|
|
//
|
|
// // Normal gameplay camera
|
|
// IF DOES_CAM_EXIST(CamIndex)
|
|
// DESTROY_CAM(CamIndex)
|
|
// ENDIF
|
|
//
|
|
// SET_GAMEPLAY_CAM_RELATIVE_HEADING(GET_HEADING())
|
|
// SET_GAMEPLAY_CAM_RELATIVE_PITCH(GET_PITCH())
|
|
//
|
|
// SHAKE_GAMEPLAY_CAM("HAND_SHAKE", DEFAULT_CAM_SHAKE)
|
|
// SET_PLAYER_CONTROL(PLAYER_ID(), FALSE, SPC_LEAVE_CAMERA_CONTROL_ON)
|
|
//
|
|
// bTriggeredExitCam = TRUE
|
|
//
|
|
// ENDIF
|
|
// ENDIF
|
|
|
|
// Synchronised scene has finished
|
|
ELSE
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: MP_TS_RESET")
|
|
iPersonalAptActivityState = ci_APT_ACT_STATE_FINISHING
|
|
eMPTriggerState = MP_TS_RESET
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MP_TS_TRIGGER_EXIT_ANIM
|
|
|
|
DISABLE_SELECTOR_THIS_FRAME()
|
|
HIDE_HUD_AND_RADAR_THIS_FRAME()
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_NEXT_CAMERA)
|
|
DISABLE_ALL_MP_HUD_THIS_FRAME()
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: APPLY BREAKOUT ANIMATION")
|
|
|
|
mSynchedScene = CREATE_SYNCHRONIZED_SCENE(vScenePos, vSceneHead)
|
|
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), mSynchedScene, sAnimDict, sBongExitAnim, SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT, SYNCED_SCENE_USE_PHYSICS|SYNCED_SCENE_DONT_INTERRUPT|SYNCED_SCENE_EXPAND_PED_CAPSULE_FROM_SKELETON)
|
|
|
|
// Apply the exit anim to the player and all props he uses.
|
|
IF bEntityHasExitAnim
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(mTrigger, mSynchedScene, sBongExitAnim, sAnimDict, SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT)
|
|
PLAY_SYNCHRONIZED_ENTITY_ANIM(mLighter, mSynchedScene, sLighterExitAnim, sAnimDict, SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT)
|
|
IF NOT bIsFranklin
|
|
//SET_CAM_ANIM_CURRENT_PHASE(CamIndex, 1.0)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
bBreakoutEarly = FALSE
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: MP_TS_BREAKOUT_EARLY")
|
|
eMPTriggerState = MP_TS_BREAKOUT_EARLY
|
|
|
|
BREAK
|
|
|
|
CASE MP_TS_BREAKOUT_EARLY
|
|
|
|
DISABLE_SELECTOR_THIS_FRAME()
|
|
HIDE_HUD_AND_RADAR_THIS_FRAME()
|
|
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_NEXT_CAMERA)
|
|
DISABLE_ALL_MP_HUD_THIS_FRAME()
|
|
CHECK_FOR_BREAKOUT()
|
|
|
|
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(mSynchedScene)
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: MP_TS_RESET")
|
|
eMPTriggerState = MP_TS_RESET
|
|
ELSE
|
|
|
|
IF NOT bTakenHit
|
|
IF IS_NOT_1ST_PERSON_AND_DOES_CAM_EXIST(CamIndex)
|
|
Player_Takes_Weed_Hit(PLAYER_PED_ID(), CamIndex)
|
|
ELSE
|
|
Player_Takes_Weed_Hit(PLAYER_PED_ID(), NULL)
|
|
ENDIF
|
|
//iTimesUsed++
|
|
bTakenHit = TRUE
|
|
ENDIF
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: Looking for WalkInteruptable")
|
|
IF FIND_ANIM_EVENT_PHASE(sAnimDict, sPedExitAnim, "WalkInterruptible", fReturnStartPhase, fReturnEndPhase)
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: Found WalkInterruptible")
|
|
IF (fScenePhase >= fReturnStartPhase) AND (fScenePhase <= fReturnEndPhase)
|
|
// Clear tasks
|
|
CLEAR_PED_TASKS(PLAYER_PED_ID())
|
|
CPRINTLN(DEBUG_AMBIENT, "[SA] Bong: MP_TS_RESET (EXIT BREAKOUT!)")
|
|
eMPTriggerState = MP_TS_RESET
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Frankin has an exit cam
|
|
// IF NOT bTriggeredExitCam
|
|
// CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: TRIGGERING EXIT CAM")
|
|
//
|
|
// RENDER_SCRIPT_CAMS(FALSE, FALSE)
|
|
//
|
|
// // Normal gameplay camera
|
|
// IF DOES_CAM_EXIST(CamIndex)
|
|
// DESTROY_CAM(CamIndex)
|
|
// ENDIF
|
|
//
|
|
// SET_GAMEPLAY_CAM_RELATIVE_HEADING(GET_HEADING())
|
|
// SET_GAMEPLAY_CAM_RELATIVE_PITCH(GET_PITCH())
|
|
// SHAKE_GAMEPLAY_CAM("HAND_SHAKE", DEFAULT_CAM_SHAKE)
|
|
//
|
|
// SET_PLAYER_CONTROL(PLAYER_ID(), FALSE, SPC_LEAVE_CAMERA_CONTROL_ON)
|
|
//
|
|
// bTriggeredExitCam = TRUE
|
|
// ENDIF
|
|
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE MP_TS_RESET
|
|
|
|
// // Normal gameplay camera
|
|
// IF DOES_CAM_EXIST(CamIndex)
|
|
// STOP_RENDERING_SCRIPT_CAMS_USING_CATCH_UP()
|
|
// ENDIF
|
|
|
|
RESTORE_PLAYER_MASK()
|
|
|
|
// Clear tasks
|
|
CLEAR_PED_TASKS(PLAYER_PED_ID())
|
|
|
|
INCREMENT_MP_APT_SMOKE_COUNTER()
|
|
|
|
IF IS_AUDIO_SCENE_ACTIVE("FRANKLIN_SAFEHOUSE_ACTIVITIES_SCENE")
|
|
STOP_AUDIO_SCENE("FRANKLIN_SAFEHOUSE_ACTIVITIES_SCENE")
|
|
ENDIF
|
|
|
|
IF IS_AUDIO_SCENE_ACTIVE("MICHAEL_SAFEHOUSE_ACTIVITIES_SCENE")
|
|
STOP_AUDIO_SCENE("MICHAEL_SAFEHOUSE_ACTIVITIES_SCENE")
|
|
ENDIF
|
|
|
|
// // Increment tracking stat
|
|
// IF STAT_GET_INT(NUM_SH_BONG_SMOKED, iUsageStat)
|
|
// STAT_SET_INT(NUM_SH_BONG_SMOKED, iUsageStat+1)
|
|
// ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(mTrigger)
|
|
IF NOT IS_ENTITY_ATTACHED(mTrigger)
|
|
FREEZE_ENTITY_POSITION(mTrigger, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
// Reset Flags
|
|
bBongSmoke = FALSE
|
|
bLighterFlame = FALSE
|
|
bLighterSparks = FALSE
|
|
bBreakoutEarly = FALSE
|
|
bTriggeredExitCam = FALSE
|
|
bTakenHit = FALSE
|
|
|
|
ENABLE_INTERACTION_MENU()
|
|
|
|
// Restore control // cntrl vsble clrtk colsn fze ps taget invinc damage allow cam
|
|
NET_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
|
|
bSafehouseSetControlOff = FALSE
|
|
|
|
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE, DEFAULT, FALSE)
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: MP_TS_PLAYER_OUT_OF_RANGE")
|
|
eMPTriggerState = MP_TS_PLAYER_OUT_OF_RANGE
|
|
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
// ===========================================================================================================
|
|
// Script Loop
|
|
// ===========================================================================================================
|
|
SCRIPT(OBJECT_INDEX mObjectIn)
|
|
|
|
IF NETWORK_IS_GAME_IN_PROGRESS()
|
|
|
|
// Default cleanup
|
|
IF HAS_FORCE_CLEANUP_OCCURRED(FORCE_CLEANUP_FLAG_DEBUG_MENU)
|
|
OR Is_Player_On_Or_Triggering_Any_Mission()
|
|
OR MPGlobalsAmbience.bRunningFmIntroCut
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: Default Cleanup")
|
|
CLEANUP_BONG_ACTIVITY()
|
|
ENDIF
|
|
|
|
NETWORK_SET_THIS_SCRIPT_IS_NETWORK_SCRIPT(NUM_NETWORK_PLAYERS, FALSE)
|
|
|
|
// This makes sure the net script is active, waits until it is.
|
|
HANDLE_NET_SCRIPT_INITIALISATION()
|
|
SET_THIS_SCRIPT_CAN_BE_PAUSED(FALSE)
|
|
|
|
IF DOES_ENTITY_EXIST(mObjectIn)
|
|
|
|
mTrigger = mObjectIn
|
|
mTriggerModel = GET_ENTITY_MODEL(mTrigger)
|
|
|
|
// IF NOT NETWORK_GET_ENTITY_IS_NETWORKED(mTrigger)
|
|
// NETWORK_REGISTER_ENTITY_AS_NETWORKED(mTrigger)
|
|
// ENDIF
|
|
|
|
iCurProperty = GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty
|
|
|
|
INT iCurProp = GET_PROPERTY_SIZE_TYPE(iCurProperty)
|
|
|
|
SWITCH iCurProp
|
|
CASE PROP_SIZE_TYPE_SMALL_APT
|
|
bInLowApt = TRUE
|
|
BREAK
|
|
DEFAULT
|
|
bInLowApt = FALSE
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] MP Bong: Current property is ", iCurProperty)
|
|
|
|
sAnimDict = "mp_safehousebong@"
|
|
|
|
GET_HOUSE_INTERIOR_DETAILS(tempPropertyStruct, iCurProperty)
|
|
|
|
vTriggerPos = tempPropertyStruct.house.activity[SAFEACT_BONG].vTriggerVec
|
|
fTriggerHead = tempPropertyStruct.house.activity[SAFEACT_BONG].fTriggerRot
|
|
vScenePos = tempPropertyStruct.house.activity[SAFEACT_BONG].vSceneVec
|
|
vSceneHead = tempPropertyStruct.house.activity[SAFEACT_BONG].vSceneRot
|
|
// vCamPos = tempPropertyStruct.house.activity[SAFEACT_BONG].vCamVec
|
|
// vCamHead = tempPropertyStruct.house.activity[SAFEACT_BONG].vCamRot
|
|
// vCam2Pos = tempPropertyStruct.house.activity[SAFEACT_BONG].vCam2Vec
|
|
// vCam2Head = tempPropertyStruct.house.activity[SAFEACT_BONG].vCam2Rot
|
|
// vExitCamPos = tempPropertyStruct.house.activity[SAFEACT_BONG].vExitCamVec
|
|
// vExitCamHead = tempPropertyStruct.house.activity[SAFEACT_BONG].vExitCamRot
|
|
bIsFranklin = tempPropertyStruct.house.activity[SAFEACT_BONG].bFranklinBong
|
|
|
|
IF fTriggerHead < 0.0
|
|
fTriggerHead+= 360.0
|
|
ENDIF
|
|
|
|
IF CAN_REGISTER_MISSION_OBJECTS(2)
|
|
// Get a handle to the lighter
|
|
mLighter = GET_CLOSEST_OBJECT_OF_TYPE(vTriggerPos, 2.0, P_CS_LIGHTER_01, FALSE)
|
|
// IF DOES_ENTITY_EXIST(mLighter)
|
|
// IF NOT NETWORK_GET_ENTITY_IS_NETWORKED(mLighter)
|
|
// NETWORK_REGISTER_ENTITY_AS_NETWORKED(mLighter)
|
|
// CPRINTLN(DEBUG_AMBIENT, "[Safehouse] MP Bong: Registering Lighter as Network object.")
|
|
// ENDIF
|
|
// ENDIF
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(mTrigger)
|
|
IF NOT IS_ENTITY_ATTACHED(mTrigger)
|
|
FREEZE_ENTITY_POSITION(mTrigger, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(mLighter)
|
|
IF NOT IS_ENTITY_ATTACHED(mLighter)
|
|
FREEZE_ENTITY_POSITION(mLighter, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ELSE
|
|
|
|
// Default cleanup
|
|
IF HAS_FORCE_CLEANUP_OCCURRED(DEFAULT_FORCE_CLEANUP_FLAGS|FORCE_CLEANUP_FLAG_DEBUG_MENU|FORCE_CLEANUP_FLAG_SP_TO_MP|FORCE_CLEANUP_FLAG_DIRECTOR)
|
|
OR IS_PED_INJURED(PLAYER_PED_ID()) //#1686982
|
|
OR IS_PED_WEARING_A_MASK(PLAYER_PED_ID())
|
|
OR IS_PED_WEARING_HELMET(PLAYER_PED_ID())
|
|
OR IS_CURRENTLY_ON_MISSION_TO_TYPE(MISSION_TYPE_MINIGAME)
|
|
OR (IS_MISSION_LEADIN_WITH_HIGH_MEMORY_ACTIVE() AND NOT IS_HIGH_MEMORY_PC())
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: Default Cleanup")
|
|
CLEANUP_BONG_ACTIVITY()
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(mObjectIn)
|
|
mTrigger = mObjectIn
|
|
mTriggerModel = GET_ENTITY_MODEL(mTrigger)
|
|
|
|
IF CAN_PLAYER_USE_THIS_OBJECT()
|
|
|
|
sAnimDict = GET_ANIM_DICT_FOR_THIS_ACTIVITY()
|
|
|
|
IF bIsFranklin
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: Franklins bong anims loaded")
|
|
ELSE
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: Michaels bong anims loaded")
|
|
ENDIF
|
|
|
|
IF DOES_ENTITY_EXIST(mTrigger)
|
|
IF NOT IS_ENTITY_ATTACHED(mTrigger)
|
|
FREEZE_ENTITY_POSITION(mTrigger, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "[Safehouse] Bong: Ready for launch...")
|
|
|
|
// Mission Loop -------------------------------------------//
|
|
WHILE TRUE
|
|
|
|
WAIT(0)
|
|
|
|
IF DOES_ENTITY_EXIST(mTrigger)
|
|
AND IS_OBJECT_WITHIN_BRAIN_ACTIVATION_RANGE(mTrigger)
|
|
AND NOT IS_ENTITY_DEAD(mTrigger)
|
|
AND NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
AND CAN_PLAYER_USE_THIS_OBJECT()
|
|
AND IS_INTERIOR_CORRECT(mTrigger)
|
|
AND NOT IS_PLAYER_SWITCH_IN_PROGRESS()
|
|
AND NOT IS_ENTITY_ON_FIRE(PLAYER_PED_ID())
|
|
|
|
SWITCH eState
|
|
|
|
CASE AS_LOAD_ASSETS
|
|
IF HAVE_ASSETS_LOADED()
|
|
eState = AS_RUN_ACTIVITY
|
|
ELSE
|
|
IF g_bInMultiplayer AND SHOULD_THIS_MULTIPLAYER_THREAD_TERMINATE()
|
|
CLEANUP_BONG_ACTIVITY()
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE AS_RUN_ACTIVITY
|
|
//IF g_OldSafehouseActivites = TRUE
|
|
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
|
|
IF g_bInMultiplayer
|
|
IF NOT SHOULD_THIS_MULTIPLAYER_THREAD_TERMINATE()
|
|
IF NOT IS_LOW_APT_SOFA_IN_USE()
|
|
MP_UPDATE_BONG_ACTIVITY()
|
|
APPLY_USAGE_EFFECTS()
|
|
ENDIF
|
|
ELSE
|
|
CLEANUP_BONG_ACTIVITY()
|
|
ENDIF
|
|
ELSE
|
|
UPDATE_BONG_ACTIVITY()
|
|
APPLY_USAGE_EFFECTS()
|
|
ENDIF
|
|
ENDIF
|
|
//ENDIF
|
|
BREAK
|
|
|
|
CASE AS_END
|
|
BREAK
|
|
ENDSWITCH
|
|
ELSE
|
|
CLEANUP_BONG_ACTIVITY()
|
|
ENDIF
|
|
ENDWHILE
|
|
ENDSCRIPT
|