Files
2025-09-29 00:52:08 +02:00

799 lines
25 KiB
Python
Executable File

//////////////////////////////////////////////////////////////////////////////////////////
// //
// SCRIPT NAME : Property Management - Delivery //
// AUTHOR : Tor Sigurdson //
// DESCRIPTION : Delivery missions for property management. //
// //
//////////////////////////////////////////////////////////////////////////////////////////
//Compile out Title Update changes to header functions.
//Must be before includes.
//CONST_INT USE_TU_CHANGES 0 // Removed by Kenneth R.
// including the most common script headers
USING "rage_builtins.sch"
USING "globals.sch"
USING "brains.sch"
USING "script_player.sch"
USING "commands_script.sch"
USING "properties_public.sch"
USING "shared_hud_displays.sch"
USING "Locates_public.sch"
USING "chase_hint_cam.sch"
DELIVERY_MISSION_VARIATION_ENUM deliveryVariation
ENUM propertyStageFlag
propertyCanRun,
propertyRunning
ENDENUM
propertyStageFlag ambStage = propertyCanRun
//ENUM eventVariations
// TARGET_NONE,
// WEED_SHOP,
// LIQUOR_STORE,
// TARGET_END
//ENDENUM
//eventVariations thisEvent = TARGET_NONE
ENUM RUNNING_STAGE_ENUM
SETUP_STAGE, //0
GET_DELIVERY, //1
RETURN_DELIVERY, //2
TOO_LATE, //3
TOO_DAMAGED //4
ENDENUM
RUNNING_STAGE_ENUM deliveryStage = SETUP_STAGE
LOCATES_HEADER_DATA sLocatesData
VECTOR vDeliveryOrigin
VECTOR vDeliveryDestination
VECTOR vVehCop
FLOAT fVehDelivery
FLOAT fVehCop
BOOL bAssetsLoaded
BOOL bVariablesInitialised
BOOL bDoFullCleanUp
BOOL bPlayerWanted
BOOL bDeliveryFleeing
INT iTimeLimit
INT icountdownSound = 0
//INT iTimeLimitHour
//INT iTimeLimitMin
INT iTimeLimitHourModifier
INT iTimeLimitMinModifier
INT iWarningTime
INT iVehicleExtra = -1 //needed to set the booze truck default -1 to not set any
CONST_INT NUM_DELIVERY_PEDS 2
CONST_INT NUM_COP_PEDS 2
CONST_INT CLOCK_WARNING_MINUTES 30
MODEL_NAMES modelPedDelivery
MODEL_NAMES modelPedCop
MODEL_NAMES modelVehDelivery
MODEL_NAMES modelVehCop
PED_INDEX pedDelivery[NUM_DELIVERY_PEDS]
PED_INDEX pedCop[NUM_COP_PEDS]
VEHICLE_INDEX vehDelivery
VEHICLE_INDEX vehCop
VEHICLE_INDEX vehImpound
BLIP_INDEX blipPed[NUM_DELIVERY_PEDS]
BLIP_INDEX blipVehicle
String sGetIn = "PMDL_OBJ"
String sObjective = "PMDL_LOC"
string sGetback = "PMDL_BCK"
CHASE_HINT_CAM_STRUCT structHintCam
REL_GROUP_HASH rghCop
REL_GROUP_HASH rghCriminal
SEQUENCE_INDEX Seq
#if IS_DEBUG_BUILD
WIDGET_GROUP_ID widget_debug
#endif
// cleanup the mission
PROC MISSION_CLEANUP()
PRINTLN("\n@@@@@@@@@@@@@@@@@@@@ MISSION_CLEANUP @@@@@@@@@@@@@@@@@@@@\n")
SET_VEHICLE_MODEL_IS_SUPPRESSED(BENSON, FALSE)
SET_VEHICLE_MODEL_IS_SUPPRESSED(PONY2, FALSE)
RELEASE_SCRIPT_AUDIO_BANK()
IF bDoFullCleanUp
IF NOT IS_ENTITY_DEAD(vehImpound)
SEND_VEHICLE_DATA_TO_IMPOUND_USING_VEHICLE(vehImpound)
ENDIF
RESET_WANTED_LEVEL_DIFFICULTY(PLAYER_ID())
KILL_CHASE_HINT_CAM(structHintCam)
ENDIF
TERMINATE_THIS_THREAD()
ENDPROC
// pass the mission
PROC MISSION_PASSED()
PRINTLN("\n@@@@@@@@@@@@@@@@@@@@ MISSION_PASSED @@@@@@@@@@@@@@@@@@@@\n")
SET_PROPERTY_MANAGEMENT_RESULT(PROPERTY_MANAGEMENT_RESULT_SUCCESS)
MISSION_CLEANUP()
ENDPROC
// fail the mission
PROC MISSION_FAILED()
PRINTLN("\n@@@@@@@@@@@@@@@@@@@@ MISSION_FAILED @@@@@@@@@@@@@@@@@@@@\n")
SET_PROPERTY_MANAGEMENT_RESULT(PROPERTY_MANAGEMENT_RESULT_FAILURE)
MISSION_CLEANUP()
ENDPROC
PROC initialisePropertyMissionVariables()
float fDistance
vDeliveryOrigin = GET_DELIVERY_EVENT_INIT_COORDS(GET_CURRENT_PROPERTY_MANAGEMENT_PROPERTY(), deliveryVariation)
fVehDelivery = GET_DELIVERY_EVENT_INIT_HEADING(GET_CURRENT_PROPERTY_MANAGEMENT_PROPERTY(), deliveryVariation)
if deliveryVariation > DELIVERY_MISSION_VARIATION_RECOVER_VAN_2
sGetIn = "PMDL_TRUCK"
sObjective = "PMDL_BTIM"
sGetback = "PMDL_BCKT"
modelVehDelivery = BENSON
iVehicleExtra = 2
endif
IF GET_CURRENT_PROPERTY_MANAGEMENT_PROPERTY() = PROPERTY_WEED_SHOP
vDeliveryDestination = << -1161.213257, -1567.067749, 3.4234 >>
modelVehDelivery = PONY2
IF deliveryVariation = DELIVERY_MISSION_VARIATION_TIMED_1
iTimeLimitHourModifier = 2
iTimeLimitMinModifier = 15
sObjective = "PMDL_TIM"
ELIF deliveryVariation = DELIVERY_MISSION_VARIATION_TIMED_2
iTimeLimitHourModifier = 1
iTimeLimitMinModifier = 30
sObjective = "PMDL_TIM"
ELIF deliveryVariation = DELIVERY_MISSION_VARIATION_TIMED_3
iTimeLimitHourModifier = 1
iTimeLimitMinModifier = 30
sObjective = "PMDL_TIM"
ELIF deliveryVariation = DELIVERY_MISSION_VARIATION_LOSE_COPS
vVehCop = << -3121.2615, 1152.9200, 19.4047 >>
fVehCop = 176.4887
modelVehCop = POLICE4
modelPedCop = S_M_Y_COP_01 //MP_M_GenWit_01
ELIF deliveryVariation = DELIVERY_MISSION_VARIATION_LOSE_COPS_2
vVehCop = << 1543.1453, 2184.3706, 77.8114 >>
fVehCop = 45.3499
modelVehCop = POLICE4
modelPedCop = S_M_Y_COP_01 //MP_M_GenWit_01
ELIF deliveryVariation >= DELIVERY_MISSION_VARIATION_RECOVER_VAN
modelPedDelivery = G_M_Y_SALVAGOON_02
ENDIF
//******************** BOOZE DELIVERY *********************
elif GET_CURRENT_PROPERTY_MANAGEMENT_PROPERTY() = PROPERTY_BAR_HOOKIES
vDeliveryDestination = <<-2169.8284, 4277.3652, 47.9568>>
fDistance = GET_DISTANCE_BETWEEN_COORDS(vDeliveryOrigin,vDeliveryDestination)
iTimeLimitMinModifier = round((( fDistance / 16.5 ) + 40)/2) // 15 mins grace to distance. Tested distance works out at 2000m can be done in 2 mins
elif GET_CURRENT_PROPERTY_MANAGEMENT_PROPERTY() = PROPERTY_BAR_HEN_HOUSE
vDeliveryDestination = <<-323.3560, 6264.4307, 30.4463>>
fDistance = GET_DISTANCE_BETWEEN_COORDS(vDeliveryOrigin,vDeliveryDestination)
iTimeLimitMinModifier = round((( fDistance / 16.5 ) + 40)/2)
elif GET_CURRENT_PROPERTY_MANAGEMENT_PROPERTY() = PROPERTY_BAR_PITCHERS
vDeliveryDestination = <<198.5282, 342.2399, 104.9566>>
fDistance = GET_DISTANCE_BETWEEN_COORDS(vDeliveryOrigin,vDeliveryDestination)
iTimeLimitMinModifier = round((( fDistance / 16.5 ) + 15)/2)
elif GET_CURRENT_PROPERTY_MANAGEMENT_PROPERTY() = PROPERTY_BAR_TEQUILALA
vDeliveryDestination = <<-560.0195, 301.1481, 82.1436>>
fDistance = GET_DISTANCE_BETWEEN_COORDS(vDeliveryOrigin,vDeliveryDestination)
iTimeLimitMinModifier = round((( fDistance / 16.5 ) + 15)/2)
ENDIF
icountdownSound = 0
bVariablesInitialised = TRUE
ENDPROC
PROC loadAssets()
REQUEST_MODEL(modelVehDelivery)
REQUEST_ADDITIONAL_TEXT("PMDL", MISSION_TEXT_SLOT)
// REQUEST_ANIM_DICT("")
IF (deliveryVariation >= DELIVERY_MISSION_VARIATION_LOSE_COPS AND deliveryVariation <= DELIVERY_MISSION_VARIATION_LOSE_COPS_2)
REQUEST_MODEL(modelPedCop)
REQUEST_MODEL(modelVehCop)
ELIF deliveryVariation = DELIVERY_MISSION_VARIATION_RECOVER_VAN or deliveryVariation = DELIVERY_MISSION_VARIATION_RECOVER_VAN_2
REQUEST_MODEL(modelPedDelivery)
ENDIF
SET_VEHICLE_MODEL_IS_SUPPRESSED(BENSON, TRUE)
SET_VEHICLE_MODEL_IS_SUPPRESSED(PONY2, TRUE)
IF HAS_MODEL_LOADED(modelVehDelivery)
AND HAS_ADDITIONAL_TEXT_LOADED(MISSION_TEXT_SLOT)
// AND HAS_ANIM_DICT_LOADED("")
IF (deliveryVariation >= DELIVERY_MISSION_VARIATION_LOSE_COPS AND deliveryVariation <= DELIVERY_MISSION_VARIATION_LOSE_COPS_2)
IF HAS_MODEL_LOADED(modelPedCop)
AND HAS_MODEL_LOADED(modelVehCop)
bAssetsLoaded = TRUE
ENDIF
ELIF deliveryVariation = DELIVERY_MISSION_VARIATION_RECOVER_VAN or deliveryVariation = DELIVERY_MISSION_VARIATION_RECOVER_VAN_2
IF HAS_MODEL_LOADED(modelPedDelivery)
bAssetsLoaded = TRUE
ENDIF
ELIF deliveryVariation > DELIVERY_MISSION_VARIATION_RECOVER_VAN_2
if REQUEST_SCRIPT_AUDIO_BANK("Deliveries")
bAssetsLoaded = TRUE
ENDIF
ELSE
bAssetsLoaded = TRUE
ENDIF
ENDIF
ENDPROC
PROC createScene()
vehDelivery = GET_PROPERTY_MANAGEMENT_EVENT_VEHICLE(PROPERTY_MANAGEMENT_VEHICLE_DELIVERY_VEHICLE)
IF NOT IS_VEHICLE_DRIVEABLE(vehDelivery)
vehDelivery = CREATE_VEHICLE(modelVehDelivery, vDeliveryOrigin, fVehDelivery)
INT i
FOR i=1 TO 8
SET_VEHICLE_EXTRA(vehDelivery, i, TRUE)
ENDFOR
if iVehicleExtra != -1
SET_VEHICLE_EXTRA(vehDelivery,iVehicleExtra,false)
endif
ENDIF
SET_VEHICLE_IS_WANTED(vehDelivery, TRUE)
blipVehicle = CREATE_BLIP_FOR_VEHICLE(vehDelivery)
IF deliveryVariation != DELIVERY_MISSION_VARIATION_RECOVER_VAN
and deliveryVariation != DELIVERY_MISSION_VARIATION_RECOVER_VAN_2
IF deliveryVariation > DELIVERY_MISSION_VARIATION_RECOVER_VAN_2
SET_ENTITY_PROOFS(vehDelivery,false,false,false,false,true)//melee proof
// HINT_SCRIPT_AUDIO_BANK("BAR_DELIVER_BOOZE_RATTLE_MASTER")
PLAY_SOUND_FROM_ENTITY(-1, "BAR_DELIVER_BOOZE_RATTLE_MASTER", vehDelivery)
endif
PRINT_NOW(sGetIn, DEFAULT_GOD_TEXT_TIME, 1)
ELSE
pedDelivery[0] = CREATE_PED_INSIDE_VEHICLE(vehDelivery, PEDTYPE_MISSION, modelPedDelivery)
pedDelivery[1] = CREATE_PED_INSIDE_VEHICLE(vehDelivery, PEDTYPE_MISSION, modelPedDelivery, VS_FRONT_RIGHT)
ADD_RELATIONSHIP_GROUP("rghCriminal", rghCriminal)
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_HATE, rghCriminal, RELGROUPHASH_PLAYER)
INT index
REPEAT COUNT_OF(pedDelivery) index
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(pedDelivery[index], TRUE)
GIVE_WEAPON_TO_PED(pedDelivery[index], WEAPONTYPE_SAWNOFFSHOTGUN, -1)
SET_PED_RELATIONSHIP_GROUP_HASH(pedDelivery[index], rghCriminal)
ENDREPEAT
TASK_VEHICLE_DRIVE_WANDER(pedDelivery[0], vehDelivery, 25, DRIVINGMODE_AVOIDCARS_STOPFORPEDS_OBEYLIGHTS)
PRINT_NOW("PMDL_REC", DEFAULT_GOD_TEXT_TIME, 1)
ENDIF
IF NOT IS_ENTITY_DEAD(GET_PLAYERS_LAST_VEHICLE())
vehImpound = GET_PLAYERS_LAST_VEHICLE()
ENDIF
deliveryStage = GET_DELIVERY
ENDPROC
FUNC BOOL IS_PLAYER_INTERFERING_WITH_EVENT()
IF DOES_ENTITY_EXIST(vehDelivery)
IF IS_VEHICLE_DRIVEABLE(vehDelivery)
IF NOT IS_ENTITY_AT_ENTITY(vehDelivery, PLAYER_PED_ID(), << 300, 300, 300 >>)
RETURN TRUE
ENDIF
ELSE
RETURN TRUE
ENDIF
ENDIF
IF IS_PED_INJURED(pedDelivery[0])
IF DOES_BLIP_EXIST(blipPed[0])
REMOVE_BLIP(blipPed[0])
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
PROC RUN_HINT_CAM()
IF NOT IS_PED_INJURED(pedDelivery[0])
AND NOT IS_ENTITY_DEAD(vehDelivery)
IF IS_PED_IN_VEHICLE(pedDelivery[0], vehDelivery)
CONTROL_VEHICLE_CHASE_HINT_CAM_IN_VEHICLE(structHintCam, vehDelivery)
ENDIF
ENDIF
ENDPROC
FUNC BOOL HAS_DELIVERY_VEHICLE_TAKEN_SUFFICIENT_DAMAGE_TO_PULL_OVER()
IF DOES_ENTITY_EXIST(vehDelivery)
IF NOT IS_ENTITY_DEAD(vehDelivery)
IF GET_ENTITY_HEALTH(vehDelivery) < 300
OR GET_VEHICLE_ENGINE_HEALTH(vehDelivery) < 200
OR IS_ENTITY_ON_FIRE(vehDelivery)
OR (IS_VEHICLE_TYRE_BURST(vehDelivery, SC_WHEEL_CAR_FRONT_LEFT) AND IS_VEHICLE_TYRE_BURST(vehDelivery, SC_WHEEL_CAR_FRONT_RIGHT))
OR (IS_VEHICLE_TYRE_BURST(vehDelivery, SC_WHEEL_CAR_REAR_LEFT) AND IS_VEHICLE_TYRE_BURST(vehDelivery, SC_WHEEL_CAR_REAR_RIGHT))
OR (IS_VEHICLE_TYRE_BURST(vehDelivery, SC_WHEEL_CAR_FRONT_LEFT) AND IS_VEHICLE_TYRE_BURST(vehDelivery, SC_WHEEL_CAR_REAR_LEFT))
OR (IS_VEHICLE_TYRE_BURST(vehDelivery, SC_WHEEL_CAR_FRONT_RIGHT) AND IS_VEHICLE_TYRE_BURST(vehDelivery, SC_WHEEL_CAR_REAR_RIGHT))
RETURN TRUE
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
PROC pickupDelivery()
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehDelivery)
if DOES_BLIP_EXIST(blipVehicle)
REMOVE_BLIP(blipVehicle)
endif
IF deliveryVariation <= DELIVERY_MISSION_VARIATION_TIMED_3
iTimeLimit = GET_MILLISECONDS_PER_GAME_MINUTE()*((60*iTimeLimitHourModifier) + iTimeLimitMinModifier)
iTimeLimit += GET_GAME_TIMER()
iWarningTime = iTimeLimit - (GET_MILLISECONDS_PER_GAME_MINUTE()*CLOCK_WARNING_MINUTES)
// iTimeLimitHour = GET_TIMEOFDAY_HOUR(GET_CURRENT_TIMEOFDAY()) + iTimeLimitHourModifier
// iTimeLimitMin = GET_TIMEOFDAY_MINUTE(GET_CURRENT_TIMEOFDAY()) + iTimeLimitMinModifier
// Return delivery to the shop before the time runs out.
// PRINT_NOW(sObjective, DEFAULT_GOD_TEXT_TIME, 1)
elif deliveryVariation > DELIVERY_MISSION_VARIATION_RECOVER_VAN_2
iTimeLimit = GET_MILLISECONDS_PER_GAME_MINUTE()*((60*iTimeLimitHourModifier) + iTimeLimitMinModifier)
iTimeLimit += GET_GAME_TIMER()
iWarningTime = iTimeLimit - (GET_MILLISECONDS_PER_GAME_MINUTE()*CLOCK_WARNING_MINUTES)
// iTimeLimitHour = GET_TIMEOFDAY_HOUR(GET_CURRENT_TIMEOFDAY()) + iTimeLimitHourModifier
// iTimeLimitMin = GET_TIMEOFDAY_MINUTE(GET_CURRENT_TIMEOFDAY()) + iTimeLimitMinModifier
ELIF (deliveryVariation >= DELIVERY_MISSION_VARIATION_LOSE_COPS AND deliveryVariation <= DELIVERY_MISSION_VARIATION_LOSE_COPS_2)
vehCop = CREATE_VEHICLE(modelVehCop, vVehCop, fVehCop)
pedCop[0] = CREATE_PED_INSIDE_VEHICLE(vehCop, PEDTYPE_COP, modelPedCop)
pedCop[1] = CREATE_PED_INSIDE_VEHICLE(vehCop, PEDTYPE_COP, modelPedCop, VS_FRONT_RIGHT)
ADD_RELATIONSHIP_GROUP("rghCop", rghCop)
SET_RELATIONSHIP_BETWEEN_GROUPS(ACQUAINTANCE_TYPE_PED_WANTED, rghCop, RELGROUPHASH_PLAYER)
SET_PED_COMBAT_ATTRIBUTES(pedCop[0], CA_CAN_BUST, TRUE)
SET_PED_COMBAT_ATTRIBUTES(pedCop[1], CA_CAN_BUST, TRUE)
INT index
REPEAT COUNT_OF(pedCop) index
GIVE_WEAPON_TO_PED(pedCop[index], WEAPONTYPE_PISTOL, -1)
// SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(pedCop[index], TRUE)
SET_PED_SEEING_RANGE(pedCop[index], 100)
SET_PED_RELATIONSHIP_GROUP_HASH(pedCop[index], rghCop)
ENDREPEAT
// PRINT_NOW(sObjective, DEFAULT_GOD_TEXT_TIME, 1)
ENDIF
deliveryStage = RETURN_DELIVERY
ENDIF
ENDPROC
PROC recoverDelivery()
IF NOT IS_ENTITY_DEAD(vehDelivery)
IF HAS_DELIVERY_VEHICLE_TAKEN_SUFFICIENT_DAMAGE_TO_PULL_OVER()
OR IS_PED_INJURED(pedDelivery[0])
INT index
REPEAT COUNT_OF(pedDelivery) index
IF NOT IS_PED_INJURED(pedDelivery[index])
IF NOT DOES_BLIP_EXIST(blipPed[index])
blipPed[index] = CREATE_BLIP_FOR_PED(pedDelivery[index], TRUE)
SET_PED_COMBAT_ATTRIBUTES(pedDelivery[index], CA_USE_VEHICLE, FALSE)
OPEN_SEQUENCE_TASK(Seq)
TASK_LEAVE_ANY_VEHICLE(NULL)
TASK_COMBAT_PED(NULL, PLAYER_PED_ID())
CLOSE_SEQUENCE_TASK(Seq)
TASK_PERFORM_SEQUENCE(pedDelivery[index], Seq)
CLEAR_SEQUENCE_TASK(Seq)
ENDIF
ELSE
IF DOES_BLIP_EXIST(blipPed[index])
REMOVE_BLIP(blipPed[index])
ENDIF
ENDIF
ENDREPEAT
ELSE
IF NOT bDeliveryFleeing
IF NOT IS_PED_INJURED(pedDelivery[0])
IF IS_ENTITY_AT_ENTITY(PLAYER_PED_ID(), pedDelivery[0], << 50, 50, 50 >>)
TASK_VEHICLE_MISSION_PED_TARGET(pedDelivery[0], vehDelivery, PLAYER_PED_ID(), MISSION_FLEE, 25, DRIVINGMODE_AVOIDCARS, -1, -1)
bDeliveryFleeing = TRUE
ENDIF
ENDIF
ENDIF
ENDIF
IF IS_PED_IN_VEHICLE(PLAYER_PED_ID(), vehDelivery)
IF DOES_BLIP_EXIST(blipVehicle)
REMOVE_BLIP(blipVehicle)
ENDIF
KILL_CHASE_HINT_CAM(structHintCam)
deliveryStage = RETURN_DELIVERY
ELSE
IF IS_VEHICLE_SEAT_FREE(vehDelivery)
OR IS_PED_INJURED(pedDelivery[0])
KILL_CHASE_HINT_CAM(structHintCam)
ELSE
RUN_HINT_CAM()
ENDIF
ENDIF
ENDIF
ENDPROC
PROC returnDelivery()
IF (deliveryVariation >= DELIVERY_MISSION_VARIATION_LOSE_COPS AND deliveryVariation <= DELIVERY_MISSION_VARIATION_LOSE_COPS_2)
INT index
REPEAT COUNT_OF(pedCop) index
IF NOT bPlayerWanted
IF NOT IS_PED_INJURED(pedCop[index])
// IF CAN_PED_SEE_HATED_PED(pedCop[index], PLAYER_PED_ID())
IF NOT IS_ENTITY_AT_COORD(PLAYER_PED_ID(), vDeliveryOrigin, << 50, 50, 50 >>)
// SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(pedCop[index], FALSE)
SET_PLAYER_WANTED_LEVEL_NO_DROP(PLAYER_ID(), 2)
SET_PLAYER_WANTED_LEVEL_NOW(PLAYER_ID())
SET_WANTED_LEVEL_DIFFICULTY(PLAYER_ID(), 0)
bPlayerWanted = TRUE
ENDIF
ENDIF
ELSE
IF NOT IS_PLAYER_WANTED_LEVEL_GREATER(PLAYER_ID(), 0)
IF NOT IS_PED_INJURED(pedCop[index])
TASK_SMART_FLEE_PED(pedCop[index], PLAYER_PED_ID(), 1000, -1)
SET_PED_KEEP_TASK(pedCop[index], TRUE)
SET_PED_AS_NO_LONGER_NEEDED(pedCop[index])
ENDIF
IF DOES_ENTITY_EXIST(vehCop)
SET_VEHICLE_AS_NO_LONGER_NEEDED(vehCop)
ENDIF
ENDIF
ENDIF
ENDREPEAT
ENDIF
if IS_PLAYER_AT_LOCATION_IN_VEHICLE(sLocatesData, vDeliveryDestination, g_vOnFootLocate, true, vehDelivery, sObjective, "", sGetback, true)
println("DELIVERY HERE")
//Changing above since I had a bug about the locate being too big, we might want to do different checks depending on property.
BRING_VEHICLE_TO_HALT_AND_DISABLE_VEH_CONTROLS(vehDelivery,DEFAULT_VEH_STOPPING_DISTANCE, 2)
TASK_LEAVE_ANY_VEHICLE(PLAYER_PED_ID(),2000)
SET_VEHICLE_IS_CONSIDERED_BY_PLAYER(vehDelivery,false)
CLEAR_MISSION_LOCATE_STUFF(sLocatesData)
MISSION_PASSED()
endif
INT index
REPEAT COUNT_OF(pedDelivery) index
IF NOT IS_PED_INJURED(pedDelivery[index])
IF NOT DOES_BLIP_EXIST(blipPed[index])
blipPed[index] = CREATE_BLIP_FOR_PED(pedDelivery[index], TRUE)
OPEN_SEQUENCE_TASK(Seq)
TASK_LEAVE_ANY_VEHICLE(NULL)
TASK_COMBAT_PED(NULL, PLAYER_PED_ID())
CLOSE_SEQUENCE_TASK(Seq)
TASK_PERFORM_SEQUENCE(pedDelivery[index], Seq)
CLEAR_SEQUENCE_TASK(Seq)
SET_PED_KEEP_TASK(pedDelivery[index], TRUE)
ENDIF
IF NOT IS_ENTITY_AT_ENTITY(pedDelivery[index], PLAYER_PED_ID(), << 100, 100, 100 >>)
IF DOES_BLIP_EXIST(blipPed[index])
REMOVE_BLIP(blipPed[index])
ENDIF
TASK_SMART_FLEE_PED(pedDelivery[index], PLAYER_PED_ID(), 1000, -1)
SET_PED_KEEP_TASK(pedDelivery[index], TRUE)
SET_PED_AS_NO_LONGER_NEEDED(pedDelivery[index])
ENDIF
ELSE
IF DOES_BLIP_EXIST(blipPed[index])
REMOVE_BLIP(blipPed[index])
ENDIF
ENDIF
ENDREPEAT
ENDPROC
Func bool Is_clock_time_less_than_or_equal(int h,int m)
if GET_CLOCK_HOURS() < h
return true
elif GET_CLOCK_HOURS() = h
if GET_CLOCK_MINUTES() <= m
return true
else
return false
endif
elif GET_CLOCK_HOURS() > h
return false
endif
return false
endfunc
PROC timeLimitCountdown()
INT iDisplayTime
// Current time remaining converted to milliseconds so generic timer shows it properly
iDisplayTime = iTimeLimit - GET_GAME_TIMER()
IF iDisplayTime < 0
iDisplayTime = 0
ENDIF
IF GET_GAME_TIMER() >= iWarningTime
DRAW_GENERIC_TIMER(iDisplayTime, "TIMER_TIME", 0, TIMER_STYLE_DONTUSEMILLISECONDS, -1, PODIUMPOS_NONE, HUDORDER_DONTCARE, FALSE, HUD_COLOUR_RED)
ELSE
DRAW_GENERIC_TIMER(iDisplayTime, "TIMER_TIME")
ENDIF
switch icountdownSound
case 0
IF GET_GAME_TIMER() >= (iTimeLimit - 10000)
PLAY_SOUND_FRONTEND(-1, "10_SEC_WARNING", "HUD_MINI_GAME_SOUNDSET")
icountdownSound++
endif
break
case 1
IF GET_GAME_TIMER() >= (iTimeLimit - 9000)
PLAY_SOUND_FRONTEND(-1, "10_SEC_WARNING", "HUD_MINI_GAME_SOUNDSET")
icountdownSound++
endif
break
case 2
IF GET_GAME_TIMER() >= (iTimeLimit - 8000)
PLAY_SOUND_FRONTEND(-1, "10_SEC_WARNING", "HUD_MINI_GAME_SOUNDSET")
icountdownSound++
endif
break
case 3
IF GET_GAME_TIMER() >= (iTimeLimit - 7000)
PLAY_SOUND_FRONTEND(-1, "10_SEC_WARNING", "HUD_MINI_GAME_SOUNDSET")
icountdownSound++
endif
break
case 4
IF GET_GAME_TIMER() >= (iTimeLimit - 6000)
PLAY_SOUND_FRONTEND(-1, "10_SEC_WARNING", "HUD_MINI_GAME_SOUNDSET")
icountdownSound++
endif
break
case 5
IF GET_GAME_TIMER() >= (iTimeLimit - 5000)
PLAY_SOUND_FRONTEND(-1, "10_SEC_WARNING", "HUD_MINI_GAME_SOUNDSET")
icountdownSound++
endif
break
case 6
IF GET_GAME_TIMER() >= (iTimeLimit - 4500)
PLAY_SOUND_FRONTEND(-1, "10_SEC_WARNING", "HUD_MINI_GAME_SOUNDSET")
icountdownSound++
endif
break
case 7
IF GET_GAME_TIMER() >= (iTimeLimit - 4000)
PLAY_SOUND_FRONTEND(-1, "10_SEC_WARNING", "HUD_MINI_GAME_SOUNDSET")
icountdownSound++
endif
break
case 8
IF GET_GAME_TIMER() >= (iTimeLimit - 3500)
PLAY_SOUND_FRONTEND(-1, "10_SEC_WARNING", "HUD_MINI_GAME_SOUNDSET")
icountdownSound++
endif
break
case 9
IF GET_GAME_TIMER() >= (iTimeLimit - 3000)
PLAY_SOUND_FRONTEND(-1, "10_SEC_WARNING", "HUD_MINI_GAME_SOUNDSET")
icountdownSound++
endif
break
case 10
IF GET_GAME_TIMER() >= (iTimeLimit - 2500)
PLAY_SOUND_FRONTEND(-1, "10_SEC_WARNING", "HUD_MINI_GAME_SOUNDSET")
icountdownSound++
endif
break
case 11
IF GET_GAME_TIMER() >= (iTimeLimit - 2000)
PLAY_SOUND_FRONTEND(-1, "10_SEC_WARNING", "HUD_MINI_GAME_SOUNDSET")
icountdownSound++
endif
break
case 12
IF GET_GAME_TIMER() >= (iTimeLimit - 1500)
PLAY_SOUND_FRONTEND(-1, "10_SEC_WARNING", "HUD_MINI_GAME_SOUNDSET")
icountdownSound++
endif
break
case 13
IF GET_GAME_TIMER() >= (iTimeLimit - 1000)
PLAY_SOUND_FRONTEND(-1, "10_SEC_WARNING", "HUD_MINI_GAME_SOUNDSET")
icountdownSound++
endif
break
case 14
IF GET_GAME_TIMER() >= (iTimeLimit - 500)
PLAY_SOUND_FRONTEND(-1, "10_SEC_WARNING", "HUD_MINI_GAME_SOUNDSET")
icountdownSound++
endif
break
case 15
IF GET_GAME_TIMER() >= (iTimeLimit)
PLAY_SOUND_FRONTEND(-1, "TIMER_STOP", "HUD_MINI_GAME_SOUNDSET")
icountdownSound++
endif
break
case 16
break
endswitch
IF GET_GAME_TIMER() >= iTimeLimit
// if not Is_clock_time_less_than_or_equal(iTimeLimitHour,iTimeLimitMin)
deliveryStage = TOO_LATE
ENDIF
ENDPROC
PROC DamageCheck()
if DOES_ENTITY_EXIST(vehDelivery)
if IS_VEHICLE_DRIVEABLE(vehDelivery)
int maxHealth = 200
int currentHealth = GET_ENTITY_HEALTH(vehDelivery) - 800
if IS_ENTITY_UPSIDEDOWN(vehDelivery)
set_entity_health(vehDelivery,GET_ENTITY_HEALTH(vehDelivery) - 5)
endif
if currentHealth <= 0
deliveryStage = TOO_DAMAGED
elif currentHealth < 75
draw_timer_hud(currentHealth ,maxHealth,"PMDL_DMG")
else
draw_timer_hud(currentHealth,maxHealth,"PMDL_DMG",HUD_COLOUR_WHITE)
endif
else
deliveryStage = TOO_DAMAGED
endif
else
deliveryStage = TOO_DAMAGED
endif
endPROC
// main script
SCRIPT
SET_MISSION_FLAG(TRUE)
IF HAS_FORCE_CLEANUP_OCCURRED()
SET_PROPERTY_MANAGEMENT_RESULT(PROPERTY_MANAGEMENT_RESULT_FAILURE)
MISSION_CLEANUP()
ENDIF
deliveryVariation = GET_CURRENT_DELIVERY_VARIATION()
//IF GET_CURRENT_PROPERTY_MANAGEMENT_PROPERTY() <> PROPERTY_WEED_SHOP
// #IF IS_DEBUG_BUILD
// PRINT_STRING_WITH_LITERAL_STRING("STRTNM1", "Placeholder delivery mission - S to pass F to fail", 10000, 0)
// #ENDIF
//ENDIF
#if IS_DEBUG_BUILD
widget_debug = START_WIDGET_GROUP("DELIVERY SCRIPT")
SET_LOCATES_HEADER_WIDGET_GROUP(widget_debug)
STOP_WIDGET_GROUP()
#endif
WHILE TRUE
SWITCH ambStage
CASE propertyCanRun
IF NOT bVariablesInitialised
initialisePropertyMissionVariables()
ELSE
loadAssets()
ENDIF
IF bAssetsLoaded
bDoFullCleanUp = TRUE
ambStage = (propertyRunning)
ENDIF
BREAK
CASE propertyRunning
IF NOT IS_PLAYER_INTERFERING_WITH_EVENT()
SWITCH deliveryStage
CASE SETUP_STAGE
createScene()
BREAK
CASE GET_DELIVERY
IF (deliveryVariation = DELIVERY_MISSION_VARIATION_RECOVER_VAN OR deliveryVariation = DELIVERY_MISSION_VARIATION_RECOVER_VAN_2)
recoverDelivery()
ELSE
pickupDelivery()
ENDIF
BREAK
CASE RETURN_DELIVERY
returnDelivery()
IF deliveryVariation < DELIVERY_MISSION_VARIATION_LOSE_COPS
timeLimitCountdown()
elif deliveryVariation > DELIVERY_MISSION_VARIATION_RECOVER_VAN_2 // all booze delivery
timeLimitCountdown()
DamageCheck()
ENDIF
BREAK
CASE TOO_LATE
CASE TOO_DAMAGED
MISSION_FAILED()
BREAK
ENDSWITCH
ELSE
PRINTln("\n@@@@@@@@@@@@@@@@@@@@ IS_PLAYER_INTERFERING_WITH_EVENT @@@@@@@@@@@@@@@@@@@@\n")
MISSION_FAILED()
ENDIF
BREAK
ENDSWITCH
#IF IS_DEBUG_BUILD
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_J)
IF deliveryStage = GET_DELIVERY
IF NOT IS_ENTITY_DEAD(vehDelivery)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), vehDelivery)
ENDIF
ELIF deliveryStage = RETURN_DELIVERY
IF NOT IS_ENTITY_DEAD(vehDelivery)
SET_PED_INTO_VEHICLE(PLAYER_PED_ID(), vehDelivery)
SET_ENTITY_COORDS(vehDelivery, vDeliveryDestination)
ENDIF
ENDIF
ENDIF
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_S)
MISSION_PASSED()
ENDIF
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_F)
MISSION_FAILED()
ENDIF
#ENDIF
// main loop
WAIT(0)
ENDWHILE
ENDSCRIPT