1427 lines
42 KiB
Scheme
Executable File
1427 lines
42 KiB
Scheme
Executable File
/// File: common_sex.sch
|
|
/// Original Author: John R. Diaz
|
|
/// Putting all sex anims in here for reusability
|
|
|
|
USING "commands_entity.sch"
|
|
USING "commands_ped.sch"
|
|
USING "net_interactions_public.sch"
|
|
|
|
CONST_INT ALLOW_ALL_CARS 0
|
|
CAM_VIEW_MODE ExitViewMode
|
|
|
|
ENUM SEX_SYNCH_SCENE_ORIGIN
|
|
SEX_ORIGIN_DRIVER_SEAT = 0,
|
|
SEX_ORIGIN_PASSENGER_SEAT,
|
|
SEX_ORIGIN_PROP_LOOP
|
|
ENDENUM
|
|
|
|
ENUM SEX_STATE_ENUM
|
|
|
|
SEX_PROP_TO_ACTION_P1 = 0,
|
|
SEX_PROP_TO_ACTION_P2,
|
|
SEX_ACTION_LOOP, //Performing BJ or Having Sex
|
|
SEX_ACTION_TO_PROP_P1, //Money Shot
|
|
SEX_ACTION_TO_PROP_P2,
|
|
SEX_PROP_LOOP,
|
|
|
|
SEX_SERVICE_COMPLETE
|
|
|
|
ENDENUM
|
|
|
|
|
|
ENUM ANIM_NAME_VEHICLE_LOW
|
|
//Propositions
|
|
ANVL_PROP_INTRO_M = 0,
|
|
ANVL_PROP_INTRO_F,
|
|
ANVL_PROP_LOOP_M,
|
|
ANVL_PROP_LOOP_F,
|
|
ANVL_PROP_OUTRO_M,
|
|
ANVL_PROP_OUTRO_F,
|
|
ANVL_PROP_TO_SIT_M,
|
|
ANVL_PROP_TO_SIT_F,
|
|
|
|
//Sex
|
|
ANVL_PROP_2_SEX_P1_F,
|
|
ANVL_PROP_2_SEX_P2_F,
|
|
ANVL_SEX_LOOP_F,
|
|
ANVL_SEX_2_PROP_P1_F,
|
|
ANVL_SEX_2_PROP_P2_F,
|
|
|
|
ANVL_PROP_2_SEX_P1_M,
|
|
ANVL_PROP_2_SEX_P2_M,
|
|
ANVL_SEX_LOOP_M,
|
|
ANVL_SEX_2_PROP_P1_M,
|
|
ANVL_SEX_2_PROP_P2_M,
|
|
|
|
//BJ
|
|
ANVL_PROP_2_BJ_P1_F,
|
|
ANVL_PROP_2_BJ_P2_F,
|
|
ANVL_BJ_LOOP_F,
|
|
ANVL_BJ_2_PROP_P1_F,
|
|
ANVL_BJ_2_PROP_P2_F,
|
|
|
|
ANVL_PROP_2_BJ_P1_M,
|
|
ANVL_PROP_2_BJ_P2_M,
|
|
ANVL_BJ_LOOP_M,
|
|
ANVL_BJ_2_PROP_P1_M,
|
|
ANVL_BJ_2_PROP_P2_M,
|
|
|
|
ANVL_TOTAL
|
|
ENDENUM
|
|
FUNC STRING GET_CLIP_SET_FOR_FEMALES_TO_ENTER_LOW_VEHICLES()
|
|
RETURN "clipset@veh@low@ps@female@base"
|
|
ENDFUNC
|
|
FUNC STRING GET_ANIM_DICT_FOR_SEX_IN_LOW_VEHICLES()
|
|
return "mini@prostitutes@sexlow_veh"
|
|
ENDFUNC
|
|
FUNC STRING GET_ANIM_DICT_FOR_SEX_IN_LOW_VEHICLES_FIRST_PERSON()
|
|
return "mini@prostitutes@sexlow_veh_first_person"
|
|
//return "mini@prostitutes@sexlow_veh"
|
|
ENDFUNC
|
|
|
|
FUNC STRING GET_SEX_STATE_INDEX_NAME(SEX_STATE_ENUM eThisState)
|
|
|
|
STRING sStateName
|
|
|
|
SWITCH eThisState
|
|
CASE SEX_PROP_TO_ACTION_P1 sStateName = "Init" BREAK
|
|
CASE SEX_PROP_TO_ACTION_P2 sStateName = "Exit Pass Seat" BREAK
|
|
CASE SEX_ACTION_LOOP sStateName = "Entering Driver Seat" BREAK
|
|
CASE SEX_ACTION_TO_PROP_P1 sStateName = "Sex" BREAK
|
|
CASE SEX_ACTION_TO_PROP_P2 sStateName = "Exiting Driver Seat" BREAK
|
|
CASE SEX_PROP_LOOP sStateName = "Entering Pass Seat" BREAK
|
|
|
|
CASE SEX_SERVICE_COMPLETE sStateName = "Complete" BREAK
|
|
DEFAULT sStateName = "-" BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN sStateName
|
|
ENDFUNC
|
|
FUNC STRING GET_ANIM_NAME_FOR_SEX_IN_LOW_VEHICLE(ANIM_NAME_VEHICLE_LOW eSexAnim)
|
|
STRING sAnimName
|
|
|
|
SWITCH eSexAnim
|
|
|
|
//PROPOSITION - Prostitute asks the male what he wants to do
|
|
|
|
//Low Car Proposition - NEW
|
|
CASE ANVL_PROP_INTRO_M sAnimName = "low_car_sit_to_prop_player" BREAK
|
|
CASE ANVL_PROP_INTRO_F sAnimName = "low_car_sit_to_prop_female" BREAK
|
|
CASE ANVL_PROP_LOOP_M sAnimName = "low_car_prop_loop_player" BREAK
|
|
CASE ANVL_PROP_LOOP_F sAnimName = "low_car_prop_loop_female" BREAK
|
|
CASE ANVL_PROP_OUTRO_M sAnimName = "low_car_prop_to_leave_player" BREAK
|
|
CASE ANVL_PROP_OUTRO_F sAnimName = "low_car_prop_to_sit_alt_female" BREAK
|
|
CASE ANVL_PROP_TO_SIT_M sAnimName = "low_car_prop_to_sit_player" BREAK
|
|
CASE ANVL_PROP_TO_SIT_F sAnimName = "low_car_prop_to_sit_female" BREAK
|
|
|
|
|
|
//Sex=====================================================================
|
|
CASE ANVL_PROP_2_SEX_P1_F sAnimName = "low_car_prop_to_sex_p1_female" BREAK
|
|
CASE ANVL_PROP_2_SEX_P2_F sAnimName = "low_car_prop_to_sex_p2_female" BREAK
|
|
CASE ANVL_SEX_LOOP_F sAnimName = "low_car_sex_loop_female" BREAK
|
|
CASE ANVL_SEX_2_PROP_P1_F sAnimName = "low_car_sex_to_prop_p1_female" BREAK
|
|
CASE ANVL_SEX_2_PROP_P2_F sAnimName = "low_car_sex_to_prop_p2_female" BREAK
|
|
|
|
CASE ANVL_PROP_2_SEX_P1_M sAnimName = "low_car_prop_to_sex_p1_player" BREAK
|
|
CASE ANVL_PROP_2_SEX_P2_M sAnimName = "low_car_prop_to_sex_p2_player" BREAK
|
|
CASE ANVL_SEX_LOOP_M sAnimName = "low_car_sex_loop_player" BREAK
|
|
CASE ANVL_SEX_2_PROP_P1_M sAnimName = "low_car_sex_to_prop_p1_player" BREAK
|
|
CASE ANVL_SEX_2_PROP_P2_M sAnimName = "low_car_sex_to_prop_p2_player" BREAK
|
|
|
|
|
|
//BJs====================================================================
|
|
CASE ANVL_PROP_2_BJ_P1_F sAnimName = "low_car_prop_to_bj_p1_female" BREAK
|
|
CASE ANVL_PROP_2_BJ_P2_F sAnimName = "low_car_prop_to_bj_p2_female" BREAK
|
|
CASE ANVL_BJ_LOOP_F sAnimName = "low_car_bj_loop_female" BREAK
|
|
CASE ANVL_BJ_2_PROP_P1_F sAnimName = "low_car_bj_to_prop_p1_female" BREAK
|
|
CASE ANVL_BJ_2_PROP_P2_F sAnimName = "low_car_bj_to_prop_p2_female" BREAK
|
|
|
|
CASE ANVL_PROP_2_BJ_P1_M sAnimName = "low_car_prop_to_bj_p1_player" BREAK
|
|
CASE ANVL_PROP_2_BJ_P2_M sAnimName = "low_car_prop_to_bj_p2_player" BREAK
|
|
CASE ANVL_BJ_LOOP_M sAnimName = "low_car_bj_loop_player" BREAK
|
|
CASE ANVL_BJ_2_PROP_P1_M sAnimName = "low_car_bj_to_prop_p1_player" BREAK
|
|
CASE ANVL_BJ_2_PROP_P2_M sAnimName = "low_car_bj_to_prop_p2_player" BREAK
|
|
|
|
DEFAULT sAnimName = "" BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
RETURN sAnimName
|
|
ENDFUNC
|
|
|
|
|
|
ENUM ANIM_NAME_VEHICLE_NORM
|
|
|
|
//PROPOSITION---------------------------------------
|
|
|
|
ANVN_PROP_INTRO_M = 0,
|
|
ANVN_PROP_INTRO_F,
|
|
ANVN_PROP_LOOP_M,
|
|
ANVN_PROP_LOOP_F,
|
|
ANVN_PROP_OUTRO_M,
|
|
ANVN_PROP_OUTRO_F,
|
|
ANVN_PROP_TO_SIT_M,
|
|
ANVN_PROP_TO_SIT_F,
|
|
|
|
//SEX----------------------------------------------
|
|
|
|
ANVN_PROP_2_SEX_P1_F,
|
|
ANVN_PROP_2_SEX_P2_F,
|
|
ANVN_SEX_LOOP_F,
|
|
ANVN_SEX_2_PROP_P1_F,
|
|
ANVN_SEX_2_PROP_P2_F,
|
|
|
|
ANVN_PROP_2_SEX_P1_M,
|
|
ANVN_PROP_2_SEX_P2_M,
|
|
ANVN_SEX_LOOP_M,
|
|
ANVN_SEX_2_PROP_P1_M,
|
|
ANVN_SEX_2_PROP_P2_M,
|
|
|
|
|
|
//BJ-----------------------------------------------
|
|
|
|
ANVN_PROP_2_BJ_P1_F,
|
|
ANVN_PROP_2_BJ_P2_F,
|
|
ANVN_BJ_LOOP_F,
|
|
ANVN_BJ_2_PROP_P1_F,
|
|
ANVN_BJ_2_PROP_P2_F,
|
|
|
|
ANVN_PROP_2_BJ_P1_M,
|
|
ANVN_PROP_2_BJ_P2_M,
|
|
ANVN_BJ_LOOP_M,
|
|
ANVN_BJ_2_PROP_P1_M,
|
|
ANVN_BJ_2_PROP_P2_M,
|
|
|
|
ANVN_NUM_TOTAL
|
|
ENDENUM
|
|
|
|
FUNC STRING GET_ANIM_DICT_FOR_SEX_IN_NORM_VEHICLES()
|
|
return "mini@prostitutes@sexnorm_veh"
|
|
ENDFUNC
|
|
|
|
FUNC STRING GET_ANIM_DICT_FOR_SEX_IN_NORM_VEHICLES_FIRST_PERSON()
|
|
return "mini@prostitutes@sexnorm_veh_first_person"
|
|
//return "mini@prostitutes@sexnorm_veh"
|
|
ENDFUNC
|
|
|
|
FUNC STRING GET_ANIM_NAME_FOR_SEX_IN_NORM_VEHICLE(ANIM_NAME_VEHICLE_NORM eSexAnim)
|
|
STRING sAnimName
|
|
|
|
SWITCH eSexAnim
|
|
|
|
//PROPOSITION - Prostitute asks the male what he wants to do
|
|
CASE ANVN_PROP_INTRO_M sAnimName = "into_proposition_male" BREAK
|
|
CASE ANVN_PROP_INTRO_F sAnimName = "into_proposition_prostitute" BREAK
|
|
CASE ANVN_PROP_LOOP_M sAnimName = "proposition_loop_male" BREAK
|
|
CASE ANVN_PROP_LOOP_F sAnimName = "proposition_loop_prostitute" BREAK
|
|
CASE ANVN_PROP_OUTRO_M sAnimName = "proposition_to_exit_male" BREAK
|
|
CASE ANVN_PROP_OUTRO_F sAnimName = "prop_to_sit_alt_prostitute" BREAK
|
|
CASE ANVN_PROP_TO_SIT_M sAnimName = "prop_to_sit_male" BREAK
|
|
CASE ANVN_PROP_TO_SIT_F sAnimName = "prop_to_sit_prostitute" BREAK
|
|
|
|
|
|
//Sex=====================================================================
|
|
//Norm Car Variations -
|
|
CASE ANVN_PROP_2_SEX_P1_F sAnimName = "proposition_to_sex_p1_prostitute" BREAK
|
|
CASE ANVN_PROP_2_SEX_P2_F sAnimName = "proposition_to_sex_p2_prostitute" BREAK
|
|
CASE ANVN_SEX_LOOP_F sAnimName = "sex_loop_prostitute" BREAK
|
|
CASE ANVN_SEX_2_PROP_P1_F sAnimName = "sex_to_proposition_p1_prostitute" BREAK
|
|
CASE ANVN_SEX_2_PROP_P2_F sAnimName = "sex_to_proposition_p2_prostitute" BREAK
|
|
|
|
CASE ANVN_PROP_2_SEX_P1_M sAnimName = "proposition_to_sex_p1_male" BREAK
|
|
CASE ANVN_PROP_2_SEX_P2_M sAnimName = "proposition_to_sex_p2_male" BREAK
|
|
CASE ANVN_SEX_LOOP_M sAnimName = "sex_loop_male" BREAK
|
|
CASE ANVN_SEX_2_PROP_P1_M sAnimName = "sex_to_proposition_p1_male" BREAK
|
|
CASE ANVN_SEX_2_PROP_P2_M sAnimName = "sex_to_proposition_p2_male" BREAK
|
|
|
|
|
|
|
|
//BJs====================================================================
|
|
CASE ANVN_PROP_2_BJ_P1_F sAnimName = "proposition_to_BJ_p1_prostitute" BREAK
|
|
CASE ANVN_PROP_2_BJ_P2_F sAnimName = "proposition_to_BJ_p2_prostitute" BREAK
|
|
CASE ANVN_BJ_LOOP_F sAnimName = "BJ_loop_prostitute" BREAK
|
|
CASE ANVN_BJ_2_PROP_P1_F sAnimName = "BJ_to_proposition_p1_prostitute" BREAK
|
|
CASE ANVN_BJ_2_PROP_P2_F sAnimName = "BJ_to_proposition_p2_prostitute" BREAK
|
|
|
|
CASE ANVN_PROP_2_BJ_P1_M sAnimName = "proposition_to_BJ_p1_male" BREAK
|
|
CASE ANVN_PROP_2_BJ_P2_M sAnimName = "proposition_to_BJ_p2_male" BREAK
|
|
CASE ANVN_BJ_LOOP_M sAnimName = "BJ_loop_male" BREAK
|
|
CASE ANVN_BJ_2_PROP_P1_M sAnimName = "BJ_to_proposition_p1_male" BREAK
|
|
CASE ANVN_BJ_2_PROP_P2_M sAnimName = "BJ_to_proposition_p2_male" BREAK
|
|
|
|
DEFAULT sAnimName = "" BREAK
|
|
ENDSWITCH
|
|
|
|
RETURN sAnimName
|
|
ENDFUNC
|
|
|
|
ENUM ANIM_NAME_PROSTITUTE_IDLES
|
|
AN_PRO_I_INTRO = 0,
|
|
AN_PRO_I_IDLE_A,
|
|
AN_PRO_I_IDLE_B,
|
|
AN_PRO_I_IDLE_C,
|
|
AN_PRO_I_IDLE_WAIT,
|
|
|
|
AN_PRO_I_REJECT,
|
|
AN_PRO_I_REJECT_2_IDLE,
|
|
AN_PRO_I_REJECT_OUTRO,
|
|
AN_PRO_I_REJECT_LOOP_A,
|
|
AN_PRO_I_REJECT_LOOP_B,
|
|
AN_PRO_I_REJECT_LOOP_C,
|
|
|
|
AN_PRO_I_OUTRO
|
|
|
|
ENDENUM
|
|
|
|
FUNC STRING GET_ANIM_NAME_FOR_PROSTITUTE_IDLES(ANIM_NAME_PROSTITUTE_IDLES eProsAnim)
|
|
SWITCH eProsAnim
|
|
|
|
CASE AN_PRO_I_INTRO
|
|
RETURN "idle_intro"
|
|
BREAK
|
|
CASE AN_PRO_I_IDLE_A
|
|
RETURN "idle_a"
|
|
BREAK
|
|
CASE AN_PRO_I_IDLE_B
|
|
RETURN "idle_b"
|
|
BREAK
|
|
CASE AN_PRO_I_IDLE_C
|
|
RETURN "idle_c"
|
|
BREAK
|
|
// CASE AN_PRO_I_IDLE_D
|
|
// RETURN "idle_d"
|
|
// BREAK
|
|
CASE AN_PRO_I_IDLE_WAIT
|
|
RETURN "idle_wait"
|
|
BREAK
|
|
CASE AN_PRO_I_REJECT
|
|
RETURN "idle_reject"
|
|
BREAK
|
|
CASE AN_PRO_I_REJECT_LOOP_A
|
|
RETURN "idle_reject_loop_a"
|
|
BREAK
|
|
CASE AN_PRO_I_REJECT_LOOP_B
|
|
RETURN "idle_reject_loop_b"
|
|
BREAK
|
|
CASE AN_PRO_I_REJECT_LOOP_C
|
|
RETURN "idle_reject_loop_c"
|
|
BREAK
|
|
|
|
CASE AN_PRO_I_OUTRO
|
|
RETURN "idle_outro"
|
|
BREAK
|
|
|
|
CASE AN_PRO_I_REJECT_2_IDLE
|
|
RETURN "reject_2_idle"
|
|
BREAK
|
|
|
|
CASE AN_PRO_I_REJECT_OUTRO
|
|
RETURN "reject_outro"
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
RETURN ""
|
|
ENDFUNC
|
|
|
|
ENUM PROSTITUTE_PIMP_ANIM
|
|
PROSTITUTE_PIMP_MAIN = 0,
|
|
PROSTITUTE_PIMP_HOOKER,
|
|
PROSTTITUE_PIMP_CASH
|
|
ENDENUM
|
|
|
|
FUNC STRING GET_PROSTITUTE_PIMP_ANIM_DICT()
|
|
RETURN "mini@prostitutespimp_demands_money"
|
|
ENDFUNC
|
|
|
|
FUNC STRING GET_PROSTITUTE_PIMP_ANIM_TO_PLAY(PROSTITUTE_PIMP_ANIM eProsAnim)
|
|
SWITCH eProsAnim
|
|
|
|
CASE PROSTITUTE_PIMP_MAIN
|
|
RETURN "pimp_demands_money_pimp"
|
|
BREAK
|
|
CASE PROSTITUTE_PIMP_HOOKER
|
|
RETURN "pimp_demands_money_hooker"
|
|
BREAK
|
|
CASE PROSTTITUE_PIMP_CASH
|
|
RETURN "pimp_demands_money_cash"
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
RETURN ""
|
|
ENDFUNC
|
|
FUNC BOOL IS_VEHICLE_MODEL_SUITABLE_FOR_SEX(MODEL_NAMES this_VEHICLE_model, BOOL bExcludeLawVehicles = FALSE)
|
|
|
|
#IF ALLOW_ALL_CARS
|
|
RETURN TRUE
|
|
#ENDIF
|
|
|
|
IF IS_THIS_MODEL_A_BOAT (this_VEHICLE_model)
|
|
OR IS_THIS_MODEL_A_PLANE (this_VEHICLE_model)
|
|
OR IS_THIS_MODEL_A_HELI (this_VEHICLE_model)
|
|
OR IS_THIS_MODEL_A_TRAIN (this_VEHICLE_model)
|
|
OR IS_THIS_MODEL_A_BIKE (this_VEHICLE_model)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF IS_MODEL_POLICE_VEHICLE(this_VEHICLE_model)
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
IF NOT bExcludeLawVehicles
|
|
IF this_VEHICLE_model = POLICE
|
|
OR this_VEHICLE_model = POLICE2
|
|
OR this_VEHICLE_model = POLICE3
|
|
OR this_VEHICLE_model = POLICE4
|
|
OR this_VEHICLE_model = FBI
|
|
OR this_VEHICLE_model = FBI2
|
|
OR this_VEHICLE_model = CADDY
|
|
OR this_VEHICLE_model = CADDY2
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//Vehicles that are too cramped
|
|
IF this_VEHICLE_model = ISSI2
|
|
OR this_VEHICLE_model = HOTKNIFE
|
|
OR this_VEHICLE_model = JB700
|
|
OR ENUM_TO_INT(this_VEHICLE_model) = HASH("jester")
|
|
OR ENUM_TO_INT(this_VEHICLE_model) = HASH("jester2")
|
|
OR this_VEHICLE_model = STROMBERG
|
|
OR this_VEHICLE_model = BARRAGE
|
|
OR ENUM_TO_INT(this_VEHICLE_model) = HASH("kamacho")
|
|
//mpAssault
|
|
OR this_VEHICLE_model = GB200
|
|
OR this_VEHICLE_model = FAGALOA
|
|
OR this_VEHICLE_model = TEZERACT
|
|
|
|
//mpBattle
|
|
OR this_VEHICLE_model = SWINGER
|
|
|
|
//mpArena_Wars
|
|
OR ENUM_TO_INT(this_VEHICLE_model) = HASH("imperator")
|
|
|
|
//mpVinewood
|
|
OR this_VEHICLE_model = LOCUST
|
|
OR this_VEHICLE_model = SCHLAGEN
|
|
OR this_VEHICLE_model = OUTLAW
|
|
|
|
//mpFixer
|
|
OR this_VEHICLE_model = COMET7
|
|
OR this_VEHICLE_model = YOUGA4
|
|
|
|
//mpSum2
|
|
OR this_VEHICLE_model = SM722
|
|
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_VEHICLE_LAYOUT_VALID_FOR_SEX(VEHICLE_INDEX vehicle)
|
|
|
|
#IF ALLOW_ALL_CARS
|
|
RETURN TRUE
|
|
#ENDIF
|
|
|
|
IF IS_VEHICLE_DRIVEABLE(vehicle)
|
|
IF GET_NUM_MOD_KITS(vehicle) > 0
|
|
INT i
|
|
MOD_TYPE eMod
|
|
INT iLabelHash
|
|
TEXT_LABEL_15 tlModLabel
|
|
|
|
REPEAT MAX_VEHICLE_MOD_SLOTS i
|
|
|
|
eMod = INT_TO_ENUM(MOD_TYPE, i)
|
|
|
|
// Toggle mods
|
|
IF eMod <> MOD_TOGGLE_NITROUS
|
|
AND eMod <> MOD_TOGGLE_TURBO
|
|
AND eMod <> MOD_TOGGLE_SUBWOOFER
|
|
AND eMod <> MOD_TOGGLE_TYRE_SMOKE
|
|
AND eMod <> MOD_TOGGLE_HYDRAULICS
|
|
AND eMod <> MOD_TOGGLE_XENON_LIGHTS
|
|
IF GET_VEHICLE_MOD(vehicle, eMod) != -1
|
|
tlModLabel = GET_MOD_TEXT_LABEL(vehicle, eMod, GET_VEHICLE_MOD(vehicle, eMod))
|
|
iLabelHash = GET_HASH_KEY(tlModLabel)
|
|
IF iLabelHash != 0
|
|
IF iLabelHash = GET_HASH_KEY("SABRE_CAG")
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
ENDIF
|
|
|
|
SWITCH GET_ENTITY_MODEL(vehicle)
|
|
CASE PEYOTE2
|
|
IF !IS_VEHICLE_EXTRA_TURNED_ON(vehicle, 2)
|
|
AND !IS_VEHICLE_EXTRA_TURNED_ON(vehicle, 3)
|
|
AND !IS_VEHICLE_EXTRA_TURNED_ON(vehicle, 4)
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
CASE PEYOTE3
|
|
IF !IS_VEHICLE_EXTRA_TURNED_ON(vehicle, 2)
|
|
AND !IS_VEHICLE_EXTRA_TURNED_ON(vehicle, 3)
|
|
AND !IS_VEHICLE_EXTRA_TURNED_ON(vehicle, 4)
|
|
AND !IS_VEHICLE_EXTRA_TURNED_ON(vehicle, 1)
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
CASE COQUETTE4
|
|
IF !IS_VEHICLE_EXTRA_TURNED_ON(vehicle, 1)
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
CASE ZORRUSSO
|
|
IF GET_VEHICLE_MOD(vehicle, MOD_ROOF) = -1
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
CASE MANANA2
|
|
IF IS_VEHICLE_EXTRA_TURNED_ON(vehicle, 1)
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
CASE RT3000
|
|
IF GET_VEHICLE_MOD(vehicle, MOD_ROOF) = -1 OR GET_VEHICLE_MOD(vehicle, MOD_ROOF) = 3
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
SWITCH GET_VEHICLE_LAYOUT_HASH(vehicle)
|
|
|
|
CASE HASH("LAYOUT_LOW")
|
|
CASE HASH("LAYOUT_LOW_CHEETAH")
|
|
CASE HASH("LAYOUT_LOW_INFERNUS")
|
|
CASE HASH("LAYOUT_LOW_RESTRICTED")
|
|
CASE HASH("LAYOUT_LOW_SENTINEL2")
|
|
CASE HASH("LAYOUT_STANDARD")
|
|
CASE HASH("LAYOUT_STD_EXITFIXUP")
|
|
CASE HASH("LAYOUT_STD_HABANERO")
|
|
CASE HASH("LAYOUT_STD_STRETCH")
|
|
CASE HASH("LAYOUT_STD_HIGHWINDOW")
|
|
CASE HASH("LAYOUT_RANGER")
|
|
CASE HASH("LAYOUT_RANGER_SWAT")
|
|
CASE HASH("LAYOUT_4X4")
|
|
CASE HASH("LAYOUT_BISON")
|
|
CASE HASH("LAYOUT_VAN_BODHI")
|
|
CASE HASH("LAYOUT_STD_LOWROOF")
|
|
CASE HASH("LAYOUT_STD_STRATUM")
|
|
CASE HASH("LAYOUT_VAN_ROOSEVELT")
|
|
CASE HASH("LAYOUT_STD_HUNTLEY")
|
|
CASE HASH("LAYOUT_STD_WARRENER")
|
|
CASE HASH("LAYOUT_LOW_BLADE")
|
|
CASE HASH("LAYOUT_LOW_FURORE")
|
|
CASE HASH("LAYOUT_STD_KURUMA")
|
|
CASE HASH("LAYOUT_STD_BLISTA2")
|
|
CASE HASH("LAYOUT_STD_CHINO")
|
|
CASE HASH("LAYOUT_LOW_OSIRIS")
|
|
CASE HASH("LAYOUT_LOW_FELTZER3")
|
|
CASE HASH("LAYOUT_LOW_LOWRIDER")
|
|
CASE HASH("LAYOUT_LOW_LOWRIDER_FACTION")
|
|
CASE HASH("LAYOUT_STD_LOWRIDER")
|
|
CASE HASH("LAYOUT_STD_LOWRIDER_CHINO")
|
|
CASE HASH("LAYOUT_STD_LOWRIDER_SIDEDOOR")
|
|
CASE HASH("LAYOUT_LOW_VERLIERER")
|
|
CASE HASH("LAYOUT_STD_BALLER4")
|
|
CASE HASH("LAYOUT_LOW_LOWRIDER2")
|
|
CASE HASH("LAYOUT_LOW_LOWRIDER2_FACTION3")
|
|
CASE HASH("LAYOUT_STD_LOWRIDER2")
|
|
CASE HASH("LAYOUT_STD_LOWRIDER2_SIDEDOOR")
|
|
CASE HASH("LAYOUT_STD_LOWRIDER2_SLAMVAN")
|
|
CASE HASH("LAYOUT_STD_WINDSOR2")
|
|
CASE HASH("LAYOUT_STD_XLS")
|
|
CASE HASH("LAYOUT_LOW_LE7B")
|
|
CASE HASH("LAYOUT_STD_OMNIS")
|
|
CASE HASH("LAYOUT_LOW_RUINER2")
|
|
CASE HASH("LAYOUT_LOW_INFERNUS2")
|
|
CASE HASH("LAYOUT_LOW_TORERO")
|
|
CASE HASH("LAYOUT_LOW_SC1")
|
|
CASE HASH("LAYOUT_STD_NEON")
|
|
//mpAssault
|
|
CASE HASH("LAYOUT_LOW_MICHELLI")
|
|
CASE HASH("LAYOUT_LOW_TEZERACT")
|
|
CASE HASH("LAYOUT_LOW_DOMINATOR3")
|
|
CASE HASH("LAYOUT_LOW_TAIPAN")
|
|
|
|
//mpChristmas2018
|
|
CASE HASH("LAYOUT_LOW_ITALIGTO")
|
|
CASE HASH("LAYOUT_LOW_RESTRICTED_SCHLAGEN")
|
|
CASE HASH("LAYOUT_RANGER_TOROS")
|
|
CASE HASH("LAYOUT_STD_DEVIANT")
|
|
|
|
//mpVinewood
|
|
CASE HASH("LAYOUT_STD_DRAFTER")
|
|
CASE HASH("LAYOUT_STD_DYNASTY")
|
|
CASE HASH("LAYOUT_STD_PARAGON")
|
|
CASE HASH("LAYOUT_STD_ZION3")
|
|
CASE HASH("LAYOUT_LOW_RESTRICTED_GAUNTLET3")
|
|
CASE HASH("LAYOUT_LOW_PEYOTE2")
|
|
CASE HASH("LAYOUT_LOW_NEO")
|
|
CASE HASH("LAYOUT_RANGER_NOVAK")
|
|
|
|
//mpHeist3
|
|
CASE HASH("LAYOUT_RANGER_EVERON")
|
|
|
|
//mpSum
|
|
CASE HASH("LAYOUT_LOW_PEYOTE3")
|
|
CASE HASH("LAYOUT_RANGER_SEMINOLE2")
|
|
|
|
//mpTuner
|
|
CASE HASH("LAYOUT_LOW_CALICO")
|
|
CASE HASH("LAYOUT_STD_CYPHER")
|
|
CASE HASH("LAYOUT_LOW_RESTRICTED_DOMINATOR8")
|
|
CASE HASH("LAYOUT_LOW_RESTRICTED_EUROS")
|
|
CASE HASH("LAYOUT_LOW_RESTRICTED_RT3000")
|
|
CASE HASH("LAYOUT_STANDARD_SULTAN3")
|
|
CASE HASH("LAYOUT_STD_WARRENER2")
|
|
CASE HASH("LAYOUT_LOW_ZR350")
|
|
|
|
//mpFixer
|
|
CASE HASH("LAYOUT_LOW_IGNUS")
|
|
CASE HASH("LAYOUT_STANDARD_BUFFALO4")
|
|
CASE HASH("LAYOUT_STD_ASTRON")
|
|
CASE HASH("LAYOUT_STD_CINQUEMILA")
|
|
CASE HASH("LAYOUT_STD_DEITY")
|
|
CASE HASH("LAYOUT_STD_GRANGER2")
|
|
CASE HASH("LAYOUT_STD_I-WAGEN")
|
|
CASE HASH("LAYOUT_LOW_ZENO")
|
|
|
|
//mpG9EC
|
|
CASE HASH("LAYOUT_STD_S95")
|
|
|
|
//mpSum2
|
|
CASE HASH("LAYOUT_LOW_RESTRICTED_POSTLUDE")
|
|
CASE HASH("LAYOUT_LOW_RESTRICTED_TENF2")
|
|
CASE HASH("LAYOUT_LOW_CORSITA")
|
|
CASE HASH("LAYOUT_STD_RHINEHART")
|
|
CASE HASH("LAYOUT_STANDARD_SENTINEL4")
|
|
CASE HASH("LAYOUT_LOW_TORERO2")
|
|
CASE HASH("LAYOUT_STD_GREENWOOD")
|
|
RETURN TRUE
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
//B* - 2151010, allow slamvan, but not ripley layout
|
|
IF GET_VEHICLE_LAYOUT_HASH(vehicle) = HASH("LAYOUT_STD_RIPLEY")
|
|
AND GET_ENTITY_MODEL(vehicle) = SLAMVAN
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
//B* - 6733643, allow weevil and brioso2, but not issi3 layout
|
|
IF GET_VEHICLE_LAYOUT_HASH(vehicle) = HASH("LAYOUT_STD_ISSI3")
|
|
AND GET_ENTITY_MODEL(vehicle) = WEEVIL
|
|
OR GET_ENTITY_MODEL(vehicle) = BRIOSO2
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
#IF FEATURE_DLC_1_2022
|
|
IF GET_VEHICLE_LAYOUT_HASH(vehicle) = HASH("LAYOUT_STD_ISSI3")
|
|
AND GET_ENTITY_MODEL(vehicle) = INT_TO_ENUM(MODEL_NAMES, HASH("BRIOSO3"))
|
|
RETURN TRUE
|
|
ENDIF
|
|
#ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_VEHICLE_LOW_FOR_SEX(VEHICLE_INDEX vehicle)
|
|
IF IS_VEHICLE_DRIVEABLE(vehicle)
|
|
|
|
//VEHICLE_LAYOUT_TYPE LayoutHash = INT_TO_ENUM(VEHICLE_LAYOUT_TYPE, GET_VEHICLE_LAYOUT_HASH(vehicle))
|
|
|
|
|
|
SWITCH GET_VEHICLE_LAYOUT_HASH(vehicle)
|
|
|
|
CASE HASH("LAYOUT_LOW")
|
|
CASE HASH("LAYOUT_LOW_ENTITYXF")
|
|
CASE HASH("LAYOUT_LOW_CHEETAH")
|
|
CASE HASH("LAYOUT_LOW_INFERNUS")
|
|
// CASE HASH("LAYOUT_STD_ZTYPE")
|
|
CASE HASH("LAYOUT_LOW_RESTRICTED")
|
|
CASE HASH("LAYOUT_LOW_SENTINEL2")
|
|
CASE HASH("LAYOUT_LOW_FURORE")
|
|
CASE HASH("LAYOUT_LOW_OSIRIS")
|
|
CASE HASH("LAYOUT_LOW_FELTZER3")
|
|
CASE HASH("LAYOUT_LOW_LOWRIDER")
|
|
CASE HASH("LAYOUT_LOW_LOWRIDER_FACTION")
|
|
CASE HASH("LAYOUT_LOW_VERLIERER")
|
|
CASE HASH("LAYOUT_LOW_LOWRIDER2")
|
|
CASE HASH("LAYOUT_LOW_LOWRIDER2_FACTION3")
|
|
CASE HASH("LAYOUT_LOW_LE7B")
|
|
CASE HASH("LAYOUT_LOW_RUINER2")
|
|
CASE HASH("LAYOUT_LOW_INFERNUS2")
|
|
CASE HASH("LAYOUT_LOW_SC1")
|
|
//mpAssault
|
|
CASE HASH("LAYOUT_LOW_MICHELLI")
|
|
CASE HASH("LAYOUT_LOW_TEZERACT")
|
|
CASE HASH("LAYOUT_LOW_DOMINATOR3")
|
|
CASE HASH("LAYOUT_LOW_TAIPAN")
|
|
|
|
//mpChristmas2018
|
|
CASE HASH("LAYOUT_LOW_ITALIGTO")
|
|
CASE HASH("LAYOUT_LOW_RESTRICTED_SCHLAGEN")
|
|
|
|
//Vinewood
|
|
CASE HASH("LAYOUT_LOW_RESTRICTED_GAUNTLET3")
|
|
CASE HASH("LAYOUT_LOW_PEYOTE2")
|
|
CASE HASH("LAYOUT_LOW_NEO")
|
|
|
|
//mpSum
|
|
CASE HASH("LAYOUT_LOW_PEYOTE3")
|
|
|
|
//mpTuner
|
|
CASE HASH("LAYOUT_LOW_CALICO")
|
|
CASE HASH("LAYOUT_LOW_RESTRICTED_DOMINATOR8")
|
|
CASE HASH("LAYOUT_LOW_RESTRICTED_EUROS")
|
|
CASE HASH("LAYOUT_LOW_RESTRICTED_RT3000")
|
|
CASE HASH("LAYOUT_LOW_ZR350")
|
|
|
|
//mpFixer
|
|
CASE HASH("LAYOUT_LOW_IGNUS")
|
|
CASE HASH("LAYOUT_LOW_ZENO")
|
|
|
|
//mpSum2
|
|
CASE HASH("LAYOUT_LOW_RESTRICTED_POSTLUDE")
|
|
CASE HASH("LAYOUT_LOW_RESTRICTED_TENF2")
|
|
CASE HASH("LAYOUT_LOW_CORSITA")
|
|
RETURN TRUE
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
/// PURPOSE: to properly set the hooker into the vehicle context per B*1525901
|
|
FUNC BOOL DOES_VEHICLE_USE_LOW_RESTRICTED_VEHICLE_CONTEXT(VEHICLE_INDEX vehicle)
|
|
IF IS_VEHICLE_DRIVEABLE(vehicle)
|
|
SWITCH GET_VEHICLE_LAYOUT_HASH(vehicle)
|
|
CASE HASH("LAYOUT_LOW_INFERNUS")
|
|
CASE HASH("LAYOUT_LOW_RESTRICTED")
|
|
CASE HASH("LAYOUT_LOW_OSIRIS")
|
|
CASE HASH("LAYOUT_LOW_FELTZER3")
|
|
CASE HASH("LAYOUT_LOW_VERLIERER")
|
|
CASE HASH("LAYOUT_LOW_RUINER2")
|
|
CASE HASH("LAYOUT_LOW_TORERO")
|
|
//mpAssault
|
|
CASE HASH("LAYOUT_LOW_MICHELLI")
|
|
|
|
//Vinewood
|
|
CASE HASH("LAYOUT_LOW_RESTRICTED_GAUNTLET3")
|
|
|
|
//mpTuner
|
|
CASE HASH("LAYOUT_LOW_RESTRICTED_DOMINATOR8")
|
|
CASE HASH("LAYOUT_LOW_RESTRICTED_EUROS")
|
|
CASE HASH("LAYOUT_LOW_RESTRICTED_RT3000")
|
|
|
|
//mpSum2
|
|
CASE HASH("LAYOUT_LOW_RESTRICTED_POSTLUDE")
|
|
CASE HASH("LAYOUT_LOW_RESTRICTED_TENF2")
|
|
CASE HASH("LAYOUT_LOW_CORSITA")
|
|
CASE HASH("LAYOUT_LOW_TORERO2")
|
|
RETURN TRUE
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL DOES_VEHICLE_USE_LOW_RESTRICTED_NOAMBIENT_VEHICLE_CONTEXT(VEHICLE_INDEX vehicle)
|
|
IF IS_VEHICLE_DRIVEABLE(vehicle)
|
|
SWITCH GET_VEHICLE_LAYOUT_HASH(vehicle)
|
|
CASE HASH("LAYOUT_LOW_CHEETAH")
|
|
CASE HASH("LAYOUT_LOW_ENTITYXF")
|
|
CASE HASH("LAYOUT_LOW_LE7B")
|
|
RETURN TRUE
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
FUNC BOOL DOES_VEHICLE_USE_LOW_LOWRIDER_VEHICLE_CONTEXT(VEHICLE_INDEX vehicle)
|
|
IF IS_VEHICLE_DRIVEABLE(vehicle)
|
|
SWITCH GET_VEHICLE_LAYOUT_HASH(vehicle)
|
|
CASE HASH("LAYOUT_LOW_LOWRIDER")
|
|
CASE HASH("LAYOUT_LOW_LOWRIDER_FACTION")
|
|
RETURN TRUE
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL DOES_VEHICLE_USE_LOW_LOWRIDER2_VEHICLE_CONTEXT(VEHICLE_INDEX vehicle)
|
|
IF IS_VEHICLE_DRIVEABLE(vehicle)
|
|
SWITCH GET_VEHICLE_LAYOUT_HASH(vehicle)
|
|
CASE HASH("LAYOUT_LOW_LOWRIDER2")
|
|
CASE HASH("LAYOUT_LOW_LOWRIDER2_FACTION3")
|
|
RETURN TRUE
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL DOES_VEHICLE_USE_LOW_INFERNUS2_VEHICLE_CONTEXT(VEHICLE_INDEX vehicle)
|
|
IF IS_VEHICLE_DRIVEABLE(vehicle)
|
|
SWITCH GET_VEHICLE_LAYOUT_HASH(vehicle)
|
|
CASE HASH("LAYOUT_LOW_INFERNUS2")
|
|
RETURN TRUE
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL DOES_VEHICLE_USE_LOW_SC1_VEHICLE_CONTEXT(VEHICLE_INDEX vehicle)
|
|
IF IS_VEHICLE_DRIVEABLE(vehicle)
|
|
SWITCH GET_VEHICLE_LAYOUT_HASH(vehicle)
|
|
CASE HASH("LAYOUT_LOW_SC1")
|
|
RETURN TRUE
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL DOES_VEHICLE_USE_LOW_TEZERACT_VEHICLE_CONTEXT(VEHICLE_INDEX vehicle)
|
|
IF IS_VEHICLE_DRIVEABLE(vehicle)
|
|
SWITCH GET_VEHICLE_LAYOUT_HASH(vehicle)
|
|
CASE HASH("LAYOUT_LOW_TEZERACT")
|
|
CASE HASH("LAYOUT_LOW_TAIPAN")
|
|
RETURN TRUE
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL DOES_VEHICLE_USE_LOW_DOMINATOR3_VEHICLE_CONTEXT(VEHICLE_INDEX vehicle)
|
|
IF IS_VEHICLE_DRIVEABLE(vehicle)
|
|
SWITCH GET_VEHICLE_LAYOUT_HASH(vehicle)
|
|
CASE HASH("LAYOUT_LOW_DOMINATOR3")
|
|
RETURN TRUE
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL DOES_VEHICLE_USE_LOW_ITALIGTO_VEHICLE_CONTEXT(VEHICLE_INDEX vehicle)
|
|
IF IS_VEHICLE_DRIVEABLE(vehicle)
|
|
SWITCH GET_VEHICLE_LAYOUT_HASH(vehicle)
|
|
CASE HASH("LAYOUT_LOW_ITALIGTO")
|
|
RETURN TRUE
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL DOES_VEHICLE_USE_LOW_RESTRICTED_SCHLAGEN_VEHICLE_CONTEXT(VEHICLE_INDEX vehicle)
|
|
IF IS_VEHICLE_DRIVEABLE(vehicle)
|
|
SWITCH GET_VEHICLE_LAYOUT_HASH(vehicle)
|
|
CASE HASH("LAYOUT_LOW_RESTRICTED_SCHLAGEN")
|
|
RETURN TRUE
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL DOES_VEHICLE_USE_LOW_NEO_VEHICLE_CONTEXT(VEHICLE_INDEX vehicle)
|
|
IF IS_VEHICLE_DRIVEABLE(vehicle)
|
|
SWITCH GET_VEHICLE_LAYOUT_HASH(vehicle)
|
|
CASE HASH("LAYOUT_LOW_NEO")
|
|
RETURN TRUE
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL DOES_VEHICLE_USE_LOW_PEYOTE2_VEHICLE_CONTEXT(VEHICLE_INDEX vehicle)
|
|
IF IS_VEHICLE_DRIVEABLE(vehicle)
|
|
SWITCH GET_VEHICLE_LAYOUT_HASH(vehicle)
|
|
CASE HASH("LAYOUT_LOW_PEYOTE2")
|
|
RETURN TRUE
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL DOES_VEHICLE_USE_LOW_ZR350_VEHICLE_CONTEXT(VEHICLE_INDEX vehicle)
|
|
IF IS_VEHICLE_DRIVEABLE(vehicle)
|
|
SWITCH GET_VEHICLE_LAYOUT_HASH(vehicle)
|
|
CASE HASH("LAYOUT_LOW_ZR350")
|
|
RETURN TRUE
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL DOES_VEHICLE_USE_LOW_IGNUS_VEHICLE_CONTEXT(VEHICLE_INDEX vehicle)
|
|
IF IS_VEHICLE_DRIVEABLE(vehicle)
|
|
SWITCH GET_VEHICLE_LAYOUT_HASH(vehicle)
|
|
CASE HASH("LAYOUT_LOW_IGNUS")
|
|
RETURN TRUE
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
FUNC BOOL DOES_VEHICLE_USE_LOW_ZENO_VEHICLE_CONTEXT(VEHICLE_INDEX vehicle)
|
|
IF IS_VEHICLE_DRIVEABLE(vehicle)
|
|
SWITCH GET_VEHICLE_LAYOUT_HASH(vehicle)
|
|
CASE HASH("LAYOUT_LOW_ZENO")
|
|
RETURN TRUE
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
//Use this to determine if the player can only get a BJ in this vehicle
|
|
FUNC BOOL CAN_HAVE_SEX_IN_THIS_VEHICLE_MODEL(VEHICLE_INDEX vehicle)
|
|
IF IS_VEHICLE_DRIVEABLE(vehicle)
|
|
|
|
MODEL_NAMES mVehicle = GET_ENTITY_MODEL(vehicle)
|
|
|
|
IF mVehicle = INFERNUS
|
|
OR mVehicle = VOLTIC
|
|
OR mVehicle = STINGERGT
|
|
OR mVehicle = STINGER
|
|
OR mVehicle = BULLET
|
|
OR mVehicle = ENTITYXF
|
|
OR mVehicle = FELTZER3
|
|
OR mVehicle = GRANGER
|
|
OR mVehicle = PANTO
|
|
OR mVehicle = PHOENIX
|
|
OR mVehicle = FMJ
|
|
OR mVehicle = REAPER
|
|
OR mVehicle = LE7B
|
|
OR mVehicle = TYRUS
|
|
OR mVehicle = INFERNUS2
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
ENDFUNC
|
|
|
|
|
|
FUNC BOOL IS_ANY_FIRST_PERSON_CAM_ACTIVE(BOOL bCheckOnFoot = TRUE, BOOL bCheckInCar = TRUE)
|
|
|
|
BOOL bIsFirstPersonCamActive = FALSE
|
|
|
|
IF bCheckOnFoot
|
|
bIsFirstPersonCamActive = (GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_ON_FOOT) = CAM_VIEW_MODE_FIRST_PERSON)
|
|
ENDIF
|
|
|
|
IF bCheckInCar
|
|
IF NOT bIsFirstPersonCamActive
|
|
bIsFirstPersonCamActive = (GET_CAM_VIEW_MODE_FOR_CONTEXT(CAM_VIEW_MODE_CONTEXT_IN_VEHICLE) = CAM_VIEW_MODE_FIRST_PERSON)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN bIsFirstPersonCamActive
|
|
|
|
ENDFUNC
|
|
|
|
FUNC STRING GET_ANIM_DICT_FOR_SEX_FOR_THIS_VEHICLE(VEHICLE_INDEX this_VEHICLE)
|
|
IF DOES_ENTITY_EXIST(this_VEHICLE)
|
|
IF IS_VEHICLE_LOW_FOR_SEX(this_VEHICLE)
|
|
RETURN GET_ANIM_DICT_FOR_SEX_IN_LOW_VEHICLES()
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN GET_ANIM_DICT_FOR_SEX_IN_NORM_VEHICLES()
|
|
|
|
ENDFUNC
|
|
|
|
FUNC STRING GET_ANIM_DICT_FOR_SEX_FOR_VEHICLE_PED_IS_IN(PED_INDEX pedHooker, BOOL bForceGetFPAnimDict = FALSE, BOOL bForceGet3rdPAnimDict = FALSE)
|
|
|
|
IF NOT IS_ENTITY_DEAD(pedHooker)
|
|
VEHICLE_INDEX vehiclePedIsIn
|
|
|
|
vehiclePedIsIn = GET_VEHICLE_PED_IS_IN(pedHooker,TRUE)
|
|
|
|
IF IS_VEHICLE_DRIVEABLE(vehiclePedIsIn)
|
|
|
|
IF IS_VEHICLE_LOW_FOR_SEX(vehiclePedIsIn)
|
|
IF (NOT IS_ANY_FIRST_PERSON_CAM_ACTIVE(FALSE) OR bForceGet3rdPAnimDict)
|
|
AND NOT bForceGetFPAnimDict
|
|
RETURN GET_ANIM_DICT_FOR_SEX_IN_LOW_VEHICLES()
|
|
ELSE
|
|
RETURN GET_ANIM_DICT_FOR_SEX_IN_LOW_VEHICLES_FIRST_PERSON()
|
|
ENDIF
|
|
ELIF GET_ENTITY_MODEL(vehiclePedIsIn) = VSTR
|
|
RETURN "anim@mini@prostitutes@sex@veh_vstr@"
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF (NOT IS_ANY_FIRST_PERSON_CAM_ACTIVE(FALSE) OR bForceGet3rdPAnimDict)
|
|
AND NOT bForceGetFPAnimDict
|
|
RETURN GET_ANIM_DICT_FOR_SEX_IN_NORM_VEHICLES()
|
|
ELSE
|
|
RETURN GET_ANIM_DICT_FOR_SEX_IN_NORM_VEHICLES_FIRST_PERSON()
|
|
ENDIF
|
|
ENDFUNC
|
|
|
|
|
|
FUNC STRING GET_ANIM_NAME_FOR_SEX_STATE(SEX_STATE_ENUM eSexState, BOOL bIsPedHooker = FALSE, BOOL bIsBlowJob = FALSE, BOOL bIsPedInLowVehicle = FALSE)
|
|
|
|
STRING sSexAnimName = ""
|
|
SWITCH eSexState
|
|
|
|
CASE SEX_PROP_TO_ACTION_P1
|
|
|
|
IF bIsPedInLowVehicle
|
|
|
|
IF bIsBlowJob
|
|
|
|
IF bIsPedHooker
|
|
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_LOW_VEHICLE(ANVL_PROP_2_BJ_P1_F)
|
|
ELSE
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_LOW_VEHICLE(ANVL_PROP_2_BJ_P1_M)
|
|
ENDIF
|
|
|
|
//It's SEX
|
|
ELSE
|
|
IF bIsPedHooker
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_LOW_VEHICLE(ANVL_PROP_2_SEX_P1_F)
|
|
ELSE
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_LOW_VEHICLE(ANVL_PROP_2_SEX_P1_M)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//Normal Vehicle
|
|
ELSE
|
|
IF bIsBlowJob
|
|
|
|
IF bIsPedHooker
|
|
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_NORM_VEHICLE(ANVN_PROP_2_BJ_P1_F)
|
|
ELSE
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_NORM_VEHICLE(ANVN_PROP_2_BJ_P1_M)
|
|
ENDIF
|
|
|
|
//It's SEX
|
|
ELSE
|
|
IF bIsPedHooker
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_NORM_VEHICLE(ANVN_PROP_2_SEX_P1_F)
|
|
ELSE
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_NORM_VEHICLE(ANVN_PROP_2_SEX_P1_M)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE SEX_PROP_TO_ACTION_P2
|
|
IF bIsPedInLowVehicle
|
|
|
|
IF bIsBlowJob
|
|
|
|
IF bIsPedHooker
|
|
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_LOW_VEHICLE(ANVL_PROP_2_BJ_P2_F)
|
|
ELSE
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_LOW_VEHICLE(ANVL_PROP_2_BJ_P2_M)
|
|
ENDIF
|
|
|
|
//It's SEX
|
|
ELSE
|
|
IF bIsPedHooker
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_LOW_VEHICLE(ANVL_PROP_2_SEX_P2_F)
|
|
ELSE
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_LOW_VEHICLE(ANVL_PROP_2_SEX_P2_M)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//Normal Vehicle - P2 doesn't exist yet************
|
|
ELSE
|
|
IF bIsBlowJob
|
|
|
|
IF bIsPedHooker
|
|
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_NORM_VEHICLE(ANVN_PROP_2_BJ_P2_F)
|
|
ELSE
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_NORM_VEHICLE(ANVN_PROP_2_BJ_P2_M)
|
|
ENDIF
|
|
|
|
//It's SEX
|
|
ELSE
|
|
IF bIsPedHooker
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_NORM_VEHICLE(ANVN_PROP_2_SEX_P2_F)
|
|
ELSE
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_NORM_VEHICLE(ANVN_PROP_2_SEX_P2_M)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE SEX_ACTION_LOOP
|
|
IF bIsPedInLowVehicle
|
|
|
|
IF bIsBlowJob
|
|
|
|
IF bIsPedHooker
|
|
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_LOW_VEHICLE(ANVL_BJ_LOOP_F)
|
|
ELSE
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_LOW_VEHICLE(ANVL_BJ_LOOP_M)
|
|
ENDIF
|
|
|
|
//It's SEX
|
|
ELSE
|
|
IF bIsPedHooker
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_LOW_VEHICLE(ANVL_SEX_LOOP_F)
|
|
ELSE
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_LOW_VEHICLE(ANVL_SEX_LOOP_M)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//Normal Vehicle
|
|
ELSE
|
|
IF bIsBlowJob
|
|
|
|
IF bIsPedHooker
|
|
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_NORM_VEHICLE(ANVN_BJ_LOOP_F)
|
|
ELSE
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_NORM_VEHICLE(ANVN_BJ_LOOP_M)
|
|
ENDIF
|
|
|
|
//It's SEX
|
|
ELSE
|
|
IF bIsPedHooker
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_NORM_VEHICLE(ANVN_SEX_LOOP_F)
|
|
ELSE
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_NORM_VEHICLE(ANVN_SEX_LOOP_M)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE SEX_ACTION_TO_PROP_P1
|
|
IF bIsPedInLowVehicle
|
|
|
|
IF bIsBlowJob
|
|
|
|
IF bIsPedHooker
|
|
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_LOW_VEHICLE(ANVL_BJ_2_PROP_P1_F)
|
|
ELSE
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_LOW_VEHICLE(ANVL_BJ_2_PROP_P1_M)
|
|
ENDIF
|
|
|
|
//It's SEX
|
|
ELSE
|
|
IF bIsPedHooker
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_LOW_VEHICLE(ANVL_SEX_2_PROP_P1_F)
|
|
ELSE
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_LOW_VEHICLE(ANVL_SEX_2_PROP_P1_M)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//Normal Vehicle
|
|
ELSE
|
|
|
|
|
|
IF bIsBlowJob
|
|
|
|
IF bIsPedHooker
|
|
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_NORM_VEHICLE(ANVN_BJ_2_PROP_P1_F)
|
|
ELSE
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_NORM_VEHICLE(ANVN_BJ_2_PROP_P1_M)
|
|
ENDIF
|
|
|
|
//It's SEX
|
|
ELSE
|
|
IF bIsPedHooker
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_NORM_VEHICLE(ANVN_SEX_2_PROP_P1_F)
|
|
ELSE
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_NORM_VEHICLE(ANVN_SEX_2_PROP_P1_M)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE SEX_ACTION_TO_PROP_P2
|
|
IF bIsPedInLowVehicle
|
|
|
|
IF bIsBlowJob
|
|
|
|
IF bIsPedHooker
|
|
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_LOW_VEHICLE(ANVL_BJ_2_PROP_P2_F)
|
|
ELSE
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_LOW_VEHICLE(ANVL_BJ_2_PROP_P2_M)
|
|
ENDIF
|
|
|
|
//It's SEX
|
|
ELSE
|
|
IF bIsPedHooker
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_LOW_VEHICLE(ANVL_SEX_2_PROP_P2_F)
|
|
ELSE
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_LOW_VEHICLE(ANVL_SEX_2_PROP_P2_M)
|
|
ENDIF
|
|
ENDIF
|
|
|
|
//Normal Vehicle - P2 doesn't exist yet************
|
|
ELSE
|
|
|
|
IF bIsBlowJob
|
|
|
|
IF bIsPedHooker
|
|
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_NORM_VEHICLE(ANVN_BJ_2_PROP_P2_F)
|
|
ELSE
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_NORM_VEHICLE(ANVN_BJ_2_PROP_P2_M)
|
|
ENDIF
|
|
|
|
//It's SEX
|
|
ELSE
|
|
IF bIsPedHooker
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_NORM_VEHICLE(ANVN_SEX_2_PROP_P2_F)
|
|
ELSE
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_NORM_VEHICLE(ANVN_SEX_2_PROP_P2_M)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
CASE SEX_PROP_LOOP
|
|
IF bIsPedInLowVehicle
|
|
IF bIsPedHooker
|
|
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_LOW_VEHICLE(ANVL_PROP_LOOP_F)
|
|
ELSE
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_LOW_VEHICLE(ANVL_PROP_LOOP_M)
|
|
ENDIF
|
|
|
|
|
|
//Normal Vehicle
|
|
ELSE
|
|
IF bIsPedHooker
|
|
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_NORM_VEHICLE(ANVN_PROP_LOOP_F)
|
|
ELSE
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_NORM_VEHICLE(ANVN_PROP_LOOP_M)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
BREAK
|
|
|
|
CASE SEX_SERVICE_COMPLETE
|
|
BREAK
|
|
|
|
|
|
ENDSWITCH
|
|
|
|
RETURN sSexAnimName
|
|
ENDFUNC
|
|
|
|
FUNC STRING GET_SEX_ANIM_LOOP_NAME_FOR_PED(PED_INDEX pedHooker, BOOL bIsBlowJob = TRUE, BOOL bIsPedHooker = TRUE)
|
|
|
|
STRING sSexAnimName = ""
|
|
|
|
IF NOT IS_ENTITY_DEAD(pedHooker)
|
|
|
|
VEHICLE_INDEX vehiclePedIsIn
|
|
vehiclePedIsIn = GET_VEHICLE_PED_IS_IN(pedHooker,TRUE)
|
|
|
|
IF IS_VEHICLE_DRIVEABLE(vehiclePedIsIn)
|
|
|
|
IF IS_VEHICLE_LOW_FOR_SEX(vehiclePedIsIn)
|
|
IF bIsBlowJob
|
|
|
|
IF bIsPedHooker
|
|
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_LOW_VEHICLE(ANVL_BJ_LOOP_F)
|
|
ELSE
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_LOW_VEHICLE(ANVL_BJ_LOOP_M)
|
|
ENDIF
|
|
|
|
//It's SEX
|
|
ELSE
|
|
IF bIsPedHooker
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_LOW_VEHICLE(ANVL_SEX_LOOP_F)
|
|
ELSE
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_LOW_VEHICLE(ANVL_SEX_LOOP_M)
|
|
ENDIF
|
|
ENDIF
|
|
ELSE
|
|
IF bIsBlowJob
|
|
|
|
IF bIsPedHooker
|
|
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_NORM_VEHICLE(ANVN_BJ_LOOP_F)
|
|
ELSE
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_NORM_VEHICLE(ANVN_BJ_LOOP_M)
|
|
ENDIF
|
|
|
|
//It's SEX
|
|
ELSE
|
|
IF bIsPedHooker
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_NORM_VEHICLE(ANVN_SEX_LOOP_F)
|
|
ELSE
|
|
sSexAnimName = GET_ANIM_NAME_FOR_SEX_IN_NORM_VEHICLE(ANVN_SEX_LOOP_M)
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN sSexAnimName
|
|
ENDFUNC
|
|
|
|
FUNC BOOL IS_PED_PLAYING_SEX_ANIM(PED_INDEX ped, BOOL bIsPedHooker, BOOL bIsBlowJob, BOOL bIsPlayerInLowCar)
|
|
|
|
RETURN ( IS_ENTITY_PLAYING_ANIM(ped, GET_ANIM_DICT_FOR_SEX_IN_NORM_VEHICLES(), GET_ANIM_NAME_FOR_SEX_STATE(SEX_PROP_TO_ACTION_P1,bIsPedHooker,bIsBlowJob,bIsPlayerInLowCar))
|
|
OR IS_ENTITY_PLAYING_ANIM(ped, GET_ANIM_DICT_FOR_SEX_IN_NORM_VEHICLES(), GET_ANIM_NAME_FOR_SEX_STATE(SEX_PROP_TO_ACTION_P2,bIsPedHooker,bIsBlowJob,bIsPlayerInLowCar))
|
|
OR IS_ENTITY_PLAYING_ANIM(ped, GET_ANIM_DICT_FOR_SEX_IN_NORM_VEHICLES(), GET_ANIM_NAME_FOR_SEX_STATE(SEX_ACTION_LOOP,bIsPedHooker,bIsBlowJob,bIsPlayerInLowCar))
|
|
OR IS_ENTITY_PLAYING_ANIM(ped, GET_ANIM_DICT_FOR_SEX_IN_NORM_VEHICLES(), GET_ANIM_NAME_FOR_SEX_STATE(SEX_ACTION_TO_PROP_P1,bIsPedHooker,bIsBlowJob,bIsPlayerInLowCar))
|
|
OR IS_ENTITY_PLAYING_ANIM(ped, GET_ANIM_DICT_FOR_SEX_IN_NORM_VEHICLES(), GET_ANIM_NAME_FOR_SEX_STATE(SEX_ACTION_TO_PROP_P2,bIsPedHooker,bIsBlowJob,bIsPlayerInLowCar)))
|
|
|
|
ENDFUNC
|
|
|
|
FUNC BOOL INIT_SEX_SEQUENCE_TASK(BOOL bIsPedHooker, BOOL bIsBlowJob, BOOL bIsPlayerInLowCar, SEQUENCE_INDEX &sequence)
|
|
|
|
STRING sCarSexAnimDictionaryName = GET_ANIM_DICT_FOR_SEX_IN_NORM_VEHICLES()
|
|
|
|
REQUEST_ANIM_DICT(sCarSexAnimDictionaryName)
|
|
IF HAS_ANIM_DICT_LOADED(sCarSexAnimDictionaryName)
|
|
OPEN_SEQUENCE_TASK(sequence)
|
|
TASK_PLAY_ANIM(NULL, sCarSexAnimDictionaryName, GET_ANIM_NAME_FOR_SEX_STATE(SEX_PROP_TO_ACTION_P1,bIsPedHooker,bIsBlowJob,bIsPlayerInLowCar), NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_DEFAULT)
|
|
|
|
TASK_PLAY_ANIM(NULL, sCarSexAnimDictionaryName, GET_ANIM_NAME_FOR_SEX_STATE(SEX_PROP_TO_ACTION_P2,bIsPedHooker,bIsBlowJob,bIsPlayerInLowCar), NORMAL_BLEND_IN, SLOW_BLEND_OUT, -1, AF_DEFAULT)
|
|
|
|
TASK_PLAY_ANIM(NULL, sCarSexAnimDictionaryName, GET_ANIM_NAME_FOR_SEX_STATE(SEX_ACTION_LOOP,bIsPedHooker,bIsBlowJob,bIsPlayerInLowCar), NORMAL_BLEND_IN, SLOW_BLEND_OUT, -1, AF_LOOPING )
|
|
|
|
TASK_PLAY_ANIM(NULL, sCarSexAnimDictionaryName, GET_ANIM_NAME_FOR_SEX_STATE(SEX_ACTION_TO_PROP_P1,bIsPedHooker,bIsBlowJob,bIsPlayerInLowCar), NORMAL_BLEND_IN, SLOW_BLEND_OUT, -1, AF_DEFAULT)
|
|
|
|
TASK_PLAY_ANIM(NULL, sCarSexAnimDictionaryName, GET_ANIM_NAME_FOR_SEX_STATE(SEX_ACTION_TO_PROP_P2,bIsPedHooker,bIsBlowJob,bIsPlayerInLowCar), SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT, -1, AF_DEFAULT)
|
|
CLOSE_SEQUENCE_TASK(sequence)
|
|
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
|
|
ENDFUNC
|
|
|
|
/// PURPOSE: Wrapper for tasking peds to play the mini@prostitute sex anims in car
|
|
///
|
|
/// PARAMS:
|
|
/// pedToTask - The ped to animate
|
|
/// bIsBlowJob - Is this a blowjob or sex
|
|
/// bIsPedHooker - Is this the passenger who is performing the deed
|
|
/// nTimeToPlay - Length of time to have sex/oral
|
|
PROC TASK_PED_TO_HAVE_SEX_IN_VEHICLE(PED_INDEX pedToTask, BOOL bIsBlowJob = FALSE, BOOL bIsPedHooker = TRUE, INT nTimeToPlay = -1, BOOL bClearSequenceTaskAtEnd = TRUE)
|
|
IF IS_ENTITY_DEAD(pedToTask)
|
|
EXIT
|
|
ENDIF
|
|
|
|
VEHICLE_INDEX vehiclePedIsIn
|
|
|
|
vehiclePedIsIn = GET_VEHICLE_PED_IS_IN(pedToTask,TRUE)
|
|
|
|
IF NOT IS_VEHICLE_DRIVEABLE(vehiclePedIsIn)
|
|
EXIT
|
|
ENDIF
|
|
|
|
ExitViewMode = GET_FOLLOW_PED_CAM_VIEW_MODE()
|
|
|
|
//[MF] Force on-foot cam to first person mode.
|
|
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID(), TRUE)
|
|
AND IS_ANY_FIRST_PERSON_CAM_ACTIVE(FALSE)
|
|
IF (ExitViewMode != CAM_VIEW_MODE_FIRST_PERSON)
|
|
CDEBUG1LN(DEBUG_PROSTITUTE, "[SEX] Forcing 3rd person cam to 1st person so it matches 1st person car view... ")
|
|
SET_FOLLOW_PED_CAM_VIEW_MODE(CAM_VIEW_MODE_FIRST_PERSON)
|
|
ELSE
|
|
CDEBUG1LN(DEBUG_PROSTITUTE, "[SEX] (ExitViewMode = CAM_VIEW_MODE_FIRST_PERSON)")
|
|
ENDIF
|
|
ELSE
|
|
CDEBUG1LN(DEBUG_PROSTITUTE, "[SEX] Player isn't in car or isn't in first person cam....")
|
|
ENDIF
|
|
|
|
BOOL bIsPlayerInLowCar = IS_VEHICLE_LOW_FOR_SEX(vehiclePedIsIn)
|
|
CDEBUG1LN(DEBUG_PROSTITUTE, "[SEX] Is vehicle low? ", bIsPlayerInLowCar)
|
|
|
|
STRING sCarSexAnimDictionaryName = GET_ANIM_DICT_FOR_SEX_FOR_VEHICLE_PED_IS_IN(pedToTask)
|
|
CDEBUG1LN(DEBUG_PROSTITUTE, "[SEX] Anim dict? ", sCarSexAnimDictionaryName)
|
|
|
|
IF NOT HAS_ANIM_DICT_LOADED(sCarSexAnimDictionaryName)
|
|
REQUEST_ANIM_DICT(sCarSexAnimDictionaryName)
|
|
CDEBUG1LN(DEBUG_PROSTITUTE, "[SEX] Anim dict being requested", sCarSexAnimDictionaryName)
|
|
ELSE
|
|
SEQUENCE_INDEX iTaskSeq
|
|
|
|
OPEN_SEQUENCE_TASK(iTaskSeq)
|
|
TASK_PLAY_ANIM(NULL, sCarSexAnimDictionaryName, GET_ANIM_NAME_FOR_SEX_STATE(SEX_PROP_TO_ACTION_P1,bIsPedHooker,bIsBlowJob,bIsPlayerInLowCar), NORMAL_BLEND_IN, NORMAL_BLEND_OUT, -1, AF_DEFAULT)
|
|
|
|
TASK_PLAY_ANIM(NULL, sCarSexAnimDictionaryName, GET_ANIM_NAME_FOR_SEX_STATE(SEX_PROP_TO_ACTION_P2,bIsPedHooker,bIsBlowJob,bIsPlayerInLowCar), NORMAL_BLEND_IN, SLOW_BLEND_OUT, -1, AF_DEFAULT)
|
|
|
|
TASK_PLAY_ANIM(NULL, sCarSexAnimDictionaryName, GET_ANIM_NAME_FOR_SEX_STATE(SEX_ACTION_LOOP,bIsPedHooker,bIsBlowJob,bIsPlayerInLowCar), NORMAL_BLEND_IN, SLOW_BLEND_OUT, nTimeToPlay, AF_LOOPING )
|
|
|
|
TASK_PLAY_ANIM(NULL, sCarSexAnimDictionaryName, GET_ANIM_NAME_FOR_SEX_STATE(SEX_ACTION_TO_PROP_P1,bIsPedHooker,bIsBlowJob,bIsPlayerInLowCar), NORMAL_BLEND_IN, SLOW_BLEND_OUT, -1, AF_DEFAULT)
|
|
|
|
TASK_PLAY_ANIM(NULL, sCarSexAnimDictionaryName, GET_ANIM_NAME_FOR_SEX_STATE(SEX_ACTION_TO_PROP_P2,bIsPedHooker,bIsBlowJob,bIsPlayerInLowCar), SLOW_BLEND_IN, REALLY_SLOW_BLEND_OUT, -1, AF_DEFAULT)
|
|
|
|
|
|
CLOSE_SEQUENCE_TASK(iTaskSeq)
|
|
TASK_PERFORM_SEQUENCE(pedToTask, iTaskSeq)
|
|
|
|
//Doesn't seem to work with this set to true, added as default param to avoid breaking old stuff, try setting to FALSE if not playing
|
|
IF bClearSequenceTaskAtEnd
|
|
CLEAR_SEQUENCE_TASK(iTaskSeq)
|
|
ENDIF
|
|
|
|
CDEBUG1LN(DEBUG_PROSTITUTE, "[SEX] Ped tasked to have sex")
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
FUNC BOOL IS_SEX_ANIMATION_PLAYING_MONEY_SHOT(PED_INDEX ped)
|
|
RETURN ( IS_ENTITY_PLAYING_ANIM(ped, GET_ANIM_DICT_FOR_SEX_IN_LOW_VEHICLES(), GET_ANIM_NAME_FOR_SEX_IN_LOW_VEHICLE(ANVL_SEX_2_PROP_P1_F))
|
|
OR IS_ENTITY_PLAYING_ANIM(ped, GET_ANIM_DICT_FOR_SEX_IN_LOW_VEHICLES(), GET_ANIM_NAME_FOR_SEX_IN_LOW_VEHICLE(ANVL_BJ_2_PROP_P1_F))
|
|
OR IS_ENTITY_PLAYING_ANIM(ped, GET_ANIM_DICT_FOR_SEX_IN_NORM_VEHICLES(), GET_ANIM_NAME_FOR_SEX_IN_NORM_VEHICLE(ANVN_SEX_2_PROP_P1_F))
|
|
OR IS_ENTITY_PLAYING_ANIM(ped, GET_ANIM_DICT_FOR_SEX_IN_NORM_VEHICLES(), GET_ANIM_NAME_FOR_SEX_IN_NORM_VEHICLE(ANVN_BJ_2_PROP_P1_F)) )
|
|
ENDFUNC
|
|
//EOF
|