656 lines
21 KiB
Python
Executable File
656 lines
21 KiB
Python
Executable File
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
//
|
|
// SCRIPT NAME : Ambient_Solomon.sc
|
|
// AUTHOR : Aaron Gandaa
|
|
// DESCRIPTION : Handles Gates For Before Solomon 1
|
|
//
|
|
// *****************************************************************************************
|
|
// *****************************************************************************************
|
|
|
|
//Compile out Title Update changes to header functions.
|
|
//Must be before includes.
|
|
//CONST_INT USE_TU_CHANGES 0 // Removed by Kenneth R.
|
|
|
|
//----------------------
|
|
// INCLUDES
|
|
//----------------------
|
|
USING "rgeneral_include.sch"
|
|
USING "RC_Helper_Functions.sch"
|
|
USING "area_checks.sch"
|
|
USING "script_launch_control.sch"
|
|
|
|
//----------------------
|
|
// STRUCT
|
|
//----------------------
|
|
STRUCT INVISIBLE_BIKE
|
|
PED_INDEX mPed
|
|
VEHICLE_INDEX mBike
|
|
ENDSTRUCT
|
|
|
|
//----------------------
|
|
// VARAIBLES
|
|
//----------------------
|
|
structPedsForConversation convoMichael
|
|
INT iNorthGateState = 0
|
|
INT iSouthGateState = 0
|
|
FLOAT fStopRange = 3.0
|
|
INT iStopTime = 2
|
|
|
|
INVISIBLE_BIKE bikeNorth
|
|
INVISIBLE_BIKE bikeSouth
|
|
BOOL bDebugNoCleanup = FALSE
|
|
|
|
//VECTOR vNorthSecPed = <<-1052.0691, -475.6283, 35.6888>>
|
|
//VECTOR vSouthSecPed = <<-1209.1813, -579.4733, 26.3182>>
|
|
PED_INDEX mNorthSecPed
|
|
PED_INDEX mSouthSecPed
|
|
VECTOR vPlyrFwd
|
|
MODEL_NAMES pedSecModel = S_M_M_SECURITY_01
|
|
|
|
//----------------------
|
|
// DEBUG VARIABLES
|
|
//----------------------
|
|
#IF IS_DEBUG_BUILD
|
|
WIDGET_GROUP_ID m_WidgetGroup
|
|
BOOL bQuitScript = FALSE
|
|
BOOL bUpdateWidgets = FALSE
|
|
BOOL bFlowFlagState
|
|
BOOL bShowDebug = FALSE
|
|
BOOL bStopVehicle = FALSE
|
|
BOOL bTestDialog = FALSE
|
|
VECTOR vGateFwd = <<-0.37, -0.927, -0.053>>
|
|
FLOAT fAngle = 0.0
|
|
FLOAT fDistToCenter
|
|
#ENDIF
|
|
|
|
//----------------------
|
|
// FUNCTION
|
|
//----------------------
|
|
|
|
PROC SET_STUDIO_GATE_DOOR_STATE(DOOR_NAME_ENUM door, DOOR_STATE_ENUM state)
|
|
SET_DOOR_STATE(door, state)
|
|
SET_BIT(g_iOverrideDoorStateBitset[ENUM_TO_INT(door)/32], ENUM_TO_INT(door)%32)
|
|
g_eOverrideDoorState[door] = state
|
|
g_savedGlobals.sBuildingData.eDoorState[door] = state
|
|
CPRINTLN(DEBUG_AMBIENT, "[AMB_SOL]: DOOR:", ENUM_TO_INT(door), " State:", ENUM_TO_INT(state))
|
|
ENDPROC
|
|
|
|
PROC LOCK_STUDIO_GATES(DOOR_STATE_ENUM state = DOORSTATE_LOCKED)
|
|
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MOVIE_STUDIO_OPEN, FALSE)
|
|
|
|
SET_ROADS_IN_ANGLED_AREA(<<-1039.504272,-477.787598,35.329666>>, <<-1062.444458,-469.568481,40.620861>>, 13.000000, FALSE, FALSE)
|
|
SET_STUDIO_GATE_DOOR_STATE(DOORNAME_STUDIO_NORTH_GATE_IN, state)
|
|
SET_STUDIO_GATE_DOOR_STATE(DOORNAME_STUDIO_NORTH_GATE_OUT, state)
|
|
|
|
SET_ROADS_IN_ANGLED_AREA(<<-1039.504272,-477.787598,35.329666>>, <<-1062.444458,-469.568481,40.620861>>, 13.000000, FALSE, FALSE)
|
|
SET_STUDIO_GATE_DOOR_STATE(DOORNAME_STUDIO_SOUTH_GATE_IN, state)
|
|
SET_STUDIO_GATE_DOOR_STATE(DOORNAME_STUDIO_SOUTH_GATE_OUT, state)
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "[AMB_SOL]: GATES LOCKED")
|
|
ENDPROC
|
|
|
|
PROC UNLOCK_STUDIO_GATES(DOOR_STATE_ENUM state = DOORSTATE_UNLOCKED)
|
|
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MOVIE_STUDIO_OPEN, TRUE)
|
|
|
|
SET_ROADS_BACK_TO_ORIGINAL_IN_ANGLED_AREA(<<-1039.504272,-477.787598,35.329666>>, <<-1062.444458,-469.568481,40.620861>>, 13.000000)
|
|
SET_STUDIO_GATE_DOOR_STATE(DOORNAME_STUDIO_NORTH_GATE_IN, state)
|
|
SET_STUDIO_GATE_DOOR_STATE(DOORNAME_STUDIO_NORTH_GATE_OUT, state)
|
|
|
|
SET_ROADS_BACK_TO_ORIGINAL_IN_ANGLED_AREA(<<-1039.504272,-477.787598,35.329666>>, <<-1062.444458,-469.568481,40.620861>>, 13.000000)
|
|
SET_STUDIO_GATE_DOOR_STATE(DOORNAME_STUDIO_SOUTH_GATE_IN, state)
|
|
SET_STUDIO_GATE_DOOR_STATE(DOORNAME_STUDIO_SOUTH_GATE_OUT, state)
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "[AMB_SOL]: GATES UNLOCKED")
|
|
ENDPROC
|
|
|
|
//----------------------
|
|
// DEBUG FUNCTIONS
|
|
//----------------------
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
/// PURPOSE:
|
|
/// Setups Debug Widgets
|
|
PROC SETUP_DEBUG_WIDGETS()
|
|
m_WidgetGroup = START_WIDGET_GROUP("Ambient Solomon")
|
|
ADD_WIDGET_BOOL("Quit Script", bQuitScript)
|
|
ADD_WIDGET_BOOL("Update Widgets", bUpdateWidgets)
|
|
ADD_WIDGET_BOOL("Draw Debug", bShowDebug)
|
|
ADD_WIDGET_BOOL("Is Flag Set", bFlowFlagState)
|
|
ADD_WIDGET_BOOL("bTestDialog", bTestDialog)
|
|
ADD_WIDGET_BOOL("Stop Vehicle", bStopVehicle)
|
|
ADD_WIDGET_FLOAT_SLIDER("Stop Distance", fStopRange, 0.0, 6.0, 0.05)
|
|
ADD_WIDGET_INT_SLIDER("Stop Time", iStopTime, 0, 10, 1)
|
|
ADD_WIDGET_INT_SLIDER("North Gate State", iNorthGateState, 0, 10, 1)
|
|
ADD_WIDGET_INT_SLIDER("South Gate State", iSouthGateState, 0, 10, 1)
|
|
|
|
ADD_WIDGET_VECTOR_SLIDER("vAmbSolLaunchCenter", vAmbSolLaunchCenter, -8000.0, 8000.0, 0.05)
|
|
ADD_WIDGET_FLOAT_SLIDER("fAmbSolLaunchRadius", fAmbSolLaunchRadius, 0, 1000, 5)
|
|
|
|
ADD_WIDGET_READ_ONLY_VECTOR("Player Forward", vPlyrFwd)
|
|
ADD_WIDGET_FLOAT_READ_ONLY("Angle To Gate", fAngle)
|
|
ADD_WIDGET_FLOAT_READ_ONLY("Dist To Studio", fDistToCenter)
|
|
STOP_WIDGET_GROUP()
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Removes Debug Widgets
|
|
PROC CLEANUP_DEBUG_WIDGETS()
|
|
IF DOES_WIDGET_GROUP_EXIST(m_WidgetGroup)
|
|
DELETE_WIDGET_GROUP(m_WidgetGroup)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
/// Updates Debug Widgets
|
|
PROC UPDATE_DEBUG_WIDGETS()
|
|
IF NOT bUpdateWidgets
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF (bShowDebug)
|
|
DRAW_DEBUG_AREA(<<-1055.046143,-469.334717,35.433327>>, <<-1057.439819,-474.977234,39.818699>>, 12.500000) // NORTH GATE - STOP CHECK - NO HEADING
|
|
DRAW_DEBUG_AREA(<<-1049.317505,-473.747192,34.941956>>, <<-1059.483398,-468.760773,39.944832>>, 4.500000) // NORTH GATE - STOP CHECK - HEADING
|
|
|
|
DRAW_DEBUG_AREA(<<-1210.236450,-579.875000,26.332148>>, <<-1204.725342,-586.357300,29.567726>>, 6.000000) // SOUTH GATE - STOP CHECK - NO HEADING
|
|
DRAW_DEBUG_AREA(<<-1211.773926,-580.929932,26.330950>>, <<-1208.127197,-585.361694,29.660564>>, 4.500000) // SOUTH GATE - STOP CHECK - HEADING
|
|
|
|
DRAW_DEBUG_SPHERE(vAmbSolLaunchCenter, fAmbSolLaunchRadius, 0, 0, 255, 64)
|
|
DRAW_DEBUG_CIRCLE(vAmbSolLaunchCenter, fAmbSolLaunchRadius + 30.0, 0, 0, 255, 64)
|
|
|
|
IF IS_PLAYER_PLAYING(PLAYER_ID())
|
|
DRAW_DEBUG_LINE(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(PLAYER_PED_ID()) + (vPlyrFwd * 4.0))
|
|
|
|
ENDIF
|
|
|
|
IF IS_ENTITY_OK(bikeNorth.mBike)
|
|
DRAW_DEBUG_LINE(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(bikeNorth.mBike))
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF (bStopVehicle)
|
|
IF BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(GET_VEHICLE_PED_IS_USING(PLAYER_PED_ID()), fStopRange, 2)
|
|
bStopVehicle = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF (bTestDialog)
|
|
ADD_PED_FOR_DIALOGUE(convoMichael, ENUM_TO_INT(CHAR_MICHAEL), PLAYER_PED_ID(), "MICHAEL")
|
|
IF CREATE_CONVERSATION(convoMichael, "AMSOLAU", "AMSOL_HERE", CONV_PRIORITY_HIGH, DISPLAY_SUBTITLES)
|
|
bTestDialog = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
bFlowFlagState = GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MOVIE_STUDIO_OPEN)
|
|
fDistToCenter = GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(PLAYER_PED_ID(), vAmbSolLaunchCenter)
|
|
fAngle = ACOS(DOT_PRODUCT_XY(vPlyrFwd, vGateFwd))
|
|
ENDPROC
|
|
|
|
#ENDIF
|
|
|
|
//----------------------
|
|
// FUNCTIONS
|
|
//----------------------
|
|
PROC CREATE_INVISIBLE_BIKE(INVISIBLE_BIKE &bike, VECTOR pos, FLOAT head)
|
|
bike.mBike = CREATE_VEHICLE(AKUMA, pos, head)
|
|
IF IS_ENTITY_OK(bike.mBike)
|
|
FREEZE_ENTITY_POSITION(bike.mBike, TRUE)
|
|
SET_ENTITY_COLLISION(bike.mBike, FALSE)
|
|
SET_ENTITY_VISIBLE(bike.mBike, FALSE)
|
|
SET_VEHICLE_ENGINE_ON(bike.mBike, FALSE, TRUE)
|
|
bike.mPed = CREATE_PED_INSIDE_VEHICLE(bike.mBike, PEDTYPE_MISSION, GET_ENTITY_MODEL(PLAYER_PED_ID()))
|
|
IF IS_ENTITY_OK(bike.mPed)
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(bike.mPed, TRUE)
|
|
SET_ENTITY_VISIBLE(bike.mPed, FALSE)
|
|
STOP_PED_SPEAKING(bike.mPed, TRUE)
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC DESTROY_INVISIBLE_BIKE(INVISIBLE_BIKE &bike)
|
|
SAFE_DELETE_PED(bike.mPed)
|
|
SAFE_DELETE_VEHICLE(bike.mBike)
|
|
ENDPROC
|
|
|
|
//----------------------
|
|
// SCRIPT FUNCTIONS
|
|
//----------------------
|
|
|
|
/// PURPOSE:
|
|
/// Shutsdown the script
|
|
PROC SCRIPT_CLEANUP()
|
|
CPRINTLN(DEBUG_AMBIENT, "[AMB_SOL]: SCRIPT CLEANUP")
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CLEANUP_DEBUG_WIDGETS()
|
|
#ENDIF
|
|
|
|
DESTROY_INVISIBLE_BIKE(bikeNorth)
|
|
DESTROY_INVISIBLE_BIKE(bikeSouth)
|
|
SAFE_RELEASE_PED(mNorthSecPed, FALSE)
|
|
SAFE_RELEASE_PED(mSouthSecPed, FALSE)
|
|
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MOVIE_STUDIO_OPEN, TRUE)
|
|
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(S_M_M_SECURITY_01)
|
|
SET_MODEL_AS_NO_LONGER_NEEDED(AKUMA)
|
|
TERMINATE_THIS_THREAD()
|
|
ENDPROC
|
|
|
|
PROC SCRIPT_WAIT()
|
|
#IF IS_DEBUG_BUILD
|
|
UPDATE_DEBUG_WIDGETS()
|
|
IF (bQuitScript)
|
|
CPRINTLN(DEBUG_AMBIENT, "[AMB_SOL]: DEBUG QUIT")
|
|
SAFE_DELETE_PED(mNorthSecPed)
|
|
SAFE_DELETE_PED(mSouthSecPed)
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
IS_ENTITY_OK(PLAYER_PED_ID())
|
|
|
|
// B*1318118 - If solomon 1 is running shut this down
|
|
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH (HASH("solomon1")) > 0
|
|
CPRINTLN(DEBUG_AMBIENT, "[AMB_SOL]: SOLOMON 1 IS RUNNING - SHUT THIS SCRIPT DOWN")
|
|
Remove_Script_From_Relaunch_List(LAUNCH_BIT_AMBIENT_SOLOMON)
|
|
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MOVIE_STUDIO_OPEN, TRUE)
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
|
|
// Immediately cleanup if this script has been completed via debug
|
|
IF GET_MISSION_COMPLETE_STATE(SP_MISSION_SOLOMON_1) = TRUE
|
|
CPRINTLN(DEBUG_AMBIENT, "[AMB_SOL]: SOLOMON 1 HAS BEEN FINISHED BEFORE HAND")
|
|
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MOVIE_STUDIO_OPEN, TRUE)
|
|
Remove_Script_From_Relaunch_List(LAUNCH_BIT_AMBIENT_SOLOMON)
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
|
|
// check script exit conditions
|
|
IF GET_MISSION_FLAG()
|
|
CPRINTLN(DEBUG_AMBIENT, "[AMB_SOL]: TERMINATING AS WE'RE ON A MISSION")
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
|
|
IF (GET_CURRENT_PLAYER_PED_ENUM() != CHAR_MICHAEL)
|
|
CPRINTLN(DEBUG_AMBIENT, "[AMB_SOL]: TERMINATING AS THE PLAYER ISN'T MICHAEL")
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
|
|
IF NOT IS_ENTITY_IN_RANGE_COORDS(PLAYER_PED_ID(), vAmbSolLaunchCenter, fAmbSolLaunchRadius + 30.0)
|
|
CPRINTLN(DEBUG_AMBIENT, "[AMB_SOL]: TERMINATING AS THE PLAYER IS FAR AWAY FROM MOVIE STUDIO")
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
|
|
WAIT(0)
|
|
IS_ENTITY_OK(PLAYER_PED_ID())
|
|
ENDPROC
|
|
|
|
FUNC PED_INDEX CREATE_GATE_SECURITY(VECTOR pos, FLOAT head)
|
|
PED_INDEX pedID
|
|
PED_INDEX pedArray[20]
|
|
INT cnt
|
|
INT i
|
|
|
|
pedID = CREATE_PED(PEDTYPE_MISSION, pedSecModel, pos)
|
|
IF IS_ENTITY_OK(pedID)
|
|
SET_ENTITY_HEADING(pedID, head)
|
|
SET_ENTITY_VISIBLE(pedID, FALSE)
|
|
ENDIF
|
|
|
|
//CLEAR_AREA_OF_PEDS(pos, 5.0)
|
|
//RETURN pedID
|
|
|
|
WAIT(0)
|
|
|
|
IF IS_ENTITY_OK(pedID)
|
|
cnt = GET_PED_NEARBY_PEDS(pedID, pedArray)
|
|
REPEAT cnt i
|
|
IF IS_ENTITY_OK(pedArray[i])
|
|
IF GET_DISTANCE_BETWEEN_PEDS(pedID, pedArray[i]) < 5.0
|
|
IF (GET_ENTITY_MODEL(pedArray[i]) = pedSecModel)
|
|
SAFE_DELETE_PED(pedID)
|
|
SET_ENTITY_AS_MISSION_ENTITY(pedArray[i])
|
|
RETURN pedArray[i]
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
SET_ENTITY_VISIBLE(pedID, TRUE)
|
|
ENDIF
|
|
|
|
RETURN pedID
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_PED_IN_SECURITY_BOX_USE_PED_SCANNER(VECTOR secPos)
|
|
INT cnt, i
|
|
PED_INDEX pedArray[20]
|
|
|
|
cnt = GET_PED_NEARBY_PEDS(PLAYER_PED_ID(), pedArray)
|
|
IF (cnt = 0)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
REPEAT cnt i
|
|
IF IS_ENTITY_OK(pedArray[i])
|
|
IF IS_PED_MODEL(pedArray[i], pedSecModel)
|
|
IF GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(pedArray[i], secPos) < 5.0
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_PED_IN_SECURITY_BOX(VECTOR secPos)
|
|
PED_INDEX pedIndex
|
|
|
|
IF NOT GET_CLOSEST_PED(secPos, 5.0, TRUE, TRUE, pedIndex, FALSE, TRUE)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF NOT IS_ENTITY_OK(pedIndex)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
RETURN IS_PED_MODEL(pedIndex, pedSecModel)
|
|
ENDFUNC
|
|
|
|
PROC UPDATE_NORTH_GATE(INT &iState)
|
|
BOOL bOk
|
|
FLOAT ang
|
|
VEHICLE_INDEX veh
|
|
|
|
SWITCH (iState)
|
|
CASE 0
|
|
DESTROY_INVISIBLE_BIKE(bikeNorth)
|
|
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MOVIE_STUDIO_OPEN, FALSE)
|
|
SAFE_DELETE_PED(mNorthSecPed)
|
|
|
|
/*
|
|
mNorthSecPed = CREATE_GATE_SECURITY(vNorthSecPed, 68.0725)
|
|
IF IS_ENTITY_OK(mNorthSecPed)
|
|
IF NOT IS_PED_USING_ANY_SCENARIO(mNorthSecPed)
|
|
CLEAR_PED_TASKS_IMMEDIATELY(mNorthSecPed)
|
|
TASK_START_SCENARIO_AT_POSITION(mNorthSecPed, "PROP_HUMAN_CHAIR_SEAT_CHAIR_AND_COFFEE", <<-1050.7236, -476.6626, 36.0371>>, 164.01)
|
|
ENDIF
|
|
ENDIF
|
|
*/
|
|
|
|
iState ++
|
|
BREAK
|
|
|
|
|
|
CASE 1
|
|
// if the player is in the close area on foot or on bike it's okay
|
|
IF IS_ENTITY_IN_ANGLED_AREA_COMPLEX(PLAYER_PED_ID(), <<-1055.046143,-469.334717,35.433327>>, <<-1057.439819,-474.977234,39.818699>>, 12.500000) // NORTH GATE - STOP CHECK - NO HEADING
|
|
fStopRange = 0.25
|
|
iState ++
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
veh = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())
|
|
ang = ACOS(DOT_PRODUCT_XY(vPlyrFwd, <<-0.37, -0.927, -0.053>>))
|
|
IF (ABSF(ang) < 45.0)
|
|
|
|
IF IS_ENTITY_IN_ANGLED_AREA_COMPLEX(veh, <<-1049.317505,-473.747192,34.941956>>, <<-1059.483398,-468.760773,39.944832>>, 4.500000)
|
|
|
|
//IF IS_ENTITY_IN_ANGLED_AREA_COMPLEX(veh, <<-1055.513672,-474.637115,35.627800>>, <<-1051.229736,-464.412628,39.914795>>, 9.500000) // NORTH GATE - STOP CHECK - HEADING
|
|
fStopRange = 1.0
|
|
iState ++
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 2
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
veh = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())
|
|
BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(veh, fStopRange, iStopTime)
|
|
ELSE
|
|
TASK_STAND_STILL(PLAYER_PED_ID(), -1)
|
|
ENDIF
|
|
|
|
IF IS_PED_IN_SECURITY_BOX_USE_PED_SCANNER(<<-1051.1, -476.1, 37.0>>)
|
|
CPRINTLN(DEBUG_AMBIENT, "[AMB_SOL]: PED FOUND IN NORTH SECURITY BOX")
|
|
ADD_PED_FOR_DIALOGUE(convoMichael, ENUM_TO_INT(CHAR_MICHAEL), PLAYER_PED_ID(), "MICHAEL")
|
|
|
|
IF (GET_RANDOM_BOOL())
|
|
bOk = CREATE_CONVERSATION(convoMichael, "AMSOLAU", "AMSOL_HERE", CONV_PRIORITY_HIGH)
|
|
ELSE
|
|
bOk = CREATE_CONVERSATION(convoMichael, "AMSOLAU", "AMSOL_WORK", CONV_PRIORITY_HIGH)
|
|
ENDIF
|
|
|
|
IF (bOk)
|
|
CPRINTLN(DEBUG_AMBIENT, "[AMB_SOL]: CONVERSATION STARTED WITH - PED FOUND IN NORTH SECURITY BOX")
|
|
iState ++
|
|
ENDIF
|
|
ELSE
|
|
CPRINTLN(DEBUG_AMBIENT, "[AMB_SOL]: NO PED FOUND IN NORTH SECURITY BOX")
|
|
iState ++
|
|
ENDIF
|
|
BREAK
|
|
CASE 3
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
veh = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())
|
|
IF BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(veh, fStopRange, iStopTime)
|
|
iState ++
|
|
ENDIF
|
|
EXIT
|
|
ENDIF
|
|
|
|
iState ++
|
|
BREAK
|
|
CASE 4
|
|
IF NOT IS_SCRIPTED_SPEECH_PLAYING(PLAYER_PED_ID()) AND NOT IS_SCRIPTED_CONVERSATION_ONGOING()
|
|
CLEAR_PED_TASKS(PLAYER_PED_ID())
|
|
iState ++
|
|
ENDIF
|
|
BREAK
|
|
CASE 5
|
|
UNLOCK_STUDIO_GATES()
|
|
iState ++
|
|
BREAK
|
|
CASE 6
|
|
CREATE_INVISIBLE_BIKE(bikeNorth, <<-1051.9556, -472.0550, 35.5672>>, 161.4418)
|
|
iState ++
|
|
BREAK
|
|
CASE 7
|
|
IF NOT IS_ENTITY_IN_ANGLED_AREA_COMPLEX(PLAYER_PED_ID(), <<-1055.513672,-474.637115,35.627800>>, <<-1051.229736,-464.412628,39.914795>>, 9.500000)
|
|
DESTROY_INVISIBLE_BIKE(bikeNorth)
|
|
iState ++
|
|
ENDIF
|
|
BREAK
|
|
CASE 8
|
|
IF bDebugNoCleanup = FALSE
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
|
|
PROC UPDATE_SOUTH_GATE(INT &iState)
|
|
BOOL bOk
|
|
FLOAT ang
|
|
VEHICLE_INDEX veh
|
|
|
|
SWITCH (iState)
|
|
CASE 0
|
|
DESTROY_INVISIBLE_BIKE(bikeSouth)
|
|
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MOVIE_STUDIO_OPEN, FALSE)
|
|
SAFE_DELETE_PED(mSouthSecPed)
|
|
|
|
/*
|
|
mSouthSecPed = CREATE_GATE_SECURITY(vSouthSecPed, 221.1277)
|
|
IF IS_ENTITY_OK(mSouthSecPed)
|
|
IF NOT IS_PED_USING_ANY_SCENARIO(mSouthSecPed)
|
|
CLEAR_PED_TASKS_IMMEDIATELY(mSouthSecPed)
|
|
TASK_START_SCENARIO_AT_POSITION(mSouthSecPed, "PROP_HUMAN_CHAIR_SEAT_CHAIR_AND_COFFEE", <<-1210.1525, -578.0859, 26.7238>>, -26.01)
|
|
ENDIF
|
|
ENDIF
|
|
*/
|
|
iState ++
|
|
BREAK
|
|
CASE 1
|
|
// if the player is in the close area on foot or on bike it's okay
|
|
IF IS_ENTITY_IN_ANGLED_AREA_COMPLEX(PLAYER_PED_ID(), <<-1210.236450,-579.875000,26.332148>>, <<-1204.725342,-586.357300,29.567726>>, 6.000000) // SOUTH GATE - STOP CHECK - NO HEADING
|
|
fStopRange = 0.25
|
|
iState ++
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
veh = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())
|
|
|
|
ang = ACOS(DOT_PRODUCT_XY(vPlyrFwd, <<0.730, 0.683, -0.013>>))
|
|
IF (ABSF(ang) < 25.0)
|
|
IF IS_ENTITY_IN_ANGLED_AREA_COMPLEX(veh, <<-1211.773926,-580.929932,26.330950>>, <<-1208.127197,-585.361694,29.660564>>, 4.500000)
|
|
//IF IS_ENTITY_IN_ANGLED_AREA_COMPLEX(veh, <<-1206.386841,-579.894958,26.265524>>, <<-1212.553345,-585.332214,29.517256>>, 6.000000) // SOUTH GATE - STOP CHECK - HEADING
|
|
fStopRange = 3.0
|
|
iState ++
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE 2
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
veh = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())
|
|
BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(veh, fStopRange, iStopTime)
|
|
ELSE
|
|
TASK_STAND_STILL(PLAYER_PED_ID(), -1)
|
|
ENDIF
|
|
|
|
IF IS_PED_IN_SECURITY_BOX_USE_PED_SCANNER(<<-1210.1525, -578.0859, 26.7238>>)
|
|
CPRINTLN(DEBUG_AMBIENT, "[AMB_SOL]: PED FOUND IN SOUTH SECURITY BOX")
|
|
ADD_PED_FOR_DIALOGUE(convoMichael, ENUM_TO_INT(CHAR_MICHAEL), PLAYER_PED_ID(), "MICHAEL")
|
|
|
|
IF (GET_RANDOM_BOOL())
|
|
bOk = CREATE_CONVERSATION(convoMichael, "AMSOLAU", "AMSOL_HERE", CONV_PRIORITY_HIGH)
|
|
ELSE
|
|
bOk = CREATE_CONVERSATION(convoMichael, "AMSOLAU", "AMSOL_WORK", CONV_PRIORITY_HIGH)
|
|
ENDIF
|
|
|
|
IF (bOk)
|
|
CPRINTLN(DEBUG_AMBIENT, "[AMB_SOL]: CONVERSATION STARTED WITH - PED FOUND IN SOUTH SECURITY BOX")
|
|
iState ++
|
|
ENDIF
|
|
ELSE
|
|
CPRINTLN(DEBUG_AMBIENT, "[AMB_SOL]: NO PED FOUND IN SOUTH SECURITY BOX")
|
|
iState ++
|
|
ENDIF
|
|
BREAK
|
|
CASE 3
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
|
veh = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())
|
|
IF BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(veh, fStopRange, iStopTime)
|
|
//SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MOVIE_STUDIO_OPEN, TRUE)
|
|
iState ++
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
|
|
iState ++
|
|
BREAK
|
|
CASE 4
|
|
IF NOT IS_SCRIPTED_SPEECH_PLAYING(PLAYER_PED_ID()) AND NOT IS_SCRIPTED_CONVERSATION_ONGOING()
|
|
CLEAR_PED_TASKS(PLAYER_PED_ID())
|
|
iState ++
|
|
ENDIF
|
|
BREAK
|
|
CASE 5
|
|
UNLOCK_STUDIO_GATES()
|
|
iState ++
|
|
BREAK
|
|
CASE 6
|
|
CREATE_INVISIBLE_BIKE(bikeSouth, <<-1206.8398, -583.2034, 26.1738>>, 311.4116)
|
|
iState ++
|
|
BREAK
|
|
CASE 7
|
|
IF NOT IS_ENTITY_IN_ANGLED_AREA_COMPLEX(PLAYER_PED_ID(), <<-1210.236450,-579.875000,26.332148>>, <<-1204.725342,-586.357300,29.567726>>, 6.000000) // SOUTH GATE - STOP CHECK - NO HEADING
|
|
DESTROY_INVISIBLE_BIKE(bikeSouth)
|
|
iState ++
|
|
ENDIF
|
|
BREAK
|
|
CASE 8
|
|
IF bDebugNoCleanup = FALSE
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDPROC
|
|
|
|
//----------------------
|
|
// MAIN SCRIPT
|
|
//----------------------
|
|
SCRIPT
|
|
BOOL bOk = FALSE
|
|
CPRINTLN(DEBUG_AMBIENT, "[AMB_SOL]: INIT SCRIPT 102")
|
|
IF HAS_FORCE_CLEANUP_OCCURRED(FORCE_CLEANUP_FLAG_DEBUG_MENU|FORCE_CLEANUP_FLAG_SP_TO_MP|FORCE_CLEANUP_FLAG_REPEAT_PLAY)
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
|
|
/*
|
|
IF (GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MOVIE_STUDIO_OPEN) = TRUE)
|
|
CPRINTLN(DEBUG_AMBIENT, "[AMB_SOL]: GATES ARE ALL READY OPEN")
|
|
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MOVIE_STUDIO_OPEN, TRUE)
|
|
Remove_Script_From_Relaunch_List(LAUNCH_BIT_AMBIENT_SOLOMON)
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
|
|
IF (GET_MISSION_COMPLETE_STATE(SP_MISSION_SOLOMON_1) = TRUE)
|
|
CPRINTLN(DEBUG_AMBIENT, "[AMB_SOL]: SOLOMON 1 HAS BEEN FINISHED BEFORE HAND")
|
|
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MOVIE_STUDIO_OPEN, TRUE)
|
|
Remove_Script_From_Relaunch_List(LAUNCH_BIT_AMBIENT_SOLOMON)
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
*/
|
|
|
|
// Register the script so that it can be relaunched when loading from a savegame.
|
|
Register_Script_To_Relaunch_List(LAUNCH_BIT_AMBIENT_SOLOMON)
|
|
CPRINTLN(DEBUG_AMBIENT, "[AMB_SOL]: STUDIO FLOW FLAG - ", GET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MOVIE_STUDIO_OPEN))
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
SETUP_DEBUG_WIDGETS()
|
|
#ENDIF
|
|
|
|
CPRINTLN(DEBUG_AMBIENT, "[AMB_SOL]: WAITING FOR PLAYER TO GET IN RANGE")
|
|
IF IS_ENTITY_OK(PLAYER_PED_ID())
|
|
WHILE (bOK = FALSE)
|
|
bOk = ((GET_MISSION_FLAG() = FALSE) AND (GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL) AND IS_ENTITY_IN_RANGE_COORDS(PLAYER_PED_ID(), vAmbSolLaunchCenter, fAmbSolLaunchRadius))
|
|
SCRIPT_WAIT()
|
|
ENDWHILE
|
|
ENDIF
|
|
CPRINTLN(DEBUG_AMBIENT, "[AMB_SOL]: PLAYER IN RANGE")
|
|
|
|
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MOVIE_STUDIO_OPEN, FALSE)
|
|
LOCK_STUDIO_GATES()
|
|
SECURE_REQUEST_AND_LOAD_MODEL(AKUMA)
|
|
SECURE_REQUEST_AND_LOAD_MODEL(pedSecModel)
|
|
|
|
WHILE (TRUE)
|
|
IS_ENTITY_OK(PLAYER_PED_ID())
|
|
vPlyrFwd = GET_ENTITY_FORWARD_VECTOR(PLAYER_PED_ID())
|
|
|
|
IF (GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) = 0)
|
|
UPDATE_NORTH_GATE(iNorthGateState)
|
|
UPDATE_SOUTH_GATE(iSouthGateState)
|
|
|
|
IF IS_COORD_IN_SPECIFIED_AREA(GET_ENTITY_COORDS(PLAYER_PED_ID()), AC_MOVIE_STUDIO)
|
|
CPRINTLN(DEBUG_AMBIENT, "[AMB_SOL]: PLAYER GOT IN A DIFFERENT WAY - CLEANUP")
|
|
SET_MISSION_FLOW_FLAG_STATE(FLOWFLAG_MOVIE_STUDIO_OPEN, TRUE)
|
|
Remove_Script_From_Relaunch_List(LAUNCH_BIT_AMBIENT_SOLOMON)
|
|
SCRIPT_CLEANUP()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
SCRIPT_WAIT()
|
|
ENDWHILE
|
|
ENDSCRIPT
|
|
|
|
|
|
|
|
|
|
|