// ***************************************************************************************** // ***************************************************************************************** // ***************************************************************************************** // // MISSION NAME : Soloman 1 // AUTHOR : Craig Vincent // DESCRIPTION : Take the heli from the roof // // ***************************************************************************************** // ***************************************************************************************** // ***************************************************************************************** //Compile out Title Update changes to header functions. //Must be before includes. //CONST_INT USE_TU_CHANGES 0 // Removed by Kenneth R. USING "rage_builtins.sch" USING "globals.sch" USING "commands_audio.sch" USING "commands_camera.sch" USING "commands_clock.sch" USING "commands_debug.sch" USING "commands_fire.sch" USING "commands_graphics.sch" USING "commands_hud.sch" USING "commands_object.sch" USING "commands_pad.sch" USING "commands_ped.sch" USING "commands_player.sch" USING "commands_script.sch" USING "commands_streaming.sch" USING "commands_task.sch" USING "commands_vehicle.sch" USING "commands_interiors.sch" USING "commands_itemsets.sch" USING "commands_event.sch" USING "commands_stats.sch"//BUG FIX 1399395 USING "script_blips.sch" Using "Locates_public.sch" Using "select_mission_stage.sch" USING "model_enums.sch" USING "script_player.sch" USING "script_misc.sch" USING "selector_public.sch" USING "chase_hint_cam.sch" using "mission_stat_public.sch" using "cutscene_public.sch" USING "replay_public.sch" USING "taxi_functions.sch" using "script_ped.sch" using "asset_management_public.sch" using "RC_helper_functions.sch" using "cheat_controller_public.sch" using "building_control_public.sch" USING "commands_recording.sch" #IF IS_DEBUG_BUILD USING "shared_debug.sch" USING "script_debug.sch" #ENDIF //----------------------------------------------------------------------------------------------------------- // ENUMS //----------------------------------------------------------------------------------------------------------- ENUM MPF_MISSION_PED_FLAGS mpf_mike, mpf_Anton, mpf_milton, mpf_rocco, mpf_pilot, mpf_Gianni, mpf_sol, MPF_NUM_OF_PEDS ENDENUM ENUM MVF_MISSION_VEHICLE_FLAGS mvf_heli, mvf_Replay_car, mvf_coquette, mvf_CAVALCADE2, mvf_car1, mvf_mixer, mvf_forklift, MVF_NUM_OF_VEH ENDENUM ENUM eEnemies_Mafia maf_car, maf_car_talking, maf_walkway_door, maf_worker_walkway, maf_worker_vent, maf_worker_top, maf_worker_door, maf_worker_alone, NUM_OF_Mafia_PEDS endenum ENUM MSF_MISSION_STAGE_FLAGS msf_0_get_to_warehouse, msf_1_Stealth_to_roof, msf_2_fight_rocco, msf_3_get_to_sol, msf_4_passed, MSF_NUM_OF_STAGES ENDENUM ENUM MFF_MISSION_FAIL_FLAGS mff_debug_fail, mff_rocco_alerted, mff_rocco_died, mff_actor_died, mff_director_died, mff_player_died, mff_heli_dead, mff_scared_peds, mff_sol_died, mff_left_Area, mff_left_peds, mff_default, MFF_NUM_OF_FAILS ENDENUM Enum STAGE_SWITCHSTATE STAGESWITCH_IDLE, STAGESWITCH_REQUESTED, STAGESWITCH_EXITING, STAGESWITCH_ENTERING ENDENUM enum STEALTH_STAGE AI_NORM, AI_CHECKS, AI_REACTION, AI_PHONE, AI_ALARM endenum ENUM STEALTH_SITUATION SSIT_AI_NONE, SSIT_AI_SPOTTED, SSIT_AI_GUN, SSIT_AI_HURT, SSIT_AI_HEAT endenum ENUM DOOR_ENUM mdf_Walkway_door, mdf_mid_door, mdf_Top_door, mdf_Helipad_door, mdf_FRONT_GATE_L, mdf_FRONT_GATE_R, mdf_Garage_door, MDF_NUM_OF_DOORS endenum ENUM SCARE_TYPE SCARE_NONE, SCARE_BRIDGE, SCARE_CRASH, SCARE_LOW_FAST, SCARE_PITCH, SCARE_HEADING_CHANGE, SCARE_HEIGHT_DROP, SCARE_SPEED endenum enum ENUM_CONS_OBJS // cobj_floor_bricks, cobj_floor_pipes1, cobj_floor_wood1, cobj_floor_wood2, cobj_floor_pipes2, cobj_floor_gen, cobj_floor_bitsbox, cobj_floor_cementbags, cobj_floor_toolbox, cobj_floor_torch, cobj_floor_hat1, cobj_floor_hat2, cobj_floor_hat3, cobj_roof1_toolbox, cobj_roof1_wirecoil1, cobj_roof1_wirecoil2, cobj_roof1_light1, cobj_roof1_light2, cobj_roof1_gen, cobj_roof1_light3, cobj_roof1_hat, cobj_ally_light, cobj_ally_lightbox, cobj_ally_gen, cobj_floor2_pipes, cobj_floor2_barrier1, cobj_floor2_barrier2, cobj_roof2_light1, cobj_roof2_bricks2, cobj_roof2_gen, cobj_roof2_light2, cobj_roof2_light3, cobj_roof3_light1, cobj_roof3_lightbox, cobj_roof3_hardhat1, cobj_roof3_cementMixer, cobj_roof3_cementStack, cobj_roof3_gen, cobj_roof3_light2, cobj_roof3_light3, cobj_roof4_light1, // cobj_roof4_gen, cobj_roof4_bitsbox, cobj_roof4_toolbox, MAX_NUM_CONST_OBJS endenum enum CONSTRUCT_DUP_TYPE dups_none, dups_PIPES, dups_hat, dups_gen, dups_partsbox, dups_toolbox01, dups_light3b, dups_light2a, dups_gen1a, dups_light4a, dups_barrier, dups_gen2a, dups_light4c, dups_light4d endenum //----------------------------------------------------------------------------------------------------------- // STRUCTS //----------------------------------------------------------------------------------------------------------- STRUCT VEHICLE_STRUCT VEHICLE_INDEX id BLIP_INDEX blip endstruct Struct PEDS_STRUCT PED_INDEX id BLIP_INDEX blip INT iExitingThisRoom = -1 ENDSTRUCT struct ENEMY_STRUCT ped_index id OBJECT_INDEX obj OBJECT_INDEX objphone AI_BLIP_STRUCT blipstruct bool bkilled vector vStartLoc vector vtarget float fheading float fBlipRange float fHearingRange = 12.0 ped_index partner = null bool bObjAttached = false bool bOnphone = false bool bForceBlip = false STEALTH_SITUATION sit = SSIT_AI_NONE MODEL_NAMES model = G_M_M_ARMGOON_01 INT iExitingThisRoom = -1 int sDebug int iVoiceID string sVoiceName bool bHeardNoise = false endstruct struct CONSTRUCTION_STRUCT object_index id model_names model bool bloaded = false bool bNeeded = true float fcreateDist = 40.0 vector vpos vector vRot CONSTRUCT_DUP_TYPE dupType = dups_none endstruct // Struct used to hold info about doors STRUCT DOOR_STRUCT INT iHash BOOL bChangingState FLOAT fDesiredOpenRatio FLOAT fStartOpenRatio BOOL bDesiredLockState INT iInterpTime INT iTimeStamp BOOL bExistingDoor ENDSTRUCT //----------------------------------------------------------------------------------------------------------- // CONSTANTS //----------------------------------------------------------------------------------------------------------- CONST_INT STAGE_ENTRY 0 CONST_INT STAGE_EXIT -1 CONST_FLOAT DOORS_KEEP_CURRENT_RATIO 100.0 CONST_FLOAT HIGH_SPEED_TRIGGER 50.0 CONST_FLOAT LOW_HEIGHT_MAX 9.0 CONST_FLOAT LOW_HEIGHT_SPEED 20.0//23.0 BUG FIX 1399435 reduced speed check CONST_FLOAT DROP_SPEED -15.0 const_float PITCH_CHANGE 0.9 const_float HEADING_CHANGE 0.9 Vector vMafiaCar = <<956.9126, -1708.0422, 28.9836>> float hMafiaCar = 355.3881 Vector vheliRoof = <<909.9578, -1680.8170, 50.8435>> float hHeliRoof = 200.8677 vector vBOXPOS = <<902.91626, -1691.21155, 46.13420>> vector vBIGVENT = <<884.57086, -1688.17114, 46.13421>> vector vCROUCHVENT = <<890.91174, -1684.75647, 46.13421>> vector vMIDVENTSMALL = <<910.14313, -1708.57007, 41.97026>> vector vMIDVENTBIG = <<901.90808, -1709.95081, 41.97071>> vector vGianni = <<916.49890, -1699.61768, 50.13412>> float hGianni = 1.2 //----------------------------------------------------------------------------------------------------------- // VARIABLES //----------------------------------------------------------------------------------------------------------- //BUG FIX 1399354 and 1399344 adding a vector for the players position so we can check for his hieght to stop dialogue playing if player is on ground below. VECTOR vPlayerCoords VECTOR vMafiaPedCoords INT iBridgeCountAtStart, iBridgeCountDuringMission, iLastIncrementTimer //BUG FIX 1399435 INT iHeliHealthStart, iHeliHealthNow INT iHelpTextTimer BOOL bDoneFightHelp1, bDoneFightHelp2 BOOL bVehStatsGrabbed //PD - adding this to monitor damage and speed watch on latest player's car BOOL bHeliStatsGrabbed //PD - added this to check if the Frogger has been added to stats watch // LOCATES_HEADER_DATA sLocatesData VEHICLE_STRUCT Vehs[MVF_NUM_OF_VEH] //holds all of the vehicles for tis level PEDS_STRUCT peds[MPF_NUM_OF_PEDS] //holds all of the peds for this level ENEMY_STRUCT Mafia[NUM_OF_Mafia_PEDS] DOOR_STRUCT sDoors[MDF_NUM_OF_DOORS] // door array CONSTRUCTION_STRUCT constObjs[MAX_NUM_CONST_OBJS] int iconstructStage = 0 structPedsForConversation convo_struct //holds peds in the conversation BLIP_INDEX blip_objective //blip for mission objective Camera_index cameraIndex //in game cut scene camera CAMERA_INDEX camFollow SEQUENCE_INDEX seq //used to create AI sequence int i int idelay int iskipDelay MODEL_NAMES modelrocco = IG_ROCCOPELOSI model_names modelpilot = S_M_Y_PILOT_01 MODEL_NAMES modelActor = IG_milton MODEL_NAMES modelDirector = U_M_Y_ANTONB MODEL_NAMES modelWorker = S_M_Y_CONSTRUCT_01 MODEL_NAMES modelclipboard = P_AMB_CLIPBOARD_01 Model_names modelPhone = p_amb_phone_01 MODEL_NAMES modelGianni = U_M_Y_GUIDO_01 //------------------------------ RELATIONSHIPS -------------------------------------------------- REL_GROUP_HASH rel_group_enemies REL_GROUP_HASH rel_friends //-------------- heli ----------------- bool bsearchlights = false int iScareStage = 0 int iScareInt = 0 int iScareTimer2 bool bPlayChat = false bool bScareHeliWarn = false SHAPETEST_INDEX shapetestheli = null INT iShapetestResult VECTOR vecShapetestResult VECTOR vecShapetestNormal ENTITY_INDEX hitEntity //--------------- AI -------------------- STEALTH_STAGE eAI_stage PED_INDEX Active_ped WEAPON_TYPE wcurrent int iRand int iflinch = 0 int iseen = 0 int IphoneTimer int iPhoningChat int iPhoneCheckBackupTimer bool bAloneWorkerActive = false string AnimDict_gestures = "amb@world_human_hang_out_Street@male_a@idle_a" string animDict_kneel_enter = "amb@medic@standing@kneel@enter" string animDict_kneel_Idle = "amb@medic@standing@kneel@idle_a" string animDict_kneel_exit = "amb@medic@standing@kneel@exit" string AnimDict_flinch = "REACTION@MALE_STAND@BIG_INTRO@FORWARD" string AnimDict_ClipBoard = "amb@world_human_clipboard@male@idle_a" string AnimDict_PHONE = "cellphone@str" string animPhone = "cellphone_call_listen_c" int iAimDelay int iGunOutDelay int ifloorspot = 0 int ifloortimer //------------ALARM-------------- bool bFirstAlerted = false //------------- FAIL ------------------ bool bLeftfight bool bfailWarning = false bool bfailAntonWarning = FALSE bool bfailMiltonWarning = FALSE //------------AUDIO-------------- int i_dialogueTimer int iDialogue_Stage = 0 int iCarSpeechStage = 0 int iwalkwaychat = 0 int iGianniChat = 0 bool bpauseconv = false bool bDoWalkwayChat = false bool bMusic_1stEnemy = false bool bMusic_HeliTrigger = false bool bMusic_Ends = false bool bcueTakeOff = false int iambdialoguetimer bool bChooseActor = true //---------------CS-------------------- bool b_cutscene_loaded = false bool bcs_cam = false bool bcs_mike = false bool bcs_actor = false bool bcs_director = false bool bcs_rocco = false bool bcs_goon = false bool bcs_heli = false bool bPlaceholder = false int iskipCS = 0 //------- lead in --------- bool bSolomonCreated = false //============================== streaming ============================== ASSET_MANAGEMENT_DATA sAssetData CUTSCENE_PED_VARIATION sCutscenePedVariationRegister[MPF_NUM_OF_PEDS] bool bStageLoaded = false bool bStageLoaded2 = false bool bloadCar1 = false bool bCreateCar1 = false bool bloadMixer = false bool bCreateMixer = false bool bloadForklift = false bool bCreateForklift = false bool bStartConstructionChecks = false bool bstreamloaded = false bool bLoadMusicStream = false //---------------- //----------------Stage Management and skip stuff STAGE_SWITCHSTATE stageswitch //current switching status INT mission_stage //current stage INT mission_substage //current substage INT requestedStage //the mission stage requested by a mission_stage switch INT iStageTimer //timer used for debug Bool bDoSkip //trigger the skip INT iSkipToStage //the stage to skip to //----------------//----------------//----------------//---------------- #if IS_DEBUG_BUILD MissionStageMenuTextStruct zMenuNames[MSF_NUM_OF_STAGES] WIDGET_GROUP_ID widget_debug float debug_noise int wAI_stage #endif // =========================================================================================================== // Termination // =========================================================================================================== func bool isentityalive(entity_index entity) if does_entity_exist(entity) if is_entity_a_vehicle(entity) if is_vehicle_driveable(get_vehicle_index_from_entity_index(entity)) return true endif elif is_entity_a_ped(entity) if not is_ped_injured(get_ped_index_from_entity_index(entity)) return true endif elif IS_ENTITY_AN_OBJECT(entity) return true endif endif return false endfunc func ped_index mike() return peds[mpf_mike].id endfunc func ped_index Milton() return peds[mpf_milton].id endfunc func ped_index Anton() return peds[mpf_Anton].id endfunc func ped_index rocco() return peds[mpf_rocco].id endfunc func ped_index sol() return peds[mpf_sol].id endfunc func ped_index Gianni() return peds[mpf_Gianni].id endfunc FUNC VECTOR CONVERT_ROTATION_TO_DIRECTION_VECTOR(VECTOR vRot) RETURN <<-SIN(vRot.z) * COS(vRot.x), COS(vRot.z) * COS(vRot.x), SIN(vRot.x)>> ENDFUNC // ----------------------------------------------------------------------------------------------------------- // LOADING // ----------------------------------------------------------------------------------------------------------- PROC LOAD_ASSET_STAGE(MSF_MISSION_STAGE_FLAGS LOADSTAGE) SWITCH LOADSTAGE CASE msf_0_get_to_warehouse Load_Asset_Model(sAssetData,CAVALCADE2) load_Asset_model(sAssetdata,COQUETTE) BREAK CASE msf_1_Stealth_to_roof LOAD_ASSET_MODEL(sAssetData,FROGGER) LOAD_ASSET_MODEL(sAssetData,G_M_M_ARMGOON_01) LOAD_ASSET_MODEL(sAssetData,modelGianni) LOAD_ASSET_MODEL(sAssetData,modelWorker) load_asset_model(sAssetData,modelActor) load_asset_model(sAssetData,modelDirector) Load_Asset_Model(sAssetData,modelclipboard) Load_Asset_Model(sAssetData,modelPhone) Load_Asset_AnimDict(sAssetData,animDict_kneel_enter) Load_Asset_AnimDict(sAssetData,animDict_kneel_Idle) Load_Asset_AnimDict(sAssetData,animDict_kneel_exit) Load_Asset_AnimDict(sAssetData,AnimDict_gestures) Load_Asset_AnimDict(sAssetData,AnimDict_flinch) Load_Asset_AnimDict(sAssetData, AnimDict_ClipBoard) Load_Asset_AnimDict(sAssetData, AnimDict_PHONE) BREAK case msf_2_fight_rocco LOAD_ASSET_MODEL(sAssetData,FROGGER) load_asset_model(sAssetData,modelrocco) load_asset_model(sAssetData,modelpilot) load_asset_model(sAssetData,modelActor) load_asset_model(sAssetData,modelDirector) Load_Asset_Model(sAssetData,modelclipboard) Load_Asset_AnimDict(sAssetData,AnimDict_flinch) break case msf_3_get_to_sol LOAD_ASSET_MODEL(sAssetData,FROGGER) load_asset_model(sAssetData,modelActor) load_asset_model(sAssetData,modelDirector) Load_Asset_Model(sAssetData,modelclipboard) break CASE msf_4_passed break ENDSWITCH ENDPROC // ----------------------------------------------------------------------------------------------------------- // Mission Helpers // ----------------------------------------------------------------------------------------------------------- proc init_enemy_data() //--------------------------START LOCATION---------------------------------- //Mafia peds Mafia[maf_car].vStartLoc = <<956.28088, -1704.83215, 28.77425>>//next to car Mafia[maf_car].fheading = 329.4887//-23.67 BUG FIX 1399373 Mafia[maf_car].fBlipRange = 24 Mafia[maf_car].fHearingRange = 20.5 Mafia[maf_car_talking].vStartLoc = <<957.24054, -1705.40430, 28.83121>>//next to car talking Mafia[maf_car_talking].fheading = 12.8746//66.44 BUG FIX 1399373 Mafia[maf_car_talking].fBlipRange = 29 Mafia[maf_car_talking].fHearingRange = 20.5 Mafia[maf_worker_top].vStartLoc = <<904.58276, -1686.67871, 46.35751>>//top door Mafia[maf_worker_top].fheading = 83.33 Mafia[maf_worker_top].fBlipRange = 29 Mafia[maf_walkway_door].vStartLoc = <<915.91370, -1692.07397, 42.15242>>//walkway door Mafia[maf_walkway_door].fheading = -95.93 Mafia[maf_walkway_door].fBlipRange = 30 Mafia[maf_worker_walkway].vStartLoc = <<914.42017, -1692.38306, 42.15268>> //walkwayroof inside door Mafia[maf_worker_walkway].fheading = -93.72 Mafia[maf_worker_walkway].fBlipRange = 30 Mafia[maf_worker_alone].vStartLoc = <<924.50854, -1720.03943, 37.06301>>//construction worker on roof Mafia[maf_worker_alone].fheading = 88.84 Mafia[maf_worker_alone].fBlipRange = 27 Mafia[maf_worker_alone].fHearingRange = 7 Mafia[maf_worker_vent].vStartLoc = <<888.13782, -1714.93701, 37.06277>>//alone next to vent Mafia[maf_worker_vent].fheading = -87.91 Mafia[maf_worker_vent].fHearingRange = 4.7 Mafia[maf_worker_vent].fBlipRange = 16 Mafia[maf_worker_door].vStartLoc = <<906.9767, -1696.8409, 42.1162>> //mid door Mafia[maf_worker_door].fheading = 171.9180 Mafia[maf_worker_door].fBlipRange = 26 //VOICES CONSTRUCTION1 = 4 CONSTRUCTION2 = 3 CONSTRUCTION3 = 5 Mafia[maf_car].iVoiceID = 3 Mafia[maf_car].sVoiceName = "CONSTRUCTION2" Mafia[maf_car_talking].iVoiceID = 4 Mafia[maf_car_talking].sVoiceName = "CONSTRUCTION1" Mafia[maf_worker_alone].iVoiceID = 3 Mafia[maf_worker_alone].sVoiceName = "CONSTRUCTION2" Mafia[maf_worker_door].iVoiceID = 5 Mafia[maf_worker_door].sVoiceName = "CONSTRUCTION3" Mafia[maf_worker_walkway].iVoiceID = 3 Mafia[maf_worker_walkway].sVoiceName = "CONSTRUCTION2" Mafia[maf_walkway_door].iVoiceID = 5 Mafia[maf_walkway_door].sVoiceName = "CONSTRUCTION3" Mafia[maf_worker_vent].iVoiceID = 4 Mafia[maf_worker_vent].sVoiceName = "CONSTRUCTION1" Mafia[maf_worker_top].iVoiceID = 3 Mafia[maf_worker_top].sVoiceName = "CONSTRUCTION2" endproc // ===================================================== DOOR MANAGEMENT ======================================================================= //PURPOSE: Adds a new door to the doors array PROC Doors_Add_New(DOOR_ENUM slot, VECTOR vCoord, MODEL_NAMES model, BOOL bResetDoor = FALSE) TEXT_LABEL_23 strDoorName = "SOL1_DOOR_" strDoorName += ENUM_TO_INT(slot) sDoors[slot].iHash = GET_HASH_KEY(strDoorName) ADD_DOOR_TO_SYSTEM(sDoors[slot].iHash, model, vCoord, FALSE) IF bResetDoor DOOR_SYSTEM_SET_OPEN_RATIO(sDoors[slot].iHash, 1.0) DOOR_SYSTEM_SET_DOOR_STATE(sDoors[slot].iHash, DOORSTATE_FORCE_CLOSED_THIS_FRAME) DOOR_SYSTEM_SET_DOOR_STATE(sDoors[slot].iHash, DOORSTATE_FORCE_LOCKED_THIS_FRAME) ENDIF ENDPROC FUNC BOOL Is_Door_LockState_Locked(DOOR_STATE_ENUM eDoorState) IF eDoorState = DOORSTATE_LOCKED OR eDoorState = DOORSTATE_FORCE_LOCKED_THIS_FRAME OR eDoorState = DOORSTATE_FORCE_LOCKED_UNTIL_OUT_OF_AREA RETURN TRUE ELSE RETURN FALSE ENDIF ENDFUNC //BUG FIX 1399435 FUNC INT CHECK_BRIDGE_COMPLETION() INT completeCount, iTemp VECTOR vClosestNode, vHeliCoords FLOAT fHeliMaxRange_X, fHeliMinRange_X, fHeliMaxRange_Y, fHeliMinRange_Y REPEAT 32 iTemp IF IS_BIT_SET(g_savedGlobals.sAmbient.iBridgesFlownUnderFlags, iTemp) completeCount++ ENDIF IF IS_BIT_SET(g_savedGlobals.sAmbient.iBridgesFlownUnderFlags2, iTemp) completeCount++ ENDIF IF IS_BIT_SET(g_savedGlobals.sAmbient.iBridgesFlownUnderFlags3, iTemp) completeCount++ ENDIF ENDREPEAT //Check to see if there is a vehicle node above the player. This will suggest that the player is flying under a road. IF GET_CLOSEST_VEHICLE_NODE(GET_OFFSET_FROM_ENTITY_IN_WORLD_COORDS(vehs[mvf_heli].id, <<0,0,5>>), vClosestNode) vHeliCoords = GET_ENTITY_COORDS(PLAYER_PED_ID()) fHeliMaxRange_X = (vHeliCoords.x + 4) fHeliMinRange_X = (vHeliCoords.x - 4) fHeliMaxRange_Y = (vHeliCoords.y + 4) fHeliMinRange_Y = (vHeliCoords.y - 4) IF VclosestNode.z > vHeliCoords.z IF VclosestNode.x <= fHeliMaxRange_X AND VclosestNode.x >= fHeliMinRange_X AND VclosestNode.y <= fHeliMaxRange_Y AND VclosestNode.y >= fHeliMinRange_Y AND GET_GAME_TIMER() > (iLastIncrementTimer + 8000) iLastIncrementTimer = GET_GAME_TIMER() PRINTSTRING("player passing under road bridge") completeCount++ ENDIF ENDIF ENDIF RETURN completeCount ENDFUNC //PURPOSE: Changes the state of the door PROC Doors_Set_State(DOOR_ENUM eDoor, BOOL lockState, FLOAT openRatio, INT iTime = 0) IF sDoors[eDoor].iHash != 0 // No update over time, do NOW! IF iTime <= 0 IF openRatio != DOORS_KEEP_CURRENT_RATIO DOOR_SYSTEM_SET_OPEN_RATIO(sDoors[eDoor].iHash, openRatio, FALSE, TRUE) ENDIF IF lockState DOOR_SYSTEM_SET_DOOR_STATE(sDoors[eDoor].iHash, DOORSTATE_LOCKED, FALSE, TRUE) ELSE DOOR_SYSTEM_SET_DOOR_STATE(sDoors[eDoor].iHash, DOORSTATE_UNLOCKED, FALSE, TRUE) ENDIF sDoors[eDoor].iTimeStamp = 0 sDoors[eDoor].iInterpTime = 0 // Needs updating over time, mark for frame by frame update ELIF openRatio != DOORS_KEEP_CURRENT_RATIO sDoors[eDoor].bChangingState = TRUE sDoors[eDoor].bDesiredLockState = lockState sDoors[eDoor].fDesiredOpenRatio = openRatio sDoors[eDoor].iTimeStamp = GET_GAME_TIMER() sDoors[eDoor].iInterpTime = iTime sDoors[eDoor].fStartOpenRatio = DOOR_SYSTEM_GET_OPEN_RATIO(sDoors[eDoor].iHash) ELSE SCRIPT_ASSERT("DOOR_SYSTEM: CANNOT OPEN DOOR OVER TIME TO KEEP THE SAME DOOR RATIO, POINTLESS!") ENDIF ENDIF ENDPROC //PURPOSE: Obtains the state of the door PROC Doors_Get_State(DOOR_ENUM eDoor, BOOL &bLockState, FLOAT &fOpenRatio) IF sDoors[eDoor].iHash != 0 fOpenRatio = DOOR_SYSTEM_GET_OPEN_RATIO(sDoors[eDoor].iHash) DOOR_STATE_ENUM eDoorState = DOOR_SYSTEM_GET_DOOR_STATE(sDoors[eDoor].iHash) bLockState = Is_Door_LockState_Locked(eDoorState) ENDIF ENDPROC // //PURPOSE: Initialises the door structs PROC Doors_Initialise() Doors_Add_New(mdf_Walkway_door, << 918.1691,-1693.1252,43.2220 >>, PROP_MAP_DOOR_01, TRUE) Doors_Add_New(mdf_mid_door, << 905.9557,-1699.7339,43.3106 >>, PROP_PRIS_DOOR_02, TRUE) Doors_Add_New(mdf_Top_door, << 901.2440,-1687.1495,47.4301 >>, PROP_MAP_DOOR_01, TRUE) Doors_Add_New(mdf_Helipad_door, << 916.4495,-1700.7896,51.3335 >>, PROP_MAP_DOOR_01, TRUE) Doors_Add_New(mdf_FRONT_GATE_R, << 965.4849,-1738.3374,31.3419 >>, PROP_FACGATE_03_L, TRUE) Doors_Add_New(mdf_FRONT_GATE_L, << 955.4418,-1737.4674,31.3485 >>, PROP_FACGATE_03_L, TRUE) Doors_Add_New(mdf_Garage_door, << 950.7746,-1698.2271,31.4447 >>, PROP_GAR_DOOR_04, TRUE) ENDPROC //PURPOSE: Resets all the doors streamed in PROC Doors_Reset_All() INT x REPEAT COUNT_OF(sDoors) x IF sDoors[x].iHash != 0 DOOR_SYSTEM_SET_OPEN_RATIO(sDoors[x].iHash, 0.0, FALSE, TRUE) DOOR_SYSTEM_SET_DOOR_STATE(sDoors[x].iHash, DOORSTATE_UNLOCKED, FALSE, TRUE) ENDIF sDoors[x].bChangingState = FALSE sDoors[x].iInterpTime = 0 sDoors[x].iTimeStamp = 0 sDoors[x].fDesiredOpenRatio = 0.0 sDoors[x].bDesiredLockState = FALSE sDoors[x].fStartOpenRatio = 0.0 ENDREPEAT ENDPROC //PURPOSE: Manage locking and opening of doors PROC Manage_Doors() INT idoor FOR idoor = 0 TO enum_to_int(MDF_NUM_OF_DOORS) -1 IF sDoors[idoor].iHash != 0 AND sDoors[idoor].bChangingState BOOL bLockState = FALSE FLOAT fOpenRatio = 0.0 Doors_Get_State(int_to_enum(DOOR_ENUM, idoor), bLockState, fOpenRatio) // If state does not match then update to new state IF bLockState != sDoors[idoor].bDesiredLockState OR fOpenRatio != sDoors[idoor].fDesiredOpenRatio IF sDoors[idoor].iInterpTime > 0 AND sDoors[idoor].iTimeStamp > 0 FLOAT fInterpProg = CLAMP((GET_GAME_TIMER() - sDoors[idoor].iTimeStamp)/TO_FLOAT(sDoors[idoor].iInterpTime), 0.0, 1.0) IF fInterpProg != 1.0 // change in progress fOpenRatio = sDoors[idoor].fStartOpenRatio + (fInterpProg * (sDoors[idoor].fDesiredOpenRatio - sDoors[idoor].fStartOpenRatio)) bLockState = TRUE ELSE // door finished bLockState = sDoors[idoor].bDesiredLockState fOpenRatio = sDoors[idoor].fDesiredOpenRatio sDoors[idoor].bChangingState = FALSE sDoors[idoor].iInterpTime = 0 sDoors[idoor].iTimeStamp = 0 sDoors[idoor].bChangingState = FALSE ENDIF ELSE // Set to the desired values as no time was present IF sDoors[idoor].bDesiredLockState bLockState = TRUE ELSE bLockState = FALSE ENDIF fOpenRatio = sDoors[idoor].fDesiredOpenRatio sDoors[idoor].iInterpTime = 0 sDoors[idoor].iTimeStamp = 0 sDoors[idoor].bChangingState = FALSE ENDIF IF fOpenRatio != DOORS_KEEP_CURRENT_RATIO DOOR_SYSTEM_SET_OPEN_RATIO(sDoors[idoor].iHash, fOpenRatio, FALSE, TRUE) ENDIF // Set the door IF bLockState DOOR_SYSTEM_SET_DOOR_STATE(sDoors[idoor].iHash, DOORSTATE_LOCKED, FALSE, TRUE) ELSE DOOR_SYSTEM_SET_DOOR_STATE(sDoors[idoor].iHash, DOORSTATE_UNLOCKED, FALSE, TRUE) ENDIF ELSE DOOR_SYSTEM_SET_OPEN_RATIO(sDoors[idoor].iHash, fOpenRatio, FALSE, TRUE) // Set the door IF bLockState DOOR_SYSTEM_SET_DOOR_STATE(sDoors[idoor].iHash, DOORSTATE_LOCKED, FALSE, TRUE) ELSE DOOR_SYSTEM_SET_DOOR_STATE(sDoors[idoor].iHash, DOORSTATE_UNLOCKED, FALSE, TRUE) ENDIF // door already in the desired stage sDoors[idoor].iInterpTime = 0 sDoors[idoor].iTimeStamp = 0 sDoors[idoor].bChangingState = FALSE ENDIF ENDIF ENDFOR ENDPROC //PURPOSE: Manages locking and unlocking the doors of the fake rooms once peds have left/entered the room. Additionally it also blips peds as they exit the fake rooms and into the main room. PROC Manage_Stealth_Door_Locks() INT x BOOL bUnlockWalkWay, bUnlockMid, bUnlockTop, bUnlockHelipad REPEAT COUNT_OF(mafia) x IF isentityalive(mafia[x].id) // walkway IF IS_ENTITY_IN_ANGLED_AREA(mafia[x].id, <<918.52936, -1691.67383, 42.11221>>, <<913.47546, -1691.28894, 45.00836>>, 3.25) // ROOM LOCATE or IS_ENTITY_IN_ANGLED_AREA(player_ped_id(), <<918.52936, -1691.67383, 42.11221>>, <<913.47546, -1691.28894, 45.00836>>, 3.25) // ROOM LOCATE mafia[x].iExitingThisRoom = 1 bUnlockWalkWay = TRUE ELIF mafia[x].iExitingThisRoom = 1 // still too close to the door IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(mafia[x].id), <<918.23669, -1692.44238, 42.15291>>, false) <= 2.0 // DOORWAY LOCATE bUnlockWalkWay = TRUE ELSE // reset mafia[x].iExitingThisRoom = -1 ENDIF ENDIF // Mid IF IS_ENTITY_IN_ANGLED_AREA(mafia[x].id, <<906.56635, -1700.03198, 44.46795>>, <<906.90106, -1695.90137, 42.11657>>, 1.6) // ROOM LOCATE or IS_ENTITY_IN_ANGLED_AREA(player_ped_id(), <<906.56635, -1700.03198, 44.46795>>, <<906.90106, -1695.90137, 42.11657>>, 1.6) mafia[x].iExitingThisRoom = 2 bUnlockMid = TRUE ELIF mafia[x].iExitingThisRoom = 2 // still too close to the door IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(mafia[x].id), <<906.58875, -1699.84241, 42.15248>>, false) <= 2.0 // DOORWAY LOCATE bUnlockMid = TRUE ELSE // reset mafia[x].iExitingThisRoom = -1 ENDIF ENDIF // top IF IS_ENTITY_IN_ANGLED_AREA(mafia[x].id, <<900.85522, -1687.26392, 46.14490>>, <<905.75562, -1687.79346, 49.13612>>, 3.5) or IS_ENTITY_IN_ANGLED_AREA(player_ped_id(),<<900.85522, -1687.26392, 46.14490>>, <<905.75562, -1687.79346, 49.13612>>, 3.5) mafia[x].iExitingThisRoom = 3 bUnlockTop = TRUE ELIF mafia[x].iExitingThisRoom = 3 // still too close to the door IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(mafia[x].id), <<901.11060, -1686.51807, 46.35753>> , false) <= 2.5 // DOORWAY LOCATE or GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(player_ped_id()), <<901.11060, -1686.51807, 46.35753>> , false) <= 3.0 // DOORWAY LOCATE bUnlockTop = TRUE ELSE // reset mafia[x].iExitingThisRoom = -1 ENDIF ENDIF ENDIF if mafia[x].iExitingThisRoom <> -1 if isentityalive(mafia[x].id) SET_PED_RESET_FLAG(mafia[x].id,PRF_SearchForClosestDoor,true) SET_PED_RESET_FLAG(mafia[x].id,PRF_IgnoreNavigationForDoorArmIK ,true) endif endif ENDREPEAT // Main doors if isentityalive(peds[mpf_rocco].id) IF IS_ENTITY_IN_ANGLED_AREA(peds[mpf_rocco].id, <<915.59467, -1703.85645, 50.26351>>, <<915.77411, -1700.83813, 53.61048>>, 5.562500) peds[mpf_rocco].iExitingThisRoom = 4 bUnlockHelipad = TRUE ELIF peds[mpf_rocco].iExitingThisRoom = 4 // still too close to the door IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(peds[mpf_rocco].id), <<915.84570, -1700.80469, 50.26309>> , false) <= 2.5 // DOORWAY LOCATE bUnlockHelipad = TRUE ELSE // reset peds[mpf_rocco].iExitingThisRoom = -1 ENDIF ENDIF endif if isentityalive(peds[mpf_pilot].id) IF IS_ENTITY_IN_ANGLED_AREA(peds[mpf_pilot].id, <<915.59467, -1703.85645, 50.26351>>, <<915.77411, -1700.83813, 53.61048>>, 2.11) peds[mpf_pilot].iExitingThisRoom = 4 bUnlockHelipad = TRUE ELIF peds[mpf_pilot].iExitingThisRoom = 4 // still too close to the door IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(peds[mpf_pilot].id), <<915.84570, -1700.80469, 50.26309>> , false) <= 2.5 // DOORWAY LOCATE bUnlockHelipad = TRUE ELSE // reset peds[mpf_pilot].iExitingThisRoom = -1 ENDIF ENDIF endif IF bUnlockWalkWay Doors_Set_State(mdf_Walkway_door, FALSE, DOORS_KEEP_CURRENT_RATIO) ELSE Doors_Set_State(mdf_Walkway_door, TRUE, 0.0, 500) ENDIF IF bUnlockmid Doors_Set_State(mdf_mid_door, FALSE, DOORS_KEEP_CURRENT_RATIO) ELSE Doors_Set_State(mdf_mid_door, TRUE, 0.0, 500) ENDIF IF bUnlockTop Doors_Set_State(mdf_Top_door, FALSE, DOORS_KEEP_CURRENT_RATIO) ELSE// Doors_Set_State(mdf_Top_door, TRUE, 0.0, 600) ENDIF IF bUnlockHelipad Doors_Set_State(mdf_Helipad_door, FALSE, DOORS_KEEP_CURRENT_RATIO) ELSE Doors_Set_State(mdf_Helipad_door, TRUE, 0.0, 500) ENDIF Doors_Set_State(mdf_FRONT_GATE_R,true,0,500) Doors_Set_State(mdf_FRONT_GATE_L,true,0,500) Doors_Set_State(mdf_Garage_door,true,0,500) ENDPROC proc Task_perform_Normal_seq(eEnemies_Mafia mafped) //===================== ===================== ===================== ===================== if mafped = maf_car OPEN_SEQUENCE_TASK(seq) if not IS_ENTITY_AT_COORD(mafia[maf_car].id,mafia[maf_car].vStartLoc,<<1,1,1>>) TASK_FOLLOW_NAV_MESH_TO_COORD(null,mafia[maf_car].vStartLoc,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP,DEFAULT_NAVMESH_RADIUS,ENAV_SUPPRESS_EXACT_STOP) endif // if not IS_PED_HEADING_TOWARDS_POSITION(mafia[maf_car].id,<<956.77148, -1703.71277, 28.70344>>,40) // TASK_TURN_PED_TO_FACE_COORD(null,<<956.77148, -1703.71277, 28.70344>>) //BUG FIX 1399373 // endif if GET_ENTITY_HEADING(mafia[maf_car].id) <> Mafia[maf_car].fheading TASK_ACHIEVE_HEADING(NULL, Mafia[maf_car].fheading) //BUG FIX 1399373 endif if not IS_PED_HEADTRACKING_PED(mafia[maf_car].id,mafia[maf_car].partner) TASK_LOOK_AT_ENTITY(null,mafia[maf_car].partner,-1,SLF_WHILE_NOT_IN_FOV| SLF_WIDEST_YAW_LIMIT | SLF_WIDEST_PITCH_LIMIT) endif TASK_PLAY_ANIM(null,AnimDict_gestures,"idle_b",WALK_BLEND_IN) TASK_PLAY_ANIM(null,AnimDict_gestures,"idle_d") TASK_PLAY_ANIM(null,AnimDict_gestures,"idle_e",NORMAL_BLEND_IN,WALK_BLEND_OUT) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(mafia[maf_car].id,seq) CLEAR_SEQUENCE_TASK(seq) elif mafped = maf_car_talking OPEN_SEQUENCE_TASK(seq) if not IS_ENTITY_AT_COORD(mafia[maf_car_talking].id,mafia[maf_car_talking].vStartLoc,<<1,1,1>>) TASK_FOLLOW_NAV_MESH_TO_COORD(null,mafia[maf_car_talking].vStartLoc,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP,DEFAULT_NAVMESH_RADIUS,ENAV_SUPPRESS_EXACT_STOP) endif // if not IS_PED_FACING_PED(mafia[maf_car_talking].id,mafia[maf_car_talking].partner,40) // //TASK_TURN_PED_TO_FACE_ENTITY(null,mafia[maf_car_talking].partner) //BUG FIX 1399373 // TASK_ACHIEVE_HEADING(NULL, Mafia[maf_car_talking].fheading) // endif if GET_ENTITY_HEADING(mafia[maf_car_talking].id) <> Mafia[maf_car_talking].fheading TASK_ACHIEVE_HEADING(NULL, Mafia[maf_car_talking].fheading) //BUG FIX 1399373 endif if not IS_PED_HEADTRACKING_PED(mafia[maf_car_talking].id,mafia[maf_car_talking].partner) TASK_LOOK_AT_ENTITY(null,mafia[maf_car_talking].partner,-1,SLF_WHILE_NOT_IN_FOV| SLF_WIDEST_YAW_LIMIT | SLF_WIDEST_PITCH_LIMIT) endif TASK_PLAY_ANIM(null,AnimDict_gestures,"idle_a",WALK_BLEND_IN) TASK_PLAY_ANIM(null,AnimDict_gestures,"idle_c") TASK_PLAY_ANIM(null,AnimDict_gestures,"idle_b",NORMAL_BLEND_IN,WALK_BLEND_OUT) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(mafia[maf_car_talking].id,seq) CLEAR_SEQUENCE_TASK(seq) //===================== ===================== ===================== ===================== elif mafped = maf_walkway_door OPEN_SEQUENCE_TASK(seq) TASK_LOOK_AT_ENTITY(null,mafia[maf_walkway_door].partner,-1,SLF_WHILE_NOT_IN_FOV| SLF_WIDEST_YAW_LIMIT | SLF_WIDEST_PITCH_LIMIT) //at right vent if IS_ENTITY_AT_COORD(mafia[maf_walkway_door].id,<<943.27026, -1680.55713, 41.06182>>,<<4,4,4>>) SET_PED_RESET_FLAG(mafia[maf_walkway_door].id,PRF_SearchForClosestDoor,FALSE) if IS_ENTITY_AT_COORD(mafia[maf_walkway_door].partner,<<945.01746, -1679.36267, 41.06182>>,<<4,4,4>>) if not IS_PED_HEADING_TOWARDS_POSITION(mafia[maf_walkway_door].id,<<945.01746, -1679.36267, 41.06182>>,30) TASK_TURN_PED_TO_FACE_COORD(null,<<945.01746, -1679.36267, 41.06182>>) endif TASK_PLAY_ANIM(null,AnimDict_gestures,"idle_b",WALK_BLEND_in) TASK_PLAY_ANIM(null,AnimDict_gestures,"idle_a") TASK_PLAY_ANIM(null,AnimDict_gestures,"idle_c") TASK_PLAY_ANIM(null,AnimDict_gestures,"idle_a") TASK_PLAY_ANIM(null,AnimDict_gestures,"idle_b",NORMAL_BLEND_IN,WALK_BLEND_OUT) TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<939.12335, -1692.30664, 41.06182>>,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP,DEFAULT_NAVMESH_RADIUS,ENAV_DEFAULT) Mafia[maf_walkway_door].vtarget = <<939.12335, -1692.30664, 41.06182>> bDoWalkwayChat = true else TASK_TURN_PED_TO_FACE_ENTITY(null,mafia[maf_walkway_door].partner) endif //at stairs elif IS_ENTITY_AT_COORD(mafia[maf_walkway_door].id,<<937.74927, -1693.96704, 41.06182>>,<<3,3,3>>) if IS_ENTITY_AT_COORD(mafia[maf_walkway_door].partner,<<937.74927, -1693.96704, 41.06182>>,<<3,3,3>>) if not IS_PED_FACING_PED(mafia[maf_walkway_door].id,mafia[maf_walkway_door].partner,30) TASK_TURN_PED_TO_FACE_ENTITY(null,mafia[maf_walkway_door].partner) endif TASK_PLAY_ANIM(null,AnimDict_gestures,"idle_c",WALK_BLEND_in) TASK_PLAY_ANIM(null,AnimDict_gestures,"idle_a") TASK_PLAY_ANIM(null,AnimDict_gestures,"idle_b",NORMAL_BLEND_IN,WALK_BLEND_OUT) TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<940.02069, -1698.03931, 41.06182>>,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP,DEFAULT_NAVMESH_RADIUS,ENAV_DEFAULT) Mafia[maf_walkway_door].vtarget = <<940.02069, -1698.03931, 41.06182>> bDoWalkwayChat = true else TASK_TURN_PED_TO_FACE_ENTITY(null,mafia[maf_walkway_door].partner) endif //at left vent elif IS_ENTITY_AT_COORD(mafia[maf_walkway_door].id,<<937.99335, -1700.34326, 41.06182>>,<<4,4,4>>) if IS_ENTITY_AT_COORD(mafia[maf_walkway_door].partner,<<937.99335, -1700.34326, 41.06182>>,<<4,4,4>>) if not IS_PED_FACING_PED(mafia[maf_walkway_door].id,mafia[maf_walkway_door].partner,30) TASK_TURN_PED_TO_FACE_ENTITY(null,mafia[maf_walkway_door].partner) endif TASK_PLAY_ANIM(null,AnimDict_gestures,"idle_e",WALK_BLEND_in) TASK_PLAY_ANIM(null,AnimDict_gestures,"idle_a") TASK_PLAY_ANIM(null,AnimDict_gestures,"idle_c") TASK_PLAY_ANIM(null,AnimDict_gestures,"idle_b") TASK_PLAY_ANIM(null,AnimDict_gestures,"idle_d",NORMAL_BLEND_IN,WALK_BLEND_OUT) TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<943.27026, -1680.55713, 41.06182>>,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP,DEFAULT_NAVMESH_RADIUS,ENAV_DEFAULT) Mafia[maf_walkway_door].vtarget = <<943.27026, -1680.55713, 41.06182>> bDoWalkwayChat = true else TASK_TURN_PED_TO_FACE_ENTITY(null,mafia[maf_walkway_door].partner) endif else TASK_FOLLOW_NAV_MESH_TO_COORD(null,Mafia[maf_walkway_door].vtarget,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP,DEFAULT_NAVMESH_RADIUS,ENAV_DEFAULT) endif CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(mafia[maf_walkway_door].id,seq) CLEAR_SEQUENCE_TASK(seq) //===================== ===================== ===================== ===================== elif mafped = maf_worker_walkway OPEN_SEQUENCE_TASK(seq) TASK_LOOK_AT_ENTITY(null,mafia[maf_worker_walkway].partner,-1) //at right vent if IS_ENTITY_AT_COORD(mafia[maf_worker_walkway].id,<<945.01746, -1679.36267, 41.06182>>,<<4,4,4>>) SET_PED_RESET_FLAG(mafia[maf_worker_walkway].id,PRF_SearchForClosestDoor,FALSE) if IS_ENTITY_AT_COORD(mafia[maf_worker_walkway].partner,<<943.27026, -1680.55713, 41.06182>>,<<4,4,4>>) TASK_TURN_PED_TO_FACE_COORD(null,<<945.24200, -1676.69360, 41.06182>>) TASK_PLAY_ANIM(null,animDict_kneel_enter,"enter",walk_BLEND_IN,NORMAL_BLEND_OUT) TASK_PLAY_ANIM(null,animDict_kneel_Idle,"idle_b",normal_BLEND_IN,NORMAL_BLEND_OUT) TASK_PLAY_ANIM(null,animDict_kneel_exit,"exit",normal_BLEND_IN,walk_BLEND_OUT) TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<937.41699, -1694.07996, 41.06182>>,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP,DEFAULT_NAVMESH_RADIUS,ENAV_DEFAULT) Mafia[maf_worker_walkway].vtarget = <<937.41699, -1694.07996, 41.06182>> else TASK_TURN_PED_TO_FACE_ENTITY(null,mafia[maf_worker_walkway].partner) endif //at stairs elif IS_ENTITY_AT_COORD(mafia[maf_worker_walkway].id,<<937.74927, -1693.96704, 41.06182>>,<<3,3,3>>) if IS_ENTITY_AT_COORD(mafia[maf_worker_walkway].partner,<<937.74927, -1693.96704, 41.06182>>,<<3,3,3>>) if not IS_PED_FACING_PED(mafia[maf_worker_walkway].id,mafia[maf_worker_walkway].partner,30) TASK_TURN_PED_TO_FACE_ENTITY(null,mafia[maf_worker_walkway].partner) endif TASK_PLAY_ANIM(null,AnimDict_gestures,"idle_d",walk_BLEND_IN) TASK_PLAY_ANIM(null,AnimDict_gestures,"idle_c") TASK_PLAY_ANIM(null,AnimDict_gestures,"idle_e",normal_BLEND_IN,walk_BLEND_OUT) TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<936.80951, -1701.27502, 41.06182>>,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP,DEFAULT_NAVMESH_RADIUS,ENAV_DEFAULT) Mafia[maf_worker_walkway].vtarget = <<936.80951, -1701.27502, 41.06182>> else TASK_TURN_PED_TO_FACE_ENTITY(null,Mafia[maf_worker_walkway].id) endif //at left vent elif IS_ENTITY_AT_COORD(mafia[maf_worker_walkway].id,<<937.99335, -1700.34326, 41.06182>>,<<4,4,4>>) if IS_ENTITY_AT_COORD(mafia[maf_worker_walkway].partner,<<937.99335, -1700.34326, 41.06182>>,<<4,4,4>>) TASK_TURN_PED_TO_FACE_COORD(null,<<937.13586, -1699.16711, 42.38544>>) TASK_PLAY_ANIM(null,animDict_kneel_enter,"enter",walk_BLEND_IN,NORMAL_BLEND_OUT) TASK_PLAY_ANIM(null,animDict_kneel_Idle,"idle_a",normal_BLEND_IN,NORMAL_BLEND_OUT) TASK_PLAY_ANIM(null,animDict_kneel_exit,"exit",normal_BLEND_IN,walk_BLEND_OUT) TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<945.01746, -1679.36267, 41.06182>>,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP,DEFAULT_NAVMESH_RADIUS,ENAV_DEFAULT) Mafia[maf_worker_walkway].vtarget = <<945.01746, -1679.36267, 41.06182>> else TASK_TURN_PED_TO_FACE_ENTITY(null,Mafia[maf_worker_walkway].partner) endif else TASK_FOLLOW_NAV_MESH_TO_COORD(null,Mafia[maf_worker_walkway].vtarget,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP,DEFAULT_NAVMESH_RADIUS,ENAV_DEFAULT) endif CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(mafia[maf_worker_walkway].id,seq) CLEAR_SEQUENCE_TASK(seq) //===================== ===================== ===================== ===================== elif mafped = maf_worker_top OPEN_SEQUENCE_TASK(seq) //big vent if IS_ENTITY_AT_COORD(mafia[maf_worker_top].id,vBIGVENT,<<2,2,2>>) SET_PED_RESET_FLAG(mafia[maf_worker_top].id,PRF_SearchForClosestDoor,FALSE) CLEAR_PED_SECONDARY_TASK(mafia[maf_worker_top].id) TASK_PLAY_ANIM(null,AnimDict_ClipBoard,"idle_a",WALK_BLEND_IN,NORMAL_BLEND_OUT) TASK_PLAY_ANIM(null,AnimDict_ClipBoard,"idle_c",NORMAL_BLEND_IN,walk_BLEND_OUT) TASK_PLAY_ANIM(null,AnimDict_ClipBoard,"idle_a",walk_BLEND_IN,WALK_BLEND_OUT,-1,AF_SECONDARY | AF_UPPERBODY | AF_LOOPING) TASK_FOLLOW_NAV_MESH_TO_COORD(null,vCROUCHVENT,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP,DEFAULT_NAVMESH_RADIUS,ENAV_DEFAULT,2.27) Mafia[maf_worker_top].vtarget = vCROUCHVENT //crouch elif IS_ENTITY_AT_COORD(mafia[maf_worker_top].id,vCROUCHVENT,<<2,2,2>>) CLEAR_PED_SECONDARY_TASK(mafia[maf_worker_top].id) TASK_PLAY_ANIM(null,animDict_kneel_enter,"enter",walk_BLEND_IN,NORMAL_BLEND_OUT) TASK_PLAY_ANIM(null,animDict_kneel_Idle,"idle_a",normal_BLEND_IN,NORMAL_BLEND_OUT) TASK_PLAY_ANIM(null,animDict_kneel_exit,"exit",normal_BLEND_IN,walk_BLEND_OUT) TASK_PLAY_ANIM(null,AnimDict_ClipBoard,"idle_c",walk_BLEND_IN,WALK_BLEND_OUT,-1,AF_SECONDARY | AF_UPPERBODY | AF_LOOPING) TASK_FOLLOW_NAV_MESH_TO_COORD(null,vBOXPOS,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP,DEFAULT_NAVMESH_RADIUS,ENAV_DEFAULT,-3.24) Mafia[maf_worker_top].vtarget = vBOXPOS //box elif IS_ENTITY_AT_COORD(mafia[maf_worker_top].id,vBOXPOS,<<2,2,2>>) CLEAR_PED_SECONDARY_TASK(mafia[maf_worker_top].id) TASK_PLAY_ANIM(null,AnimDict_ClipBoard,"idle_c",WALK_BLEND_IN,NORMAL_BLEND_OUT) TASK_PLAY_ANIM(null,AnimDict_ClipBoard,"idle_a",NORMAL_BLEND_IN,walk_BLEND_OUT) TASK_PLAY_ANIM(null,AnimDict_ClipBoard,"idle_c",walk_BLEND_IN,WALK_BLEND_OUT,-1,AF_SECONDARY | AF_UPPERBODY | AF_LOOPING ) TASK_FOLLOW_NAV_MESH_TO_COORD(null,vBIGVENT,PEDMOVE_WALK,DEFAULT_TIME_BEFORE_WARP,DEFAULT_NAVMESH_RADIUS,ENAV_DEFAULT,127.67) Mafia[maf_worker_top].vtarget = vBIGVENT else if Mafia[maf_worker_top].vtarget.x = vCROUCHVENT.x and Mafia[maf_worker_top].vtarget.y = vCROUCHVENT.y and Mafia[maf_worker_top].vtarget.z = vCROUCHVENT.z TASK_PLAY_ANIM(null,AnimDict_ClipBoard,"idle_c",walk_BLEND_IN,WALK_BLEND_OUT,-1,AF_SECONDARY | AF_UPPERBODY | AF_LOOPING ) TASK_FOLLOW_NAV_MESH_TO_COORD(null,vCROUCHVENT,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP,DEFAULT_NAVMESH_RADIUS,ENAV_DEFAULT,2.27) elif Mafia[maf_worker_top].vtarget.x = vBOXPOS.x or Mafia[maf_worker_top].vtarget.y = vBOXPOS.y or Mafia[maf_worker_top].vtarget.z = vBOXPOS.z TASK_PLAY_ANIM(null,AnimDict_ClipBoard,"idle_c",walk_BLEND_IN,WALK_BLEND_OUT,-1,AF_SECONDARY | AF_UPPERBODY | AF_LOOPING ) TASK_FOLLOW_NAV_MESH_TO_COORD(null,vBOXPOS,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP,DEFAULT_NAVMESH_RADIUS,ENAV_DEFAULT,-3.24) else TASK_PLAY_ANIM(null,AnimDict_ClipBoard,"idle_c",walk_BLEND_IN,WALK_BLEND_OUT,-1,AF_SECONDARY | AF_UPPERBODY | AF_LOOPING ) TASK_FOLLOW_NAV_MESH_TO_COORD(null,vBIGVENT,PEDMOVE_WALK,DEFAULT_TIME_BEFORE_WARP,DEFAULT_NAVMESH_RADIUS,ENAV_DEFAULT,127.67) endif endif CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(mafia[maf_worker_top].id,seq) CLEAR_SEQUENCE_TASK(seq) //===================== ===================== ===================== ===================== elif mafped = maf_worker_vent OPEN_SEQUENCE_TASK(seq) if not IS_PED_HEADING_TOWARDS_POSITION(mafia[maf_worker_vent].id,<<889.07233, -1714.90295, 38.47169>>,40) TASK_TURN_PED_TO_FACE_COORD(null,<<889.07233, -1714.90295, 38.47169>>) endif TASK_PLAY_ANIM(null,AnimDict_ClipBoard,"idle_a",WALK_BLEND_IN,NORMAL_BLEND_OUT) TASK_PLAY_ANIM(null,AnimDict_ClipBoard,"idle_c",NORMAL_BLEND_IN,NORMAL_BLEND_OUT) TASK_PLAY_ANIM(null,AnimDict_ClipBoard,"idle_c",NORMAL_BLEND_IN,WALK_BLEND_OUT) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(mafia[maf_worker_vent].id,seq) CLEAR_SEQUENCE_TASK(seq) //===================== ===================== ===================== ===================== elif mafped = maf_worker_door OPEN_SEQUENCE_TASK(seq) if IS_ENTITY_AT_COORD(mafia[maf_worker_door].id,vMIDVENTSMALL,<<2,2,2>>) SET_PED_RESET_FLAG(mafia[maf_worker_door].id,PRF_SearchForClosestDoor,FALSE) CLEAR_PED_SECONDARY_TASK(mafia[maf_worker_door].id) TASK_PLAY_ANIM(null,AnimDict_ClipBoard,"idle_a",WALK_BLEND_IN) TASK_PLAY_ANIM(null,AnimDict_ClipBoard,"idle_c",NORMAL_BLEND_IN,walk_BLEND_OUT) TASK_PLAY_ANIM(null,AnimDict_ClipBoard,"idle_c",WALK_BLEND_IN,WALK_BLEND_OUT,-1,AF_SECONDARY | AF_UPPERBODY | AF_LOOPING) TASK_FOLLOW_NAV_MESH_TO_COORD(null,vMIDVENTBIG,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP,DEFAULT_NAVMESH_RADIUS,ENAV_DEFAULT,151.41) Mafia[maf_worker_door].vtarget = vMIDVENTBIG elif IS_ENTITY_AT_COORD(mafia[maf_worker_door].id,vMIDVENTBIG,<<2,2,2>>) CLEAR_PED_SECONDARY_TASK(mafia[maf_worker_door].id) TASK_PLAY_ANIM(null,AnimDict_ClipBoard,"idle_c",NORMAL_BLEND_IN,WALK_BLEND_OUT) TASK_PLAY_ANIM(null,AnimDict_ClipBoard,"idle_c",WALK_BLEND_IN,WALK_BLEND_OUT,-1,AF_SECONDARY | AF_UPPERBODY | AF_LOOPING) TASK_FOLLOW_NAV_MESH_TO_COORD(null,vMIDVENTSMALL,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP,DEFAULT_NAVMESH_RADIUS,ENAV_DEFAULT,-163.74) Mafia[maf_worker_door].vtarget = vMIDVENTSMALL elif IS_ENTITY_IN_ANGLED_AREA(mafia[maf_worker_door].id,<<906.62262, -1699.76147, 44.40839>>,<<907.29437, -1691.58569, 42.11664>>,3) TASK_PLAY_ANIM(null,AnimDict_ClipBoard,"idle_c",WALK_BLEND_IN,WALK_BLEND_OUT,-1,AF_SECONDARY | AF_UPPERBODY | AF_LOOPING) TASK_GO_STRAIGHT_TO_COORD(null,<<906.34631, -1701.62073, 41.97026>>,PEDMOVE_WALK) TASK_FOLLOW_NAV_MESH_TO_COORD(null,vMIDVENTSMALL,PEDMOVE_WALK) else if Mafia[maf_worker_door].vtarget.x = vMIDVENTSMALL.x or Mafia[maf_worker_door].vtarget.y = vMIDVENTSMALL.y or Mafia[maf_worker_door].vtarget.z = vMIDVENTSMALL.z TASK_PLAY_ANIM(null,AnimDict_ClipBoard,"idle_c",walk_BLEND_IN,WALK_BLEND_OUT,-1,AF_SECONDARY | AF_UPPERBODY | AF_LOOPING ) TASK_FOLLOW_NAV_MESH_TO_COORD(null, vMIDVENTSMALL,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP,DEFAULT_NAVMESH_RADIUS,ENAV_DEFAULT,-163.74) else TASK_PLAY_ANIM(null,AnimDict_ClipBoard,"idle_c",walk_BLEND_IN,WALK_BLEND_OUT,-1,AF_SECONDARY | AF_UPPERBODY | AF_LOOPING ) TASK_FOLLOW_NAV_MESH_TO_COORD(null,vMIDVENTBIG,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP,DEFAULT_NAVMESH_RADIUS,ENAV_DEFAULT,151.41) endif endif CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(mafia[maf_worker_door].id,seq) CLEAR_SEQUENCE_TASK(seq) //===================== ===================== ===================== ===================== elif mafped = maf_worker_alone OPEN_SEQUENCE_TASK(seq) if bAloneWorkerActive TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<924.75250, -1720.31702, 37.06301>>,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP,DEFAULT_NAVMESH_RADIUS,ENAV_DEFAULT,79.87) if not IS_PED_HEADING_TOWARDS_POSITION(mafia[maf_worker_alone].id,<<923.66852, -1720.09009, 38.26234>>,40) TASK_TURN_PED_TO_FACE_COORD(null,<<923.66852, -1720.09009, 38.26234>>) endif TASK_PLAY_ANIM(null,animDict_kneel_enter,"enter",WALK_BLEND_IN,NORMAL_BLEND_OUT) TASK_PLAY_ANIM(null,animDict_kneel_Idle,"idle_a",normal_BLEND_IN,NORMAL_BLEND_OUT) TASK_PLAY_ANIM(null,animDict_kneel_Idle,"idle_b",normal_BLEND_IN,NORMAL_BLEND_OUT) TASK_PLAY_ANIM(null,animDict_kneel_Idle,"idle_b",normal_BLEND_IN,NORMAL_BLEND_OUT) TASK_PLAY_ANIM(null,animDict_kneel_exit,"exit",NORMAL_BLEND_IN,WALK_BLEND_OUT) endif if not IS_ENTITY_AT_COORD(mafia[maf_worker_alone].id,<<938.72675, -1717.90356, 37.06301>>,<<2,2,2>>) TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<938.72675, -1717.90356, 37.06301>>,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP,DEFAULT_NAVMESH_RADIUS,ENAV_DEFAULT,79.87) endif if not IS_PED_HEADING_TOWARDS_POSITION(mafia[maf_worker_alone].id,<<936.85815, -1716.89111, 38.38630>>,30) TASK_TURN_PED_TO_FACE_COORD(null,<<936.85815, -1716.89111, 38.38630>>) endif TASK_PLAY_ANIM(null,animDict_kneel_enter,"enter",WALK_BLEND_IN,NORMAL_BLEND_OUT) TASK_PLAY_ANIM(null,animDict_kneel_Idle,"idle_c",normal_BLEND_IN,NORMAL_BLEND_OUT) TASK_PLAY_ANIM(null,animDict_kneel_Idle,"idle_b",normal_BLEND_IN,NORMAL_BLEND_OUT) TASK_PLAY_ANIM(null,animDict_kneel_Idle,"idle_c",normal_BLEND_IN,NORMAL_BLEND_OUT) TASK_PLAY_ANIM(null,animDict_kneel_exit,"exit",NORMAL_BLEND_IN,WALK_BLEND_OUT) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(mafia[maf_worker_alone].id,seq) CLEAR_SEQUENCE_TASK(seq) endif endproc proc set_enemy_standards(ped_index ped) set_ped_relationship_group_hash(ped, rel_group_enemies) set_ped_as_enemy(ped, true) set_ped_path_can_use_ladders(ped, true) set_ped_money(ped,0) set_ped_alertness(ped,as_not_alert) set_ped_flee_attributes(ped,fa_never_flee,true) stop_ped_speaking(ped,true) set_entity_load_collision_flag(ped,true) //combat attributes set_ped_combat_attributes(ped,ca_can_shoot_without_los ,false) set_ped_combat_attributes(ped, ca_use_cover,true) set_ped_combat_attributes(ped,ca_can_investigate,true) set_ped_combat_attributes(ped, ca_use_vehicle, false) set_ped_combat_attributes(ped, CA_ALWAYS_FIGHT, false) set_ped_config_flag(ped,pcf_runfromfiresandexplosions,false) set_ped_accuracy(ped,25) SET_PED_DROPS_WEAPONS_WHEN_DEAD(ped,true) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(ped,true) // INFORM_MISSION_STATS_OF_HEADSHOT_WATCH_ENTITY(Mafia[ped].id) endproc proc create_MafiaEnemy(eEnemies_Mafia ped,float fseeingrange = 60.0) if ped = maf_worker_alone or ped = maf_worker_walkway or ped = maf_worker_top or ped = maf_worker_door or ped = maf_worker_vent or ped = maf_car or ped = maf_car_talking Mafia[ped].model = modelWorker endif Mafia[ped].id = create_ped(PEDTYPE_MISSION,Mafia[ped].model,Mafia[ped].vStartLoc,Mafia[ped].fheading) set_ped_seeing_range(Mafia[ped].id,fseeingrange) SET_PED_VISUAL_FIELD_CENTER_ANGLE(Mafia[ped].id,55) SET_PED_VISUAL_FIELD_MAX_ANGLE(Mafia[ped].id,85) SET_PED_VISUAL_FIELD_MIN_ANGLE(Mafia[ped].id,-85) SET_PED_KEEP_TASK(Mafia[ped].id,true) if ped = maf_worker_vent or ped = maf_worker_top or ped = maf_worker_door mafia[ped].obj = CREATE_OBJECT(modelclipboard,Mafia[ped].vStartLoc) //1399385 removing this as it isn't being held correctly. Mafia[ped].bObjAttached = false SET_ENTITY_HEALTH(Mafia[ped].id,120) SET_PED_WEAPON_MOVEMENT_CLIPSET(Mafia[ped].id,"MOVE_M@CLIPBOARD") elif ped = maf_worker_alone SET_ENTITY_HEALTH(Mafia[ped].id,120) else SET_ENTITY_HEALTH(Mafia[ped].id,130) endif mafia[ped].sit = SSIT_AI_NONE set_enemy_standards(Mafia[ped].id) endproc proc clear_players_task_on_control_input(script_task_name task_name) if IS_SCRIPT_TASK_RUNNING_OR_STARTING(player_ped_id(), task_name) int left_stick_x int left_stick_y int right_stick_x int right_stick_y int stick_dead_zone = 28 GET_CONTROL_VALUE_OF_ANALOGUE_STICKS(left_stick_x, left_stick_y, right_stick_x, right_stick_y) IF NOT IS_LOOK_INVERTED() right_stick_y *= -1 ENDIF // invert the vertical IF (left_stick_y > STICK_DEAD_ZONE) OR (left_stick_y < (STICK_DEAD_ZONE * -1)) or (left_stick_x > STICK_DEAD_ZONE) OR (left_stick_x < (STICK_DEAD_ZONE * -1)) //or is_control_pressed(player_control, input_sprint) clear_ped_tasks(player_ped_id()) endif endif endproc proc point_gameplay_cam_at_coord(float targetheading) set_gameplay_cam_relative_heading(targetheading - get_entity_heading(player_ped_id())) endproc PROC SETUP_ROCCO() if isentityalive(peds[mpf_rocco].id) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(peds[mpf_rocco].id,true) set_ped_relationship_group_hash(peds[mpf_rocco].id, rel_group_enemies) SET_ENTITY_HEALTH(rocco(),GET_ENTITY_HEALTH(rocco())*2) SET_PED_COMBAT_ABILITY(rocco(),CAL_PROFESSIONAL) SET_PED_COMBAT_ATTRIBUTES(rocco(),CA_CAN_FIGHT_ARMED_PEDS_WHEN_NOT_ARMED,true) SET_PED_COMBAT_ATTRIBUTES(rocco(),CA_ALWAYS_FIGHT,true) SET_PED_COMBAT_ATTRIBUTES(rocco(),CA_USE_COVER,false) SET_PED_COMBAT_MOVEMENT(rocco(),CM_WILLADVANCE) SET_PED_SUFFERS_CRITICAL_HITS(rocco(),FALSE) SET_PED_CONFIG_FLAG(rocco(),PCF_OpenDoorArmIK,true) endif ENDPROC PROC SETUP_Milton() if isentityalive(peds[mpf_milton].id) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(Milton(),true) SET_PED_CONFIG_FLAG(Milton(),PCF_ForcedToUseSpecificGroupSeatIndex,true) set_ped_relationship_group_hash(Milton(),rel_friends) SET_PED_COMPONENT_VARIATION(Milton(),PED_COMP_JBIB,1,0) SET_PED_COMPONENT_VARIATION(Milton(),PED_COMP_LEG,1,0) SET_PED_COMPONENT_VARIATION(Milton(),PED_COMP_TORSO,1,0) SET_PED_COMPONENT_VARIATION(Milton(),PED_COMP_FEET,1,0) // SET_PED_PROP_INDEX(milton(),ANCHOR_EYES,0,0) SET_PED_CAN_BE_TARGETTED(Milton(),false) endif ENDPROC PROC SETUP_Anton() if isentityalive(peds[mpf_Anton].id) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(peds[mpf_Anton].id,true) SET_PED_CONFIG_FLAG(peds[mpf_Anton].id,PCF_ForcedToUseSpecificGroupSeatIndex,true) SET_PED_COMPONENT_VARIATION(Anton(),PED_COMP_LEG,0,0) SET_PED_COMPONENT_VARIATION(Anton(),PED_COMP_TORSO,0,0) // SET_PED_PROP_INDEX(anton(),ANCHOR_EYES,0,0) set_ped_relationship_group_hash(peds[mpf_Anton].id,rel_friends) SET_PED_CAN_BE_TARGETTED(Anton(),false) endif ENDPROC PROC SETUP_Gianni() set_ped_seeing_range(peds[mpf_Gianni].id,35) SET_PED_VISUAL_FIELD_CENTER_ANGLE(peds[mpf_Gianni].id,55) SET_PED_VISUAL_FIELD_MAX_ANGLE(peds[mpf_Gianni].id,60) SET_PED_VISUAL_FIELD_MIN_ANGLE(peds[mpf_Gianni].id,-60) SET_PED_KEEP_TASK(peds[mpf_Gianni].id,true) set_ped_relationship_group_hash(peds[mpf_Gianni].id, rel_friends) set_ped_path_can_use_ladders(peds[mpf_Gianni].id, true) set_ped_money(peds[mpf_Gianni].id,0) set_ped_alertness(peds[mpf_Gianni].id,as_not_alert) stop_ped_speaking(peds[mpf_Gianni].id,true) set_entity_load_collision_flag(peds[mpf_Gianni].id,true) set_ped_config_flag(peds[mpf_Gianni].id,pcf_runfromfiresandexplosions,false) set_ped_accuracy(peds[mpf_Gianni].id,25) SET_PED_DROPS_WEAPONS_WHEN_DEAD(peds[mpf_Gianni].id,true) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(peds[mpf_Gianni].id,true) endproc proc Display_Placeholder() if bPlaceholder #IF IS_DEBUG_BUILD DISPLAY_TEXT_WITH_LITERAL_STRING(0.5,0.1,"STRING","PLACEHOLDER") #ENDIF endif endproc // purpose:off radar/ hud / player control proc prep_start_cutscene(bool bplayercontrol,vector varea,bool brender = true,bool binterp = false,bool bclearprj = true,int interptime = default_interp_to_from_game,set_player_control_flags controlflag = 0,bool bphoneaway = true) display_radar(false) display_hud(false) set_player_control(player_id(),bplayercontrol,controlflag) clear_prints() clear_help() render_script_cams(brender,binterp,interptime) if bclearprj clear_area_of_projectiles(varea,500) endif STOP_FIRE_IN_RANGE(varea,200) if IS_PED_IN_ANY_VEHICLE(player_ped_id()) SET_VEH_RADIO_STATION(GET_VEHICLE_PED_IS_IN(player_ped_id()),"OFF") endif SET_PED_STEALTH_MOVEMENT(player_peD_id(),false) if bphoneaway hang_up_and_put_away_phone() endif endproc // purpose:on radar/ hud / player control proc prep_stop_cutscene(bool bplayercontrol,bool brender = false,bool binterp = false,int iduration = default_interp_to_from_game, set_player_control_flags controlflag = 0) display_radar(true) display_hud(true) set_player_control(player_id(),bplayercontrol,controlflag) render_script_cams(brender,binterp,iduration) if not brender destroy_all_cams() endif if IS_PED_IN_ANY_VEHICLE(player_ped_id()) SET_VEHICLE_RADIO_ENABLED(GET_VEHICLE_PED_IS_IN(player_ped_id()),true) endif bPlaceholder = false endproc proc SET_ALL_EXIT_STATES(bool bstate = false) bcs_mike = bstate bcs_cam = bstate bcs_actor = bstate bcs_heli = bstate bcs_goon = bstate bcs_director = bstate //bcs_rocco = bstate endproc proc set_peds_CS_OUTFITS() IF ISENTITYALIVE(MIKE()) Register_Ped_Variation_For_Cutscene_From_Ped(sCutscenePedVariationRegister,MIKE(),"MICHAEL") REMOVE_PED_HELMET(MIKE(),true) ENDIF IF ISENTITYALIVE(peds[mpf_milton].id) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Milton",PED_COMP_TORSO,1,0,CS_MILTON) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Milton",PED_COMP_LEG,1,0,CS_MILTON) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Milton",PED_COMP_feet,1,0,CS_MILTON) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Milton",PED_COMP_JBIB,1,0,CS_MILTON) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Milton",PED_COMP_TORSO,1,0,IG_MILTON) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Milton",PED_COMP_LEG,1,0,IG_MILTON) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Milton",PED_COMP_feet,1,0,IG_MILTON) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Milton",PED_COMP_JBIB,1,0,IG_MILTON) CLEAR_ALL_PED_PROPS(peds[mpf_milton].id) ENDIF IF ISENTITYALIVE(peds[mpf_Anton].id) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Anton",PED_COMP_TORSO,0,0,CSB_ANTON) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Anton",PED_COMP_LEG,0,0,CSB_ANTON) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Anton",PED_COMP_TORSO,0,0,U_M_Y_ANTONB) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Anton",PED_COMP_LEG,0,0,U_M_Y_ANTONB) CLEAR_ALL_PED_PROPS(peds[mpf_Anton].id) ENDIF IF ISENTITYALIVE(peds[mpf_rocco].id) Register_Ped_Variation_For_Cutscene_From_Ped(sCutscenePedVariationRegister,rocco(),"Rocco") CLEAR_ALL_PED_PROPS(peds[mpf_rocco].id) ENDIF endproc func bool Check_Replay_Car(vector pos, float heading) //check if IS_REPLAY_CHECKPOINT_VEHICLE_AVAILABLE() if IS_CHECKPOINT_VEHICLE_SUITABLE() REQUEST_REPLAY_CHECKPOINT_VEHICLE_MODEL() while not HAS_REPLAY_CHECKPOINT_VEHICLE_LOADED() wait(0) endwhile CLEAR_AREA_OF_VEHICLES(pos,2) vehs[mvf_Replay_car].id = CREATE_REPLAY_CHECKPOINT_VEHICLE(pos,heading) SET_ENTITY_LOAD_COLLISION_FLAG(vehs[mvf_Replay_car].id,true) SET_ENTITY_SHOULD_FREEZE_WAITING_ON_COLLISION(vehs[mvf_Replay_car].id,true) return true else return true endif else return true endif return false endfunc // ----------------------------------------------------------------------------------------------------------- // Mission Cleanup // ----------------------------------------------------------------------------------------------------------- PROC RESET_EVERYTHING() IF IS_CUTSCENE_ACTIVE() STOP_CUTSCENE_IMMEDIATELY() REMOVE_CUTSCENE() WHILE IS_CUTSCENE_ACTIVE() WAIT(0) ENDWHILE ENDIF //======================================= Destroy ====================================== //all peds are deleted for i = 0 TO Enum_to_int(MPF_NUM_OF_PEDS)-1 if DOES_ENTITY_EXIST(peds[i].id) AND (NOT IS_PED_INJURED(peds[i].id)) if IS_PED_IN_ANY_VEHICLE(peds[i].id) SET_entity_COORDS(peds[i].id,(GET_ENTITY_COORDS(GET_VEHICLE_PED_IS_IN(peds[i].id))+<<0,-2,0>>)) endif if peds[i].id != player_ped_id() SAFE_DELETE_PED(peds[i].id) endif endif endfor //enemies and their properties for i = 0 TO Enum_to_int(NUM_OF_Mafia_PEDS)-1 Mafia[i].bkilled = false mafia[i].sit = SSIT_AI_NONE Mafia[i].bForceBlip = false Mafia[i].bHeardNoise = false cleanup_ai_ped_blip(Mafia[i].blipstruct) if DOES_ENTITY_EXIST(mafia[i].obj) if IS_ENTITY_ATTACHED(mafia[i].obj) DETACH_ENTITY(mafia[i].obj) endif SAFE_DELETE_OBJECT(mafia[i].obj) endif if DOES_ENTITY_EXIST(Mafia[i].id) SAFE_DELETE_PED(Mafia[i].id) endif endfor //all vehicles are deleted for i = 0 TO Enum_to_int(MVF_NUM_OF_VEH)-1 if DOES_ENTITY_EXIST(vehs[i].id) SAFE_DELETE_VEHICLE(vehs[i].id) endif endfor //--------------------- objects ----------------------- for i = 0 to enum_to_int(MAX_NUM_CONST_OBJS) -1 constObjs[i].bloaded = false if DOES_ENTITY_EXIST(constObjs[i].id) SAFE_DELETE_OBJECT(constObjs[i].id) endif endfor //locates stuff clear_mission_locate_stuff(slocatesdata) clear_mission_location_text_and_blips(slocatesdata) if DOES_BLIP_EXIST(blip_objective) remove_blip(blip_objective) endif destroy_all_cams() clear_prints() kill_any_conversation() STOP_AUDIO_SCENES() //======================================= RESETS ====================================== STOP_GAMEPLAY_HINT() g_replay.iReplayInt[0] = 0 g_replay.iReplayInt[1] = 0 clear_area(GET_ENTITY_COORDS(player_ped_id()),400,true) Doors_Reset_All() SET_INTERIOR_DISABLED( INTERIOR_V_58_SOL_OFFICE, TRUE) //wanted level CLEAR_PLAYER_WANTED_LEVEL(player_id()) //reset player control SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) //clear AI tasks if not IS_PED_INJURED(player_ped_id()) CLEAR_PED_TASKS(player_ped_id()) endif prep_stop_cutscene(true) bAloneWorkerActive = false bDoWalkwayChat = false //stages eAI_stage = AI_CHECKS //AUDIO STOP_AUDIO_SCENES() iDialogue_Stage = 0 iCarSpeechStage = 0 iwalkwaychat = 0 iconstructStage = 0 iScareStage = 0 shapetestheli = null bpauseconv = false bMusic_1stEnemy = false bMusic_HeliTrigger = false bMusic_Ends = false b_cutscene_loaded = false iskipCS = 0 ENDPROC PROC MISSION_CLEANUP() PRINTln("...SOLOMON 1 MISSION CLEANUP") IF IS_CUTSCENE_ACTIVE() STOP_CUTSCENE_IMMEDIATELY() REMOVE_CUTSCENE() ENDIF //======================================= Destroy ====================================== CLEAR_MISSION_LOCATE_STUFF(sLocatesData) for i = 0 TO Enum_to_int(MPF_NUM_OF_PEDS)-1 if IsEntityAlive(peds[i].id) if peds[i].id != player_ped_id() SET_PED_KEEP_TASK(peds[i].id,true) if IS_PED_IN_GROUP(peds[i].id) REMOVE_PED_FROM_GROUP(peds[i].id) endif SAFE_RELEASE_PED(peds[i].id) endif if DOES_BLIP_EXIST(peds[i].blip) REMOVE_BLIP(peds[i].blip) endif endif endfor //-------------------- enemies----------------------- //Mafia for i = 0 to ENUM_TO_INT(NUM_OF_Mafia_PEDS) -1 if IsEntityAlive(Mafia[i].id) SAFE_RELEASE_PED(Mafia[i].id) if DOES_ENTITY_EXIST(mafia[i].obj) if IS_ENTITY_ATTACHED(mafia[i].obj) DETACH_ENTITY(mafia[i].obj) endif SAFE_RELEASE_OBJECT(mafia[i].obj) endif CLEANUP_AI_PED_BLIP(Mafia[i].blipstruct) endif Mafia[i].bForceBlip = false Mafia[i].bkilled = false mafia[i].sit = SSIT_AI_NONE endfor //---------------------vehs----------------------- for i = 0 TO Enum_to_int(MVF_NUM_OF_VEH)-1 if IsEntityAlive(vehs[i].id) SAFE_RELEASE_VEHICLE(vehs[i].id) endif if DOES_BLIP_EXIST(vehs[i].blip) REMOVE_BLIP(vehs[i].blip) endif endfor //--------------------- objects ----------------------- for i = 0 to enum_to_int(MAX_NUM_CONST_OBJS) -1 constObjs[i].bloaded = false if DOES_ENTITY_EXIST(constObjs[i].id) SAFE_RELEASE_OBJECT(constObjs[i].id) endif endfor RENDER_SCRIPT_CAMS(false,false,DEFAULT_INTERP_TO_FROM_GAME,true,true) //==================================== Reset ====================================== if IsEntityAlive(player_ped_id()) CLEAR_PED_TASKS(player_ped_id()) CLEAR_PLAYER_WANTED_LEVEL(player_id()) endif //reset player control SET_PLAYER_CONTROL(PLAYER_ID(), TRUE) SET_WANTED_LEVEL_MULTIPLIER(1) //wanted level for mission reset to normal DISPLAY_RADAR(true) DISPLAY_HUD(true) SET_ALL_RANDOM_PEDS_FLEE(player_id(),false) REMOVE_SCENARIO_BLOCKING_AREAS() if DOES_SCENARIO_GROUP_EXIST("SOLOMON_GATE") if not IS_SCENARIO_GROUP_ENABLED("SOLOMON_GATE") SET_SCENARIO_GROUP_ENABLED("SOLOMON_GATE",true) endif endif SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<-1037.91162, -495.88333, 34>>,<<-1016.92767, -471.04614, 37>>,true) enable_dispatch_service(dt_ambulance_department,false) enable_dispatch_service(dt_fire_department, false) set_vehicle_model_is_suppressed(FUGITIVE,false) set_vehicle_model_is_suppressed(FROGGER,false) STOP_AUDIO_SCENES() SET_AMBIENT_ZONE_STATE("AZ_SOL_1_FACTORY_AREA_CONSTRUCTIONS", FALSE, FALSE) DISABLE_TAXI_HAILING(FALSE) DISABLE_CHEAT(CHEAT_TYPE_SPAWN_VEHICLE,false) CLEAR_PRINTS() REMOVE_TEXT_MESSAGE_FEED_ENTRY("SOL1_TEXT") if IS_NEW_LOAD_SCENE_ACTIVE() NEW_LOAD_SCENE_STOP() endif CLEAR_WEATHER_TYPE_PERSIST() TRIGGER_MUSIC_EVENT("SOL1_FAIL") TERMINATE_THIS_THREAD() ENDPROC // ----------------------------------------------------------------------------------------------------------- // MISSION PASS // ----------------------------------------------------------------------------------------------------------- PROC MISSION_PASSED() PRINTSTRING("...SOLOMON 1 MISSION PASSED") PRINTNL() MISSION_FLOW_MISSION_PASSED() MISSION_CLEANUP() ENDPROC // ----------------------------------------------------------------------------------------------------------- // Mission Fail // ----------------------------------------------------------------------------------------------------------- PROC MISSION_FAILED(MFF_MISSION_FAIL_FLAGS FAIL_CONDITION = MFF_DEFAULT) TRIGGER_MUSIC_EVENT("SOL1_FAIL") IF IS_CUTSCENE_ACTIVE() STOP_CUTSCENE_IMMEDIATELY() REMOVE_CUTSCENE() ENDIF STRING strReason = "" //show fail message SWITCH fail_condition CASE mff_debug_fail strReason = "" BREAK case mff_rocco_alerted strReason = "SOL1_FAILALRM" break case mff_rocco_died strReason = "SOL1_FAILROC" break case mff_actor_died strReason = "SOL1_FAILACT" break case mff_director_died strReason = "SOL1_FAILDD" break case mff_heli_dead strReason = "SOL1_FAILHE" break case Mff_scared_peds strReason = "SOL1_FAILSCRD" break case MFF_sol_died strReason = "SOL1_SOLDIED" break case mff_left_Area strReason = "SOl1_FAILLF" break case mff_left_peds strReason = "SOL1_FAILABND" break DEFAULT strReason = "" BREAk ENDSWITCH MISSION_FLOW_MISSION_FAILED_WITH_REASON(strReason) DELETE_TEXT_MESSAGE_BY_LABEL_FROM_ALL_PLAYER_CHARACTERS ("SOL1_TEXT") WHILE NOT GET_MISSION_FLOW_SAFE_TO_CLEANUP() //Maintain anything that could look weird during fade out (e.g. enemies walking off). WAIT(0) ENDWHILE // check if we need to respawn the player in a different position, // if so call MISSION_FLOW_SET_FAIL_WARP_LOCATION() + SET_REPLAY_DECLINED_VEHICLE_WARP_LOCATION here if IsEntityAlive(player_ped_id()) IF IS_ENTITY_IN_ANGLED_AREA(player_ped_id(), <<913.46051, -1691.32263, 42.20993>>, <<918.42084, -1691.80945, 47.00544>>, 5.0) SET_ENTITY_COORDS(player_ped_id(),<<919.98071, -1693.58923, 42.58901>>) ENDIF IF IS_ENTITY_IN_ANGLED_AREA(player_ped_id(), <<906.63867, -1699.76306, 44.40080>>, <<907.28394, -1691.60486, 42.11665>>, 3.0) SET_ENTITY_COORDS(player_ped_id(),<<906.32739, -1701.81006, 41.97026>>) ENDIF IF IS_ENTITY_IN_ANGLED_AREA(player_ped_id(),<<905.60992, -1687.81653, 46.35753>>, <<901.36200, -1687.39539, 49.84843>>, 5.0) SET_ENTITY_COORDS(player_ped_id(),<<896.90826, -1687.11780, 46.13421>>) ENDIF endif MISSION_CLEANUP() // must only take 1 frame and terminate the thread TERMINATE_THIS_THREAD() ENDPROC // ----------------------------------------------------------------------------------------------------------- // MISSION STAGE MANAGEMENT // ----------------------------------------------------------------------------------------------------------- proc mission_stage_management() switch stageswitch case stageswitch_requested println("[stagemanagement] mission_stage switch requested from mission_stage:", mission_stage, "to mission_stage", requestedstage) stageswitch = stageswitch_exiting mission_substage = stage_exit break case stageswitch_exiting println("[stagemanagement] exiting mission_stage: ", mission_stage) stageswitch = stageswitch_entering mission_substage = stage_entry mission_stage = requestedstage break case stageswitch_entering println("[stagemanagement] entered mission_stage: ", mission_stage) iDialogue_Stage = 0 requestedstage = -1 stageswitch = stageswitch_idle break case stageswitch_idle if (get_game_timer() - istagetimer) > 2500 println("[stagemanagement] mission_stage: ", mission_stage, " mission_substage: ", mission_substage, " iDialogue_Stage: ",iDialogue_Stage) istagetimer = get_game_timer() endif break endswitch endproc func bool mission_set_stage(msf_mission_stage_flags newstage) if stageswitch = stageswitch_idle requestedstage = enum_to_int(newstage) stageswitch = stageswitch_requested return true else return false endif endfunc PROC GET_SKIP_STAGE_COORD_AND_HEADING(MSF_MISSION_STAGE_FLAGS eStage, VECTOR &vCoord, FLOAT &fHeading) SWITCH eStage CASE msf_0_get_to_warehouse vCoord = <<-1034.74194, -497.20056, 35.37177>> fHeading = 90 BREAK CASE msf_1_Stealth_to_roof vCoord = <<968.7196, -1751.8749, 30.1595>> fHeading = 38.2203 BREAK CASE msf_2_fight_rocco vCoord = <<910.1216, -1685.2484, 50.1341>> fHeading = 185.5396 BREAK CASE msf_3_get_to_sol vCoord = <<909.5594, -1685.8384, 50.1341>> fHeading = 357.7214 BREAK CASE msf_4_Passed vCoord = <<-1034.74194, -497.20056, 35.37177>> fHeading = 90 BREAK ENDSWITCH ENDPROC PROC SU_GENERAL() RESTORE_PLAYER_PED_VARIATIONS(Player_ped_id()) SET_PED_CONFIG_FLAG(Player_ped_id(),PCF_WillFlyThroughWindscreen,false) clear_area(GET_ENTITY_COORDS(player_ped_id()),500,true) SET_CURRENT_PED_WEAPON(player_ped_id(),WEAPONTYPE_UNARMED,true) SET_GAMEPLAY_CAM_RELATIVE_HEADING() endproc PROC SU_msf_0_get_to_warehouse() IF IS_REPLAY_BEING_SET_UP() END_REPLAY_SETUP() Else FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), False) endif SET_WANTED_LEVEL_MULTIPLIER(0.3) endproc proc SU_msf_1_Stealth_to_roof() vehs[mvf_heli].id = CREATE_VEHICLE(FROGGER,vheliRoof, hHeliRoof) SET_FORCE_HD_VEHICLE(vehs[mvf_heli].id, true) SET_VEHICLE_COLOUR_COMBINATION(vehs[mvf_heli].id,0) SET_VEHICLE_ENGINE_CAN_DEGRADE(vehs[mvf_heli].id,false) peds[mpf_milton].id = CREATE_PED_INSIDE_VEHICLE(vehs[mvf_heli].id,PEDTYPE_MISSION,modelActor,VS_BACK_LEFT) SETUP_Milton() peds[mpf_Anton].id = CREATE_PED_INSIDE_VEHICLE(vehs[mvf_heli].id,PEDTYPE_MISSION,modelDirector,VS_BACK_RIGHT) SETUP_Anton() peds[mpf_Gianni].id = CREATE_PED(pedtype_mission,modelGianni,vGianni,hGianni) SETUP_Gianni() REQUEST_CLIP_SET("MOVE_M@CLIPBOARD") while not HAS_CLIP_SET_LOADED("MOVE_M@CLIPBOARD") wait(0) endwhile init_enemy_data() create_Mafiaenemy(maf_car,11) create_Mafiaenemy(maf_car_talking,11) create_Mafiaenemy(maf_worker_vent,14) create_Mafiaenemy(maf_worker_alone,24) while not Check_Replay_Car(<<971.4699, -1754.8250, 30.0953>>, 87.1515) wait(0) endwhile IF IS_REPLAY_BEING_SET_UP() END_REPLAY_SETUP() Else FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), False) endif bStartConstructionChecks = true SET_WANTED_LEVEL_MULTIPLIER(0.0) TRIGGER_MUSIC_EVENT("SOL1_STEALTH_RT") endproc proc SU_msf_2_fight_rocco() vehs[mvf_heli].id = CREATE_VEHICLE(FROGGER,vheliRoof, hHeliRoof) SET_FORCE_HD_VEHICLE(vehs[mvf_heli].id, true) SET_VEHICLE_COLOUR_COMBINATION(vehs[mvf_heli].id,0) SET_VEHICLE_ENGINE_CAN_DEGRADE(vehs[mvf_heli].id,false) peds[mpf_milton].id = CREATE_PED_INSIDE_VEHICLE(vehs[mvf_heli].id,PEDTYPE_MISSION,modelActor,VS_BACK_LEFT) SETUP_Milton() peds[mpf_Anton].id = CREATE_PED_INSIDE_VEHICLE(vehs[mvf_heli].id,PEDTYPE_MISSION,modelDirector,VS_BACK_RIGHT) SETUP_Anton() IF IS_REPLAY_BEING_SET_UP() END_REPLAY_SETUP() Else FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), False) endif bStartConstructionChecks = true SET_WANTED_LEVEL_MULTIPLIER(0.0) TRIGGER_MUSIC_EVENT("SOL1_FIGHT_RT") endproc proc SU_msf_3_get_to_sol() vehs[mvf_heli].id = CREATE_VEHICLE(FROGGER,vheliRoof, hHeliRoof) SET_FORCE_HD_VEHICLE(vehs[mvf_heli].id, true) SET_VEHICLE_COLOUR_COMBINATION(vehs[mvf_heli].id,0) SET_VEHICLE_ENGINE_CAN_DEGRADE(vehs[mvf_heli].id,false) peds[mpf_milton].id = CREATE_PED_INSIDE_VEHICLE(vehs[mvf_heli].id,PEDTYPE_MISSION,modelActor,VS_BACK_LEFT) SETUP_Milton() peds[mpf_Anton].id = CREATE_PED_INSIDE_VEHICLE(vehs[mvf_heli].id,PEDTYPE_MISSION,modelDirector,VS_BACK_RIGHT) SETUP_Anton() IF IS_REPLAY_BEING_SET_UP() END_REPLAY_SETUP() Else FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), False) endif bStartConstructionChecks = true SET_WANTED_LEVEL_MULTIPLIER(0.3) TRIGGER_MUSIC_EVENT("SOL1_GET_SOL_RT") endproc proc SU_PASSED() IF IS_REPLAY_BEING_SET_UP() END_REPLAY_SETUP() Else FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), False) endif endproc proc mission_stage_SKIP() //a skip has been made if bdoskip = true //begin the skip if the switching is idle if stageswitch = stageswitch_idle if not is_screen_faded_out() if not is_screen_fading_out() do_screen_fade_out(1000) endif else mission_set_stage(int_to_enum(msf_mission_stage_flags, iskiptostage)) endif //needs to be carried out before states own entering stage elif stageswitch = stageswitch_entering render_script_cams(false,false) set_player_control(player_id(), true) reset_everything() Start_Skip_Streaming(sAssetData) // -------------------------- Not a Replay ---------------------------- IF NOT IS_REPLAY_BEING_SET_UP() VECTOR vWarpCoord FLOAT fWarpHeading GET_SKIP_STAGE_COORD_AND_HEADING(int_to_enum(msf_mission_stage_flags, iSkipToStage), vWarpCoord, fWarpHeading) SET_ENTITY_COORDS(PLAYER_PED_ID(), vWarpCoord) SET_ENTITY_HEADING(PLAYER_PED_ID(), fWarpHeading) FREEZE_ENTITY_POSITION(PLAYER_PED_ID(), TRUE) Load_Asset_NewLoadScene_Sphere(sAssetData, vWarpCoord, 25.0) ENDIF // -------------------------------------------------------------------- Load_asset_Stage(int_to_enum(MSF_MISSION_STAGE_FLAGS, mission_stage)) WHILE NOT Update_Skip_Streaming(sAssetData) WAIT(0) ENDWHILE peds[mpf_mike].id = player_ped_id() switch int_to_enum(msf_mission_stage_flags, mission_stage) case msf_0_get_to_warehouse su_msf_0_get_to_warehouse() break case msf_1_Stealth_to_roof su_msf_1_Stealth_to_roof() break case msf_2_fight_rocco su_msf_2_fight_rocco() break case msf_3_get_to_sol su_msf_3_get_to_sol() break case msf_4_passed SU_PASSED() break endswitch SU_GENERAL() bdoskip = false IF NOT IS_REPLAY_BEING_SET_UP() NEW_LOAD_SCENE_STOP() endif endif #if is_debug_build //check is a skip being asked for, dont allow skip during setup stage elif launch_mission_stage_menu(zmenunames, iskiptostage, mission_stage, true) if iskiptostage > enum_to_int(msf_num_of_stages)-1 mission_passed() else iskiptostage = clamp_int(iskiptostage, 0, enum_to_int(msf_num_of_stages)-1) if is_screen_faded_in() do_screen_fade_out(1000) bdoskip = true endif endif #endif endif endproc proc death_checks() //========================== death checks ================================== for i = 0 to enum_to_int(mpf_num_of_peds) -1 if does_entity_exist(peds[i].id) if is_ped_injured(peds[i].id) if peds[i].id = player_ped_id() MISSION_FAILED(mff_player_died) endif if peds[i].id = peds[mpf_milton].id MISSION_FAILED(mff_actor_died) endif if peds[i].id = peds[mpf_Anton].id MISSION_FAILED(mff_director_died) endif if peds[i].id = peds[mpf_sol].id MISSION_FAILED(mff_sol_died) endif if peds[i].id = peds[mpf_rocco].id if DOES_BLIP_EXIST(peds[mpf_rocco].blip) REMOVE_BLIP(peds[mpf_rocco].blip) endif MISSION_FAILED(mff_rocco_died) endif if peds[i].id = peds[mpf_Gianni].id if isentityalive(Anton()) and isentityalive(milton()) if GET_RANDOM_BOOL() ADD_PED_FOR_DIALOGUE(convo_struct,3,Anton(),"Anton") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_SCARE",CONV_PRIORITY_MEDIUM) if not IS_PED_FLEEING(Anton()) TASK_SMART_FLEE_PED(Anton(),mike(),200,-1) endif if not IS_PED_FLEEING(Milton()) TASK_SMART_FLEE_PED(Milton(),mike(),200,-1) endif MISSION_FAILED(Mff_scared_peds) else ADD_PED_FOR_DIALOGUE(convo_struct,2,Milton(),"SOL1Actor") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_SCARE2",CONV_PRIORITY_MEDIUM) if not IS_PED_FLEEING(Anton()) TASK_SMART_FLEE_PED(Anton(),mike(),200,-1) endif if not IS_PED_FLEEING(Milton()) TASK_SMART_FLEE_PED(Milton(),mike(),200,-1) endif MISSION_FAILED(Mff_scared_peds) endif endif endif endif else if peds[i].id = peds[mpf_rocco].id if DOES_BLIP_EXIST(peds[mpf_rocco].blip) REMOVE_BLIP(peds[mpf_rocco].blip) endif endif endif endfor for i = 0 to enum_to_int(NUM_OF_Mafia_PEDS) -1 update_ai_ped_blip(Mafia[i].id,Mafia[i].blipstruct,-1,null,Mafia[i].bForceBlip) if does_entity_exist(Mafia[i].id) if is_ped_injured(Mafia[i].id) if WAS_PED_KILLED_BY_STEALTH(Mafia[i].id) or (Mafia[i].sit = SSIT_AI_NONE and HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(Mafia[i].id,mike())) INFORM_MISSION_STATS_OF_INCREMENT(SOL1_SILENT_TAKEDOWNS) endif if DOES_ENTITY_EXIST(mafia[i].obj) if IS_ENTITY_ATTACHED(mafia[i].obj) DETACH_ENTITY(mafia[i].obj) endif SAFE_RELEASE_OBJECT(mafia[i].obj) endif if DOES_ENTITY_EXIST(mafia[i].objphone) if IS_ENTITY_ATTACHED(mafia[i].objphone) DETACH_ENTITY(mafia[i].objphone) endif SAFE_RELEASE_OBJECT(mafia[i].objphone) endif Mafia[i].bkilled = true Mafia[i].bForceBlip = false SAFE_RELEASE_PED(Mafia[i].id) endif endif endfor for i = 0 to enum_to_int(mvf_num_of_veh) -1 if does_entity_exist(vehs[i].id) if not is_vehicle_driveable(vehs[i].id) if vehs[i].id = vehs[mvf_heli].id if mission_stage = enum_to_int(msf_3_get_to_sol) if mission_substage < 4 MISSION_FAILED(mff_heli_dead) endif else MISSION_FAILED(mff_heli_dead) endif SAFE_RELEASE_VEHICLE(vehs[i].id) endif else if vehs[i].id = vehs[mvf_heli].id if IS_VEHICLE_PERMANENTLY_STUCK(vehs[i].id) if mission_stage = enum_to_int(msf_3_get_to_sol) if mission_substage < 4 MISSION_FAILED(mff_heli_dead) endif else MISSION_FAILED(mff_heli_dead) endif SAFE_RELEASE_VEHICLE(vehs[i].id) endif endif endif endif endfor //========================================================================== endproc FUNC BOOL TRIGGER_WALKWAY_PEDS() IF ISENTITYALIVE(MIKE()) IF IS_ENTITY_IN_ANGLED_AREA(MIKE(),<<933.48407, -1706.96594, 40.41132>>,<<937.31335, -1663.64905, 48>>,35) create_MafiaEnemy(maf_walkway_door,24) create_MafiaEnemy(maf_worker_walkway,24) OPEN_SEQUENCE_TASK(seq) // TASK_GO_STRAIGHT_TO_COORD(null,<<938.29431, -1694.26501, 41.06182>>,PEDMOVE_WALK) TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<943.27026, -1680.55713, 41.06182>>,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(mafia[maf_walkway_door].id,seq) CLEAR_SEQUENCE_TASK(seq) SET_PED_CONFIG_FLAG(mafia[maf_walkway_door].id,PCF_OpenDoorArmIK,true) SET_PED_RESET_FLAG(mafia[maf_walkway_door].id,PRF_SearchForClosestDoor,true) Mafia[maf_walkway_door].vtarget = <<943.27026, -1680.55713, 41.06182>> OPEN_SEQUENCE_TASK(seq) // TASK_GO_STRAIGHT_TO_COORD(null,<<939.29596, -1694.40991, 41.06182>>,PEDMOVE_WALK) TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<945.01746, -1679.36267, 41.06182>>,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(mafia[maf_worker_walkway].id,seq) CLEAR_SEQUENCE_TASK(seq) SET_PED_CONFIG_FLAG(mafia[maf_worker_walkway].id,PCF_OpenDoorArmIK,true) SET_PED_RESET_FLAG(mafia[maf_worker_walkway].id,PRF_SearchForClosestDoor,true) Mafia[maf_worker_walkway].vtarget = <<945.01746, -1679.36267, 41.06182>> bDoWalkwayChat = true RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL TRIGGER_SECOND_DOOR_PED() IF ISENTITYALIVE(MIKE()) IF IS_ENTITY_IN_ANGLED_AREA(MIKE(),<<901.04163, -1721.98486, 39.74014>>,<<902.49176, -1699.63672, 46.05842>>,22.16) create_MafiaEnemy(maf_worker_door,24) OPEN_SEQUENCE_TASK(seq) TASK_PLAY_ANIM(null,AnimDict_ClipBoard,"idle_c",NORMAL_BLEND_IN,WALK_BLEND_OUT,-1,AF_SECONDARY | AF_UPPERBODY | AF_LOOPING) TASK_GO_STRAIGHT_TO_COORD(null,<<906.23120, -1703.19482, 41.97026>>,PEDMOVE_SPRINT) TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<910.14313, -1708.57007, 41.97026>>,PEDMOVE_RUN,DEFAULT_TIME_BEFORE_WARP,DEFAULT_NAVMESH_RADIUS,ENAV_DEFAULT,-163.74) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(mafia[maf_worker_door].id,seq) CLEAR_SEQUENCE_TASK(seq) SET_PED_CONFIG_FLAG(mafia[maf_worker_door].id,PCF_OpenDoorArmIK,true) SET_PED_RESET_FLAG(mafia[maf_worker_door].id,PRF_SearchForClosestDoor,true) Mafia[maf_worker_door].vtarget = <<910.14313, -1708.57007, 41.97026>> RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL TRIGGER_THIRD_DOOR_PED() IF ISENTITYALIVE(MIKE()) IF IS_ENTITY_IN_ANGLED_AREA(MIKE(),<<880.97339, -1682.67957, 46.08658>>,<<905.58136, -1684.29175, 53.31669>>,30) create_MafiaEnemy(maf_worker_top,18) OPEN_SEQUENCE_TASK(seq) TASK_PLAY_ANIM(null,AnimDict_ClipBoard,"idle_c",NORMAL_BLEND_IN,WALK_BLEND_OUT,-1,AF_SECONDARY | AF_UPPERBODY | AF_LOOPING) TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<884.57086, -1688.17114, 46.13421>>,PEDMOVE_WALK,DEFAULT_TIME_BEFORE_WARP,DEFAULT_NAVMESH_RADIUS,ENAV_DEFAULT,127.67) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(mafia[maf_worker_top].id,seq) CLEAR_SEQUENCE_TASK(seq) SET_PED_CONFIG_FLAG(mafia[maf_worker_top].id,PCF_OpenDoorArmIK,true) SET_PED_RESET_FLAG(mafia[maf_worker_top].id,PRF_SearchForClosestDoor,true) Mafia[maf_worker_top].vtarget = <<884.57086, -1688.17114, 46.13421>> RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC FUNC BOOL TRIGGER_ALONE_WORKER_TASKS() IF ISENTITYALIVE(MIKE()) IF IS_ENTITY_IN_ANGLED_AREA(MIKE(),<<912.46344, -1714.39941, 41.46995>>,<<950.94952, -1717.65479, 36.37867>>,30) bAloneWorkerActive = true RETURN TRUE ENDIF ENDIF RETURN FALSE ENDFUNC func string FLINCH_REACTION() switch iflinch case 0 iflinch = 1 return "reaction_forward_big_intro_a" break case 1 iflinch = 0 return "reaction_forward_big_intro_c" break endswitch return "" endfunc func string SEEN_REACTION() switch iseen case 0 iseen = 1 return "reaction_forward_big_intro_b" break case 1 iseen = 0 return "reaction_forward_big_intro_d" break endswitch return "" endfunc func STEALTH_SITUATION get_ped_Sit(PED_INDEX ped) int mafped for mafped = 0 to ENUM_TO_INT(NUM_OF_Mafia_PEDS) - 1 if mafia[mafped].id = ped return mafia[mafped].sit endif endfor return SSIT_AI_NONE endfunc func string get_ped_Voice_string(PED_INDEX ped) int mafped for mafped = 0 to ENUM_TO_INT(NUM_OF_Mafia_PEDS) - 1 if mafia[mafped].id = ped return mafia[mafped].sVoiceName endif endfor return "" endfunc proc set_ped_situations(PED_INDEX ped, STEALTH_SITUATION sit) int mafped for mafped = 0 to ENUM_TO_INT(NUM_OF_Mafia_PEDS) - 1 if mafia[mafped].id = ped mafia[mafped].sit = sit endif endfor endproc PROC MANAGE_STEALTH_STAGE() int mafped PED_INDEX clseped GET_CURRENT_PED_WEAPON(mike(),wcurrent) //╞════════════════════════════════════════════════════╡ TRIGGER PEDS ╞════════════════════════════════════════════════════╡ if mission_stage = enum_to_int(msf_1_Stealth_to_roof) if not isentityalive(mafia[maf_walkway_door].id) and not mafia[maf_walkway_door].bkilled and not isentityalive(mafia[maf_worker_walkway].id) and not mafia[maf_worker_walkway].bkilled trigger_walkway_peds() endif if not isentityalive(mafia[maf_worker_door].id) and not mafia[maf_worker_door].bkilled trigger_second_door_ped() endif if not isentityalive(mafia[maf_worker_top].id) and not mafia[maf_worker_top].bkilled trigger_third_door_ped() endif if not bAloneWorkerActive TRIGGER_ALONE_WORKER_TASKS() endif endif //╞═════════════════════════════════════════════════════════════════════════════════════════════════════════════════════════╡ switch eAI_stage case AI_NORM //╞════════════════════════════════════════════════════╡ Normal tasks ╞════════════════════════════════════════════════════╡ eAI_stage = AI_CHECKS break case AI_CHECKS //╞════════════════════════════════════════════════════╡ Check if seen/heard ╞════════════════════════════════════════════════════╡ if IS_AUDIO_SCENE_ACTIVE("SOL_1_GET_TO_HELI_ALERT") STOP_AUDIO_SCENE("SOL_1_GET_TO_HELI_ALERT") endif for mafped = 0 to enum_to_int(NUM_OF_Mafia_PEDS) -1 if isentityalive(mafia[mafped].id) //============================= combat check ============================= if IS_PED_IN_COMBAT(mafia[mafped].id) or mafia[mafped].sit = SSIT_AI_HEAT active_ped = mafia[mafped].id mafia[mafped].sit = SSIT_AI_HEAT if DOES_Entity_EXIST(mafia[mafped].partner) set_ped_situations(mafia[mafped].partner,mafia[mafped].sit) endif KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() eAI_stage = AI_REACTION // PRINTSTRING("eAI_stage UPDATE due to - combat check is TRUE") PRINTNL() //============================= hurt ped ============================= elif HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(mafia[mafped].id,mike()) or IS_PED_BEING_STEALTH_KILLED(mafia[mafped].id) or IS_PED_BEING_STUNNED(mafia[mafped].id) or mafia[mafped].sit = SSIT_AI_HURT if mafia[mafped].id = mafia[maf_car].id or mafia[mafped].id = mafia[maf_car_talking].id or mafia[mafped].id = mafia[maf_walkway_door].id or mafia[mafped].id = mafia[maf_worker_walkway].id if DOES_ENTITY_EXIST(mafia[mafped].partner) if isentityalive(mafia[mafped].partner) active_ped = mafia[mafped].partner else active_ped = mafia[mafped].id endif endif else active_ped = mafia[mafped].id endif mafia[mafped].sit = SSIT_AI_HURT if DOES_Entity_EXIST(mafia[mafped].partner) set_ped_situations(mafia[mafped].partner,mafia[mafped].sit) endif CLEAR_ENTITY_LAST_DAMAGE_ENTITY(mafia[mafped].id) KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() eAI_stage = AI_REACTION // PRINTSTRING("eAI_stage UPDATE due to - Hurt ped check is TRUE") PRINTNL() //============================= gun checks ============================= elif HAS_PED_RECEIVED_EVENT(mafia[mafped].id, EVENT_SHOT_FIRED_WHIZZED_BY) OR HAS_PED_RECEIVED_EVENT(mafia[mafped].id, EVENT_SHOT_FIRED_BULLET_IMPACT) or mafia[mafped].sit = SSIT_AI_GUN active_ped = mafia[mafped].id mafia[mafped].sit = SSIT_AI_GUN if DOES_Entity_EXIST(mafia[mafped].partner) set_ped_situations(mafia[mafped].partner,mafia[mafped].sit) endif KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() eAI_stage = AI_REACTION // PRINTSTRING("eAI_stage UPDATE due to - Gun check 1 is TRUE") PRINTNL() elif HAS_PED_RECEIVED_EVENT(mafia[mafped].id, EVENT_SHOT_FIRED) if not IS_PED_CURRENT_WEAPON_SILENCED(mike()) GET_CLOSEST_PED(GET_ENTITY_COORDS(mike()),500,false,true,clseped,false,true) if clseped = mafia[mafped].id active_ped = mafia[mafped].id endif mafia[mafped].sit = SSIT_AI_GUN if DOES_Entity_EXIST(mafia[mafped].partner) set_ped_situations(mafia[mafped].partner,mafia[mafped].sit) endif KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() eAI_stage = AI_REACTION // PRINTSTRING("eAI_stage UPDATE due to - Gun check 2 is TRUE") PRINTNL() endif //============================= hear explosion ============================= elif HAS_PED_RECEIVED_EVENT(mafia[mafped].id, EVENT_EXPLOSION_HEARD) or IS_EXPLOSION_IN_ANGLED_AREA(EXP_TAG_DONTCARE,<<919.02515, -1736.73352, 28>>,<<925.47205, -1649.41968, 65>>,120) or mafia[mafped].sit = SSIT_AI_HEAT if GET_CLOSEST_PED(GET_ENTITY_COORDS(mike()),80,false,true,mafia[mafped].id,false,true) active_ped = mafia[mafped].id endif mafia[mafped].sit = SSIT_AI_HEAT if DOES_Entity_EXIST(mafia[mafped].partner) set_ped_situations(mafia[mafped].partner,mafia[mafped].sit) endif KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() eAI_stage = AI_REACTION // PRINTSTRING("eAI_stage UPDATE due to - hear explosion check is TRUE") PRINTNL() //============================= seen mike ============================= elif CAN_PED_SEE_HATED_PED(mafia[mafped].id,player_ped_id()) or mafia[mafped].sit = SSIT_AI_SPOTTED and not IS_ENTITY_IN_ANGLED_AREA(mafia[mafped].id,<<907.27173, -1692.09302, 41>>,<<906.43494, -1701.65735, 45>>,1.6) vMafiaPedCoords = GET_ENTITY_COORDS(mafia[mafped].id) //BUG FIX 1399344 vPlayerCoords = GET_ENTITY_COORDS(player_ped_id()) //BUG FIX 1399344 IF vPlayerCoords.z > (vMafiaPedCoords.z - 5) //BUG FIX 1399344 check to make sure the players is not too low down. If lower than 5m below the ped that can see them, don't do anything. active_ped = mafia[mafped].id mafia[mafped].sit = SSIT_AI_SPOTTED if DOES_Entity_EXIST(mafia[mafped].partner) set_ped_situations(mafia[mafped].partner,mafia[mafped].sit) endif KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() eAI_stage = AI_REACTION // PRINTSTRING("eAI_stage UPDATE due to - seen Mike check is TRUE") PRINTNL() ENDIF //============================= hear something ============================= elif GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()),GET_ENTITY_COORDS(mafia[mafped].id)) < mafia[mafped].fHearingRange and GET_PLAYER_CURRENT_STEALTH_NOISE(player_id()) > 9.0 //BUG FIX 1399344 and CAN_PED_HEAR_PLAYER(PLAYER_ID(), mafia[mafped].id) //BUG FIX 1399344 and not IS_ENTITY_IN_ANGLED_AREA(mafia[mafped].id,<<901.35358, -1687.50378, 49.18065>>,<<905.75061, -1687.85010, 46.37356>>,3.11) and not IS_ENTITY_IN_ANGLED_AREA(mafia[mafped].id,<<918.04565, -1691.64111, 42.15205>>,<<913.72107, -1691.21619, 44.52736>>,3) and not IS_ENTITY_IN_ANGLED_AREA(mafia[mafped].id,<<907.27173, -1692.09302, 41>>,<<906.43494, -1701.65735, 45>>,1.6) and NOT GET_PED_STEALTH_MOVEMENT(PLAYER_PED_ID()) //BUG FIX 1399344 if not IS_SCRIPT_TASK_RUNNING_OR_STARTING(mafia[mafped].id,SCRIPT_TASK_TURN_PED_TO_FACE_COORD) if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() TASK_TURN_PED_TO_FACE_COORD(mafia[mafped].id,GET_ENTITY_COORDS(mike()),4000) TASK_LOOK_AT_COORD(mafia[mafped].id,GET_ENTITY_COORDS(mike()),4000) Mafia[mafped].bHeardNoise = true ADD_PED_FOR_DIALOGUE(convo_struct,mafia[mafped].iVoiceID,mafia[mafped].id,mafia[mafped].sVoiceName) if ARE_STRINGS_EQUAL(mafia[mafped].sVoiceName,"CONSTRUCTION1") if mafia[mafped].id = mafia[maf_car_talking].id CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_HEAR1",CONV_PRIORITY_MEDIUM) else CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_HEAR1b",CONV_PRIORITY_MEDIUM) endif elif ARE_STRINGS_EQUAL(mafia[mafped].sVoiceName,"CONSTRUCTION2") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_HEAR2",CONV_PRIORITY_MEDIUM) elif ARE_STRINGS_EQUAL(mafia[mafped].sVoiceName,"CONSTRUCTION3") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_HEAR3",CONV_PRIORITY_MEDIUM) endif i_dialogueTimer = get_Game_timer() else KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() endif endif PRINTSTRING("eAI_stage UPDATE due to - hear something check 1 is TRUE") PRINTNL() elif IS_FLASH_LIGHT_ON(PLAYER_PED_ID()) and( GET_CLOCK_HOURS() >= 19 or GET_CLOCK_HOURS() < 6) and GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(),mafia[mafped].id) < 25 and( IS_PLAYER_TARGETTING_ENTITY(PLAYER_ID(),mafia[mafped].id) and not IS_ENTITY_IN_ANGLED_AREA(mafia[mafped].id,<<907.27173, -1692.09302, 41>>,<<906.43494, -1701.65735, 45>>,1.6) or IS_PLAYER_FREE_AIMING_AT_ENTITY(PLAYER_ID(),mafia[mafped].id)) if not IS_SCRIPT_TASK_RUNNING_OR_STARTING(mafia[mafped].id,SCRIPT_TASK_TURN_PED_TO_FACE_COORD) if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() TASK_TURN_PED_TO_FACE_COORD(mafia[mafped].id,GET_ENTITY_COORDS(mike()),4000) TASK_LOOK_AT_COORD(mafia[mafped].id,GET_ENTITY_COORDS(mike()),4000) Mafia[mafped].bHeardNoise = true ADD_PED_FOR_DIALOGUE(convo_struct,mafia[mafped].iVoiceID,mafia[mafped].id,mafia[mafped].sVoiceName) if ARE_STRINGS_EQUAL(mafia[mafped].sVoiceName,"CONSTRUCTION1") if mafia[mafped].id = mafia[maf_car_talking].id CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_HEAR1",CONV_PRIORITY_MEDIUM) else CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_HEAR1b",CONV_PRIORITY_MEDIUM) endif elif ARE_STRINGS_EQUAL(mafia[mafped].sVoiceName,"CONSTRUCTION2") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_HEAR2",CONV_PRIORITY_MEDIUM) elif ARE_STRINGS_EQUAL(mafia[mafped].sVoiceName,"CONSTRUCTION3") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_HEAR3",CONV_PRIORITY_MEDIUM) endif i_dialogueTimer = get_Game_timer() else KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() endif endif // PRINTSTRING("eAI_stage UPDATE due to - hear something check 2 is TRUE") PRINTNL() elif GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()),GET_ENTITY_COORDS(mafia[mafped].id)) < mafia[mafped].fHearingRange and IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) and not IS_ENTITY_IN_ANGLED_AREA(mafia[mafped].id,<<907.27173, -1692.09302, 41>>,<<906.43494, -1701.65735, 45>>,1.6) if not IS_SCRIPT_TASK_RUNNING_OR_STARTING(mafia[mafped].id,SCRIPT_TASK_TURN_PED_TO_FACE_COORD) if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() TASK_TURN_PED_TO_FACE_COORD(mafia[mafped].id,GET_ENTITY_COORDS(mike()),4000) TASK_LOOK_AT_COORD(mafia[mafped].id,GET_ENTITY_COORDS(mike()),4000) Mafia[mafped].bHeardNoise = true ADD_PED_FOR_DIALOGUE(convo_struct,mafia[mafped].iVoiceID,mafia[mafped].id,mafia[mafped].sVoiceName) if ARE_STRINGS_EQUAL(mafia[mafped].sVoiceName,"CONSTRUCTION1") if mafia[mafped].id = mafia[maf_car_talking].id CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_HEAR1",CONV_PRIORITY_MEDIUM) else CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_HEAR1b",CONV_PRIORITY_MEDIUM) endif elif ARE_STRINGS_EQUAL(mafia[mafped].sVoiceName,"CONSTRUCTION2") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_HEAR2",CONV_PRIORITY_MEDIUM) elif ARE_STRINGS_EQUAL(mafia[mafped].sVoiceName,"CONSTRUCTION3") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_HEAR3",CONV_PRIORITY_MEDIUM) endif i_dialogueTimer = get_Game_timer() else KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() endif endif // PRINTSTRING("eAI_stage UPDATE due to - hear something check 3 is TRUE") PRINTNL() //============================= standing IDLE ============================= else // PRINTSTRING("eAI_stage UPDATE - standing IDLE") PRINTNL() if not IS_SCRIPT_TASK_RUNNING_OR_STARTING(mafia[mafped].id,SCRIPT_TASK_TURN_PED_TO_FACE_COORD) and not IS_SCRIPT_TASK_RUNNING_OR_STARTING(mafia[mafped].id,SCRIPT_TASK_PERFORM_SEQUENCE) and mafia[mafped].sit = SSIT_AI_NONE if mafia[mafped].id = mafia[maf_car].id or mafia[mafped].id = mafia[maf_car_talking].id or mafia[mafped].id = mafia[maf_walkway_door].id or mafia[mafped].id = mafia[maf_worker_walkway].id if isentityalive(mafia[mafped].partner) Task_perform_Normal_seq(int_to_enum(eEnemies_Mafia, mafped)) if Mafia[mafped].bHeardNoise ADD_PED_FOR_DIALOGUE(convo_struct,mafia[mafped].iVoiceID,mafia[mafped].id,mafia[mafped].sVoiceName) if ARE_STRINGS_EQUAL(mafia[mafped].sVoiceName,"CONSTRUCTION1") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_NOT1",CONV_PRIORITY_MEDIUM) elif ARE_STRINGS_EQUAL(mafia[mafped].sVoiceName,"CONSTRUCTION2") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_HEAR2B",CONV_PRIORITY_MEDIUM) elif ARE_STRINGS_EQUAL(mafia[mafped].sVoiceName,"CONSTRUCTION3") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_NOT3",CONV_PRIORITY_MEDIUM) endif i_dialogueTimer = get_Game_timer() Mafia[mafped].bHeardNoise = false endif endif else Task_perform_Normal_seq(int_to_enum(eEnemies_Mafia, mafped)) if Mafia[mafped].bHeardNoise ADD_PED_FOR_DIALOGUE(convo_struct,mafia[mafped].iVoiceID,mafia[mafped].id,mafia[mafped].sVoiceName) if ARE_STRINGS_EQUAL(mafia[mafped].sVoiceName,"CONSTRUCTION1") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_NOT1",CONV_PRIORITY_MEDIUM) elif ARE_STRINGS_EQUAL(mafia[mafped].sVoiceName,"CONSTRUCTION2") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_HEAR2B",CONV_PRIORITY_MEDIUM) elif ARE_STRINGS_EQUAL(mafia[mafped].sVoiceName,"CONSTRUCTION3") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_NOT3",CONV_PRIORITY_MEDIUM) endif i_dialogueTimer = get_Game_timer() Mafia[mafped].bHeardNoise = false endif endif endif endif elif not isentityalive(mafia[mafped].id) and mafia[mafped].bkilled //============================= partner dead check ============================= if mafia[mafped].id = mafia[maf_car].id or mafia[mafped].id = mafia[maf_car_talking].id or mafia[mafped].id = mafia[maf_walkway_door].id or mafia[mafped].id = mafia[maf_worker_walkway].id if DOES_ENTITY_EXIST(mafia[mafped].partner) if not IS_PED_INJURED(mafia[mafped].partner) active_ped = mafia[mafped].partner mafia[mafped].sit = SSIT_AI_HURT set_ped_situations(mafia[mafped].partner,mafia[mafped].sit) KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() eAI_stage = AI_REACTION // PRINTSTRING("eAI_stage UPDATE due to - partner dead check is TRUE") PRINTNL() endif endif endif endif endfor break //╞════════════════════════════════════════════════════╡ Start reactions ╞════════════════════════════════════════════════════╡ case AI_REACTION if not bMusic_1stEnemy TRIGGER_MUSIC_EVENT("SOL1_1ST_ENEMY") bMusic_1stEnemy = true endif if not IS_AUDIO_SCENE_ACTIVE("SOL_1_GET_TO_HELI_ALERT") START_AUDIO_SCENE("SOL_1_GET_TO_HELI_ALERT") endif REPLAY_RECORD_BACK_FOR_TIME(3.0) for mafped = 0 to enum_to_int(NUM_OF_Mafia_PEDS) -1 if isentityalive(mafia[mafped].id) //drop clipboard if DOES_ENTITY_EXIST(mafia[mafped].obj) and IS_ENTITY_ATTACHED(mafia[mafped].obj) DETACH_ENTITY(mafia[mafped].obj) RESET_PED_WEAPON_MOVEMENT_CLIPSET(mafia[mafped].id) SAFE_RELEASE_OBJECT(mafia[mafped].obj) endif if IS_AMBIENT_SPEECH_PLAYING(mafia[mafped].id) STOP_CURRENT_PLAYING_AMBIENT_SPEECH(mafia[mafped].id) endif if isentityalive(mafia[mafped].partner) if IS_AMBIENT_SPEECH_PLAYING(mafia[mafped].partner) STOP_CURRENT_PLAYING_AMBIENT_SPEECH(mafia[mafped].partner) endif endif //=================================== Dead / hurt / gun react =========================================== if mafia[mafped].sit = SSIT_AI_HURT or mafia[mafped].sit = SSIT_AI_GUN if not IS_PED_FLEEING(mafia[mafped].id) CLEAR_PED_TASKS(mafia[mafped].id) CLEAR_SEQUENCE_TASK(seq) OPEN_SEQUENCE_TASK(seq) if mafia[mafped].id = Active_ped TASK_LOOK_AT_ENTITY(null,mike(),-1,SLF_WHILE_NOT_IN_FOV | SLF_WIDEST_PITCH_LIMIT | SLF_WIDEST_YAW_LIMIT) TASK_PLAY_ANIM(null,AnimDict_flinch,FLINCH_REACTION(),NORMAL_BLEND_IN,NORMAL_BLEND_OUT,-1,AF_SECONDARY) TASK_PED_SLIDE_TO_COORD_HDG_RATE(null,GET_ENTITY_COORDS(mafia[mafped].id), GET_HEADING_FROM_ENTITIES_LA(mafia[mafped].id,mike()),0.5,250) ADD_PED_FOR_DIALOGUE(convo_struct,mafia[mafped].iVoiceID,active_ped,mafia[mafped].sVoiceName) if ARE_STRINGS_EQUAL(mafia[mafped].sVoiceName,"CONSTRUCTION1") if GET_RANDOM_BOOL() CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_PAN1",CONV_PRIORITY_MEDIUM) else CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_SCAR1",CONV_PRIORITY_MEDIUM) endif elif ARE_STRINGS_EQUAL(mafia[mafped].sVoiceName,"CONSTRUCTION2") if GET_RANDOM_BOOL() CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_PAN2",CONV_PRIORITY_MEDIUM) else CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_SCAR2",CONV_PRIORITY_MEDIUM) endif elif ARE_STRINGS_EQUAL(mafia[mafped].sVoiceName,"CONSTRUCTION3") if GET_RANDOM_BOOL() CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_PAN3",CONV_PRIORITY_MEDIUM) else CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_SCAR3",CONV_PRIORITY_MEDIUM) endif endif else TASK_LOOK_AT_ENTITY(null,mike(),-1,SLF_WHILE_NOT_IN_FOV | SLF_WIDEST_PITCH_LIMIT | SLF_WIDEST_YAW_LIMIT) TASK_PED_SLIDE_TO_COORD_HDG_RATE(null,GET_ENTITY_COORDS(mafia[mafped].id), GET_HEADING_FROM_ENTITIES_LA(mafia[mafped].id,mike()),0.5,240) TASK_SMART_FLEE_PED(null,mike(),300,-1) endif CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(mafia[mafped].id,seq) CLEAR_SEQUENCE_TASK(seq) endif eAI_stage = AI_PHONE //=================================== Explosion / combat =========================================== elif mafia[mafped].sit = SSIT_AI_HEAT Println("AI_REACTION: maf ",mafped +1," : SSIT_AI_HEAT") if not IS_PED_FLEEING(mafia[mafped].id) CLEAR_PED_TASKS(mafia[mafped].id) OPEN_SEQUENCE_TASK(seq) if mafia[mafped].id = Active_ped TASK_LOOK_AT_ENTITY(null,mike(),-1,SLF_WHILE_NOT_IN_FOV | SLF_WIDEST_PITCH_LIMIT | SLF_WIDEST_YAW_LIMIT) TASK_PLAY_ANIM(null,AnimDict_flinch,FLINCH_REACTION(),NORMAL_BLEND_IN,NORMAL_BLEND_OUT,-1,AF_SECONDARY) // TASK_TURN_PED_TO_FACE_ENTITY(null,mike(),500) TASK_PED_SLIDE_TO_COORD_HDG_RATE(null,GET_ENTITY_COORDS(mafia[mafped].id), GET_HEADING_FROM_ENTITIES_LA(mafia[mafped].id,mike()),0.5,250) ADD_PED_FOR_DIALOGUE(convo_struct,mafia[mafped].iVoiceID,active_ped,mafia[mafped].sVoiceName) if ARE_STRINGS_EQUAL(mafia[mafped].sVoiceName,"CONSTRUCTION1") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_PAN1",CONV_PRIORITY_MEDIUM) elif ARE_STRINGS_EQUAL(mafia[mafped].sVoiceName,"CONSTRUCTION2") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_PAN2",CONV_PRIORITY_MEDIUM) elif ARE_STRINGS_EQUAL(mafia[mafped].sVoiceName,"CONSTRUCTION3") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_PAN3",CONV_PRIORITY_MEDIUM) endif else TASK_LOOK_AT_ENTITY(null,mike(),-1,SLF_WHILE_NOT_IN_FOV | SLF_WIDEST_PITCH_LIMIT | SLF_WIDEST_YAW_LIMIT) TASK_PED_SLIDE_TO_COORD_HDG_RATE(null,GET_ENTITY_COORDS(mafia[mafped].id), GET_HEADING_FROM_ENTITIES_LA(mafia[mafped].id,mike()),0.5,235) TASK_SMART_FLEE_PED(null,mike(),300,-1) endif CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(mafia[mafped].id,seq) CLEAR_SEQUENCE_TASK(seq) endif eAI_stage = AI_PHONE //=================================== Spotted =========================================== elif mafia[mafped].sit = SSIT_AI_SPOTTED // ============= floor ============= if mafia[mafped].id = mafia[maf_car].id or mafia[mafped].id = mafia[maf_car_talking].id if IS_ENTITY_IN_ANGLED_AREA(mike(),<<960.49347, -1737.89136, 29>>,<<966.67963, -1653.53516, 46>>,45) switch ifloorspot case 0 if isentityalive(mafia[maf_car].id) and isentityalive(mafia[maf_car_talking].id) Println("AI_REACTION: maf ",mafped +1," : SSIT_AI_SPOTTED") CLEAR_PED_TASKS(mafia[maf_car].id) OPEN_SEQUENCE_TASK(seq) TASK_LOOK_AT_ENTITY(null,mike(),-1,SLF_WHILE_NOT_IN_FOV | SLF_WIDEST_PITCH_LIMIT | SLF_WIDEST_YAW_LIMIT) TASK_TURN_PED_TO_FACE_ENTITY(null,mike(),-1) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(mafia[maf_car].id,seq) CLEAR_SEQUENCE_TASK(seq) CLEAR_PED_TASKS(mafia[maf_car_talking].id) OPEN_SEQUENCE_TASK(seq) TASK_LOOK_AT_ENTITY(null,mike(),-1,SLF_WHILE_NOT_IN_FOV | SLF_WIDEST_PITCH_LIMIT | SLF_WIDEST_YAW_LIMIT) TASK_TURN_PED_TO_FACE_ENTITY(null,mike(),-1) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(mafia[maf_car_talking].id,seq) CLEAR_SEQUENCE_TASK(seq) ADD_PED_FOR_DIALOGUE(convo_struct,mafia[maf_car_talking].iVoiceID,mafia[maf_car_talking].id,mafia[maf_car_talking].sVoiceName) CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_SEE1",CONV_PRIORITY_MEDIUM) ifloortimer = get_Game_timer() ifloorspot++ else mafia[mafped].sit = SSIT_AI_HURT endif break case 1 if isentityalive(mafia[maf_car].id) and isentityalive(mafia[maf_car_talking].id) if get_game_timer() - ifloortimer > 8000 and not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() CLEAR_PED_TASKS(mafia[maf_car].id) OPEN_SEQUENCE_TASK(seq) TASK_LOOK_AT_ENTITY(null,mike(),-1,SLF_WHILE_NOT_IN_FOV | SLF_WIDEST_PITCH_LIMIT | SLF_WIDEST_YAW_LIMIT) TASK_TURN_PED_TO_FACE_ENTITY(null,mike(),-1) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(mafia[maf_car].id,seq) CLEAR_SEQUENCE_TASK(seq) CLEAR_PED_TASKS(mafia[maf_car_talking].id) OPEN_SEQUENCE_TASK(seq) TASK_LOOK_AT_ENTITY(null,mike(),-1,SLF_WHILE_NOT_IN_FOV | SLF_WIDEST_PITCH_LIMIT | SLF_WIDEST_YAW_LIMIT) TASK_TURN_PED_TO_FACE_ENTITY(null,mike(),-1) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(mafia[maf_car_talking].id,seq) CLEAR_SEQUENCE_TASK(seq) ADD_PED_FOR_DIALOGUE(convo_struct,mafia[maf_car_talking].iVoiceID,mafia[maf_car_talking].id,mafia[maf_car_talking].sVoiceName) CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_SEE2",CONV_PRIORITY_MEDIUM) ifloorspot++ ifloortimer = get_Game_timer() endif else mafia[mafped].sit = SSIT_AI_HURT endif break case 2 if isentityalive(mafia[maf_car].id) and isentityalive(mafia[maf_car_talking].id) if get_game_timer() - ifloortimer > 8000 and not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() CLEAR_PED_TASKS(mafia[maf_car].id) OPEN_SEQUENCE_TASK(seq) TASK_LOOK_AT_ENTITY(null,mike(),-1,SLF_WHILE_NOT_IN_FOV | SLF_WIDEST_PITCH_LIMIT | SLF_WIDEST_YAW_LIMIT) TASK_TURN_PED_TO_FACE_ENTITY(null,mike(),-1) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(mafia[maf_car].id,seq) CLEAR_SEQUENCE_TASK(seq) CLEAR_PED_TASKS(mafia[maf_car_talking].id) OPEN_SEQUENCE_TASK(seq) TASK_LOOK_AT_ENTITY(null,mike(),-1,SLF_WHILE_NOT_IN_FOV | SLF_WIDEST_PITCH_LIMIT | SLF_WIDEST_YAW_LIMIT) TASK_TURN_PED_TO_FACE_ENTITY(null,mike(),0) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(mafia[maf_car_talking].id,seq) CLEAR_SEQUENCE_TASK(seq) ADD_PED_FOR_DIALOGUE(convo_struct,mafia[maf_car_talking].iVoiceID,mafia[maf_car_talking].id,mafia[maf_car_talking].sVoiceName) CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_HEY",CONV_PRIORITY_MEDIUM) eAI_stage = AI_PHONE endif else mafia[mafped].sit = SSIT_AI_HURT endif break endswitch else if isentityalive(mafia[maf_car].id) CLEAR_PED_TASKS(mafia[maf_car].id) endif if isentityalive(mafia[maf_car_talking].id) CLEAR_PED_TASKS(mafia[maf_car_talking].id) endif Active_ped = null eAI_stage = AI_CHECKS mafia[mafped].sit = SSIT_AI_NONE endif // gun checks if isentityalive(mafia[mafped].id) if not IS_PED_IN_COMBAT(mafia[mafped].id) if HAS_PED_RECEIVED_EVENT(mafia[mafped].id, EVENT_SHOT_FIRED) or HAS_PED_RECEIVED_EVENT(mafia[mafped].id, EVENT_SHOT_FIRED_BULLET_IMPACT) or HAS_PED_RECEIVED_EVENT(mafia[mafped].id, EVENT_SHOT_FIRED_WHIZZED_BY) or HAS_PED_RECEIVED_EVENT(mafia[mafped].id, EVENT_EXPLOSION_HEARD) or HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(mafia[mafped].id,PLAYER_PED_ID()) if not IS_PED_FLEEING(mafia[mafped].id) CLEAR_PED_TASKS(mafia[mafped].id) CLEAR_SEQUENCE_TASK(seq) OPEN_SEQUENCE_TASK(seq) TASK_PLAY_ANIM(null,AnimDict_flinch,FLINCH_REACTION()) TASK_SMART_FLEE_PED(null,mike(),300,-1) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(mafia[mafped].id,seq) CLEAR_SEQUENCE_TASK(seq) endif mafia[mafped].sit = SSIT_AI_GUN if isentityalive(mafia[mafped].partner) if not IS_PED_FLEEING(mafia[mafped].partner) TASK_SMART_FLEE_PED(mafia[mafped].partner,mike(),300,-1) endif set_ped_situations(mafia[mafped].partner,mafia[mafped].sit) endif eAI_stage = AI_PHONE elif HAS_ENTITY_CLEAR_LOS_TO_ENTITY_IN_FRONT(mafia[mafped].id,player_ped_id()) and (IS_PLAYER_FREE_AIMING_AT_ENTITY(player_id(),mafia[mafped].id)or IS_PLAYER_TARGETTING_ENTITY(player_id(),mafia[mafped].id)) if GET_WEAPONTYPE_GROUP(wcurrent) != WEAPONGROUP_MELEE and wcurrent != WEAPONTYPE_UNARMED if not IS_PED_FLEEING(mafia[mafped].id) CLEAR_PED_TASKS(mafia[mafped].id) CLEAR_SEQUENCE_TASK(seq) OPEN_SEQUENCE_TASK(seq) TASK_PLAY_ANIM(null,AnimDict_flinch,FLINCH_REACTION()) TASK_SMART_FLEE_PED(null,mike(),300,-1) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(mafia[mafped].id,seq) CLEAR_SEQUENCE_TASK(seq) endif mafia[mafped].sit = SSIT_AI_GUN if isentityalive(mafia[mafped].partner) if not IS_PED_FLEEING(mafia[mafped].partner) TASK_SMART_FLEE_PED(mafia[mafped].partner,mike(),300,-1) endif set_ped_situations(mafia[mafped].partner,mafia[mafped].sit) endif eAI_stage = AI_PHONE endif endif endif endif // ============= roof ============= else Println("AI_REACTION: maf ",mafped +1," : SSIT_AI_SPOTTED") CLEAR_PED_TASKS(mafia[mafped].id) OPEN_SEQUENCE_TASK(seq) if mafia[mafped].id = Active_ped TASK_LOOK_AT_ENTITY(null,mike(),-1,SLF_WHILE_NOT_IN_FOV | SLF_WIDEST_PITCH_LIMIT | SLF_WIDEST_YAW_LIMIT) TASK_TURN_PED_TO_FACE_ENTITY(null,mike(),0) ADD_PED_FOR_DIALOGUE(convo_struct,mafia[mafped].iVoiceID,active_ped,mafia[mafped].sVoiceName) if ARE_STRINGS_EQUAL(mafia[mafped].sVoiceName,"CONSTRUCTION1") iRand = GET_RANDOM_INT_IN_RANGE(0,3) if irand = 0 CREATE_MULTIPART_CONVERSATION_WITH_2_LINES(convo_struct,"SOL1AUD","SOL1_SEE1","SOL1_SEE1_1","SOL1_CALL1","SOL1_CALL1_1",CONV_PRIORITY_MEDIUM) elif irand = 1 CREATE_MULTIPART_CONVERSATION_WITH_2_LINES(convo_struct,"SOL1AUD","SOL1_SEE1","SOL1_SEE1_2","SOL1_CALL1","SOL1_CALL1_2",CONV_PRIORITY_MEDIUM) else CREATE_MULTIPART_CONVERSATION_WITH_2_LINES(convo_struct,"SOL1AUD","SOL1_SEE1","SOL1_SEE1_3","SOL1_CALL1","SOL1_CALL1_3",CONV_PRIORITY_MEDIUM) endif elif ARE_STRINGS_EQUAL(mafia[mafped].sVoiceName,"CONSTRUCTION2") iRand = GET_RANDOM_INT_IN_RANGE(0,3) if irand = 0 CREATE_MULTIPART_CONVERSATION_WITH_2_LINES(convo_struct,"SOL1AUD","SOL1_SEE3","SOL1_SEE3_1","SOL1_CALL2","SOL1_CALL2_3",CONV_PRIORITY_MEDIUM) elif irand = 1 CREATE_MULTIPART_CONVERSATION_WITH_2_LINES(convo_struct,"SOL1AUD","SOL1_SEE3","SOL1_SEE3_2","SOL1_CALL2","SOL1_CALL2_2",CONV_PRIORITY_MEDIUM) else CREATE_MULTIPART_CONVERSATION_WITH_2_LINES(convo_struct,"SOL1AUD","SOL1_SEE3","SOL1_SEE3_3","SOL1_CALL2","SOL1_CALL2_1",CONV_PRIORITY_MEDIUM) endif elif ARE_STRINGS_EQUAL(mafia[mafped].sVoiceName,"CONSTRUCTION3") iRand = GET_RANDOM_INT_IN_RANGE(0,3) if irand = 0 CREATE_MULTIPART_CONVERSATION_WITH_2_LINES(convo_struct,"SOL1AUD","SOl1_SEE5","SOl1_SEE5_1","SOl1_CHECK2","SOl1_CHECK2_1",CONV_PRIORITY_MEDIUM) elif irand = 1 CREATE_MULTIPART_CONVERSATION_WITH_2_LINES(convo_struct,"SOL1AUD","SOl1_SEE5","SOl1_SEE5_2","SOl1_CHECK2","SOl1_CHECK2_2",CONV_PRIORITY_MEDIUM) else CREATE_MULTIPART_CONVERSATION_WITH_2_LINES(convo_struct,"SOL1AUD","SOl1_SEE5","SOl1_SEE5_3","SOl1_CHECK2","SOl1_CHECK2_3",CONV_PRIORITY_MEDIUM) endif endif else TASK_LOOK_AT_ENTITY(null,mike(),-1,SLF_WHILE_NOT_IN_FOV | SLF_WIDEST_PITCH_LIMIT | SLF_WIDEST_YAW_LIMIT) TASK_TURN_PED_TO_FACE_ENTITY(null,mike(),0) TASK_SMART_FLEE_PED(null,mike(),300,-1) endif CLOSE_SEQUENCE_TASK(seq) if not IS_PED_INJURED(mafia[mafped].id) TASK_PERFORM_SEQUENCE(mafia[mafped].id,seq) endif CLEAR_SEQUENCE_TASK(seq) eAI_stage = AI_PHONE endif endif elif not isentityalive(mafia[mafped].id) and mafia[mafped].bkilled if not isentityalive(Active_ped) KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() Active_ped = null eAI_stage = AI_CHECKS endif endif endfor break case AI_PHONE if isentityalive(active_ped) if not bFirstAlerted print_help("SOL1_ALARM") bFirstAlerted = true endif if not IS_SCRIPTED_CONVERSATION_ONGOING() if not IS_ENTITY_PLAYING_ANIM(active_ped,AnimDict_PHONE,animPhone) if not IS_PED_GETTING_UP(Active_ped) and not IS_PED_RAGDOLL(Active_ped) and not IS_ENTITY_PLAYING_ANIM(Active_ped,AnimDict_flinch,"reaction_forward_big_intro_c") and not IS_ENTITY_PLAYING_ANIM(Active_ped,AnimDict_flinch,"reaction_forward_big_intro_a") println("PHONE STAGE 1") CLEAR_SEQUENCE_TASK(seq) OPEN_SEQUENCE_TASK(seq) TASK_PLAY_ANIM(null,AnimDict_PHONE,animPhone,SLOW_BLEND_IN,Normal_BLEND_OUT,-1,AF_LOOPING | AF_SECONDARY | AF_UPPERBODY) if get_ped_Sit(active_ped) = SSIT_AI_GUN or get_ped_Sit(active_ped) = SSIT_AI_HEAT or get_ped_Sit(active_ped) = SSIT_AI_HURT TASK_SMART_FLEE_PED(null,mike(),300,-1) endif CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(active_ped,seq) CLEAR_SEQUENCE_TASK(seq) ADD_PED_FOR_DIALOGUE(convo_struct,1,active_ped,"MAFIAGOON") iRand = GET_RANDOM_INT_IN_RANGE(0,4) iPhoneCheckBackupTimer = get_Game_timer() endif else for mafped = 0 to enum_to_int(NUM_OF_Mafia_PEDS) -1 if mafia[mafped].id = active_ped println("PHONE STAGE 2 ") if mafia[mafped].sit = SSIT_AI_SPOTTED println("PHONE STAGE 3 ") if get_game_timer() - iPhoneCheckBackupTimer > 1125 Println("AI_phone: SSIT_AI_SPOTTED") eAI_stage = AI_ALARM iPhoningChat = 0 endif else println("PHONE STAGE 4 ") if get_game_timer() - iPhoneCheckBackupTimer > 1125 Println("AI_phone: SSIT_AI_guns") eAI_stage = AI_ALARM iPhoningChat = 1 endif endif endif endfor endif endif else KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() Active_ped = null eAI_stage = AI_CHECKS endif for mafped = 0 to enum_to_int(NUM_OF_Mafia_PEDS) -1 if isentityalive(mafia[mafped].id) if not IS_PED_IN_COMBAT(mafia[mafped].id) if HAS_PED_RECEIVED_EVENT(mafia[mafped].id, EVENT_SHOT_FIRED) or HAS_PED_RECEIVED_EVENT(mafia[mafped].id, EVENT_SHOT_FIRED_BULLET_IMPACT) or HAS_PED_RECEIVED_EVENT(mafia[mafped].id, EVENT_SHOT_FIRED_WHIZZED_BY) or HAS_PED_RECEIVED_EVENT(mafia[mafped].id, EVENT_EXPLOSION_HEARD) or HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(mafia[mafped].id,PLAYER_PED_ID()) if not IS_PED_FLEEING(mafia[mafped].id) and not IS_ENTITY_PLAYING_ANIM(mafia[mafped].id,AnimDict_flinch,"reaction_forward_big_intro_c") and not IS_ENTITY_PLAYING_ANIM(mafia[mafped].id,AnimDict_flinch,"reaction_forward_big_intro_a") and mafia[mafped].sit = SSIT_AI_SPOTTED if mafia[mafped].id != Active_ped TASK_SMART_FLEE_PED(mafia[mafped].id,mike(),300,-1) else CLEAR_PED_TASKS(Active_ped) TASK_PLAY_ANIM(active_ped,AnimDict_flinch,FLINCH_REACTION()) endif endif mafia[mafped].sit = SSIT_AI_GUN if isentityalive(mafia[mafped].partner) if not IS_PED_FLEEING(mafia[mafped].partner) TASK_SMART_FLEE_PED(mafia[mafped].partner,mike(),300,-1) endif set_ped_situations(mafia[mafped].partner,mafia[mafped].sit) endif elif HAS_ENTITY_CLEAR_LOS_TO_ENTITY_IN_FRONT(mafia[mafped].id,player_ped_id()) and (IS_PLAYER_FREE_AIMING_AT_ENTITY(player_id(),mafia[mafped].id)or IS_PLAYER_TARGETTING_ENTITY(player_id(),mafia[mafped].id)) if GET_WEAPONTYPE_GROUP(wcurrent) != WEAPONGROUP_MELEE and wcurrent != WEAPONTYPE_UNARMED if not IS_PED_FLEEING(mafia[mafped].id) and not IS_ENTITY_PLAYING_ANIM(mafia[mafped].id,AnimDict_flinch,"reaction_forward_big_intro_c") and not IS_ENTITY_PLAYING_ANIM(mafia[mafped].id,AnimDict_flinch,"reaction_forward_big_intro_a") and mafia[mafped].sit = SSIT_AI_SPOTTED if mafia[mafped].id != Active_ped TASK_SMART_FLEE_PED(mafia[mafped].id,mike(),300,-1) else CLEAR_PED_TASKS(Active_ped) TASK_PLAY_ANIM(active_ped,AnimDict_flinch,FLINCH_REACTION()) endif endif mafia[mafped].sit = SSIT_AI_GUN if isentityalive(mafia[mafped].partner) if not IS_PED_FLEEING(mafia[mafped].partner) TASK_SMART_FLEE_PED(mafia[mafped].partner,mike(),300,-1) endif set_ped_situations(mafia[mafped].partner,mafia[mafped].sit) endif endif endif endif endif endfor break case AI_ALARM if isentityalive(active_ped) switch iPhoningChat case 0 // spotted println("alarm:0: ",irand) if IS_ENTITY_PLAYING_ANIM(active_ped,AnimDict_PHONE,animPhone) and not IS_PED_RAGDOLL(Active_ped) and not IS_PED_GETTING_UP(Active_ped) if get_game_timer() - iPhoneCheckBackupTimer > 2000 println("alarm:0:1") if not IS_SCRIPTED_CONVERSATION_ONGOING() if ARE_STRINGS_EQUAL(get_ped_Voice_string(Active_ped),"CONSTRUCTION1") ADD_PED_FOR_DIALOGUE(convo_struct,4,active_ped,"CONSTRUCTION1") if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_PHN",CONV_PRIORITY_MEDIUM) iphonetimer = get_Game_timer() iPhoningChat = 2 endif elif ARE_STRINGS_EQUAL(get_ped_Voice_string(Active_ped),"CONSTRUCTION2") ADD_PED_FOR_DIALOGUE(convo_struct,3,active_ped,"CONSTRUCTION2") if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_PHN2",CONV_PRIORITY_MEDIUM) iphonetimer = get_Game_timer() iPhoningChat = 2 endif elif ARE_STRINGS_EQUAL(get_ped_Voice_string(Active_ped),"CONSTRUCTION3") ADD_PED_FOR_DIALOGUE(convo_struct,5,active_ped,"CONSTRUCTION3") if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_CALL3",CONV_PRIORITY_MEDIUM) iphonetimer = get_Game_timer() iPhoningChat = 2 endif endif endif endif else println("alarm:0:2") if not IS_PED_RAGDOLL(Active_ped) and not IS_PED_GETTING_UP(Active_ped) if not IS_ENTITY_PLAYING_ANIM(active_ped,AnimDict_PHONE,animPhone) println("alarm:0:3") CLEAR_PED_TASKS(active_ped) CLEAR_SEQUENCE_TASK(seq) OPEN_SEQUENCE_TASK(seq) TASK_PLAY_ANIM(null,AnimDict_PHONE,animPhone,SLOW_BLEND_IN,Normal_BLEND_OUT,-1,AF_LOOPING | AF_SECONDARY | AF_UPPERBODY) if get_ped_Sit(active_ped) = SSIT_AI_GUN or get_ped_Sit(active_ped) = SSIT_AI_HEAT or get_ped_Sit(active_ped) = SSIT_AI_HURT TASK_SMART_FLEE_PED(null,mike(),300,-1) endif CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(active_ped,seq) CLEAR_SEQUENCE_TASK(seq) endif endif endif break case 1 // guns println("alarm:1") if IS_ENTITY_PLAYING_ANIM(active_ped,AnimDict_PHONE,animPhone) and not IS_PED_RAGDOLL(Active_ped) and not IS_PED_GETTING_UP(Active_ped) if get_game_timer() - iPhoneCheckBackupTimer > 2000 println("alarm:1:1") if not IS_SCRIPTED_CONVERSATION_ONGOING() if ARE_STRINGS_EQUAL(get_ped_Voice_string(Active_ped),"CONSTRUCTION1") ADD_PED_FOR_DIALOGUE(convo_struct,4,active_ped,"CONSTRUCTION1") if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_CALLS1",CONV_PRIORITY_MEDIUM) iphonetimer = get_Game_timer() iPhoningChat = 2 endif elif ARE_STRINGS_EQUAL(get_ped_Voice_string(Active_ped),"CONSTRUCTION2") ADD_PED_FOR_DIALOGUE(convo_struct,3,active_ped,"CONSTRUCTION2") if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_CALLS2",CONV_PRIORITY_MEDIUM) iphonetimer = get_Game_timer() iPhoningChat = 2 endif elif ARE_STRINGS_EQUAL(get_ped_Voice_string(Active_ped),"CONSTRUCTION3") ADD_PED_FOR_DIALOGUE(convo_struct,5,active_ped,"CONSTRUCTION3") if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_CALLS3",CONV_PRIORITY_MEDIUM) iphonetimer = get_Game_timer() iPhoningChat = 2 endif endif ENDIF endif else println("alarm:1:2") if not IS_PED_RAGDOLL(Active_ped) and not IS_PED_GETTING_UP(Active_ped) and not IS_ENTITY_PLAYING_ANIM(active_ped,AnimDict_flinch,"reaction_forward_big_intro_c") and not IS_ENTITY_PLAYING_ANIM(active_ped,AnimDict_flinch,"reaction_forward_big_intro_a") if not IS_ENTITY_PLAYING_ANIM(active_ped,AnimDict_PHONE,animPhone) println("alarm:1:3") CLEAR_PED_TASKS(active_ped) CLEAR_SEQUENCE_TASK(seq) OPEN_SEQUENCE_TASK(seq) TASK_PLAY_ANIM(null,AnimDict_PHONE,animPhone,SLOW_BLEND_IN,Normal_BLEND_OUT,-1,AF_LOOPING | AF_SECONDARY | AF_UPPERBODY) if get_ped_Sit(active_ped) = SSIT_AI_GUN or get_ped_Sit(active_ped) = SSIT_AI_HEAT or get_ped_Sit(active_ped) = SSIT_AI_HURT TASK_SMART_FLEE_PED(null,mike(),300,-1) endif CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(active_ped,seq) CLEAR_SEQUENCE_TASK(seq) endif endif endif break case 2 println("alarm:2") if not IS_SCRIPTED_CONVERSATION_ONGOING() iPhoningChat++ ELSE if get_Game_timer() - iphonetimer > 2000 iPhoningChat = 3 endif if IS_PED_RAGDOLL(active_ped) or IS_PED_GETTING_UP(Active_ped) or not IS_ENTITY_PLAYING_ANIM(active_ped,AnimDict_PHONE,animPhone) CLEAR_PED_TASKS(active_ped) KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() iRand = GET_RANDOM_INT_IN_RANGE(0,4) Println("Interrupted send back to start convo again gun") eAI_stage = AI_ALARM iPhoningChat = 1 endif if not IS_PED_FLEEING(active_ped) and get_ped_Sit(active_ped) = SSIT_AI_SPOTTED if HAS_PED_RECEIVED_EVENT(active_ped, EVENT_SHOT_FIRED) or HAS_PED_RECEIVED_EVENT(active_ped, EVENT_SHOT_FIRED_BULLET_IMPACT) or HAS_PED_RECEIVED_EVENT(active_ped, EVENT_SHOT_FIRED_WHIZZED_BY) or HAS_PED_RECEIVED_EVENT(active_ped, EVENT_EXPLOSION_HEARD) CLEAR_PED_TASKS(active_ped) TASK_PLAY_ANIM(active_ped,AnimDict_flinch,FLINCH_REACTION()) KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() iRand = GET_RANDOM_INT_IN_RANGE(0,4) Println("Interrupted send back to start convo again gun") eAI_stage = AI_ALARM iPhoningChat = 1 elif HAS_ENTITY_CLEAR_LOS_TO_ENTITY_IN_FRONT(active_ped,player_ped_id()) and ( IS_PLAYER_FREE_AIMING_AT_ENTITY(player_id(),active_ped) or IS_PLAYER_TARGETTING_ENTITY(player_id(),active_ped)) if GET_WEAPONTYPE_GROUP(wcurrent) != WEAPONGROUP_MELEE and wcurrent != WEAPONTYPE_UNARMED CLEAR_PED_TASKS(active_ped) TASK_PLAY_ANIM(active_ped,AnimDict_flinch,FLINCH_REACTION()) KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() iRand = GET_RANDOM_INT_IN_RANGE(0,4) Println("Interrupted send back to start convo again gun") eAI_stage = AI_ALARM iPhoningChat = 1 endif endif endif endif break case 3 println("alarm:3") if not IS_ENTITY_PLAYING_ANIM(active_ped,AnimDict_PHONE,animPhone) OPEN_SEQUENCE_TASK(seq) if get_ped_Sit(active_ped) = SSIT_AI_GUN or get_ped_Sit(active_ped) = SSIT_AI_HEAT or get_ped_Sit(active_ped) = SSIT_AI_HURT TASK_SMART_FLEE_PED(null,mike(),300,-1) else TASK_WANDER_STANDARD(null) endif CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(active_ped,seq) CLEAR_SEQUENCE_TASK(Seq) MISSION_FAILED(mff_rocco_alerted) iPhoningChat++ else CLEAR_PED_SECONDARY_TASK(active_ped) endif break endswitch else KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() Active_ped = null eAI_stage = AI_CHECKS endif for mafped = 0 to enum_to_int(NUM_OF_Mafia_PEDS) -1 if isentityalive(mafia[mafped].id) if not IS_PED_IN_COMBAT(mafia[mafped].id) if HAS_PED_RECEIVED_EVENT(mafia[mafped].id, EVENT_SHOT_FIRED) or HAS_PED_RECEIVED_EVENT(mafia[mafped].id, EVENT_SHOT_FIRED_BULLET_IMPACT) or HAS_PED_RECEIVED_EVENT(mafia[mafped].id, EVENT_SHOT_FIRED_WHIZZED_BY) or HAS_PED_RECEIVED_EVENT(mafia[mafped].id, EVENT_EXPLOSION_HEARD) or HAS_ENTITY_BEEN_DAMAGED_BY_ENTITY(mafia[mafped].id,PLAYER_PED_ID()) if mafia[mafped].id != Active_ped TASK_SMART_FLEE_PED(mafia[mafped].id,mike(),300,-1) endif mafia[mafped].sit = SSIT_AI_GUN if isentityalive(mafia[mafped].partner) if not IS_PED_FLEEING(mafia[mafped].partner) TASK_SMART_FLEE_PED(mafia[mafped].partner,mike(),300,-1) endif set_ped_situations(mafia[mafped].partner,mafia[mafped].sit) endif elif HAS_ENTITY_CLEAR_LOS_TO_ENTITY_IN_FRONT(mafia[mafped].id,player_ped_id()) and (IS_PLAYER_FREE_AIMING_AT_ENTITY(player_id(),mafia[mafped].id)or IS_PLAYER_TARGETTING_ENTITY(player_id(),mafia[mafped].id)) if GET_WEAPONTYPE_GROUP(wcurrent) != WEAPONGROUP_MELEE and wcurrent != WEAPONTYPE_UNARMED if mafia[mafped].id != Active_ped TASK_SMART_FLEE_PED(mafia[mafped].id,mike(),300,-1) endif mafia[mafped].sit = SSIT_AI_GUN if isentityalive(mafia[mafped].partner) if not IS_PED_FLEEING(mafia[mafped].partner) TASK_SMART_FLEE_PED(mafia[mafped].partner,mike(),300,-1) endif set_ped_situations(mafia[mafped].partner,mafia[mafped].sit) endif endif endif endif endif endfor break endswitch endproc PROC manage_GIANNI() //===================== ===================== ===================== ===================== if IS_ENTITY_IN_ANGLED_AREA(mike(),<<908.51294, -1699.99683, 65>>,<<910.62000, -1663.53870, 50>>,18) //============================= hear explosion ============================= if HAS_PED_RECEIVED_EVENT(Gianni(), EVENT_EXPLOSION_HEARD) or IS_EXPLOSION_IN_SPHERE(EXP_TAG_DONTCARE,<<910.30920, -1681.37939, 50.14197>>,30) or IS_PROJECTILE_TYPE_IN_ANGLED_AREA(<<910.59302, -1671.71436, 49.13342>>,<<909.09564, -1689.48096, 54.12972>>,12.0,WEAPONTYPE_STICKYBOMB) if isentityalive(Anton()) and isentityalive(milton()) if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() int rand = GET_RANDOM_INT_IN_RANGE(0,3) if rand = 0 ADD_PED_FOR_DIALOGUE(convo_struct,4,active_ped,"GIANNI") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_HEAR",CONV_PRIORITY_MEDIUM) elif rand = 1 ADD_PED_FOR_DIALOGUE(convo_struct,3,Anton(),"Anton") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_SCARE",CONV_PRIORITY_MEDIUM) else ADD_PED_FOR_DIALOGUE(convo_struct,2,Milton(),"SOL1Actor") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_SCARE2",CONV_PRIORITY_MEDIUM) endif endif if not IS_PED_FLEEING(Anton()) TASK_SMART_FLEE_PED(Anton(),mike(),200,-1) endif if not IS_PED_FLEEING(Milton()) TASK_SMART_FLEE_PED(Milton(),mike(),200,-1) endif if not IS_PED_FLEEING(Gianni()) TASK_SMART_FLEE_PED(Milton(),mike(),200,-1) endif MISSION_FAILED(Mff_scared_peds) endif endif //============================= hear something ============================= if GET_PLAYER_CURRENT_STEALTH_NOISE(player_id()) > 9.0 and NOT GET_PED_STEALTH_MOVEMENT(PLAYER_PED_ID()) if not IS_SCRIPT_TASK_RUNNING_OR_STARTING(Gianni(),SCRIPT_TASK_TURN_PED_TO_FACE_COORD) if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() ADD_PED_FOR_DIALOGUE(convo_struct,4,active_ped,"GIANNI") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_HEAR",CONV_PRIORITY_MEDIUM) endif TASK_TURN_PED_TO_FACE_COORD(Gianni(),GET_ENTITY_COORDS(mike()),4000) endif elif IS_FLASH_LIGHT_ON(PLAYER_PED_ID()) and( GET_CLOCK_HOURS() >= 19 or GET_CLOCK_HOURS() < 6) and( IS_PLAYER_TARGETTING_ENTITY(PLAYER_ID(),Gianni()) or IS_PLAYER_FREE_AIMING_AT_ENTITY(PLAYER_ID(),Gianni())) if not IS_SCRIPT_TASK_RUNNING_OR_STARTING(Gianni(),SCRIPT_TASK_TURN_PED_TO_FACE_COORD) if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() ADD_PED_FOR_DIALOGUE(convo_struct,4,active_ped,"GIANNI") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_HEAR",CONV_PRIORITY_MEDIUM) endif TASK_TURN_PED_TO_FACE_COORD(Gianni(),GET_ENTITY_COORDS(mike()),4000) endif elif IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) if not IS_SCRIPT_TASK_RUNNING_OR_STARTING(Gianni(),SCRIPT_TASK_TURN_PED_TO_FACE_COORD) if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() ADD_PED_FOR_DIALOGUE(convo_struct,4,active_ped,"GIANNI") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_HEAR",CONV_PRIORITY_MEDIUM) endif TASK_TURN_PED_TO_FACE_COORD(Gianni(),GET_ENTITY_COORDS(mike()),4000) endif endif else if HAS_PED_RECEIVED_EVENT(Gianni(), EVENT_EXPLOSION_HEARD) or IS_EXPLOSION_IN_ANGLED_AREA(EXP_TAG_DONTCARE,<<919.02515, -1736.73352, 28>>,<<925.47205, -1649.41968, 65>>,120) KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() endif endif //============================= standing IDLE ============================= if not IS_SCRIPT_TASK_RUNNING_OR_STARTING(Gianni(),SCRIPT_TASK_TURN_PED_TO_FACE_COORD) and not IS_SCRIPT_TASK_RUNNING_OR_STARTING(Gianni(),SCRIPT_TASK_PERFORM_SEQUENCE) if not IS_ENTITY_AT_COORD(Gianni(),<<913.27625, -1683.50452, 50.13412>>,<<2,2,2>>) or not IS_PED_FACING_PED(Gianni(),Milton(),40) OPEN_SEQUENCE_TASK(seq) TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<913.27625, -1683.50452, 50.13412>>,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP,DEFAULT_NAVMESH_RADIUS,ENAV_DEFAULT,53.21) if not IS_PED_FACING_PED(Gianni(),Milton(),40) TASK_TURN_PED_TO_FACE_ENTITY(null,Milton()) endif CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(Gianni(),seq) CLEAR_SEQUENCE_TASK(seq) endif endif endproc FUNC SCARE_TYPE GET_SCARE_TYPE() if isentityalive(vehs[mvf_heli].id) and isentityalive(Milton()) if IS_PED_IN_VEHICLE(player_ped_id(),vehs[mvf_heli].id) // ============== UNDER BRIDGE ================= iBridgeCountDuringMission = CHECK_BRIDGE_COMPLETION() //BUG FIX 1399435 check this every frame to see if player has gone under any bridges PRINTSTRING("iBridgeCountDuringMission = ") PRINTINT(iBridgeCountDuringMission) PRINTNL() PRINTSTRING("iBridgeCountAtStart = ") PRINTINT(iBridgeCountAtStart) PRINTNL() IF iBridgeCountAtStart < iBridgeCountDuringMission //BUG FIX 1399435 // if g_bUnderTheBridgeTriggered //BUG FIX 1399435 CPRINTLN(DEBUG_MISSION,"SCARE_BRIDGE") if GET_RANDOM_BOOL() ADD_PED_FOR_DIALOGUE(convo_struct,2,Milton(),"SOL1ACTOR") if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_HELI_BR",CONV_PRIORITY_MEDIUM) g_bUnderTheBridgeTriggered = false iBridgeCountAtStart = CHECK_BRIDGE_COMPLETION() //BUG FIX 1399435 reset the start counter now return SCARE_BRIDGE endif else ADD_PED_FOR_DIALOGUE(convo_struct,3,Anton(),"Anton") if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_BRIDGE",CONV_PRIORITY_MEDIUM) g_bUnderTheBridgeTriggered = false iBridgeCountAtStart = CHECK_BRIDGE_COMPLETION() //BUG FIX 1399435 reset the start counter now return SCARE_BRIDGE endif endif endif // ================= CRASH ==================== iHeliHealthNow = GET_ENTITY_HEALTH(vehs[mvf_heli].id) //BUG FIX 1399448 get the heli's health at the start then if it drops down by 50 return SCARE_CRASH IF iHeliHealthNow < (iHeliHealthStart - 50) //BUG FIX 1399448 // if Has_Vehicle_Been_Damaged()//BUG FIX 1399448 CPRINTLN(DEBUG_MISSION,"SCARE_CRASH") if GET_RANDOM_BOOL() ADD_PED_FOR_DIALOGUE(convo_struct,2,Milton(),"SOL1ACTOR") if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_HELI_CR",CONV_PRIORITY_MEDIUM) iHeliHealthStart = GET_ENTITY_HEALTH(vehs[mvf_heli].id)//BUG FIX 1399448 return SCARE_CRASH endif else ADD_PED_FOR_DIALOGUE(convo_struct,3,Anton(),"Anton") if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_CRASH",CONV_PRIORITY_MEDIUM) iHeliHealthStart = GET_ENTITY_HEALTH(vehs[mvf_heli].id)//BUG FIX 1399448 return SCARE_CRASH endif endif endif // ================= LOW and FAST ==================== if GET_ENTITY_SPEED(vehs[mvf_heli].id) >= LOW_HEIGHT_SPEED and GET_ENTITY_HEIGHT_ABOVE_GROUND(vehs[mvf_heli].id) <= LOW_HEIGHT_MAX CPRINTLN(DEBUG_MISSION,"SCARE_LOW_FAST: speed: ",GET_ENTITY_SPEED(vehs[mvf_heli].id)," height: ",GET_ENTITY_HEIGHT_ABOVE_GROUND(vehs[mvf_heli].id)) if GET_RANDOM_BOOL() ADD_PED_FOR_DIALOGUE(convo_struct,2,Milton(),"SOL1ACTOR") if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_LOW1",CONV_PRIORITY_MEDIUM) return SCARE_LOW_FAST endif else ADD_PED_FOR_DIALOGUE(convo_struct,3,Anton(),"Anton") if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_LOW2",CONV_PRIORITY_MEDIUM) return SCARE_LOW_FAST endif endif endif // ================= NEAR MISS ==================== //Bug fix 1399440 have sent to code as the below function is returning true all the time. if GET_ENTITY_SPEED(vehs[mvf_heli].id) >= LOW_HEIGHT_SPEED if shapetestheli = null shapetestheli = START_SHAPE_TEST_BOX(GET_ENTITY_COORDS(vehs[mvf_heli].id), <<15,15,6>>, GET_ENTITY_ROTATION(vehs[mvf_heli].id), DEFAULT, SCRIPT_INCLUDE_MOVER|SCRIPT_INCLUDE_VEHICLE, vehs[mvf_heli].id) endif if GET_SHAPE_TEST_RESULT(shapetestheli,iShapetestResult,vecShapetestResult,vecShapetestNormal,hitEntity) != SHAPETEST_STATUS_RESULTS_NOTREADY shapetestheli = null if iShapetestResult = 1 CPRINTLN(DEBUG_MISSION,"SCARE_CRASH from NEAR MISS") if GET_RANDOM_BOOL() ADD_PED_FOR_DIALOGUE(convo_struct,2,Milton(),"SOL1ACTOR") if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_GENM",CONV_PRIORITY_MEDIUM) return SCARE_CRASH endif else ADD_PED_FOR_DIALOGUE(convo_struct,3,Anton(),"Anton") if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_GENA",CONV_PRIORITY_MEDIUM) return SCARE_CRASH endif endif endif endif endif // ================= PITCH ==================== vector vRotSpeed = GET_ENTITY_ROTATION_VELOCITY(vehs[mvf_heli].id) if vRotSpeed.x <= -PITCH_CHANGE or vRotSpeed.x >= PITCH_CHANGE CPRINTLN(DEBUG_MISSION,"SCARE_PITCH: ", vRotSpeed.x) if GET_RANDOM_BOOL() ADD_PED_FOR_DIALOGUE(convo_struct,2,Milton(),"SOL1ACTOR") if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_HELI_PH",CONV_PRIORITY_MEDIUM) return SCARE_PITCH endif else ADD_PED_FOR_DIALOGUE(convo_struct,3,Anton(),"Anton") if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_PITCH",CONV_PRIORITY_MEDIUM) return SCARE_PITCH endif endif endif // ================= HEADING ==================== if vRotSpeed.z <= -HEADING_CHANGE or vRotSpeed.z >= HEADING_CHANGE CPRINTLN(DEBUG_MISSION,"SCARE_heading: ", vRotSpeed.z) if GET_RANDOM_BOOL() ADD_PED_FOR_DIALOGUE(convo_struct,2,Milton(),"SOL1ACTOR") if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_HELI_PH",CONV_PRIORITY_MEDIUM) return SCARE_HEADING_CHANGE endif else ADD_PED_FOR_DIALOGUE(convo_struct,3,Anton(),"Anton") if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_PITCH",CONV_PRIORITY_MEDIUM) return SCARE_HEADING_CHANGE endif endif endif // ================= HEIGHT ==================== vector vSpeedVector = GET_ENTITY_SPEED_VECTOR(vehs[mvf_heli].id) if vSpeedVector.z <= DROP_SPEED CPRINTLN(DEBUG_MISSION,"SCARE_DROP: ", vRotSpeed.z) if GET_RANDOM_BOOL() ADD_PED_FOR_DIALOGUE(convo_struct,2,Milton(),"SOL1ACTOR",true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_GENM",CONV_PRIORITY_MEDIUM) return SCARE_HEIGHT_DROP endif else ADD_PED_FOR_DIALOGUE(convo_struct,3,Anton(),"Anton",true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_GENA",CONV_PRIORITY_MEDIUM) return SCARE_HEIGHT_DROP endif endif endif // ================= SPEED ==================== if GET_ENTITY_SPEED(vehs[mvf_heli].id) >= HIGH_SPEED_TRIGGER CPRINTLN(DEBUG_MISSION,"SCARE_SPEED: ", GET_ENTITY_SPEED(vehs[mvf_heli].id)) if GET_RANDOM_BOOL() ADD_PED_FOR_DIALOGUE(convo_struct,2,Milton(),"SOL1ACTOR",true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_HELI_SP",CONV_PRIORITY_MEDIUM) return SCARE_SPEED endif else ADD_PED_FOR_DIALOGUE(convo_struct,3,Anton(),"Anton",true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_FAST",CONV_PRIORITY_MEDIUM) return SCARE_SPEED endif endif endif endif endif return SCARE_NONE endfunc func bool Scared_Milton() switch iScareStage case 0 if IS_SAFE_TO_DISPLAY_GODTEXT() PRINT_NOW("CMN_GENGETINHE",DEFAULT_GOD_TEXT_TIME,1) if not DOES_BLIP_EXIST(blip_objective) blip_objective = CREATE_BLIP_FOR_VEHICLE(vehs[mvf_heli].id) endif bScareHeliWarn = false //Set flags for bridge check at start iBridgeCountAtStart = CHECK_BRIDGE_COMPLETION() //BUG FIX 1399435 Get the start count for how many bridges have been flown under iLastIncrementTimer = 0 iHeliHealthStart = GET_ENTITY_HEALTH(vehs[mvf_heli].id) iScareStage++ endif break case 1 if isentityalive(vehs[mvf_heli].id) if GET_DISTANCE_BETWEEN_ENTITIES(mike(),vehs[mvf_heli].id) < 5 and IS_SAFE_TO_START_CONVERSATION() ADD_PED_FOR_DIALOGUE(convo_struct,0,mike(),"MICHAEL",true) ADD_PED_FOR_DIALOGUE(convo_struct,2,Milton(),"SOL1ACTOR",true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_NOGO",CONV_PRIORITY_MEDIUM) bpauseconv = false iScareStage++ endif endif endif break case 2 if IS_PED_IN_VEHICLE(player_ped_id(),vehs[mvf_heli].id) and not IS_SCRIPTED_CONVERSATION_ONGOING() and IS_SAFE_TO_START_CONVERSATION() ADD_PED_FOR_DIALOGUE(convo_struct,0,mike(),"MICHAEL",true) ADD_PED_FOR_DIALOGUE(convo_struct,2,Milton(),"SOL1ACTOR",true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_INCHOP",CONV_PRIORITY_MEDIUM) bpauseconv = false iScareStage++ endif elif IS_SCRIPTED_CONVERSATION_ONGOING() PAUSE_FACE_TO_FACE_CONVERSATION(false) endif break case 3 if IS_SCRIPTED_CONVERSATION_ONGOING() PAUSE_FACE_TO_FACE_CONVERSATION(false) else if IS_PED_IN_VEHICLE(player_ped_id(),vehs[mvf_heli].id) and IS_SAFE_TO_DISPLAY_GODTEXT() PRINT_NOW("SOL1_SCARE",DEFAULT_GOD_TEXT_TIME,1) iScareInt = 0 bPlayChat = true iScareTimer2 = get_Game_timer() iScareStage++ endif endif break case 4 if iScareInt < 5 if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() and get_Game_timer() - iScareTimer2 > 2000 if GET_SCARE_TYPE() <> SCARE_NONE PRINTSTRING("GET_SCARE_TYPE <> SCARE_NONE") PRINTNL() if not IS_SCRIPT_TASK_RUNNING_OR_STARTING(Milton(),SCRIPT_TASK_PERFORM_SEQUENCE) and HAS_ANIM_DICT_LOADED("misssolomon_1") OPEN_SEQUENCE_TASK(seq) TASK_PLAY_ANIM(null,"misssolomon_1","anton_heli_loop",walk_BLEND_IN,NORMAL_BLEND_OUT,-1,AF_UPPERBODY) TASK_PLAY_ANIM(null,"misssolomon_1","anton_heli_exit",NORMAL_BLEND_IN,NORMAL_BLEND_OUT,-1,AF_UPPERBODY) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(Milton(),seq) CLEAR_SEQUENCE_TASK(seq) endif iScareTimer2 = get_Game_timer() bPlayChat = true REPLAY_RECORD_BACK_FOR_TIME(5.0) iScareInt++ else switch iScareInt case 0 if bPlayChat PRINT_HELP("SOL1_SCAREHLP") ADD_PED_FOR_DIALOGUE(convo_struct,0,mike(),"MICHAEL",true) ADD_PED_FOR_DIALOGUE(convo_struct,2,Milton(),"SOL1ACTOR",true) ADD_PED_FOR_DIALOGUE(convo_struct,3,Anton(),"ANTON",true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_CHAT1",CONV_PRIORITY_MEDIUM) bPlayChat = false iScareTimer2 = get_Game_timer() endif else if get_Game_timer() - iScareTimer2 > 20000 if IS_PED_IN_VEHICLE(player_ped_id(),vehs[mvf_heli].id) if IS_PED_IN_VEHICLE(Milton(),GET_VEHICLE_PED_IS_IN(mike())) and IS_PED_IN_VEHICLE(Anton(),GET_VEHICLE_PED_IS_IN(mike())) if GET_RANDOM_BOOL() ADD_PED_FOR_DIALOGUE(convo_struct,2,Milton(),"SOL1ACTOR",true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_HELI_ID",CONV_PRIORITY_MEDIUM) iScareTimer2 = get_Game_timer() endif else ADD_PED_FOR_DIALOGUE(convo_struct,3,Anton(),"Anton",true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_NOSCAR",CONV_PRIORITY_MEDIUM) iScareTimer2 = get_Game_timer() endif endif endif endif endif endif break case 1 if get_Game_timer() - iScareTimer2 > 12000 ADD_PED_FOR_DIALOGUE(convo_struct,0,mike(),"MICHAEL",true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_SCARY",CONV_PRIORITY_MEDIUM) iScareTimer2 = get_Game_timer() endif endif break case 2 if bPlayChat ADD_PED_FOR_DIALOGUE(convo_struct,0,mike(),"MICHAEL",true) ADD_PED_FOR_DIALOGUE(convo_struct,2,Milton(),"SOL1ACTOR",true) ADD_PED_FOR_DIALOGUE(convo_struct,3,Anton(),"ANTON",true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_CHAT3",CONV_PRIORITY_MEDIUM) bPlayChat = false iScareTimer2 = get_Game_timer() endif else if get_Game_timer() - iScareTimer2 > 25000 if IS_PED_IN_VEHICLE(player_ped_id(),vehs[mvf_heli].id) if IS_PED_IN_VEHICLE(Milton(),vehs[mvf_heli].id) and IS_PED_IN_VEHICLE(Anton(),vehs[mvf_heli].id) if GET_RANDOM_BOOL() ADD_PED_FOR_DIALOGUE(convo_struct,0,mike(),"MICHAEL",true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_SCARY",CONV_PRIORITY_MEDIUM) iScareTimer2 = get_Game_timer() endif else if GET_RANDOM_BOOL() ADD_PED_FOR_DIALOGUE(convo_struct,2,Milton(),"SOL1ACTOR",true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_HELI_ID",CONV_PRIORITY_MEDIUM) iScareTimer2 = get_Game_timer() endif else ADD_PED_FOR_DIALOGUE(convo_struct,3,Anton(),"Anton",true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_NOSCAR",CONV_PRIORITY_MEDIUM) iScareTimer2 = get_Game_timer() endif endif endif endif endif endif endif break case 3 case 4 if get_Game_timer() - iScareTimer2 > 25000 if IS_PED_IN_VEHICLE(player_ped_id(),vehs[mvf_heli].id) if IS_PED_IN_VEHICLE(Milton(),vehs[mvf_heli].id) and IS_PED_IN_VEHICLE(Anton(),vehs[mvf_heli].id) if GET_RANDOM_BOOL() ADD_PED_FOR_DIALOGUE(convo_struct,0,mike(),"MICHAEL",true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_SCARY",CONV_PRIORITY_MEDIUM) iScareTimer2 = get_Game_timer() endif else if GET_RANDOM_BOOL() ADD_PED_FOR_DIALOGUE(convo_struct,2,Milton(),"SOL1ACTOR",true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_HELI_ID",CONV_PRIORITY_MEDIUM) iScareTimer2 = get_Game_timer() endif else ADD_PED_FOR_DIALOGUE(convo_struct,3,Anton(),"Anton",true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_NOSCAR",CONV_PRIORITY_MEDIUM) iScareTimer2 = get_Game_timer() endif endif endif endif endif endif break endswitch endif endif else if DOES_BLIP_EXIST(blip_objective) REMOVE_BLIP(blip_objective) endif iScareStage++ endif break case 5 break endswitch if iScareStage > 2 and iScareStage < 5 if IS_PED_IN_VEHICLE(player_ped_id(),vehs[mvf_heli].id) if DOES_BLIP_EXIST(blip_objective) REMOVE_BLIP(blip_objective) endif if IS_THIS_PRINT_BEING_DISPLAYED("CMN_GENGETBCKHE") CLEAR_PRINTS() endif else if not DOES_BLIP_EXIST(blip_objective) blip_objective = CREATE_BLIP_FOR_VEHICLE(vehs[mvf_heli].id) endif if not bScareHeliWarn print_now("CMN_GENGETBCKHE",DEFAULT_GOD_TEXT_TIME,1) bScareHeliWarn = true endif endif endif if iScareStage = 5 return true endif return false endfunc proc AUDIO_dialogue(MSF_MISSION_STAGE_FLAGS mstage) SWITCH mstage CASE msf_0_get_to_warehouse switch iDialogue_Stage case 0 if mission_substage > 1 i_dialogueTimer = get_Game_timer() iDialogue_Stage++ endif break case 1 if get_game_timer() - i_dialogueTimer > 38000 and not IS_MESSAGE_BEING_DISPLAYED() and mission_substage > 1 if CHAR_CALL_PLAYER_CELLPHONE_FORCE_ANSWER(convo_struct,CHAR_SOLOMON,"SOL1AUD","SOL1_SOL",CONV_PRIORITY_MEDIUM,DISPLAY_SUBTITLES,DO_ADD_TO_BRIEF_SCREEN,true) iDialogue_Stage++ endif endif break case 2 if WAS_LAST_CELLPHONE_CALL_INTERRUPTED() i_dialogueTimer = get_Game_timer() ADD_CONTACT_TO_PHONEBOOK(CHAR_SOLOMON,MICHAEL_BOOK,true) iDialogue_Stage++ ELif HAS_CELLPHONE_CALL_FINISHED() ADD_CONTACT_TO_PHONEBOOK(CHAR_SOLOMON,MICHAEL_BOOK,true) iDialogue_Stage = 4 ENDIF break case 3 if get_game_timer() - i_dialogueTimer > 3000 if SEND_TEXT_MESSAGE_TO_CURRENT_PLAYER(CHAR_SOLOMON,"SOL1_TEXT",TXTMSG_UNLOCKED, TXTMSG_NOT_CRITICAL,TXTMSG_AUTO_UNLOCK_AFTER_READ, NO_REPLY_REQUIRED,ICON_STANDARD_TEXTMSG, true,NO_BARTER_REQUIRED,CANNOT_CALL_SENDER) iDialogue_Stage++ endif endif break case 4 if mission_substage >= 4 // if PLAYER_CALL_CHAR_CELLPHONE(convo_struct,CHAR_SOLOMON,"SOL1AUD","SOL1_SOL2",CONV_PRIORITY_MEDIUM) // iDialogue_Stage++ // endif endif break endswitch break case msf_1_Stealth_to_roof if eAI_stage = AI_CHECKS and mission_substage < 2 //the closest ped for convo float closeDist closeDist = 200 ped_index clsePed clsePed = mafia[maf_Car].id int mafped for mafped = 0 to enum_to_int(NUM_OF_Mafia_PEDS) - 1 if isentityalive(mafia[mafped].id) if GET_DISTANCE_BETWEEN_ENTITIES(mafia[mafped].id,mike()) < closedist closedist = GET_DISTANCE_BETWEEN_ENTITIES(mafia[mafped].id,mike()) clsePed = mafia[mafped].id endif endif endfor if isentityalive(Gianni()) if GET_DISTANCE_BETWEEN_ENTITIES(Gianni(),mike()) < closedist closedist = GET_DISTANCE_BETWEEN_ENTITIES(Gianni(),mike()) clsePed = Gianni() endif endif // talking by the car if isentityalive(mafia[maf_car].id) and isentityalive(mafia[maf_car_talking].id) switch iCarSpeechStage case 0 if IS_ENTITY_IN_ANGLED_AREA(mike(),<<947.18097, -1717.85010, 38.68729>>,<<970.51593, -1720.15210, 29.54870>>, 22) if not bMusic_1stEnemy TRIGGER_MUSIC_EVENT("SOL1_1ST_ENEMY") bMusic_1stEnemy = true endif if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() ADD_PED_FOR_DIALOGUE(convo_struct,mafia[maf_car_talking].iVoiceID,mafia[maf_car_talking].id,mafia[maf_car_talking].sVoiceName,true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_AMB2",CONV_PRIORITY_MEDIUM) iCarSpeechStage++ endif endif endif break case 1 if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() i_dialogueTimer = get_Game_timer() bpauseconv = false iCarSpeechStage++ else if not IS_ENTITY_IN_ANGLED_AREA(mike(),<<947.18097, -1717.85010, 38.68729>>,<<970.51593, -1720.15210, 29.54870>>, 22) KILL_FACE_TO_FACE_CONVERSATION() endif endif break case 2 if clseped = mafia[maf_Car].id or clseped = mafia[maf_car_talking].id if get_game_timer() - i_dialogueTimer > 6000 and GET_DISTANCE_BETWEEN_ENTITIES(mike(),mafia[maf_car_talking].id) < 17 and not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() ADD_PED_FOR_DIALOGUE(convo_struct,mafia[maf_car_talking].iVoiceID,mafia[maf_car_talking].id,mafia[maf_car_talking].sVoiceName,true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_AMB3",CONV_PRIORITY_MEDIUM) println("play ped Amb speech: mafia[maf_car].id ") i_dialogueTimer = get_Game_timer() iCarSpeechStage = 3 endif endif endif break case 3 if clseped = mafia[maf_Car].id or clseped = mafia[maf_car_talking].id if get_game_timer() - i_dialogueTimer > 12000 and GET_DISTANCE_BETWEEN_ENTITIES(mike(),mafia[maf_car_talking].id) < 16 and not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() ADD_PED_FOR_DIALOGUE(convo_struct,mafia[maf_car].iVoiceID,mafia[maf_car].id,mafia[maf_car].sVoiceName,true) if CREATE_CONVERSATION(convo_Struct,"SOL1AUD","SOL1_FIX1",CONV_PRIORITY_MEDIUM) println("play ped Amb speech: mafia[maf_car_talking].id ") i_dialogueTimer = get_Game_timer() iCarSpeechStage = 4 endif endif endif break case 4 if clseped = mafia[maf_Car].id or clseped = mafia[maf_car_talking].id if get_game_timer() - i_dialogueTimer > 10000 and GET_DISTANCE_BETWEEN_ENTITIES(mike(),mafia[maf_car_talking].id) < 16 and not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() ADD_PED_FOR_DIALOGUE(convo_struct,mafia[maf_car_talking].iVoiceID,mafia[maf_car_talking].id,mafia[maf_car_talking].sVoiceName,true) if CREATE_CONVERSATION(convo_Struct,"SOL1AUD","SOL1_AMB4",CONV_PRIORITY_MEDIUM) println("play ped Amb speech: mafia[maf_car].id ") i_dialogueTimer = get_Game_timer() iCarSpeechStage = 3 endif endif endif break endswitch endif if clseped = mafia[maf_worker_alone].id if isentityalive(mafia[maf_worker_alone].id) if GET_DISTANCE_BETWEEN_ENTITIES(mike(),mafia[maf_worker_alone].id) < 18 vPlayerCoords = GET_ENTITY_COORDS(PLAYER_PED_ID()) //BUG FIX 1399354 adding a hieght check on the player so dialogue doesn't play here if player is to low down. IF vPlayerCoords.z > 35.5 if not bMusic_1stEnemy TRIGGER_MUSIC_EVENT("SOL1_1ST_ENEMY") bMusic_1stEnemy = true endif if get_game_timer() - i_dialogueTimer > 12000 if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() ADD_PED_FOR_DIALOGUE(convo_struct,mafia[maf_worker_alone].iVoiceID,mafia[maf_worker_alone].id,mafia[maf_worker_alone].sVoiceName,true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_FIX2",CONV_PRIORITY_MEDIUM) println("play ped Amb speech: mafia[maf_worker_alone].id ") i_dialogueTimer = get_Game_timer() endif endif endif ENDIF endif endif elif clseped = mafia[maf_worker_vent].id if isentityalive(mafia[maf_worker_vent].id) if GET_DISTANCE_BETWEEN_ENTITIES(mike(),mafia[maf_worker_vent].id) < 17 if not bMusic_1stEnemy TRIGGER_MUSIC_EVENT("SOL1_1ST_ENEMY") bMusic_1stEnemy = true endif if get_game_timer() - i_dialogueTimer > 15000 if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() ADD_PED_FOR_DIALOGUE(convo_struct,mafia[maf_worker_vent].iVoiceID,mafia[maf_worker_vent].id,mafia[maf_worker_vent].sVoiceName,true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_AMB4",CONV_PRIORITY_MEDIUM) println("play ped Amb speech: mafia[maf_worker_vent].id ") i_dialogueTimer = get_Game_timer() endif endif endif endif endif elif clseped = mafia[maf_worker_door].id if isentityalive(mafia[maf_worker_door].id) if GET_DISTANCE_BETWEEN_ENTITIES(mike(),mafia[maf_worker_door].id) < 17 if not bMusic_1stEnemy TRIGGER_MUSIC_EVENT("SOL1_1ST_ENEMY") bMusic_1stEnemy = true endif if get_game_timer() - i_dialogueTimer > 30000 if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() ADD_PED_FOR_DIALOGUE(convo_struct,mafia[maf_worker_door].iVoiceID,mafia[maf_worker_door].id,mafia[maf_worker_door].sVoiceName,true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_CHECK",CONV_PRIORITY_MEDIUM) println("play ped Amb speech: mafia[maf_worker_vent].id ") i_dialogueTimer = get_Game_timer() endif endif endif endif endif elif clseped = mafia[maf_worker_top].id if isentityalive(mafia[maf_worker_top].id) if GET_DISTANCE_BETWEEN_ENTITIES(mike(),mafia[maf_worker_top].id) < 17 if not bMusic_1stEnemy TRIGGER_MUSIC_EVENT("SOL1_1ST_ENEMY") bMusic_1stEnemy = true endif if get_game_timer() - i_dialogueTimer > 10000 if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() ADD_PED_FOR_DIALOGUE(convo_struct,mafia[maf_worker_top].iVoiceID,mafia[maf_worker_top].id,mafia[maf_worker_top].sVoiceName,true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_FIX2",CONV_PRIORITY_MEDIUM) println("play ped Amb speech: mafia[maf_worker_top].id ") i_dialogueTimer = get_Game_timer() endif endif endif endif endif elif clseped = mafia[maf_worker_walkway].id or clseped = mafia[maf_walkway_door].id //walkway peds if isentityalive(mafia[maf_worker_walkway].id) and isentityalive(mafia[maf_walkway_door].id) if GET_DISTANCE_BETWEEN_ENTITIES(mike(),mafia[maf_walkway_door].id) < 25 if bDoWalkwayChat if not bMusic_1stEnemy TRIGGER_MUSIC_EVENT("SOL1_1ST_ENEMY") bMusic_1stEnemy = true endif switch iwalkwayChat case 0 if get_game_timer() - i_dialogueTimer > 3000 if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() ADD_PED_FOR_DIALOGUE(convo_struct,mafia[maf_walkway_door].iVoiceID,mafia[maf_walkway_door].id,mafia[maf_walkway_door].sVoiceName,true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_WLKTLK",CONV_PRIORITY_MEDIUM) println("play ped Amb speech: mafia[maf_walkway_door].id ") iwalkwayChat++ endif endif endif break case 1 if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() if get_game_timer() - i_dialogueTimer > 5000 ADD_PED_FOR_DIALOGUE(convo_struct,mafia[maf_walkway_door].iVoiceID,mafia[maf_walkway_door].id,mafia[maf_walkway_door].sVoiceName,true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_WLKTLK2",CONV_PRIORITY_MEDIUM) println("play ped Amb speech: mafia[maf_walkway_door].id ") iwalkwayChat++ endif endif else i_dialogueTimer = get_Game_timer() endif break case 2 if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() if get_game_timer() - i_dialogueTimer > 3000 ADD_PED_FOR_DIALOGUE(convo_struct,mafia[maf_walkway_door].iVoiceID,mafia[maf_walkway_door].id,mafia[maf_walkway_door].sVoiceName,true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_WLKTLK",CONV_PRIORITY_MEDIUM) println("play ped Amb speech: mafia[maf_walkway_door].id ") iwalkwayChat++ endif endif else i_dialogueTimer = get_Game_timer() endif break case 3 if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() if get_game_timer() - i_dialogueTimer > 4000 ADD_PED_FOR_DIALOGUE(convo_struct,mafia[maf_walkway_door].iVoiceID,mafia[maf_walkway_door].id,mafia[maf_walkway_door].sVoiceName,true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_WLKTLK2",CONV_PRIORITY_MEDIUM) println("play ped Amb speech: mafia[maf_walkway_door].id ") i_dialogueTimer = get_Game_timer() iwalkwayChat = 0 bDoWalkwayChat = false endif endif else i_dialogueTimer = get_Game_timer() endif break endswitch endif endif endif elif clseped = Gianni() if GET_DISTANCE_BETWEEN_ENTITIES(mike(),Gianni()) < 14 and not IS_SCRIPT_TASK_RUNNING_OR_STARTING(Gianni(),SCRIPT_TASK_TURN_PED_TO_FACE_COORD) switch iGianniChat case 0 if get_game_timer() - i_dialogueTimer > 12000 if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() ADD_PED_FOR_DIALOGUE(convo_struct,4,Gianni(),"GIANNI",true) ADD_PED_FOR_DIALOGUE(convo_struct,2,peds[mpf_milton].id,"SOL1Actor",true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_TALK1",CONV_PRIORITY_MEDIUM) if not IS_SCRIPT_TASK_RUNNING_OR_STARTING(Gianni(),SCRIPT_TASK_TURN_PED_TO_FACE_COORD) and not IS_SCRIPT_TASK_RUNNING_OR_STARTING(Gianni(),SCRIPT_TASK_PERFORM_SEQUENCE) OPEN_SEQUENCE_TASK(seq) if not IS_PED_FACING_PED(Gianni(),Milton(),40) TASK_TURN_PED_TO_FACE_ENTITY(NULL, Milton()) endif if not IS_PED_HEADTRACKING_PED(Gianni(),Milton()) TASK_LOOK_AT_ENTITY(null,Milton(),-1,SLF_WHILE_NOT_IN_FOV| SLF_WIDEST_YAW_LIMIT | SLF_WIDEST_PITCH_LIMIT) endif TASK_PLAY_ANIM(null,AnimDict_gestures,"idle_b",WALK_BLEND_IN,WALK_BLEND_OUT) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(Gianni(),seq) CLEAR_SEQUENCE_TASK(seq) endif i_dialogueTimer = get_Game_timer() iGianniChat++ endif endif endif break case 1 if get_game_timer() - i_dialogueTimer > 12000 if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() ADD_PED_FOR_DIALOGUE(convo_struct,4,Gianni(),"GIANNI",true) ADD_PED_FOR_DIALOGUE(convo_struct,2,peds[mpf_milton].id,"SOL1Actor",true) ADD_PED_FOR_DIALOGUE(convo_struct,3,peds[mpf_Anton].id,"ANTON",true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_TALK2",CONV_PRIORITY_MEDIUM) if not IS_SCRIPT_TASK_RUNNING_OR_STARTING(Gianni(),SCRIPT_TASK_TURN_PED_TO_FACE_COORD) and not IS_SCRIPT_TASK_RUNNING_OR_STARTING(Gianni(),SCRIPT_TASK_PERFORM_SEQUENCE) OPEN_SEQUENCE_TASK(seq) if not IS_PED_FACING_PED(Gianni(),Milton(),40) TASK_TURN_PED_TO_FACE_ENTITY(NULL, Milton()) endif if not IS_PED_HEADTRACKING_PED(Gianni(),Milton()) TASK_LOOK_AT_ENTITY(null,Milton(),-1,SLF_WHILE_NOT_IN_FOV| SLF_WIDEST_YAW_LIMIT | SLF_WIDEST_PITCH_LIMIT) endif TASK_PLAY_ANIM(null,AnimDict_gestures,"idle_d",WALK_BLEND_IN,WALK_BLEND_OUT) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(Gianni(),seq) CLEAR_SEQUENCE_TASK(seq) endif i_dialogueTimer = get_Game_timer() iGianniChat++ endif endif endif break case 2 if get_game_timer() - i_dialogueTimer > 12000 if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() ADD_PED_FOR_DIALOGUE(convo_struct,4,Gianni(),"GIANNI",true) ADD_PED_FOR_DIALOGUE(convo_struct,2,peds[mpf_milton].id,"SOL1Actor",true) ADD_PED_FOR_DIALOGUE(convo_struct,3,peds[mpf_Anton].id,"ANTON",true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_TALK3",CONV_PRIORITY_MEDIUM) if not IS_SCRIPT_TASK_RUNNING_OR_STARTING(Gianni(),SCRIPT_TASK_TURN_PED_TO_FACE_COORD) and not IS_SCRIPT_TASK_RUNNING_OR_STARTING(Gianni(),SCRIPT_TASK_PERFORM_SEQUENCE) OPEN_SEQUENCE_TASK(seq) if not IS_PED_FACING_PED(Gianni(),Milton(),40) TASK_TURN_PED_TO_FACE_ENTITY(NULL, Milton()) endif if not IS_PED_HEADTRACKING_PED(Gianni(),Milton()) TASK_LOOK_AT_ENTITY(null,Milton(),-1,SLF_WHILE_NOT_IN_FOV| SLF_WIDEST_YAW_LIMIT | SLF_WIDEST_PITCH_LIMIT) endif TASK_PLAY_ANIM(null,AnimDict_gestures,"idle_e",WALK_BLEND_IN,WALK_BLEND_OUT) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(Gianni(),seq) CLEAR_SEQUENCE_TASK(seq) endif i_dialogueTimer = get_Game_timer() iGianniChat++ endif endif endif break case 3 if get_game_timer() - i_dialogueTimer > 15000 if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() ADD_PED_FOR_DIALOGUE(convo_struct,4,Gianni(),"GIANNI",true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_SIT",CONV_PRIORITY_MEDIUM) if not IS_SCRIPT_TASK_RUNNING_OR_STARTING(Gianni(),SCRIPT_TASK_TURN_PED_TO_FACE_COORD) and not IS_SCRIPT_TASK_RUNNING_OR_STARTING(Gianni(),SCRIPT_TASK_PERFORM_SEQUENCE) OPEN_SEQUENCE_TASK(seq) if not IS_PED_FACING_PED(Gianni(),Milton(),40) TASK_TURN_PED_TO_FACE_ENTITY(NULL, Milton()) endif if not IS_PED_HEADTRACKING_PED(Gianni(),Milton()) TASK_LOOK_AT_ENTITY(null,Milton(),-1,SLF_WHILE_NOT_IN_FOV| SLF_WIDEST_YAW_LIMIT | SLF_WIDEST_PITCH_LIMIT) endif TASK_PLAY_ANIM(null,AnimDict_gestures,"idle_c",WALK_BLEND_IN,WALK_BLEND_OUT) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(Gianni(),seq) CLEAR_SEQUENCE_TASK(seq) endif i_dialogueTimer = get_Game_timer() endif endif endif break endswitch endif endif endif break case msf_2_fight_rocco switch iDialogue_Stage case 0 if not IS_MESSAGE_BEING_DISPLAYED() and mission_substage > 3 ADD_PED_FOR_DIALOGUE(convo_struct,0,mike(),"MICHAEL") // if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_ROC",CONV_PRIORITY_MEDIUM) // TASK_LOOK_AT_ENTITY(mike(),vehs[mvf_heli].id,-1,SLF_WHILE_NOT_IN_FOV) iDialogue_Stage++ // endif endif break case 1 if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() iDialogue_Stage++ endif break case 2 if isentityalive(rocco()) if not IS_PED_HEADTRACKING_PED(mike(),rocco()) TASK_LOOK_AT_ENTITY(mike(),rocco(),-1,SLF_WHILE_NOT_IN_FOV) endif else if isentityalive(vehs[mvf_heli].id) if not IS_PED_HEADTRACKING_ENTITY(mike(),vehs[mvf_heli].id) TASK_LOOK_AT_ENTITY(mike(),vehs[mvf_heli].id,-1,SLF_WHILE_NOT_IN_FOV) endif endif endif break endswitch break case msf_3_get_to_sol switch iDialogue_Stage case 0 if IS_PED_IN_ANY_VEHICLE(mike()) if IS_PED_IN_VEHICLE(Milton(),GET_VEHICLE_PED_IS_IN(mike())) and IS_PED_IN_VEHICLE(Anton(),GET_VEHICLE_PED_IS_IN(mike())) i_dialogueTimer = get_Game_timer() iDialogue_Stage++ endif endif break case 1 if not IS_MESSAGE_BEING_DISPLAYED() and mission_substage = 2 if isentityalive(mike()) and isentityalive(Milton()) and isentityalive(Anton()) if IS_PED_IN_ANY_VEHICLE(mike()) if IS_PED_IN_VEHICLE(Milton(),GET_VEHICLE_PED_IS_IN(mike())) and IS_PED_IN_VEHICLE(Anton(),GET_VEHICLE_PED_IS_IN(mike())) ADD_PED_FOR_DIALOGUE(convo_struct,0,mike(),"Michael",true) add_ped_for_dialogue(convo_struct,2,Milton(),"SOL1ACTOR",true) add_ped_for_dialogue(convo_struct,3,Anton(),"Anton",true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_trav",CONV_PRIORITY_MEDIUM) bpauseconv = false iDialogue_Stage++ endif endif endif endif endif break case 2 if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() i_dialogueTimer = get_game_timer() iDialogue_Stage++ endif break case 3 if not IS_MESSAGE_BEING_DISPLAYED() if isentityalive(mike()) and isentityalive(Milton()) and isentityalive(Anton()) if IS_PED_IN_ANY_VEHICLE(mike()) if IS_PED_IN_VEHICLE(Milton(),GET_VEHICLE_PED_IS_IN(mike())) and IS_PED_IN_VEHICLE(Anton(),GET_VEHICLE_PED_IS_IN(mike())) ADD_PED_FOR_DIALOGUE(convo_struct,0,mike(),"Michael",true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_BACK",CONV_PRIORITY_MEDIUM) bpauseconv = false iDialogue_Stage++ endif endif endif endif endif break case 4 if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() i_dialogueTimer = get_game_timer() iDialogue_Stage++ endif break case 5 if isentityalive(mike()) and isentityalive(Milton()) and isentityalive(Anton()) and get_game_timer() - i_dialogueTimer > 5000 if IS_PED_IN_VEHICLE(mike(),vehs[mvf_heli].id) and IS_PED_IN_VEHICLE(Milton(),vehs[mvf_heli].id) and IS_PED_IN_VEHICLE(Anton(),vehs[mvf_heli].id) and not IS_MESSAGE_BEING_DISPLAYED() ADD_PED_FOR_DIALOGUE(convo_struct,0,player_ped_id(),"Michael",true) add_ped_for_dialogue(convo_struct,2,Milton(),"SOL1actor",true) add_ped_for_dialogue(convo_struct,3,Anton(),"Anton",true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_CLUB",CONV_PRIORITY_MEDIUM) bpauseconv = false iDialogue_Stage++ endif endif endif break case 6 if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() i_dialogueTimer = get_game_timer() iDialogue_Stage++ else if IS_PED_IN_GROUP(Milton()) and IS_PED_IN_GROUP(Anton()) if bpauseconv PAUSE_FACE_TO_FACE_CONVERSATION(false) bpauseconv = false endif else if not bPauseconv PAUSE_FACE_TO_FACE_CONVERSATION(true) bpauseconv = true endif endif endif break case 7 if isentityalive(mike()) and isentityalive(Milton()) and isentityalive(Anton()) if IS_PED_IN_VEHICLE(mike(),vehs[mvf_heli].id) and IS_PED_IN_VEHICLE(Milton(),vehs[mvf_heli].id) and IS_PED_IN_VEHICLE(Anton(),vehs[mvf_heli].id) if not IS_MESSAGE_BEING_DISPLAYED() ADD_PED_FOR_DIALOGUE(convo_struct,0,player_ped_id(),"Michael",true) add_ped_for_dialogue(convo_struct,2,Milton(),"SOL1actor",true) add_ped_for_dialogue(convo_struct,3,Anton(),"Anton",true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_CLUB2",CONV_PRIORITY_MEDIUM) bpauseconv = false iDialogue_Stage++ endif endif else bpauseconv = false iDialogue_Stage++ endif endif break case 8 if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() i_dialogueTimer = get_game_timer() iDialogue_Stage++ else if IS_PED_IN_GROUP(Milton()) and IS_PED_IN_GROUP(Anton()) if bpauseconv PAUSE_FACE_TO_FACE_CONVERSATION(false) bpauseconv = false endif else if not bPauseconv PAUSE_FACE_TO_FACE_CONVERSATION(true) bpauseconv = true endif endif endif if GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(mike()),<<-1034.74194, -497.20056, 35.37177>>) < 180 KILL_FACE_TO_FACE_CONVERSATION() endif break // closer case 9 if GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(mike()),<<-1034.74194, -497.20056, 35.37177>>) < 180 and not IS_MESSAGE_BEING_DISPLAYED() if isentityalive(mike()) and isentityalive(Milton()) and isentityalive(Anton()) if IS_PED_IN_VEHICLE(mike(),vehs[mvf_heli].id) and IS_PED_IN_VEHICLE(Milton(),vehs[mvf_heli].id) and IS_PED_IN_VEHICLE(Anton(),vehs[mvf_heli].id) ADD_PED_FOR_DIALOGUE(convo_struct,0,player_ped_id(),"Michael",true) add_ped_for_dialogue(convo_struct,2,Milton(),"SOL1ACTOR",true) add_ped_for_dialogue(convo_struct,3,Anton(),"Anton",true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_LAND",CONV_PRIORITY_MEDIUM) bpauseconv = false iDialogue_Stage++ endif else bpauseconv = false iDialogue_Stage++ endif endif endif break case 10 if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() iDialogue_Stage++ else if IS_PED_IN_VEHICLE(mike(),vehs[mvf_heli].id) and IS_PED_IN_VEHICLE(Milton(),vehs[mvf_heli].id) and IS_PED_IN_VEHICLE(Anton(),vehs[mvf_heli].id) if bpauseconv PAUSE_FACE_TO_FACE_CONVERSATION(false) bpauseconv = false endif else KILL_FACE_TO_FACE_CONVERSATION() endif endif break case 11 if GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(mike()),<<-1098.04102, -458.76242, 34.38025>>) < 60 and not IS_MESSAGE_BEING_DISPLAYED() if isentityalive(mike()) and isentityalive(Milton()) and isentityalive(Anton()) if IS_PED_IN_VEHICLE(mike(),vehs[mvf_heli].id) and IS_PED_IN_VEHICLE(Milton(),vehs[mvf_heli].id) and IS_PED_IN_VEHICLE(Anton(),vehs[mvf_heli].id) if not IS_MESSAGE_BEING_DISPLAYED() ADD_PED_FOR_DIALOGUE(convo_struct,0,player_ped_id(),"Michael",true) add_ped_for_dialogue(convo_struct,3,Anton(),"Anton",true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_LAND2",CONV_PRIORITY_MEDIUM) iDialogue_Stage++ endif endif else iDialogue_Stage++ endif endif endif break case 12 if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() iDialogue_Stage++ endif break case 13 if not IS_PED_IN_VEHICLE(mike(),vehs[mvf_heli].id) and not IS_MESSAGE_BEING_DISPLAYED() and mission_substage = 4 ADD_PED_FOR_DIALOGUE(convo_struct,0,mike(),"Michael") if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_OFFICE",CONV_PRIORITY_MEDIUM) iDialogue_Stage++ endif endif break case 14 if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() if isentityalive(mike()) and isentityalive(Milton()) and isentityalive(Anton()) if not IS_PED_IN_VEHICLE(mike(),vehs[mvf_heli].id) and not IS_PED_IN_VEHICLE(Milton(),vehs[mvf_heli].id) and not IS_PED_IN_VEHICLE(Anton(),vehs[mvf_heli].id) and not IS_MESSAGE_BEING_DISPLAYED() ADD_PED_FOR_DIALOGUE(convo_struct,0,mike(),"Michael") add_ped_for_dialogue(convo_struct,3,Anton(),"Anton") if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_ANTON",CONV_PRIORITY_MEDIUM) iDialogue_Stage++ endif endif endif endif break case 16 break endswitch break endswitch endproc PROC PLACE_CONSTRUCTION() switch iconstructStage case 0 // constObjs[cobj_floor_bricks].model = prop_conc_blocks01a // constObjs[cobj_floor_bricks].vpos = <<954.371094,-1740.741577,30.032013>> // constObjs[cobj_floor_bricks].vRot = <<-0.507340,2.175111,19.144281>> constObjs[cobj_floor_pipes1].model = prop_pipes_conc_02 constObjs[cobj_floor_pipes1].vpos = <<964.50, -1734.80, 31.12>> constObjs[cobj_floor_pipes1].vRot = <<0.77, 1.55, -46.19>> constObjs[cobj_floor_wood1].model = prop_woodpile_04b constObjs[cobj_floor_wood1].vpos = <<966.680298,-1726.700073,29.804991>> constObjs[cobj_floor_wood1].vRot = <<-0.000000,0.000000,-8.021410>> constObjs[cobj_floor_wood2].model = prop_woodpile_01a constObjs[cobj_floor_wood2].vpos = <<967.535339,-1716.915161,29.452488>> constObjs[cobj_floor_wood2].vRot = <<-0.000000,0.000000,24.064224>> constObjs[cobj_floor_toolbox].model = prop_tool_box_04 constObjs[cobj_floor_toolbox].vpos = <<967.513000,-1717.480957,30.432888>> constObjs[cobj_floor_toolbox].vRot = <<0.000442,0.000436,-0.177949>> constObjs[cobj_floor_torch].model = prop_tool_torch constObjs[cobj_floor_torch].vpos = <<966.909607,-1716.346802,30.542349>> constObjs[cobj_floor_torch].vRot = <<-0.037208,-0.043627,29.224613>> constObjs[cobj_floor_hat1].model = prop_tool_hardhat constObjs[cobj_floor_hat1].vpos = <<966.425232,-1715.816284,30.449116>> constObjs[cobj_floor_hat1].vRot = <<6.111341,0.458651,0.062687>> constObjs[cobj_floor_hat2].model = prop_tool_hardhat constObjs[cobj_floor_hat2].vpos = <<966.772095,-1715.110229,30.449089>> constObjs[cobj_floor_hat2].vRot = <<5.993145,-0.263961,-78.341858>> constObjs[cobj_floor_pipes2].model = prop_pipes_conc_02 constObjs[cobj_floor_pipes2].vpos = <<966.067078,-1712.865356,30.47>> constObjs[cobj_floor_pipes2].vRot = <<-0.000000,0.000000,-78.495216>> constObjs[cobj_floor_gen].model = prop_generator_03b constObjs[cobj_floor_gen].vpos = <<956.564636,-1717.747681,29.522371>> constObjs[cobj_floor_gen].vRot = <<-2.104723,-1.473127,-22.815186>> constObjs[cobj_floor_bitsbox].model = prop_partsbox_01 constObjs[cobj_floor_bitsbox].vpos = <<952.706726,-1722.553223,29.788635>> constObjs[cobj_floor_bitsbox].vRot = <<-1.702785,0.017533,-0.143250>> constObjs[cobj_floor_cementbags].model = prop_cementbags01 constObjs[cobj_floor_cementbags].vpos = <<952.230164,-1724.708130,29.852713>> constObjs[cobj_floor_cementbags].vRot = <<-1.654111,-0.375194,-18.207163>> constObjs[cobj_floor_hat3].model = prop_tool_hardhat constObjs[cobj_floor_hat3].vpos = <<952.183899,-1724.966431,31.089499>> constObjs[cobj_floor_hat3].vRot = <<3.540115,-1.973789,-30.968338>> constObjs[cobj_roof1_toolbox].model = prop_tool_box_01 constObjs[cobj_roof1_toolbox].vpos = <<937.017273,-1717.222290,38.383656>> constObjs[cobj_roof1_toolbox].vRot = <<-0.326517,-0.000184,20.948112>> constObjs[cobj_roof1_wirecoil1].model = prop_cablespool_06 constObjs[cobj_roof1_wirecoil1].vpos = <<935.325073,-1717.042847,37.059296>> constObjs[cobj_roof1_wirecoil1].vRot = <<0.000117,0.000050,2.848160>> constObjs[cobj_roof1_wirecoil2].model = prop_cablespool_02 constObjs[cobj_roof1_wirecoil2].vpos = <<933.29, -1717.13, 38.05>> constObjs[cobj_roof1_wirecoil2].vRot = <<-166.80, 89.97, 0.00>> constObjs[cobj_roof1_light1].model = prop_worklight_03b constObjs[cobj_roof1_light1].vpos = <<934.624329,-1719.507080,37.058407>> constObjs[cobj_roof1_light1].vRot = <<0.081973,0.089925,115.900665>> constObjs[cobj_roof1_light2].model = prop_worklight_02a constObjs[cobj_roof1_light2].vpos = <<924.997070,-1722.984375,37.069111>> constObjs[cobj_roof1_light2].vRot = <<-0.000294,0.000053,-155.938309>> constObjs[cobj_roof1_gen].model = prop_generator_01a constObjs[cobj_roof1_gen].vpos = <<923.544678,-1722.781006,37.057270>> constObjs[cobj_roof1_gen].vRot = <<-0.000000,-0.000000,-142.093521>> constObjs[cobj_roof1_light3].model = prop_worklight_01a constObjs[cobj_roof1_light3].vpos = <<922.297913,-1722.262329,37.063000>> constObjs[cobj_roof1_light3].vRot = <<0.000000,0.000000,150.114929>> constObjs[cobj_roof1_hat].model = prop_tool_hardhat constObjs[cobj_roof1_hat].vpos = <<923.213501,-1720.317993,38.599242>> constObjs[cobj_roof1_hat].vRot = <<6.002445,-0.533969,37.316181>> constObjs[cobj_ally_light].model = prop_worklight_03b constObjs[cobj_ally_light].vpos = <<885.808472,-1716.161987,37.058754>> constObjs[cobj_ally_light].vRot = <<0.097367,0.172507,110.473656>> constObjs[cobj_ally_lightbox].model = prop_worklight_04a constObjs[cobj_ally_lightbox].vpos = <<886.306396,-1717.104004,37.495296>> constObjs[cobj_ally_lightbox].vRot = <<-0.000160,0.000082,131.737686>> constObjs[cobj_ally_gen].model = prop_generator_01a constObjs[cobj_ally_gen].vpos = <<886.096436,-1718.347168,37.063030>> constObjs[cobj_ally_gen].vRot = <<-0.000000,0.000000,85.943665>> constObjs[cobj_floor2_pipes].model = prop_pipes_conc_02 constObjs[cobj_floor2_pipes].vpos = <<868.939148,-1720.341064,30.067484>> constObjs[cobj_floor2_pipes].vRot = <<-0.000000,0.000000,-39.534081>> constObjs[cobj_floor2_barrier1].model = prop_barrier_work06a constObjs[cobj_floor2_barrier1].vpos = <<873.640320,-1724.027954,29.139503>> constObjs[cobj_floor2_barrier1].vRot = <<-0.000000,0.000000,-36.669292>> constObjs[cobj_floor2_barrier2].model = prop_barrier_work06a constObjs[cobj_floor2_barrier2].vpos = <<872.932312,-1721.566162,29.182261>> constObjs[cobj_floor2_barrier2].vRot = <<-0.000000,0.000000,-80.787041>> constObjs[cobj_roof2_light1].model = prop_worklight_03a constObjs[cobj_roof2_light1].vpos = <<912.577271,-1707.198120,41.968742>> constObjs[cobj_roof2_light1].vRot = <<0.042037,0.105869,-25.761972>> constObjs[cobj_roof2_bricks2].model = prop_conc_blocks01b constObjs[cobj_roof2_bricks2].vpos = <<908.721130,-1709.194336,41.939037>> constObjs[cobj_roof2_bricks2].vRot = <<-0.000000,0.000000,22.345350>> constObjs[cobj_roof2_gen].model = prop_generator_02a constObjs[cobj_roof2_gen].vpos = <<903.916809,-1713.888428,41.744926>> constObjs[cobj_roof2_gen].vRot = <<0.370807,-0.019272,-32.074944>> constObjs[cobj_roof2_light2].model = prop_worklight_04c constObjs[cobj_roof2_light2].vpos = <<903.121155,-1712.610107,42.679977>> constObjs[cobj_roof2_light2].vRot = <<0.015474,-0.008173,-66.029747>> constObjs[cobj_roof2_light3].model = prop_worklight_04d constObjs[cobj_roof2_light3].vpos = <<898.710571,-1712.316895,41.928101>> constObjs[cobj_roof2_light3].vRot = <<0.000234,-0.010211,40.727936>> constObjs[cobj_roof3_light1].model = prop_worklight_04b constObjs[cobj_roof3_light1].vpos = <<939.225891,-1703.688599,42.425728>> constObjs[cobj_roof3_light1].vRot = <<-0.096283,-0.013501,-163.893478>> constObjs[cobj_roof3_lightbox].model = prop_worklight_04a constObjs[cobj_roof3_lightbox].vpos = <<940.551025,-1702.150024,41.494343>> constObjs[cobj_roof3_lightbox].vRot = <<0.000029,0.000288,-94.455887>> constObjs[cobj_roof3_hardhat1].model = prop_tool_hardhat constObjs[cobj_roof3_hardhat1].vpos = <<937.240662,-1699.237061,42.398090>> constObjs[cobj_roof3_hardhat1].vRot = <<4.651952,-0.133757,18.810469>> constObjs[cobj_roof3_cementMixer].model = prop_cementmixer_02a constObjs[cobj_roof3_cementMixer].vpos = <<937.366394,-1688.932861,41.061703>> constObjs[cobj_roof3_cementMixer].vRot = <<-0.068064,-0.057211,-125.490036>> constObjs[cobj_roof3_cementStack].model = prop_cons_cements01 constObjs[cobj_roof3_cementStack].vpos = <<938.679077,-1687.393433,41.143913>> constObjs[cobj_roof3_cementStack].vRot = <<-0.000137,0.000294,-26.411013>> constObjs[cobj_roof3_gen].model = prop_generator_01a constObjs[cobj_roof3_gen].vpos = <<947.172974,-1676.223389,41.062077>> constObjs[cobj_roof3_gen].vRot = <<-0.000000,0.000000,21.199436>> constObjs[cobj_roof3_light2].model = prop_worklight_04d constObjs[cobj_roof3_light2].vpos = <<947.355164,-1677.839844,41.520042>> constObjs[cobj_roof3_light2].vRot = <<-0.000237,-0.026868,-67.621597>> constObjs[cobj_roof3_light3].model = prop_worklight_02a constObjs[cobj_roof3_light3].vpos = <<942.718811,-1678.550171,42.045441>> constObjs[cobj_roof3_light3].vRot = <<0.039819,-0.023036,80.240295>> constObjs[cobj_roof4_light1].model = prop_worklight_04c constObjs[cobj_roof4_light1].vpos = <<883.07269, -1686.47632, 46.13421>> constObjs[cobj_roof4_light1].vRot = <<0.085501,-0.010684,41.900021>> // constObjs[cobj_roof4_gen].model = prop_generator_02a // constObjs[cobj_roof4_gen].vpos = <<883.917236,-1685.532593,46.408543>> // constObjs[cobj_roof4_gen].vRot = <<0.347746,0.007220,0.011423>> constObjs[cobj_roof4_bitsbox].model = prop_partsbox_01 constObjs[cobj_roof4_bitsbox].vpos = <<888.877502,-1684.219604,46.130379>> constObjs[cobj_roof4_bitsbox].vRot = <<0.000367,0.028443,26.748081>> constObjs[cobj_roof4_toolbox].model = prop_tool_box_01 constObjs[cobj_roof4_toolbox].vpos = <<893.762451,-1681.357422,47.102341>> constObjs[cobj_roof4_toolbox].vRot = <<0.029734,0.001302,29.545460>> int objs for objs = 0 to enum_to_int(MAX_NUM_CONST_OBJS) - 1 if constObjs[objs].model = prop_pipes_conc_02 constObjs[objs].dupType = dups_PIPES endif if constObjs[objs].model = prop_tool_hardhat constObjs[objs].dupType = dups_hat endif if constObjs[objs].model = prop_partsbox_01 constObjs[objs].dupType = dups_partsbox endif if constObjs[objs].model = prop_tool_box_01 constObjs[objs].dupType = dups_toolbox01 endif if constObjs[objs].model = PROP_WORKLIGHT_03B constObjs[objs].dupType = dups_light3b endif if constObjs[objs].model = PROP_WORKLIGHT_02a constObjs[objs].dupType = dups_light2a endif if constObjs[objs].model = prop_generator_01a constObjs[objs].dupType = dups_gen1a endif if constObjs[objs].model = prop_worklight_04a constObjs[objs].dupType = dups_light4a endif if constObjs[objs].model = prop_barrier_work06a constObjs[objs].dupType = dups_barrier endif if constObjs[objs].model = prop_generator_02a constObjs[objs].dupType = dups_gen2a endif if constObjs[objs].model = prop_worklight_04c constObjs[objs].dupType = dups_light4c endif if constObjs[objs].model = prop_worklight_04d constObjs[objs].dupType = dups_light4d endif endfor bloadCar1 = false bCreateCar1 = false bloadMixer = false bCreateMixer = false bloadForklift = false bCreateForklift = false iconstructStage++ break case 1 if bStartConstructionChecks int obj1 for obj1 = 0 to enum_to_int(MAX_NUM_CONST_OBJS) - 1 if not constObjs[obj1].bloaded if GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(player_ped_id(),constObjs[obj1].vpos) <= constObjs[obj1].fcreateDist REQUEST_MODEL(constObjs[obj1].model) constObjs[obj1].bloaded = true endif else if GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(player_ped_id(),constObjs[obj1].vpos) > (constObjs[obj1].fcreateDist + 20) constObjs[obj1].bloaded = false elif GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(player_ped_id(),constObjs[obj1].vpos) <= constObjs[obj1].fcreateDist if not DOES_ENTITY_EXIST(constObjs[obj1].id) if HAS_MODEL_LOADED(constObjs[obj1].model) if GET_CLOSEST_OBJECT_OF_TYPE(constObjs[obj1].vpos,0.3,constObjs[obj1].model) = null if obj1 = enum_to_int(cobj_floor_hat1) or obj1 = enum_to_int(cobj_floor_hat2) or obj1 = enum_to_int(cobj_floor_toolbox) or obj1 = enum_to_int(cobj_floor_torch) if DOES_ENTITY_EXIST(constObjs[cobj_floor_wood2].id) constObjs[obj1].id = CREATE_OBJECT_NO_OFFSET(constObjs[obj1].model,constObjs[obj1].vpos) SET_ENTITY_ROTATION(constObjs[obj1].id,constObjs[obj1].vRot) ACTIVATE_PHYSICS(constObjs[obj1].id) endif else constObjs[obj1].id = CREATE_OBJECT_NO_OFFSET(constObjs[obj1].model,constObjs[obj1].vpos) SET_ENTITY_ROTATION(constObjs[obj1].id,constObjs[obj1].vRot) ACTIVATE_PHYSICS(constObjs[obj1].id) endif else constObjs[obj1].id = GET_CLOSEST_OBJECT_OF_TYPE(constObjs[obj1].vpos,2,constObjs[obj1].model) endif endif endif endif endif endfor for obj1 = 0 to enum_to_int(MAX_NUM_CONST_OBJS) - 1 if not constObjs[obj1].bloaded and GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(player_ped_id(),constObjs[obj1].vpos) > (constObjs[obj1].fcreateDist + 10) if constObjs[obj1].dupType = dups_none SET_MODEL_AS_NO_LONGER_NEEDED(constObjs[obj1].model) SAFE_RELEASE_OBJECT(constObjs[obj1].id) else bool bcleanup bcleanup = true int obj2 for obj2 = 0 to enum_to_int(MAX_NUM_CONST_OBJS) - 1 if obj2 != obj1 if constObjs[obj1].dupType = constObjs[obj2].dupType and constObjs[obj2].bloaded bcleanup = false endif endif endfor if bcleanup SET_MODEL_AS_NO_LONGER_NEEDED(constObjs[obj1].model) SAFE_RELEASE_OBJECT(constObjs[obj1].id) else SAFE_RELEASE_OBJECT(constObjs[obj1].id) endif endif endif endfor if not bLoadCar1 if GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(player_ped_id(),vMafiaCar) < 55 request_model(FUGITIVE) bLoadCar1 = true bCreateCar1 = true endif else if GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(player_ped_id(),vMafiaCar) < 55 if bCreateCar1 if HAS_MODEL_LOADED(FUGITIVE) if not isentityalive(vehs[mvf_car1].id) CLEAR_AREA_OF_VEHICLES(vMafiaCar,2) vehs[mvf_car1].id = CREATE_VEHICLE(FUGITIVE,vMafiaCar, hMafiaCar) SET_VEHICLE_COLOUR_COMBINATION(vehs[mvf_car1].id,0) bCreateCar1 = false endif endif endif elif GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(player_ped_id(),vMafiaCar) > 60 SET_MODEL_AS_NO_LONGER_NEEDED(FUGITIVE) SAFE_RELEASE_VEHICLE(vehs[mvf_car1].id) bLoadCar1 = false endif endif if not bLoadMixer if GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(player_ped_id(),<<956.9180, -1693.6169, 28.2963>>) <= 60 REQUEST_MODEL(MIXER) bLoadMixer = true bCreateMixer = true endif else if GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(player_ped_id(),<<956.9180, -1693.6169, 28.2963>>) <= 60 if bCreateMixer if HAS_MODEL_LOADED(mixer) if not isentityalive(vehs[mvf_mixer].id) CLEAR_AREA_OF_VEHICLES(<<956.9180, -1693.6169, 28.2963>>,2) vehs[mvf_mixer].id = CREATE_VEHICLE(MIXER,<<956.9180, -1693.6169, 28.2963>>, 177.4760) bCreateMixer = false endif endif endif elif GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(player_ped_id(),<<956.9180, -1693.6169, 28.2963>>) > 65 SET_MODEL_AS_NO_LONGER_NEEDED(mixer) SAFE_RELEASE_VEHICLE(vehs[mvf_mixer].id) bLoadMixer = false endif endif if not bLoadForklift if GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(player_ped_id(),<<966.4474, -1720.8872, 29.6126>>) <= 45 request_model(Forklift) bLoadForkLift = true bCreateForkLift = true endif else if GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(player_ped_id(),<<966.4474, -1720.8872, 29.6126>>) <=45 if bCreateForklift if HAS_MODEL_LOADED(Forklift) if not isentityalive(vehs[mvf_forklift].id) CLEAR_AREA_OF_VEHICLES(<<966.4474, -1720.8872, 29.6126>>,2) vehs[mvf_forklift].id = CREATE_VEHICLE(FORKLIFT,<<966.4474, -1720.8872, 29.6126>>, 65.3199) bCreateForkLift = false endif endif endif elif GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(player_ped_id(),<<966.4474, -1720.8872, 29.6126>>) > 50 SET_MODEL_AS_NO_LONGER_NEEDED(Forklift) SAFE_RELEASE_VEHICLE(vehs[mvf_Forklift].id) bLoadForklift = false endif endif endif break endswitch endproc proc mission_checks() IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID()) IF NOT bVehStatsGrabbed VEHICLE_INDEX vehTemp = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID()) IF vehTemp != vehs[mvf_heli].id INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(vehTemp, SOL1_CAR_DAMAGE) ENDIF INFORM_MISSION_STATS_OF_SPEED_WATCH_ENTITY(vehTemp, SOL1_MAX_SPEED) bVehStatsGrabbed = TRUE ENDIF ELSE IF bVehStatsGrabbed INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(NULL, SOL1_CAR_DAMAGE) INFORM_MISSION_STATS_OF_SPEED_WATCH_ENTITY(NULL, SOL1_MAX_SPEED) bVehStatsGrabbed = FALSE ENDIF ENDIF IF NOT bHeliStatsGrabbed IF DOES_ENTITY_EXIST(vehs[mvf_heli].id) AND IS_VEHICLE_DRIVEABLE(vehs[mvf_heli].id) INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(vehs[mvf_heli].id, SOL1_HELI_DAMAGE) bHeliStatsGrabbed = TRUE ENDIF ENDIF death_checks() //audio if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() bpauseconv = false endif if isentityalive(mike()) AUDIO_dialogue(int_to_enum(MSF_MISSION_STAGE_FLAGS,mission_stage)) endif SET_ALL_RANDOM_PEDS_FLEE_THIS_FRAME(player_id()) if mission_stage = enum_to_int(msf_1_Stealth_to_roof) or( mission_stage = enum_to_int(msf_0_get_to_warehouse) and mission_substage > 2) and not IS_CUTSCENE_PLAYING() manage_Stealth_stage() endif if mission_stage = enum_to_int(msf_1_Stealth_to_roof) SUPPRESS_SHOCKING_EVENT_TYPE_NEXT_FRAME(SHOCKING_EVENT_SERIOUS_DANGER) SUPPRESS_SHOCKING_EVENT_TYPE_NEXT_FRAME(SHOCKING_EVENT_DANGEROUS) manage_GIANNI() endif Manage_Doors() Manage_Stealth_Door_Locks() if mission_stage >= enum_to_int(msf_1_Stealth_to_roof) and mission_stage < enum_to_int(msf_3_get_to_sol) if GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(player_ped_id(),vheliRoof) > 130 MISSION_FAILED(mff_left_Area) elif GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(player_ped_id(), vheliRoof) > 120 if not bFailWarning PRINT_NOW("SOL1_RTNM",DEFAULT_GOD_TEXT_TIME,1) bfailWarning = true endif else bfailWarning = false endif elif mission_stage = enum_to_int(msf_3_get_to_sol) if not IS_CUTSCENE_PLAYING() and mission_substage < 6 if GET_DISTANCE_BETWEEN_ENTITIES(player_ped_id(),Milton()) > 80 or GET_DISTANCE_BETWEEN_ENTITIES(player_ped_id(),anton()) > 80 MISSION_FAILED(mff_left_peds) elif GET_DISTANCE_BETWEEN_ENTITIES(player_ped_id(),Milton()) > 60 if not bfailMiltonWarning PRINT_NOW("SOl1_RTNMILT",DEFAULT_GOD_TEXT_TIME,1) bfailMiltonWarning = true endif elif GET_DISTANCE_BETWEEN_ENTITIES(player_ped_id(),anton()) > 60 if not bfailAntonWarning PRINT_NOW("SOl1_RTNANT",DEFAULT_GOD_TEXT_TIME,1) bfailAntonWarning = true endif else bfailAntonWarning = FALSE bfailMiltonWarning = FALSE endif endif endif // update partners id's Mafia[maf_car].partner = mafia[maf_car_talking].id Mafia[maf_car_talking].partner = mafia[maf_car].id Mafia[maf_walkway_door].partner = mafia[maf_worker_walkway].id Mafia[maf_worker_walkway].partner = mafia[maf_walkway_door].id vector playerCoord = GET_ENTITY_COORDS(mike()) int ped for ped = 0 to enum_to_int(NUM_OF_Mafia_PEDS) -1 if isentityalive(mafia[ped].id) //attach clipboards and objects to the peds left hand if DOES_ENTITY_EXIST(mafia[ped].obj) and not mafia[ped].bObjAttached if DOES_ENTITY_HAVE_PHYSICS(mafia[ped].obj) ATTACH_ENTITY_TO_ENTITY(mafia[ped].obj,mafia[ped].id ,GET_PED_BONE_INDEX(mafia[ped].id,BONETAG_PH_L_HAND),<<0,0,0>>,<<0,0,0>>) mafia[ped].bObjAttached = true endif endif if IS_ENTITY_PLAYING_ANIM(mafia[ped].id,AnimDict_PHONE,animPhone) if not mafia[ped].bOnPhone mafia[ped].objphone = CREATE_OBJECT(modelPhone, GET_ENTITY_COORDS(mafia[ped].id)) ATTACH_ENTITY_TO_ENTITY(mafia[ped].objPhone,mafia[ped].id ,GET_PED_BONE_INDEX(mafia[ped].id,BONETAG_PH_R_HAND),<<0,0,0>>,<<0,0,0>>) mafia[ped].bOnPhone = true endif endif //blip the peds that close to mike vector pedCoord = GET_ENTITY_COORDS(mafia[ped].id) float fzDif = pedcoord.z - playerCoord.z if fzDif < 0 fzDif *= -1 endif if GET_DISTANCE_BETWEEN_ENTITIES(mike(),mafia[ped].id) < mafia[ped].fBlipRange and fzDif < 4.5 mafia[ped].bForceBlip = true else mafia[ped].bForceBlip = false endif endif #if is_debug_build mafia[ped].sDebug = enum_to_int(mafia[ped].sit) #endif endfor if isentityalive(player_ped_id()) PLACE_CONSTRUCTION() endif #if is_debug_build wAI_stage = enum_to_int(eAI_stage) debug_noise = GET_PLAYER_CURRENT_STEALTH_NOISE(player_id()) Display_Placeholder() #endif endproc proc mission_setup() peds[mpf_mike].id = PLAYER_PED_ID() remove_relationship_group(rel_group_enemies) remove_relationship_group(rel_friends) add_relationship_group("enemies", rel_group_enemies) ADD_RELATIONSHIP_GROUP("rel_Friends", REL_friends) //haters set_relationship_between_groups(acquaintance_type_ped_hate,relgrouphash_player,rel_group_enemies) set_relationship_between_groups(acquaintance_type_ped_hate,rel_group_enemies,relgrouphash_player) set_relationship_between_groups(acquaintance_type_ped_hate,rel_friends,rel_group_enemies) set_relationship_between_groups(acquaintance_type_ped_hate,rel_group_enemies,rel_friends) //friends SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE,RELGROUPHASH_PLAYER,rel_friends) SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_LIKE,rel_friends,RELGROUPHASH_PLAYER) set_relationship_between_groups(acquaintance_type_ped_like,rel_group_enemies,rel_group_enemies) request_additional_text("SOL1", mission_text_slot) if is_player_playing(player_id()) set_player_control(player_id(), true) endif enable_dispatch_service(dt_ambulance_department,false) enable_dispatch_service(dt_fire_department, false) set_wanted_level_multiplier(0.3) CLEAR_PLAYER_WANTED_LEVEL(player_id()) set_vehicle_model_is_suppressed(FUGITIVE,true) set_vehicle_model_is_suppressed(FROGGER,true) DISABLE_TAXI_HAILING() DISABLE_CHEAT(CHEAT_TYPE_SPAWN_VEHICLE,true) // Initialise all the doors we're gonna be using Doors_Initialise() if DOES_SCENARIO_GROUP_EXIST("SOLOMON_GATE") if IS_SCENARIO_GROUP_ENABLED("SOLOMON_GATE") SET_SCENARIO_GROUP_ENABLED("SOLOMON_GATE",false) endif endif SET_AMBIENT_ZONE_STATE("AZ_SOL_1_FACTORY_AREA_CONSTRUCTIONS", TRUE, TRUE) SET_INTERIOR_DISABLED( INTERIOR_V_58_SOL_OFFICE, FALSE) SET_WEATHER_TYPE_PERSIST("EXTRASUNNY") ADD_SCENARIO_BLOCKING_AREA(<<1038.43750, -1769.24170, 10>>,<<794.32159, -1989.40137, 60>>) if isentityalive(GET_MISSION_START_VEHICLE_INDEX()) if IS_THIS_MODEL_A_HELI(GET_ENTITY_MODEL(GET_MISSION_START_VEHICLE_INDEX())) SET_MISSION_START_VEHICLE_AS_VEHICLE_GEN(<<-1106.3323, -443.0989, 34.3837>>, 116.5404) RESOLVE_VEHICLES_INSIDE_ANGLED_AREA(<<-1034.93652, -497.61383, 35.33385>>,<<-1009.55530, -483.44385, 42.02816>>,20,<<-1106.3323, -443.0989, 34.3837>>, 116.5404, FALSE) //BUG FIX 1399301 Added FALSE to clean up area ELSE SET_MISSION_START_VEHICLE_AS_VEHICLE_GEN(<<-1024.6364, -497.7582, 35.9242>>, 86.6830) RESOLVE_VEHICLES_INSIDE_ANGLED_AREA(<<-1034.93652, -497.61383, 35.33385>>,<<-1009.55530, -483.44385, 42.02816>>,20,<<-1024.5975, -496.4365, 35.9291>>, 86.4749, FALSE) //BUG FIX 1399301 Added FALSE to clean up area ENDIF ENDIF if is_replay_in_progress() or IS_REPEAT_PLAY_ACTIVE() if IS_REPLAY_IN_PROGRESS() iskiptostage = get_replay_mid_mission_stage() if g_bshitskipaccepted iskiptostage++ endif if iskiptostage >= 4 iSkipToStage = 4 endif elif IS_REPEAT_PLAY_ACTIVE() iSkipToStage = 0 endif // New replay streaming IF IS_REPLAY_IN_PROGRESS() VECTOR vSkipToCoord FLOAT fSkipToHeading GET_SKIP_STAGE_COORD_AND_HEADING(int_to_enum(MSF_MISSION_STAGE_FLAGS,iSkipToStage), vSkipToCoord, fSkipToHeading) START_REPLAY_SETUP(vSkipToCoord, fSkipToHeading) ENDIF bdoskip = true else PRINTLN("Start mission Loading") WHILE NOT Update_Skip_Streaming(sAssetData) WAIT(0) ENDWHILE PRINTLN("End mission Loading") g_replay.iReplayInt[0] = 0 g_replay.iReplayInt[1] = 0 set_replay_mid_mission_stage_with_name(0,"stage 0: Get Heli") mission_stage = enum_to_int(msf_0_get_to_warehouse) endif mission_substage = stage_entry if is_player_playing(player_id()) set_player_control(player_id(), true) endif endproc // ----------------------------------------------------------------------------------------------------------- // Mission stages // ----------------------------------------------------------------------------------------------------------- Proc Run_Init_CutScene() #IF IS_DEBUG_BUILD IF IS_CUTSCENE_ACTIVE() IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J) STOP_CUTSCENE() REMOVE_CUTSCENE() WHILE IS_CUTSCENE_ACTIVE() WAIT(0) ENDWHILE ENDIF ENDIF #ENDIF IF NOT b_cutscene_loaded if NOT IS_CUTSCENE_ACTIVE() SET_INTERIOR_DISABLED( INTERIOR_V_58_SOL_OFFICE, FALSE) REQUEST_CUTSCENE("SOL_1_INT_ALT") WAIT(0) endif IF HAS_CUTSCENE_LOADED() //pre mission setup SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE) SET_ALL_EXIT_STATES() set_peds_CS_OUTFITS() START_CUTSCENE() b_cutscene_loaded = TRUE ENDIF ENDIF endproc proc ST_0_GET_TO_WAREHOUSE() switch mission_substage case STAGE_ENTRY if IS_REPLAY_IN_PROGRESS() Load_Asset_Model(sAssetData,CAVALCADE2) load_Asset_model(sAssetdata,COQUETTE) bStartConstructionChecks = false mission_substage++ else Run_Init_CutScene() IF b_cutscene_loaded if IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME) endif Load_Asset_Model(sAssetData,CAVALCADE2) load_Asset_model(sAssetData,COQUETTE) bStartConstructionChecks = false mission_substage++ endif endif break case 1 IF b_cutscene_loaded and IS_CUTSCENE_PLAYING() MISSION_FLOW_RELEASE_TRIGGER_SCENE_ASSETS(SP_MISSION_SOLOMON_1)//BUG FIX 1402789 SET_SRL_POST_CUTSCENE_CAMERA(<<-1014.6,-481.4,37.9>>, CONVERT_ROTATION_TO_DIRECTION_VECTOR(<<0.0, 0.0,121.2896>>)) SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<-1037.91162, -495.88333, 34>>,<<-1016.92767, -471.04614, 37>>,false) CLEAR_AREA_OF_VEHICLES(<<-1028.38049, -486.24539, 37.13475>>,15) REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST) b_cutscene_loaded = false endif if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael") REPLAY_STOP_EVENT() println("mike") bcs_Mike = true endif if CAN_SET_EXIT_STATE_FOR_CAMERA() println("cam") bcs_cam = true endif if (bcs_Mike and bcs_cam) or IS_REPLAY_IN_PROGRESS() if IS_SCREEN_FADED_OUT() or IS_SCREEN_FADING_OUT() DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME) endif //CAVALCADE2 if not IS_ANY_VEHICLE_NEAR_POINT(<<-1036.98743, -491.78458, 35.57412>>,1.8) vehs[mvf_cavalcade2].id = CREATE_VEHICLE(CAVALCADE2,<<-1036.5834, -492.1475, 35.5822>>, 209.0078) endif Unload_Asset_Model(sAssetData,cavalcade2) //COQUETTE if not IS_ANY_VEHICLE_NEAR_POINT(<<-1033.80017, -489.91208, 35.83315>>,1.8) vehs[mvf_coquette].id = create_vehicle(coquette,<<-1033.6208, -490.2622, 35.8286>>, 210.3952) endif unload_asset_model(sAssetData,coquette) SET_ENTITY_COORDS(mike(),<<-1016.53870, -482.88400, 36.07111>>) SET_ENTITY_HEADING(mike(),121.31) SET_GAMEPLAY_CAM_RELATIVE_HEADING() SET_GAMEPLAY_CAM_RELATIVE_PITCH() ADD_PED_FOR_DIALOGUE(convo_struct,1,null,"SOLOMON") ADD_PED_FOR_DIALOGUE(convo_struct,0,mike(),"MICHAEL") bStageLoaded = false bStageLoaded2 = false TASK_GO_STRAIGHT_TO_COORD(MIKE(),<<-1021.03033, -485.61594, 36.13899 >>,PEDMOVE_WALK) FORCE_PED_MOTION_STATE(MIKE(),MS_ON_FOOT_WALK,FALSE,FAUS_CUTSCENE_EXIT) SET_PED_MIN_MOVE_BLEND_RATIO(MIKE(),PEDMOVE_WALK) prep_stop_cutscene(true) RENDER_SCRIPT_CAMS(false,false,0,false,true) NEW_LOAD_SCENE_STOP() REMOVE_CUTSCENE() SET_SCRIPTS_SAFE_FOR_CUTSCENE(false) SET_ALL_EXIT_STATES() DISPLAY_RADAR(true) display_hud(true) b_cutscene_loaded = false bstreamloaded = false bLoadMusicStream = false ADD_CONTACT_TO_PHONEBOOK(CHAR_SOLOMON,MICHAEL_BOOK,true) init_enemy_data() mission_substage++ endif break case 2 // *dependent for playin AI / sol phone call* if not bStageLoaded if GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(mike(),<<970.6778, -1754.9475, 30.0644>>) < 200 SET_INTERIOR_DISABLED( INTERIOR_V_58_SOL_OFFICE, TRUE) LOAD_ASSET_MODEL(sAssetData,S_M_Y_CONSTRUCT_01) Load_Asset_AnimDict(sAssetData,animDict_kneel_enter) Load_Asset_AnimDict(sAssetData,animDict_kneel_Idle) Load_Asset_AnimDict(sAssetData,animDict_kneel_exit) Load_Asset_AnimDict(sAssetData,AnimDict_gestures) Load_Asset_AnimDict(sAssetData,AnimDict_flinch) Load_Asset_AnimDict(sAssetData, AnimDict_ClipBoard) Load_Asset_AnimDict(sAssetData, AnimDict_PHONE) LOAD_ASSET_RECORDING(sAssetData,001,"SOL1REC") REQUEST_CLIP_SET("MOVE_M@CLIPBOARD") bLoadMusicStream = true if isentityalive(vehs[mvf_coquette].id) if not IS_PED_IN_VEHICLE(player_ped_id(),vehs[mvf_coquette].id) SET_VEHICLE_AS_NO_LONGER_NEEDED(vehs[mvf_coquette].id) endif endif if isentityalive(vehs[mvf_cavalcade2].id) if not IS_PED_IN_VEHICLE(player_ped_id(),vehs[mvf_cavalcade2].id) SET_VEHICLE_AS_NO_LONGER_NEEDED(vehs[mvf_cavalcade2].id) endif endif bStageLoaded = true endif else if GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(mike(),<<970.6778, -1754.9475, 30.0644>>) < 150 and HAS_MODEL_LOADED(S_M_Y_CONSTRUCT_01) and HAS_CLIP_SET_LOADED("MOVE_M@CLIPBOARD") if not isentityalive(mafia[maf_car].id) and not mafia[maf_car].bkilled create_Mafiaenemy(maf_car,24) endif if not isentityalive(mafia[maf_car_talking].id) and not mafia[maf_car_talking].bkilled create_Mafiaenemy(maf_car_talking,24) endif bStartConstructionChecks = true elif GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(mike(),<<970.6778, -1754.9475, 30.0644>>)> 300 SAFE_DELETE_PED(mafia[maf_car].id) SAFE_DELETE_PED(mafia[maf_car_talking].id) LOAD_ASSET_MODEL(sAssetData,S_M_Y_CONSTRUCT_01) Unload_Asset_Anim_Dict(sAssetData,animDict_kneel_enter) unLoad_Asset_Anim_Dict(sAssetData,animDict_kneel_Idle) unLoad_Asset_Anim_Dict(sAssetData,animDict_kneel_exit) unLoad_Asset_Anim_Dict(sAssetData,AnimDict_gestures) unLoad_Asset_Anim_Dict(sAssetData,AnimDict_flinch) unLoad_Asset_Anim_Dict(sAssetData,AnimDict_ClipBoard) unLoad_Asset_Anim_Dict(sAssetData,AnimDict_PHONE) unLOAD_ASSET_RECORDING(sAssetData,001,"SOL1REC") REMOVE_CLIP_SET("MOVE_M@CLIPBOARD") bStageLoaded = false endif endif if not bStageLoaded2 if GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(mike(),<<970.6778, -1754.9475, 30.0644>>) < DEFAULT_CUTSCENE_LOAD_DIST LOAD_ASSET_MODEL(sAssetData,FROGGER) LOAD_ASSET_MODEL(sAssetData,G_M_M_ARMGOON_01) load_asset_model(sAssetData,modelpilot) load_asset_model(sAssetData,modelrocco) load_asset_model(sAssetData,modelActor) load_asset_model(sAssetData,modelDirector) load_Asset_model(sAssetData,modelGianni) Load_Asset_Model(sAssetData,modelclipboard) NEW_LOAD_SCENE_START(<<966.79,-1749.25,35.66>>,<<-0.58,0.81,-0.13>>,65) bStageLoaded2 = true endif else if GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(mike(),<<970.6778, -1754.9475, 30.0644>>) > DEFAULT_CUTSCENE_UNLOAD_DIST unLOAD_ASSET_MODEL(sAssetData,FROGGER) unLOAD_ASSET_MODEL(sAssetData,G_M_M_ARMGOON_01) unload_asset_model(sAssetData,modelpilot) unload_asset_model(sAssetData,modelrocco) unload_asset_model(sAssetData,modelActor) unload_asset_model(sAssetData,modelDirector) unload_Asset_model(sAssetData,modelGianni) unLoad_Asset_Model(sAssetData,modelclipboard) NEW_LOAD_SCENE_STOP() bStageLoaded2 = false endif endif if not IS_AUDIO_SCENE_ACTIVE("SOL_1_DRIVE_TO_EAST_LS") if IS_PED_IN_ANY_VEHICLE(mike()) START_AUDIO_SCENE("SOL_1_DRIVE_TO_EAST_LS") endif endif if bLoadMusicStream if LOAD_STREAM("Helicopter_Stream","SOL_1_MR_RICHARDS_SOUNDS") bstreamloaded = true bLoadMusicStream = false endif endif if IS_PLAYER_AT_LOCATION_ANY_MEANS(sLocatesData,<<970.6778, -1754.9475, 30.0644>>,<<0.1,0.1,LOCATE_SIZE_HEIGHT>>,true,"SOL1_ELS",true) or (DOES_BLIP_EXIST(sLocatesData.LocationBlip) and IS_ENTITY_IN_ANGLED_AREA(mike(),<<976.58124, -1753.84753, 33>>,<<965.19244, -1753.20862, 28>>,8)) if IS_PED_IN_ANY_VEHICLE(mike()) BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(GET_VEHICLE_PED_IS_IN(mike())) endif CLEAR_MISSION_LOCATE_STUFF(sLocatesData) if IS_AUDIO_SCENE_ACTIVE("SOL_1_DRIVE_TO_EAST_LS") STOP_AUDIO_SCENE("SOL_1_DRIVE_TO_EAST_LS") endif SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<-1037.91162, -495.88333, 34>>,<<-1016.92767, -471.04614, 37>>,true) HANG_UP_AND_PUT_AWAY_PHONE() iDialogue_Stage = 4 iskipCS = 0 set_replay_mid_mission_stage_with_name(1,"stage 1: Stealth to roof") mission_substage++ endif break case 3 if IS_PED_IN_ANY_VEHICLE(mike()) if IS_VEHICLE_ALMOST_STOPPED(GET_VEHICLE_PED_IS_IN(mike())) vehs[mvf_Replay_car].id = GET_VEHICLE_PED_IS_IN(mike()) SET_ENTITY_AS_MISSION_ENTITY(vehs[mvf_Replay_car].id) idelay = get_game_timer() mission_substage++ endif else idelay = get_game_timer() mission_substage++ endif break case 4 if not bstreamloaded if LOAD_STREAM("Helicopter_Stream","SOL_1_MR_RICHARDS_SOUNDS") bstreamloaded = true endif endif if (get_Game_timer() - idelay > 1000 and bstreamloaded) or get_Game_timer() - idelay > 40000 REPLAY_RECORD_BACK_FOR_TIME(5.0, 13.0, REPLAY_IMPORTANCE_HIGHEST) SET_HD_AREA(GET_ENTITY_COORDS(PLAYER_PED_ID()),10) //cameraIndex = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED,<<968.5402, -1753.5344, 32.8193>>, <<-2.5886, 0.0000, 31.2658>>,30.0347) cameraIndex = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED,<<964.352600,-1745.761597,35.290886>>,<<5.967328,0.174521,36.580875>>,30.034700) //BUG FIX 1201813 set_cam_active(cameraIndex,true) //SET_CAM_PARAMS(cameraIndex,<<969.5601, -1752.7874, 39.0872>>, <<5.7838, -0.0000, 40.9145>>,30.0347,10000,GRAPH_TYPE_LINEAR,GRAPH_TYPE_LINEAR) SET_CAM_PARAMS(cameraIndex,<<963.869385,-1745.322632,37.706657>>,<<9.215145,0.174522,34.265663>>,30.034700,9000,GRAPH_TYPE_LINEAR,GRAPH_TYPE_LINEAR) //BUG FIX 1201813 prep_start_cutscene(false,<<973.6251, -1761.7423, 37.0542>>,true,false,true,0,SPC_NONE,false) CLEAR_AREA(<<970.6778, -1754.9475, 30.0644>>,150,true) CLEAR_AREA(vheliRoof,150,true) //heli vehs[mvf_heli].id = CREATE_VEHICLE(FROGGER,<<977, -1658.4874,60>>, 74) SET_FORCE_HD_VEHICLE(vehs[mvf_heli].id, true) SET_VEHICLE_COLOUR_COMBINATION(vehs[mvf_heli].id,0) SET_VEHICLE_ENGINE_CAN_DEGRADE(vehs[mvf_heli].id,false) PLAY_STREAM_FROM_VEHICLE(vehs[mvf_heli].id) //rocco peds[mpf_rocco].id = CREATE_PED_INSIDE_VEHICLE(vehs[mvf_heli].id,PEDTYPE_MISSION,modelrocco,VS_FRONT_RIGHT) // pilot peds[mpf_pilot].id = create_ped_inside_vehicle(vehs[mvf_heli].id,PEDTYPE_MISSION,modelpilot) if not IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehs[mvf_heli].id) START_PLAYBACK_RECORDED_VEHICLE(vehs[mvf_heli].id,1,"SOL1REC") SKIP_TIME_IN_PLAYBACK_RECORDED_VEHICLE(vehs[mvf_heli].id,14500) //15000 BUG FIX 1201813 SET_PLAYBACK_SPEED(vehs[mvf_heli].id,-0.8) SET_HELI_BLADES_FULL_SPEED(vehs[mvf_heli].id) endif //more peds if not isentityalive(Gianni()) peds[mpf_Gianni].id = CREATE_PED(pedtype_mission,modelGianni,vGianni,hGianni) SETUP_Gianni() endif if not isentityalive(mafia[maf_worker_vent].id) create_Mafiaenemy(maf_worker_vent,14) endif if not isentityalive(mafia[maf_worker_alone].id) create_Mafiaenemy(maf_worker_alone,24) endif //actor peds[mpf_milton].id = CREATE_PED(PEDTYPE_MISSION,modelActor, <<914.52319, -1699.65991, 50.13501>> ) //<<915.56940, -1698.89111, 50.13412>> //BUG FIX 1201813 swapping their start coords round so they don't cross each other. SETUP_Milton() //director peds[mpf_Anton].id = CREATE_PED(PEDTYPE_MISSION,modelDirector, <<916.29724, -1699.75378, 50.13508>>) //<<913.85162, -1698.85193, 50.13412>> //BUG FIX 1201813 SETUP_Anton() //veh if isentityalive(vehs[mvf_Replay_car].id) SET_ENTITY_COORDS(vehs[mvf_Replay_car].id,<<971.4699, -1754.8250, 30.0953>>) set_entity_heading(vehs[mvf_Replay_car].id, 87.1515) SET_MISSION_LAST_VEHICLE_AS_VEHICLE_GEN(<<971.4699, -1754.8250, 30.0953>>,87.1515) endif if not IS_AUDIO_SCENE_ACTIVE("SOL_1_COMPOUND_OVERVIEW_CUTSCENE") START_AUDIO_SCENE("SOL_1_COMPOUND_OVERVIEW_CUTSCENE") endif TRIGGER_MUSIC_EVENT("SOL1_BEGIN") REQUEST_CUTSCENE("Sol_1_mcs_1_concat") SET_ALL_EXIT_STATES() set_peds_CS_OUTFITS() Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Milton",PED_COMP_TORSO,1,0,CS_MILTON) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Milton",PED_COMP_LEG,1,0,CS_MILTON) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Milton",PED_COMP_feet,1,0,CS_MILTON) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Milton",PED_COMP_JBIB,1,0,CS_MILTON) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Milton",PED_COMP_TORSO,1,0,IG_MILTON) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Milton",PED_COMP_LEG,1,0,IG_MILTON) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Milton",PED_COMP_feet,1,0,IG_MILTON) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Milton",PED_COMP_JBIB,1,0,IG_MILTON) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Anton",PED_COMP_TORSO,0,0,CSB_ANTON) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Anton",PED_COMP_LEG,0,0,CSB_ANTON) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Anton",PED_COMP_TORSO,0,0,U_M_Y_ANTONB) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Anton",PED_COMP_LEG,0,0,U_M_Y_ANTONB) idelay = get_game_timer() iskipDelay = get_game_timer() CLEAR_PLAYER_WANTED_LEVEL(player_id()) set_wanted_level_multiplier(0.0) mission_substage++ else SET_PLAYER_CONTROL(player_id(),false,SPC_LEAVE_CAMERA_CONTROL_ON) endif break case 5 if get_game_timer() - idelay > 8000 TASK_FOLLOW_NAV_MESH_TO_COORD(peds[mpf_milton].id,<<908.91437, -1689.93665, 50.13943>>,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP,DEFAULT_NAVMESH_RADIUS,ENAV_SUPPRESS_EXACT_STOP) TASK_LOOK_AT_ENTITY(peds[mpf_milton].id,vehs[mvf_heli].id,-1,SLF_WHILE_NOT_IN_FOV| SLF_WIDEST_YAW_LIMIT | SLF_WIDEST_PITCH_LIMIT) TASK_FOLLOW_NAV_MESH_TO_COORD(peds[mpf_Anton].id,<<912.44019, -1691.37793, 50.14446>>,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP,DEFAULT_NAVMESH_RADIUS,ENAV_SUPPRESS_EXACT_STOP) TASK_LOOK_AT_ENTITY(peds[mpf_Anton].id,vehs[mvf_heli].id,-1,SLF_WHILE_NOT_IN_FOV| SLF_WIDEST_YAW_LIMIT | SLF_WIDEST_PITCH_LIMIT) OPEN_SEQUENCE_TASK(seq) TASK_FOLLOW_NAV_MESH_TO_COORD(NULL,<<914.64410, -1689.74878, 50.14659>>,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP) TASK_TURN_PED_TO_FACE_ENTITY(NULL, vehs[mvf_heli].id, -1) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(Gianni(), seq) CLEAR_SEQUENCE_TASK(seq) SET_CAM_PARAMS(cameraIndex,<<876.181946,-1710.500854,46.637653>>,<<9.872696,0.003638,-59.444042>>,26.791100,0,GRAPH_TYPE_LINEAR,GRAPH_TYPE_LINEAR) //BUG FIX 1201813 camFollow = CREATE_CAMERA_WITH_PARAMS(CAMTYPE_SCRIPTED,<<874.506042,-1707.566650,48.956787>>,<<5.026361,0.003638,-57.228275>>,26.791100) //BUG FIX 1201813 POINT_CAM_AT_ENTITY(camFollow,vehs[mvf_heli].id,<<0,0,0>>) SET_CAM_ACTIVE_WITH_INTERP(camFollow,cameraIndex,8000,GRAPH_TYPE_LINEAR,GRAPH_TYPE_LINEAR) idelay = get_game_timer() NEW_LOAD_SCENE_STOP() mission_substage++ endif break case 6 if get_game_timer() - idelay > 5000 STOP_CAM_POINTING(cameraIndex) SET_CAM_PARAMS(cameraIndex,<<898.3975, -1664.2729, 52.9379>>, <<-2.6793, 0.8462, -148.0579>>,19.8393,0,GRAPH_TYPE_LINEAR,GRAPH_TYPE_LINEAR) SET_CAM_PARAMS(cameraIndex,<<898.3975, -1664.2687, 52.7121>>, <<-2.6793, 0.8462, -148.0579>>,19.8393,10000,GRAPH_TYPE_LINEAR,GRAPH_TYPE_LINEAR) SET_CAM_ACTIVE(cameraIndex,true) if IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehs[mvf_heli].id) SET_PLAYBACK_SPEED(vehs[mvf_heli].id,-0.9) endif idelay = get_game_timer() mission_substage++ endif break case 7 IF NOT IS_ENTITY_IN_AIR(vehs[mvf_heli].id) // BUG FIX 1201813 idelay = get_game_timer() mission_substage++ ENDIF break case 8 if HAS_CUTSCENE_LOADED_WITH_FAILSAFE() // BUG FIX 1201813 STOP_PLAYBACK_RECORDED_VEHICLE(vehs[mvf_heli].id) // BUG FIX 1201813 SAFE_DELETE_PED(peds[mpf_pilot].id) // temp need Gianni REGISTER_ENTITY_FOR_CUTSCENE(rocco(),"rocco",CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY) REGISTER_ENTITY_FOR_CUTSCENE(vehs[mvf_heli].id,"Main_heli",CU_ANIMATE_EXISTING_SCRIPT_ENTITY) REGISTER_ENTITY_FOR_CUTSCENE(Milton(),"Milton",CU_ANIMATE_EXISTING_SCRIPT_ENTITY) REGISTER_ENTITY_FOR_CUTSCENE(Anton(),"Anton",CU_ANIMATE_EXISTING_SCRIPT_ENTITY) REGISTER_ENTITY_FOR_CUTSCENE(Gianni(),"Rocco_Goon",CU_ANIMATE_EXISTING_SCRIPT_ENTITY) HANG_UP_AND_PUT_AWAY_PHONE() START_CUTSCENE() REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST) mission_substage++ endif break case 9 if IS_CUTSCENE_PLAYING() STOP_STREAM() Unload_Asset_Model(sAssetData,modelrocco) Unload_Asset_Recording(sAssetData,1,"SOL1REC") prep_stop_cutscene(true) STOP_AUDIO_SCENES() SET_SRL_POST_CUTSCENE_CAMERA(<<970.5688, -1753.4752, 30.1716>>, CONVERT_ROTATION_TO_DIRECTION_VECTOR(<<0.0, 0.0,56.0997>>)) SET_ENTITY_HEADING(player_ped_id(), 38.2203) mission_substage++ endif break case 10 if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Milton") println("MILTON") SET_PED_INTO_VEHICLE(Milton(),vehs[mvf_heli].id,VS_BACK_LEFT) bcs_actor = true endif if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Anton") SET_PED_INTO_VEHICLE(Anton(),vehs[mvf_heli].id,VS_BACK_RIGHT) bcs_director = true endif if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Rocco_Goon") println("GOON") bcs_goon = true endif if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Main_heli") SET_VEHICLE_ENGINE_ON(vehs[mvf_heli].id, FALSE, FALSE) println("HELI") bcs_heli = true endif if CAN_SET_EXIT_STATE_FOR_CAMERA() println("CAM") bcs_cam = true endif if bcs_actor and bcs_goon and bcs_heli and bcs_cam and bcs_director REPLAY_STOP_EVENT() CLEAR_HD_AREA() SET_ENTITY_COORDS(player_ped_id(), <<968.7196, -1751.8749, 30.1595>>) SET_ENTITY_HEADING(player_ped_id(), 38.2203) FORCE_PED_MOTION_STATE(player_ped_id(), MS_AIMING) FORCE_PED_AI_AND_ANIMATION_UPDATE(player_ped_iD(), true) SET_GAMEPLAY_CAM_RELATIVE_HEADING() mission_set_stage(msf_1_Stealth_to_roof) mission_substage = STAGE_ENTRY endif break endswitch if mission_substage > 4 and mission_substage < 10 and not IS_CUTSCENE_PLAYING() and get_game_timer() - iskipDelay > 1500 and IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL,INPUT_FRONTEND_ACCEPT) or iskipCS = 1 switch iskipCS case 0 DO_SCREEN_FADE_OUT(DEFAULT_FADE_TIME_SHORT) iskipCS++ break case 1 if IS_SCREEN_FADED_OUT() //plyaer SET_ENTITY_COORDS(player_ped_id(), <<968.7196, -1751.8749, 30.1595>>) SET_ENTITY_HEADING(player_ped_id(), 38.2203) FORCE_PED_AI_AND_ANIMATION_UPDATE(player_ped_iD()) //heli if IS_PLAYBACK_GOING_ON_FOR_VEHICLE(vehs[mvf_heli].id) STOP_PLAYBACK_RECORDED_VEHICLE(vehs[mvf_heli].id) endif SET_ENTITY_COORDS(vehs[mvf_heli].id,vheliRoof) SET_ENTITY_HEADING(vehs[mvf_heli].id,hHeliRoof) SET_VEHICLE_ENGINE_ON(vehs[mvf_heli].id, FALSE, FALSE) //peds SAFE_DELETE_PED(peds[mpf_rocco].id) SAFE_DELETE_PED(peds[mpf_pilot].id) SET_PED_INTO_VEHICLE(Milton(),vehs[mvf_heli].id,VS_BACK_LEFT) SET_PED_INTO_VEHICLE(Anton(),vehs[mvf_heli].id,VS_BACK_RIGHT) //CS IF IS_CUTSCENE_ACTIVE() STOP_CUTSCENE_IMMEDIATELY() REMOVE_CUTSCENE() ENDIF //misc Unload_Asset_Model(sAssetData,modelrocco) Unload_Asset_Recording(sAssetData,1,"SOL1REC") prep_stop_cutscene(true) STOP_AUDIO_SCENES() STOP_STREAM() DESTROY_ALL_CAMS() SET_GAMEPLAY_CAM_RELATIVE_HEADING() NEW_LOAD_SCENE_STOP() CLEAR_HD_AREA() mission_set_stage(msf_1_Stealth_to_roof) mission_substage = STAGE_ENTRY iskipCS = 0 endif break endswitch endif clear_players_task_on_control_input(SCRIPT_TASK_GO_STRAIGHT_TO_COORD) endproc proc ST_1_STEALTH_TO_ROOF() switch mission_substage case STAGE_ENTRY if IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME) endif if IS_SCREEN_FADED_IN() print_now("SOL1_HELI",DEFAULT_GOD_TEXT_TIME,1) if not DOES_BLIP_EXIST(blip_objective) blip_objective = CREATE_BLIP_FOR_COORD(GET_ENTITY_COORDS(vehs[mvf_heli].id)) endif NEW_LOAD_SCENE_STOP() TRIGGER_MUSIC_EVENT("SOL1_GAMEPLAY") bFirstAlerted = false ifloorspot = 0 iGianniChat = 0 CLEAR_PLAYER_WANTED_LEVEL(player_id()) set_wanted_level_multiplier(0.0) set_replay_mid_mission_stage_with_name(1,"stage 1: Stealth to roof") REPLAY_RECORD_BACK_FOR_TIME(5.0, 10.0, REPLAY_IMPORTANCE_HIGHEST) mission_substage++ endif break case 1 //load rocco or unload on distance if GET_DISTANCE_BETWEEN_ENTITIES(mike(),vehs[mvf_heli].id) < 35 Load_Asset_Model(sAssetData,modelrocco) Load_Asset_Model(sAssetData,modelpilot) else Unload_Asset_Model(sAssetData,modelrocco) unLoad_Asset_Model(sAssetData,modelpilot) endif if GET_DISTANCE_BETWEEN_ENTITIES(mike(),vehs[mvf_heli].id) < 16 and not bMusic_heliTrigger TRIGGER_MUSIC_EVENT("SOL1_HELI_ROOF") bMusic_heliTrigger = true endif if IS_PED_IN_ANY_VEHICLE(player_ped_id()) if IS_AUDIO_SCENE_ACTIVE("SOL_1_GET_TO_HELI_STEALTH") STOP_AUDIO_SCENE("SOL_1_GET_TO_HELI_STEALTH") endif else if not IS_AUDIO_SCENE_ACTIVE("SOL_1_GET_TO_HELI_STEALTH") START_AUDIO_SCENE("SOL_1_GET_TO_HELI_STEALTH") endif endif if IS_ENTITY_IN_ANGLED_AREA(mike(),<<911.31165, -1671.00183, 50.13412>>,<<909.20807, -1695.13318, 56.13356>>,18) or IS_ENTITY_IN_ANGLED_AREA(mike(),<<917.82196, -1698.05920, 50.13412>>,<<905.07593, -1696.87073, 56.13356>>,6)//stairs trigger or( IS_ENTITY_IN_ANGLED_AREA(mike(),<<902.98291, -1667.34106, 50.13412>>,<<920.77441, -1664.76794, 56.13356>>,8)and not IS_PED_CLIMBING(mike())) or(HAS_ENTITY_CLEAR_LOS_TO_ENTITY_IN_FRONT(Gianni(),mike()) and IS_PED_FACING_PED(Gianni(),mike(),50) and IS_ENTITY_IN_ANGLED_AREA(mike(),<<908.51294, -1699.99683, 65>>,<<910.62000, -1663.53870, 50.1>>,18)) if DOES_BLIP_EXIST(blip_objective) REMOVE_BLIP(blip_objective) endif STOP_AUDIO_SCENES() KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() idelay = get_Game_timer() mission_substage++ endif break case 2 if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() ADD_PED_FOR_DIALOGUE(convo_struct,0,mike(),"MICHAEL") if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_ROC",CONV_PRIORITY_MEDIUM) TASK_LOOK_AT_ENTITY(Gianni(),mike(),-1,SLF_WHILE_NOT_IN_FOV| SLF_WIDEST_YAW_LIMIT | SLF_WIDEST_PITCH_LIMIT) TASK_TURN_PED_TO_FACE_ENTITY(Gianni(),mike(),-1) TASK_LOOK_AT_ENTITY(Anton(),mike(),-1,SLF_WHILE_NOT_IN_FOV| SLF_WIDEST_YAW_LIMIT | SLF_WIDEST_PITCH_LIMIT) TASK_LOOK_AT_ENTITY(milton(),mike(),-1,SLF_WHILE_NOT_IN_FOV| SLF_WIDEST_YAW_LIMIT | SLF_WIDEST_PITCH_LIMIT) mission_substage++ endif endif break case 3 if not IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() ADD_PED_FOR_DIALOGUE(convo_struct,4,Gianni(),"GIANNI",true) if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_SEES",CONV_PRIORITY_MEDIUM) mission_set_stage(msf_2_fight_rocco) mission_substage = STAGE_ENTRY endif endif break endswitch REPLAY_DISABLE_CAMERA_MOVEMENT_THIS_FRAME() //Fix for bug 2163422 if mission_substage > 1 SET_GAMEPLAY_HINT_CAMERA_BLEND_TO_FOLLOW_PED_MEDIUM_VIEW_MODE(TRUE) if get_game_timer() - idelay > 2500 //-------------- PUSH IN -------------- FLOAT fT2HintCamFollow FLOAT fT2HintCamOffset FLOAT fT2HintCamFove fT2HintCamFollow = 0.45 fT2HintCamOffset = -0.78 fT2HintCamFove = 30.00 SET_GAMEPLAY_COORD_HINT(<<912.16638, -1683.00232, 51.71074>>,-1,2000) SET_GAMEPLAY_HINT_FOLLOW_DISTANCE_SCALAR(fT2HintCamFollow) SET_GAMEPLAY_HINT_CAMERA_RELATIVE_SIDE_OFFSET(fT2HintCamOffset) SET_GAMEPLAY_HINT_FOV(fT2HintCamFove) SET_PLAYER_CONTROL(player_id(),false) if IS_ENTITY_IN_ANGLED_AREA(mike(),<<909.97729, -1687.18030, 50.12949>>,<<910.85028, -1676.78320, 53.29437>>,18) if IS_SCRIPT_TASK_RUNNING_OR_STARTING(mike(),SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) CLEAR_PED_TASKS(mike()) endif else if not IS_SCRIPT_TASK_RUNNING_OR_STARTING(mike(),SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) TASK_FOLLOW_NAV_MESH_TO_COORD(mike(),<<912.34351, -1682.78552, 50.13306>>,PEDMOVE_WALK) endif endif //--------------------------------------------- endif endif if isentityalive(Milton()) and isentityalive(Anton()) if mission_substage < 3 if not IS_PED_HEADTRACKING_PED(Milton(),Gianni()) TASK_LOOK_AT_ENTITY(Milton(),Gianni(),-1,SLF_WHILE_NOT_IN_FOV | SLF_WIDEST_YAW_LIMIT | SLF_WIDEST_PITCH_LIMIT) endif if not IS_PED_HEADTRACKING_PED(Anton(),Gianni()) TASK_LOOK_AT_ENTITY(Anton(),Gianni(),-1,SLF_WHILE_NOT_IN_FOV | SLF_WIDEST_YAW_LIMIT | SLF_WIDEST_PITCH_LIMIT) endif else if not IS_PED_HEADTRACKING_PED(Milton(),mike()) TASK_LOOK_AT_ENTITY(Milton(),mike(),-1,SLF_WHILE_NOT_IN_FOV | SLF_WIDEST_YAW_LIMIT | SLF_WIDEST_PITCH_LIMIT) endif if not IS_PED_HEADTRACKING_PED(Anton(),mike()) TASK_LOOK_AT_ENTITY(Anton(),mike(),-1,SLF_WHILE_NOT_IN_FOV | SLF_WIDEST_YAW_LIMIT | SLF_WIDEST_PITCH_LIMIT) endif endif endif endproc proc ST_2_FIGHT_ROCCO() switch mission_substage case STAGE_ENTRY // rocco peds[mpf_rocco].id = create_ped(PEDTYPE_MISSION,modelrocco,<<916.03021, -1702.74951, 50.26364>>,-3.90) SETUP_ROCCO() //create pilot peds[mpf_pilot].id = create_ped(PEDTYPE_MISSION,modelpilot,<<916.28003, -1703.59143, 50.26377>>,-3.90) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(peds[mpf_pilot].id,true) if isentityalive(vehs[mvf_Replay_car].id) SAFE_RELEASE_VEHICLE(vehs[mvf_Replay_car].id) endif //cs REQUEST_CUTSCENE("sol_1_mcs_2") Load_Asset_AnimDict(sAssetData,"misssolomon_1") SET_ALL_EXIT_STATES() set_peds_CS_OUTFITS() //heli SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vehs[mvf_heli].id,false) idelay = get_Game_timer() iskipDelay = GET_GAME_TIMER() mission_substage++ break case 1 if HAS_CUTSCENE_LOADED() and not IS_SCRIPTED_CONVERSATION_ONGOING() REGISTER_ENTITY_FOR_CUTSCENE(rocco(),"rocco",CU_ANIMATE_EXISTING_SCRIPT_ENTITY) REGISTER_ENTITY_FOR_CUTSCENE(peds[mpf_pilot].id,"Rocco_Goon",CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY) HANG_UP_AND_PUT_AWAY_PHONE() start_cutscene(CUTSCENE_PLAYER_TARGETABLE) REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST) mission_substage++ endif break case 2 if IS_CUTSCENE_PLAYING() STOP_GAMEPLAY_HINT() SET_PLAYER_CONTROL(player_id(),true) set_replay_mid_mission_stage_with_name(2,"stage 2: Fight Rocco") CLEAR_AREA_OF_PROJECTILES(<<916.03021, -1702.74951, 50.26364>>,50) if IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME) endif TRIGGER_MUSIC_EVENT("SOL1_FIST_FIGHT") STOP_AUDIO_SCENES() if not IS_AUDIO_SCENE_ACTIVE("SOL_1_ROCCO_ARRIVES_CUTSCENE") START_AUDIO_SCENE("SOL_1_ROCCO_ARRIVES_CUTSCENE") endif SAFE_DELETE_PED(peds[mpf_Gianni].id) mission_substage++ endif break case 3 if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael") REPLAY_STOP_EVENT() SET_CURRENT_PED_WEAPON(mike(),WEAPONTYPE_UNARMED,true) println("MIKE") bcs_mike = true else point_gameplay_cam_at_coord(220.1630) endif if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("rocco") REGISTER_TARGET(rocco(),mike()) TASK_PUT_PED_DIRECTLY_INTO_MELEE(rocco(),mike(),0.0,-1,0.0,COMBAT_PED_PREVENT_CHANGING_TARGET) FORCE_PED_AI_AND_ANIMATION_UPDATE(rocco()) println("rocco") bcs_rocco = true endif if bcs_mike and bcs_rocco //clean up the other peds int ped for ped = 0 to enum_to_int(NUM_OF_Mafia_PEDS) - 1 if isentityalive(mafia[ped].id) SAFE_DELETE_PED(mafia[ped].id) endif endfor //rocco if not DOES_BLIP_EXIST(peds[mpf_rocco].blip) peds[mpf_rocco].blip = CREATE_BLIP_FOR_PED(rocco(),true) endif //bug:2033220 if GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT) = CAM_VIEW_MODE_FIRST_PERSON SET_ENTITY_FACING(mike(),GET_ENTITY_COORDS(rocco())) endif print_now("SOL1_BEAT",DEFAULT_GOD_TEXT_TIME,1) if IS_AUDIO_SCENE_ACTIVE("SOL_1_ROCCO_ARRIVES_CUTSCENE") STOP_AUDIO_SCENE("SOL_1_ROCCO_ARRIVES_CUTSCENE") endif TRIGGER_MUSIC_EVENT("SOL1_START_FIGHT") bChooseActor = true Unload_Asset_Model(sAssetData,modelrocco) Unload_Asset_Model(sAssetData,modelWorker) Unload_Asset_Model(sAssetData,G_M_M_ARMGOON_01) iHelpTextTimer = GET_GAME_TIMER() //BUG FIX 1422945 bDoneFightHelp1 = FALSE bDoneFightHelp2 = FALSE INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(mike(),SOL1_BRAWL_DAMAGE) REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST) mission_substage++ endif break case 4 //*Stage number being used in stage checks* //Wait 3 seconds before printing help text BUG FIX 1422945 IF bDoneFightHelp1 = FALSE and g_replay.iReplayInt[0] = 0 IF GET_GAME_TIMER() - iHelpTextTimer > 3000 CLEAR_HELP() PRINT_HELP("SOL1_HELP1",6000)//~s~Increasing the strength stat will allow more damage to be inflicted when performing a melee attack, ladders to be climbed faster, more damage to be taken, and better sports performance. bDoneFightHelp1 = TRUE g_replay.iReplayInt[0] = 1 ENDIF ENDIF IF bDoneFightHelp2 = FALSE and g_replay.iReplayInt[1] = 0 IF bDoneFightHelp1 = TRUE IF NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("SOL1_HELP1") PRINT_HELP("SOL1_HELP2",6000)//~s~The strength stat can be increased by engaging in melee combat and playing sports. bDoneFightHelp2 = TRUE g_replay.iReplayInt[1] = 1 ENDIF ENDIF ENDIF if isentityalive(mike()) and isentityalive(rocco()) if GET_DISTANCE_BETWEEN_ENTITIES(mike(),rocco()) > 120 MISSION_FAILED(mff_left_Area) elif GET_DISTANCE_BETWEEN_ENTITIES(mike(),rocco()) > 100 if not IS_MESSAGE_BEING_DISPLAYED() and not bLeftfight print_Now("SOl1_FIGHTRT",DEFAULT_GOD_TEXT_TIME,1) bLeftFight = true endif else bLeftFight = false endif endif GET_CURRENT_PED_WEAPON(mike(),wcurrent) if isentityalive(rocco()) //bugfix: 1935310 IF GET_GAME_TIMER() - iHelpTextTimer < 3000 SET_PED_RESET_FLAG(rocco(),PRF_ForcePedToStrafe,TRUE) ENDIF //---- //check if rocco out of the area. if fallen dead, if not high get back. if not IS_ENTITY_IN_ANGLED_AREA(rocco(),<<919.09357, -1682.95520, 50.22886>>,<<901.45612, -1681.41113, 56.31160>>,36.14) //dead area if IS_ENTITY_IN_ANGLED_AREA(rocco(),<<913.99536, -1648.59717,0>>,<<908.99036, -1713.31812,43.73081>>,50) if GET_RANDOM_BOOL() ADD_PED_FOR_DIALOGUE(convo_struct,3,Anton(),"Anton") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_SCARE",CONV_PRIORITY_MEDIUM) SET_ENTITY_HEALTH(rocco(),0) MISSION_FAILED(mff_rocco_died) else ADD_PED_FOR_DIALOGUE(convo_struct,2,Milton(),"SOL1Actor") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_SCARE2",CONV_PRIORITY_MEDIUM) SET_ENTITY_HEALTH(rocco(),0) MISSION_FAILED(mff_rocco_died) endif //not dead area get back to roof. else if not IS_SCRIPT_TASK_RUNNING_OR_STARTING(rocco(),SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) TASK_FOLLOW_NAV_MESH_TO_COORD(rocco(),<<911.46997, -1690.09949, 50.13412>>,PEDMOVE_RUN,DEFAULT_TIME_NEVER_WARP) endif endif //combat mike unless holding hands up else if IS_ENTITY_IN_ANGLED_AREA(mike(),<<919.09357, -1682.95520, 50.22886>>,<<901.45612, -1681.41113, 56.31160>>,36.14) if not IS_PED_IN_COMBAT(rocco(),mike()) and not IS_SCRIPT_TASK_RUNNING_OR_STARTING(rocco(),SCRIPT_TASK_HANDS_UP) and not IS_SCRIPT_TASK_RUNNING_OR_STARTING(rocco(),SCRIPT_TASK_PUT_PED_DIRECTLY_INTO_MELEE) TASK_COMBAT_PED(rocco(),mike(),COMBAT_PED_PREVENT_CHANGING_TARGET) endif endif endif if not IS_ENTITY_IN_ANGLED_AREA(mike(),<<919.09357, -1682.95520, 50.22886>>,<<901.45612, -1681.41113, 56.31160>>,36.14) //rocco shouting at mike as you have left the fight area if get_game_timer() - i_dialogueTimer > 15000 and iDialogue_Stage > 1 ADD_PED_FOR_DIALOGUE(convo_struct,1,rocco(),"ROCCO") if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_GETBK",CONV_PRIORITY_MEDIUM) i_dialogueTimer = get_game_timer() endif endif // move rocco back into position then look at mike. if not IS_ENTITY_AT_COORD(rocco(),<<911.46997, -1690.09949, 50.13412>>,<<2,2,2>>) if not IS_SCRIPT_TASK_RUNNING_OR_STARTING(rocco(),SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) TASK_FOLLOW_NAV_MESH_TO_COORD(rocco(),<<911.46997, -1690.09949, 50.13412>>,PEDMOVE_RUN,DEFAULT_TIME_NEVER_WARP) endif else if not IS_SCRIPT_TASK_RUNNING_OR_STARTING(rocco(),SCRIPT_TASK_TURN_PED_TO_FACE_ENTITY) TASK_TURN_PED_TO_FACE_ENTITY(rocco(),mike(),-1) endif endif else //Mike in fight area if not IS_SCRIPT_TASK_RUNNING_OR_STARTING(Milton(),SCRIPT_TASK_PERFORM_SEQUENCE) OPEN_SEQUENCE_TASK(seq) TASK_PLAY_ANIM(null,"misssolomon_1","anton_heli_intro",NORMAL_BLEND_IN,NORMAL_BLEND_OUT,-1,AF_UPPERBODY) TASK_PLAY_ANIM(null,"misssolomon_1","anton_heli_loop",NORMAL_BLEND_IN,NORMAL_BLEND_OUT,-1,AF_UPPERBODY) TASK_PLAY_ANIM(null,"misssolomon_1","anton_heli_exit",NORMAL_BLEND_IN,NORMAL_BLEND_OUT,-1,AF_UPPERBODY) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(Milton(),seq) CLEAR_SEQUENCE_TASK(seq) endif if not IS_SCRIPT_TASK_RUNNING_OR_STARTING(Anton(),SCRIPT_TASK_PERFORM_SEQUENCE) OPEN_SEQUENCE_TASK(seq) TASK_PLAY_ANIM(null,"misssolomon_1","milton_heli_intro",NORMAL_BLEND_IN,NORMAL_BLEND_OUT,-1,AF_UPPERBODY) TASK_PLAY_ANIM(null,"misssolomon_1","milton_heli_loop",NORMAL_BLEND_IN,NORMAL_BLEND_OUT,-1,AF_UPPERBODY) TASK_PLAY_ANIM(null,"misssolomon_1","milton_heli_exit",NORMAL_BLEND_IN,NORMAL_BLEND_OUT,-1,AF_UPPERBODY) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(Anton(),seq) CLEAR_SEQUENCE_TASK(seq) endif // check for spooking the actor and director when in the area if wcurrent != WEAPONTYPE_UNARMED and GET_WEAPONTYPE_GROUP(wcurrent) != WEAPONGROUP_MELEE and not IS_PHONE_ONSCREEN() if IS_PLAYER_TARGETTING_ENTITY(player_id(),Milton()) or IS_PLAYER_FREE_AIMING_AT_ENTITY(player_id(),milton()) or IS_PLAYER_TARGETTING_ENTITY(player_id(),anton()) or IS_PLAYER_FREE_AIMING_AT_ENTITY(player_id(),anton()) if get_game_timer() - iAimDelay > 1200 and iDialogue_Stage > 1 if GET_RANDOM_BOOL() ADD_PED_FOR_DIALOGUE(convo_struct,3,Anton(),"Anton") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_SCARE",CONV_PRIORITY_MEDIUM) iAimDelay = get_game_timer() mission_substage = 101 else ADD_PED_FOR_DIALOGUE(convo_struct,2,Milton(),"SOL1Actor") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_SCARE2",CONV_PRIORITY_MEDIUM) iAimDelay = get_game_timer() mission_substage = 101 endif endif else iAimDelay = get_game_timer() endif if not IS_SCRIPT_TASK_RUNNING_OR_STARTING(rocco(),SCRIPT_TASK_HANDS_UP) TASK_HANDS_UP(rocco(),-1,mike(),-1) endif if get_game_timer() - iGunOutDelay > 5000 and iDialogue_Stage > 1 ADD_PED_FOR_DIALOGUE(convo_struct,1,rocco(),"ROCCO") if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_GUNOUT",CONV_PRIORITY_MEDIUM) iGunOutDelay = get_game_timer() endif endif else if get_game_timer() - iGunOutDelay > 1200 if IS_SCRIPT_TASK_RUNNING_OR_STARTING(rocco(),SCRIPT_TASK_HANDS_UP) CLEAR_PED_TASKS(rocco()) endif iGunOutDelay = get_game_timer() endif endif if not IS_SCRIPTED_CONVERSATION_ONGOING() if get_game_Timer() - iambdialoguetimer > 7000 and not IS_MESSAGE_BEING_DISPLAYED() and iDialogue_Stage > 1 if GET_RANDOM_BOOL() ADD_PED_FOR_DIALOGUE(convo_struct,4,rocco(),"ROCCO") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_RGA2",CONV_PRIORITY_MEDIUM) else if bChooseActor ADD_PED_FOR_DIALOGUE(convo_struct,3,Anton(),"Anton") if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_FIGHTM",CONV_PRIORITY_MEDIUM) bChooseActor = false endif else ADD_PED_FOR_DIALOGUE(convo_struct,2,Milton(),"SOL1ACTOR") if CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOL1_FIGHTA",CONV_PRIORITY_MEDIUM) bChooseActor = true endif endif endif endif else iambDialogueTimer = get_Game_timer() endif endif if wcurrent != WEAPONTYPE_UNARMED if DOES_ENTITY_EXIST(rocco()) if HAS_entity_BEEN_DAMAGED_BY_WEAPON(rocco(),wcurrent) if GET_RANDOM_BOOL() ADD_PED_FOR_DIALOGUE(convo_struct,3,Anton(),"Anton") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_SCARE",CONV_PRIORITY_MEDIUM) iAimDelay = get_game_timer() mission_substage = 102 else ADD_PED_FOR_DIALOGUE(convo_struct,2,Milton(),"SOL1Actor") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_SCARE2",CONV_PRIORITY_MEDIUM) iAimDelay = get_game_timer() mission_substage = 102 endif endif endif if isentityalive(Milton()) and isentityalive(Anton()) if HAS_PED_RECEIVED_EVENT(Milton(),EVENT_SHOT_FIRED_BULLET_IMPACT) or HAS_PED_RECEIVED_EVENT(Anton(),EVENT_SHOT_FIRED_BULLET_IMPACT) if GET_RANDOM_BOOL() ADD_PED_FOR_DIALOGUE(convo_struct,3,Anton(),"Anton") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_SCARE",CONV_PRIORITY_MEDIUM) iAimDelay = get_game_timer() mission_substage = 101 else ADD_PED_FOR_DIALOGUE(convo_struct,2,Milton(),"SOL1Actor") CREATE_CONVERSATION(convo_struct,"SOL1AUD","SOl1_SCARE2",CONV_PRIORITY_MEDIUM) iAimDelay = get_game_timer() mission_substage = 101 endif endif endif endif endif if not IS_CUTSCENE_ACTIVE() //cs REQUEST_CUTSCENE("sol_1_mcs_3") SET_ALL_EXIT_STATES() set_peds_CS_OUTFITS() endif if not IS_AUDIO_SCENE_ACTIVE("SOL_1_FIGHT_ROCCO") START_AUDIO_SCENE("SOL_1_FIGHT_ROCCO") endif if isentityalive(rocco()) SET_PED_RESET_FLAG(rocco(),PRF_PreventAllMeleeTakedowns,true) if get_entity_health(rocco()) < 150 and not IS_PED_FALLING(rocco()) SET_ENTITY_HEALTH(rocco(),200) CLEAR_PED_TASKS(Milton()) CLEAR_PED_TASKS(Anton()) KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() CLEAR_HELP() SET_PED_TO_RAGDOLL(rocco(),5000,6000,TASK_RELAX,false,false,true) idelay = get_Game_timer() REPLAY_STOP_EVENT() mission_substage++ endif endif break case 5 if HAS_CUTSCENE_LOADED_WITH_FAILSAFE() and get_game_timer() - idelay > 3000 REGISTER_ENTITY_FOR_CUTSCENE(rocco(),"rocco",CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY) REGISTER_ENTITY_FOR_CUTSCENE(milton(),"milton",CU_ANIMATE_EXISTING_SCRIPT_ENTITY) REGISTER_ENTITY_FOR_CUTSCENE(anton(),"anton",CU_ANIMATE_EXISTING_SCRIPT_ENTITY) REGISTER_ENTITY_FOR_CUTSCENE(vehs[mvf_heli].id,"Main_heli",CU_ANIMATE_EXISTING_SCRIPT_ENTITY) HANG_UP_AND_PUT_AWAY_PHONE() start_cutscene() REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST) mission_substage++ endif break case 6 if IS_CUTSCENE_PLAYING() if DOES_BLIP_EXIST(peds[mpf_rocco].blip) REMOVE_BLIP(peds[mpf_rocco].blip) endif TRIGGER_MUSIC_EVENT("SOL1_FIGHT_DONE") if IS_AUDIO_SCENE_ACTIVE("SOL_1_FIGHT_ROCCO") STOP_AUDIO_SCENE("SOL_1_FIGHT_ROCCO") endif mission_substage++ endif break case 7 if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael") if WAS_CUTSCENE_SKIPPED() SET_ENTITY_COORDS(mike(),<<911.39081, -1686.13513, 50.13412>>) SET_ENTITY_HEADING(mike(),-4.11) SET_GAMEPLAY_CAM_RELATIVE_HEADING() endif REPLAY_STOP_EVENT() // TASK_FOLLOW_NAV_MESH_TO_COORD(mike(),<<912.93494, -1682.35657, 50.13412>>,PEDMOVE_WALK,DEFAULT_TIME_NEVER_WARP) FORCE_PED_MOTION_STATE(MIKE(),MS_ON_FOOT_WALK,false,FAUS_CUTSCENE_EXIT) SET_PED_MIN_MOVE_BLEND_RATIO(MIKE(),PEDMOVEBLENDRATIO_WALK) SIMULATE_PLAYER_INPUT_GAIT(player_id(),PEDMOVE_WALK,2000) println("MIKE") bcs_mike = true ELSE SET_GAMEPLAY_CAM_RELATIVE_HEADING() endif if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Anton") SET_PED_INTO_VEHICLE(Anton(),vehs[mvf_heli].id,VS_BACK_RIGHT) bcs_director = true endif if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Milton") SET_PED_INTO_VEHICLE(Milton(),vehs[mvf_heli].id,VS_BACK_LEFT) bcs_actor = true endif if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Main_Heli") bcs_heli = true endif if bcs_mike and bcs_actor and bcs_director and bcs_heli SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vehs[mvf_heli].id,true) mission_set_stage(msf_3_get_to_sol) mission_substage = STAGE_ENTRY endif break case 101 if not IS_SCRIPT_TASK_RUNNING_OR_STARTING(rocco(),SCRIPT_TASK_HANDS_UP) TASK_HANDS_UP(rocco(),-1,mike(),-1) endif if not IS_PED_FLEEING(Anton()) TASK_SMART_FLEE_PED(Anton(),mike(),200,-1) endif if not IS_PED_FLEEING(Milton()) TASK_SMART_FLEE_PED(Milton(),mike(),200,-1) endif if GET_GAME_TIMER() - iAimDelay > 1000 MISSION_FAILED(Mff_scared_peds) endif break case 102 if isentityalive(rocco()) SET_ENTITY_HEALTH(rocco(),0) endif if not IS_PED_FLEEING(Anton()) TASK_SMART_FLEE_PED(Anton(),mike(),200,-1) endif if not IS_PED_FLEEING(Milton()) TASK_SMART_FLEE_PED(Milton(),mike(),200,-1) endif if GET_GAME_TIMER() - iAimDelay > 1000 MISSION_FAILED(mff_rocco_died) endif break endswitch if isentityalive(Milton()) and isentityalive(Anton()) if isentityalive(mike()) if not IS_PED_HEADTRACKING_PED(Milton(),mike()) TASK_LOOK_AT_ENTITY(Milton(),mike(),-1,SLF_WHILE_NOT_IN_FOV | SLF_WIDEST_YAW_LIMIT | SLF_WIDEST_PITCH_LIMIT,SLF_LOOKAT_VERY_HIGH) endif if not IS_PED_HEADTRACKING_PED(Anton(),mike()) TASK_LOOK_AT_ENTITY(Anton(),mike(),-1,SLF_WHILE_NOT_IN_FOV | SLF_WIDEST_YAW_LIMIT | SLF_WIDEST_PITCH_LIMIT,SLF_LOOKAT_VERY_HIGH) endif endif endif endproc proc ST_3_GET_TO_SOL() switch mission_substage case STAGE_ENTRY if IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME) endif if not IS_AUDIO_SCENE_ACTIVE("SOL_1_GET_TO_STUDIO") START_AUDIO_SCENE("SOL_1_GET_TO_STUDIO") endif if DOES_BLIP_EXIST(blip_objective) REMOVE_BLIP(blip_objective) endif set_wanted_level_multiplier(0.3) Load_Asset_AnimDict(sAssetData,"misssolomon_1") set_replay_mid_mission_stage_with_name(3,"stage 3: Get to Sol") SET_ALL_EXIT_STATES() bsearchlights = false iScareStage = 0 bcueTakeOff = false REPLAY_RECORD_BACK_FOR_TIME(8.0, 8.0, REPLAY_IMPORTANCE_HIGHEST) mission_substage++ break case 1 if not bcueTakeOff if IS_PED_IN_VEHICLE(mike(),vehs[mvf_heli].id) and IS_ENTITY_IN_AIR(vehs[mvf_heli].id) TRIGGER_MUSIC_EVENT("SOL1_TAKE_OFF") bcueTakeOff = true endif endif if Scared_Milton() b_cutscene_loaded = false TRIGGER_MUSIC_EVENT("SOL1_SCARED_THEM") STAT_INCREMENT(SP0_FLYING_ABILITY,2) CLEAR_AREA(<<-1107.32568, -461.81781, 30.17446>>,50,true) unLoad_Asset_Anim_Dict(sAssetData,"misssolomon_1") REPLAY_RECORD_BACK_FOR_TIME(10.0, 5.0, REPLAY_IMPORTANCE_HIGHEST) mission_substage++ endif break case 2 if iDialogue_Stage > 4 if IS_PLAYER_AT_LOCATION_WITH_BUDDIES_IN_VEHICLE(sLocatesData,<<-1098.04102, -458.76242, 34.38025>>,<<0.1,0.1,LOCATE_SIZE_HEIGHT>>, true,null,peds[mpf_milton].id,peds[mpf_Anton].id,vehs[mvf_heli].id,"SOL1_STUDIO","","","","","CMN_GENGETINHE","CMN_GENGETBCKHE",false,true) or (DOES_BLIP_EXIST(sLocatesData.LocationBlip)And IS_ENTITY_IN_ANGLED_AREA(mike(),<<-1107.32568, -461.81781, 30.17446>>,<<-1089.89941, -452.28159, 36.5>>,20) and not IS_ENTITY_IN_AIR(vehs[mvf_heli].id)) and IS_VEHICLE_ALMOST_STOPPED(vehs[mvf_heli].id) SET_PLAYER_CONTROL(player_id(),false,SPC_LEAVE_CAMERA_CONTROL_ON) BRING_VEHICLE_TO_HALT(vehs[mvf_heli].id,5,1) bStartConstructionChecks = false mission_substage++ endif endif break case 3 if IS_VEHICLE_ALMOST_STOPPED(vehs[mvf_heli].id) and not IS_ENTITY_IN_AIR(vehs[mvf_heli].id) // stats update if GET_ENTITY_HEALTH(vehs[mvf_heli].id) = GET_ENTITY_MAX_HEALTH(vehs[mvf_heli].id) INFORM_STAT_SYSTEM_OF_BOOL_STAT_HAPPENED(SOL1_PERFECT_LANDING) endif CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData) SET_VEHICLE_ENGINE_ON(vehs[mvf_heli].id,false,false) if not bMusic_ends TRIGGER_MUSIC_EVENT("SOL1_ENDS") bMusic_ends = true endif TASK_LEAVE_ANY_VEHICLE(mike(),300) OPEN_SEQUENCE_TASK(seq) TASK_LEAVE_ANY_VEHICLE(null,1800)//200 BUG FIX 1399455 TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<-1078.97095, -467.68033, 35.60899>>,PEDMOVE_WALK) TASK_TURN_PED_TO_FACE_ENTITY(null,mike(),5000) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(Milton(),seq) CLEAR_SEQUENCE_TASK(seq) OPEN_SEQUENCE_TASK(seq) TASK_LEAVE_ANY_VEHICLE(null,1500)//50 BUG FIX 1399455 TASK_FOLLOW_NAV_MESH_TO_COORD(null,<<-1077.96936, -470.29300, 35.62410>>,PEDMOVE_WALK) TASK_TURN_PED_TO_FACE_ENTITY(null,mike(),6000) CLOSE_SEQUENCE_TASK(seq) TASK_PERFORM_SEQUENCE(anton(),seq) CLEAR_SEQUENCE_TASK(seq) REPLAY_RECORD_BACK_FOR_TIME(10.0, 5.0, REPLAY_IMPORTANCE_HIGHEST) SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vehs[mvf_heli].id,false) SET_PLAYER_CONTROL(player_id(),true) KILL_FACE_TO_FACE_CONVERSATION() iDialogue_Stage = 6 mission_substage++ else BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(GET_VEHICLE_PED_IS_IN(mike())) endif break case 4 //audio using this stage number if not b_cutscene_loaded if GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(mike(),<<-1034.74194, -497.20056, 35.37177>>) < DEFAULT_CUTSCENE_LOAD_DIST REQUEST_CUTSCENE("SOL_1_EXT") request_Model(IG_SOLOMON) set_peds_CS_OUTFITS() b_cutscene_loaded = true bSolomonCreated = false DELETE_VEHICLE_GEN_VEHICLES_IN_AREA(<<-1028.38049, -486.24539, 37.13475>>,20) CLEAR_AREA_OF_VEHICLES(<<-1028.38049, -486.24539, 37.13475>>,20) SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<-1037.91162, -495.88333, 30>>,<<-1016.92767, -471.04614, 39>>,false) endif else if GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(mike(),<<-1034.74194, -497.20056, 35.37177>>) > DEFAULT_CUTSCENE_UNLOAD_DIST REMOVE_CUTSCENE() SET_MODEL_AS_NO_LONGER_NEEDED(IG_SOLOMON) b_cutscene_loaded = false if bSolomonCreated SAFE_DELETE_PED(peds[mpf_sol].id) endif elif GET_DISTANCE_BETWEEN_ENTITY_AND_COORD(mike(),<<-1034.74194, -497.20056, 35.37177>>) < DEFAULT_CUTSCENE_LOAD_DIST if not bSolomonCreated and HAS_MODEL_LOADED(IG_SOLOMON) peds[mpf_sol].id = CREATE_PED(PEDTYPE_MISSION,IG_SOLOMON,<<-1011.29340, -480.40060, 38.97574>>,118.24) SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(sol(),true) SET_PED_COMPONENT_VARIATION(sol(),PED_COMP_TORSO,0,0) SET_PED_COMPONENT_VARIATION(sol(),PED_COMP_LEG,0,0) SET_PED_COMPONENT_VARIATION(sol(),PED_COMP_SPECIAL,0,0) SET_ENTITY_HEALTH(sol(),110) SET_PED_RELATIONSHIP_GROUP_HASH(sol(),rel_friends) bSolomonCreated = true DELETE_VEHICLE_GEN_VEHICLES_IN_AREA(<<-1028.38049, -486.24539, 37.13475>>,20) CLEAR_AREA_OF_VEHICLES(<<-1028.38049, -486.24539, 37.13475>>,20) SET_ALL_VEHICLE_GENERATORS_ACTIVE_IN_AREA(<<-1037.91162, -495.88333, 30>>,<<-1016.92767, -471.04614, 39>>,false) endif endif endif if IS_PLAYER_AT_LOCATION_WITH_BUDDIES_ANY_MEANS(sLocatesData,<<-1022.89069, -490.86011, 35.97233>>,<<0.1,0.1,LOCATE_SIZE_HEIGHT>>,false, null,peds[mpf_milton].id,peds[mpf_Anton].id,"SOL1_TLKSOL","","SOl1_RTNMILT","SOl1_RTNANT","",false,true) or IS_ENTITY_IN_ANGLED_AREA(mike(),<<-1055.51233, -505.69760, 34>>,<<-1009.98639, -483.01324, 45.93766>>,26) if GET_PLAYER_WANTED_LEVEL(player_id()) > 0 CLEAR_PLAYER_WANTED_LEVEL(player_id()) endif if IS_PED_IN_ANY_VEHICLE(mike()) if IS_VEHICLE_ALMOST_STOPPED(GET_VEHICLE_PED_IS_IN(mike())) and not IS_ENTITY_IN_AIR(GET_VEHICLE_PED_IS_IN(mike())) TASK_FOLLOW_NAV_MESH_TO_COORD(sol(),<<-1015.59894, -482.73679, 36.34386>>,PEDMOVE_WALK) KILL_FACE_TO_FACE_CONVERSATION() mission_substage = 5 else BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(GET_VEHICLE_PED_IS_IN(mike())) endif else TASK_FOLLOW_NAV_MESH_TO_COORD(sol(),<<-1015.59894, -482.73679, 36.34386>>,PEDMOVE_WALK) KILL_FACE_TO_FACE_CONVERSATION() mission_substage = 5 endif endif break case 5 //-------------- PUSH IN -------------- FLOAT fT2HintCamFollow FLOAT fT2HintCamOffset FLOAT fT2HintCamFove fT2HintCamFollow = 0.35 fT2HintCamOffset = -0.78 fT2HintCamFove = 30.00 SET_GAMEPLAY_ENTITY_HINT(SOL(),<<0,0,0>>,true,-1,3000) SET_GAMEPLAY_HINT_FOLLOW_DISTANCE_SCALAR(fT2HintCamFollow) SET_GAMEPLAY_HINT_CAMERA_RELATIVE_SIDE_OFFSET(fT2HintCamOffset) SET_GAMEPLAY_HINT_FOV(fT2HintCamFove) SET_GAMEPLAY_HINT_CAMERA_BLEND_TO_FOLLOW_PED_MEDIUM_VIEW_MODE(TRUE) //--------------------------------------------- IF HAS_CUTSCENE_LOADED_WITH_FAILSAFE() and IS_ENTITY_IN_ANGLED_AREA(sol(),<<-1017.31689, -483.44772, 35>>,<<-1014.30426, -481.67487, 39>>,30) if IS_ANY_CONVERSATION_ONGOING_OR_QUEUED() KILL_FACE_TO_FACE_CONVERSATION_DO_NOT_FINISH_LAST_LINE() endif CLEAR_MISSION_LOCATION_TEXT_AND_BLIPS(sLocatesData) REGISTER_ENTITY_FOR_CUTSCENE(sol(),"Soloman",CU_ANIMATE_AND_DELETE_EXISTING_SCRIPT_ENTITY) STOP_AUDIO_SCENES() HANG_UP_AND_PUT_AWAY_PHONE() START_CUTSCENE() REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST) iDialogue_Stage = 16 // make sure no conversations are started during the cutscene mission_substage++ endif break case 6 if IS_CUTSCENE_PLAYING() STOP_GAMEPLAY_HINT() REMOVE_PED_HELMET(mike(),true) SET_PED_COMP_ITEM_CURRENT_SP(mike(),COMP_TYPE_PROPS,PROPS_HEAD_NONE) if isentityalive(Milton()) safe_delete_ped(peds[mpf_milton].id) endif if isentityalive(Anton()) safe_delete_ped(peds[mpf_Anton].id) endif SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vehs[mvf_heli].id,true) mission_substage++ endif break case 7 if IS_CUTSCENE_PLAYING() and GET_CUTSCENE_TIME() > 63300 SET_FORCE_FOOTSTEP_UPDATE(mike(),true) endif if CAN_SET_EXIT_STATE_FOR_CAMERA() bcs_cam = true endif if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael") bcs_mike = true endif if bcs_cam and bcs_mike REPLAY_STOP_EVENT() SET_FORCE_FOOTSTEP_UPDATE(mike(),false) SET_GAMEPLAY_CAM_RELATIVE_HEADING() MISSION_PASSED() endif break endswitch clear_players_task_on_control_input(SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) if not bSearchlights if isentityalive(mike()) and isentityalive(vehs[mvf_heli].id) if IS_PED_IN_VEHICLE(mike(),vehs[mvf_heli].id,true) and IS_VEHICLE_SEARCHLIGHT_ON(vehs[mvf_heli].id) SET_VEHICLE_SEARCHLIGHT(vehs[mvf_heli].id,false,false) bsearchlights = true endif endif endif if isentityalive(milton()) and not IS_PED_HEADTRACKING_PED(milton(),mike()) TASK_LOOK_AT_ENTITY(milton(),mike(),-1,SLF_WHILE_NOT_IN_FOV | SLF_WIDEST_YAW_LIMIT | SLF_WIDEST_PITCH_LIMIT,SLF_LOOKAT_VERY_HIGH) endif if isentityalive(Anton()) and not IS_PED_HEADTRACKING_PED(Anton(),mike()) TASK_LOOK_AT_ENTITY(anton(),mike(),-1,SLF_WHILE_NOT_IN_FOV | SLF_WIDEST_YAW_LIMIT | SLF_WIDEST_PITCH_LIMIT,SLF_LOOKAT_VERY_HIGH) endif endproc PROC ST_4_PASSED() switch mission_substage case STAGE_ENTRY if IS_CUTSCENE_ACTIVE() if HAS_CUTSCENE_LOADED() START_CUTSCENE() REPLAY_START_EVENT(REPLAY_IMPORTANCE_HIGHEST) mission_substage++ endif else REQUEST_CUTSCENE("SOL_1_EXT") Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Milton",PED_COMP_TORSO,1,0,CS_MILTON) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Milton",PED_COMP_LEG,1,0,CS_MILTON) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Milton",PED_COMP_feet,1,0,CS_MILTON) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Milton",PED_COMP_JBIB,1,0,CS_MILTON) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Milton",PED_COMP_TORSO,1,0,IG_MILTON) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Milton",PED_COMP_LEG,1,0,IG_MILTON) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Milton",PED_COMP_feet,1,0,IG_MILTON) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Milton",PED_COMP_JBIB,1,0,IG_MILTON) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Anton",PED_COMP_TORSO,0,0,CSB_ANTON) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Anton",PED_COMP_LEG,0,0,CSB_ANTON) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Anton",PED_COMP_TORSO,0,0,U_M_Y_ANTONB) Register_Ped_Variation_For_Cutscene(sCutscenePedVariationRegister,"Anton",PED_COMP_LEG,0,0,U_M_Y_ANTONB) endif break case 1 if IS_CUTSCENE_PLAYING() IF IS_SCREEN_FADED_OUT() DO_SCREEN_FADE_IN(DEFAULT_FADE_TIME) endif mission_substage++ endif break case 2 if IS_CUTSCENE_PLAYING() and GET_CUTSCENE_TIME() > 63300 SET_FORCE_FOOTSTEP_UPDATE(mike(),true) endif if CAN_SET_EXIT_STATE_FOR_CAMERA() bcs_cam = true endif if CAN_SET_EXIT_STATE_FOR_REGISTERED_ENTITY("Michael") REPLAY_STOP_EVENT() bcs_mike = true else SET_GAMEPLAY_CAM_RELATIVE_HEADING() endif if bcs_cam and bcs_mike SET_FORCE_FOOTSTEP_UPDATE(mike(),false) MISSION_PASSED() endif break endswitch ENDPROC // ----------------------------------------------------------------------------------------------------------- // MISSION FLOW // ----------------------------------------------------------------------------------------------------------- PROC mission_flow() Switch int_to_enum(MSF_MISSION_STAGE_FLAGS, mission_stage) case msf_0_get_to_warehouse ST_0_GET_TO_WAREHOUSE() break case msf_1_Stealth_to_roof ST_1_STEALTH_TO_ROOF() break case msf_2_fight_rocco ST_2_FIGHT_ROCCO() break case msf_3_get_to_sol ST_3_GET_TO_SOL() break case msf_4_passed ST_4_PASSED() Break endswitch ENDPROC #IF IS_DEBUG_BUILD PROC DO_DEBUG() IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S) MISSION_PASSED() ELIF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F) MISSION_FAILED(mff_debug_fail) ENDIF ENDPROC #endif // =========================================================================================================== // Script Loop // =========================================================================================================== SCRIPT PRINTSTRING("...solomon 1 Launched") PRINTNL() IF (HAS_FORCE_CLEANUP_OCCURRED()) TRIGGER_MUSIC_EVENT("SOL1_FAIL") PRINTSTRING("...solomon 1 Force Cleanup") PRINTNL() Mission_Flow_Mission_Force_Cleanup() if IS_CUTSCENE_ACTIVE() SET_CUTSCENE_FADE_VALUES() endif Mission_Cleanup() ENDIF SET_MISSION_FLAG(TRUE) #if IS_DEBUG_BUILD //z menu for skipping stages zMenuNames[msf_0_get_to_warehouse].sTxtLabel = "Stage 0: Get to Warehouse" zMenuNames[msf_1_Stealth_to_roof].sTxtLabel = "Stage 1: stealth to roof" zMenuNames[msf_2_fight_rocco].sTxtLabel = "Stage 2: fight rocco" zMenuNames[msf_3_get_to_sol].sTxtLabel = "Stage 3: Get to sol" zMenuNames[msf_4_passed].sTxtLabel = "---------- PASSED ----------" widget_debug = START_WIDGET_GROUP("Sol 1 debug") ADD_WIDGET_INT_READ_ONLY("stealth stage: ",wAI_stage) ADD_WIDGET_INT_READ_ONLY("maf sit car: ",mafia[maf_car].sDebug) ADD_WIDGET_INT_READ_ONLY("maf sit car talk: ",mafia[maf_car_talking].sDebug) ADD_WIDGET_INT_READ_ONLY("maf sit work wlk: ",mafia[maf_worker_walkway].sDebug) ADD_WIDGET_INT_READ_ONLY("maf sit wlk: ",mafia[maf_walkway_door].sDebug) ADD_WIDGET_INT_READ_ONLY("maf sit worker top: ",mafia[maf_worker_top].sDebug) ADD_WIDGET_INT_READ_ONLY("maf sit wrk alone: ",mafia[maf_worker_alone].sDebug) ADD_WIDGET_INT_READ_ONLY("maf sit vent: ",mafia[maf_worker_vent].sDebug) ADD_WIDGET_INT_READ_ONLY("maf sit mid door: ",mafia[maf_worker_door].sDebug) ADD_WIDGET_INT_READ_ONLY("Gianni: ",mafia[mpf_Gianni].sDebug) ADD_WIDGET_FLOAT_READ_ONLY("Player noise: ",debug_noise) STOP_WIDGET_GROUP() SET_LOCATES_HEADER_WIDGET_GROUP(widget_debug) #endif //initialize mission MISSION_SETUP() WHILE (TRUE) //prestreaming loop Update_Asset_Management_System(sAssetData) // Deals with loading any assets and keeps track of what has been loaded Update_Cutscene_Prestreaming(sCutscenePedVariationRegister) Mission_stage_management() MISSION_STAGE_SKIP() REPLAY_CHECK_FOR_EVENT_THIS_FRAME("M_MrRichards") if not bDoSkip MISSION_CHECKS() mission_flow() endif #IF IS_DEBUG_BUILD DO_DEBUG() #ENDIF WAIT(0) ENDWHILE ENDSCRIPT