// Chris McMahon // Includes -----------------------------------------------// USING "commands_misc.sch" USING "commands_object.sch" USING "commands_script.sch" USING "commands_streaming.sch" USING "commands_pad.sch" USING "commands_debug.sch" USING "types.sch" USING "commands_brains.sch" USING "brains.sch" USING "shared_debug_text.sch" USING "script_player.sch" USING "finance_control_public.sch" USING "player_ped_public.sch" USING "cutscene_public.sch" USING "context_control_public.sch" USING "freemode_header.sch" USING "rgeneral_include.sch" USING "net_cash_transactions.sch" // Variables ----------------------------------------------// PED_COMP_NAME_ENUM eStoredHelmet = DUMMY_PED_COMP, eStoredMask = DUMMY_PED_COMP BOOL bSwappedChemSuit = FALSE ENUM ambStageFlag ambCanRun, ambRunning, ambEnd ENDENUM ambStageFlag ambStage = ambCanRun ENUM scopeStageFlag playerOutOfRange, waitForPlayer, grabPlayer, playEnter, runScope, resetScope ENDENUM OBJECT_INDEX oBlinds scopeStageFlag scopeStage = waitForPlayer WEAPON_TYPE storedWeapon //BOOL bTurnedPlayerControlOff INT iContextButtonIntention = NEW_CONTEXT_INTENTION, iTelescopeStartTime = -1 INT iSoundCoinDrop = -1, iSoundCountdown = -1, iSoundTimer = -1, iSoundZoom = -1, iSoundZoomLimit = -1, iSoundTurnVert = -1, iSoundTurnHori = -1, iSoundTurnLimit = -1/*, iSoundEndUse = -1*/ BOOL bPublicTelescope, bRespottedPlayer, bHitVertLimit = FALSE, bHitHorizLimit = FALSE, bHitZoomLimit = FALSE STRING sTelescopeSoundBank SCRIPT_TIMER telescopeMouseTimer FLOAT fMouseX FLOAT fStoredMouseX FLOAT fMouseY FLOAT fStoredMouseY OBJECT_INDEX oScope CAMERA_INDEX cameraTelescope SCALEFORM_INDEX sfMovie VECTOR vLookCamPos VECTOR vLookCamRot FLOAT fMinYChange = -40 FLOAT fMaxYChange = 40 FLOAT fMinXChange = -70 FLOAT fMaxXChange = 70 FLOAT fMaxFOV = 10 FLOAT fMinFOV = 65 //FLOAT vScopeHeading FLOAT fZoomChange = fMinFOV FLOAT fZoomSpeed = 1 FLOAT fSpeedMultiplier = 50 FLOAT fCamSpeed = fZoomChange/fSpeedMultiplier FLOAT fCamChangeY FLOAT fCamChangeX FLOAT fHomeTelescopeOffset = 0.34 CONST_INT STICK_DEAD_ZONE 28 CONST_FLOAT MOUSE_CAMERA_SPEED_ADJUST 0.1//0.0004 STRING animDictEnter = "MINI@TELESCOPE" STRING animDictExit = "MINI@TELESCOPE" INT scopeCost = 1 STRING sScopeContextHelp //SEQUENCE_INDEX seq BOOL scopeFallen = FALSE CONST_INT TELESCOPE_TIME 60000 CONST_INT iBS_STORE_ACTIVE 0 INT iBoolsBitSet STRING animEnter STRING animLoop STRING animExit BOOL bSetupPCControls = FALSE PROC CLEAN_UP_CAMERA() IF DOES_ENTITY_EXIST(oBlinds) SET_ENTITY_VISIBLE(oBlinds, TRUE) ENDIF CLEAR_HELP(TRUE) RENDER_SCRIPT_CAMS(FALSE, FALSE) IF IS_CAM_ACTIVE(cameraTelescope) SET_CAM_ACTIVE(cameraTelescope,FALSE) ENDIF DESTROY_CAM(cameraTelescope) SET_GAMEPLAY_CAM_RELATIVE_HEADING() IF DOES_ENTITY_EXIST(oScope) AND GET_ENTITY_MODEL(oScope) = INT_TO_ENUM(MODEL_NAMES, HASH("XS_PROP_ARENA_TELESCOPE_01")) //don't clear timecycles for arena ELSE //think we still need to hit this regardless of existance of prop at this point CLEAR_TIMECYCLE_MODIFIER() POP_TIMECYCLE_MODIFIER() IF NOT Is_Ped_Drunk(PLAYER_PED_ID()) CLEAR_TIMECYCLE_MODIFIER() ENDIF ENDIF PRINTLN("Ob_telescope called - CLEAN_UP_CAMERA()") ENDPROC // Clean Up PROC missionCleanup(BOOL bAllowDelayForDeadPed) IF NOT IS_PLAYER_USING_RC_TANK(PLAYER_ID()) AND NOT IS_PLAYER_USING_RCBANDITO(PLAYER_ID()) ENABLE_INTERACTION_MENU() ENDIF IF NOT IS_STRING_NULL_OR_EMPTY(sScopeContextHelp) IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED(sScopeContextHelp) CLEAR_HELP() ENDIF ENDIF IF iContextButtonIntention != NEW_CONTEXT_INTENTION RELEASE_CONTEXT_INTENTION(iContextButtonIntention) ENDIF IF bSwappedChemSuit = TRUE IF bAllowDelayForDeadPed AND IS_PED_INJURED(PLAYER_PED_ID()) CDEBUG1LN(DEBUG_SAFEHOUSE, GET_THIS_SCRIPT_NAME(), " - delay mission cleanup to allow injured ped to swap hazmat hood") EXIT ENDIF SWAP_CHEM_SUIT_HOOD_FOR_ALTERNATE(PLAYER_PED_ID()) bSwappedChemSuit = FALSE ENDIF IF eStoredHelmet != DUMMY_PED_COMP AND eStoredHelmet != PROPS_HEAD_NONE IF bAllowDelayForDeadPed AND IS_PED_INJURED(PLAYER_PED_ID()) CDEBUG1LN(DEBUG_SAFEHOUSE, GET_THIS_SCRIPT_NAME(), " - delay mission cleanup to allow injured ped to swap stored Helmet") EXIT ENDIF SET_PED_COMP_ITEM_CURRENT_MP(PLAYER_PED_ID(), COMP_TYPE_PROPS, eStoredHelmet, FALSE) eStoredHelmet = DUMMY_PED_COMP ENDIF IF eStoredMask != DUMMY_PED_COMP IF bAllowDelayForDeadPed AND IS_PED_INJURED(PLAYER_PED_ID()) CDEBUG1LN(DEBUG_SAFEHOUSE, GET_THIS_SCRIPT_NAME(), " - delay mission cleanup to allow injured ped to swap stored mask") EXIT ENDIF SET_PED_COMP_ITEM_CURRENT_MP(PLAYER_PED_ID(), COMP_TYPE_BERD, eStoredMask, FALSE) eStoredMask = DUMMY_PED_COMP ENDIF IF DOES_CAM_EXIST(cameraTelescope) CLEAN_UP_CAMERA() ENDIF SET_SCALEFORM_MOVIE_AS_NO_LONGER_NEEDED(sfMovie) PRINTLN("POD: telescope: scaleform no longer needed") MPGlobalsAmbience.bUsingTelescope = FALSE g_bCurrentlyUsingTelescope = FALSE // Prevent Chop running off when using a telescope IF bSetupPCControls SHUTDOWN_PC_SCRIPTED_CONTROLS() ENDIF TERMINATE_THIS_THREAD() ENDPROC PROC SET_UP_CAMERA() IF DOES_ENTITY_EXIST(oBlinds) SET_ENTITY_VISIBLE(oBlinds, FALSE) ENDIF cameraTelescope = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA", vLookCamPos, vLookCamRot, fMinFOV, TRUE) //cameraTelescope = CREATE_CAM_WITH_PARAMS("DEFAULT_SCRIPTED_CAMERA", vLookCamPos, fZoomChange, fMinFOV, TRUE) //vCamRot //fZoomChange SET_CAM_NEAR_CLIP(cameraTelescope, 0.1) SET_CAM_CONTROLS_MINI_MAP_HEADING(cameraTelescope, TRUE) SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_BEFORE_HUD) IF NOT IS_LOCAL_PLAYER_IN_ARENA_SPECTATOR_BOX() PUSH_TIMECYCLE_MODIFIER() ENDIF DRAW_SCALEFORM_MOVIE_FULLSCREEN(sfMovie, 0,0,0,255) PRINTLN("POD: telescope: drawing scaleform - 2") IF NOT IS_LOCAL_PLAYER_IN_ARENA_SPECTATOR_BOX() SET_TIMECYCLE_MODIFIER("telescope") ENDIF RENDER_SCRIPT_CAMS(TRUE, FALSE) ENDPROC PROC PLAY_SQUEAK(FLOAT squeakAmount) IF bPublicTelescope IF NOT HAS_SOUND_FINISHED(iSoundTurnVert) //STOP_SOUND(iSoundSqueak) // ENDIF //PLAY_SOUND_FROM_ENTITY(iSoundSqueak, "TELESCOPE_SQUEAK_MASTER", oScope) IF squeakAmount < 0 squeakAmount += -squeakAmount*2 ENDIF SET_VARIABLE_ON_SOUND(iSoundTurnVert, "velocity", squeakAmount) ENDIF IF NOT HAS_SOUND_FINISHED(iSoundTurnHori) //STOP_SOUND(iSoundSqueak) // ENDIF //PLAY_SOUND_FROM_ENTITY(iSoundSqueak, "TELESCOPE_SQUEAK_MASTER", oScope) IF squeakAmount < 0 squeakAmount += -squeakAmount*2 ENDIF SET_VARIABLE_ON_SOUND(iSoundTurnHori, "velocity", squeakAmount) ENDIF ENDIF ENDPROC FUNC BOOL HAS_MOUSE_JUST_MOVED() // GET_MOUSE_POSITION(fMouseX, fMouseY) fMouseX = GET_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_X ) fMouseY = GET_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_Y ) IF fMouseX != fStoredMouseX OR fMouseY != fStoredMouseY CDEBUG1LN(DEBUG_SAFEHOUSE, "HAS_MOUSE_JUST_MOVED: fStoredMouseX: ", fStoredMouseX, " != fMouseX: ", fMouseX) CDEBUG1LN(DEBUG_SAFEHOUSE, "HAS_MOUSE_JUST_MOVED: fStoredMouseY: ", fStoredMouseY, " != fMouseY: ", fMouseY) fStoredMouseX = fMouseX fStoredMouseY = fMouseY // IF HAS_NET_TIMER_STARTED(telescopeMouseTimer) // RESET_NET_TIMER(telescopeMouseTimer) // CDEBUG1LN(DEBUG_SAFEHOUSE, "HAS_MOUSE_JUST_MOVED: mouse still moving ") // ENDIF IF NOT HAS_NET_TIMER_STARTED(telescopeMouseTimer) START_NET_TIMER(telescopeMouseTimer,TRUE) CDEBUG1LN(DEBUG_SAFEHOUSE, "HAS_MOUSE_JUST_MOVED: START_NET_TIMER telescopeMouseTimer") ENDIF ENDIF IF HAS_NET_TIMER_STARTED(telescopeMouseTimer) IF HAS_NET_TIMER_EXPIRED(telescopeMouseTimer, 200, TRUE) RESET_NET_TIMER(telescopeMouseTimer) CDEBUG1LN(DEBUG_SAFEHOUSE, "HAS_MOUSE_JUST_MOVED: HAS_NET_TIMER_EXPIRED = TRUE") RETURN FALSE ELSE CDEBUG1LN(DEBUG_SAFEHOUSE, "HAS_MOUSE_JUST_MOVED: HAS_NET_TIMER_EXPIRED = FALSE") RETURN TRUE ENDIF ELSE CDEBUG1LN(DEBUG_SAFEHOUSE, "HAS_MOUSE_JUST_MOVED: HAS_NET_TIMER_STARTED = FALSE") RETURN FALSE ENDIF ENDFUNC PROC RUN_FIRST_PERSON_CAMERA() FLOAT fTemp//, fHyp, fSideX, fSideY VECTOR vCamRot //INT iSqueakCounter INT right_stick_x, right_stick_y, iIgnore, left_stick_y BOOL bPlayZoom = TRUE, bPlayTurn = TRUE IF NOT IS_PLAYER_SWITCH_IN_PROGRESS() IF IS_CAM_ACTIVE(cameraTelescope) //REMAP_LODSCALE_RANGE_THIS_FRAME(1.7,4.7,1.0,1.8) USE_SCRIPT_CAM_FOR_AMBIENT_POPULATION_ORIGIN_THIS_FRAME(TRUE, FALSE) SET_AMBIENT_VEHICLE_RANGE_MULTIPLIER_THIS_FRAME(8.0) //this is a multiplier.. 50 is crazy I've changed this down to 2.0 if there are issues talk with James Broad. // PRINTLN("GET_CAM_FOV(cameraTelescope)= ", GET_CAM_FOV(cameraTelescope)) // PRINTLN("fZoomChange = ", fZoomChange) SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_BEFORE_HUD) SET_SCRIPT_GFX_DRAW_BEHIND_PAUSEMENU(TRUE) DRAW_SCALEFORM_MOVIE_FULLSCREEN(sfMovie, 0,0,0,255) PRINTLN("POD: telescope: drawing scaleform - 1") IF NOT IS_PAUSE_MENU_ACTIVE() GET_CONTROL_VALUE_OF_ANALOGUE_STICKS_UNBOUND( iIgnore, left_stick_y, right_stick_x, right_stick_y) IF NOT IS_LOOK_INVERTED() right_stick_y *= -1 ENDIF IF IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL) right_stick_x = FLOOR(GET_CONTROL_UNBOUND_NORMAL(FRONTEND_CONTROL, INPUT_SCALED_LOOK_LR) * 127.0) right_stick_y = FLOOR(GET_CONTROL_UNBOUND_NORMAL(FRONTEND_CONTROL, INPUT_SCALED_LOOK_UD) * 127.0) ENDIF // invert the vertical IF (right_stick_y > STICK_DEAD_ZONE) OR (right_stick_y < (STICK_DEAD_ZONE * -1)) OR IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL) fTemp = TO_FLOAT(right_stick_y) IF IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL) fTemp *= -MOUSE_CAMERA_SPEED_ADJUST ELSE fTemp *= fTemp fTemp /= TO_FLOAT(128 - STICK_DEAD_ZONE) * TO_FLOAT(128 - STICK_DEAD_ZONE) IF (right_stick_y < 0) fTemp *= -1.0 ENDIF ENDIF fTemp *= fCamSpeed fCamChangeY += fTemp //fSideY = fTemp IF HAS_SOUND_FINISHED(iSoundTurnVert) AND NOT bHitVertLimit AND NOT IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL) CDEBUG1LN(DEBUG_SAFEHOUSE, " - PLAY_SOUND_FROM_ENTITY iSoundTurn") PLAY_SOUND_FROM_ENTITY(iSoundTurnVert, "Turn", oScope, sTelescopeSoundBank) ENDIF IF HAS_SOUND_FINISHED(iSoundTurnVert) AND NOT bHitVertLimit AND IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL) AND HAS_MOUSE_JUST_MOVED() CDEBUG1LN(DEBUG_SAFEHOUSE, " - PLAY_SOUND_FROM_ENTITY iSoundTurn") PLAY_SOUND_FROM_ENTITY(iSoundTurnVert, "Turn", oScope, sTelescopeSoundBank) ENDIF IF NOT HAS_SOUND_FINISHED(iSoundTurnVert) AND IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL) AND NOT HAS_MOUSE_JUST_MOVED() STOP_SOUND(iSoundTurnVert) ENDIF bPlayTurn = TRUE IF (fCamChangeY < fMinYChange) fCamChangeY = fMinYChange bPlayTurn = FALSE ENDIF IF (fCamChangeY > fMaxYChange) fCamChangeY = fMaxYChange bPlayTurn = FALSE ENDIF IF fCamChangeY != fMinYChange AND fCamChangeY != fMaxYChange bHitVertLimit = FALSE ENDIF ELSE IF NOT HAS_SOUND_FINISHED(iSoundTurnVert) STOP_SOUND(iSoundTurnVert) ENDIF IF fCamChangeY != fMinYChange AND fCamChangeY != fMaxYChange bHitVertLimit = FALSE ENDIF ENDIF IF bPlayTurn PLAY_SQUEAK(fTemp) ELSE IF NOT HAS_SOUND_FINISHED(iSoundTurnVert) IF NOT bHitVertLimit STOP_SOUND(iSoundTurnVert) PLAY_SOUND_FROM_ENTITY(iSoundTurnLimit, "Turn_Limit", oScope, sTelescopeSoundBank) CDEBUG1LN(DEBUG_SAFEHOUSE, GET_THIS_SCRIPT_NAME(), " - PLAY_SOUND_FROM_ENTITY iSoundTurnLimit") bHitVertLimit = TRUE ENDIF ENDIF ENDIF IF (right_stick_x > STICK_DEAD_ZONE) OR (right_stick_x < (STICK_DEAD_ZONE * -1)) OR IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL) fTemp = TO_FLOAT(right_stick_x) IF IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL) fTemp *= -MOUSE_CAMERA_SPEED_ADJUST ELSE fTemp *= fTemp fTemp /= TO_FLOAT(128 - STICK_DEAD_ZONE) * TO_FLOAT(128 - STICK_DEAD_ZONE) IF (right_stick_x > 0) fTemp *= -1.0 ENDIF ENDIF fTemp *= fCamSpeed fCamChangeX += fTemp //fSideX = fTemp IF HAS_SOUND_FINISHED(iSoundTurnHori) AND NOT bHitHorizLimit AND NOT IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL) // CDEBUG1LN(DEBUG_SAFEHOUSE, GET_THIS_SCRIPT_NAME(), " - PLAY_SOUND_FROM_ENTITY iSoundTurn") CDEBUG1LN(DEBUG_SAFEHOUSE, " - PLAY_SOUND_FROM_ENTITY iSoundTurn") PLAY_SOUND_FROM_ENTITY(iSoundTurnHori, "Turn", oScope, sTelescopeSoundBank) ENDIF IF HAS_SOUND_FINISHED(iSoundTurnHori) AND NOT bHitHorizLimit AND IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL) AND HAS_MOUSE_JUST_MOVED() // CDEBUG1LN(DEBUG_SAFEHOUSE, GET_THIS_SCRIPT_NAME(), " - PLAY_SOUND_FROM_ENTITY iSoundTurn") CDEBUG1LN(DEBUG_SAFEHOUSE, " - PLAY_SOUND_FROM_ENTITY iSoundTurn") PLAY_SOUND_FROM_ENTITY(iSoundTurnHori, "Turn", oScope, sTelescopeSoundBank) ENDIF IF HAS_SOUND_FINISHED(iSoundTurnHori) AND IS_USING_KEYBOARD_AND_MOUSE(PLAYER_CONTROL) AND NOT HAS_MOUSE_JUST_MOVED() STOP_SOUND(iSoundTurnHori) ENDIF bPlayTurn = TRUE IF (fCamChangeX < fMinXChange) fCamChangeX = fMinXChange bPlayTurn = FALSE ENDIF IF (fCamChangeX > fMaxXChange) fCamChangeX = fMaxXChange bPlayTurn = FALSE ENDIF IF fCamChangeX != fMinXChange AND fCamChangeX != fMaxXChange bHitHorizLimit = FALSE ENDIF ELSE IF NOT HAS_SOUND_FINISHED(iSoundTurnHori) STOP_SOUND(iSoundTurnHori) ENDIF IF fCamChangeX != fMinXChange AND fCamChangeX != fMaxXChange bHitHorizLimit = FALSE ENDIF bPlayTurn = FALSE ENDIF IF bPlayTurn PLAY_SQUEAK(fTemp) ELSE IF NOT HAS_SOUND_FINISHED(iSoundTurnHori) IF NOT bHitHorizLimit STOP_SOUND(iSoundTurnHori) PLAY_SOUND_FROM_ENTITY(iSoundTurnLimit, "Turn_Limit", oScope, sTelescopeSoundBank) CDEBUG1LN(DEBUG_SAFEHOUSE, GET_THIS_SCRIPT_NAME(), " - PLAY_SOUND_FROM_ENTITY iSoundTurnLimit") bHitHorizLimit = TRUE ENDIF ENDIF ENDIF // Zoom in/out IF (left_stick_y > STICK_DEAD_ZONE) OR (left_stick_y < (STICK_DEAD_ZONE * -1)) fTemp = TO_FLOAT(left_stick_y) fTemp *= fTemp fTemp /= TO_FLOAT(128 - STICK_DEAD_ZONE) * TO_FLOAT(128 - STICK_DEAD_ZONE) fTemp *= fZoomSpeed IF (left_stick_y < 0) fTemp *= -1.0 ENDIF IF HAS_SOUND_FINISHED(iSoundZoom) AND NOT bHitZoomLimit PLAY_SOUND_FROM_ENTITY(iSoundZoom, "Zoom", oScope, sTelescopeSoundBank) ENDIF bPlayZoom = TRUE fZoomChange += fTemp IF (fZoomChange < fMaxFOV) fZoomChange = fMaxFOV bPlayZoom = FALSE PRINTLN("(fZoomChange < fMaxFOV)", GET_CAM_FOV(cameraTelescope)) ENDIF IF (fZoomChange > fMinFOV) fZoomChange = fMinFOV bPlayZoom = FALSE PRINTLN("(fZoomChange > fMinFOV)", GET_CAM_FOV(cameraTelescope)) ENDIF IF fZoomChange != fMaxFOV AND fZoomChange != fMinFOV bHitZoomLimit = FALSE ENDIF ELSE IF fZoomChange != fMaxFOV AND fZoomChange != fMinFOV bHitZoomLimit = FALSE ENDIF bPlayZoom = FALSE ENDIF IF NOT bPlayZoom IF NOT HAS_SOUND_FINISHED(iSoundZoom) IF NOT bHitZoomLimit STOP_SOUND(iSoundZoom) PLAY_SOUND_FROM_ENTITY(iSoundZoomLimit, "Zoom_Limit", oScope, sTelescopeSoundBank) bHitZoomLimit = TRUE ENDIF ENDIF ENDIF IF IS_CONTROL_JUST_PRESSED(PLAYER_CONTROL, INPUT_SCRIPT_RB) fCamChangeX = 0 fCamChangeY = 0 fZoomChange = 0 ENDIF vCamRot = vLookCamRot vCamRot += <> SET_CAM_ROT(cameraTelescope, vCamRot) fCamSpeed = fZoomChange/(fSpeedMultiplier) IF fZoomChange > 0 SET_CAM_FOV(cameraTelescope, fZoomChange) ELSE SET_CAM_FOV(cameraTelescope, fMinFOV) ENDIF ENDIF ENDIF ENDIF ENDPROC FUNC BOOL IS_TELESCOPE_CLEAR_OF_PEDS(VECTOR vPos) PED_INDEX mPed[8] INT iPeds = GET_PED_NEARBY_PEDS(PLAYER_PED_ID(), mPed) IF iPeds > 0 INT i FOR i = 0 TO 7 IF NOT IS_PED_INJURED(mPed[i]) IF IS_ENTITY_AT_COORD(mPed[i], vPos, <<0.5, 0.5, 1.0>>) RETURN FALSE ENDIF ENDIF ENDFOR ENDIF RETURN TRUE ENDFUNC FUNC BOOL IS_AREA_CLEAR_OF_OBSTRUCTION(VECTOR vPos) BOOL bReturn = TRUE VEHICLE_INDEX vehTemp // PED_INDEX pedTemp vehTemp = GET_RANDOM_VEHICLE_IN_SPHERE(vPos, 3, DUMMY_MODEL_FOR_SCRIPT, VEHICLE_SEARCH_FLAG_RETURN_MISSION_VEHICLES|VEHICLE_SEARCH_FLAG_RETURN_RANDOM_VEHICLES) IF DOES_ENTITY_EXIST(vehTemp) bReturn = FALSE ENDIF vehTemp = GET_PLAYERS_LAST_VEHICLE() IF DOES_ENTITY_EXIST(vehTemp) IF IS_ENTITY_AT_COORD(vehTemp, vPos, <<3,3,3>>) bReturn = FALSE ENDIF ENDIF // pedTemp = GET_RANDOM_PED_AT_COORD(vPos, <<0.5,0.5,0.5>>, PEDTYPE_PLAYER_NETWORK) // IF DOES_ENTITY_EXIST(pedTemp) // bReturn = FALSE // ENDIF //Don't allow if another ped is at the telescope. IF NETWORK_IS_GAME_IN_PROGRESS() //IF IS_ANY_PED_IN_SPHERE(vPos+<<0, 0, 0.2>>, 0.25, PLAYER_PED_ID()) IF NOT IS_TELESCOPE_CLEAR_OF_PEDS(vPos) bReturn = FALSE ENDIF ENDIF // PRINTLN("@@@@@@@@@ IS_AREA_CLEAR_OF_OBSTRUCTION - NET = ", bReturn, " @@@@@@@@@") RETURN bReturn ENDFUNC PROC INITIALISE_SOUNDS() iSoundCoinDrop = GET_SOUND_ID() iSoundCountdown = GET_SOUND_ID() iSoundTimer = GET_SOUND_ID() iSoundTurnVert = GET_SOUND_ID() iSoundTurnHori = GET_SOUND_ID() iSoundTurnLimit = GET_SOUND_ID() iSoundZoom = GET_SOUND_ID() iSoundZoomLimit = GET_SOUND_ID() // iSoundEndUse = GET_SOUND_ID() IF bPublicTelescope IF IS_LOCAL_PLAYER_IN_ARENA_SPECTATOR_BOX() sTelescopeSoundBank = "TELESCOPE_High_End" ELSE sTelescopeSoundBank = "TELESCOPE_COIN_OP" ENDIF ELSE sTelescopeSoundBank = "TELESCOPE_DOMESTIC" ENDIF ENDPROC PROC PLAY_COIN_DROP() PRINTSTRING("PLAY_COIN_DROP") PRINTNL() IF bPublicTelescope PRINTSTRING("PLAY_COIN_DROP bPublicTelescope") PRINTNL() IF NOT IS_LOCAL_PLAYER_IN_ARENA_SPECTATOR_BOX() PLAY_SOUND_FROM_ENTITY(iSoundCoinDrop, "Insert_Coin", oScope, sTelescopeSoundBank) PLAY_SOUND_FROM_ENTITY(iSoundTimer, "Timer", oScope, sTelescopeSoundBank) ENDIF IF g_bInMultiplayer IF IS_LOCAL_PLAYER_IN_ARENA_SPECTATOR_BOX() IF USE_SERVER_TRANSACTIONS() INT iTransactionID TRIGGER_FIRE_AND_FORGET_SERVICE_TRANSACTION(SERVICE_SPEND_ARENA_SPECTATOR_BOX, 2, iTransactionID) g_cashTransactionData[iTransactionID].cashInfo.iItemHash = 0 ELSE NETWORK_SPEND_ARENA_SPECTATOR_BOX(2, 0, FALSE, FALSE) ENDIF ELSE GIVE_LOCAL_PLAYER_FM_CASH(-1,1,TRUE,0) IF USE_SERVER_TRANSACTIONS() INT iTransactionID TRIGGER_FIRE_AND_FORGET_SERVICE_TRANSACTION(SERVICE_SPEND_TELESCOPE, 1, iTransactionID) ELSE NETWORK_SPENT_TELESCOPE(1) ENDIF ENDIF ELSE DEBIT_BANK_ACCOUNT(GET_CURRENT_PLAYER_PED_ENUM(), BAAC_UNLOGGED_SMALL_ACTION, scopeCost) ENDIF ENDIF ENDPROC PROC PLAY_COUNTDOWN() IF bPublicTelescope STOP_SOUND(iSoundTimer) PLAY_SOUND_FROM_ENTITY(iSoundCountdown, "10_Seconds", oScope, sTelescopeSoundBank) ENDIF ENDPROC PROC GET_CAM_POS_AND_ROTATION_FOR_SCOPE() VECTOR vMin, vMax, vOffset IF GET_ENTITY_MODEL(oScope) = PROP_TELESCOPE OR GET_ENTITY_MODEL(oScope) = PROP_TELESCOPE_01 OR GET_ENTITY_MODEL(oScope) = INT_TO_ENUM(MODEL_NAMES, HASH("XS_PROP_ARENA_TELESCOPE_01")) bPublicTelescope = TRUE ENDIF GET_MODEL_DIMENSIONS(GET_ENTITY_MODEL(oScope), vMin, vMax) vLookCamRot = GET_ENTITY_ROTATION(oScope) IF bPublicTelescope sScopeContextHelp = "TELEHLP" IF IS_LOCAL_PLAYER_IN_ARENA_SPECTATOR_BOX() sScopeContextHelp = "TELEHLP2" ENDIF IF GET_ENTITY_MODEL(oScope) = PROP_TELESCOPE_01 OR GET_ENTITY_MODEL(oScope) = INT_TO_ENUM(MODEL_NAMES, HASH("XS_PROP_ARENA_TELESCOPE_01")) vLookCamRot.z -= 180 vOffset = <<0, -vMax.y-0.5, vMax.z+0.5>> ELSE vOffset = <<0, vMax.y, vMax.z>> ENDIF ELSE vLookCamRot.z -= 270 sScopeContextHelp = "TELEHOME" vOffset = <<-fHomeTelescopeOffset, 0, (vMax.z+0.2)>> ENDIF IF vLookCamRot.z < 0 vLookCamRot.z += 360 ENDIF vLookCamPos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(oScope, vOffset) ENDPROC FUNC BOOL IS_PLAYER_TAKING_DAMAGE() IF HAS_ENTITY_BEEN_DAMAGED_BY_ANY_OBJECT(PLAYER_PED_ID()) OR HAS_ENTITY_BEEN_DAMAGED_BY_ANY_PED(PLAYER_PED_ID()) OR HAS_ENTITY_BEEN_DAMAGED_BY_ANY_VEHICLE(PLAYER_PED_ID()) CLEAR_ENTITY_LAST_DAMAGE_ENTITY(PLAYER_PED_ID()) RETURN TRUE ENDIF RETURN FALSE ENDFUNC FUNC BOOL IS_PLAYER_OK(PLAYER_INDEX thePlayer) IF NETWORK_IS_GAME_IN_PROGRESS() IF NOT IS_NET_PLAYER_OK(thePlayer) OR IS_PED_RAGDOLL(PLAYER_PED_ID()) OR IS_PLAYER_TAKING_DAMAGE() RETURN FALSE ENDIF RETURN TRUE ELSE IF NOT IS_PED_INJURED(PLAYER_PED_ID()) IF IS_PED_RAGDOLL(PLAYER_PED_ID()) RETURN FALSE ENDIF RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL DOES_PLAYER_HAVE_ENOUGH_MONEY() IF g_bInMultiplayer IF GET_ENTITY_MODEL(oScope) = INT_TO_ENUM(MODEL_NAMES, HASH("XS_PROP_ARENA_TELESCOPE_01")) IF NETWORK_CAN_SPEND_MONEY(2, FALSE, FALSE, FALSE) RETURN TRUE ELSE RETURN FALSE ENDIF ENDIF IF GET_PLAYER_FM_CASH(PLAYER_ID()) > 0 RETURN TRUE ENDIF ELSE IF GET_TOTAL_CASH(GET_CURRENT_PLAYER_PED_ENUM()) > 0 RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL HAS_PLAYER_CLEAR_LOS_TO_OBSERVATORY_SCOPE() IF DOES_ENTITY_EXIST(oScope) IF GET_ENTITY_MODEL(oScope) = PROP_TELESCOPE_01 OR GET_ENTITY_MODEL(oScope) = INT_TO_ENUM(MODEL_NAMES, HASH("XS_PROP_ARENA_TELESCOPE_01")) IF HAS_ENTITY_CLEAR_LOS_TO_ENTITY(PLAYER_PED_ID(), oScope) RETURN TRUE ENDIF ELSE RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL CAN_PLAYER_USE_TELESCOPE() IF NETWORK_IS_GAME_IN_PROGRESS() //MP checks. IF IS_BIT_SET(MPSpecGlobals.iBitSet, GLOBAL_SPEC_BS_USING_MP_TV_SEAT) OR IS_BIT_SET(MPSpecGlobals.iBitSet, GLOBAL_SPEC_BS_APPROACHED_MP_TV_SEAT) RETURN FALSE ENDIF IF IS_PLAYER_CRITICAL_TO_ANY_EVENT(PLAYER_ID()) AND NOT IS_PROPERTY_OFFICE(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty) CDEBUG2LN(DEBUG_SAFEHOUSE, "CAN_PLAYER_USE_TELESCOPE: IS_PLAYER_CRITICAL_TO_ANY_EVENT = TRUE, returning FALSE") RETURN FALSE ENDIF IF IS_PLAYER_USING_BALLISTIC_EQUIPMENT(PLAYER_ID()) PRINTLN ("CAN_PLAYER_USE_TELESCOPE: IS_PLAYER_USING_BALLISTIC_EQUIPMENT = TRUE, returning FALSE") RETURN FALSE ENDIF IF NOT HAS_PLAYER_FOUND_DOUBLE_ACTION_REVOLVER() IF g_treasurehunt_is_player_close_to_first_clue PRINTLN ("CAN_PLAYER_USE_TELESCOPE: HAS_PLAYER_FOUND_DOUBLE_ACTION_REVOLVER g_treasurehunt_is_player_close_to_first_clue , returning FALSE") RETURN FALSE ENDIF ENDIF IF ARE_TELESCOPES_DISABLED() PRINTLN ("CAN_PLAYER_USE_TELESCOPE: ARE_TELESCOPES_DISABLED = TRUE , returning FALSE") RETURN FALSE ENDIF IF GET_ENTITY_MODEL(oScope) = INT_TO_ENUM(MODEL_NAMES, HASH("XS_PROP_ARENA_TELESCOPE_01")) IF NOT IS_HEADING_ACCEPTABLE_CORRECTED(GET_ENTITY_HEADING(PLAYER_PED_ID()), 0.0, 50.0) PRINTLN ("CAN_PLAYER_USE_TELESCOPE: IS_HEADING_ACCEPTABLE_CORRECTED , returning FALSE") RETURN FALSE ENDIF IF g_bCelebrationScreenIsActive PRINTLN ("CAN_PLAYER_USE_TELESCOPE: g_bCelebrationScreenIsActive , returning FALSE") RETURN FALSE ENDIF IF g_sMPTunables.bAW_DISABLE_TELESCOPE PRINTLN ("CAN_PLAYER_USE_TELESCOPE: bAW_DISABLE_TELESCOPE , returning FALSE") RETURN FALSE ENDIF ENDIF ELSE //SP checks. IF IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_ANIMAL) OR IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_DIRECTOR) RETURN FALSE ENDIF ENDIF RETURN TRUE ENDFUNC /// PURPOSE: /// Check the player is alone in the trigger area FUNC BOOL IS_PLAYER_ALONE_IN_AREA(VECTOR VecCoords, VECTOR locateSize) PED_INDEX mPed[8] INT iPeds = GET_PED_NEARBY_PEDS(PLAYER_PED_ID(), mPed) IF iPeds > 0 INT i FOR i = 0 TO 7 IF NOT IS_PED_INJURED(mPed[i]) IF IS_ENTITY_AT_COORD(mPed[i], VecCoords, <>) // IF IS_ENTITY_IN_ANGLED_AREA(mPed[i], vTriggerArea1, vTriggerArea2, AREA_WIDTH) RETURN FALSE ENDIF ENDIF ENDFOR ENDIF RETURN TRUE ENDFUNC PROC runTelescope() //BOOL y, yy, yyy, yyyy VECTOR buyPos//, triggerPos = GET_ENTITY_COORDS(oScope) IF bPublicTelescope IF GET_ENTITY_MODEL(oScope) = PROP_TELESCOPE // Mountain buyPos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(oScope, <<0.02, -0.78, 0.0>>) animEnter = "UPRIGHT_ENTER_FRONT" animLoop = "UPRIGHT_IDLE" animExit = "UPRIGHT_EXIT_FRONT" // vScopeHeading = 0 ELIF GET_ENTITY_MODEL(oScope) = INT_TO_ENUM(MODEL_NAMES, HASH("XS_PROP_ARENA_TELESCOPE_01")) buyPos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(oScope, <<-0.03, 0.96, 0.0>>) animEnter = "PUBLIC_ENTER_FRONT" animLoop = "PUBLIC_IDLE" animExit = "PUBLIC_EXIT_FRONT" ELSE // Observatory IF g_bInMultiplayer buyPos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(oScope, <<-0.03, 0.96, 0.0>>) ELSE // SCRIPT_ASSERT("POD: NOT in multiplayer") buyPos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(oScope, <<0.2, 0.96, 0.0>>) ENDIF animEnter = "PUBLIC_ENTER_FRONT" animLoop = "PUBLIC_IDLE" animExit = "PUBLIC_EXIT_FRONT" // vScopeHeading = -180 ENDIF //#IF NOT USE_CLF_DLC //#IF NOT USE_NRM_DLC ELSE PRINTLN("POD: TELESCOPES: private telescope") // Franklin's apartment // buyPos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(oScope, <<1.14, -0.35, 0.0>>) IF g_bInMultiplayer // SCRIPT_ASSERT("POD: in multiplayer") buyPos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(oScope, <<1.14, 0.02, 0.0>>) ELSE #IF NOT USE_SP_DLC // SCRIPT_ASSERT("POD: NOT in multiplayer") buyPos = GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(oScope, <<1.0, -0.4, 0.0>>) #ENDIF ENDIF animEnter = "ENTER_FRONT" animLoop = "IDLE" animExit = "EXIT_FRONT" // vScopeHeading = 90 // buyPos = GET_ANIM_INITIAL_OFFSET_POSITION(animDictEnter, "ENTER_FRONT", GET_ENTITY_COORDS(oScope), <<0,0,vScopeHeading>>) #IF NOT USE_SP_DLC FLOW_BITSET_IDS eFlowBitsetToQuery INT iOffsetBitIndex IF ENUM_TO_INT(LAUNCH_BIT_SH_INTRO_F_HILLS) <= 31 eFlowBitsetToQuery = FLOWBITSET_RESTART_FLOW_LAUNCHED_SCRIPTS_1 iOffsetBitIndex = ENUM_TO_INT(LAUNCH_BIT_SH_INTRO_F_HILLS) ELSE eFlowBitsetToQuery = FLOWBITSET_RESTART_FLOW_LAUNCHED_SCRIPTS_2 iOffsetBitIndex = ENUM_TO_INT(LAUNCH_BIT_SH_INTRO_F_HILLS) - 31 ENDIF IF IS_BIT_SET(g_savedGlobals.sFlow.controls.bitsetIDs[eFlowBitsetToQuery], iOffsetBitIndex) PRINTLN("POD: TELESCOPES: iOffsetBitIndex exiting") EXIT ENDIF #endif ENDIF VECTOR locateSize = <<1.2,1.2,1.2>> IF IS_PROPERTY_OFFICE(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty) locateSize = <<0.8,0.8,0.8>> ENDIF IF GET_ENTITY_MODEL(oScope) = INT_TO_ENUM(MODEL_NAMES, HASH("XS_PROP_ARENA_TELESCOPE_01")) locateSize = <<0.8,0.7, 1.0>> ENDIF //PRINTSTRING("Telescop coords:") PRINTVECTOR(GET_ENTITY_COORDS(oScope)) PRINTNL() IF bPublicTelescope IF iTelescopeStartTime > 0 IF GET_GAME_TIMER() > (iTelescopeStartTime+(TELESCOPE_TIME-9500)) IF HAS_SOUND_FINISHED(iSoundCountdown) IF GET_GAME_TIMER() < (iTelescopeStartTime+TELESCOPE_TIME) PLAY_COUNTDOWN() ELSE IF scopeStage <> grabPlayer IF GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_PED_SLIDE_TO_COORD) = FINISHED_TASK iTelescopeStartTime = -1 ENDIF ENDIF STOP_SOUND(iSoundTimer) STOP_SOUND(iSoundTurnVert) STOP_SOUND(iSoundTurnHori) STOP_SOUND(iSoundZoom) ENDIF ENDIF ENDIF ENDIF ENDIF IF IS_PROPERTY_OFFICE(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty) IF NOT DOES_ENTITY_EXIST(oBlinds) // CDEBUG1LN(DEBUG_SAFEHOUSE, "grabbing new blinds") oBlinds = GET_CLOSEST_OBJECT_OF_TYPE(GET_ENTITY_COORDS(oScope), 20, INT_TO_ENUM(MODEL_NAMES, HASH("EX_prop_office_louvres")), FALSE) ENDIF ENDIF PRINTLN("POD: TELESCOPES: scopeStage", scopeStage) SWITCH scopeStage CASE playerOutOfRange IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), buyPos, <>) IF GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) = GET_INTERIOR_FROM_ENTITY(oScope) // REQUEST_AMBIENT_AUDIO_BANK("TELESCOPES") IF bPublicTelescope IF NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("TELECSH") INT iCost iCost = 0 IF GET_ENTITY_MODEL(oScope) = INT_TO_ENUM(MODEL_NAMES, HASH("XS_PROP_ARENA_TELESCOPE_01")) iCost = 1 ENDIF IF GET_TOTAL_CASH(GET_CURRENT_PLAYER_PED_ENUM()) > iCost OR GET_GAME_TIMER() < (iTelescopeStartTime+TELESCOPE_TIME) scopeStage = waitForPlayer ENDIF ENDIF ELSE scopeStage = waitForPlayer ENDIF ENDIF ENDIF ENDIF BREAK CASE waitForPlayer IF IS_BIT_SET(iBoolsBitSet, iBS_STORE_ACTIVE) IF NOT g_sShopSettings.bProcessStoreAlert CLEAR_BIT(iBoolsBitSet, iBS_STORE_ACTIVE) PRINTLN("ob_telescope: NET_SET_PLAYER_CONTROL- A") //NET_SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) PRINTLN("@@@@@@@@@@ --> CONTACT REQUESTS - LAUNCH_STORE_CASH_ALERT - CLEARED") ENDIF ENDIF // IF NOT MPGlobalsAmbience.bUsingTelescope // OR NOT NETWORK_IS_GAME_IN_PROGRESS() IF CAN_PLAYER_START_CUTSCENE() AND IS_PLAYER_OK(PLAYER_ID()) //y = IS_ENTITY_AT_COORD(PLAYER_PED_ID(), buyPos, <>) //yy = IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) //yyy = IS_AREA_CLEAR_OF_OBSTRUCTION(buyPos) //yyyy =GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) = GET_INTERIOR_FROM_ENTITY(oScope) //PRINTSTRING("Paul - bools ") PRINTBOOL(y)PRINTBOOL(yy)PRINTBOOL(yyy)PRINTBOOL(yyyy) PRINTNL() IS_ENTITY_AT_COORD(PLAYER_PED_ID(), buyPos, <<0.5, 0.5, 1.0>>) IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), buyPos, <>) AND NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND IS_AREA_CLEAR_OF_OBSTRUCTION(buyPos) AND GET_INTERIOR_FROM_ENTITY(PLAYER_PED_ID()) = GET_INTERIOR_FROM_ENTITY(oScope) AND HAS_PLAYER_CLEAR_LOS_TO_OBSERVATORY_SCOPE() AND CAN_PLAYER_USE_TELESCOPE() AND NOT scopeFallen AND IS_PLAYER_ALONE_IN_AREA(buyPos, locateSize) IF DOES_PLAYER_HAVE_ENOUGH_MONEY() OR GET_GAME_TIMER() < (iTelescopeStartTime+TELESCOPE_TIME) OR NOT bPublicTelescope IF IS_PLAYER_PLAYING(PLAYER_ID()) AND IS_PLAYER_CONTROL_ON(PLAYER_ID()) // IF NOT IS_PLAYER_FREE_AIMING(PLAYER_ID()) // AND NOT IS_PLAYER_TARGETTING_ANYTHING(PLAYER_ID()) IF bPublicTelescope IF GET_GAME_TIMER() < (iTelescopeStartTime+TELESCOPE_TIME) sScopeContextHelp = "TELEHOME" ELSE IF ARE_STRINGS_EQUAL(sScopeContextHelp, "TELEHOME") // PRINTSTRING("RELEASE CONTEXT 1") PRINTNL() RELEASE_CONTEXT_INTENTION(iContextButtonIntention) ENDIF sScopeContextHelp = "TELEHLP" IF IS_LOCAL_PLAYER_IN_ARENA_SPECTATOR_BOX() sScopeContextHelp = "TELEHLP2" ENDIF ENDIF ENDIF IF IS_ENTITY_AT_COORD(PLAYER_PED_ID(), buyPos, locateSize) AND NOT IS_SCRIPT_HUD_DISPLAYING(HUDPART_TRANSITIONHUD) AND NOT IS_PAUSE_MENU_ACTIVE_EX() AND ((GET_GAME_TIMER() < (iTelescopeStartTime+TELESCOPE_TIME)) OR (iTelescopeStartTime = -1)) AND NOT IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), animDictExit, animExit) IF iContextButtonIntention = NEW_CONTEXT_INTENTION REGISTER_CONTEXT_INTENTION(iContextButtonIntention, CP_MEDIUM_PRIORITY, sScopeContextHelp) ENDIF BOOL bDontRequestAudio IF GET_ENTITY_MODEL(oScope) = INT_TO_ENUM(MODEL_NAMES, HASH("XS_PROP_ARENA_TELESCOPE_01")) bDontRequestAudio = TRUE ENDIF IF HAS_CONTEXT_BUTTON_TRIGGERED(iContextButtonIntention) AND (bDontRequestAudio OR REQUEST_AMBIENT_AUDIO_BANK("TELESCOPES")) eStoredHelmet = GET_PED_COMP_ITEM_CURRENT_MP(PLAYER_PED_ID(), COMP_TYPE_PROPS, ENUM_TO_INT(ANCHOR_HEAD)) eStoredMask = GET_PED_COMP_ITEM_CURRENT_MP(PLAYER_PED_ID(), COMP_TYPE_BERD) IF GET_FOLLOW_PED_CAM_VIEW_MODE() = CAM_VIEW_MODE_FIRST_PERSON PRINTLN("POD: TELESCOPE: IN FIRST PERSON") ELSE PRINTLN("POD: TELESCOPE: NOT IN FIRST PERSON") ENDIF CLEAR_HELP() GET_CAM_POS_AND_ROTATION_FOR_SCOPE() IF NOT g_bInMultiplayer IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<14.536638,529.315369,173.628204>>, <<12.656813,528.802307,175.878204>>, 2) VECTOR tempHeadingVector tempHeadingVector = <<0, 0, GET_ENTITY_HEADING(oScope)>> VECTOR vTempPos vTempPos = GET_ANIM_INITIAL_OFFSET_POSITION( animDictEnter, animEnter, GET_ENTITY_COORDS(oScope), tempHeadingVector ) VECTOR vTempRotation vTempRotation = GET_ANIM_INITIAL_OFFSET_ROTATION( animDictEnter, animEnter, GET_ENTITY_COORDS(oScope), tempHeadingVector ) TASK_GO_STRAIGHT_TO_COORD(PLAYER_PED_ID(), vTempPos, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, vTempRotation.Z, 0.05) PRINTLN("POD: TELESCOPE: TASK_GO_STRAIGHT_TO_COORD") ELSE SET_MULTIHEAD_SAFE(TRUE,TRUE) //B* 2223476 SET_UP_CAMERA() RUN_FIRST_PERSON_CAMERA() PRINTLN("POD: TELESCOPE: SET_UP_CAMERA 1") ENDIF STOP_FIRE_IN_RANGE(buyPos, 10) SET_PLAYER_CONTROL(PLAYER_ID(), FALSE) g_bCurrentlyUsingTelescope = TRUE // Prevent Chop running off when using a telescope SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE) ELSE VECTOR tempHeadingVector tempHeadingVector = <<0, 0, GET_ENTITY_HEADING(oScope)>> VECTOR vTempPos vTempPos = GET_ANIM_INITIAL_OFFSET_POSITION( animDictEnter, animEnter, GET_ENTITY_COORDS(oScope), tempHeadingVector ) VECTOR vTempRotation vTempRotation = GET_ANIM_INITIAL_OFFSET_ROTATION( animDictEnter, animEnter, GET_ENTITY_COORDS(oScope), tempHeadingVector ) SET_MULTIHEAD_SAFE(TRUE,TRUE) TASK_GO_STRAIGHT_TO_COORD(PLAYER_PED_ID(), vTempPos, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, vTempRotation.Z, 0.05) // SET_ENTITY_NO_COLLISION_ENTITY(PLAYER_PED_ID(), oScope, TRUE) // TASK_GO_STRAIGHT_TO_COORD(PLAYER_PED_ID(), buyPos, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, GET_ENTITY_HEADING(oScope) + vScopeHeading, 0.1) DISABLE_INTERACTION_MENU() NET_SET_PLAYER_CONTROL(PLAYER_ID(), FALSE, NSPC_CAN_BE_TARGETTED | NSPC_ALLOW_PLAYER_DAMAGE) MPGlobalsAmbience.bUsingTelescope = TRUE ENDIF IF GET_FOLLOW_PED_CAM_VIEW_MODE() = CAM_VIEW_MODE_FIRST_PERSON SET_PED_DESIRED_HEADING(PLAYER_PED_ID(), GET_HEADING_BETWEEN_VECTORS_2D(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(oScope))) PRINTLN("POD: SET_PED_DESIRED_HEADING: ", GET_HEADING_BETWEEN_VECTORS_2D(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(oScope))) FORCE_PED_MOTION_STATE(PLAYER_PED_ID(), MS_AIMING) SET_PED_RESET_FLAG(PLAYER_PED_ID(), PRF_ForcePedToStrafe, TRUE) ENDIF GET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), storedWeapon) SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE) /*OPEN_SEQUENCE_TASK(seq) TASK_PED_SLIDE_TO_COORD_HDG_RATE(NULL, buyPos, vLookCamRot.z, 100.0, 270.0) TASK_PLAY_ANIM(NULL, animDictEnter, animEnter, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_HIDE_WEAPON) //TASK_PLAY_ANIM(NULL, animDictEnter, "IDLE", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_HIDE_WEAPON) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(PLAYER_PED_ID(), seq) PRINTSTRING("PAUL - FORCE_PED_AI_AND_ANIMATION_UPDATE waitForPlayer") PRINTNL() FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID()) CLEAR_SEQUENCE_TASK(seq)*/ RELEASE_CONTEXT_INTENTION(iContextButtonIntention) SET_PED_STEALTH_MOVEMENT(PLAYER_PED_ID(), FALSE) SETTIMERA(0) scopeStage = grabPlayer INIT_PC_SCRIPTED_CONTROLS("Ob_Telescope") bSetupPCControls = TRUE //WAIT(100000) ENDIF ELSE PRINTSTRING("RELEASE CONTEXT 4") PRINTNL() RELEASE_CONTEXT_INTENTION(iContextButtonIntention) ENDIF // ELSE // RELEASE_CONTEXT_INTENTION(iContextButtonIntention) // ENDIF ELSE //PRINTSTRING("RELEASE CONTEXT 5") PRINTNL() RELEASE_CONTEXT_INTENTION(iContextButtonIntention) ENDIF ELSE IF NOT NETWORK_IS_GAME_IN_PROGRESS() // PRINTSTRING("RELEASE CONTEXT 6") PRINTNL() RELEASE_CONTEXT_INTENTION(iContextButtonIntention) PRINT_HELP("TELECSH") ELSE IF iContextButtonIntention = NEW_CONTEXT_INTENTION IF IS_LOCAL_PLAYER_IN_ARENA_SPECTATOR_BOX() REGISTER_CONTEXT_INTENTION(iContextButtonIntention, CP_MEDIUM_PRIORITY, "TELECSH") ELSE REGISTER_CONTEXT_INTENTION(iContextButtonIntention, CP_MEDIUM_PRIORITY, "TELEHLP") ENDIF ENDIF IF HAS_CONTEXT_BUTTON_TRIGGERED(iContextButtonIntention) AND NOT IS_LOCAL_PLAYER_IN_ARENA_SPECTATOR_BOX() IF NOT IS_BIT_SET(iBoolsBitSet, iBS_STORE_ACTIVE) LAUNCH_STORE_CASH_ALERT() SET_BIT(iBoolsBitSet, iBS_STORE_ACTIVE) //NET_SET_PLAYER_CONTROL(PLAYER_ID(), FALSE, TRUE, TRUE, TRUE, TRUE, TRUE, FALSE, TRUE, FALSE) PRINTLN("@@@@@@@@@@ --> CONTACT REQUESTS - LAUNCH_STORE_CASH_ALERT - CALLED") ENDIF ENDIF ENDIF ENDIF ELSE #IF IS_DEBUG_BUILD IF NOT IS_PLAYER_ALONE_IN_AREA(buyPos, locateSize) CDEBUG1LN(DEBUG_SAFEHOUSE, "waitForPlayer: IS_PLAYER_ALONE_IN_AREA = FALSE") ENDIF #ENDIF //PRINTSTRING("RELEASE CONTEXT 7") PRINTNL() RELEASE_CONTEXT_INTENTION(iContextButtonIntention) ENDIF ELSE //PRINTSTRING("RELEASE CONTEXT 8") PRINTNL() RELEASE_CONTEXT_INTENTION(iContextButtonIntention) ENDIF // ELSE // //PRINTSTRING("RELEASE CONTEXT 9") PRINTNL() // RELEASE_CONTEXT_INTENTION(iContextButtonIntention) // ENDIF BREAK CASE grabPlayer IF IS_PLAYER_OK(PLAYER_ID()) // CDM- Fix for focus not clearing when dead IF IS_LOCAL_PLAYER_IN_ARENA_SPECTATOR_BOX() sfMovie = REQUEST_SCALEFORM_MOVIE("observatory_scope") PRINTLN("POD: telescope: requesting scaleform") WHILE (NOT HAS_SCALEFORM_MOVIE_LOADED(sfMovie)) WAIT(0) ENDWHILE PRINTLN("POD: telescope: scaleform loaded") ENDIF IF NOT g_bInMultiplayer IF IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<14.536638,529.315369,173.628204>>, <<12.656813,528.802307,175.878204>>, 2) PRINTLN("POD: TELESCOPE: SET_UP_CAMERA 2") RUN_FIRST_PERSON_CAMERA() ENDIF ENDIF IF GET_FOLLOW_PED_CAM_VIEW_MODE() = CAM_VIEW_MODE_FIRST_PERSON SET_PED_DESIRED_HEADING(PLAYER_PED_ID(), GET_HEADING_BETWEEN_VECTORS_2D(GET_ENTITY_COORDS(PLAYER_PED_ID()), GET_ENTITY_COORDS(oScope))) SET_PED_RESET_FLAG(PLAYER_PED_ID(), PRF_ForcePedToStrafe, TRUE) ENDIF IF GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_GO_STRAIGHT_TO_COORD) = FINISHED_TASK AND GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_GO_STRAIGHT_TO_COORD) != WAITING_TO_START_TASK AND GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_GO_STRAIGHT_TO_COORD) != PERFORMING_TASK //OR NOT g_bInMultiplayer //AND TIMERA() > 2500 DISABLE_SELECTOR_THIS_FRAME() PRINTLN("POD: TELESCOPE: FINISHED APPRAOCH SUCCESSFULLY") //SET_ENTITY_COORDS_GROUNDED(PLAYER_PED_ID(), buyPos)//, vLookCamRot.z, 100.0, 270.0) //SET_ENTITY_HEADING(PLAYER_PED_ID(), vLookCamRot.z) // IF NOT g_bInMultiplayer // TASK_PLAY_ANIM(PLAYER_PED_ID(), animDictEnter, animLoop, REALLY_SLOW_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_HIDE_WEAPON|AF_LOOPING) // scopeStage = playEnter // ELSE IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<14.536638,529.315369,173.628204>>, <<12.656813,528.802307,175.878204>>, 2) TASK_PLAY_ANIM_ADVANCED(PLAYER_PED_ID(), animDictEnter, animEnter, GET_ENTITY_COORDS(oScope), GET_ENTITY_ROTATION(oScope),REALLY_SLOW_BLEND_IN, 0.1, -1, AF_HIDE_WEAPON|AF_EXTRACT_INITIAL_OFFSET|AF_USE_MOVER_EXTRACTION)//|AF_TURN_OFF_COLLISION) ENDIF scopeStage = playEnter // ENDIF PRINTSTRING("PAUL - FORCE_PED_AI_AND_ANIMATION_UPDATE grabPlayer") PRINTNL() //FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID()) IF g_bInMultiplayer PRINTLN("ob_telescope: removing masks") SET_PED_COMP_ITEM_CURRENT_MP(PLAYER_PED_ID(), COMP_TYPE_BERD, BERD_FMM_0_0, FALSE) IF IS_ITEM_A_HELMET(GET_ENTITY_MODEL(PLAYER_PED_ID()), COMP_TYPE_PROPS, GET_PED_COMP_ITEM_CURRENT_MP(PLAYER_PED_ID(), COMP_TYPE_PROPS, ENUM_TO_INT(ANCHOR_HEAD))) PRINTLN("ob_telescope: removing helmet") CLEAR_PED_PROP(PLAYER_PED_ID(), ANCHOR_HEAD) ENDIF REMOVE_MP_HEIST_GEAR(PLAYER_PED_ID(), HEIST_GEAR_NIGHTVISION) IF IS_PED_WEARING_PILOT_SUIT(PLAYER_PED_ID(), PED_COMP_TEETH) PRINTLN("ob_telescope: removing pilot suit") SET_PED_COMPONENT_VARIATION(PLAYER_PED_ID(), PED_COMP_TEETH, 0, 0) ENDIF IF IS_PED_WEARING_HAZ_HOOD_UP(PLAYER_PED_ID()) SWAP_CHEM_SUIT_HOOD_FOR_ALTERNATE(PLAYER_PED_ID()) bSwappedChemSuit = TRUE ENDIF ENDIF ELIF TIMERA() > 2500 AND NOT IS_LOCAL_PLAYER_IN_ARENA_SPECTATOR_BOX() CLEAR_PED_TASKS(PLAYER_PED_ID()) IF NOT g_bInMultiplayer PRINTLN("POD: TELESCOPE: FAILED APPRAOCH ") SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE) g_bCurrentlyUsingTelescope = FALSE ELSE ENABLE_INTERACTION_MENU() PRINTLN("ob_telescope: NET_SET_PLAYER_CONTROL- B") NET_SET_PLAYER_CONTROL(PLAYER_ID(),TRUE) IF bSetupPCControls SHUTDOWN_PC_SCRIPTED_CONTROLS() bSetupPCControls = FALSE ENDIF SET_MULTIHEAD_SAFE(FALSE) MPGlobalsAmbience.bUsingTelescope = FALSE ENDIF SET_MULTIHEAD_SAFE(FALSE) SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), storedWeapon, TRUE) scopeStage = waitForPlayer ENDIF ELSE CLEAR_PED_TASKS(PLAYER_PED_ID()) IF NOT g_bInMultiplayer SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE) g_bCurrentlyUsingTelescope = FALSE ELSE ENABLE_INTERACTION_MENU() PRINTLN("ob_telescope: NET_SET_PLAYER_CONTROL- C") NET_SET_PLAYER_CONTROL(PLAYER_ID(),TRUE) SET_MULTIHEAD_SAFE(FALSE) MPGlobalsAmbience.bUsingTelescope = FALSE ENDIF IF bSetupPCControls SHUTDOWN_PC_SCRIPTED_CONTROLS() bSetupPCControls = FALSE ENDIF SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), storedWeapon, TRUE) scopeStage = waitForPlayer ENDIF BREAK CASE playEnter IF GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_PLAY_ANIM) = FINISHED_TASK AND GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_PLAY_ANIM) != WAITING_TO_START_TASK AND GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_PLAY_ANIM) != PERFORMING_TASK //IF g_bInMultiplayer IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<14.536638,529.315369,173.628204>>, <<12.656813,528.802307,175.878204>>, 2) TASK_PLAY_ANIM_ADVANCED(PLAYER_PED_ID(), animDictEnter, animLoop, GET_ENTITY_COORDS(oScope), GET_ENTITY_ROTATION(oScope),REALLY_SLOW_BLEND_IN, 0.1, -1, AF_HIDE_WEAPON|AF_LOOPING|AF_EXTRACT_INITIAL_OFFSET|AF_USE_MOVER_EXTRACTION)//|AF_TURN_OFF_COLLISION) ENDIF //ENDIF IF bPublicTelescope IF iTelescopeStartTime = -1 IF NOT IS_LOCAL_PLAYER_IN_ARENA_SPECTATOR_BOX() iTelescopeStartTime = GET_GAME_TIMER() ENDIF PLAY_COIN_DROP() ENDIF ENDIF //IF NOT g_bInMultiplayer IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<14.536638,529.315369,173.628204>>, <<12.656813,528.802307,175.878204>>, 2) PRINTLN("POD: TELESCOPE: SET_UP_CAMERA 2") SET_UP_CAMERA() ENDIF //ENDIF IF IS_LOCAL_PLAYER_IN_ARENA_SPECTATOR_BOX() INCREMENT_MP_INT_CHARACTER_AWARD(MP_AWARD_THROUGH_A_LENS) SET_LOCAL_PLAYER_ARENA_GARAGE_TROPHY_LENS_DATA() ENDIF RUN_FIRST_PERSON_CAMERA() IF NOT g_bInMultiplayer CLEAR_AREA_OF_PROJECTILES(buyPos, 10) ENDIF scopeStage = runScope ENDIF BREAK CASE runScope IF IS_LOCAL_PLAYER_IN_ARENA_SPECTATOR_BOX() AND g_bCelebrationScreenIsActive PRINTLN("ob_telescope: scopeStage = resetScope") scopeStage = resetScope EXIT ENDIF DISABLE_CONTROL_ACTION(FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE_ALTERNATE) //IF NOT IS_PED_RAGDOLL(PLAYER_PED_ID()) IF IS_PLAYER_OK(PLAYER_ID()) // CDM- Fix for focus not clearing when dead AND IS_ENTITY_AT_COORD(PLAYER_PED_ID(), buyPos, << 1.0, 1.0, 1.5 >>) DISABLE_SELECTOR_THIS_FRAME() RUN_FIRST_PERSON_CAMERA() IF NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("TELEUSE") IF IS_APARTMENT_OWNER_IN_PREVIEW_MODE() PRINT_HELP_NO_SOUND("TELEUSE") ELSE PRINT_HELP_FOREVER("TELEUSE") ENDIF ENDIF IF IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_CONTEXT) OR IS_DISABLED_CONTROL_JUST_RELEASED(FRONTEND_CONTROL, INPUT_FRONTEND_PAUSE_ALTERNATE) OR scopeFallen scopeStage = resetScope ELIF bPublicTelescope AND NOT IS_LOCAL_PLAYER_IN_ARENA_SPECTATOR_BOX() IF (GET_GAME_TIMER() > (iTelescopeStartTime+TELESCOPE_TIME)) scopeStage = resetScope ENDIF ENDIF IF NOT bRespottedPlayer //Removed, as we see the character move. //GET_GROUND_Z_FOR_3D_COORD(buyPos, buyPos.z) //SET_ENTITY_COORDS(PLAYER_PED_ID(), buyPos) //SET_ENTITY_HEADING(PLAYER_PED_ID(), vLookCamRot.z) //TASK_PLAY_ANIM(PLAYER_PED_ID(), animDictEnter, "IDLE", NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_HIDE_WEAPON|AF_LOOPING) //FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID()) bRespottedPlayer = TRUE ENDIF ELSE CLEAN_UP_CAMERA() CLEAR_PED_TASKS(PLAYER_PED_ID()) IF NOT g_bInMultiplayer SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE) g_bCurrentlyUsingTelescope = FALSE ELSE ENABLE_INTERACTION_MENU() PRINTLN("ob_telescope: NET_SET_PLAYER_CONTROL- D") NET_SET_PLAYER_CONTROL(PLAYER_ID(),TRUE) SET_MULTIHEAD_SAFE(FALSE) MPGlobalsAmbience.bUsingTelescope = FALSE ENDIF IF bSetupPCControls SHUTDOWN_PC_SCRIPTED_CONTROLS() bSetupPCControls = FALSE ENDIF SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), storedWeapon, TRUE) scopeStage = waitForPlayer ENDIF BREAK CASE resetScope IF bSwappedChemSuit = TRUE SWAP_CHEM_SUIT_HOOD_FOR_ALTERNATE(PLAYER_PED_ID()) bSwappedChemSuit = FALSE ENDIF IF eStoredHelmet != DUMMY_PED_COMP AND eStoredHelmet != PROPS_HEAD_NONE SET_PED_COMP_ITEM_CURRENT_MP(PLAYER_PED_ID(), COMP_TYPE_PROPS, eStoredHelmet, FALSE) eStoredHelmet = DUMMY_PED_COMP ENDIF IF eStoredMask != DUMMY_PED_COMP SET_PED_COMP_ITEM_CURRENT_MP(PLAYER_PED_ID(), COMP_TYPE_BERD, eStoredMask, FALSE) eStoredMask = DUMMY_PED_COMP ENDIF PRINTLN("POD: TELESCOPE: REAPPLYING MASK") STOP_SOUND(iSoundTurnVert) STOP_SOUND(iSoundTurnHori) STOP_SOUND(iSoundZoom) IF GET_ENTITY_MODEL(oScope) != INT_TO_ENUM(MODEL_NAMES, HASH("XS_PROP_ARENA_TELESCOPE_01")) IF REQUEST_AMBIENT_AUDIO_BANK("TELESCOPES") RELEASE_AMBIENT_AUDIO_BANK() ENDIF ENDIF bRespottedPlayer = FALSE CLEAN_UP_CAMERA() IF NOT IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), <<14.536638,529.315369,173.628204>>, <<12.656813,528.802307,175.878204>>, 2) IF GET_FOLLOW_PED_CAM_VIEW_MODE() != CAM_VIEW_MODE_FIRST_PERSON PRINTLN("POD: TELESCOPE: TASK_PLAY_ANIM") //CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID()) TASK_PLAY_ANIM(PLAYER_PED_ID(), animDictExit, animExit, REALLY_SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_DEFAULT|AF_HIDE_WEAPON, 0.0) // TASK_PLAY_ANIM_ADVANCED(PLAYER_PED_ID(), animDictExit, animExit, GET_ENTITY_COORDS(oScope), GET_ENTITY_ROTATION(oScope),REALLY_SLOW_BLEND_IN, 0.1, -1, AF_HIDE_WEAPON|AF_USE_KINEMATIC_PHYSICS|AF_EXTRACT_INITIAL_OFFSET|AF_USE_MOVER_EXTRACTION|AF_TURN_OFF_COLLISION) ELSE PRINTLN("POD: TELESCOPE: STOPPING ANIM PLAYBACK") //CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID()) // TASK_PLAY_ANIM_ADVANCED(PLAYER_PED_ID(), animDictExit, animExit, GET_ENTITY_COORDS(oScope), GET_ENTITY_ROTATION(oScope),REALLY_SLOW_BLEND_IN, 0.1, -1, AF_HIDE_WEAPON|AF_EXTRACT_INITIAL_OFFSET|AF_USE_MOVER_EXTRACTION|AF_TURN_OFF_COLLISION) TASK_PLAY_ANIM(PLAYER_PED_ID(), animDictExit, animExit, REALLY_SLOW_BLEND_IN, SLOW_BLEND_OUT, -1, AF_DEFAULT|AF_HIDE_WEAPON, 0.0) // STOP_ANIM_TASK(PLAYER_PED_ID(),animDictEnter,animEnter) // STOP_ANIM_PLAYBACK(PLAYER_PED_ID(),AF_PRIORITY_HIGH) ENDIF ENDIF PRINTSTRING("PAUL - FORCE_PED_AI_AND_ANIMATION_UPDATE resetScope") PRINTNL() //FORCE_PED_AI_AND_ANIMATION_UPDATE(PLAYER_PED_ID()) IF NOT g_bInMultiplayer SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE) g_bCurrentlyUsingTelescope = FALSE ELSE ENABLE_INTERACTION_MENU() PRINTLN("ob_telescope: NET_SET_PLAYER_CONTROL- E") NET_SET_PLAYER_CONTROL(PLAYER_ID(),TRUE) SET_MULTIHEAD_SAFE(FALSE) MPGlobalsAmbience.bUsingTelescope = FALSE ENDIF SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), storedWeapon, TRUE) IF IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("TELEUSE") CLEAR_HELP() ENDIF IF bSetupPCControls SHUTDOWN_PC_SCRIPTED_CONTROLS() bSetupPCControls = FALSE ENDIF scopeStage = waitForPlayer BREAK ENDSWITCH ENDPROC PROC SETUP_DEBUG() #IF IS_DEBUG_BUILD START_WIDGET_GROUP(GET_THIS_SCRIPT_NAME()) ADD_WIDGET_FLOAT_SLIDER("fSpeedMultiplier", fSpeedMultiplier, 2, 80, 1) STOP_WIDGET_GROUP() #ENDIF ENDPROC FUNC BOOL GET_IS_OBJECT_FALLEN(OBJECT_INDEX ob) VECTOR rot = GET_ENTITY_ROTATION(ob) IF rot.x < -5.0 OR rot.x > 5.0 OR rot.y < -5.0 OR rot.y > 5.0 return TRUE ENDIF return FALSE ENDFUNC // Mission Script -----------------------------------------// SCRIPT(OBJECT_INDEX oTelescope) IF HAS_FORCE_CLEANUP_OCCURRED(FORCE_CLEANUP_FLAG_SP_TO_MP) //OR IS_BIT_SET(MPSpecGlobals.iBitSet, GLOBAL_SPEC_BS_WATCHING_MP_TV) missionCleanup(FALSE) ENDIF oScope = oTelescope IF DOES_ENTITY_EXIST(oScope) //FREEZE_ENTITY_POSITION(oScope, TRUE) GET_CAM_POS_AND_ROTATION_FOR_SCOPE() ENDIF // GET_MOUSE_POSITION(fStoredMouseX, fStoredMouseY) fMouseX = GET_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_X ) fMouseY = GET_CONTROL_NORMAL( FRONTEND_CONTROL, INPUT_CURSOR_Y ) SETUP_DEBUG() // Mission Loop -------------------------------------------// WHILE TRUE WAIT(0) IF DOES_ENTITY_EXIST(oScope) IF GET_IS_OBJECT_FALLEN(oScope) PRINTLN("ob_telescope: GET_IS_OBJECT_FALLEN TRUE") DRAW_DEBUG_TEXT_2D("SCOPE FALLEN", <<0.02, 0.1, 0>>) scopeFallen = TRUE ELSE DRAW_DEBUG_TEXT_2D("SCOPE UPRIGHT", <<0.02, 0.1, 0>>) scopeFallen = FALSE ENDIF IF NOT bPublicTelescope PRINTLN("ob_telescope: FREEZE_ENTITY_POSITION oScope") FREEZE_ENTITY_POSITION(oScope, TRUE) ENDIF // IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) // FREEZE_ENTITY_POSITION(oScope, TRUE) // IF IS_PED_SITTING_IN_ANY_VEHICLE(PLAYER_PED_ID()) AND NOT bPublicTelescope // FREEZE_ENTITY_POSITION(oScope, FALSE) // ELSE // FREEZE_ENTITY_POSITION(oScope, TRUE) // ENDIF // ENDIF IF IS_OBJECT_WITHIN_BRAIN_ACTIVATION_RANGE(oScope) //IF NOT IS_BIT_SET(MPSpecGlobals.iBitSet, GLOBAL_SPEC_BS_WATCHING_MP_TV) IF g_bStripperHideHUDCutScene CDEBUG1LN(DEBUG_SAFEHOUSE, "ob_telescope: mission cleanup called for g_bStripperHideHUDCutScene") IF DOES_ENTITY_EXIST(PLAYER_PED_ID()) AND NOT IS_ENTITY_DEAD(PLAYER_PED_ID()) CLEAR_PED_TASKS(PLAYER_PED_ID()) ENDIF missionCleanup(TRUE) ENDIF PRINTLN("POD: telescope: ambStage: ", ambStage) SWITCH ambStage CASE ambCanRun IF IS_LOCAL_PLAYER_IN_ARENA_SPECTATOR_BOX() PRINTLN("POD: telescope: requesting anims") REQUEST_ANIM_DICT(animDictEnter) REQUEST_ANIM_DICT(animDictExit) WHILE (NOT HAS_ANIM_DICT_LOADED(animDictEnter)) OR NOT HAS_ANIM_DICT_LOADED(animDictExit) WAIT(0) ENDWHILE INITIALISE_SOUNDS() PRINTLN("POD: telescope: anims loaded") ambStage = ambRunning ELSE sfMovie = REQUEST_SCALEFORM_MOVIE("observatory_scope") PRINTLN("POD: telescope: requesting scaleform") REQUEST_ANIM_DICT(animDictEnter) REQUEST_ANIM_DICT(animDictExit) WHILE (NOT HAS_SCALEFORM_MOVIE_LOADED(sfMovie)) OR NOT HAS_ANIM_DICT_LOADED(animDictEnter) OR NOT HAS_ANIM_DICT_LOADED(animDictExit) HINT_AMBIENT_AUDIO_BANK("TELESCOPES") WAIT(0) ENDWHILE INITIALISE_SOUNDS() PRINTLN("POD: telescope: scaleform loaded") ambStage = ambRunning ENDIF BREAK CASE ambRunning IF IS_PLAYER_PLAYING(PLAYER_ID()) AND IS_SKYSWOOP_AT_GROUND() runTelescope() ELSE IF DOES_CAM_EXIST(cameraTelescope) CLEAN_UP_CAMERA() ENDIF ENDIF BREAK CASE ambEnd BREAK ENDSWITCH //ELSE // missionCleanup(TRUE) //ENDIF ELSE missionCleanup(TRUE) ENDIF ELSE missionCleanup(TRUE) ENDIF ENDWHILE ENDSCRIPT