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

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