Files
gtav-src/script/dev_ng/singleplayer/include/debug/player_controller_debug.sch
T
2025-09-29 00:52:08 +02:00

2073 lines
78 KiB
Scheme
Executable File
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#IF IS_DEBUG_BUILD
USING "player_scene_anim.sch"
//////////////////////////////////////////////////////////////////////////////////////////
// //
// SCRIPT NAME : player_ped_debug.sch //
// AUTHOR : Alwyn Roberts //
// DESCRIPTION : Handles all the player character related debug procs. //
// //
//////////////////////////////////////////////////////////////////////////////////////////
FUNC BOOL Test_Player_Ped_Scene(PLAYER_TIMETABLE_SCENE_STRUCT &sPassedScene,
MODEL_NAMES vehModel, WIDGET_GROUP_ID sceneWidget, VECTOR vVehCoordsOffset, FLOAT fVehHeadOffset,
VECTOR vSceneVeh_driveOffset,
VECTOR vecCamEndPos, VECTOR vecCamEndRot,
OBJECT_INDEX &playerProp, OBJECT_INDEX &playerExtraProp,
OBJECT_INDEX &player_door_l, OBJECT_INDEX &player_door_r,
VEHICLE_INDEX &scene_veh)
g_bDrawLiteralSceneString = TRUE
g_eRecentlySelectedScene = sPassedScene.sScene.eScene
SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(TRUE)
Force_All_Drunk_Peds_To_Become_Sober_And_Quit_Camera()
BOOL bRender_scene_cam = TRUE
CAMERA_INDEX scene_cam
scene_cam = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA",
vecCamEndPos, vecCamEndRot,
GET_GAMEPLAY_CAM_FOV())
SET_CAM_ACTIVE(scene_cam, TRUE)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
MODEL_NAMES ePropModel = DUMMY_MODEL_FOR_SCRIPT, eExtraPropModel = DUMMY_MODEL_FOR_SCRIPT
VECTOR propOffset = <<0,0,0>>, propRotation = <<0,0,0>>
VECTOR extraPropOffset = <<0,0,0>>, extraPropRotation = <<0,0,0>>
PED_BONETAG epropBonetag = BONETAG_NULL, eExtraPropBonetag = BONETAG_NULL
FLOAT fDetachAnimPhase = -1.0
BOOL bAttachedToBuddy = FALSE
enumPlayerSceneObjectAction thisSceneObjectAction = PSOA_NULL
GET_OBJECTS_FOR_SCENE(sPassedScene.sScene.eScene, ePropModel, propOffset, propRotation, epropBonetag, fDetachAnimPhase, thisSceneObjectAction)
GET_EXTRA_OBJECTS_FOR_SCENE(sPassedScene.sScene.eScene, eExtraPropModel, extraPropOffset, extraPropRotation, eExtraPropBonetag, fDetachAnimPhase, thisSceneObjectAction, bAttachedToBuddy)
MODEL_NAMES eDoorModel_l = DUMMY_MODEL_FOR_SCRIPT, eDoorModel_R = DUMMY_MODEL_FOR_SCRIPT
VECTOR vDoorOffset_L = <<0,0,0>>, vDoorOffset_R= <<0,0,0>>
DOOR_HASH_ENUM eDoorHash_L, eDoorHash_R
BOOL bReplaceDoor
FLOAT fHideDoorRadius
GET_DOORS_FOR_SCENE(sPassedScene.sScene.eScene, eDoorModel_l, eDoorModel_R, vDoorOffset_L, vDoorOffset_R, eDoorHash_L, eDoorHash_R, bReplaceDoor, fHideDoorRadius)
BOOL bVehOffsetFromPlayerGivenWorldCoords, bVehOffsetFromPlayerInWorldCoords
BOOL bVehRotationProperly, bDrawVehRotationProperly
TEXT_LABEL_63 tPlayerAnimDict, tPlayerAnimLoop, tPlayerAnimOut
TEXT_LABEL_63 tSceneBuddyAnimDict, tSceneBuddyAnimLoop, tSceneBuddyAnimOut
ANIMATION_FLAGS playerLoopFlag, playerOutFlag
BOOL bWaitForBuddyAssets = FALSE
VECTOR vCreateCoords = sPassedScene.sScene.vCreateCoords, vStoredCoords
FLOAT fCreateHead = sPassedScene.sScene.fCreateHead, fStoredHead
VECTOR vCreateRot
GET_PLAYER_PED_ROTATION_FOR_SCENE(sPassedScene.sScene.eScene, fCreateHead, vCreateRot)
VECTOR vCamEndOffset = vecCamEndPos - vCreateCoords
FLOAT gpCamPitch
FLOAT gpCamHead
TEXT_LABEL tRecording_name
INT iRecording_num
FLOAT fRecording_start, fRecording_skip, fRecording_stop, fSpeed_switch, fSpeed_exit
BOOL /*bDisableLegIk,*/ bOverridePhysics, bTurnOffCollision, bExtractInitialOffset, bNotInterruptable, bLooping
BOOL bExitSynchScene
// BOOL bGetPlaceholderCoordPostMission
WHILE NOT bWaitForBuddyAssets
bWaitForBuddyAssets = TRUE
IF (sPassedScene.eLoopTask = script_task_play_anim)
OR (sPassedScene.eOutTask = script_task_play_anim)
OR (sPassedScene.eLoopTask = script_task_synchronized_scene)
OR (sPassedScene.eOutTask = script_task_synchronized_scene)
//enumPlayerSceneAnimProgress ePlayerSceneAnimProgress = MAX_PLAYER_SCENE_ANIM_PROGRESS
IF GET_PLAYER_ANIM_FOR_TIMETABLE_SCENE(sPassedScene.sScene.eScene,
tPlayerAnimDict, tPlayerAnimLoop, tPlayerAnimOut,
playerLoopFlag, playerOutFlag) //, ePlayerSceneAnimProgress)
// bDisableLegIk = IS_BITMASK_ENUM_AS_ENUM_SET(playerLoopFlag, AF_DISABLE_LEG_IK)
bOverridePhysics = IS_BITMASK_ENUM_AS_ENUM_SET(playerLoopFlag, AF_OVERRIDE_PHYSICS)
bTurnOffCollision = IS_BITMASK_ENUM_AS_ENUM_SET(playerLoopFlag, AF_TURN_OFF_COLLISION)
bExtractInitialOffset = IS_BITMASK_ENUM_AS_ENUM_SET(playerLoopFlag, AF_EXTRACT_INITIAL_OFFSET)
bNotInterruptable = IS_BITMASK_ENUM_AS_ENUM_SET(playerLoopFlag, AF_NOT_INTERRUPTABLE)
bLooping = IS_BITMASK_ENUM_AS_ENUM_SET(playerLoopFlag, AF_LOOPING)
IF NOT (IS_STRING_NULL(tPlayerAnimDict) OR ARE_STRINGS_EQUAL(tPlayerAnimDict, ""))
REQUEST_ANIM_DICT(tPlayerAnimDict)
IF NOT HAS_ANIM_DICT_LOADED(tPlayerAnimDict)
bWaitForBuddyAssets = FALSE
REQUEST_ANIM_DICT(tPlayerAnimDict)
ENDIF
ENDIF
ENDIF
ENDIF
IF sPassedScene.eSceneBuddy <> NO_CHARACTER
IF (sPassedScene.eBuddyLoopTask = script_task_play_anim)
OR (sPassedScene.eBuddyOutTask = script_task_play_anim)
OR (sPassedScene.eBuddyLoopTask = script_task_synchronized_scene)
OR (sPassedScene.eBuddyOutTask = script_task_synchronized_scene)
ANIMATION_FLAGS buddyLoopFlag = AF_DEFAULT, buddyOutFlag = AF_DEFAULT
IF GET_BUDDY_ANIM_FOR_TIMETABLE_SCENE(sPassedScene.sScene.eScene,
tSceneBuddyAnimDict, tSceneBuddyAnimLoop, tSceneBuddyAnimOut,
buddyLoopFlag, buddyOutFlag)
IF NOT (IS_STRING_NULL(tSceneBuddyAnimDict) OR ARE_STRINGS_EQUAL(tSceneBuddyAnimDict, ""))
REQUEST_ANIM_DICT(tSceneBuddyAnimDict)
IF NOT HAS_ANIM_DICT_LOADED(tSceneBuddyAnimDict)
bWaitForBuddyAssets = FALSE
REQUEST_ANIM_DICT(tSceneBuddyAnimDict)
ENDIF
ENDIF
ENDIF
ENDIF
IF NOT DOES_ENTITY_EXIST(g_pScene_buddy)
IF (sPassedScene.eSceneBuddy <> CHAR_BLANK_ENTRY)
IF NOT CREATE_NPC_PED_ON_FOOT(g_pScene_buddy, sPassedScene.eSceneBuddy,
sPassedScene.sScene.vCreateCoords+sPassedScene.vSceneBuddyCoordOffset,
sPassedScene.sScene.fCreateHead+sPassedScene.fSceneBuddyHeadOffset)
bWaitForBuddyAssets = FALSE
ENDIF
ELSE
PED_TYPE PedType = PEDTYPE_MISSION
MODEL_NAMES model = DUMMY_MODEL_FOR_SCRIPT
SETUP_BLANK_BUDDY_FOR_SCENE(sPassedScene.sScene.eScene, PedType, model)
bWaitForBuddyAssets = FALSE
IF (model = GET_CHOP_MODEL())
IF CREATE_CHOP(g_pScene_buddy,
sPassedScene.sScene.vCreateCoords+sPassedScene.vSceneBuddyCoordOffset,
sPassedScene.sScene.fCreateHead+sPassedScene.fSceneBuddyHeadOffset)
ENDIF
ELSE
REQUEST_MODEL(model)
IF HAS_MODEL_LOADED(model)
g_pScene_buddy = CREATE_PED(PedType, model,
sPassedScene.sScene.vCreateCoords+sPassedScene.vSceneBuddyCoordOffset,
sPassedScene.sScene.fCreateHead+sPassedScene.fSceneBuddyHeadOffset,
FALSE, FALSE)
SET_MODEL_AS_NO_LONGER_NEEDED(model)
ENDIF
ENDIF
ENDIF
ELSE
IF NOT IS_ENTITY_VISIBLE(g_pScene_buddy)
SET_ENTITY_VISIBLE(g_pScene_buddy, TRUE)
ENDIF
ENDIF
ENDIF
IF sPassedScene.eVehState <> PTVS_0_noVehicle
VECTOR vVehCoords = sPassedScene.sScene.vCreateCoords+vVehCoordsOffset
FLOAT fVehHead = sPassedScene.sScene.fCreateHead+fVehHeadOffset
enumCharacterList paramPlayerCharID = GET_CURRENT_PLAYER_PED_ENUM()
IF DOES_ENTITY_EXIST(g_vPlayerVeh[paramPlayerCharID])
IF NOT DOES_ENTITY_EXIST(scene_veh)
IF GET_ENTITY_MODEL(g_vPlayerVeh[paramPlayerCharID]) = vehModel
scene_veh = g_vPlayerVeh[paramPlayerCharID]
IF NOT IS_ENTITY_DEAD(scene_veh)
SET_ENTITY_COORDS(scene_veh, vVehCoords)
SET_ENTITY_HEADING(scene_veh, fVehHead)
SET_VEHICLE_ON_GROUND_PROPERLY(scene_veh)
FREEZE_ENTITY_POSITION(scene_veh, TRUE)
ENDIF
ENDIF
ENDIF
ENDIF
IF NOT DOES_ENTITY_EXIST(scene_veh)
bWaitForBuddyAssets = FALSE
REQUEST_MODEL(vehModel)
IF HAS_MODEL_LOADED(vehModel)
scene_veh = CREATE_VEHICLE(vehModel,
vVehCoords, fVehHead,
FALSE, FALSE)
SET_VEHICLE_ON_GROUND_PROPERLY(scene_veh)
SET_MODEL_AS_NO_LONGER_NEEDED(vehModel)
FREEZE_ENTITY_POSITION(scene_veh, TRUE)
ENDIF
ENDIF
ENDIF
IF ePropModel <> DUMMY_MODEL_FOR_SCRIPT
IF NOT DOES_ENTITY_EXIST(playerProp)
bWaitForBuddyAssets = FALSE
REQUEST_MODEL(ePropModel)
IF HAS_MODEL_LOADED(ePropModel)
playerProp = CREATE_OBJECT(ePropModel,
vCreateCoords+propOffset)
IF (epropBonetag <> BONETAG_NULL)
SET_ENTITY_RECORDS_COLLISIONS(playerProp, TRUE)
FREEZE_ENTITY_POSITION(playerProp, FALSE)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
ATTACH_ENTITY_TO_ENTITY(playerProp, PLAYER_PED_ID(),
GET_PED_BONE_INDEX(PLAYER_PED_ID(), epropBonetag),
propOffset, propRotation)
ENDIF
ELSE
VECTOR vObjectCoords = sPassedScene.sScene.vCreateCoords
FLOAT fObjectHead = sPassedScene.sScene.fCreateHead
SET_ENTITY_COORDS(playerProp, vObjectCoords+propOffset)
SET_ENTITY_ROTATION(playerProp, <<0,0,fObjectHead>>+propRotation)
FREEZE_ENTITY_POSITION(playerProp, TRUE)
ENDIF
ENDIF
ENDIF
ENDIF
IF eExtraPropModel <> DUMMY_MODEL_FOR_SCRIPT
IF NOT DOES_ENTITY_EXIST(playerExtraProp)
bWaitForBuddyAssets = FALSE
REQUEST_MODEL(eExtraPropModel)
IF HAS_MODEL_LOADED(eExtraPropModel)
IF bAttachedToBuddy
IF DOES_ENTITY_EXIST(g_pScene_buddy)
playerExtraProp = CREATE_OBJECT(eExtraPropModel,
vCreateCoords+ExtraPropOffset)
ENDIF
ELSE
playerExtraProp = CREATE_OBJECT(eExtraPropModel,
vCreateCoords+ExtraPropOffset)
ENDIF
IF DOES_ENTITY_EXIST(playerExtraProp)
IF (eExtraPropBonetag <> BONETAG_NULL)
SET_ENTITY_RECORDS_COLLISIONS(playerExtraProp, TRUE)
FREEZE_ENTITY_POSITION(playerExtraProp, FALSE)
IF NOT bAttachedToBuddy
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
ATTACH_ENTITY_TO_ENTITY(playerExtraProp, PLAYER_PED_ID(),
GET_PED_BONE_INDEX(PLAYER_PED_ID(), eExtraPropBonetag),
ExtraPropOffset, ExtraPropRotation)
ENDIF
ELSE
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
ATTACH_ENTITY_TO_ENTITY(playerExtraProp, g_pScene_buddy,
GET_PED_BONE_INDEX(g_pScene_buddy, eExtraPropBonetag),
ExtraPropOffset, ExtraPropRotation)
ENDIF
ENDIF
ELSE
VECTOR vObjectCoords = sPassedScene.sScene.vCreateCoords
FLOAT fObjectHead = sPassedScene.sScene.fCreateHead
SET_ENTITY_COORDS(playerExtraProp, vObjectCoords+ExtraPropOffset)
SET_ENTITY_ROTATION(playerExtraProp, <<0,0,fObjectHead>>+ExtraPropRotation)
FREEZE_ENTITY_POSITION(playerExtraProp, TRUE)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF eDoorModel_l <> DUMMY_MODEL_FOR_SCRIPT
IF NOT DOES_ENTITY_EXIST(player_door_l)
bWaitForBuddyAssets = FALSE
REQUEST_MODEL(eDoorModel_l)
IF NOT HAS_MODEL_LOADED(eDoorModel_l)
REQUEST_MODEL(eDoorModel_l)
ELSE
player_door_l = CREATE_OBJECT(eDoorModel_l, sPassedScene.sScene.vCreateCoords)
SET_MODEL_AS_NO_LONGER_NEEDED(eDoorModel_l)
ENDIF
ENDIF
ENDIF
IF eDoorModel_r <> DUMMY_MODEL_FOR_SCRIPT
IF NOT DOES_ENTITY_EXIST(player_door_r)
bWaitForBuddyAssets = FALSE
REQUEST_MODEL(eDoorModel_r)
IF NOT HAS_MODEL_LOADED(eDoorModel_r)
REQUEST_MODEL(eDoorModel_r)
ELSE
player_door_r = CREATE_OBJECT(eDoorModel_r, sPassedScene.sScene.vCreateCoords)
SET_MODEL_AS_NO_LONGER_NEEDED(eDoorModel_r)
ENDIF
ENDIF
ENDIF
TEXT_LABEL_31 sPlayerTimetableAdditional_script = ""
IF SETUP_TIMETABLE_SCRIPT_FOR_SCENE(sPassedScene.sScene.eScene, sPlayerTimetableAdditional_script)
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(GET_HASH_KEY(sPlayerTimetableAdditional_script)) <= 0
bWaitForBuddyAssets = FALSE
CONST_INT iSCENE_STACK_SIZE FRIEND_STACK_SIZE //bug 381398
REQUEST_SCRIPT(sPlayerTimetableAdditional_script)
IF NOT HAS_SCRIPT_LOADED(sPlayerTimetableAdditional_script)
//
ELSE
START_NEW_SCRIPT(sPlayerTimetableAdditional_script,
iSCENE_STACK_SIZE)
SET_SCRIPT_AS_NO_LONGER_NEEDED(sPlayerTimetableAdditional_script)
ENDIF
ENDIF
ENDIF
PRINTSTRING("bWaitForBuddyAssets...")PRINTNL()
WAIT(0)
ENDWHILE
TEXT_LABEL_63 str = "Test_Player_Ped_Scene - "
str += Get_String_From_Ped_Request_Scene_Enum(sPassedScene.sScene.eScene)
SET_CURRENT_WIDGET_GROUP(sceneWidget)
WIDGET_GROUP_ID testPlayerPedScene_widget = START_WIDGET_GROUP(str)
FLOAT fXY_slider = 0.01
IF (sPassedScene.sScene.eScene = PR_SCENE_F0_TANISHAFIGHT)
fXY_slider = 0.0001
ENDIF
ADD_WIDGET_FLOAT_SLIDER("vCreateCoords x", vCreateCoords.x, vCreateCoords.x-100.0, vCreateCoords.x+100.0, fXY_slider)
ADD_WIDGET_FLOAT_SLIDER("vCreateCoords y", vCreateCoords.y, vCreateCoords.y-100.0, vCreateCoords.y+100.0, fXY_slider)
ADD_WIDGET_FLOAT_SLIDER("vCreateCoords z", vCreateCoords.z, vCreateCoords.z-10.0, vCreateCoords.z+10.0, 0.0001)
IF NOT GET_PLAYER_PED_ROTATION_FOR_SCENE(sPassedScene.sScene.eScene, fCreateHead, vCreateRot)
vCreateRot.z = fCreateHead
IF vCreateRot.z > 180.0
vCreateRot.z -= 360.0
ENDIF
IF vCreateRot.z < -180.0
vCreateRot.z += 360.0
ENDIF
ADD_WIDGET_FLOAT_SLIDER("fCreateHead", vCreateRot.z, -180.0, 180.0, 1.0)
ELSE
IF vCreateRot.z > 180.0
vCreateRot.z -= 360.0
ENDIF
IF vCreateRot.z < -180.0
vCreateRot.z += 360.0
ENDIF
ADD_WIDGET_STRING("GET_PLAYER_PED_ROTATION_FOR_SCENE()")
ADD_WIDGET_VECTOR_SLIDER("vCreateRot", vCreateRot, -180.0, 180.0, 0.01)
ENDIF
// IF NOT ARE_VECTORS_ALMOST_EQUAL(sPassedScene.vPlayerCoordOffset, <<0,0,0>>)
// OR NOT (sPassedScene.fPlayerHeadOffset = 0)
//// ADD_WIDGET_STRING("scene_player_offset")
//// ADD_WIDGET_VECTOR_SLIDER("vPlayerCoordOffset", sPassedScene.vPlayerCoordOffset, -40.0, 40.0, 0.01)
//// ADD_WIDGET_FLOAT_SLIDER("fPlayerHeadOffset", sPassedScene.fPlayerHeadOffset, -180.0, 181.0, 1.0)
//
//
// vCreateCoords += sPassedScene.vPlayerCoordOffset
// vCamEndOffset -= sPassedScene.vPlayerCoordOffset
// vVehCoordsOffset -= sPassedScene.vPlayerCoordOffset
// sPassedScene.vPlayerCoordOffset = <<0,0,0>>
//
// fCreateHead += sPassedScene.fPlayerHeadOffset
// fVehHeadOffset -= sPassedScene.fPlayerHeadOffset
// sPassedScene.fPlayerHeadOffset = 0
//
// ENDIF
IF (sPassedScene.eLoopTask = script_task_play_anim)
OR (sPassedScene.eOutTask = script_task_play_anim)
OR (sPassedScene.eLoopTask = script_task_synchronized_scene)
OR (sPassedScene.eOutTask = script_task_synchronized_scene)
START_WIDGET_GROUP("loop anim flags")
// ADD_WIDGET_BOOL("bDisableLegIk", bDisableLegIk)
ADD_WIDGET_BOOL("bOverridePhysics", bOverridePhysics)
ADD_WIDGET_BOOL("bTurnOffCollision", bTurnOffCollision)
ADD_WIDGET_BOOL("bExtractInitialOffset", bExtractInitialOffset)
ADD_WIDGET_BOOL("bNotInterruptable", bNotInterruptable)
ADD_WIDGET_BOOL("bLooping", bLooping)
STOP_WIDGET_GROUP()
ADD_WIDGET_BOOL("bExitSynchScene", bExitSynchScene)
ENDIF
// VECTOR vCoordFrom, vCoordTo, vLastKnownCoords
// FLOAT fPercentDist, fLastKnownHead
// IF GetPlaceholderCoordPostMission(sPassedScene.sScene.eScene, vCoordFrom, vCoordTo, fPercentDist,
// vLastKnownCoords, fLastKnownHead)
// ADD_WIDGET_BOOL("bGetPlaceholderCoordPostMission", bGetPlaceholderCoordPostMission)
// ENDIF
IF DOES_ENTITY_EXIST(g_pScene_buddy)
ADD_WIDGET_STRING("g_pScene_buddy")
FLOAT fSceneBuddyCoordOffsetMag
fSceneBuddyCoordOffsetMag = VMAG(sPassedScene.vSceneBuddyCoordOffset)
IF (fSceneBuddyCoordOffsetMag < ABSF(sPassedScene.vSceneBuddyCoordOffset.x))
fSceneBuddyCoordOffsetMag = ABSF(sPassedScene.vSceneBuddyCoordOffset.x)
ENDIF
IF (fSceneBuddyCoordOffsetMag < ABSF(sPassedScene.vSceneBuddyCoordOffset.y))
fSceneBuddyCoordOffsetMag = ABSF(sPassedScene.vSceneBuddyCoordOffset.y)
ENDIF
IF (fSceneBuddyCoordOffsetMag < ABSF(sPassedScene.vSceneBuddyCoordOffset.z))
fSceneBuddyCoordOffsetMag = ABSF(sPassedScene.vSceneBuddyCoordOffset.z)
ENDIF
fSceneBuddyCoordOffsetMag *= 2
IF (fSceneBuddyCoordOffsetMag < 20.0)
fSceneBuddyCoordOffsetMag = 20.0
ENDIF
ADD_WIDGET_VECTOR_SLIDER("vSceneBuddyCoordOffset", sPassedScene.vSceneBuddyCoordOffset,
-fSceneBuddyCoordOffsetMag, fSceneBuddyCoordOffsetMag, fSceneBuddyCoordOffsetMag * 0.0005)
ADD_WIDGET_FLOAT_SLIDER("fSceneBuddyHeadOffset", sPassedScene.fSceneBuddyHeadOffset,
-180.0, 180.0, 1.0)
ENDIF
IF DOES_ENTITY_EXIST(scene_veh)
ADD_WIDGET_STRING("scene_veh")
IF (sPassedScene.eVehState = PTVS_1_playerWithVehicle)
ADD_WIDGET_VECTOR_SLIDER("vVehCoordsOffset", vVehCoordsOffset, -100.0, 100.0, 0.01)
IF fVehHeadOffset < -180.0
fVehHeadOffset += 360.0
ELIF fVehHeadOffset > 180.0
fVehHeadOffset -= 360.0
ENDIF
ADD_WIDGET_FLOAT_SLIDER("fVehHeadOffset", fVehHeadOffset, -180.0, 180.0, 1.0)
ADD_WIDGET_BOOL("bVehOffsetFromPlayerGivenWorldCoords", bVehOffsetFromPlayerGivenWorldCoords)
ADD_WIDGET_BOOL("bVehOffsetFromPlayerInWorldCoords", bVehOffsetFromPlayerInWorldCoords)
ELIF (sPassedScene.eVehState = PTVS_2_playerInVehicle)
ADD_WIDGET_VECTOR_SLIDER("vSceneVeh_driveOffset", vSceneVeh_driveOffset, -50.0, 50.0, 0.5)
ELSE
ADD_WIDGET_STRING("UNKNOWN sPassedScene.eVehState")
ENDIF
IF GET_PLAYER_PED_ROTATION_FOR_SCENE(sPassedScene.sScene.eScene, fCreateHead, vCreateRot)
ADD_WIDGET_BOOL("bVehRotationProperly", bVehRotationProperly)
ADD_WIDGET_BOOL("bDrawVehRotationProperly", bDrawVehRotationProperly)
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(playerProp)
TEXT_LABEL_63 tplayerProp = "playerProp - "
tplayerProp += GET_MODEL_NAME_FOR_DEBUG(ePropModel)
ADD_WIDGET_STRING(tplayerProp)
ADD_WIDGET_VECTOR_SLIDER("propOffset", propOffset, -100.0, 100.0, 0.01)
ADD_WIDGET_VECTOR_SLIDER("propRotation", propRotation, -180.0, 180.0, 1.0)
ENDIF
IF DOES_ENTITY_EXIST(playerExtraProp)
TEXT_LABEL_63 tPlayerExtraProp = "playerExtraProp - "
tPlayerExtraProp += GET_MODEL_NAME_FOR_DEBUG(eExtraPropModel)
ADD_WIDGET_STRING(tPlayerExtraProp)
ADD_WIDGET_VECTOR_SLIDER("ExtraPropOffset", ExtraPropOffset, -100.0, 100.0, 0.01)
ADD_WIDGET_VECTOR_SLIDER("ExtraPropRotation", ExtraPropRotation, -180.0, 180.0, 1.0)
ENDIF
IF DOES_ENTITY_EXIST(player_door_l)
TEXT_LABEL_63 tplayer_door_l = "player_door_l - "
tplayer_door_l += GET_MODEL_NAME_FOR_DEBUG(eDoorModel_l)
ADD_WIDGET_STRING(tplayer_door_l)
ADD_WIDGET_VECTOR_SLIDER("vDoorOffset_L", vDoorOffset_L, -100.0, 100.0, 0.01)
ENDIF
IF DOES_ENTITY_EXIST(player_door_r)
TEXT_LABEL_63 tplayer_door_r = "player_door_r - "
tplayer_door_r += GET_MODEL_NAME_FOR_DEBUG(eDoorModel_R)
ADD_WIDGET_STRING(tplayer_door_r)
ADD_WIDGET_VECTOR_SLIDER("vDoorOffset_R", vDoorOffset_R, -100.0, 100.0, 0.01)
ENDIF
ADD_WIDGET_STRING("scene_cam")
ADD_WIDGET_BOOL("bRender_scene_cam", bRender_scene_cam)
ADD_WIDGET_VECTOR_SLIDER("vCamEndOffset", vCamEndOffset, -100.0, 100.0, 0.01)
IF vecCamEndRot.z < -180.0
vecCamEndRot.z += 360.0
ENDIF
IF vecCamEndRot.z > 180.0
vecCamEndRot.z -= 360.0
ENDIF
ADD_WIDGET_VECTOR_SLIDER("vecCamEndRot", vecCamEndRot, -180.0, 180.0, 1.0)
FLOAT gameplayCamSmoothRate
IF NOT SETUP_RELATIVE_GAMEPLAY_CAM_PITCH_SCENE(sPassedScene.sScene.eScene,
gpCamPitch, gameplayCamSmoothRate,
gpCamHead)
FLOAT finalSplineCameraHeading = vecCamEndRot.z
FLOAT playerHeading = fCreateHead
gpCamHead = finalSplineCameraHeading - playerHeading
ENDIF
IF (gpCamPitch <> 999.000 ) OR (gpCamHead <> 999.000 )
ADD_WIDGET_STRING("gameplayCam")
IF (gpCamPitch = 999.000 )
gpCamPitch = 0
ENDIF
IF (gpCamHead = 999.000 )
gpCamHead = 0
ENDIF
ADD_WIDGET_FLOAT_SLIDER("gpCamPitch", gpCamPitch, -90.0, 45.0, 0.1)
ADD_WIDGET_FLOAT_SLIDER("gpCamHead", gpCamHead, -360.0, 360.0, 1.0)
ENDIF
IF GET_PLAYER_VEH_RECORDING_FOR_SCENE(sPassedScene.sScene.eScene,
tRecording_name, iRecording_num,
fRecording_start, fRecording_skip, fRecording_stop,
fSpeed_switch, fSpeed_exit)
ADD_WIDGET_STRING("vehicleRec")
ADD_WIDGET_STRING(tRecording_name)
ADD_WIDGET_INT_SLIDER("iRecording_num", iRecording_num, 0, 100, 0)
ADD_WIDGET_FLOAT_SLIDER("fRecording_start", fRecording_start, 0.0, 100000.0, 500.0)
ADD_WIDGET_FLOAT_SLIDER("fRecording_skip", fRecording_skip, 0.0, 100000.0, 500.0)
ADD_WIDGET_FLOAT_SLIDER("fRecording_stop", fRecording_stop, 0.0, 100000.0, 500.0)
ADD_WIDGET_FLOAT_SLIDER("fSpeed_switch", fSpeed_switch, 0.0, 2.0, 0.1)
ADD_WIDGET_FLOAT_SLIDER("fSpeed_exit", fSpeed_exit, 0.0, 2.0, 0.1)
ENDIF
STOP_WIDGET_GROUP()
CLEAR_CURRENT_WIDGET_GROUP(sceneWidget)
WHILE NOT IS_KEYBOARD_KEY_JUST_PRESSED(KEY_C)
IF DOES_CAM_EXIST(scene_cam)
IF bRender_scene_cam
SET_CAM_ACTIVE(scene_cam, TRUE)
RENDER_SCRIPT_CAMS(TRUE, FALSE)
SET_CAM_COORD(scene_cam, vCamEndOffset+vCreateCoords)
SET_CAM_ROT(scene_cam, vecCamEndRot)
ELSE
SET_CAM_ACTIVE(scene_cam, FALSE)
RENDER_SCRIPT_CAMS(FALSE, FALSE)
PRINTSTRING("gpCamHead = ")
// PRINTFLOAT(finalSplineCameraHeading)
// PRINTSTRING(" ")
// PRINTFLOAT(playerHeading)
// PRINTSTRING(" = ")
PRINTFLOAT(gpCamHead)
PRINTNL()
SET_GAMEPLAY_CAM_RELATIVE_PITCH(gpCamPitch)
IF (sPassedScene.eLoopTask = SCRIPT_TASK_STAND_STILL)
OR (sPassedScene.eLoopTask = SCRIPT_TASK_GO_STRAIGHT_TO_COORD)
OR (sPassedScene.eLoopTask = SCRIPT_TASK_AIM_GUN_AT_ENTITY)
SET_GAMEPLAY_CAM_RELATIVE_HEADING(gpCamHead - 180)
ELSE
SET_GAMEPLAY_CAM_RELATIVE_HEADING(gpCamHead)
ENDIF
ENDIF
ENDIF
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
DRAW_DEBUG_SPHERE(vCreateCoords, 0.25, 255, 0, 0, 255)
TEXT_LABEL_63 str1 = "", str2 = "", str3 = "", str4 = ""
TEXT_LABEL_63 tPlayerAnimTest
SCRIPT_TASK_NAME eTestedTask
IF NOT bExitSynchScene
tPlayerAnimTest = tPlayerAnimLoop
eTestedTask = sPassedScene.eLoopTask
ELSE
tPlayerAnimTest = tPlayerAnimOut
eTestedTask = sPassedScene.eOutTask
ENDIF
SWITCH eTestedTask
CASE SCRIPT_TASK_PLAY_ANIM
str1 += ("SCRIPT_TASK_PLAY_ANIM")
// ANIMATION_FLAGS playerLoopFlag, playerOutFlag
// playerLoopFlag = AF_DEFAULT
// playerOutFlag = AF_DEFAULT
// IF GET_PLAYER_ANIM_FOR_TIMETABLE_SCENE(sPassedScene.sScene.eScene,
// tPlayerAnimDict, tPlayerAnimTest, tPlayerAnimOut,
// playerLoopFlag, playerOutFlag)
str2 += ("\"")
str2 += GET_STRING_FROM_STRING(tPlayerAnimDict,
GET_LENGTH_OF_LITERAL_STRING("SWITCH@"),
GET_LENGTH_OF_LITERAL_STRING(tPlayerAnimDict))
str2 += ("\"")
str3 += ("\"")
str3 += (tPlayerAnimTest)
str3 += ("\"")
// str4 += "eloop: "
// str4 += ENUM_TO_INT(playerLoopFlag)
// str4 += ", eOut: "
// str4 += ENUM_TO_INT(playerOutFlag)
FLOAT fPlayerAnimCoord_groundZ, fAnimPos_heightDiff
VECTOR vPlayerAnimCoord
fPlayerAnimCoord_groundZ = 0.0
vPlayerAnimCoord = vCreateCoords
IF GET_GROUND_Z_FOR_3D_COORD(vPlayerAnimCoord+<<0,0,1>>, fPlayerAnimCoord_groundZ)
fAnimPos_heightDiff = (vPlayerAnimCoord.z) - fPlayerAnimCoord_groundZ
TEXT_LABEL_63 strAnim
strAnim = "_z:"
strAnim += GET_STRING_FROM_FLOAT(fAnimPos_heightDiff)
IF fAnimPos_heightDiff > 0
DrawDebugSceneTextWithOffset(strAnim, vCreateCoords, 0, HUD_COLOUR_RED)
ELIF fAnimPos_heightDiff < 0
DrawDebugSceneTextWithOffset(strAnim, vCreateCoords, 0, HUD_COLOUR_GREEN)
ELSE
DrawDebugSceneTextWithOffset(strAnim, vCreateCoords, 0, HUD_COLOUR_BLUE)
ENDIF
ENDIF
// IF bDisableLegIk
// IF NOT IS_BITMASK_ENUM_AS_ENUM_SET(playerLoopFlag, AF_DISABLE_LEG_IK)
// SET_BITMASK_ENUM_AS_ENUM(playerLoopFlag, AF_DISABLE_LEG_IK)
// CLEAR_PED_TASKS(PLAYER_PED_ID())
// ENDIF
// ELSE
// IF IS_BITMASK_ENUM_AS_ENUM_SET(playerLoopFlag, AF_DISABLE_LEG_IK)
// CLEAR_BITMASK_ENUM_AS_ENUM(playerLoopFlag, AF_DISABLE_LEG_IK)
// CLEAR_PED_TASKS(PLAYER_PED_ID())
// ENDIF
// ENDIF
IF bOverridePhysics
IF NOT IS_BITMASK_ENUM_AS_ENUM_SET(playerLoopFlag, AF_OVERRIDE_PHYSICS)
SET_BITMASK_ENUM_AS_ENUM(playerLoopFlag, AF_OVERRIDE_PHYSICS)
CLEAR_PED_TASKS(PLAYER_PED_ID())
ENDIF
ELSE
IF IS_BITMASK_ENUM_AS_ENUM_SET(playerLoopFlag, AF_OVERRIDE_PHYSICS)
CLEAR_BITMASK_ENUM_AS_ENUM(playerLoopFlag, AF_OVERRIDE_PHYSICS)
CLEAR_PED_TASKS(PLAYER_PED_ID())
ENDIF
ENDIF
IF bTurnOffCollision
IF NOT IS_BITMASK_ENUM_AS_ENUM_SET(playerLoopFlag, AF_TURN_OFF_COLLISION)
SET_BITMASK_ENUM_AS_ENUM(playerLoopFlag, AF_TURN_OFF_COLLISION)
CLEAR_PED_TASKS(PLAYER_PED_ID())
ENDIF
ELSE
IF IS_BITMASK_ENUM_AS_ENUM_SET(playerLoopFlag, AF_TURN_OFF_COLLISION)
CLEAR_BITMASK_ENUM_AS_ENUM(playerLoopFlag, AF_TURN_OFF_COLLISION)
CLEAR_PED_TASKS(PLAYER_PED_ID())
ENDIF
ENDIF
IF bExtractInitialOffset
IF NOT IS_BITMASK_ENUM_AS_ENUM_SET(playerLoopFlag, AF_EXTRACT_INITIAL_OFFSET)
SET_BITMASK_ENUM_AS_ENUM(playerLoopFlag, AF_EXTRACT_INITIAL_OFFSET)
CLEAR_PED_TASKS(PLAYER_PED_ID())
ENDIF
ELSE
IF IS_BITMASK_ENUM_AS_ENUM_SET(playerLoopFlag, AF_EXTRACT_INITIAL_OFFSET)
CLEAR_BITMASK_ENUM_AS_ENUM(playerLoopFlag, AF_EXTRACT_INITIAL_OFFSET)
CLEAR_PED_TASKS(PLAYER_PED_ID())
ENDIF
ENDIF
IF bNotInterruptable
IF NOT IS_BITMASK_ENUM_AS_ENUM_SET(playerLoopFlag, AF_NOT_INTERRUPTABLE)
SET_BITMASK_ENUM_AS_ENUM(playerLoopFlag, AF_NOT_INTERRUPTABLE)
CLEAR_PED_TASKS(PLAYER_PED_ID())
ENDIF
ELSE
IF IS_BITMASK_ENUM_AS_ENUM_SET(playerLoopFlag, AF_NOT_INTERRUPTABLE)
CLEAR_BITMASK_ENUM_AS_ENUM(playerLoopFlag, AF_NOT_INTERRUPTABLE)
CLEAR_PED_TASKS(PLAYER_PED_ID())
ENDIF
ENDIF
IF bLooping
IF NOT IS_BITMASK_ENUM_AS_ENUM_SET(playerLoopFlag, AF_LOOPING)
SET_BITMASK_ENUM_AS_ENUM(playerLoopFlag, AF_LOOPING)
CLEAR_PED_TASKS(PLAYER_PED_ID())
ENDIF
ELSE
IF IS_BITMASK_ENUM_AS_ENUM_SET(playerLoopFlag, AF_LOOPING)
CLEAR_BITMASK_ENUM_AS_ENUM(playerLoopFlag, AF_LOOPING)
CLEAR_PED_TASKS(PLAYER_PED_ID())
ENDIF
ENDIF
fCreateHead = vCreateRot.z
IF NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), tPlayerAnimDict, tPlayerAnimTest)
vStoredCoords = vCreateCoords
fStoredHead = fCreateHead
SET_ENTITY_COORDS(PLAYER_PED_ID(), vCreateCoords)
SET_ENTITY_HEADING(PLAYER_PED_ID(), fCreateHead)
TASK_PLAY_ANIM(PLAYER_PED_ID(), tPlayerAnimDict, tPlayerAnimTest,
INSTANT_BLEND_IN, NORMAL_BLEND_OUT, -1,
playerLoopFlag)
ELSE
IF NOT ARE_VECTORS_EQUAL(vStoredCoords, vCreateCoords)
OR (fStoredHead <> (fCreateHead))
CLEAR_PED_TASKS(PLAYER_PED_ID())
CLEAR_AREA(vCreateCoords, 4.0, TRUE)
ENDIF
ENDIF
// ELSE
// str2 += ("none")
//
// ENDIF
BREAK
CASE SCRIPT_TASK_SYNCHRONIZED_SCENE
str1 += ("SCRIPT_TASK_SYNCHRONIZED_SCENE")
IF NOT bExitSynchScene
str3 += ("Loop_SynchSceneID")
IF IS_SYNCHRONIZED_SCENE_RUNNING(g_iPlayer_Timetable_Exit_SynchSceneID)
DETACH_SYNCHRONIZED_SCENE(g_iPlayer_Timetable_Exit_SynchSceneID)
g_iPlayer_Timetable_Exit_SynchSceneID = -1
ENDIF
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(g_iPlayer_Timetable_Loop_SynchSceneID)
TEXT_LABEL_63 tPlayerSceneSyncAnimDict, tPlayerSceneSyncAnimLoop, tPlayerSceneSyncAnimOut
tPlayerSceneSyncAnimDict = ""
tPlayerSceneSyncAnimLoop = ""
tPlayerSceneSyncAnimOut = ""
ANIMATION_FLAGS playerSyncLoopFlag, playerSyncOutFlag
//enumPlayerSceneAnimProgress ePlayerSceneAnimProgress
playerSyncLoopFlag = AF_DEFAULT
playerSyncOutFlag = AF_DEFAULT
// ePlayerSceneAnimProgress = MAX_PLAYER_SCENE_ANIM_PROGRESS
IF GET_PLAYER_ANIM_FOR_TIMETABLE_SCENE(sPassedScene.sScene.eScene,
tPlayerSceneSyncAnimDict, tPlayerSceneSyncAnimLoop, tPlayerSceneSyncAnimOut,
playerSyncLoopFlag, playerSyncOutFlag) //, ePlayerSceneAnimProgress)
// SetPedFromVehicleIntoSynchedScene(PED_INDEX PedIndex, VEHICLE_INDEX VehicleIndex)
IF (sPassedScene.eVehState = PTVS_2_playerInVehicle)
IF NOT IS_ENTITY_DEAD(scene_veh)
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), scene_veh)
SET_ENTITY_COORDS(PLAYER_PED_ID(), GET_ENTITY_COORDS(scene_veh))
SET_ENTITY_HEADING(PLAYER_PED_ID(), GET_ENTITY_HEADING(scene_veh))
// RETURN TRUE
ENDIF
ENDIF
ENDIF
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
ELSE
CLEAR_PED_TASKS(PLAYER_PED_ID())
ENDIF
g_iPlayer_Timetable_Loop_SynchSceneID = CREATE_SYNCHRONIZED_SCENE(vCreateCoords, vCreateRot)
SET_SYNCHRONIZED_SCENE_LOOPED(g_iPlayer_Timetable_Loop_SynchSceneID, TRUE)
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), g_iPlayer_Timetable_Loop_SynchSceneID,
tPlayerSceneSyncAnimDict, tPlayerSceneSyncAnimLoop,
NORMAL_BLEND_IN, INSTANT_BLEND_OUT)
IF NOT IS_ENTITY_DEAD(scene_veh)
TEXT_LABEL_63 tPlayerSceneSyncAnimVehLoop
tPlayerSceneSyncAnimVehLoop = ""
IF GET_SYNCHRONIZED_VEH_FOR_TIMETABLE_LOOP_SCENE(sPassedScene.sScene.eScene, tPlayerSceneSyncAnimVehLoop)
PLAY_SYNCHRONIZED_ENTITY_ANIM(scene_veh,
g_iPlayer_Timetable_Loop_SynchSceneID,
tPlayerSceneSyncAnimVehLoop, tPlayerSceneSyncAnimDict,
NORMAL_BLEND_IN)
vVehCoordsOffset = GET_ENTITY_COORDS(scene_veh) - vCreateCoords
fVehHeadOffset = GET_ENTITY_HEADING(scene_veh) - fCreateHead
IF fVehHeadOffset > 180.0
fVehHeadOffset -= 360.0
ENDIF
IF fVehHeadOffset < -180.0
fVehHeadOffset += 360.0
ENDIF
ENDIF
ENDIF
TEXT_LABEL_63 tPlayerSceneSyncLoopCam
tPlayerSceneSyncLoopCam = ""
IF GET_SYNCHRONIZED_CAM_FOR_TIMETABLE_LOOP_SCENE(sPassedScene.sScene.eScene, tPlayerSceneSyncLoopCam)
IF DOES_CAM_EXIST(scene_cam)
DESTROY_CAM(scene_cam)
ENDIF
scene_cam = CREATE_CAM("DEFAULT_ANIMATED_CAMERA", TRUE)
PLAY_SYNCHRONIZED_CAM_ANIM(scene_cam,
g_iPlayer_Timetable_Loop_SynchSceneID,
tPlayerSceneSyncLoopCam, tPlayerSceneSyncAnimDict)
ELSE
IF DOES_CAM_EXIST(scene_cam)
DESTROY_CAM(scene_cam)
ENDIF
scene_cam = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA",
vecCamEndPos, vecCamEndRot,
GET_GAMEPLAY_CAM_FOV())
ENDIF
ENDIF
ELSE
SET_SYNCHRONIZED_SCENE_ORIGIN(g_iPlayer_Timetable_Loop_SynchSceneID, vCreateCoords, vCreateRot)
ENDIF
ELSE
str3 += ("Exit_SynchSceneID ")
IF IS_SYNCHRONIZED_SCENE_RUNNING(g_iPlayer_Timetable_Loop_SynchSceneID)
DETACH_SYNCHRONIZED_SCENE(g_iPlayer_Timetable_Loop_SynchSceneID)
g_iPlayer_Timetable_Loop_SynchSceneID = -1
ENDIF
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(g_iPlayer_Timetable_Exit_SynchSceneID)
TEXT_LABEL_63 tPlayerSceneSyncAnimDict, tPlayerSceneSyncAnimLoop, tPlayerSceneSyncAnimOut
tPlayerSceneSyncAnimDict = ""
tPlayerSceneSyncAnimLoop = ""
tPlayerSceneSyncAnimOut = ""
ANIMATION_FLAGS playerSyncexitFlag, playerSyncOutFlag
//enumPlayerSceneAnimProgress ePlayerSceneAnimProgress
playerSyncexitFlag = AF_DEFAULT
playerSyncOutFlag = AF_DEFAULT
//ePlayerSceneAnimProgress = MAX_PLAYER_SCENE_ANIM_PROGRESS
IF GET_PLAYER_ANIM_FOR_TIMETABLE_SCENE(sPassedScene.sScene.eScene,
tPlayerSceneSyncAnimDict, tPlayerSceneSyncAnimLoop, tPlayerSceneSyncAnimOut,
playerSyncexitFlag, playerSyncOutFlag) //, ePlayerSceneAnimProgress)
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
ELSE
CLEAR_PED_TASKS(PLAYER_PED_ID())
ENDIF
g_iPlayer_Timetable_Exit_SynchSceneID = CREATE_SYNCHRONIZED_SCENE(vCreateCoords, vCreateRot)
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), g_iPlayer_Timetable_Exit_SynchSceneID,
tPlayerSceneSyncAnimDict, tPlayerSceneSyncAnimOut,
NORMAL_BLEND_IN, INSTANT_BLEND_OUT)
SET_SYNCHRONIZED_SCENE_LOOPED(g_iPlayer_Timetable_Exit_SynchSceneID, FALSE)
SET_SYNCHRONIZED_SCENE_RATE(g_iPlayer_Timetable_Exit_SynchSceneID, 1.0)
IF NOT IS_ENTITY_DEAD(scene_veh)
TEXT_LABEL_63 tPlayerSceneSyncAnimVehExit
tPlayerSceneSyncAnimVehExit = ""
IF GET_SYNCHRONIZED_VEH_FOR_TIMETABLE_EXIT_SCENE(sPassedScene.sScene.eScene, tPlayerSceneSyncAnimVehExit)
PLAY_SYNCHRONIZED_ENTITY_ANIM(scene_veh,
g_iPlayer_Timetable_Exit_SynchSceneID,
tPlayerSceneSyncAnimVehExit, tPlayerSceneSyncAnimDict,
NORMAL_BLEND_IN)
vVehCoordsOffset = GET_ENTITY_COORDS(scene_veh) - vCreateCoords
fVehHeadOffset = GET_ENTITY_HEADING(scene_veh) - fCreateHead
IF fVehHeadOffset > 180.0
fVehHeadOffset -= 360.0
ENDIF
IF fVehHeadOffset < -180.0
fVehHeadOffset += 360.0
ENDIF
ENDIF
ENDIF
TEXT_LABEL_63 tPlayerSceneSyncExitCam, tPlayerSceneEstabShotSuffix
tPlayerSceneSyncExitCam = ""
tPlayerSceneEstabShotSuffix = ""
IF GET_SYNCHRONIZED_CAM_FOR_TIMETABLE_EXIT_SCENE(sPassedScene.sScene.eScene, tPlayerSceneSyncExitCam, tPlayerSceneEstabShotSuffix)
IF DOES_CAM_EXIST(scene_cam)
DESTROY_CAM(scene_cam)
ENDIF
scene_cam = CREATE_CAM("DEFAULT_ANIMATED_CAMERA", TRUE)
PLAY_SYNCHRONIZED_CAM_ANIM(scene_cam,
g_iPlayer_Timetable_Exit_SynchSceneID,
tPlayerSceneSyncExitCam, tPlayerSceneSyncAnimDict)
ELSE
IF DOES_CAM_EXIST(scene_cam)
DESTROY_CAM(scene_cam)
ENDIF
scene_cam = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA",
vecCamEndPos, vecCamEndRot,
GET_GAMEPLAY_CAM_FOV())
ENDIF
ENDIF
TEXT_LABEL_63 tPlayerDoorSyncAnimL, tPlayerDoorSyncAnimR
tPlayerDoorSyncAnimL = ""
tPlayerDoorSyncAnimR = ""
IF GET_SYNCHRONIZED_DOOR_FOR_TIMETABLE_EXIT_SCENE(sPassedScene.sScene.eScene, tPlayerDoorSyncAnimL, tPlayerDoorSyncAnimR)
IF NOT IS_STRING_NULL_OR_EMPTY(tPlayerDoorSyncAnimL)
IF DOES_ENTITY_EXIST(player_door_l)
PLAY_SYNCHRONIZED_ENTITY_ANIM(player_door_l,
g_iPlayer_Timetable_Exit_SynchSceneID,
tPlayerDoorSyncAnimL, tPlayerSceneSyncAnimDict,
NORMAL_BLEND_IN, NORMAL_BLEND_OUT)
ENDIF
ENDIF
IF NOT IS_STRING_NULL_OR_EMPTY(tPlayerDoorSyncAnimR)
IF DOES_ENTITY_EXIST(player_door_r)
PLAY_SYNCHRONIZED_ENTITY_ANIM(player_door_r,
g_iPlayer_Timetable_Exit_SynchSceneID,
tPlayerDoorSyncAnimR, tPlayerSceneSyncAnimDict,
NORMAL_BLEND_IN, NORMAL_BLEND_OUT)
ENDIF
ENDIF
ENDIF
ELSE
FLOAT fExitSynchScene_phase
fExitSynchScene_phase = GET_SYNCHRONIZED_SCENE_PHASE(g_iPlayer_Timetable_Exit_SynchSceneID)
IF fExitSynchScene_phase >= 1.0
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_P)
TEXT_LABEL_63 tPlayerSceneSyncAnimDict, tPlayerSceneSyncAnimLoop, tPlayerSceneSyncAnimOut
tPlayerSceneSyncAnimDict = ""
tPlayerSceneSyncAnimLoop = ""
tPlayerSceneSyncAnimOut = ""
ANIMATION_FLAGS playerSyncexitFlag, playerSyncOutFlag
playerSyncexitFlag = AF_DEFAULT
playerSyncOutFlag = AF_DEFAULT
IF GET_PLAYER_ANIM_FOR_TIMETABLE_SCENE(sPassedScene.sScene.eScene,
tPlayerSceneSyncAnimDict, tPlayerSceneSyncAnimLoop, tPlayerSceneSyncAnimOut,
playerSyncexitFlag, playerSyncOutFlag) //, ePlayerSceneAnimProgress)
IF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), tPlayerSceneSyncAnimDict, tPlayerSceneSyncAnimOut, ANIM_SYNCED_SCENE)
CLEAR_PED_TASKS(PLAYER_PED_ID())
PRINTSTRING("testA ")
ELSE
TASK_SYNCHRONIZED_SCENE(PLAYER_PED_ID(), g_iPlayer_Timetable_Exit_SynchSceneID,
tPlayerSceneSyncAnimDict, tPlayerSceneSyncAnimOut,
NORMAL_BLEND_IN, INSTANT_BLEND_OUT)
PRINTSTRING("testB ")
ENDIF
VECTOR vPedBoneCoord
FLOAT fPedBoneCoord_groundZ, fSyncPos_heightDiff
fPedBoneCoord_groundZ = 0.0
vPedBoneCoord = GET_PED_BONE_COORDS(PLAYER_PED_ID(), BONETAG_L_toe, <<0,0,0>>)
IF GET_GROUND_Z_FOR_3D_COORD(vPedBoneCoord, fPedBoneCoord_groundZ)
fSyncPos_heightDiff = (vPedBoneCoord.z) - fPedBoneCoord_groundZ
PRINTSTRING(", L_toe_z: ")
PRINTFLOAT(fSyncPos_heightDiff)
ENDIF
fPedBoneCoord_groundZ = 0.0
vPedBoneCoord = GET_PED_BONE_COORDS(PLAYER_PED_ID(), BONETAG_R_toe, <<0,0,0>>)
IF GET_GROUND_Z_FOR_3D_COORD(vPedBoneCoord, fPedBoneCoord_groundZ)
fSyncPos_heightDiff = (vPedBoneCoord.z) - fPedBoneCoord_groundZ
PRINTSTRING(", R_toe_z: ")
PRINTFLOAT(fSyncPos_heightDiff)
ENDIF
PRINTNL()
ENDIF
ENDIF
ENDIF
FLOAT fPlayerCoord_groundZ, fSyncPos_heightDiff
VECTOR vPlayerCoord
fPlayerCoord_groundZ = 0.0
vPlayerCoord = GET_ENTITY_COORDS(PLAYER_PED_ID(), FALSE)
IF GET_GROUND_Z_FOR_3D_COORD(vPlayerCoord, fPlayerCoord_groundZ)
fSyncPos_heightDiff = (vPlayerCoord.z - 1) - fPlayerCoord_groundZ
str1 += "_z:"
str1 += GET_STRING_FROM_FLOAT(fSyncPos_heightDiff)
ENDIF
str3 += GET_STRING_FROM_FLOAT(fExitSynchScene_phase)
SET_SYNCHRONIZED_SCENE_ORIGIN(g_iPlayer_Timetable_Exit_SynchSceneID, vCreateCoords, vCreateRot)
str4 += "L/R: change phase, UP: toggle rate"
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_UP)
IF GET_SYNCHRONIZED_SCENE_RATE(g_iPlayer_Timetable_Exit_SynchSceneID) <= 0
SET_SYNCHRONIZED_SCENE_RATE(g_iPlayer_Timetable_Exit_SynchSceneID, 1.0)
ELSE
SET_SYNCHRONIZED_SCENE_RATE(g_iPlayer_Timetable_Exit_SynchSceneID, 0.0)
ENDIF
ENDIF
IF IS_KEYBOARD_KEY_PRESSED(KEY_LEFT)
fExitSynchScene_phase -= 0.01
IF fExitSynchScene_phase <= 0
fExitSynchScene_phase = 0
ENDIF
SET_SYNCHRONIZED_SCENE_PHASE(g_iPlayer_Timetable_Exit_SynchSceneID, fExitSynchScene_phase)
ELIF IS_KEYBOARD_KEY_PRESSED(KEY_RIGHT)
fExitSynchScene_phase += 0.01
IF fExitSynchScene_phase >= 1
fExitSynchScene_phase = 1
ENDIF
SET_SYNCHRONIZED_SCENE_PHASE(g_iPlayer_Timetable_Exit_SynchSceneID, fExitSynchScene_phase)
ENDIF
IF (ePropModel = PROP_CS_BEER_BOT_01)
REQUEST_PTFX_ASSET()
IF HAS_PTFX_ASSET_LOADED()
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_P)
START_PARTICLE_FX_NON_LOOPED_ON_PED_BONE("scr_pts_glass_bottle",
PLAYER_PED_ID(), <<0,0,0>>, <<0,0,0>>, BONETAG_PH_L_HAND)
PRINTSTRING("START_PARTICLE_FX_NON_LOOPED_ON_PED_BONE(\"scr_pts_glass_bottle\", PLAYER_PED_ID(), <<0,0,0>>, <<0,0,0>>, BONETAG_PH_L_HAND)")
PRINTNL()
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
CASE SCRIPT_TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING
str1 += ("SCRIPT_TASK_VEHICLE_FOLLOW_WAYPOINT_RECORDING")
IF NOT IS_ENTITY_DEAD(scene_veh)
IF NOT IS_PLAYBACK_GOING_ON_FOR_VEHICLE(scene_veh)
REQUEST_VEHICLE_RECORDING(iRecording_num, tRecording_name)
IF NOT HAS_VEHICLE_RECORDING_BEEN_LOADED(iRecording_num, tRecording_name)
REQUEST_VEHICLE_RECORDING(iRecording_num, tRecording_name)
ELSE
FREEZE_ENTITY_POSITION(scene_veh, FALSE)
START_PLAYBACK_RECORDED_VEHICLE(scene_veh, iRecording_num, tRecording_name)
DISPLAY_PLAYBACK_RECORDED_VEHICLE(scene_veh, RDM_WHOLELINE)
ENDIF
ELSE
SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(scene_veh, fRecording_skip - GET_TIME_POSITION_IN_RECORDING(scene_veh))
VECTOR vRecording_start, vRecording_skip
vRecording_start = GET_POSITION_OF_VEHICLE_RECORDING_AT_TIME(iRecording_num, fRecording_start, tRecording_name)
vRecording_skip = GET_POSITION_OF_VEHICLE_RECORDING_AT_TIME(iRecording_num, fRecording_skip, tRecording_name)
DrawDebugSceneSphere(vRecording_start, 1.0, HUD_COLOUR_RED, 0.5)
DrawDebugSceneSphere(vRecording_skip, 1.0, HUD_COLOUR_GREEN, 0.5)
ENDIF
ENDIF
str2 += ("tRecording_name: ")str2 += (tRecording_name)
IF iRecording_num < 100 str2 += ("0") ENDIF
IF iRecording_num < 10 str2 += ("0") ENDIF
str2 += (iRecording_num)
str3 += ("fRecording_start: ") str3 += GET_STRING_FROM_FLOAT(fRecording_start)
str4 += ("fRecording_skip: ") str4 += GET_STRING_FROM_FLOAT(fRecording_skip)
// str5 += ("fSpeed_switch: ") str5 += GET_STRING_FROM_FLOAT(fSpeed_switch)
// str6 += ("fSpeed_exit: ") str6 += GET_STRING_FROM_FLOAT(fSpeed_exit)
BREAK
DEFAULT
fCreateHead = vCreateRot.z
FLOAT fHeadingOffset
fHeadingOffset = 0.0
IF eTestedTask = SCRIPT_TASK_STAND_STILL
str1 += ("SCRIPT_TASK_STAND_STILL")
fHeadingOffset = 180
ELIF eTestedTask = SCRIPT_TASK_GO_STRAIGHT_TO_COORD
str1 += ("SCRIPT_TASK_GO_STRAIGHT_TO_COORD")
fHeadingOffset = 180
VECTOR vWalkToCoord
vWalkToCoord = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PLAYER_PED_ID(), <<0,-5,0>>)
SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(TRUE)
DRAW_DEBUG_LINE(vWalkToCoord, GET_ENTITY_COORDS(PLAYER_PED_ID()))
DRAW_DEBUG_SPHERE(vWalkToCoord, 0.5)
ELIF eTestedTask = SCRIPT_TASK_AIM_GUN_AT_ENTITY
str1 += ("SCRIPT_TASK_AIM_GUN_AT_ENTITY")
fHeadingOffset = 180
ELIF eTestedTask = SCRIPT_TASK_ENTER_VEHICLE
str1 += ("SCRIPT_TASK_ENTER_VEHICLE")
fHeadingOffset = 180
ELIF eTestedTask = SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD
IF IS_VEHICLE_DRIVEABLE(scene_veh)
str1 += ("SCRIPT_TASK_VEHICLE_DRIVE_TO_COORD")
VECTOR vDriveToCoord
vDriveToCoord = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(scene_veh, vSceneVeh_driveOffset)
SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(TRUE)
DRAW_DEBUG_LINE(vDriveToCoord, GET_ENTITY_COORDS(scene_veh))
DRAW_DEBUG_SPHERE(vDriveToCoord, 1.0)
ELSE
str1 += ("SCRIPT_TASK_DEAD_VEHICLE_DRIVE_TO_COORD")
ENDIF
ELSE
str1 += (Get_String_From_Script_Task_Name(eTestedTask))
str1 += ("_LOOP")
ENDIF
SET_ENTITY_COORDS(PLAYER_PED_ID(), vCreateCoords)
SET_ENTITY_HEADING(PLAYER_PED_ID(), fCreateHead + fHeadingOffset)
IF sPassedScene.eVehState = PTVS_2_playerInVehicle
IF IS_VEHICLE_DRIVEABLE(scene_veh)
IF NOT IS_PED_IN_VEHICLE(PLAYER_PED_ID(), scene_veh)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), scene_veh)
ELSE
VECTOR vSceneVeh_driveCoord
vSceneVeh_driveCoord = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(scene_veh, vSceneVeh_driveOffset)
SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(TRUE)
DRAW_DEBUG_SPHERE(vSceneVeh_driveCoord, 1.0)
ENDIF
ENDIF
ENDIF
BREAK
ENDSWITCH
DrawLiteralSceneString(Get_String_From_Ped_Request_Scene_Enum(sPassedScene.sScene.eScene), 0)
DrawLiteralSceneString(str1, 1)
DrawLiteralSceneString(str2, 2)
DrawLiteralSceneString(str3, 3)
DrawLiteralSceneString(str4, 4)
ENDIF
IF NOT IS_PED_INJURED(g_pScene_buddy)
IF sPassedScene.eVehState <> PTVS_2_playerInVehicle
SET_ENTITY_COORDS(g_pScene_buddy, vCreateCoords+sPassedScene.vSceneBuddyCoordOffset)
SET_ENTITY_HEADING(g_pScene_buddy, fCreateHead+sPassedScene.fSceneBuddyHeadOffset)
IF (sPassedScene.eBuddyLoopTask = script_task_play_anim)
OR (sPassedScene.eBuddyOutTask = script_task_play_anim)
ANIMATION_FLAGS buddyAnimLoopFlag, buddyAnimOutFlag
buddyAnimLoopFlag = AF_DEFAULT
buddyAnimOutFlag = AF_DEFAULT
IF GET_BUDDY_ANIM_FOR_TIMETABLE_SCENE(sPassedScene.sScene.eScene,
tSceneBuddyAnimDict, tSceneBuddyAnimLoop, tSceneBuddyAnimOut,
buddyAnimLoopFlag, buddyAnimOutFlag)
IF NOT IS_ENTITY_PLAYING_ANIM(g_pScene_buddy, tSceneBuddyAnimDict, tSceneBuddyAnimLoop)
TASK_PLAY_ANIM_ADVANCED(g_pScene_buddy, tSceneBuddyAnimDict, tSceneBuddyAnimLoop,
vCreateCoords+sPassedScene.vSceneBuddyCoordOffset, <<0,0,fCreateHead+sPassedScene.fSceneBuddyHeadOffset>>,
INSTANT_BLEND_IN, NORMAL_BLEND_OUT, -1,
buddyAnimLoopFlag)
sPassedScene.vSceneBuddyCoordOffset = GET_ENTITY_COORDS(g_pScene_buddy) - vCreateCoords
sPassedScene.fSceneBuddyHeadOffset = GET_ENTITY_HEADING(g_pScene_buddy) - fCreateHead
IF sPassedScene.fSceneBuddyHeadOffset > 180.0
sPassedScene.fSceneBuddyHeadOffset -= 360.0
ENDIF
IF sPassedScene.fSceneBuddyHeadOffset < -180.0
sPassedScene.fSceneBuddyHeadOffset += 360.0
ENDIF
ENDIF
ENDIF
ELIF (sPassedScene.eBuddyLoopTask = SCRIPT_TASK_SYNCHRONIZED_SCENE)
OR (sPassedScene.eBuddyOutTask = SCRIPT_TASK_SYNCHRONIZED_SCENE)
IF IS_SYNCHRONIZED_SCENE_RUNNING(g_iPlayer_Timetable_Loop_SynchSceneID)
TEXT_LABEL_63 tBuddySceneSyncAnimDict, tBuddySceneSyncAnimLoop, tBuddySceneSyncAnimOut
tBuddySceneSyncAnimDict = ""
tBuddySceneSyncAnimLoop = ""
tBuddySceneSyncAnimOut = ""
ANIMATION_FLAGS buddySyncLoopFlag, buddySyncOutFlag
buddySyncLoopFlag = AF_DEFAULT
buddySyncOutFlag = AF_DEFAULT
IF GET_BUDDY_ANIM_FOR_TIMETABLE_SCENE(sPassedScene.sScene.eScene,
tBuddySceneSyncAnimDict, tBuddySceneSyncAnimLoop, tBuddySceneSyncAnimOut,
buddySyncLoopFlag, buddySyncOutFlag)
IF NOT IS_ENTITY_PLAYING_ANIM(g_pScene_buddy, tBuddySceneSyncAnimDict, tBuddySceneSyncAnimLoop, ANIM_SYNCED_SCENE)
TASK_SYNCHRONIZED_SCENE(g_pScene_buddy, g_iPlayer_Timetable_Loop_SynchSceneID,
tBuddySceneSyncAnimDict, tBuddySceneSyncAnimLoop,
NORMAL_BLEND_IN, INSTANT_BLEND_OUT)
sPassedScene.vSceneBuddyCoordOffset = GET_ENTITY_COORDS(g_pScene_buddy) - vCreateCoords
sPassedScene.fSceneBuddyHeadOffset = GET_ENTITY_HEADING(g_pScene_buddy) - fCreateHead
IF sPassedScene.fSceneBuddyHeadOffset > 180.0
sPassedScene.fSceneBuddyHeadOffset -= 360.0
ENDIF
IF sPassedScene.fSceneBuddyHeadOffset < -180.0
sPassedScene.fSceneBuddyHeadOffset += 360.0
ENDIF
ENDIF
ENDIF
ELIF IS_SYNCHRONIZED_SCENE_RUNNING(g_iPlayer_Timetable_Exit_SynchSceneID)
TEXT_LABEL_63 tBuddySceneSyncAnimDict, tBuddySceneSyncAnimLoop, tBuddySceneSyncAnimOut
tBuddySceneSyncAnimDict = ""
tBuddySceneSyncAnimLoop = ""
tBuddySceneSyncAnimOut = ""
ANIMATION_FLAGS buddySyncexitFlag, buddySyncOutFlag
buddySyncexitFlag = AF_DEFAULT
buddySyncOutFlag = AF_DEFAULT
IF GET_BUDDY_ANIM_FOR_TIMETABLE_SCENE(sPassedScene.sScene.eScene,
tBuddySceneSyncAnimDict, tBuddySceneSyncAnimLoop, tBuddySceneSyncAnimOut,
buddySyncexitFlag, buddySyncOutFlag)
IF NOT IS_ENTITY_PLAYING_ANIM(g_pScene_buddy, tBuddySceneSyncAnimDict, tBuddySceneSyncAnimOut, ANIM_SYNCED_SCENE)
TASK_SYNCHRONIZED_SCENE(g_pScene_buddy, g_iPlayer_Timetable_Exit_SynchSceneID,
tBuddySceneSyncAnimDict, tBuddySceneSyncAnimOut,
NORMAL_BLEND_IN, INSTANT_BLEND_OUT)
sPassedScene.vSceneBuddyCoordOffset = GET_ENTITY_COORDS(g_pScene_buddy) - vCreateCoords
sPassedScene.fSceneBuddyHeadOffset = GET_ENTITY_HEADING(g_pScene_buddy) - fCreateHead
IF sPassedScene.fSceneBuddyHeadOffset > 180.0
sPassedScene.fSceneBuddyHeadOffset -= 360.0
ENDIF
IF sPassedScene.fSceneBuddyHeadOffset < -180.0
sPassedScene.fSceneBuddyHeadOffset += 360.0
ENDIF
ELSE
FLOAT fBuddyCoord_groundZ, fAnimPos_heightDiff
VECTOR vBuddyCoord
fBuddyCoord_groundZ = 0.0
vBuddyCoord = GET_ENTITY_COORDS(g_pScene_buddy, FALSE)
IF GET_GROUND_Z_FOR_3D_COORD(vBuddyCoord, fBuddyCoord_groundZ)
fAnimPos_heightDiff = (vBuddyCoord.z - 1) - fBuddyCoord_groundZ
TEXT_LABEL_63 strBuddy
strBuddy = "_z:"
strBuddy += GET_STRING_FROM_FLOAT(fAnimPos_heightDiff)
DrawDebugSceneTextWithOffset(strBuddy, vBuddyCoord, 0, HUD_COLOUR_RED)
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
IF IS_VEHICLE_DRIVEABLE(scene_veh)
fCreateHead = vCreateRot.z
TEXT_LABEL_63 tPlayerSceneSyncAnimVehTemp
tPlayerSceneSyncAnimVehTemp = ""
IF NOT (IS_SYNCHRONIZED_SCENE_RUNNING(g_iPlayer_Timetable_Loop_SynchSceneID) AND GET_SYNCHRONIZED_VEH_FOR_TIMETABLE_LOOP_SCENE(sPassedScene.sScene.eScene, tPlayerSceneSyncAnimVehTemp))
AND NOT (IS_SYNCHRONIZED_SCENE_RUNNING(g_iPlayer_Timetable_exit_SynchSceneID) AND GET_SYNCHRONIZED_VEH_FOR_TIMETABLE_exit_SCENE(sPassedScene.sScene.eScene, tPlayerSceneSyncAnimVehTemp))
SET_ENTITY_COORDS(scene_veh, vCreateCoords+vVehCoordsOffset)
SET_ENTITY_HEADING(scene_veh, fCreateHead+fVehHeadOffset)
ENDIF
IF bVehOffsetFromPlayerGivenWorldCoords
VECTOR vVehOffsetFromPlayerGivenWorldCoords
vVehOffsetFromPlayerGivenWorldCoords = GET_OFFSET_FROM_ENTITY_GIVEN_WORLD_COORDS(PLAYER_PED_ID(), vCreateCoords+vVehCoordsOffset)
PRINTSTRING("vVehOffsetFromPlayerGivenWorldCoords: ")
PRINTVECTOR(vVehOffsetFromPlayerGivenWorldCoords)
PRINTNL()
ENDIF
IF bVehRotationProperly
IF IS_SYNCHRONIZED_SCENE_RUNNING(g_iPlayer_Timetable_Loop_SynchSceneID)
DETACH_SYNCHRONIZED_SCENE(g_iPlayer_Timetable_Loop_SynchSceneID)
g_iPlayer_Timetable_Loop_SynchSceneID = -1
ELIF IS_SYNCHRONIZED_SCENE_RUNNING(g_iPlayer_Timetable_Exit_SynchSceneID)
DETACH_SYNCHRONIZED_SCENE(g_iPlayer_Timetable_Exit_SynchSceneID)
g_iPlayer_Timetable_Exit_SynchSceneID = -1
ENDIF
SET_VEHICLE_ON_GROUND_PROPERLY(scene_veh)
vCreateRot = GET_ENTITY_ROTATION(scene_veh) - <<0,0,fVehHeadOffset>>
vCreateCoords = GET_ENTITY_COORDS(scene_veh) - vVehCoordsOffset
VECTOR vCreateDimMin = <<0,0,0>>, vCreateDimMax = <<0,0,0>>
GET_MODEL_DIMENSIONS(GET_ENTITY_MODEL(scene_veh), vCreateDimMin, vCreateDimMax)
vCreateCoords -= vCreateDimMin.z
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE("eScene: ")
SAVE_STRING_TO_DEBUG_FILE(Get_String_From_Ped_Request_Scene_Enum(sPassedScene.sScene.eScene))
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE("vCreateCoords: ")
SAVE_VECTOR_TO_DEBUG_FILE(vCreateCoords)
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE("vCreateRot: ")
SAVE_VECTOR_TO_DEBUG_FILE(vCreateRot)
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE("vCreateDim: ")
SAVE_VECTOR_TO_DEBUG_FILE(vCreateDimMin)
SAVE_STRING_TO_DEBUG_FILE(", ")
SAVE_VECTOR_TO_DEBUG_FILE(vCreateDimMax)
SAVE_NEWLINE_TO_DEBUG_FILE()
bVehRotationProperly = FALSE
ENDIF
IF bDrawVehRotationProperly
VECTOR returnMin = <<0,0,0>>, returnMax = <<0,0,0>>
GET_MODEL_DIMENSIONS(vehModel, returnMin, returnMax)
VECTOR offsetA = <<returnMin.x, returnMin.y, returnMin.z>>
VECTOR offsetB = <<returnMin.x, returnMax.y, returnMin.z>>
VECTOR offsetC = <<returnMax.x, returnMax.y, returnMin.z>>
VECTOR offsetD = <<returnMax.x, returnMin.y, returnMin.z>>
VECTOR coordA = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(scene_veh, offsetA)
VECTOR coordB = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(scene_veh, offsetB)
VECTOR coordC = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(scene_veh, offsetC)
VECTOR coordD = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(scene_veh, offsetD)
FLOAT coordGroundZ = 0.0
DrawDebugSceneSphere(coordA, 0.1, HUD_COLOUR_RED)
DrawDebugSceneTextWithOffset("coordA", coordA, 0, HUD_COLOUR_RED)
IF GET_GROUND_Z_FOR_3D_COORD(coordA, coordGroundZ)
DrawDebugSceneTextWithOffset(GET_STRING_FROM_FLOAT(coordA.z-coordGroundZ), coordA, 1, HUD_COLOUR_RED)
ELSE
DrawDebugSceneTextWithOffset("no ground", coordA, 1, HUD_COLOUR_BLUELIGHT)
ENDIF
DrawDebugSceneSphere(coordB, 0.1, HUD_COLOUR_RED)
DrawDebugSceneTextWithOffset("coordB", coordB, 0, HUD_COLOUR_RED)
IF GET_GROUND_Z_FOR_3D_COORD(coordB, coordGroundZ)
DrawDebugSceneTextWithOffset(GET_STRING_FROM_FLOAT(coordB.z-coordGroundZ), coordB, 1, HUD_COLOUR_RED)
ELSE
DrawDebugSceneTextWithOffset("no ground", coordB, 1, HUD_COLOUR_BLUELIGHT)
ENDIF
DrawDebugSceneSphere(coordC, 0.1, HUD_COLOUR_RED)
DrawDebugSceneTextWithOffset("coordC", coordC, 0, HUD_COLOUR_RED)
IF GET_GROUND_Z_FOR_3D_COORD(coordC, coordGroundZ)
DrawDebugSceneTextWithOffset(GET_STRING_FROM_FLOAT(coordC.z-coordGroundZ), coordC, 1, HUD_COLOUR_RED)
ELSE
DrawDebugSceneTextWithOffset("no ground", coordC, 1, HUD_COLOUR_BLUELIGHT)
ENDIF
DrawDebugSceneSphere(coordD, 0.1, HUD_COLOUR_RED)
DrawDebugSceneTextWithOffset("coordD", coordD, 0, HUD_COLOUR_RED)
IF GET_GROUND_Z_FOR_3D_COORD(coordD, coordGroundZ)
DrawDebugSceneTextWithOffset(GET_STRING_FROM_FLOAT(coordD.z-coordGroundZ), coordD, 1, HUD_COLOUR_RED)
ELSE
DrawDebugSceneTextWithOffset("no ground", coordD, 1, HUD_COLOUR_BLUELIGHT)
ENDIF
ENDIF
IF bVehOffsetFromPlayerInWorldCoords
VECTOR VecNewOffset = << -0.276546, -3.53309, -1.36032 >>
VECTOR vVehOffsetFromPlayerInWorldCoords = <<0,0,0>>
VECTOR vVehOffsetFromPlayerAsSceneOffset = <<0,0,0>>
/*
SET_CURRENT_WIDGET_GROUP(testPlayerPedScene_widget)
WIDGET_GROUP_ID vehWorldOffset_widget = START_WIDGET_GROUP("vVehOffsetFromPlayerInWorldCoords")
ADD_WIDGET_BOOL("bVehOffsetFromPlayerInWorldCoords", bVehOffsetFromPlayerInWorldCoords)
ADD_WIDGET_VECTOR_SLIDER("VecNewOffset", VecNewOffset, -40000, 40000, 0.1)
ADD_WIDGET_VECTOR_SLIDER("vCreateCoords", vCreateCoords, -40000, 40000, 0.0)
ADD_WIDGET_VECTOR_SLIDER("vVehCoordsOffset", vVehCoordsOffset, -40000, 40000, 0.0)
ADD_WIDGET_VECTOR_SLIDER("vVehOffsetFromPlayerInWorldCoords", vVehOffsetFromPlayerInWorldCoords, -40000, 40000, 0.1)
ADD_WIDGET_VECTOR_SLIDER("vVehOffsetFromPlayerAsSceneOffset", vVehOffsetFromPlayerAsSceneOffset, -40000, 40000, 0.1)
STOP_WIDGET_GROUP()
CLEAR_CURRENT_WIDGET_GROUP(testPlayerPedScene_widget)
//
WHILE bVehOffsetFromPlayerInWorldCoords
*/
vVehOffsetFromPlayerInWorldCoords =
GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PLAYER_PED_ID(),
VecNewOffset)
vVehOffsetFromPlayerAsSceneOffset = vVehOffsetFromPlayerInWorldCoords - vCreateCoords
vVehCoordsOffset = vVehOffsetFromPlayerAsSceneOffset
/*
IF IS_VEHICLE_DRIVEABLE(scene_veh)
SET_ENTITY_COORDS(scene_veh, vCreateCoords+vVehCoordsOffset)
SET_ENTITY_HEADING(scene_veh, fCreateHead+fVehHeadOffset)
ENDIF
WAIT(0)
ENDWHILE
IF DOES_WIDGET_GROUP_EXIST(vehWorldOffset_widget)
DELETE_WIDGET_GROUP(vehWorldOffset_widget)
ENDIF
vVehCoordsOffset = vVehOffsetFromPlayerAsSceneOffset
*/
//
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(playerProp)
IF (ePropBonetag <> BONETAG_NULL)
SET_ENTITY_RECORDS_COLLISIONS(playerProp, TRUE)
FREEZE_ENTITY_POSITION(playerProp, FALSE)
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
ATTACH_ENTITY_TO_ENTITY(playerProp, PLAYER_PED_ID(),
GET_PED_BONE_INDEX(PLAYER_PED_ID(), ePropBonetag),
PropOffset, PropRotation)
ENDIF
ELSE
fCreateHead = vCreateRot.z
SET_ENTITY_COORDS(playerProp, vCreateCoords+PropOffset)
SET_ENTITY_ROTATION(playerProp, <<0,0,fCreateHead>>+PropRotation)
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(playerExtraProp)
IF (eExtraPropBonetag <> BONETAG_NULL)
SET_ENTITY_RECORDS_COLLISIONS(playerExtraProp, TRUE)
FREEZE_ENTITY_POSITION(playerExtraProp, FALSE)
IF NOT bAttachedToBuddy
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
ATTACH_ENTITY_TO_ENTITY(playerExtraProp, PLAYER_PED_ID(),
GET_PED_BONE_INDEX(PLAYER_PED_ID(), eExtraPropBonetag),
ExtraPropOffset, ExtraPropRotation)
ENDIF
ELSE
IF NOT IS_PED_INJURED(g_pScene_buddy)
ATTACH_ENTITY_TO_ENTITY(playerExtraProp, g_pScene_buddy,
GET_PED_BONE_INDEX(g_pScene_buddy, eExtraPropBonetag),
ExtraPropOffset, ExtraPropRotation)
ENDIF
ENDIF
ELSE
fCreateHead = vCreateRot.z
SET_ENTITY_COORDS(playerExtraProp, vCreateCoords+ExtraPropOffset)
SET_ENTITY_ROTATION(playerExtraProp, <<0,0,fCreateHead>>+ExtraPropRotation)
ENDIF
ENDIF
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_H)
IF DOES_ENTITY_EXIST(player_door_l)
REMOVE_MODEL_HIDE(sPassedScene.sScene.vCreateCoords, 5.0, eDoorModel_l)
ENDIF
IF DOES_ENTITY_EXIST(player_door_r)
REMOVE_MODEL_HIDE(sPassedScene.sScene.vCreateCoords, 5.0, eDoorModel_r)
ENDIF
ENDIF
// IF bGetPlaceholderCoordPostMission
//
// vCoordFrom = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PLAYER_PED_ID(), <<0,1000,0>>)
// vCoordTo = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(PLAYER_PED_ID(), <<0,-1000,0>>)
// fPercentDist = 0.5
//
// SET_CURRENT_WIDGET_GROUP(sceneWidget)
// WIDGET_GROUP_ID postMissionCoord_widget = START_WIDGET_GROUP("postMissionCoord_widget")
// ADD_WIDGET_BOOL("bGetPlaceholderCoordPostMission", bGetPlaceholderCoordPostMission)
//
// ADD_WIDGET_VECTOR_SLIDER("vCoordFrom", vCoordFrom, -4000.0, 4000.0, 0.1)
// ADD_WIDGET_VECTOR_SLIDER("vCoordTo", vCoordTo, -4000.0, 4000.0, 0.1)
// ADD_WIDGET_FLOAT_SLIDER("fPercentDist", fPercentDist, 0.0, 1.0, 0.05)
// STOP_WIDGET_GROUP()
// CLEAR_CURRENT_WIDGET_GROUP(sceneWidget)
//
// WHILE bGetPlaceholderCoordPostMission
// IF GetPlaceholderCoordPostMission(sPassedScene.sScene.eScene, vCoordFrom, vCoordTo, fPercentDist,
// vCreateCoords, fCreateHead)
//
// DrawDebugSceneSphere(vCoordFrom, 1.0, HUD_COLOUR_RED)
// DrawDebugSceneLineBetweenCoords(vCoordFrom, vCreateCoords, HUD_COLOUR_RED)
// DrawDebugSceneLineBetweenCoords(vCreateCoords, vCoordTo, HUD_COLOUR_BLUE)
// DrawDebugSceneSphere(vCoordTo, 1.0, HUD_COLOUR_BLUE)
//
// IF NOT IS_PED_INJURED(PLAYER_PED_ID())
// SET_PED_COORDS_KEEP_VEHICLE(PLAYER_PED_ID(), vCreateCoords)
// SET_ENTITY_HEADING(PLAYER_PED_ID(), fCreateHead)
// ENDIF
// ELSE
// bGetPlaceholderCoordPostMission = FALSE
// ENDIF
//
// WAIT(0)
// ENDWHILE
//
// #IF IS_DEBUG_BUILD
// OPEN_DEBUG_FILE()
// SAVE_NEWLINE_TO_DEBUG_FILE()
// SAVE_STRING_TO_DEBUG_FILE(" CASE ")SAVE_STRING_TO_DEBUG_FILE(Get_String_From_Ped_Request_Scene_Enum(sPassedScene.sScene.eScene))SAVE_NEWLINE_TO_DEBUG_FILE()
// SAVE_STRING_TO_DEBUG_FILE(" vLastKnownCoords = ")SAVE_VECTOR_TO_DEBUG_FILE(vCreateCoords)SAVE_NEWLINE_TO_DEBUG_FILE()
// SAVE_STRING_TO_DEBUG_FILE(" fLastKnownHead = ")SAVE_FLOAT_TO_DEBUG_FILE(fCreateHead)SAVE_NEWLINE_TO_DEBUG_FILE()
// SAVE_STRING_TO_DEBUG_FILE(" RETURN TRUE BREAK")SAVE_NEWLINE_TO_DEBUG_FILE()
// SAVE_STRING_TO_DEBUG_FILE(" BREAK")SAVE_NEWLINE_TO_DEBUG_FILE()
// SAVE_NEWLINE_TO_DEBUG_FILE()
// CLOSE_DEBUG_FILE()
// #ENDIF
//
// IF DOES_WIDGET_GROUP_EXIST(postMissionCoord_widget)
// DELETE_WIDGET_GROUP(postMissionCoord_widget)
// ENDIF
//
// ENDIF
WAIT(0)
ENDWHILE
IF DOES_CAM_EXIST(scene_cam)
RENDER_SCRIPT_CAMS(FALSE, FALSE)
SET_CAM_ACTIVE(scene_cam, FALSE)
DESTROY_CAM(scene_cam)
ENDIF
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
CLEAR_PED_TASKS(PLAYER_PED_ID())
ENDIF
IF NOT IS_PED_INJURED(g_pScene_buddy)
CLEAR_PED_TASKS(g_pScene_buddy)
ENDIF
IF DOES_WIDGET_GROUP_EXIST(testPlayerPedScene_widget)
DELETE_WIDGET_GROUP(testPlayerPedScene_widget)
ENDIF
OPEN_DEBUG_FILE()
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE(" //\"")SAVE_STRING_TO_DEBUG_FILE(Get_String_From_Ped_Request_Scene_Enum(sPassedScene.sScene.eScene))SAVE_STRING_TO_DEBUG_FILE("\"")SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_NEWLINE_TO_DEBUG_FILE()
//
SAVE_STRING_TO_DEBUG_FILE(" //GET_PLAYER_PED_POSITION_FOR_SCENE()")SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE("CASE ")SAVE_STRING_TO_DEBUG_FILE(Get_String_From_Ped_Request_Scene_Enum(sPassedScene.sScene.eScene))
SAVE_STRING_TO_DEBUG_FILE(" vCreateCoords = ")SAVE_VECTOR_TO_DEBUG_FILE(vCreateCoords)
SAVE_STRING_TO_DEBUG_FILE(" fCreateHead = ")SAVE_FLOAT_TO_DEBUG_FILE(vCreateRot.z)
SAVE_STRING_TO_DEBUG_FILE(" tRoom = \"")SAVE_STRING_TO_DEBUG_FILE(sPassedScene.sScene.tCreateRoom)
SAVE_STRING_TO_DEBUG_FILE("\" RETURN TRUE BREAK")
SAVE_NEWLINE_TO_DEBUG_FILE()
//
IF vCreateRot.x <> 0
OR vCreateRot.y <> 0
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE("vCreateRot = <<")SAVE_FLOAT_TO_DEBUG_FILE(vCreateRot.x)SAVE_STRING_TO_DEBUG_FILE(", ")SAVE_FLOAT_TO_DEBUG_FILE(vCreateRot.y)SAVE_STRING_TO_DEBUG_FILE(", fCreateHead>>")
SAVE_NEWLINE_TO_DEBUG_FILE()
ENDIF
//
IF DOES_ENTITY_EXIST(g_pScene_buddy)
IF NOT IS_ENTITY_DEAD(g_pScene_buddy)
sPassedScene.vSceneBuddyCoordOffset = GET_ENTITY_COORDS(g_pScene_buddy) - vCreateCoords
sPassedScene.fSceneBuddyHeadOffset = GET_ENTITY_HEADING(g_pScene_buddy) - fCreateHead
IF sPassedScene.fSceneBuddyHeadOffset > 180.0
sPassedScene.fSceneBuddyHeadOffset -= 360.0
ENDIF
IF sPassedScene.fSceneBuddyHeadOffset < -180.0
sPassedScene.fSceneBuddyHeadOffset += 360.0
ENDIF
ENDIF
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE("InitialiseBuddy(")SAVE_VECTOR_TO_DEBUG_FILE(sPassedScene.vSceneBuddyCoordOffset)
SAVE_STRING_TO_DEBUG_FILE(", ")SAVE_FLOAT_TO_DEBUG_FILE(sPassedScene.fSceneBuddyHeadOffset)
SAVE_STRING_TO_DEBUG_FILE(")")SAVE_NEWLINE_TO_DEBUG_FILE()
ENDIF
IF NOT IS_ENTITY_DEAD(scene_veh)
IF DOES_ENTITY_EXIST(scene_veh)
vVehCoordsOffset = GET_ENTITY_COORDS(scene_veh) - vCreateCoords
fVehHeadOffset = GET_ENTITY_HEADING(scene_veh) - fCreateHead
IF fVehHeadOffset > 180.0
fVehHeadOffset -= 360.0
ENDIF
IF fVehHeadOffset < -180.0
fVehHeadOffset += 360.0
ENDIF
ENDIF
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE("vVehCoordsOffset = ")SAVE_VECTOR_TO_DEBUG_FILE(vVehCoordsOffset)SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE("fVehHeadOffset = ")SAVE_FLOAT_TO_DEBUG_FILE(fVehHeadOffset)SAVE_NEWLINE_TO_DEBUG_FILE()
ENDIF
IF NOT IS_ENTITY_DEAD(playerProp)
IF PropRotation.z > 180.0
PropRotation.z -= 360.0
ENDIF
IF PropRotation.z < -180.0
PropRotation.z += 360.0
ENDIF
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE("PropOffset = ")SAVE_VECTOR_TO_DEBUG_FILE(PropOffset)SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE("PropRotation = ")SAVE_VECTOR_TO_DEBUG_FILE(PropRotation)SAVE_NEWLINE_TO_DEBUG_FILE()
ENDIF
IF NOT IS_ENTITY_DEAD(playerExtraProp)
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE("ExtraPropOffset = ")SAVE_VECTOR_TO_DEBUG_FILE(ExtraPropOffset)SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_STRING_TO_DEBUG_FILE("ExtraPropRotation = ")SAVE_VECTOR_TO_DEBUG_FILE(ExtraPropRotation)SAVE_NEWLINE_TO_DEBUG_FILE()
ENDIF
SAVE_STRING_TO_DEBUG_FILE("gpCamHead = ")SAVE_FLOAT_TO_DEBUG_FILE(gpCamHead)
SAVE_STRING_TO_DEBUG_FILE(" gpCamPitch = ")SAVE_FLOAT_TO_DEBUG_FILE(gpCamPitch)
SAVE_NEWLINE_TO_DEBUG_FILE()
SAVE_NEWLINE_TO_DEBUG_FILE()
CLOSE_DEBUG_FILE()
RETURN TRUE
ENDFUNC
FUNC BOOL Perform_Switch_Demo(PED_REQUEST_SCENE_ENUM &sceneArray[], INT &iSceneWait[],
BOOL &bPerformDemo, INT &iTempRecentlySelectedScene)
PED_SCENE_STRUCT sTempSceneData
INT iSceneCount
/*
// PED_REQUEST_SCENE_ENUM sceneArray[iMAX_SCENE_COUNT]
sceneArray[0] = PR_SCENE_M2_SAVEHOUSE0 // In bed with wife. Wife still asleep.
sceneArray[1] = PR_SCENE_F_AUNT_TRASH // Taking out his aunts trash
sceneArray[2] = PR_SCENE_T_CR_PARK // Drunk in park puking on fountain
sceneArray[3] = PR_SCENE_M_TRAFFIC // Stuck in traffic
sceneArray[4] = PR_SCENE_F_REC_CENTRE // Playing basketball at the Rec Centre
sceneArray[5] = PR_SCENE_T_FIGHTBBUILD // Trying to start a fight with a body builder
sceneArray[6] = PR_SCENE_M_SHOPPING // Dropping off wife at Beverly Hills shops.
sceneArray[7] = PR_SCENE_T_STRIPCLUB_in // Getting ready to leave the stripclub
sceneArray[8] = PR_SCENE_F_GYM // In the gym
sceneArray[9] = PR_SCENE_M2_PHARMACY // Picking up pills (for his wife/him)
sceneArray[10] = PR_SCENE_T_CR_POLICE // Being chased by the police
//sceneArray[11] = PR_SCENE_F_DRIVETHRU // Approaching a drivethru
sceneArray[12-1] = PR_SCENE_M_CYCLING // Cycling around the city
sceneArray[13-1] = PR_SCENE_T_CR_CHATEAU // Chucked out of Chateau. Another hotel or a swanky restaurant. Beverly Hills Hotel?
//sceneArray[14-1] = PR_SCENE_F_DRAGRACE_A // Found approaching the four dragrace locations
sceneArray[15-1-1] = PR_SCENE_T_CR_WAKETRASH // Waking up in trash
sceneArray[16-1-1] = PR_SCENE_M2_LUNCH // Wife will complain and argue as he gets up to leave.
sceneArray[17-1-1] = PR_SCENE_T_CR_CHASECAR // Chasing a car along river.
sceneArray[18-1-1] = PR_SCENE_M_POOLSIDE // Sunbathing by the pool.
sceneArray[19-1-1] = PR_SCENE_T_CR_INSULTWOMAN // Insulting women at the beach
sceneArray[20-1-1] = PR_SCENE_M_KIDS_TV // Watching TV with his kids
// INT iSceneWait[iMAX_SCENE_COUNT]
iSceneWait[0] = 4500-1000
iSceneWait[1] = 4500-1000 //trash
iSceneWait[2] = 4500+2000 //park
iSceneWait[3] = 4500
iSceneWait[4] = 4500
iSceneWait[5] = 4500
iSceneWait[6] = 4500
iSceneWait[7] = 4500+1500 //strip club
iSceneWait[8] = 4500
iSceneWait[9] = 4500
iSceneWait[10] = 4500
// iSceneWait[11] = 4500+5000 //drive thru
iSceneWait[12-1] = 4500
iSceneWait[13-1] = 4500
// iSceneWait[14-1] = 4500+2000 //drag race
iSceneWait[15-1-1] = 4500
iSceneWait[16-1-1] = 4500
iSceneWait[17-1-1] = 4500
iSceneWait[18-1-1] = 4500
iSceneWait[19-1-1] = 4500
iSceneWait[20-1-1] = 4500
*/
INT iScene
REPEAT COUNT_OF(sceneArray) iScene
sceneArray[iScene] = INT_TO_ENUM(PED_REQUEST_SCENE_ENUM, iScene)
iSceneWait[iScene] = GET_RANDOM_INT_IN_RANGE(5000-1500, 5000+1500)
ENDREPEAT
// To shuffle an array a of n elements (indexes 0..n-1):
iScene = (COUNT_OF(sceneArray)-1)
WHILE iScene > 0
INT j = GET_RANDOM_INT_IN_RANGE(0, iScene+1) //j random integer with 0 j i
PED_REQUEST_SCENE_ENUM tempSceneJ = sceneArray[j]
sceneArray[j] = sceneArray[iScene] //exchange a[j] and a[i]
sceneArray[iScene] = tempSceneJ //exchange a[j] and a[i]
iScene--
ENDWHILE
REPEAT COUNT_OF(sceneArray) iScene
SAVE_STRING_TO_DEBUG_FILE("sceneArray[")
SAVE_INT_TO_DEBUG_FILE(iScene)
SAVE_STRING_TO_DEBUG_FILE("] = ")
SAVE_STRING_TO_DEBUG_FILE(Get_String_From_Ped_Request_Scene_Enum(sceneArray[iScene]))
SAVE_NEWLINE_TO_DEBUG_FILE()
ENDREPEAT
SET_CLOCK_TIME(11, 0, 0)
WHILE iSceneCount < COUNT_OF(sceneArray)
AND bPerformDemo
IF (sceneArray[iSceneCount] <> PR_SCENE_DEAD)
AND (sceneArray[iSceneCount] <> PR_SCENE_HOSPITAL)
AND (sceneArray[iSceneCount] <> PR_SCENE_M_OVERRIDE)
AND (sceneArray[iSceneCount] <> PR_SCENE_F_OVERRIDE)
AND (sceneArray[iSceneCount] <> PR_SCENE_T_OVERRIDE)
AND (sceneArray[iSceneCount] <> PR_SCENE_M_DEFAULT)
AND (sceneArray[iSceneCount] <> PR_SCENE_F_DEFAULT)
AND (sceneArray[iSceneCount] <> PR_SCENE_T_DEFAULT)
sTempSceneData.iStage = 0
sTempSceneData.eScene = sceneArray[iSceneCount]
sTempSceneData.sSelectorCam.bSplineCreated = FALSE
GET_PLAYER_CHAR_FOR_PED_REQUEST_SCENE(sTempSceneData.eScene, sTempSceneData.ePed)
g_iSelectedDebugPlayerCharScene = ENUM_TO_INT(sTempSceneData.eScene)
IF IS_PED_THE_CURRENT_PLAYER_PED(sTempSceneData.ePed)
SELECTOR_SLOTS_ENUM newSelectorPed
SWITCH sTempSceneData.ePed
CASE CHAR_MICHAEL
IF GET_RANDOM_INT_IN_RANGE(0, 100) < 50
newSelectorPed = SELECTOR_PED_FRANKLIN
ELSE
newSelectorPed = SELECTOR_PED_TREVOR
ENDIF
BREAK
CASE CHAR_FRANKLIN
IF GET_RANDOM_INT_IN_RANGE(0, 100) < 50
newSelectorPed = SELECTOR_PED_MICHAEL
ELSE
newSelectorPed = SELECTOR_PED_TREVOR
ENDIF
BREAK
CASE CHAR_TREVOR
IF GET_RANDOM_INT_IN_RANGE(0, 100) < 50
newSelectorPed = SELECTOR_PED_MICHAEL
ELSE
newSelectorPed = SELECTOR_PED_FRANKLIN
ENDIF
BREAK
ENDSWITCH
WHILE NOT SET_CURRENT_SELECTOR_PED(newSelectorPed)
WAIT(0)
ENDWHILE
ENDIF
BOOL bPerformingGenericPedScene = TRUE
WHILE IS_PLAYER_PLAYING(PLAYER_ID())
AND bPerformingGenericPedScene
IF NOT GENERIC_PED_SCENE(sTempSceneData,
&SCENE_CUSTOM_SCRIPT_REQUEST,
&SCENE_CUSTOM_SCRIPT_SETUP)
iTempRecentlySelectedScene = ENUM_TO_INT(g_eRecentlySelectedScene)
PRINTSTRING("bPerformDemo sTempSceneData[")PRINTINT(iSceneCount)
PRINTSTRING("].iStage: ")PRINTINT(sTempSceneData.iStage)PRINTNL()
ELSE
bPerformingGenericPedScene = FALSE
ENDIF
WAIT(0)
ENDWHILE
WAIT(iSceneWait[iSceneCount])
SAVE_STRING_TO_DEBUG_FILE("scene ")
SAVE_STRING_TO_DEBUG_FILE(Get_String_From_Ped_Request_Scene_Enum(sceneArray[iSceneCount]))
SAVE_STRING_TO_DEBUG_FILE(": ")
IF IS_PLAYER_PLAYING(PLAYER_ID())
VECTOR vPlayerCoord = GET_ENTITY_COORDS(PLAYER_PED_ID())
FLOAT fPlayerCoord_ground_z = 0.0
IF GET_GROUND_Z_FOR_3D_COORD(vPlayerCoord, fPlayerCoord_ground_z)
SAVE_STRING_TO_DEBUG_FILE("diff = ")
SAVE_FLOAT_TO_DEBUG_FILE(fPlayerCoord_ground_z-vPlayerCoord.z)
ELSE
SAVE_STRING_TO_DEBUG_FILE("NO GROUND!!!")
ENDIF
ELSE
SAVE_STRING_TO_DEBUG_FILE("dead????")
ENDIF
SAVE_NEWLINE_TO_DEBUG_FILE()
ENDIF
iSceneCount++
WAIT(0)
ENDWHILE
iSceneCount = 0
bPerformDemo = FALSE
RETURN FALSE
ENDFUNC
#IF NOT USE_SP_DLC
FUNC BOOL Get_Average_Of_Mission_Array(WIDGET_GROUP_ID sceneWidget, BOOL &bGetAverageOfMissionArray)
INT iCoord
CONST_INT iCONST_EXILE_MISSIONS 5
STATIC_BLIP_NAME_ENUM eExileMissions[iCONST_EXILE_MISSIONS]
eExileMissions[0] = (STATIC_BLIP_MISSION_EXILE_1) //"exile1"
eExileMissions[1] = (STATIC_BLIP_MISSION_EXILE_2) //"exile2"
eExileMissions[2] = (STATIC_BLIP_MISSION_EXILE_3) //"exile3"
eExileMissions[3] = (STATIC_BLIP_MISSION_RURAL_BANK) //"rural_bank_setup"
eExileMissions[4] = (STATIC_BLIP_MISSION_RURAL_BANK) //"rural_bank_heist"
VECTOR vExileMissions[iCONST_EXILE_MISSIONS]
VECTOR vExileMissionCentre
FLOAT fExileMissionMaxDist
FLOAT fExileMissionMinDist
BLIP_INDEX exileMissionCentreBlip, ExileMissionBlips[iCONST_EXILE_MISSIONS]
SET_CURRENT_WIDGET_GROUP(sceneWidget)
WIDGET_GROUP_ID missionArrayAverage_widget = START_WIDGET_GROUP("missionArrayAverage_widget")
ADD_WIDGET_BOOL("bGetAverageOfMissionArray", bGetAverageOfMissionArray)
ADD_WIDGET_VECTOR_SLIDER("vExileMissionCentre", vExileMissionCentre, -4000.0, 4000.0, 0.0)
ADD_WIDGET_FLOAT_SLIDER("fExileMissionMaxDist", fExileMissionMaxDist, 0.0, 4000.0, 0.0)
ADD_WIDGET_FLOAT_SLIDER("fExileMissionMinDist", fExileMissionMinDist, 0.0, 4000.0, 0.0)
STOP_WIDGET_GROUP()
CLEAR_CURRENT_WIDGET_GROUP(sceneWidget)
WHILE bGetAverageOfMissionArray
vExileMissionCentre = <<0,0,0>>
REPEAT iCONST_EXILE_MISSIONS iCoord
vExileMissions[iCoord] = GET_STATIC_BLIP_POSITION(eExileMissions[iCoord])
vExileMissionCentre += vExileMissions[iCoord]
IF NOT DOES_BLIP_EXIST(ExileMissionBlips[iCoord])
ExileMissionBlips[iCoord] = ADD_BLIP_FOR_COORD(vExileMissions[iCoord])
SET_BLIP_SPRITE(ExileMissionBlips[iCoord], RADAR_TRACE_HEIST)
SET_BLIP_NAME_FROM_ASCII(ExileMissionBlips[iCoord], DEBUG_GET_STRING_NAME_OF_STATIC_BLIP(ENUM_TO_INT(eExileMissions[iCoord])))
ELSE
SET_BLIP_COORDS(ExileMissionBlips[iCoord], vExileMissions[iCoord])
ENDIF
ENDREPEAT
vExileMissionCentre /= TO_FLOAT(iCONST_EXILE_MISSIONS)
IF NOT DOES_BLIP_EXIST(exileMissionCentreBlip)
exileMissionCentreBlip = ADD_BLIP_FOR_COORD(vExileMissionCentre)
SET_BLIP_COLOUR(exileMissionCentreBlip, BLIP_COLOUR_RED)
ELSE
SET_BLIP_COORDS(exileMissionCentreBlip, vExileMissionCentre)
ENDIF
fExileMissionMaxDist = 0.0
fExileMissionMinDist = 4000.0
REPEAT iCONST_EXILE_MISSIONS iCoord
FLOAT fDistance = VDIST(vExileMissionCentre, vExileMissions[iCoord])
IF (fExileMissionMaxDist < fDistance)
fExileMissionMaxDist = fDistance
ENDIF
IF (fExileMissionMinDist > fDistance)
fExileMissionMinDist = fDistance
ENDIF
ENDREPEAT
WAIT(0)
ENDWHILE
IF DOES_BLIP_EXIST(exileMissionCentreBlip)
REMOVE_BLIP(exileMissionCentreBlip)
ENDIF
REPEAT iCONST_EXILE_MISSIONS iCoord
IF DOES_BLIP_EXIST(ExileMissionBlips[iCoord])
REMOVE_BLIP(ExileMissionBlips[iCoord])
ENDIF
ENDREPEAT
IF DOES_WIDGET_GROUP_EXIST(missionArrayAverage_widget)
DELETE_WIDGET_GROUP(missionArrayAverage_widget)
ENDIF
bGetAverageOfMissionArray = FALSE
RETURN FALSE
ENDFUNC
#ENDIF
FUNC BOOL DEBUG_GetPlayerSwitchEstablishingShot(STRING tCreateRoom, STRING tPlayerSceneEstabShotSuffix,
VECTOR &Position, VECTOR &Orientation, FLOAT &Fov)
TEXT_LABEL_63 tEstabShot
tEstabShot = tCreateRoom
tEstabShot += tPlayerSceneEstabShotSuffix
IF IS_STRING_NULL_OR_EMPTY(tEstabShot)
RETURN FALSE
ENDIF
STRING sFileName = "playerswitchestablishingshots.xml" //X:\gta5\build\dev\common\data\playerswitchestablishingshots.meta
IF LOAD_XML_FILE(sFileName)
BOOL bFoundShot = FALSE
INT eachNode
REPEAT GET_NUMBER_OF_XML_NODES() eachNode
SWITCH GET_HASH_KEY(GET_XML_NODE_NAME())
CASE HASH("Name")
bFoundShot = FALSE
STRING Name
Name = GET_STRING_FROM_XML_NODE()
IF ARE_STRINGS_EQUAL(tEstabShot, Name)
bFoundShot = TRUE
ENDIF
BREAK
CASE HASH("Position")
IF bFoundShot
INT posAttribute
REPEAT GET_NUMBER_OF_XML_NODE_ATTRIBUTES() posAttribute
SWITCH GET_HASH_KEY(GET_XML_NODE_ATTRIBUTE_NAME(posAttribute))
CASE HASH("x") Position.x = GET_FLOAT_FROM_XML_NODE_ATTRIBUTE(posAttribute) BREAK
CASE HASH("y") Position.y = GET_FLOAT_FROM_XML_NODE_ATTRIBUTE(posAttribute) BREAK
CASE HASH("z") Position.z = GET_FLOAT_FROM_XML_NODE_ATTRIBUTE(posAttribute) BREAK
ENDSWITCH
ENDREPEAT
ENDIF
BREAK
CASE HASH("Orientation")
IF bFoundShot
INT oriAttribute
REPEAT GET_NUMBER_OF_XML_NODE_ATTRIBUTES() oriAttribute
SWITCH GET_HASH_KEY(GET_XML_NODE_ATTRIBUTE_NAME(oriAttribute))
CASE HASH("x") Orientation.x = GET_FLOAT_FROM_XML_NODE_ATTRIBUTE(oriAttribute) BREAK
CASE HASH("y") Orientation.y = GET_FLOAT_FROM_XML_NODE_ATTRIBUTE(oriAttribute) BREAK
CASE HASH("z") Orientation.z = GET_FLOAT_FROM_XML_NODE_ATTRIBUTE(oriAttribute) BREAK
ENDSWITCH
ENDREPEAT
ENDIF
BREAK
CASE HASH("Fov")
IF bFoundShot
INT fovAttribute
REPEAT GET_NUMBER_OF_XML_NODE_ATTRIBUTES() fovAttribute
SWITCH GET_HASH_KEY(GET_XML_NODE_ATTRIBUTE_NAME(fovAttribute))
CASE HASH("value") Fov = GET_FLOAT_FROM_XML_NODE_ATTRIBUTE(fovAttribute) BREAK
ENDSWITCH
ENDREPEAT
DELETE_XML_FILE()
RETURN TRUE
ENDIF
BREAK
ENDSWITCH
GET_NEXT_XML_NODE()
ENDREPEAT
Position = <<0,0,0>>
Orientation = <<0,0,0>>
Fov = 0.0
DELETE_XML_FILE()
RETURN FALSE
ENDIF
Position = <<0,0,0>>
Orientation = <<0,0,0>>
Fov = 0.0
DELETE_XML_FILE()
RETURN FALSE
ENDFUNC
#ENDIF