2073 lines
78 KiB
Scheme
Executable File
2073 lines
78 KiB
Scheme
Executable File
#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
|