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

1346 lines
53 KiB
Python
Executable File

USING "rage_builtins.sch"
USING "globals.sch"
USING "brains.sch"
USING "script_player.sch"
USING "commands_script.sch"
USING "commands_pad.sch"
USING "commands_graphics.sch"
USING "commands_camera.sch"
USING "commands_streaming.sch"
USING "commands_interiors.sch"
USING "commands_object.sch"
USING "script_drawing.sch"
USING "lineActivation.sch"
USING "drunk_public.sch"
USING "dialogue_public.sch"
USING "player_ped_public.sch"
USING "script_blips.sch"
USING "clubs_public.sch"
USING "minigame_UIInputs.sch"
USING "friendActivity_public.sch"
USING "cutscene_public.sch"
USING "rgeneral_include.sch"
USING "building_control_public.sch"
USING "flow_processing_game.sch"
USING "transition_common.sch"
USING "freemode_header.sch"
//USING "context_control_public.sch"
CONST_INT MP_STRIPCLUB 0
CONST_INT USE_STRIPCLUB_DEBUG 0
//USING "stripclub_public.sch"
//USING "stripclub.sch"
//USING "stripclub_common.sch"
//USING "stripclub_anim.sch"
//USING "stripclub_ai.sch"
//USING "stripclub_task.sch"
//USING "stripclub_helpers.sch"
//USING "stripclub_stage.sch"
//USING "stripclub_cutscenes.sch"
//USING "stripclub_hotspots.sch"
//USING "stripclub_workers.sch"
//USING "stripclub_lapdance.sch"
//USING "stripclub_friend.sch"
USING "stripclub_setup.sch"
INT iDrinkWaitTime
INT iDrinkScene = -1
BOOL bControlsBartender = TRUE
BOOL bIsMp = FALSE
BOOL bIncDrink = FALSE
MP_PROP_OFFSET_STRUCT whiskeyBarLocateA
MP_PROP_OFFSET_STRUCT whiskeyBarLocateB
STRUCT DRINKING_BROADCAST_DATA
BOOL bUsingBartender
BOOL bBartenderSceneStarted
ENDSTRUCT
DRINKING_BROADCAST_DATA playerDrinkingBD[MP_STRIPCLUB_MAX_PLAYERS]
SCRIPT_TIMER stYachtBarStaffIdleSpeech
SCRIPT_TIMER stYachtBarStaffFirghtenedPreventSpeech
SCRIPT_TIMER stYachtBarStaffFirghtenedSpeech
BOOL bHasBumpedBarStaffSpeech
BOOL bBartenderSaidHi = FALSE
BOOL bBartenderSaidBye = FALSE
BOOL bHasFirghtenedBarStaffSpeech = FALSE
BOOL bDelaySpeechAfterBarStaffShocked = FALSE
BOOL bDelaySyncSceneEnd = FALSE
CONST_INT ciPedsNearBartenderSize 8
PED_INDEX aNearbyPeds[ciPedsNearBartenderSize]
INT iASYNCSuicideCheck = 0
INT iNumPedsNearBartender = 0
SCRIPT_TIMER timerDelayedSyncScene
//SPEECH for yacht bartender
FUNC BOOL DO_BARSTAFF_ALIVE_CHECK(DRINKING_DATA drinkData, PED_INDEX &ped)
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
AND IS_PLAYER_ON_ANY_YACHT(PLAYER_ID())
ped = drinkData.pedBartender
IF DOES_ENTITY_EXIST(ped)
PRINTLN("DO_BARSTAFF_ALIVE_CHECK returning TRUE")
RETURN TRUE
ENDIF
ENDIF
PRINTLN("DO_BARSTAFF_ALIVE_CHECK returning FALSE")
RETURN FALSE
ENDFUNC
PROC TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_ENTRY(DRINKING_DATA drinkData)
PED_INDEX pedBarStaff
IF bBartenderSaidHi
OR NOT DO_BARSTAFF_ALIVE_CHECK(drinkData, pedBarStaff)
EXIT
ENDIF
BOOL IsPlayerFemale = IS_PLAYER_FEMALE()
STRING Context, Params
IF GET_RANDOM_INT_IN_RANGE(0, 10) > 6
Context = "GENERIC_HI"
ELSE
IF IsPlayerFemale
Context = "GENERIC_HI_FEMALE"
ELSE
Context = "GENERIC_HI_MALE"
ENDIF
ENDIF
PRINTLN("[YACHTCONT] TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_ENTRY - my bar tender played ")
Params = AUDIO_SPEECH_GET_PARAM_STRING_FROM_ENUM(SPEECH_PARAMS_FORCE)
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE_NATIVE(pedBarStaff, Context, "WFStewardess", Params, FALSE)
bBartenderSaidHi = TRUE
bBartenderSaidBye = FALSE
ENDPROC
PROC TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_BARTENDER_GREET(DRINKING_DATA drinkData)
PED_INDEX pedBarStaff
IF NOT DO_BARSTAFF_ALIVE_CHECK(drinkData, pedBarStaff)
EXIT
ENDIF
PRINTLN("[YACHTCONT] TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_BARTENDER_GREET - played ")
STRING Context, Params
Context = "BARTENDER_GREET"
Params = AUDIO_SPEECH_GET_PARAM_STRING_FROM_ENUM(SPEECH_PARAMS_FORCE)
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE_NATIVE(pedBarStaff, Context, "WFStewardess", Params, FALSE)
ENDPROC
PROC TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_IDLE(DRINKING_DATA drinkData)
PED_INDEX pedBarStaff
IF NOT DO_BARSTAFF_ALIVE_CHECK(drinkData, pedBarStaff)
OR bDelaySpeechAfterBarStaffShocked
EXIT
ENDIF
PRINTLN("[YACHTCONT] TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_IDLE - played ")
STRING Context, Params
Context = "BARSTAFF_IDLE"
Params = AUDIO_SPEECH_GET_PARAM_STRING_FROM_ENUM(SPEECH_PARAMS_FORCE)
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE_NATIVE(pedBarStaff, Context, "WFStewardess", Params, FALSE)
ENDPROC
PROC TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_BYE(DRINKING_DATA drinkData)
PED_INDEX pedBarStaff
IF NOT DO_BARSTAFF_ALIVE_CHECK(drinkData, pedBarStaff)
EXIT
ENDIF
STRING Context, Params
IF GET_PRIVATE_YACHT_ASSIGNED_TO_PLAYER(PLAYER_ID()) = GET_YACHT_PLAYER_IS_ON(PLAYER_ID())
PRINTLN("[YACHTCONT] TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_BYE - my BARSTAFF played ")
Context = "GENERIC_BYE"
Params = AUDIO_SPEECH_GET_PARAM_STRING_FROM_ENUM(SPEECH_PARAMS_FORCE)
ELSE
PRINTLN("[YACHTCONT] TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_BYE - not my BARSTAFF played ")
Context = "GENERIC_BYE"
Params = AUDIO_SPEECH_GET_PARAM_STRING_FROM_ENUM(SPEECH_PARAMS_FORCE)
ENDIF
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE_NATIVE(pedBarStaff, Context, "WFStewardess", Params, FALSE)
ENDPROC
PROC TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_BARSTAFF_CHAT(DRINKING_DATA drinkData)
PED_INDEX pedBarStaff
IF NOT DO_BARSTAFF_ALIVE_CHECK(drinkData, pedBarStaff)
OR bDelaySpeechAfterBarStaffShocked
EXIT
ENDIF
STRING Context, Params
PRINTLN("[YACHTCONT] TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_BARSTAFF_CHAT - my BARSTAFF played ")
Context = "BARTENDER_CHAT"
Params = AUDIO_SPEECH_GET_PARAM_STRING_FROM_ENUM(SPEECH_PARAMS_FORCE)
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE_NATIVE(pedBarStaff, Context, "WFStewardess", Params, FALSE)
ENDPROC
PROC TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_BARTENDER_SERVE(DRINKING_DATA drinkData)
PED_INDEX pedBarStaff
IF NOT DO_BARSTAFF_ALIVE_CHECK(drinkData, pedBarStaff)
OR bDelaySpeechAfterBarStaffShocked
EXIT
ENDIF
STRING Context, Params
PRINTLN("[YACHTCONT] TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_BARTENDER_SERVE - my captain played ")
Context = "BARTENDER_SERVE"
Params = AUDIO_SPEECH_GET_PARAM_STRING_FROM_ENUM(SPEECH_PARAMS_FORCE)
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE_NATIVE(pedBarStaff, Context, "WFStewardess", Params, FALSE)
ENDPROC
PROC TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_DRUNK(DRINKING_DATA drinkData)
PED_INDEX pedBarStaff
IF NOT DO_BARSTAFF_ALIVE_CHECK(drinkData, pedBarStaff)
OR bDelaySpeechAfterBarStaffShocked
EXIT
ENDIF
STRING Context, Params
PRINTLN("[YACHTCONT] TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_DRUNK - my captain played ")
Context = "PLAYER_DRUNK"
Params = AUDIO_SPEECH_GET_PARAM_STRING_FROM_ENUM(SPEECH_PARAMS_FORCE)
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE_NATIVE(pedBarStaff, Context, "WFStewardess", Params, FALSE)
ENDPROC
PROC TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_BARSTAFF_GENERIC_THANKS(DRINKING_DATA drinkData)
PED_INDEX pedBarStaff
IF NOT DO_BARSTAFF_ALIVE_CHECK(drinkData, pedBarStaff)
OR bDelaySpeechAfterBarStaffShocked
EXIT
ENDIF
STRING Context, Params
PRINTLN("[YACHTCONT] TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_BARSTAFF_GENERIC_THANKS - my captain played ")
Context = "GENERIC_THANKS"
Params = AUDIO_SPEECH_GET_PARAM_STRING_FROM_ENUM(SPEECH_PARAMS_FORCE)
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE_NATIVE(pedBarStaff, Context, "WFStewardess", Params, FALSE)
ENDPROC
PROC TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_BARSTAFF_BUMP(DRINKING_DATA drinkData)
PED_INDEX pedBarStaff
IF NOT DO_BARSTAFF_ALIVE_CHECK(drinkData, pedBarStaff)
OR bDelaySpeechAfterBarStaffShocked
EXIT
ENDIF
STRING Context, Params
IF IS_ENTITY_TOUCHING_ENTITY(PLAYER_PED_ID(), pedBarStaff)
AND bHasBumpedBarStaffSpeech = FALSE
PRINTLN("[YACHTCONT] TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_BARSTAFF_BUMP - my captain played ")
Context = "BUMP"
Params = AUDIO_SPEECH_GET_PARAM_STRING_FROM_ENUM(SPEECH_PARAMS_FORCE)
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE_NATIVE(pedBarStaff, Context, "WFStewardess", Params, FALSE)
bHasBumpedBarStaffSpeech = TRUE
ELIF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), pedBarStaff) >= 2.0
bHasBumpedBarStaffSpeech = FALSE
ENDIF
ENDPROC
PROC PLAY_YACHT_SERVING_DIALOGUE(INT iDrunkLevel, DRINKING_DATA drinkData)
IF iDrunkLevel = 0
TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_BARTENDER_GREET(drinkData)
ELIF iDrunkLevel = 1
TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_BARTENDER_SERVE(drinkData)
ELIF iDrunkLevel >= 2
TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_DRUNK(drinkData)
ENDIF
ENDPROC
PROC RUN_YACHT_BARTENDER_IDLE_CHAT(DRINKING_DATA drinkData)
IF HAS_NET_TIMER_EXPIRED_ONE_FRAME(stYachtBarStaffIdleSpeech, 15000)
IF GET_RANDOM_INT_IN_RANGE(0, 10) > 5
TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_IDLE(drinkData)
ELSE
TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_BARSTAFF_CHAT(drinkData)
ENDIF
ENDIF
ENDPROC
PROC RUN_HELLO_GBYE_CHECKS_YACHT(DRINKING_DATA drinkData)
TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_BARSTAFF_BUMP(drinkData)
IF GET_ROOM_KEY_FROM_ENTITY(PLAYER_PED_ID())!= GET_HASH_KEY("GTaMloRoom_bar1")
PRINTLN("stripclub_drinking: Player left room clearing goodbye and hello flags")
bBartenderSaidHi = FALSE
bBartenderSaidBye = FALSE
ELSE
IF bBartenderSaidHi
AND NOT bBartenderSaidBye
IF GET_DISTANCE_BETWEEN_ENTITIES(PLAYER_PED_ID(), drinkData.pedBartender) > 7.5
IF GET_RANDOM_INT_IN_RANGE(0, 10) > 3
TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_BYE(drinkData)
ELSE
TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_BARSTAFF_GENERIC_THANKS(drinkData)
ENDIF
bBartenderSaidBye = TRUE
ENDIF
ENDIF
ENDIF
ENDPROC
PROC TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_CAPTAIN_GENERIC_FRIGHTENED_HIGH(PED_INDEX pedBarStaff)
STRING Context, Params
PRINTLN("[YACHTCONT] TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_CAPTAIN_GENERIC_FRIGHTENED_HIGH - my captain played ")
Context = "GENERIC_FRIGHTENED_HIGH"
Params = AUDIO_SPEECH_GET_PARAM_STRING_FROM_ENUM(SPEECH_PARAMS_FORCE)
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE_NATIVE(pedBarStaff, Context, "WFStewardess", Params, FALSE)
ENDPROC
PROC TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_CAPTAIN_GENERIC_FRIGHTENED_MED(PED_INDEX pedBarStaff)
STRING Context, Params
PRINTLN("[YACHTCONT] TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_CAPTAIN_GENERIC_FRIGHTENED_MED - my captain played ")
Context = "GENERIC_FRIGHTENED_MED"
Params = AUDIO_SPEECH_GET_PARAM_STRING_FROM_ENUM(SPEECH_PARAMS_FORCE)
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE_NATIVE(pedBarStaff, Context, "WFStewardess", Params, FALSE)
ENDPROC
PROC TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_CAPTAIN_GENERIC_SHOCKED_HIGH(PED_INDEX pedBarStaff)
STRING Context, Params
PRINTLN("[YACHTCONT] TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_CAPTAIN_GENERIC_SHOCKED_HIGH - my captain played ")
Context = "GENERIC_SHOCKED_HIGH"
Params = AUDIO_SPEECH_GET_PARAM_STRING_FROM_ENUM(SPEECH_PARAMS_FORCE)
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE_NATIVE(pedBarStaff, Context, "WFStewardess", Params, FALSE)
ENDPROC
PROC TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_CAPTAIN_GENERIC_SHOCKED_MED(PED_INDEX pedBarStaff)
STRING Context, Params
PRINTLN("[YACHTCONT] TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_CAPTAIN_GENERIC_SHOCKED_MED - my captain played ")
Context = "GENERIC_SHOCKED_MED"
Params = AUDIO_SPEECH_GET_PARAM_STRING_FROM_ENUM(SPEECH_PARAMS_FORCE)
PLAY_PED_AMBIENT_SPEECH_WITH_VOICE_NATIVE(pedBarStaff, Context, "WFStewardess", Params, FALSE)
ENDPROC
FUNC BOOL RUN_SUICIDE_CHECKS(PED_INDEX pedBarStaff)
// Access nearby peds every time we restart the staggered loop
IF iASYNCSuicideCheck = 0
iNumPedsNearBartender = GET_PED_NEARBY_PEDS(pedBarStaff, aNearbyPeds)
ENDIF
CDEBUG1LN(DEBUG_SAFEHOUSE, "stripclub_drinking RUN_SUICIDE_CHECKS: iNumPedsNearBartender: ", iNumPedsNearBartender)
IF DOES_ENTITY_EXIST(aNearbyPeds[iASYNCSuicideCheck])
AND NOT IS_ENTITY_DEAD(aNearbyPeds[iASYNCSuicideCheck])
// Verify ped is in the bar and playing the kill self anim
IF GET_ROOM_KEY_FROM_ENTITY(aNearbyPeds[iASYNCSuicideCheck]) = GET_HASH_KEY("GTaMloRoom_bar1")
AND IS_ENTITY_PLAYING_ANIM(aNearbyPeds[iASYNCSuicideCheck], "MP_SUICIDE", "PILL")
// Reset the loop
iASYNCSuicideCheck = 0
RETURN TRUE
ENDIF
ENDIF
// Increment array index
iASYNCSuicideCheck++
// Reset array index if we've looped through all nearby peds
// OR we reach end of array.
IF iASYNCSuicideCheck >= iNumPedsNearBartender
OR iASYNCSuicideCheck >= ciPedsNearBartenderSize
iASYNCSuicideCheck = 0 // Reset loop
ENDIF
RETURN FALSE
ENDFUNC
PROC RUN_BTENDER_FRIGHTENED_DIALOGUE(DRINKING_DATA drinkData)
PED_INDEX pedBarStaff
IF NOT DO_BARSTAFF_ALIVE_CHECK(drinkData, pedBarStaff)
OR GET_ROOM_KEY_FROM_ENTITY(PLAYER_PED_ID()) != GET_HASH_KEY("GTaMloRoom_bar1")
EXIT
ENDIF
IF bDelaySpeechAfterBarStaffShocked
AND HAS_NET_TIMER_EXPIRED_ONE_FRAME(stYachtBarStaffFirghtenedPreventSpeech, 10000)
CDEBUG1LN(DEBUG_AMBIENT, "RUN_BARSTAFF_FRIGHTENED_DIALOGUE: Delay Speech Timer expired")
bDelaySpeechAfterBarStaffShocked = FALSE
ENDIF
IF bHasFirghtenedBarStaffSpeech
AND NOT HAS_NET_TIMER_EXPIRED_ONE_FRAME(stYachtBarStaffFirghtenedSpeech, 15000)
EXIT
ENDIF
bHasFirghtenedBarStaffSpeech = FALSE
IF IS_EXPLOSION_IN_SPHERE(EXP_TAG_DONTCARE, GET_ENTITY_COORDS(pedBarStaff), 8.0)
OR RUN_SUICIDE_CHECKS(pedBarStaff)
STOP_CURRENT_PLAYING_SPEECH(pedBarStaff)
INT iRandomNo = GET_RANDOM_INT_IN_RANGE(1, 5)
SWITCH iRandomNo
CASE 1 TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_CAPTAIN_GENERIC_FRIGHTENED_HIGH(pedBarStaff) BREAK
CASE 2 TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_CAPTAIN_GENERIC_FRIGHTENED_MED(pedBarStaff) BREAK
CASE 3 TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_CAPTAIN_GENERIC_SHOCKED_HIGH(pedBarStaff) BREAK
CASE 4 TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_CAPTAIN_GENERIC_SHOCKED_MED(pedBarStaff) BREAK
ENDSWITCH
bHasFirghtenedBarStaffSpeech = TRUE
bDelaySpeechAfterBarStaffShocked = TRUE
REINIT_NET_TIMER(stYachtBarStaffFirghtenedSpeech)
ENDIF
ENDPROC
PROC PRINT_PLAYERS_USING_BAR()
IF NOT bIsMp
EXIT
ENDIF
IF NOT NETWORK_IS_GAME_IN_PROGRESS()
EXIT
ENDIF
INT index
REPEAT MP_STRIPCLUB_MAX_PLAYERS index
IF NETWORK_IS_PARTICIPANT_ACTIVE(INT_TO_PARTICIPANTINDEX(index))
IF playerDrinkingBD[index].bUsingBartender
CPRINTLN(DEBUG_SCLUB,"Participant ", index, " is using bar")
ENDIF
ENDIF
ENDREPEAT
ENDPROC
FUNC BOOL IS_ANY_PLAYER_USING_BAR()
IF NOT bIsMp
RETURN FALSE
ENDIF
IF NOT NETWORK_IS_GAME_IN_PROGRESS()
RETURN FALSE
ENDIF
INT index
REPEAT MP_STRIPCLUB_MAX_PLAYERS index
IF NETWORK_IS_PARTICIPANT_ACTIVE(INT_TO_PARTICIPANTINDEX(index))
IF PARTICIPANT_ID_TO_INT() != index
IF playerDrinkingBD[index].bUsingBartender
RETURN TRUE
ENDIF
ENDIF
ENDIF
ENDREPEAT
RETURN FALSE
ENDFUNC
FUNC BOOL DOES_ANOTHER_PLAYER_WANT_TO_USE_BAR()
IF NOT bIsMp
RETURN FALSE
ENDIF
IF NOT NETWORK_IS_GAME_IN_PROGRESS()
RETURN FALSE
ENDIF
INT index
REPEAT MP_STRIPCLUB_MAX_PLAYERS index
IF NETWORK_IS_PARTICIPANT_ACTIVE(INT_TO_PARTICIPANTINDEX(index))
IF playerDrinkingBD[index].bUsingBartender
IF index = PARTICIPANT_ID_TO_INT()
RETURN FALSE //in case two players proposition the bartender at the same time, player with lower particpant ID wins
ELSE
RETURN TRUE
ENDIF
ENDIF
ENDIF
ENDREPEAT
RETURN FALSE
ENDFUNC
FUNC BOOL HAS_ANOTHER_PLAYER_STARTED_THE_BARTEND_SCENE()
IF NOT bIsMp
RETURN FALSE
ENDIF
IF NOT NETWORK_IS_GAME_IN_PROGRESS()
RETURN FALSE
ENDIF
INT index
REPEAT MP_STRIPCLUB_MAX_PLAYERS index
IF NETWORK_IS_PARTICIPANT_ACTIVE(INT_TO_PARTICIPANTINDEX(index))
IF PARTICIPANT_ID_TO_INT() != index
IF playerDrinkingBD[index].bBartenderSceneStarted
RETURN TRUE
ENDIF
ENDIF
ENDIF
ENDREPEAT
RETURN FALSE
ENDFUNC
PROC SET_DRINKING_DEBUG_VALUES()
#IF IS_DEBUG_BUILD
#IF USE_STRIPCLUB_DEBUG
//fLikeMeterPosX = LIKE_BOX_CENTERX
//fLikeMeterPosY = LIKE_BOX_TOPY
//fLikeMeterHeight = LIKE_BOX_HEIGHT
//fLikeMeterWidth = LIKE_BOX_WIDTH
iDebugDisplayStriperWanderState = iDebugDisplayStriperWanderState
stripClubWidgets = START_WIDGET_GROUP("Drinking")
ADD_WIDGET_STRING("Debug Pos")
ADD_WIDGET_FLOAT_SLIDER("X",vStripDebugVector.x, -2000, 2000, 0.001 ) //<<121.02, -1281.54, 28.48>>
ADD_WIDGET_FLOAT_SLIDER("Y",vStripDebugVector.y, -2000, 2000, 0.001 )
ADD_WIDGET_FLOAT_SLIDER("Z",vStripDebugVector.z, -2000, 2000, 0.001 )
ADD_WIDGET_FLOAT_SLIDER("Heading",fDebugHeading, -360.0,360.0,0.01 )
ADD_WIDGET_FLOAT_SLIDER("fDebugFloat",fDebugFloat, -360.0,360.0,0.01 )
ADD_WIDGET_INT_SLIDER("Int", iDebugInt, 0, 5, 1)
STOP_WIDGET_GROUP()
DEBUG_MESSAGE("Strip Club Values Inited")
#ENDIF
#ENDIF
ENDPROC
FUNC BOOL DID_PLAYER_TAKE_DRINK(STRIP_CLUB_BAR_ANIM_ENUM eDrinkAnimEnum)
IF NOT IS_SYNCHRONIZED_SCENE_RUNNING(GET_SRTIPCLUB_LOCAL_SCENE_ID(iDrinkScene, bIsMp))
RETURN TRUE
ENDIF
FLOAT fDrinkTime = 0.7
IF eDrinkAnimEnum = SCBA_DRUNK1
fDrinkTime = 0.57
ELIF eDrinkAnimEnum = SCBA_DRUNK2
fDrinkTime = 0.57
ELIF eDrinkAnimEnum = SCBA_DRUNK3
fDrinkTime = 0.7
ELIF eDrinkAnimEnum = SCBA_DRUNK4
fDrinkTime = 0.64
ENDIF
RETURN GET_SYNCHRONIZED_SCENE_PHASE(GET_SRTIPCLUB_LOCAL_SCENE_ID(iDrinkScene, bIsMp)) > fDrinkTime
ENDFUNC
FUNC BOOL IS_BAR_SCENE_OVER()
TEXT_LABEL_15 sRoot
IF IS_SYNCHRONIZED_SCENE_RUNNING(GET_SRTIPCLUB_LOCAL_SCENE_ID(iDrinkScene, bIsMp))
CPRINTLN(DEBUG_SCLUB, "Drink Scene time ", GET_SYNCHRONIZED_SCENE_PHASE(GET_SRTIPCLUB_LOCAL_SCENE_ID(iDrinkScene, bIsMp)))
IF GET_SYNCHRONIZED_SCENE_PHASE(GET_SRTIPCLUB_LOCAL_SCENE_ID(iDrinkScene, bIsMp)) > 0.31
AND GET_SYNCHRONIZED_SCENE_PHASE(GET_SRTIPCLUB_LOCAL_SCENE_ID(iDrinkScene, bIsMp)) < 0.32
AND NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF IS_PLAYER_CUT_OFF_FROM_DRINKING(-1)
AND NOT IS_PROPERTY_YACHT_APARTMENT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty)
sRoot = "SC_LAS_DRINK"
CPRINTLN(DEBUG_SCLUB,"Playing last drink convo ", sRoot)
CREATE_CONVERSATION(stripClubConversation, "SCAUD", sRoot, GET_STRIPCLUB_SPEECH_PRIORITY())
ENDIF
ENDIF
IF GET_SYNCHRONIZED_SCENE_PHASE(GET_SRTIPCLUB_LOCAL_SCENE_ID(iDrinkScene, bIsMp)) >= 1.0
CPRINTLN(DEBUG_AMBIENT, "Drink scene finished returning true")
RETURN TRUE
ENDIF
ELSE
CPRINTLN(DEBUG_AMBIENT, "Drink scene not runing returning true")
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL REMOVE_BARMAN(DRINKING_DATA &drinkData)
IF IS_PROPERTY_YACHT_APARTMENT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty)
IF NETWORK_DOES_ENTITY_EXIST_WITH_NETWORK_ID(drinkData.niPedBartender)
IF NETWORK_HAS_CONTROL_OF_NETWORK_ID(drinkData.niPedBartender)
DELETE_NET_ID(drinkData.niPedBartender)
RESERVE_NETWORK_MISSION_PEDS(GET_NUM_RESERVED_MISSION_PEDS()- 1)
CDEBUG1LN(DEBUG_SCLUB, "REMOVE_BARMAN: Deleted Barman")
RETURN TRUE
ELSE
CDEBUG1LN(DEBUG_SCLUB, "REMOVE_BARMAN: Tried to remove barman but player didn't have control of entity")
NETWORK_REQUEST_CONTROL_OF_NETWORK_ID(drinkData.niPedBartender)
RETURN FALSE
ENDIF
ELSE
CDEBUG1LN(DEBUG_SCLUB, "REMOVE_BARMAN: Tried to remove barman but entity didn't exist")
ENDIF
ENDIF
CDEBUG1LN(DEBUG_SCLUB, "REMOVE_BARMAN: returning true")
RETURN TRUE
ENDFUNC
PROC CLEANUP_STRIPCLUB_DRINKING(DRINKING_DATA &drinkData)
CPRINTLN(DEBUG_SCLUB,"CLEANUP_STRIPCLUB_DRINKING")
DEBUG_PRINTCALLSTACK()
IF IS_BITMASK_AS_ENUM_SET(iStripClubBits_Streaming, STRIP_CLUB_BIT_ANIM_DRINKING)
REMOVE_ANIM_DICT(GET_STRIP_CLUB_ANIM_DICT_BAR_DRINK(GET_BAR_ANIM_ENUM_FROM_INDEX(0)))
REMOVE_ANIM_DICT(GET_STRIP_CLUB_ANIM_DICT_BAR_DRINK(GET_BAR_ANIM_ENUM_FROM_INDEX(1)))
REMOVE_ANIM_DICT(GET_STRIP_CLUB_ANIM_DICT_BAR_DRINK(GET_BAR_ANIM_ENUM_FROM_INDEX(2)))
REMOVE_ANIM_DICT(GET_STRIP_CLUB_ANIM_DICT_BAR_DRINK(GET_BAR_ANIM_ENUM_FROM_INDEX(3)))
CLEAR_BITMASK_AS_ENUM(iStripClubBits_Streaming, STRIP_CLUB_BIT_ANIM_DRINKING)
ENDIF
IF DOES_CAM_EXIST(stripCamAnim)
DESTROY_CAM(stripCamAnim)
ENDIF
IF DOES_ENTITY_EXIST(drinkData.objGlass)
IF IS_ENTITY_ATTACHED(drinkData.objGlass)
DETACH_ENTITY(drinkData.objGlass)
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(drinkData.objBottle)
IF IS_ENTITY_ATTACHED(drinkData.objBottle)
DETACH_ENTITY(drinkData.objBottle)
ENDIF
ENDIF
STRIPCLUB_END_SYNC_SCENE(iDrinkScene, bIsMp)
g_bUsingBarmaidActivity = FALSE
ENABLE_INTERACTION_MENU()
SET_STRIPCLUB_USING_BAR(FALSE)
barStage = BAR_NOT_ACTIVE
CLEAR_ALL_STRIP_CLUB_HELP()
TERMINATE_THIS_THREAD()
ENDPROC
PROC GET_CONTROL_OF_BARTENDER(DRINKING_DATA &drinkData)
bControlsBartender = TRUE
IF bIsMp
IF NOT IS_PED_INJURED(drinkData.pedBartender)
IF NOT NETWORK_HAS_CONTROL_OF_ENTITY(drinkData.pedBartender)
CPRINTLN(DEBUG_SCLUB,"Get control of entity")
NETWORK_REQUEST_CONTROL_OF_ENTITY(drinkData.pedBartender)
bControlsBartender = FALSE
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(drinkData.objGlass)
IF NOT NETWORK_HAS_CONTROL_OF_ENTITY(drinkData.objGlass)
CPRINTLN(DEBUG_SCLUB,"Get control of entity")
NETWORK_REQUEST_CONTROL_OF_ENTITY(drinkData.objGlass)
bControlsBartender = FALSE
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(drinkData.objBottle)
IF NOT NETWORK_HAS_CONTROL_OF_ENTITY(drinkData.objBottle)
CPRINTLN(DEBUG_SCLUB,"Get control of entity")
NETWORK_REQUEST_CONTROL_OF_ENTITY(drinkData.objBottle)
bControlsBartender = FALSE
ENDIF
ENDIF
ENDIF
ENDPROC
PROC GET_DRINKING_FACE_ANIMS(STRIP_CLUB_BAR_ANIM_ENUM eDrinkAnimEnum, TEXT_LABEL_31 &txtBartenderFace, TEXT_LABEL_31 &txtPlayerFace)
txtBartenderFace = ""
txtPlayerFace = ""
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR
txtPlayerFace = "TREVOR_FACIAL"
ELIF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL
txtPlayerFace = "MICHAEL_FACIAL"
ELIF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN
txtPlayerFace = "FRANKLIN_FACIAL"
ENDIF
IF eDrinkAnimEnum = SCBA_DRUNK1
txtBartenderFace = "one_BARTENDER_facial"
ELIF eDrinkAnimEnum = SCBA_DRUNK2
txtBartenderFace = "two_BARTENDER_facial"
ELIF eDrinkAnimEnum = SCBA_DRUNK3
txtBartenderFace = "three_BARTENDER_facial"
ELIF eDrinkAnimEnum = SCBA_DRUNK4
txtBartenderFace = "four_BARTENDER_facial"
ENDIF
ENDPROC
FUNC INT GET_DRUNK_LINE(INT iDrunkness)
RETURN iDrunkness
ENDFUNC
FUNC BOOL CAN_PLAYER_USE_BAR()
IF bIsMp
IF IS_PLAYER_CRITICAL_TO_ANY_EVENT(PLAYER_ID())
RETURN FALSE
ENDIF
IF GET_GLOBAL_HAS_LOCAL_PLAYER_OPTED_IN_TO_BE_BEAST()
RETURN FALSE
ENDIF
IF IS_PLAYER_AN_ANIMAL(PLAYER_ID())
RETURN FALSE
ENDIF
RETURN TRUE
ENDIF
RETURN TRUE
ENDFUNC
SCRIPT(DRINKING_DATA drinkData)
barStage = BAR_NOT_ACTIVE
bIsMp = drinkData.iIsMP != 0
TEXT_LABEL_31 txtBartenderFace
TEXT_LABEL_31 txtPlayerFace
FLOAT iUseBartenderDistance = (STRIP_CLUB_BAR_APPROACH_DISTANCE-0.25)
IF bIsMp
//In mp use the tunables for price
DANCE_COST = g_sMPTunables.istripbar_dance_price_modifier
SC_DRINK_COST = g_sMPTunables.istripbar_shots_at_bar_price_modifier
IF IS_PROPERTY_YACHT_APARTMENT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty)
SC_DRINK_COST = 0
CPRINTLN(DEBUG_SCLUB,"Setting cost of drink to zero because player is in yacht")
ENDIF
iUseBartenderDistance = (STRIP_CLUB_BAR_APPROACH_DISTANCE-0.5)
IF drinkData.iYachtInstance > -1
GET_POSITION_AS_OFFSET_FOR_YACHT(drinkData.iYachtInstance, MP_PROP_ELEMENT_WHISKY_BAR_LOCATE_A, whiskeyBarLocateA)
GET_POSITION_AS_OFFSET_FOR_YACHT(drinkData.iYachtInstance, MP_PROP_ELEMENT_WHISKY_BAR_LOCATE_B, whiskeyBarLocateB)
CPRINTLN(DEBUG_SCLUB,"whiskeyBarLocateA.vloc = ", whiskeyBarLocateA.vLoc, ", whiskeyBarLocateB.vLoc = ", whiskeyBarLocateB.vLoc)
ELSE
CPRINTLN(DEBUG_SCLUB,"LOCAL_PLAYER_PRIVATE_YACHT_ID = -1, not getting offset for locate")
ENDIF
IF HAS_FORCE_CLEANUP_OCCURRED(FORCE_CLEANUP_FLAG_PLAYER_KILLED_OR_ARRESTED | FORCE_CLEANUP_FLAG_MAGDEMO)
CPRINTLN(DEBUG_SCLUB, "Force cleanup strip club drinking")
barStage = BAR_CLEANUP
ENDIF
// This marks the script as a net script, and handles any instancing setup.
IF drinkData.bInsideYacht = FALSE
NETWORK_SET_THIS_SCRIPT_IS_NETWORK_SCRIPT(MP_STRIPCLUB_MAX_PLAYERS, FALSE)
ELSE
NETWORK_SET_THIS_SCRIPT_IS_NETWORK_SCRIPT(MP_STRIPCLUB_MAX_PLAYERS, FALSE, drinkData.iYachtInstance)
ENDIF
// This makes sure the net script is active, waits untull it is.
HANDLE_NET_SCRIPT_INITIALISATION()
RESERVE_NETWORK_MISSION_PEDS(1)
RESERVE_NETWORK_MISSION_OBJECTS(2)
NETWORK_REGISTER_PLAYER_BROADCAST_VARIABLES(playerDrinkingBD, SIZE_OF(playerDrinkingBD))
ELSE
IF HAS_FORCE_CLEANUP_OCCURRED(DEFAULT_FORCE_CLEANUP_FLAGS | FORCE_CLEANUP_FLAG_REPEAT_PLAY | FORCE_CLEANUP_FLAG_MAGDEMO)
CPRINTLN(DEBUG_SCLUB, "Force cleanup strip club drinking")
barStage = BAR_CLEANUP
ENDIF
ENDIF
IF DOES_ENTITY_EXIST(drinkData.pedBartender)
IF NOT IS_ENTITY_A_MISSION_ENTITY(drinkData.pedBartender)
CPRINTLN(DEBUG_SCLUB,"Gain control of bartener")
SET_ENTITY_AS_MISSION_ENTITY(drinkData.pedBartender)
ENDIF
ADD_PED_FOR_DIALOGUE(stripClubConversation, ENUM_TO_INT(SPEAKER_BARMAID), drinkData.pedBartender, "SClubBarmaid")
ENDIF
SET_STIRP_CLUB_ADD_PED_FOR_DIALOGUE()
CPRINTLN(DEBUG_SCLUB,"Start driniking script")
SET_DRINKING_DEBUG_VALUES()
STRIP_CLUB_BAR_ANIM_ENUM eDrinkAnimEnum
//get animation name based on how many drinks are in you system, max out at 3
MP_PROP_OFFSET_STRUCT yachtWhiskeyBartender
MP_PROP_OFFSET_STRUCT whiskeyBarScene
VECTOR tempPosition
WHILE TRUE
// CPRINTLN(DEBUG_SCLUB,"Alcohol ", GET_STRIPCLUB_AMOUNT_OF_ALCOHOL())
CDEBUG2LN(DEBUG_SCLUB,VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()) , <<127.1629, -1283.5865, 29.2786>>))
IF NATIVE_TO_INT(PLAYER_ID()) > -1
IF NOT IS_PROPERTY_YACHT_APARTMENT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty)
IF IS_PLAYER_CUT_OFF_FROM_DRINKING(0)
AND barStage = BAR_NOT_ACTIVE
CPRINTLN(DEBUG_SCLUB,"player is too drunk, go to BAR_TOO_DRUNK")
barStage = BAR_TOO_DRUNK
//drank to much, end script
//CLEANUP_STRIPCLUB_DRINKING()
ENDIF
ELSE
GET_POSITION_AS_OFFSET_FOR_YACHT(GET_YACHT_PLAYER_IS_ON(PLAYER_ID()), MP_PROP_ELEMENT_WHISKY_BARTENDER, yachtWhiskeyBartender)
ENDIF
ENDIF
MONITOR_STRIPCLUB_CLOTHS_CHANGE()
IF IS_STRIPCLUB_GLOBAL_HOSTILE_FLAG_SET()
OR IS_ENTITY_DEAD(PLAYER_PED_ID()) OR IS_ENTITY_DEAD(drinkData.pedBartender)
IF IS_SYNCHRONIZED_SCENE_RUNNING(GET_SRTIPCLUB_LOCAL_SCENE_ID(iDrinkScene, bIsMp))
SET_SYNCHRONIZED_SCENE_PHASE(GET_SRTIPCLUB_LOCAL_SCENE_ID(iDrinkScene, bIsMp), 1.0)
IF NOT IS_PED_INJURED(drinkData.pedBartender)
CLEAR_PED_TASKS_IMMEDIATELY(drinkData.pedBartender)
ENDIF
ENDIF
IF barStage = BAR_NOT_ACTIVE
CPRINTLN(DEBUG_SCLUB,"CLEANUP_STRIPCLUB_DRINKING: ped or bartender dead")
barStage = BAR_CLEANUP
ENDIF
ENDIF
IF bIsMP
IF SHOULD_THIS_MULTIPLAYER_THREAD_TERMINATE()
CPRINTLN(DEBUG_SCLUB, "Drinking script should terminate")
IF IS_SKYCAM_PAST_FIRST_CUT()
barStage = BAR_CLEANUP
ENDIF
CLEANUP_STRIPCLUB_DRINKING(drinkData)
ENDIF
ENDIF
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_AREA_NAME)
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_DISTRICT_NAME)
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_STREET_NAME)
IF barStage = BAR_INIT OR barStage = BAR_GETTING_DRINK
IF STRIP_CLUB_IS_PLAYER_TREVOR() AND DOES_TREVOR_OWN_CLUB()
OR IS_PROPERTY_YACHT_APARTMENT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty)
// If trevor owns the club, he should not get cut off. He will just loop without hitting the
// "I'm cutting you off" anim from the bartender
eDrinkAnimEnum = GET_BAR_ANIM_ENUM_FOR_TREVOR(GET_STRIPCLUB_AMOUNT_OF_ALCOHOL())
CPRINTLN(DEBUG_SCLUB, "SCRIPT: Owner Trevor is using drink anim: ", ENUM_TO_INT(eDrinkAnimEnum))
ELSE
eDrinkAnimEnum = GET_BAR_ANIM_ENUM_FROM_INDEX(GET_STRIPCLUB_AMOUNT_OF_ALCOHOL())
CPRINTLN(DEBUG_SCLUB, "SCRIPT: Non-Owner is using drink anim: ", ENUM_TO_INT(eDrinkAnimEnum))
ENDIF
ENDIF
IF IS_PLAYER_ON_ANY_YACHT(PLAYER_ID())
RUN_HELLO_GBYE_CHECKS_YACHT(drinkData)
RUN_BTENDER_FRIGHTENED_DIALOGUE(drinkData)
ENDIF
//PRINT_PLAYERS_USING_BAR()
CDEBUG2LN(DEBUG_SCLUB,"barStage: ", barStage)
SWITCH barStage
CASE BAR_NOT_ACTIVE
BOOL bJustCleanedUpSyncScene
bJustCleanedUpSyncScene = FALSE
IF bDelaySyncSceneEnd
AND IS_PLAYER_ON_ANY_YACHT(PLAYER_ID())
IF HAS_NET_TIMER_EXPIRED_ONE_FRAME(timerDelayedSyncScene, 450)
PRINTLN("STRIPCLUB_DRINKING: Ending sync scene delayed")
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
STRIPCLUB_END_SYNC_SCENE(iDrinkScene, bIsMp)
bDelaySyncSceneEnd = FALSE
CDEBUG1LN(DEBUG_SAFEHOUSE, "BAR_NOT_ACTIVE: g_bUsingBarmaidActivity = FALSE")
g_bUsingBarmaidActivity = FALSE
bJustCleanedUpSyncScene = TRUE
ENDIF
ENDIF
IF IS_PROPERTY_YACHT_APARTMENT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty)
IF NOT IS_PED_INJURED(drinkData.pedBartender)
IF NOT IS_PED_HEADTRACKING_PED(drinkData.pedBartender, PLAYER_PED_ID())
IF GET_DISTANCE_BETWEEN_ENTITIES(drinkData.pedBartender, PLAYER_PED_ID()) < 8.0
TASK_LOOK_AT_ENTITY(drinkData.pedBartender, PLAYER_PED_ID(), -1)
CDEBUG1LN(DEBUG_SAFEHOUSE, "bartender looking at players")
ENDIF
ELSE
IF GET_DISTANCE_BETWEEN_ENTITIES(drinkData.pedBartender, PLAYER_PED_ID()) >= 8.0
TASK_CLEAR_LOOK_AT(drinkData.pedBartender)
ENDIF
ENDIF
ENDIF
ENDIF
IF NOT DOES_CAM_EXIST(stripCamAnim)
AND NOT bDelaySyncSceneEnd
stripCamAnim = CREATE_CAMERA(CAMTYPE_ANIMATED)
ENDIF
IF GET_ENTITY_DISTANCE_FROM_LOCATION(PLAYER_PED_ID(),GET_STRIP_CLUB_BAR_POSITION()) < STRIP_CLUB_BAR_APPROACH_DISTANCE
AND NOT IS_PHONE_ONSCREEN()
AND NOT bDelaySyncSceneEnd
OR (IS_PROPERTY_YACHT_APARTMENT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty)
AND Get_Peds_Drunk_Alcohol_Hit_Count(PLAYER_PED_ID()) < 10 AND NOT g_bMPPlayerPassingOutDrunk)
IF GET_ENTITY_DISTANCE_FROM_LOCATION(PLAYER_PED_ID(),GET_STRIP_CLUB_BAR_POSITION()) < STRIP_CLUB_BAR_APPROACH_DISTANCE
AND NOT IS_PHONE_ONSCREEN()
OR IS_PROPERTY_YACHT_APARTMENT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty)
AND (GET_ENTITY_DISTANCE_FROM_LOCATION(PLAYER_PED_ID(), yachtWhiskeyBartender.vLoc) < 3 AND GET_ROOM_KEY_FROM_ENTITY(PLAYER_PED_ID()) = GET_HASH_KEY("GTaMloRoom_bar1"))
IF NOT IS_BITMASK_AS_ENUM_SET(iStripClubBits_Streaming, STRIP_CLUB_BIT_ANIM_DRINKING)
CPRINTLN(DEBUG_SCLUB,"request drinking animation")
REQUEST_ANIM_DICT(GET_STRIP_CLUB_ANIM_DICT_BAR_DRINK(SCBA_DRUNK1))
REQUEST_ANIM_DICT(GET_STRIP_CLUB_ANIM_DICT_BAR_DRINK(SCBA_DRUNK2))
REQUEST_ANIM_DICT(GET_STRIP_CLUB_ANIM_DICT_BAR_DRINK(SCBA_DRUNK3))
REQUEST_ANIM_DICT(GET_STRIP_CLUB_ANIM_DICT_BAR_DRINK(SCBA_DRUNK4))
IF IS_PROPERTY_YACHT_APARTMENT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty)
REQUEST_ANIM_DICT("anim@mini@yacht@bar@drink@idle_a")
ENDIF
SET_BITMASK_AS_ENUM(iStripClubBits_Streaming, STRIP_CLUB_BIT_ANIM_DRINKING)
ENDIF
IF HAS_ANIM_DICT_LOADED(GET_STRIP_CLUB_ANIM_DICT_BAR_DRINK(eDrinkAnimEnum))
AND REQUEST_SCRIPT_AUDIO_BANK("SAFEHOUSE_TREVOR_DRINK_WHISKEY")
AND IS_PLAYER_FREE_FOR_AMBIENT_TASK(PLAYER_ID())
AND NOT IS_ANY_INTERACTION_ANIM_PLAYING()
AND NOT IS_ENTITY_DEAD(drinkData.pedBartender)
AND NOT IS_CUSTOM_MENU_ON_SCREEN()
AND NOT IS_PED_WEARING_A_HELMET(PLAYER_PED_ID())
AND NOT g_MultiplayerSettings.g_bSuicide
AND CAN_PLAYER_USE_BAR()
SET_BITMASK_AS_ENUM(iStripClubBits_Streaming, STRIP_CLUB_YACHT_AUDIO_BANK_LOADED)
IF NOT IS_PROPERTY_YACHT_APARTMENT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty)
OR IS_PROPERTY_YACHT_APARTMENT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty)
AND HAS_ANIM_DICT_LOADED("anim@mini@yacht@bar@drink@IDLE_A")
IF GET_ENTITY_DISTANCE_FROM_LOCATION(PLAYER_PED_ID(),GET_STRIP_CLUB_BAR_POSITION()) < iUseBartenderDistance
OR IS_ENTITY_IN_ANGLED_AREA(PLAYER_PED_ID(), whiskeyBarLocateA.vLoc, whiskeyBarLocateB.vLoc, 2 )
IF NOT IS_ANY_PLAYER_USING_BAR()
IF DOES_ENTITY_EXIST(drinkData.pedBartender)
AND IS_ENTITY_VISIBLE(drinkData.pedBartender)
AND IS_ENTITY_ON_SCREEN(drinkData.pedBartender)
//the range for getting a drink is a little smaller then the range to start the script
IF IS_PLAYER_ON_ANY_YACHT(PLAYER_ID())
TRIGGER_YACHT_BARSTAFF_SPEECH_PLAYER_ENTRY(drinkData)
RUN_YACHT_BARTENDER_IDLE_CHAT(drinkData)
ENDIF
IF NOT IS_HELP_MESSAGE_BEING_DISPLAYED()
AND DOES_ENTITY_EXIST(drinkData.pedBartender)
AND IS_ENTITY_VISIBLE(drinkData.pedBartender)
CPRINTLN(DEBUG_SCLUB,"No help is being displayed")
IF GET_STRIP_CLUB_PLAYER_CASH(TRUE, TRUE, drinkData.iIsMP) >= SC_DRINK_COST
PRINT_STRIPCLUB_DRINK_HELP(TRUE, drinkData.iIsMP)
ELSE
IF drinkData.iIsMP = 0
PRINT_STRIPCLUB_HELP("SCLUB_NO_DRINK", TRUE, drinkData.iIsMP)
ELSE
//check for wallet
IF CAN_PLAYER_AFFORD_STRIP_CLUB_ITEM(SC_DRINK_COST, TRUE, TRUE, drinkData.iIsMP) //Use this function twice to check bank and wallet separately, avoiding SCRIPT_MAX_INT32 overflow.
OR CAN_PLAYER_AFFORD_STRIP_CLUB_ITEM(SC_DRINK_COST, TRUE, FALSE, drinkData.iIsMP)
PRINT_STRIPCLUB_DRINK_HELP(TRUE, drinkData.iIsMP)
ELSE
PRINT_STRIPCLUB_HELP("SCLUB_NO_DRINK_MP", TRUE, drinkData.iIsMP)
ENDIF
ENDIF
ENDIF
ENDIF
IF (STRIPCLUB_IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_CONTEXT)
AND IS_ANY_STRIPCLUB_DRINK_HELP_DISPLAYED()
AND NOT IS_PROPERTY_YACHT_APARTMENT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty))
OR (IS_PROPERTY_YACHT_APARTMENT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty)
AND STRIPCLUB_IS_CONTROL_JUST_PRESSED(FRONTEND_CONTROL, INPUT_CONTEXT)
AND IS_ANY_STRIPCLUB_DRINK_HELP_DISPLAYED()
AND NOT g_bPlayerInProcessOfExitingInterior
AND g_bCanPlayerUseSafehouseActivity
AND NOT bDelaySyncSceneEnd AND NOT bJustCleanedUpSyncScene)
IF CAN_PLAYER_AFFORD_STRIP_CLUB_ITEM(SC_DRINK_COST, TRUE, TRUE, drinkData.iIsMP) //Use this function twice to check bank and wallet separately, avoiding SCRIPT_MAX_INT32 overflow.
OR CAN_PLAYER_AFFORD_STRIP_CLUB_ITEM(SC_DRINK_COST, TRUE, FALSE, drinkData.iIsMP)
CPRINTLN(DEBUG_SCLUB,"Pressed button to solicit barman")
IF bIsMp
playerDrinkingBD[PARTICIPANT_ID_TO_INT()].bUsingBartender = TRUE
CDEBUG1LN(DEBUG_SAFEHOUSE, "STRIPCLUB_IS_CONTROL_JUST_PRESSED: g_bUsingBarmaidActivity = TRUE")
g_bUsingBarmaidActivity = TRUE
ENDIF
IF NOT IS_PROPERTY_YACHT_APARTMENT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty)
IF VDIST2(GET_ENTITY_COORDS(PLAYER_PED_ID()) , <<127.1629, -1283.5865, 29.2786>>) < 0.001
OR (NOT bIsMP AND NOT IS_PLAYER_IN_FIRST_PERSON_CAMERA())
//play sync scene right away
CPRINTLN(DEBUG_SCLUB,"play sync scene right away")
ELSE
CPRINTLN(DEBUG_SCLUB,"TASK_GO_STRAIGHT_TO_COORD")
TASK_GO_STRAIGHT_TO_COORD(PLAYER_PED_ID(), <<127.1629, -1283.5865, 29.2786>>, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, 300.0)
ENDIF
ELSE
GET_POSITION_AS_OFFSET_FOR_YACHT(drinkData.iYachtInstance, MP_PROP_ELEMENT_WHISKY_BAR_SCENE, whiskeyBarScene)
tempPosition = GET_ANIM_INITIAL_OFFSET_POSITION(GET_STRIP_CLUB_ANIM_DICT_BAR_DRINK(eDrinkAnimEnum), GET_STRIP_CLUB_ANIM_BAR(eDrinkAnimEnum, TRUE), whiskeyBarScene.vLoc, whiskeyBarScene.vRot)
VECTOR tempRotation
tempRotation = GET_ANIM_INITIAL_OFFSET_ROTATION(GET_STRIP_CLUB_ANIM_DICT_BAR_DRINK(eDrinkAnimEnum), GET_STRIP_CLUB_ANIM_BAR(eDrinkAnimEnum, TRUE), whiskeyBarScene.vLoc, whiskeyBarScene.vRot)
FLOAT fTempRotation
fTempRotation = tempRotation.Z
CPRINTLN(DEBUG_SCLUB,"Yacht goto Coords = ", tempRotation, ", rotation = ", fTempRotation)
TASK_GO_STRAIGHT_TO_COORD(PLAYER_PED_ID(), tempPosition, PEDMOVE_WALK, DEFAULT_TIME_BEFORE_WARP, fTempRotation)
// tempPosition = GET_ANIM_INITIAL_OFFSET_POSITION(GET_STRIP_CLUB_ANIM_DICT_BAR_DRINK(eDrinkAnimEnum), GET_STRIP_CLUB_ANIM_BAR_OBJECTS(eDrinkAnimEnum, TRUE), << -1569.238, -4087.600, 9.764 >>, << 0.000, 0.000, -43.920 >>)
// tempRotation = GET_ANIM_INITIAL_OFFSET_ROTATION(GET_STRIP_CLUB_ANIM_DICT_BAR_DRINK(eDrinkAnimEnum), GET_STRIP_CLUB_ANIM_BAR_OBJECTS(eDrinkAnimEnum, TRUE), << -1569.238, -4087.600, 9.764 >>, << 0.000, 0.000, -43.920 >>)
// CPRINTLN(DEBUG_SCLUB,"Yacht glass Coords = ", tempRotation, ", rotation = ", fTempRotation)
//
//
// tempPosition = GET_ANIM_INITIAL_OFFSET_POSITION(GET_STRIP_CLUB_ANIM_DICT_BAR_DRINK(eDrinkAnimEnum), GET_STRIP_CLUB_ANIM_BAR_OBJECTS(eDrinkAnimEnum, FALSE), << -1569.238, -4087.600, 9.764 >>, << 0.000, 0.000, -43.920 >>)
// tempRotation = GET_ANIM_INITIAL_OFFSET_ROTATION(GET_STRIP_CLUB_ANIM_DICT_BAR_DRINK(eDrinkAnimEnum), GET_STRIP_CLUB_ANIM_BAR_OBJECTS(eDrinkAnimEnum, FALSE), << -1569.238, -4087.600, 9.764 >>, << 0.000, 0.000, -43.920 >>)
// CPRINTLN(DEBUG_SCLUB,"Yacht bottle Coords = ", tempRotation, ", rotation = ", fTempRotation)
STRIPCLUB_TASK_OBJECT_SYNC_SCENE(drinkData.objGlass, iDrinkScene, GET_STRIP_CLUB_ANIM_DICT_BAR_DRINK(eDrinkAnimEnum), GET_STRIP_CLUB_ANIM_BAR_OBJECTS(eDrinkAnimEnum, TRUE), REALLY_SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, bIsMp, FALSE)
STRIPCLUB_TASK_OBJECT_SYNC_SCENE(drinkData.objBottle, iDrinkScene, GET_STRIP_CLUB_ANIM_DICT_BAR_DRINK(eDrinkAnimEnum), GET_STRIP_CLUB_ANIM_BAR_OBJECTS(eDrinkAnimEnum, FALSE), REALLY_SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, bIsMp, FALSE)
IF IS_PLAYER_ON_ANY_YACHT(PLAYER_ID())
PLAY_YACHT_SERVING_DIALOGUE(GET_STRIPCLUB_AMOUNT_OF_ALCOHOL(), drinkData)
REINIT_NET_TIMER(stYachtBarStaffIdleSpeech)
ENDIF
ENDIF
iDrinkWaitTime = GET_GAME_TIMER() + 250 //wait a little bit so we can sync all the people who propositioned the bartender at the same time
SET_STRIPCLUB_USING_BAR(TRUE)
CLEAR_ALL_STRIP_CLUB_HELP()
barStage = BAR_INIT
ELIF bIsMp
STRIP_CLUB_BUY_CASH_ALERT(drinkData.iIsMP)
ENDIF
ENDIF
ENDIF
ELSE
PRINT_STRIPCLUB_HELP("SCLUB_BUSY_DRINK", FALSE, drinkData.iIsMP)
ENDIF
ELSE //away from the bar
CDEBUG2LN(DEBUG_SCLUB,"Away from bar")
CLEAR_STRIPCLUB_DRINKING_HELP()
IF bIsMp
IF playerDrinkingBD[PARTICIPANT_ID_TO_INT()].bUsingBartender
playerDrinkingBD[PARTICIPANT_ID_TO_INT()].bUsingBartender = FALSE
CDEBUG1LN(DEBUG_SAFEHOUSE, "away from the bar: g_bUsingBarmaidActivity = FALSE")
g_bUsingBarmaidActivity = FALSE
ENDIF
ENDIF
ENDIF
ELSE
ENDIF
ELSE
CLEAR_STRIPCLUB_DRINKING_HELP()
CPRINTLN(DEBUG_SCLUB,"Don't allow bar drink")
IF NOT HAS_ANIM_DICT_LOADED(GET_STRIP_CLUB_ANIM_DICT_BAR_DRINK(eDrinkAnimEnum))
CPRINTLN(DEBUG_SCLUB,"Anims havn't loaded yet")
ENDIF
IF NOT REQUEST_SCRIPT_AUDIO_BANK("SAFEHOUSE_TREVOR_DRINK_WHISKEY")
CPRINTLN(DEBUG_SCLUB,"Sound havn't loaded yet")
ENDIF
IF NOT IS_PLAYER_FREE_FOR_AMBIENT_TASK(PLAYER_ID())
CPRINTLN(DEBUG_SCLUB,"Player not free for ambient task")
ENDIF
IF IS_ANY_INTERACTION_ANIM_PLAYING()
CPRINTLN(DEBUG_SCLUB,"Interaction anim playing")
ENDIF
IF IS_ENTITY_DEAD(drinkData.pedBartender)
CPRINTLN(DEBUG_SCLUB,"Bartender dead")
ENDIF
IF IS_CUSTOM_MENU_ON_SCREEN()
CPRINTLN(DEBUG_SCLUB,"Custome menu on screen")
ENDIF
IF IS_PED_WEARING_A_HELMET(PLAYER_PED_ID())
CPRINTLN(DEBUG_SCLUB,"Player Wearing helmet")
ENDIF
IF NOT CAN_PLAYER_USE_BAR()
CPRINTLN(DEBUG_SCLUB,"Player cant use bar")
ENDIF
ENDIF
ELSE
IF IS_PLAYER_ON_ANY_YACHT(PLAYER_ID())
CLEAR_STRIPCLUB_DRINKING_HELP()
ENDIF
IF IS_BITMASK_AS_ENUM_SET(iStripClubBits_Streaming, STRIP_CLUB_YACHT_AUDIO_BANK_LOADED)
CLEAR_BITMASK_AS_ENUM(iStripClubBits_Streaming, STRIP_CLUB_YACHT_AUDIO_BANK_LOADED)
RELEASE_NAMED_SCRIPT_AUDIO_BANK("SAFEHOUSE_TREVOR_DRINK_WHISKEY")
ENDIF
CDEBUG2LN(DEBUG_SAFEHOUSE, "yachtWhiskeyBartender.vLoc: ", yachtWhiskeyBartender.vLoc)
CDEBUG2LN(DEBUG_SAFEHOUSE, "distance from bartender: ", GET_ENTITY_DISTANCE_FROM_LOCATION(PLAYER_PED_ID(), yachtWhiskeyBartender.vLoc))
ENDIF
ELSE
IF Get_Peds_Drunk_Alcohol_Hit_Count(PLAYER_PED_ID()) >= 10
CDEBUG1LN(DEBUG_SAFEHOUSE, "Player alcohol hit count: ", Get_Peds_Drunk_Alcohol_Hit_Count(PLAYER_PED_ID()))
ENDIF
//Not in range clear script
CLEAR_STRIPCLUB_DRINKING_HELP()
barStage = BAR_CLEANUP
ENDIF
BREAK
CASE BAR_INIT
GET_CONTROL_OF_BARTENDER(drinkData)
DISABLE_SELECTOR_THIS_FRAME()
DISABLE_INTERACTION_MENU()
IF DOES_ANOTHER_PLAYER_WANT_TO_USE_BAR()
OR HAS_ANOTHER_PLAYER_STARTED_THE_BARTEND_SCENE()
AND bIsMp
//oh shit another player propositioned the bartender and he has priority over me. I better quit out
playerDrinkingBD[PARTICIPANT_ID_TO_INT()].bUsingBartender = FALSE
CDEBUG1LN(DEBUG_SAFEHOUSE, "BAR_INIT: g_bUsingBarmaidActivity = FALSE")
g_bUsingBarmaidActivity = FALSE
SET_STRIPCLUB_USING_BAR(FALSE)
PRINT_STRIPCLUB_HELP("SCLUB_BUSY_DRINK", FALSE, drinkData.iIsMP)
CLEAR_PED_TASKS(PLAYER_PED_ID())
barStage = BAR_NOT_ACTIVE
ENDIF
IF bControlsBartender
AND CAN_PLAYER_START_CUTSCENE() AND iDrinkWaitTime < GET_GAME_TIMER()
AND GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_FOLLOW_NAV_MESH_TO_COORD) != PERFORMING_TASK
AND GET_SCRIPT_TASK_STATUS(PLAYER_PED_ID(), SCRIPT_TASK_GO_STRAIGHT_TO_COORD) != PERFORMING_TASK
//Pay for your drink
STRIP_CLUB_SPEND_CASH(SC_DRINK_COST, TRUE, DRINKING_AT_THE_BAR, FALSE, drinkData.iIsMP)
// STRIP_CLUB_SPEND_CASH(GET_STRIP_CLUB_PLAYER_CASH(TRUE, drinkData.iIsMP), TRUE, DRINKING_AT_THE_BAR, drinkData.iIsMP)
// STRIPCLUB_GIVE_CASH(50, drinkData.iIsMP)
SET_SCRIPTS_SAFE_FOR_CUTSCENE(TRUE, DEFAULT, FALSE)
DISABLE_KILL_YOURSELF_OPTION()
SET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), WEAPONTYPE_UNARMED, TRUE)
IF bIsMp
NETWORK_SET_LOOK_AT_TALKERS(FALSE)
ENDIF
// position and animate peds
IF NOT IS_PED_INJURED(PLAYER_PED_ID())
AND NOT IS_PED_INJURED(drinkData.pedBartender)
//CLEAR_PED_TASKS_IMMEDIATELY(PLAYER_PED_ID())
IF bIsMp
REMOVE_STRIPCLUB_NIGHTVISION(TRUE)
REMOVE_STRIPCLUB_PLAYER_MASK(bIsMp)
ENDIF
HANG_UP_AND_PUT_AWAY_PHONE(FALSE)
GET_DRINKING_FACE_ANIMS(eDrinkAnimEnum, txtBartenderFace, txtPlayerFace)
//REALLY_SLOW_BLEND_IN
IF NOT IS_PROPERTY_YACHT_APARTMENT(GlobalplayerBD_FM[NATIVE_TO_INT(PLAYER_ID())].propertyDetails.iCurrentlyInsideProperty)
STRIPCLUB_CREATE_SYNC_SCENE(iDrinkScene, <<130.19, -1283.79, 30.09>>, <<0,0,30.0>>, FALSE, bIsMp, FALSE)
ELSE
GET_POSITION_AS_OFFSET_FOR_YACHT(drinkData.iYachtInstance, MP_PROP_ELEMENT_WHISKY_BAR_SCENE, whiskeyBarScene)
STRIPCLUB_CREATE_SYNC_SCENE(iDrinkScene, whiskeyBarScene.vLoc, whiskeyBarScene.vRot, TRUE, bIsMp, FALSE)
ENDIF
FLOAT fPlayerSyncSceneBlendOut
fPlayerSyncSceneBlendOut = -1
IF IS_PLAYER_ON_ANY_YACHT(PLAYER_ID())
fPlayerSyncSceneBlendOut = REALLY_SLOW_BLEND_OUT
ENDIF
STRIPCLUB_TASK_SYNC_SCENE(PLAYER_PED_ID(), iDrinkScene, GET_STRIP_CLUB_ANIM_DICT_BAR_DRINK(eDrinkAnimEnum), GET_STRIP_CLUB_ANIM_BAR(eDrinkAnimEnum, TRUE), WALK_BLEND_IN , fPlayerSyncSceneBlendOut, SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_EXPAND_PED_CAPSULE_FROM_SKELETON | SYNCED_SCENE_DONT_INTERRUPT, bIsMp, FALSE)
STRIPCLUB_TASK_SYNC_SCENE(drinkData.pedBartender, iDrinkScene, GET_STRIP_CLUB_ANIM_DICT_BAR_DRINK(eDrinkAnimEnum), GET_STRIP_CLUB_ANIM_BAR(eDrinkAnimEnum, FALSE), REALLY_SLOW_BLEND_IN, -1, SYNCED_SCENE_USE_PHYSICS | SYNCED_SCENE_DONT_INTERRUPT, bIsMp, FALSE)
STRIPCLUB_TASK_OBJECT_SYNC_SCENE(drinkData.objGlass, iDrinkScene, GET_STRIP_CLUB_ANIM_DICT_BAR_DRINK(eDrinkAnimEnum), GET_STRIP_CLUB_ANIM_BAR_OBJECTS(eDrinkAnimEnum, TRUE), REALLY_SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, bIsMp, FALSE)
STRIPCLUB_TASK_OBJECT_SYNC_SCENE(drinkData.objBottle, iDrinkScene, GET_STRIP_CLUB_ANIM_DICT_BAR_DRINK(eDrinkAnimEnum), GET_STRIP_CLUB_ANIM_BAR_OBJECTS(eDrinkAnimEnum, FALSE), REALLY_SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT, SYNCED_SCENE_DONT_INTERRUPT, bIsMp, FALSE)
IF NOT IS_PLAYER_IN_FIRST_PERSON_CAMERA()
STRIPCLUB_SET_SYNC_SCENE_CAM(iDrinkScene, GET_STRIP_CLUB_ANIM_DICT_BAR_DRINK(eDrinkAnimEnum), GET_STRIP_CLUB_BAR_CAM_ANIM(eDrinkAnimEnum), bIsMp, FALSE )
ELSE
IF DOES_CAM_EXIST(stripCamAnim)
DESTROY_CAM(stripCamAnim)
ENDIF
ENDIF
STRIPCLUB_START_SYNC_SCENE(iDrinkScene, bIsMp)
IF NOT IS_STRING_NULL_OR_EMPTY(txtBartenderFace)
TASK_PLAY_ANIM(drinkData.pedBartender, GET_STRIP_CLUB_ANIM_DICT_BAR_DRINK(eDrinkAnimEnum), txtBartenderFace, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_SECONDARY)
ENDIF
IF GET_FOLLOW_PED_CAM_VIEW_MODE() <> CAM_VIEW_MODE_FIRST_PERSON
AND NOT IS_STRING_NULL_OR_EMPTY(txtPlayerFace)
TASK_PLAY_ANIM(PLAYER_PED_ID(), GET_STRIP_CLUB_ANIM_DICT_BAR_DRINK(eDrinkAnimEnum), txtPlayerFace, NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_SECONDARY)
ENDIF
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
IF NOT bIsMP
IF NOT IS_PLAYER_IN_FIRST_PERSON_CAMERA()
RENDER_SCRIPT_CAMS(TRUE, FALSE)
ENDIF
ELSE
playerDrinkingBD[PARTICIPANT_ID_TO_INT()].bBartenderSceneStarted = TRUE
ENDIF
DISPLAY_RADAR(FALSE)
IF NOT bIsMp
IF GET_DRUNK_LINE(GET_STRIPCLUB_AMOUNT_OF_ALCOHOL()) <= 0
PLAY_PED_AMBIENT_SPEECH(PLAYER_PED_ID(), "GENERIC_BUY", SPEECH_PARAMS_FORCE_NORMAL)
ELIF GET_DRUNK_LINE(GET_STRIPCLUB_AMOUNT_OF_ALCOHOL()) = 1
PLAY_PED_AMBIENT_SPEECH(PLAYER_PED_ID(), "GENERIC_BUY_REPEAT", SPEECH_PARAMS_FORCE_NORMAL)
ELIF GET_DRUNK_LINE(GET_STRIPCLUB_AMOUNT_OF_ALCOHOL()) = 2
PLAY_PED_AMBIENT_SPEECH(PLAYER_PED_ID(), "GENERIC_BUY_DRUNK", SPEECH_PARAMS_FORCE_NORMAL)
ELSE
PLAY_PED_AMBIENT_SPEECH(PLAYER_PED_ID(), "GENERIC_BUY_REPEAT_DRUNK", SPEECH_PARAMS_FORCE_NORMAL)
ENDIF
ENDIF
SET_BITMASK_AS_ENUM(iStripClubBits_General, STRIP_CLUB_GENERAL_PLAYER_CONTROL_REMOVED)
ENDIF
bIncDrink = FALSE
barStage = BAR_GETTING_DRINK
ENDIF
BREAK
CASE BAR_GETTING_DRINK
GET_CONTROL_OF_BARTENDER(drinkData)
CLEAR_STRIPCLUB_DRINKING_HELP()
DISABLE_CELLPHONE_THIS_FRAME_ONLY()
HIDE_HUD_COMPONENT_THIS_FRAME(NEW_HUD_WEAPON_WHEEL)
DISABLE_CONTROL_ACTION(PLAYER_CONTROL, INPUT_SELECT_WEAPON)
DISABLE_SELECTOR_THIS_FRAME()
IF NOT bIncDrink AND DID_PLAYER_TAKE_DRINK(eDrinkAnimEnum)
CPRINTLN(DEBUG_SCLUB, "INC DRINK")
INC_STRIPCLUB_DRINKS()
bIncDrink = TRUE
SET_MP_DAILY_OBJECTIVE_COMPLETE(MP_DAILY_AM_ORDER_DRINK)
ENDIF
IF IS_BAR_SCENE_OVER() AND bControlsBartender
SET_GAMEPLAY_CAM_RELATIVE_HEADING(5.2223)
SET_GAMEPLAY_CAM_RELATIVE_PITCH(-6.1803)
IF IS_PLAYER_IN_FIRST_PERSON_CAMERA()
RENDER_SCRIPT_CAMS(FALSE, FALSE)
ELSE
RENDER_SCRIPT_CAMS(FALSE, TRUE, DEFAULT_INTERP_TO_FROM_GAME, FALSE)
ENDIF
SETTIMERA(0)
IF NOT IS_PLAYER_ON_ANY_YACHT(PLAYER_ID())
STRIPCLUB_END_SYNC_SCENE(iDrinkScene, bIsMp)
ELSE
CLEAR_PED_TASKS(PLAYER_PED_ID())
PRINTLN("STRIPCLUB_DRINKING: Setting bDelaySyncSceneEnd TRUE")
bDelaySyncSceneEnd = TRUE
ENDIF
IF DOES_ENTITY_EXIST(drinkData.pedBartender) AND NOT IS_ENTITY_DEAD(drinkData.pedBartender)
SET_BARTENDER_IDLE_ANIM(drinkData.pedBartender)
FORCE_PED_AI_AND_ANIMATION_UPDATE(drinkData.pedBartender, TRUE)
ENDIF
IF DOES_ENTITY_EXIST(drinkData.objGlass) AND NOT IS_ENTITY_DEAD(drinkData.objGlass)
PLAY_ENTITY_ANIM(drinkData.objGlass, "idle_a_shot_glass", GET_STRIP_CLUB_ANIM_DICT_BAR_DRINK(SCBA_IDLE), INSTANT_BLEND_IN, FALSE, TRUE)
ENDIF
IF DOES_ENTITY_EXIST(drinkData.objBottle) AND NOT IS_ENTITY_DEAD(drinkData.objBottle)
PLAY_ENTITY_ANIM(drinkData.objBottle, "idle_a_whiskey", GET_STRIP_CLUB_ANIM_DICT_BAR_DRINK(SCBA_IDLE), INSTANT_BLEND_IN, FALSE, TRUE)
ENDIF
SET_SCRIPTS_SAFE_FOR_CUTSCENE(FALSE, DEFAULT, FALSE)
IF bIsMp
SET_STRIPCLUB_PLAYER_MASK(bIsMp)
SET_STRIPCLUB_NIGHTVISION(TRUE)
ENDIF
barStage = BAR_USED
ELSE
IF IS_PLAYER_SWITCH_IN_PROGRESS()
CPRINTLN(DEBUG_SCLUB,"Player went to sky cam while getting a drink")
SET_SYNCHRONIZED_SCENE_PHASE(GET_SRTIPCLUB_LOCAL_SCENE_ID(iDrinkScene, bIsMp), 1.0)
ENDIF
ENDIF
BREAK
CASE BAR_USED
CPRINTLN(DEBUG_SCLUB,"Bar Used. ", TIMERA())
IF TIMERA() > DEFAULT_INTERP_TO_FROM_GAME OR bIsMP OR IS_PLAYER_IN_FIRST_PERSON_CAMERA()
SET_STRIPCLUB_USING_BAR(FALSE)
DISPLAY_RADAR(TRUE)
ENABLE_SELECTOR()
ENABLE_KILL_YOURSELF_OPTION()
ENABLE_INTERACTION_MENU()
IF IS_BITMASK_AS_ENUM_SET(iStripClubBits_Streaming, STRIP_CLUB_YACHT_AUDIO_BANK_LOADED)
CLEAR_BITMASK_AS_ENUM(iStripClubBits_Streaming, STRIP_CLUB_YACHT_AUDIO_BANK_LOADED)
RELEASE_NAMED_SCRIPT_AUDIO_BANK("SAFEHOUSE_TREVOR_DRINK_WHISKEY")
ENDIF
IF bIsMp
playerDrinkingBD[PARTICIPANT_ID_TO_INT()].bUsingBartender = FALSE
playerDrinkingBD[PARTICIPANT_ID_TO_INT()].bBartenderSceneStarted = FALSE
NETWORK_SET_LOOK_AT_TALKERS(TRUE)
ENDIF
IF NOT IS_BITMASK_AS_ENUM_SET(iStripClubBits_General, STRIP_CLUB_GENERAL_PLAYER_HAD_DRINK)
BawsaqIncrementDrunkModifier_PUBCLUBVISIT()
SET_BITMASK_AS_ENUM(iStripClubBits_General, STRIP_CLUB_GENERAL_PLAYER_HAD_DRINK)
ENDIF
IF NOT IS_BITMASK_AS_ENUM_SET(iStripClubBits_General, STRIP_CLUB_GENERAL_PLAYER_HAD_DRINK_W_FRIEND)
IF DOES_ENTITY_EXIST(FRIEND_A_PED_ID())
BawsaqIncrementDrunkModifier_FRNDTOPUB()
SET_BITMASK_AS_ENUM(iStripClubBits_General, STRIP_CLUB_GENERAL_PLAYER_HAD_DRINK_W_FRIEND)
ENDIF
ENDIF
CLEAR_BITMASK_AS_ENUM(iStripClubBits_General, STRIP_CLUB_GENERAL_PLAYER_CONTROL_REMOVED)
SET_PLAYER_CONTROL(PLAYER_ID(), TRUE)
IF bDelaySyncSceneEnd
AND IS_PLAYER_ON_ANY_YACHT(PLAYER_ID())
RESET_NET_TIMER(timerDelayedSyncScene)
SET_PLAYER_CONTROL(PLAYER_ID(), FALSE)
ENDIF
barStage = BAR_NOT_ACTIVE
ENDIF
BREAK
CASE BAR_TOO_DRUNK
IF GET_ENTITY_DISTANCE_FROM_LOCATION(PLAYER_PED_ID(),GET_STRIP_CLUB_BAR_POSITION()) < STRIP_CLUB_BAR_APPROACH_DISTANCE
IF NOT IS_PHONE_ONSCREEN()
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF IS_STRIPCLUB_SOLICIT_BUTTON_JUST_PRESSED()
CPRINTLN(DEBUG_SCLUB,"Pressed button to solicit barman WHILE TOO DRUNK")
CREATE_CONVERSATION(stripClubConversation, "SCAUD", "SC_NO_DRINK", GET_STRIPCLUB_SPEECH_PRIORITY())
ENDIF
ENDIF
ENDIF
ELSE
CLEAR_STRIPCLUB_DRINKING_HELP()
barStage = BAR_CLEANUP
ENDIF
BREAK
CASE BAR_CLEANUP
IF REMOVE_BARMAN(drinkData)
CLEANUP_STRIPCLUB_DRINKING(drinkData)
ELSE
CPRINTLN(DEBUG_SCLUB,"CLEANUP_STAGE: waiting to remove barmaid")
ENDIF
BREAK
ENDSWITCH
WAIT(0)
ENDWHILE
ENDSCRIPT