591 lines
18 KiB
Python
Executable File
591 lines
18 KiB
Python
Executable File
//////////////////////////////////////////////////////////
|
|
// prostitute
|
|
// Original Author: Kevin Wong -> Evan Lawson
|
|
// Scripter: John Diaz
|
|
//
|
|
|
|
//USING "pb_prostitute_pimp.sch" // ---- comment this in and remove the next 2 if IS_PIMP_AVAILABLE BECOMES 1
|
|
CONST_INT ALLOW_PROSTITUTE_DEBUG 0
|
|
|
|
USING "pb_prostitute_ai.sch"
|
|
USING "load_queue_public.sch"
|
|
|
|
LoadQueueLarge sLoadQueue
|
|
|
|
/////////////////////////////////////
|
|
// *** MISSION START PROCEDURE *** //
|
|
/////////////////////////////////////
|
|
|
|
PROC START_UP_CHECKS()
|
|
|
|
//is_ambinet_script_interacting_with_player
|
|
//is_this_script_interacting
|
|
SET_PROSTITUTE_MISSION_IN_PROGRESS(FALSE)
|
|
IF DOES_ENTITY_EXIST(prostitute_ped)
|
|
IF NOT IS_ENTITY_DEAD(prostitute_ped)
|
|
SET_PROSTITUTE_MISSION_IN_PROGRESS(TRUE)
|
|
ELSE
|
|
PROST_PB_DEBUG_MESSAGE("Prostitue: not continuing, prostitue is dead")
|
|
ENDIF
|
|
ELSE
|
|
PROST_PB_DEBUG_MESSAGE("Prostitue: not continuing, prostitue doesn't exist")
|
|
ENDIF
|
|
|
|
IF NOT IS_PLAYER_PLAYING(PLAYER_ID())
|
|
OR IS_ENTITY_DEAD(PLAYER_ped_ID())
|
|
SET_PROSTITUTE_MISSION_IN_PROGRESS(FALSE)
|
|
PROST_PB_DEBUG_MESSAGE("Prostitue: not continuing, player isn't player or is dead")
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
FUNC BOOL INITIALISE_THE_SCRIPT()
|
|
SWITCH ePBInitState
|
|
CASE PROSTITUTE_INIT_REQUEST
|
|
|
|
IF NOT IS_THIS_MP_PROSTITUTION()
|
|
ADD_STREAMED_ANIM(pbStreamedAnims, GET_ANIM_DICT_FOR_PROSTITUTE_TYPE(eProstituteType))
|
|
// ADD_STREAMED_ANIM(pbStreamedAnims, GET_ANIM_DICT_FOR_PROSTITUTE_TYPE(PRO_TYPE_CRACKHEAD))
|
|
// ADD_STREAMED_ANIM(pbStreamedAnims, GET_ANIM_DICT_FOR_PROSTITUTE_TYPE(PRO_TYPE_COKEHEAD))
|
|
// ADD_STREAMED_ANIM(pbStreamedAnims, GET_ANIM_DICT_FOR_PROSTITUTE_TYPE(PRO_TYPE_VANILLA))
|
|
// ADD_STREAMED_ANIM(pbStreamedAnims, GET_ANIM_DICT_FOR_PROSTITUTE_TYPE(PRO_TYPE_FRENCH))
|
|
|
|
REQUEST_ALL_ANIMS(pbStreamedAnims, sLoadQueue)
|
|
PROST_PB_DEBUG_MESSAGE("Moving to PROSTITUTE_INIT_STREAMING")
|
|
ENDIF
|
|
IF IS_THIS_MP_PROSTITUTION()
|
|
RESERVE_NETWORK_MISSION_PEDS(1)
|
|
RESERVE_NETWORK_MISSION_VEHICLES(1)
|
|
NETWORK_REQUEST_CONTROL_OF_ENTITY( prostitute_ped )
|
|
ENDIF
|
|
ePBInitState = PROSTITUTE_INIT_STREAMING
|
|
BREAK
|
|
|
|
CASE PROSTITUTE_INIT_STREAMING
|
|
IF NOT IS_THIS_MP_PROSTITUTION()
|
|
IF ARE_ANIMS_STREAMED(sLoadQueue)
|
|
SET_BITMASK_AS_ENUM(iProScriptBits,PRO_BIT_bAnimsAllStreamed)
|
|
PROST_PB_DEBUG_MESSAGE("Moving to PROSTITUTE_INIT_INIT")
|
|
ePBInitState = PROSTITUTE_INIT_INIT
|
|
ENDIF
|
|
ELIF IS_THIS_MP_PROSTITUTION()
|
|
SET_BITMASK_AS_ENUM(iProScriptBits, PRO_BIT_bAnimsAllStreamed)
|
|
PROST_PB_DEBUG_MESSAGE("Moving to PROSTITUTE_INIT_INIT")
|
|
ePBInitState = PROSTITUTE_INIT_INIT
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE PROSTITUTE_INIT_INIT
|
|
//LOAD_ADDITIONAL_TEXT ("PUZZLE", MINIGAME_TEXT_SLOT)
|
|
chosen_sexual_activity = SEX_TYPE_CHOSEN_BLOWJOB //SEX_TYPE_CHOSEN_NONE
|
|
|
|
chosen_sexual_activity_int = ENUM_TO_INT (chosen_sexual_activity)//4
|
|
CLEAR_BITMASK_AS_ENUM(iProScriptBits,PRO_BIT_sex_anims_have_been_started)
|
|
CLEAR_BITMASK_AS_ENUM(iProScriptBits,PRO_BIT_player_has_made_a_choice)
|
|
customer_type = CUSTOMER_NO_CUSTOMER
|
|
customer_ped = NULL
|
|
customer_VEHICLE = NULL
|
|
|
|
#IF IS_PIMP_AVAILABLE//-----------------------------------------
|
|
pimp_ped = NULL
|
|
#ENDIF
|
|
|
|
PROST_PB_DEBUG_MESSAGE("Moving to PROSTITUTE_INIT_COMPLETE")
|
|
ePBInitState = PROSTITUTE_INIT_COMPLETE
|
|
BREAK
|
|
|
|
CASE PROSTITUTE_INIT_COMPLETE
|
|
|
|
IF NOT IS_PED_INJURED(prostitute_ped)
|
|
|
|
IF NOT IS_THIS_MP_PROSTITUTION()
|
|
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(prostitute_ped, FALSE)
|
|
SET_PED_CAN_EVASIVE_DIVE(prostitute_ped,FALSE)
|
|
//SET_PED_SHOULD_PLAY_NORMAL_SCENARIO_EXIT(prostitute_ped)
|
|
|
|
ADD_PED_FOR_DIALOGUE(cultresConversation, CONST_iDialogueProstituteSlot, prostitute_ped, "Prostitutes")
|
|
CDEBUG1LN(DEBUG_PROSTITUTE, "PROSTITUTE_INIT_COMPLETE in SP")
|
|
|
|
RETURN TRUE
|
|
ELSE
|
|
IF NOT NETWORK_HAS_CONTROL_OF_ENTITY( prostitute_ped )
|
|
NETWORK_REQUEST_CONTROL_OF_ENTITY( prostitute_ped )
|
|
|
|
ELSE
|
|
SET_BLOCKING_OF_NON_TEMPORARY_EVENTS(prostitute_ped, FALSE)
|
|
ADD_PED_FOR_DIALOGUE(cultresConversation, CONST_iDialogueProstituteSlot, prostitute_ped, "Prostitutes")
|
|
SET_PED_CAN_EVASIVE_DIVE(prostitute_ped,FALSE)
|
|
SET_PED_SHOULD_PLAY_NORMAL_SCENARIO_EXIT(prostitute_ped)
|
|
CDEBUG1LN(DEBUG_PROSTITUTE, "PROSTITUTE_INIT_COMPLETE in MP")
|
|
|
|
RETURN TRUE
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
|
|
BREAK
|
|
ENDSWITCH
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
PROC HANDLE_CLOSEST_PROSTITUTE()
|
|
|
|
//Reset Flag = PRF_DisablePedEnteredMyVehicleEvents
|
|
IF g_bPlayerHasActiveProstitute
|
|
|
|
//Prevents here from freaking out because I haven't set relationship groups
|
|
IF IS_VEHICLE_DRIVEABLE(iPlayersVehicle)
|
|
IF IS_PED_IN_VEHICLE(prostitute_ped,iPlayersVehicle)
|
|
SET_DONT_FREAK_OUT_ON_EXIT_FLAG()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
DRAW_DEBUG_TEXT_2D("PLYR HAS ACTIVE PRO", <<0.6,0.04,0.0>>)
|
|
#ENDIF
|
|
EXIT //if you already have a prostitute don't worry about it
|
|
ENDIF
|
|
|
|
//If player is wanted exit out
|
|
IF (GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) > 0)
|
|
#IF IS_DEBUG_BUILD
|
|
DRAW_DEBUG_TEXT_2D("PLYR IS WANTED", <<0.6,0.04,0.0>>)
|
|
#ENDIF
|
|
EXIT //
|
|
ENDIF
|
|
|
|
IF IS_ENTITY_DEAD( prostitute_ped )
|
|
OR NOT DOES_ENTITY_EXIST( prostitute_ped )
|
|
IF g_threadIDOfClosestProstitute <> GET_ID_OF_THIS_THREAD()
|
|
AND IS_BITMASK_AS_ENUM_SET(iProScriptBits,PRO_BIT_bIsClosestProstitute)
|
|
CLEAR_BITMASK_AS_ENUM(iProScriptBits,PRO_BIT_bIsClosestProstitute)
|
|
ENDIF
|
|
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF (VDIST2(GET_ENTITY_COORDS(prostitute_ped), GET_ENTITY_COORDS(PLAYER_PED_ID())) < g_fDistToClosestProstitute
|
|
OR g_fDistToClosestProstitute = 0)
|
|
AND customer_type != CUSTOMER_OTHER_IN_VEHICLE
|
|
|
|
g_fDistToClosestProstitute = VDIST2(GET_ENTITY_COORDS(prostitute_ped), GET_ENTITY_COORDS(PLAYER_PED_ID()))
|
|
g_threadIDOfClosestProstitute = GET_ID_OF_THIS_THREAD()
|
|
|
|
SET_BITMASK_AS_ENUM(iProScriptBits,PRO_BIT_bIsClosestProstitute)
|
|
ELSE
|
|
IF g_threadIDOfClosestProstitute = GET_ID_OF_THIS_THREAD()
|
|
g_fDistToClosestProstitute = VDIST2(GET_ENTITY_COORDS(prostitute_ped), GET_ENTITY_COORDS(PLAYER_PED_ID()))
|
|
ELSE
|
|
CLEAR_BITMASK_AS_ENUM(iProScriptBits,PRO_BIT_bIsClosestProstitute)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
/////////////////////////////
|
|
// *** DEBUG FUNCTIONS *** //
|
|
/////////////////////////////
|
|
/// This is where we do the first debug screen printing.
|
|
PROC PROSTITUTE_DEBUG_STUFF()
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
#IF ALLOW_PROSTITUTE_DEBUG
|
|
SHOW_WHAT_STATE_THE_PRO_IS_IN()
|
|
|
|
//Print use context debug to screen
|
|
IF g_bPlayerHasActiveProstitute
|
|
TEXT_LABEL_31 sDebugContext
|
|
sDebugContext = "Pro Context: "
|
|
sDebugContext += prostituteContextID
|
|
DRAW_DEBUG_TEXT_2D(sDebugContext,<<0.8, 0.2,0.0>>)
|
|
ENDIF
|
|
|
|
IF HAS_SCRIPT_LOADED("pb_prostitute")
|
|
TEXT_LABEL_31 sDebugScriptCount
|
|
sDebugScriptCount = "# Pros Running: "
|
|
sDebugScriptCount += GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("pb_prostitute"))
|
|
DRAW_DEBUG_TEXT_2D(sDebugScriptCount,<<0.8, 0.22,0.0>>)
|
|
|
|
ENDIF
|
|
|
|
//Dist to Closest Prostitute
|
|
TEXT_LABEL_31 sDebugClosest
|
|
sDebugClosest = "Closest in m: "
|
|
sDebugClosest += ROUND(g_fDistToClosestProstitute)
|
|
DRAW_DEBUG_TEXT_2D(sDebugClosest,<<0.8, 0.24,0.0>>)
|
|
|
|
TEXT_LABEL_31 sDebugClosestID
|
|
sDebugClosestID = "ID# Closest: "
|
|
sDebugClosestID += NATIVE_TO_INT(g_threadIDOfClosestProstitute)
|
|
DRAW_DEBUG_TEXT_2D(sDebugClosestID,<<0.8, 0.26,0.0>>)
|
|
|
|
|
|
//Piggy Back off this variable in the booty call scripts
|
|
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_P)
|
|
IF NOT IS_BITMASK_AS_ENUM_SET(iProScriptBits, PRO_BIT_bDebugInfo)
|
|
SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(TRUE)
|
|
bDbgBlipPeds = TRUE
|
|
debug_text = TRUE
|
|
SET_BITMASK_AS_ENUM(iProScriptBits, PRO_BIT_bDebugInfo)
|
|
ELSE
|
|
SET_DEBUG_LINES_AND_SPHERES_DRAWING_ACTIVE(FALSE)
|
|
bDbgBlipPeds = FALSE
|
|
debug_text = FALSE
|
|
CLEAR_BITMASK_AS_ENUM(iProScriptBits, PRO_BIT_bDebugInfo)
|
|
|
|
IF DOES_BLIP_EXIST(blipNearby)
|
|
REMOVE_BLIP(blipNearby)
|
|
ENDIF
|
|
|
|
IF DOES_BLIP_EXIST(prostitute_blip)
|
|
REMOVE_BLIP(prostitute_blip)
|
|
ENDIF
|
|
|
|
IF DOES_BLIP_EXIST(customer_blip)
|
|
REMOVE_BLIP(customer_blip)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF IS_KEYBOARD_KEY_PRESSED(KEY_F)
|
|
SET_PROSTITUTE_STATE(prostitute_WAITING_TO_END)
|
|
CDEBUG1LN(DEBUG_PROSTITUTE, "[DEBUG] F KEY PRESSED!!!!!!!!!!!!!!!!!")
|
|
ENDIF
|
|
IF debug_text
|
|
|
|
IF IS_KEYBOARD_KEY_PRESSED(KEY_S)
|
|
WHILE IS_KEYBOARD_KEY_PRESSED(KEY_S)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
// go to mission passed
|
|
SET_PROSTITUTE_MISSION_IN_PROGRESS(FALSE)
|
|
ENDIF
|
|
|
|
IF IS_KEYBOARD_KEY_PRESSED(KEY_B)
|
|
WHILE IS_KEYBOARD_KEY_PRESSED(KEY_B)
|
|
WAIT(0)
|
|
ENDWHILE
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_ped_ID())
|
|
iPlayersVehicle = GET_VEHICLE_PED_IS_IN(PLAYER_ped_ID() )
|
|
|
|
MAKE_VEHICLE_BOUNCE(iPlayersVehicle)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
ENDIF
|
|
|
|
#ENDIF
|
|
#endif
|
|
|
|
/*Functions used to travel world and mark quiet locations
|
|
|
|
SET_BIGMAP_ACTIVE(TRUE)
|
|
SET_BIGMAP_FULLSCREEN(TRUE)
|
|
|
|
IF IS_KEYBOARD_KEY_JUST_PRESSED(KEY_1)
|
|
VECTOR pos = GET_ENTITY_COORDS(PLAYER_PED_ID(),FALSE)
|
|
pos.z = 0
|
|
blip = ADD_BLIP_FOR_RADIUS(pos, 100.0)
|
|
SET_BLIP_COLOUR(blip, BLIP_COLOUR_RED)
|
|
ENDIF
|
|
|
|
|
|
//*/
|
|
|
|
// IF IS_KEYBOARD_KEY_PRESSED(KEY_1)
|
|
// WHILE IS_KEYBOARD_KEY_PRESSED(KEY_1)
|
|
// WAIT(0)
|
|
// ENDWHILE
|
|
//
|
|
// IF NOT IS_ped_INJURED(prostitute_ped)
|
|
// IF prostitute_told_to_play_loop
|
|
// // if doing the sex anim
|
|
//
|
|
// IF GET_SCRIPT_TASK_STATUS (prostitute_ped, SCRIPT_TASK_PLAY_ANIM, current_task_status) = PERFORMING_TASK
|
|
// IF IS_ENTITY_PLAYING_ANIM(prostitute_ped, anim_dict, sex_f_anim_loop[chosen_sexual_activity])
|
|
// // if anim time is near a certain predetermined time (when contact)
|
|
// FLOAT sex_anim_time
|
|
// GET_ENTITY_ANIM_CURRENT_TIME(prostitute_ped, anim_dict, sex_f_anim_loop[chosen_sexual_activity], sex_anim_time)
|
|
//
|
|
// OPEN_DEBUG_FILE ()
|
|
// SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
// SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
// SAVE_STRING_TO_DEBUG_FILE("// sex_anim_time = ")
|
|
// SAVE_FLOAT_TO_DEBUG_FILE (sex_anim_time)
|
|
// SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
// SAVE_STRING_TO_DEBUG_FILE("IF sex_anim_time > ")
|
|
// SAVE_FLOAT_TO_DEBUG_FILE (sex_anim_time - 0.005)
|
|
// SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
// SAVE_STRING_TO_DEBUG_FILE("AND sex_anim_time < ")
|
|
// SAVE_FLOAT_TO_DEBUG_FILE (sex_anim_time + 0.005)
|
|
// SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
// SAVE_STRING_TO_DEBUG_FILE("RETURN TRUE")
|
|
// SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
// SAVE_STRING_TO_DEBUG_FILE("ENDIF")
|
|
// SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
// CLOSE_DEBUG_FILE()
|
|
// ENDIF
|
|
// ENDIF
|
|
// ENDIF
|
|
// ENDIF
|
|
// ENDIF
|
|
|
|
|
|
|
|
ENDPROC
|
|
|
|
PROC CLIENT_MAINTAIN_RESERVATIONS()
|
|
IF NOT NETWORK_IS_GAME_IN_PROGRESS()
|
|
CDEBUG2LN( DEBUG_NET_AMBIENT, "Prostitute: CLIENT_MAINTAIN_RESERVATIONS - Exiting: NOT NETWORK_IS_GAME_IN_PROGRESS")
|
|
EXIT
|
|
ENDIF
|
|
IF NOT NETWORK_GET_THIS_SCRIPT_IS_NETWORK_SCRIPT()
|
|
CDEBUG2LN( DEBUG_NET_AMBIENT, "Prostitute: CLIENT_MAINTAIN_RESERVATIONS - Exiting: NOT NETWORK_GET_THIS_SCRIPT_IS_NETWORK_SCRIPT")
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF GET_NUM_RESERVED_MISSION_PEDS() <> 1
|
|
IF CAN_RESERVE_NETWORK_PEDS_FOR_THIS_SCRIPT(1, FALSE, TRUE)
|
|
IF GET_NUM_CREATED_MISSION_PEDS() <= 1
|
|
RESERVE_NETWORK_MISSION_PEDS(1)
|
|
CDEBUG2LN( DEBUG_NET_AMBIENT, "Prostitute: RESERVE_NETWORK_MISSION_PEDS(", 1, ")" )
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
////////////////////// *** SCRIPT *** //
|
|
////////////////////
|
|
SCRIPT (PED_INDEX passed_ped)
|
|
// IF IS_THIS_MP_PROSTITUTION()
|
|
// NETWORK_SET_SCRIPT_IS_SAFE_FOR_NETWORK_GAME()
|
|
// ENDIF
|
|
|
|
IF g_bMagDemoActive
|
|
PRINTLN("Mag Demo is Active. Quit Prostitute Script")
|
|
TERMINATE_THIS_THREAD()
|
|
ENDIF
|
|
|
|
// B* 1596098 - High script memory. Requested to stop script from running during jobs
|
|
IF NETWORK_IS_GAME_IN_PROGRESS()
|
|
IF IS_PLAYER_ON_ANY_FM_JOB(PLAYER_ID())
|
|
PRINTLN("A Multiplayer Job is currently active. Quit Prostitute Script")
|
|
TERMINATE_THIS_THREAD()
|
|
ENDIF
|
|
IF IS_PLAYER_IN_VEHICLE_WITH_ANOTHER_PLAYER(PLAYER_ID(), TRUE)
|
|
PRINTLN("[PB_PROSTITUTE] Another player is in the vehicle with us. Quit Prostitute Script")
|
|
TERMINATE_THIS_THREAD()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//Peyote B* - 2067198
|
|
IF IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_ANIMAL)
|
|
OR IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_DIRECTOR)
|
|
TERMINATE_THIS_THREAD()
|
|
ENDIF
|
|
|
|
IF NOT IS_THIS_MP_PROSTITUTION()
|
|
and not NETWORK_IS_GAME_IN_PROGRESS()
|
|
IF HAS_FORCE_CLEANUP_OCCURRED(FORCE_CLEANUP_FLAG_SP_TO_MP| DEFAULT_FORCE_CLEANUP_FLAGS | FORCE_CLEANUP_FLAG_MAGDEMO)
|
|
CPRINTLN(DEBUG_PROSTITUTE, "FORCE_CLEANUP CALLED")
|
|
CLEANUP_PLAYER_PROSTITUTE_INTERACTION()
|
|
TASK_PROSTITUTE_TO_LEAVE_VEHICLE(TRUE)
|
|
CLEANUP_PROSTITUTE_PB(sLoadQueue)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
WAIT(0)
|
|
|
|
PRINTSTRING("\n Starting Prostitute! \n")
|
|
|
|
CDEBUG1LN(DEBUG_PROSTITUTE,"prostitute_ped 1 = ", NATIVE_TO_INT(prostitute_ped) )
|
|
|
|
prostitute_ped = passed_ped
|
|
CDEBUG1LN(DEBUG_PROSTITUTE,"prostitute_ped 2 = ", NATIVE_TO_INT(prostitute_ped) )
|
|
|
|
IF NETWORK_IS_GAME_IN_PROGRESS()
|
|
SET_THIS_AS_NETWORK_MP_PROSTITUTION_SESSION()
|
|
|
|
NETWORK_SET_THIS_SCRIPT_IS_NETWORK_SCRIPT(2, FALSE, NATIVE_TO_INT(PLAYER_ID()))
|
|
|
|
HANDLE_NET_SCRIPT_INITIALISATION()
|
|
|
|
SET_THIS_SCRIPT_CAN_BE_PAUSED(FALSE)
|
|
ENDIF
|
|
|
|
START_UP_CHECKS()
|
|
|
|
CLEAR_NETWORK_PRO_FLAG(NPF_MP_SHOULD_TERMINATE)
|
|
|
|
WHILE bBrainIsRunning
|
|
BOOL bOwned = TRUE
|
|
|
|
UPDATE_LOAD_QUEUE_LARGE(sLoadQueue)
|
|
|
|
IF IS_THIS_MP_PROSTITUTION()
|
|
IF IS_NETWORK_PRO_FLAG_SET( NPF_CHANGED_CLOTHES )
|
|
IF NOT IS_ENTITY_DEAD( PLAYER_PED_ID() )
|
|
IF HAS_PED_HEAD_BLEND_FINISHED( PLAYER_PED_ID() )
|
|
AND HAVE_ALL_STREAMING_REQUESTS_COMPLETED( PLAYER_PED_ID() )
|
|
CLEAR_NETWORK_PRO_FLAG( NPF_CHANGED_CLOTHES )
|
|
FINALIZE_HEAD_BLEND( PLAYER_PED_ID() )
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_NETWORK_PRO_FLAG_SET( NPF_CHANGED_CLOTHES )
|
|
AND IS_NETWORK_PRO_FLAG_SET( NPF_TERMINATE_THREAD )
|
|
TERMINATE_THIS_THREAD()
|
|
ENDIF
|
|
|
|
IF NOT DOES_ENTITY_EXIST(prostitute_ped)
|
|
bOwned = FALSE
|
|
ELSE
|
|
IF NOT NETWORK_HAS_CONTROL_OF_ENTITY(prostitute_ped)
|
|
bOwned = FALSE
|
|
NETWORK_REQUEST_CONTROL_OF_ENTITY(prostitute_ped)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF NOT IS_THIS_MP_PROSTITUTION()
|
|
OR NOT IS_NETWORK_PRO_FLAG_SET( NPF_TERMINATE_THREAD )
|
|
CLIENT_MAINTAIN_RESERVATIONS()
|
|
|
|
IF IS_THIS_MP_PROSTITUTION()
|
|
PROCESS_PROSTITUTE_EVENTS()
|
|
IF IS_NETWORK_PRO_FLAG_SET(NPF_MP_SHOULD_TERMINATE)
|
|
bBrainIsRunning = FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF SHOULD_PROSTITUTE_RUN()
|
|
IF bOwned
|
|
|
|
IF (ePBState > PROS_PB_INIT)
|
|
MANAGE_PLAYER_ATTACKING_PROSTITUTE(sLoadQueue)
|
|
ENDIF
|
|
|
|
HANDLE_CLOSEST_PROSTITUTE()
|
|
|
|
MANAGE_PROSTITUTE_HEAD_TRACKING()
|
|
|
|
// main mission loop goes here
|
|
SWITCH ePBState
|
|
// waiting to start the mission
|
|
CASE PROS_PB_INIT
|
|
//Assign Prostitute Type
|
|
IF eProstituteType = PRO_TYPE_INVALID
|
|
IF IS_PED_ACTIVE_IN_SCENARIO(prostitute_ped)
|
|
eProstituteType = GET_PROSTITUTE_TYPE()
|
|
ELIF IS_THIS_SPECIAL_MICHAEL_SWITCH_HOOKER()
|
|
eProstituteType = PRO_TYPE_SPECIAL
|
|
ENDIF
|
|
ELSE
|
|
|
|
IF INITIALISE_THE_SCRIPT()
|
|
IF IS_PROSTITUTE_STANDING_STILL()
|
|
CDEBUG1LN(DEBUG_PROSTITUTE,"[SCENARIO ] STARTED " )
|
|
IF IS_THIS_MP_PROSTITUTION()
|
|
IF NETWORK_HAS_CONTROL_OF_ENTITY(prostitute_ped)
|
|
TASK_START_SCENARIO_IN_PLACE(prostitute_ped,"WORLD_HUMAN_PROSTITUTE_HIGH_CLASS" )
|
|
ELSE
|
|
NETWORK_REQUEST_CONTROL_OF_ENTITY(prostitute_ped)
|
|
ENDIF
|
|
ELSE
|
|
TASK_START_SCENARIO_IN_PLACE(prostitute_ped,"WORLD_HUMAN_PROSTITUTE_HIGH_CLASS" )
|
|
ENDIF
|
|
ELSE
|
|
CDEBUG1LN(DEBUG_PROSTITUTE,"[SCENARIO ] NOT STANDING STILL " )
|
|
ENDIF
|
|
|
|
ePBState = PROS_PB_CUSTOMER_DETERMINE_TYPE
|
|
PROST_PB_DEBUG_MESSAGE("Prostitue: moving to PROS_PB_CUSTOMER_DETERMINE_TYPE")
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE PROS_PB_CUSTOMER_DETERMINE_TYPE
|
|
IF IS_BITMASK_AS_ENUM_SET(iProScriptBits,PRO_BIT_bProstituteHasWitnessedAShockingEvent)
|
|
MANAGE_PROSTITUTE_BEING_ATTACKED()
|
|
ENDIF
|
|
|
|
IF IS_CUSTOMER_A_PLAYER()
|
|
ePBState = PROS_PB_CUSTOMER_PLAYER
|
|
PROST_PB_DEBUG_MESSAGE("Prostitue: moving to PROS_PB_CUSTOMER_PLAYER")
|
|
ENDIF
|
|
|
|
IF IS_CUSTOMER_OTHER()
|
|
ePBState = PROS_PB_CUSTOMER_OTHER
|
|
SET_BITMASK_AS_ENUM(iProScriptBits,PRO_BIT_bInteractedWithAI)
|
|
g_bIsProstituteAICustomerActive = TRUE
|
|
PROST_PB_DEBUG_MESSAGE("Prostitue: moving to PROS_PB_CUSTOMER_OTHER")
|
|
ENDIF
|
|
|
|
#IF IS_PIMP_AVAILABLE//-------------------------------------------------------
|
|
IF IS_CUSTOMER_A_PIMP()
|
|
SET_BITMASK_AS_ENUM(iPimpFlags, PIMP_WAS_VISITED)
|
|
g_bIsProstitutePimpActive = TRUE
|
|
SET_BITMASK_AS_ENUM(iProScriptBits,PRO_BIT_bInteractedWithPimp)
|
|
ePBState = PROS_PB_CUSTOMER_PIMP
|
|
PROST_PB_DEBUG_MESSAGE("Prostitue: moving to PROS_PB_CUSTOMER_PIMP")
|
|
ENDIF
|
|
|
|
#ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE PROS_PB_CUSTOMER_PLAYER
|
|
|
|
PLAYER_IN_VEHICLE_SECTION(sLoadQueue)
|
|
BREAK
|
|
|
|
CASE PROS_PB_CUSTOMER_OTHER
|
|
|
|
OTHER_IN_VEHICLE_SECTION()
|
|
BREAK
|
|
|
|
#IF IS_PIMP_AVAILABLE//-------------------------------------------------------
|
|
|
|
CASE PROS_PB_CUSTOMER_PIMP
|
|
PROSTITUTE_PIMP_ARGUEMENT()
|
|
BREAK
|
|
|
|
#ENDIF
|
|
|
|
DEFAULT
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
ELSE
|
|
// clean up the mission
|
|
SET_PROSTITUTE_MISSION_IN_PROGRESS(FALSE)
|
|
ENDIF
|
|
|
|
// debug
|
|
PROSTITUTE_DEBUG_STUFF()
|
|
ENDIF
|
|
|
|
WAIT(0)
|
|
ENDWHILE
|
|
|
|
IF IS_BITMASK_AS_ENUM_SET(iProScriptBits,PRO_BIT_IS_THIS_SCRIPT_INTERACTING)
|
|
#IF IS_DEBUG_BUILD
|
|
REMOVE_PROSTITUTE_BLIP()
|
|
PRINTLN("RESETTING INTERFACE FLAG TO FALSE - PROSTITUTE SCRIPT TERMINATING")
|
|
#endif
|
|
ENDIF
|
|
|
|
PROST_PB_DEBUG_MESSAGE(" Something forced this exit!!!!!!~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~")
|
|
CLEANUP_PLAYER_PROSTITUTE_INTERACTION()
|
|
CLEANUP_PROSTITUTE_PB(sLoadQueue)
|
|
|
|
PRINTLN("pb_prostitute has shut down")
|
|
ENDSCRIPT
|
|
|