Files
gtav-src/script/dev_ng/shared/include/public/charm_minigame_public.sch
T
2025-09-29 00:52:08 +02:00

1239 lines
46 KiB
Scheme
Executable File

//
// Author: Adam Westwood Date: 07/02/14
//
//
// Charm Minigame
//
// Minigame to for charming a ped
//
//
//
//
USING "timer_public.sch"
USING "rage_builtins.sch"
USING "globals.sch"
USING "commands_audio.sch"
USING "commands_camera.sch"
USING "commands_clock.sch"
USING "commands_debug.sch"
USING "commands_fire.sch"
USING "commands_graphics.sch"
USING "commands_hud.sch"
USING "commands_misc.sch"
USING "commands_object.sch"
USING "commands_pad.sch"
USING "commands_ped.sch"
USING "commands_player.sch"
USING "commands_script.sch"
USING "commands_streaming.sch"
USING "commands_task.sch"
USING "commands_vehicle.sch"
USING "commands_interiors.sch"
USING "net_include.sch"
USING "model_enums.sch"
USING "script_player.sch"
USING "script_misc.sch"
USING "selector_public.sch"
USING "timer_public.sch"
USING "LineActivation.sch"
USING "clothes_shop_private.sch"
#IF IS_DEBUG_BUILD
USING "shared_debug.sch"
USING "script_debug.sch"
#ENDIF
CONST_INT bs_gest_knuckle_crunch 0
CONST_INT bs_gest_slow_clap_face_palm 1
CONST_INT bs_gest_thumbs_up 2
CONST_INT bs_gest_wanking 3
CONST_INT bs_gest_thrusting 4
CONST_INT bs_gest_salute 5
CONST_INT bs_gest_fuck_you 6
CONST_INT bs_gest_air_guitar 7
CONST_INT bs_gest_rock 8
CONST_INT bs_gest_no_way 9
CONST_INT bs_gest_photos 10
CONST_INT bs_gest_dancing 11
CONST_INT bs_gest_blow_kiss 12
CONST_INT bs_gest_jazz_hands 13
CONST_INT bs_gest_nose_pick 14
CONST_INT bs_gest_wave 15
CONST_INT bs_gest_hands_up 16
CONST_INT bs_gest_shh 17
CONST_INT bs_gest_dock 18
ENUM CHARM_PED_STATE
CPS_NONE,
CPS_WAITING_FOR_STATE,
CPS_WAITING,
CPS_COMMENTING_ON_VEHICLE,
CPS_COMMENTING_ON_NO_VEHICLE,
CPS_COMMENTING_ON_CLOTHES,
CPS_BEING_CHARMED,
CPS_BEING_CHARMED_NO_SPEECH,
CPS_CHARMED
ENDENUM
STRUCT S_CHARM_MINIGAME_DATA
CHARM_PED_STATE e_charm_ped_state = CPS_NONE
FLOAT fCharmLevel
FLOAT fDesiredCharmLevel
BOOL b_charm_minigame_active
BOOL b_quit_charm_minigame
BOOL b_failed_charm_minigame
BOOL b_beat_charm_minigame
INT i_charm_timer
INT i_this_charm_minigame
MODEL_NAMES ePlayerVehicleModel
VEHICLE_INDEX vehVehicleTemp
BOOL bPlayerHasNoVeh
INT iOutfitCost
INT iTaskDelayTimer
STRING sThisDialogue
INT iSpeechTimer
INT iIdleTimer
BOOL bShownHelp
BOOL showHUD
INT bsGesturesPlayed
ENDSTRUCT
CONST_FLOAT MAX_CHARM_BAR 100.0
STRING sCharmAnimDictAdditional = "gestures@f@standing@casual"
STRING sCharmAnimDict = "anim@heists@ornate_bank@chat_manager"
STRING sCharmAnimCharmed = "charm"
STRING sCharmAnimBeingCharmed1 = "gesture_pleased"
STRING sCharmAnimBeingCharmed2 = "gesture_i_will"
STRING sCharmAnimBeingCharmed3 = "gesture_nod_yes_soft"
STRING sCharmAnimCommentingOnVehicleG = "nice_car"
STRING sCharmAnimCommentingOnVehicleA = "average_car"
STRING sCharmAnimCommentingOnVehicleB = "not_nice_car"
STRING sCharmAnimCommentingOnNoVehicle = "on_foot"
STRING sCharmAnimCommentingOnClothesG= "nice_clothes"
STRING sCharmAnimCommentingOnClothesA= "average_clothes"
STRING sCharmAnimCommentingOnClothesB= "poor_clothes"
STRING sCharmAnimNoSpeak= "no_speak"
//"disrupt"
//"fail"
//"not_charm"
//"wear_weird"
STRING sMinigameDialogue = "OBHSMAU"
structPedsForConversation sSpeech
VEHICLE_VALUE_DATA sVVData
/// RESET_CROWD_CONTROL_MINIGAME_DATA(S_CROWD_CONTROL_DATA &crowd_control_data)
///
PROC RESET_CHARM_MINIGAME_DATA(S_CHARM_MINIGAME_DATA &charm_minigame_data)
charm_minigame_data.b_charm_minigame_active = FALSE
charm_minigame_data.b_quit_charm_minigame = FALSE
charm_minigame_data.b_failed_charm_minigame = FALSE
charm_minigame_data.b_beat_charm_minigame = FALSE
charm_minigame_data.i_charm_timer = 0
charm_minigame_data.i_this_charm_minigame = 0
charm_minigame_data.e_charm_ped_state = CPS_NONE
charm_minigame_data.fCharmLevel = 0
charm_minigame_data.bShownHelp = FALSE
ENDPROC
/// RESET_CROWD_CONTROL_MINIGAME_DATA(S_CROWD_CONTROL_DATA &crowd_control_data)
///
FUNC BOOL MANAGE_CHARM_MINIGAME_TIMER(INT&start_time, INT time)
INT current_time
current_time = GET_GAME_TIMER()
IF ((current_time - start_time) > time)
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
/// FORCE_QUIT_FAIL_CROWD_CONTROL_MINIGAME_KEEP_DATA (pass in your own crowd control struct)
/// NOTES: Force the termination of the hacking minigame and cause the player to fail but preserves variable data.
/// PURPOSE:
/// Force the termination of the hacking minigame and cause the player to fail.
/// PARAMS:
/// S_HACKING_DATA &hacking_data - hacking data
/// RETURNS:
/// No Returns
///
PROC FORCE_QUIT_FAIL_CHARM_MINIGAME_KEEP_DATA(S_CHARM_MINIGAME_DATA &charm_minigame_data)
SET_PED_CURRENT_WEAPON_VISIBLE(PLAYER_PED_ID(),TRUE)
IF IS_MINIGAME_IN_PROGRESS()
SET_MINIGAME_IN_PROGRESS(FALSE)
ENDIF
CLEAR_HELP()
SET_PLAYER_CONTROL(PLAYER_ID(),TRUE)
DISABLE_CELLPHONE(FALSE)
DISABLE_SCRIPT_HUD_THIS_FRAME_RESET()
charm_minigame_data.b_failed_charm_minigame = TRUE
RESET_CHARM_MINIGAME_DATA(charm_minigame_data)
ENDPROC
/// FORCE_QUIT_PASS_CROWD_CONTROL_MINIGAME_KEEP_DATA (pass in your own crowd control struct)
/// NOTES: Force the termination of the hacking minigame and cause the player to fail but preserves variable data.
/// PURPOSE:
/// Force the termination of the hacking minigame and cause the player to fail.
/// PARAMS:
/// S_HACKING_DATA &hacking_data - hacking data
/// RETURNS:
/// No Returns
///
PROC FORCE_QUIT_PASS_CHARM_MINIGAME_KEEP_DATA(S_CHARM_MINIGAME_DATA &charm_minigame_data)
SET_PED_CURRENT_WEAPON_VISIBLE(PLAYER_PED_ID(),TRUE)
IF IS_MINIGAME_IN_PROGRESS()
SET_MINIGAME_IN_PROGRESS(FALSE)
ENDIF
CLEAR_HELP()
SET_PLAYER_CONTROL(PLAYER_ID(),TRUE)
DISABLE_CELLPHONE(FALSE)
DISABLE_SCRIPT_HUD_THIS_FRAME_RESET()
charm_minigame_data.b_failed_charm_minigame = TRUE
RESET_CHARM_MINIGAME_DATA(charm_minigame_data)
ENDPROC
FUNC BOOL HAS_PLAYER_BEAT_CHARM_MINIGAME(S_CHARM_MINIGAME_DATA &charm_minigame_data,BOOL bAndForceQuit = FALSE)
IF charm_minigame_data.b_beat_charm_minigame = TRUE
IF bAndForceQuit
FORCE_QUIT_PASS_CHARM_MINIGAME_KEEP_DATA(charm_minigame_data)
RETURN TRUE
ELSE
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
//PURPOSE: Return True if the Player is in front of the Ped
FUNC BOOL IS_PLAYER_IN_FRONT_OF_CHARM_PED(PLAYER_INDEX Player, PED_INDEX TargetPed)
VECTOR posA // Player position
VECTOR posB // Ped position
VECTOR posC
VECTOR vecAB // vector from Player to Ped
VECTOR vecPed // unit vector pointing in the direction the Ped is facing
FLOAT fTemp
// get positions
IF IS_NET_PLAYER_OK(Player)
posA = GET_PLAYER_COORDS(Player)
ENDIF
IF NOT IS_PED_INJURED(TargetPed)
posB = GET_ENTITY_COORDS(TargetPed)
ENDIF
// get vec from Player to Ped
vecAB = posB - posA
// get unit vector pointing forwards from Ped
IF NOT IS_PED_INJURED(TargetPed)
posC = get_offset_from_entity_in_world_coords(TargetPed, <<0.0, 7.0, 0.0>>)
vecPed = posC - posB
ENDIF
// take the z out
vecAB.z = 0.0
vecPed.z = 0.0
// calculate dot product of vecAB and vecPed
fTemp = DOT_PRODUCT(vecAB, vecPed)
IF (fTemp < -0.1)
RETURN(TRUE)
ENDIF
RETURN(FALSE)
ENDFUNC
//PUSRPOSE: HAS_PLAYER_JUST_SHOT_NEAR_TO_CROWD_CONTROL_PED
FUNC BOOL HAS_PLAYER_JUST_SHOT_NEAR_TO_CHARM_PED(PED_INDEX pedCharmPed)
IF NOT IS_PED_INJURED(pedCharmPed)
AND IS_NET_PLAYER_OK(PLAYER_ID())
WEAPON_TYPE CurrentWeapon
IF GET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), CurrentWeapon)
IF CurrentWeapon != WEAPONTYPE_UNARMED
AND CurrentWeapon != WEAPONTYPE_OBJECT
AND CurrentWeapon != WEAPONTYPE_FLARE
IF IS_BULLET_IN_AREA(GET_ENTITY_COORDS(pedCharmPed), 5.0)
OR HAS_BULLET_IMPACTED_IN_AREA(GET_ENTITY_COORDS(pedCharmPed), 10.0)
RETURN TRUE
ENDIF
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
//PUSRPOSE: IS_PLAYER_THREATENING_CHARM_PED
FUNC BOOL IS_PLAYER_THREATENING_CHARM_PED(PED_INDEX pedCharmPed)
//Check if player has aimed a gun at the Staff
IF NOT IS_PED_INJURED(pedCharmPed)
AND IS_NET_PLAYER_OK(PLAYER_ID())
WEAPON_TYPE CurrentWeapon
IF GET_CURRENT_PED_WEAPON(PLAYER_PED_ID(), CurrentWeapon)
IF CurrentWeapon != WEAPONTYPE_UNARMED
AND CurrentWeapon != WEAPONTYPE_OBJECT
AND CurrentWeapon != WEAPONTYPE_FLARE
IF ( IS_PLAYER_FREE_AIMING(PLAYER_ID()) AND IS_PED_FACING_PED(PLAYER_PED_ID(), pedCharmPed, 45.0) AND IS_ENTITY_AT_ENTITY(PLAYER_PED_ID(), pedCharmPed, <<5.0, 5.0, 2.0>>) )
OR IS_PLAYER_FREE_AIMING_AT_ENTITY(PLAYER_ID(), pedCharmPed)
OR IS_PLAYER_TARGETTING_ENTITY(PLAYER_ID(), pedCharmPed)
OR IS_BULLET_IN_AREA(GET_ENTITY_COORDS(pedCharmPed), 5.0)
OR HAS_BULLET_IMPACTED_IN_AREA(GET_ENTITY_COORDS(pedCharmPed), 10.0)
RETURN TRUE
ENDIF
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
//PUSRPOSE: IS_PLAYER_CHARMING_PED
FUNC BOOL IS_PLAYER_CHARMING_PED(PED_INDEX pedCharmPed)
IF NOT IS_PED_INJURED(pedCharmPed)
AND IS_NET_PLAYER_OK(PLAYER_ID())
IF IS_PLAYER_IN_FRONT_OF_PED(PLAYER_ID(), pedCharmPed)
AND NETWORK_IS_PLAYER_TALKING(PLAYER_ID())
RETURN TRUE
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
PROC GET_PLAYER_CLOTHES_VALUE(S_CHARM_MINIGAME_DATA &charm_minigame_data)
INT iCompType
INT iPedProp
PED_COMP_NAME_ENUM eCurrentItem
PED_COMP_ITEM_DATA_STRUCT sTempItemData
REPEAT NUMBER_OF_PED_COMP_TYPES iCompType
IF iCompType = ENUM_TO_INT(COMP_TYPE_OUTFIT)
// skip
ELIF iCompType = ENUM_TO_INT(COMP_TYPE_PROPGROUP)
// skip
ELIF iCompType = ENUM_TO_INT(COMP_TYPE_PROPS)
// get individual props
REPEAT NUMBER_OF_PED_PROP_TYPES iPedProp
eCurrentItem = GET_PED_COMP_ITEM_CURRENT_MP(PLAYER_PED_ID(), INT_TO_ENUM(PED_COMP_TYPE_ENUM, iCompType), iPedProp)
IF eCurrentItem != DUMMY_PED_COMP
sTempItemData = GET_PED_COMP_DATA_FOR_ITEM_MP (GET_ENTITY_MODEL(PLAYER_PED_ID()), COMP_TYPE_PROPS, eCurrentItem)
charm_minigame_data.iOutfitCost += sTempItemData.iCost
ENDIF
ENDREPEAT
ELSE
eCurrentItem = GET_PED_COMP_ITEM_CURRENT_MP(PLAYER_PED_ID(), INT_TO_ENUM(PED_COMP_TYPE_ENUM, iCompType))
IF eCurrentItem != DUMMY_PED_COMP
sTempItemData = GET_PED_COMP_DATA_FOR_ITEM_MP (GET_ENTITY_MODEL(PLAYER_PED_ID()), INT_TO_ENUM(PED_COMP_TYPE_ENUM,iCompType), eCurrentItem)
charm_minigame_data.iOutfitCost += sTempItemData.iCost
ENDIF
ENDIF
ENDREPEAT
ENDPROC
PROC GET_PLAYER_VEHICLE_VALUE(PED_INDEX pedCharmPed,S_CHARM_MINIGAME_DATA &charm_minigame_data)
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
charm_minigame_data.vehVehicleTemp = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())
PRINTLN("PLAYER IS IN VEHICLE")
ELSE
charm_minigame_data.vehVehicleTemp = GET_LAST_DRIVEN_VEHICLE()
PRINTLN("PLAYER IS NOT IN VEHICLE")
ENDIF
IF NOT IS_PED_INJURED(pedCharmPed)
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF IS_VEHICLE_DRIVEABLE(charm_minigame_data.vehVehicleTemp)
IF IS_ENTITY_AT_ENTITY(pedCharmPed,charm_minigame_data.vehVehicleTemp,<<15,15,15>>)
charm_minigame_data.ePlayerVehicleModel = GET_ENTITY_MODEL( charm_minigame_data.vehVehicleTemp)
GET_VEHICLE_VALUE(sVVData,charm_minigame_data.ePlayerVehicleModel)
ELSE
charm_minigame_data.bPlayerHasNoVeh = TRUE
ENDIF
ELSE
charm_minigame_data.bPlayerHasNoVeh = TRUE
ENDIF
ELSE
IF IS_VEHICLE_DRIVEABLE(charm_minigame_data.vehVehicleTemp)
charm_minigame_data.ePlayerVehicleModel = GET_ENTITY_MODEL( charm_minigame_data.vehVehicleTemp)
GET_VEHICLE_VALUE(sVVData,charm_minigame_data.ePlayerVehicleModel)
PRINTLN("Vehicle Value:",sVVData.iStandardPrice)
ENDIF
ENDIF
ENDIF
ENDPROC
/// REQUEST_CHARM_MINIGAME_ASSETS()
/// NOTES: called in the charm minigame script but can be precalled and checked by the scripter if necessary
/// PURPOSE:
/// checking assets are loaded
/// PARAMS:
/// RETURNS:
///
PROC REQUEST_CHARM_MINIGAME_ASSETS()
REQUEST_ANIM_DICT(sCharmAnimDict)
REQUEST_ANIM_DICT(sCharmAnimDictAdditional)
REQUEST_ADDITIONAL_TEXT("HACK", MINIGAME_TEXT_SLOT)
ENDPROC
/// HAVE_CHARM_MINIGAME_ASSETS_LOADED()
/// NOTES: called in the charm minigame script but can be precalled and checked by the scripter if necessary
/// PURPOSE:
/// checking assets are loaded
/// PARAMS:
/// RETURNS:
FUNC BOOL HAVE_CHARM_MINIGAME_ASSETS_LOADED()
REQUEST_ANIM_DICT(sCharmAnimDict)
REQUEST_ANIM_DICT(sCharmAnimDictAdditional)
IF HAS_ANIM_DICT_LOADED(sCharmAnimDict)
AND HAS_ANIM_DICT_LOADED(sCharmAnimDictAdditional)
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL IS_VEHICLE_NOT_COOL(S_CHARM_MINIGAME_DATA &charm_minigame_data)
IF charm_minigame_data.ePlayerVehicleModel = TITAN
OR charm_minigame_data.ePlayerVehicleModel = LUXOR
OR charm_minigame_data.ePlayerVehicleModel = DUMP
OR charm_minigame_data.ePlayerVehicleModel = DUNE2
OR charm_minigame_data.ePlayerVehicleModel = ZTYPE
OR charm_minigame_data.ePlayerVehicleModel = BLIMP
OR charm_minigame_data.ePlayerVehicleModel = SUBMERSIBLE
OR charm_minigame_data.ePlayerVehicleModel = FIRETRUK
OR charm_minigame_data.ePlayerVehicleModel = PBUS
OR charm_minigame_data.ePlayerVehicleModel = TACO
OR charm_minigame_data.ePlayerVehicleModel = SPEEDO2
OR charm_minigame_data.ePlayerVehicleModel = ROMERO
OR charm_minigame_data.ePlayerVehicleModel = TOURBUS
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL IS_VEHICLE_A_POLICE_CAR(S_CHARM_MINIGAME_DATA &charm_minigame_data)
IF charm_minigame_data.ePlayerVehicleModel = POLICE2
OR charm_minigame_data.ePlayerVehicleModel = POLICE3
OR charm_minigame_data.ePlayerVehicleModel = POLICE4
OR charm_minigame_data.ePlayerVehicleModel = PRANGER
OR charm_minigame_data.ePlayerVehicleModel = SHERIFF
OR charm_minigame_data.ePlayerVehicleModel = DILETTANTE2
OR charm_minigame_data.ePlayerVehicleModel = FBI
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
FUNC FLOAT GET_CHARM_LEVEL_FOR_VEHICLE_VALUE(S_CHARM_MINIGAME_DATA &charm_minigame_data)
IF NOT IS_VEHICLE_A_POLICE_CAR(charm_minigame_data)
IF sVVData.iStandardPrice > 1000000
IF IS_VEHICLE_NOT_COOL(charm_minigame_data)
charm_minigame_data.fDesiredCharmLevel = 15
ELSE
charm_minigame_data.fDesiredCharmLevel = 40
ENDIF
ELIF sVVData.iStandardPrice < 100000 AND sVVData.iStandardPrice > 500000
IF IS_VEHICLE_NOT_COOL(charm_minigame_data)
charm_minigame_data.fDesiredCharmLevel = 10
ELSE
charm_minigame_data.fDesiredCharmLevel = 30
ENDIF
ELIF sVVData.iStandardPrice < 500000 AND sVVData.iStandardPrice > 250000
IF IS_VEHICLE_NOT_COOL(charm_minigame_data)
charm_minigame_data.fDesiredCharmLevel = 8
ELSE
charm_minigame_data.fDesiredCharmLevel = 25
ENDIF
ELIF sVVData.iStandardPrice < 250000 AND sVVData.iStandardPrice > 100000
IF IS_VEHICLE_NOT_COOL(charm_minigame_data)
charm_minigame_data.fDesiredCharmLevel = 5
ELSE
charm_minigame_data.fDesiredCharmLevel = 20
ENDIF
ELIF sVVData.iStandardPrice < 100000 AND sVVData.iStandardPrice > 50000
IF IS_VEHICLE_NOT_COOL(charm_minigame_data)
charm_minigame_data.fDesiredCharmLevel = 5
ELSE
charm_minigame_data.fDesiredCharmLevel = 18
ENDIF
ELIF sVVData.iStandardPrice < 50000 AND sVVData.iStandardPrice > 25000
IF IS_VEHICLE_NOT_COOL(charm_minigame_data)
charm_minigame_data.fDesiredCharmLevel = 5
ELSE
charm_minigame_data.fDesiredCharmLevel = 15
ENDIF
ELIF sVVData.iStandardPrice < 25000 AND sVVData.iStandardPrice > 10000
IF IS_VEHICLE_NOT_COOL(charm_minigame_data)
charm_minigame_data.fDesiredCharmLevel = 2
ELSE
charm_minigame_data.fDesiredCharmLevel = 10
ENDIF
ELSE
charm_minigame_data.fDesiredCharmLevel = 5
ENDIF
ELSE
charm_minigame_data.fDesiredCharmLevel = 1
ENDIF
RETURN charm_minigame_data.fDesiredCharmLevel
ENDFUNC
FUNC FLOAT GET_CHARM_LEVEL_FOR_CURRENT_CLOTHING(S_CHARM_MINIGAME_DATA &charm_minigame_data)
FLOAT fCharmLevel
IF charm_minigame_data.iOutfitCost < 2500
fCharmLevel = 1
PRINTLN("[RUN_CHARM_PED_MINIGAME]GET_CHARM_LEVEL_FOR_CURRENT_CLOTHING fCharmLevel = 1 ")
ELIF charm_minigame_data.iOutfitCost < 5000
fCharmLevel = 10
PRINTLN("[RUN_CHARM_PED_MINIGAME]GET_CHARM_LEVEL_FOR_CURRENT_CLOTHING fCharmLevel = 10 ")
ELIF charm_minigame_data.iOutfitCost < 10000
fCharmLevel = 20
PRINTLN("[RUN_CHARM_PED_MINIGAME]GET_CHARM_LEVEL_FOR_CURRENT_CLOTHING fCharmLevel = 20 ")
ELIF charm_minigame_data.iOutfitCost < 20000
fCharmLevel = 25
PRINTLN("[RUN_CHARM_PED_MINIGAME]GET_CHARM_LEVEL_FOR_CURRENT_CLOTHING fCharmLevel = 25 ")
ELIF charm_minigame_data.iOutfitCost < 30000
fCharmLevel = 30
PRINTLN("[RUN_CHARM_PED_MINIGAME]GET_CHARM_LEVEL_FOR_CURRENT_CLOTHING fCharmLevel = 30 ")
ELSE
fCharmLevel = 40
PRINTLN("[RUN_CHARM_PED_MINIGAME]GET_CHARM_LEVEL_FOR_CURRENT_CLOTHING fCharmLevel = 40 ")
ENDIF
RETURN fCharmLevel
ENDFUNC
FUNC BOOL HAS_PLAYER_CHARMED_PED(S_CHARM_MINIGAME_DATA &charm_minigame_data)
IF charm_minigame_data.b_beat_charm_minigame = TRUE
RETURN TRUE
ENDIF
RETURN FALSE
ENDFUNC
PROC MANAGE_CHARM_PED_ACTIONS(PED_INDEX pedCharmPed ,S_CHARM_MINIGAME_DATA &charm_minigame_data)
INT iTemptRand
PRINTLN("[RUN_CHARM_PED_MINIGAME] charm_minigame_data.e_charm_ped_state: ")PRINTLN(ENUM_TO_INT(charm_minigame_data.e_charm_ped_state))
SWITCH charm_minigame_data.e_charm_ped_state
CASE CPS_WAITING_FOR_STATE
IF NOT IS_PED_INJURED(pedCharmPed)
IF MANAGE_CHARM_MINIGAME_TIMER(charm_minigame_data.iTaskDelayTimer,2000)
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF GET_SCRIPT_TASK_STATUS(pedCharmPed,SCRIPT_TASK_PERFORM_SEQUENCE)<> PERFORMING_TASK
charm_minigame_data.e_charm_ped_state = CPS_WAITING
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
//holding state
CASE CPS_WAITING
BREAK
CASE CPS_COMMENTING_ON_VEHICLE
IF NOT IS_PED_INJURED(pedCharmPed)
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(sSpeech,sMinigameDialogue, charm_minigame_data.sThisDialogue, CONV_PRIORITY_MEDIUM)
SEQUENCE_INDEX SequenceIndex
CLEAR_SEQUENCE_TASK(SequenceIndex)
OPEN_SEQUENCE_TASK(SequenceIndex)
TASK_TURN_PED_TO_FACE_ENTITY(NULL,PLAYER_PED_ID())
TASK_LOOK_AT_ENTITY(NULL,PLAYER_PED_ID(),20000,SLF_WHILE_NOT_IN_FOV)
IF charm_minigame_data.fDesiredCharmLevel >= 30
TASK_PLAY_ANIM(NULL,sCharmAnimDict,sCharmAnimCommentingOnVehicleG,NORMAL_BLEND_IN,NORMAL_BLEND_OUT,-1)
ELIF charm_minigame_data.fDesiredCharmLevel < 30 AND charm_minigame_data.fDesiredCharmLevel > 14
TASK_PLAY_ANIM(NULL,sCharmAnimDict,sCharmAnimCommentingOnVehicleA,NORMAL_BLEND_IN,NORMAL_BLEND_OUT,-1)
ELSE
TASK_PLAY_ANIM(NULL,sCharmAnimDict,sCharmAnimCommentingOnVehicleB,NORMAL_BLEND_IN,NORMAL_BLEND_OUT,-1)
ENDIF
CLOSE_SEQUENCE_TASK(SequenceIndex)
TASK_PERFORM_SEQUENCE(pedCharmPed, SequenceIndex)
CLEAR_SEQUENCE_TASK(SequenceIndex)
charm_minigame_data.iTaskDelayTimer = GET_GAME_TIMER()
charm_minigame_data.e_charm_ped_state = CPS_WAITING_FOR_STATE
ENDIF
ENDIF
ENDIF
BREAK
CASE CPS_COMMENTING_ON_NO_VEHICLE
IF NOT IS_PED_INJURED(pedCharmPed)
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(sSpeech,sMinigameDialogue, charm_minigame_data.sThisDialogue, CONV_PRIORITY_MEDIUM)
SEQUENCE_INDEX SequenceIndex
CLEAR_SEQUENCE_TASK(SequenceIndex)
OPEN_SEQUENCE_TASK(SequenceIndex)
TASK_TURN_PED_TO_FACE_ENTITY(NULL,PLAYER_PED_ID())
TASK_LOOK_AT_ENTITY(NULL,PLAYER_PED_ID(),20000,SLF_WHILE_NOT_IN_FOV)
TASK_PLAY_ANIM(NULL,sCharmAnimDict,sCharmAnimCommentingOnNoVehicle,NORMAL_BLEND_IN,NORMAL_BLEND_OUT,-1)
CLOSE_SEQUENCE_TASK(SequenceIndex)
TASK_PERFORM_SEQUENCE(pedCharmPed, SequenceIndex)
CLEAR_SEQUENCE_TASK(SequenceIndex)
charm_minigame_data.iTaskDelayTimer = GET_GAME_TIMER()
charm_minigame_data.e_charm_ped_state = CPS_WAITING_FOR_STATE
ENDIF
ENDIF
ENDIF
BREAK
CASE CPS_COMMENTING_ON_CLOTHES
IF NOT IS_PED_INJURED(pedCharmPed)
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(sSpeech,sMinigameDialogue, charm_minigame_data.sThisDialogue, CONV_PRIORITY_MEDIUM)
SEQUENCE_INDEX SequenceIndex
CLEAR_SEQUENCE_TASK(SequenceIndex)
OPEN_SEQUENCE_TASK(SequenceIndex)
TASK_TURN_PED_TO_FACE_ENTITY(NULL,PLAYER_PED_ID())
TASK_LOOK_AT_ENTITY(NULL,PLAYER_PED_ID(),20000,SLF_WHILE_NOT_IN_FOV)
IF GET_CHARM_LEVEL_FOR_CURRENT_CLOTHING(charm_minigame_data) >= 30
TASK_PLAY_ANIM(NULL,sCharmAnimDict,sCharmAnimCommentingOnClothesG,NORMAL_BLEND_IN,NORMAL_BLEND_OUT,-1)
ELIF GET_CHARM_LEVEL_FOR_CURRENT_CLOTHING(charm_minigame_data) < 30 AND GET_CHARM_LEVEL_FOR_CURRENT_CLOTHING(charm_minigame_data) > 10
TASK_PLAY_ANIM(NULL,sCharmAnimDict,sCharmAnimCommentingOnClothesA,NORMAL_BLEND_IN,NORMAL_BLEND_OUT,-1)
ELIF GET_CHARM_LEVEL_FOR_CURRENT_CLOTHING(charm_minigame_data) < 10
TASK_PLAY_ANIM(NULL,sCharmAnimDict,sCharmAnimCommentingOnClothesB,NORMAL_BLEND_IN,NORMAL_BLEND_OUT,-1)
ENDIF
CLOSE_SEQUENCE_TASK(SequenceIndex)
TASK_PERFORM_SEQUENCE(pedCharmPed, SequenceIndex)
CLEAR_SEQUENCE_TASK(SequenceIndex)
charm_minigame_data.iTaskDelayTimer = GET_GAME_TIMER()
charm_minigame_data.sThisDialogue = "OBHSM16"
charm_minigame_data.e_charm_ped_state = CPS_WAITING_FOR_STATE
ENDIF
ENDIF
ENDIF
BREAK
CASE CPS_BEING_CHARMED
IF NOT IS_PED_INJURED(pedCharmPed)
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(sSpeech,sMinigameDialogue, charm_minigame_data.sThisDialogue, CONV_PRIORITY_MEDIUM)
SEQUENCE_INDEX SequenceIndex
CLEAR_SEQUENCE_TASK(SequenceIndex)
OPEN_SEQUENCE_TASK(SequenceIndex)
TASK_TURN_PED_TO_FACE_ENTITY(NULL,PLAYER_PED_ID())
TASK_LOOK_AT_ENTITY(NULL,PLAYER_PED_ID(),20000,SLF_WHILE_NOT_IN_FOV)
iTemptRand = GET_RANDOM_INT_IN_RANGE(0,3)
IF iTemptRand = 0
TASK_PLAY_ANIM(NULL,sCharmAnimDictAdditional,sCharmAnimBeingCharmed1,SLOW_BLEND_IN,NORMAL_BLEND_OUT,-1,AF_UPPERBODY)
ELIF iTemptRand = 1
TASK_PLAY_ANIM(NULL,sCharmAnimDictAdditional,sCharmAnimBeingCharmed2,SLOW_BLEND_IN,NORMAL_BLEND_OUT,-1,AF_UPPERBODY)
ELIF iTemptRand = 2
TASK_PLAY_ANIM(NULL,sCharmAnimDictAdditional,sCharmAnimBeingCharmed3,SLOW_BLEND_IN,NORMAL_BLEND_OUT,-1,AF_UPPERBODY)
ENDIF
CLOSE_SEQUENCE_TASK(SequenceIndex)
TASK_PERFORM_SEQUENCE(pedCharmPed, SequenceIndex)
CLEAR_SEQUENCE_TASK(SequenceIndex)
charm_minigame_data.iTaskDelayTimer = GET_GAME_TIMER()
charm_minigame_data.e_charm_ped_state = CPS_WAITING_FOR_STATE
ENDIF
ENDIF
ENDIF
BREAK
CASE CPS_BEING_CHARMED_NO_SPEECH
IF NOT IS_PED_INJURED(pedCharmPed)
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(sSpeech,sMinigameDialogue, charm_minigame_data.sThisDialogue, CONV_PRIORITY_MEDIUM)
SEQUENCE_INDEX SequenceIndex
CLEAR_SEQUENCE_TASK(SequenceIndex)
OPEN_SEQUENCE_TASK(SequenceIndex)
TASK_TURN_PED_TO_FACE_ENTITY(NULL,PLAYER_PED_ID())
TASK_LOOK_AT_ENTITY(NULL,PLAYER_PED_ID(),20000,SLF_WHILE_NOT_IN_FOV)
TASK_PLAY_ANIM(NULL,sCharmAnimDict,sCharmAnimNoSpeak,NORMAL_BLEND_IN,NORMAL_BLEND_OUT,-1)
CLOSE_SEQUENCE_TASK(SequenceIndex)
TASK_PERFORM_SEQUENCE(pedCharmPed, SequenceIndex)
CLEAR_SEQUENCE_TASK(SequenceIndex)
charm_minigame_data.iTaskDelayTimer = GET_GAME_TIMER()
charm_minigame_data.e_charm_ped_state = CPS_WAITING_FOR_STATE
ENDIF
ENDIF
ENDIF
BREAK
CASE CPS_CHARMED
IF NOT IS_PED_INJURED(pedCharmPed)
IF NOT IS_ANY_CONVERSATION_ONGOING_OR_QUEUED()
IF CREATE_CONVERSATION(sSpeech,sMinigameDialogue, charm_minigame_data.sThisDialogue, CONV_PRIORITY_MEDIUM)
SEQUENCE_INDEX SequenceIndex
CLEAR_SEQUENCE_TASK(SequenceIndex)
OPEN_SEQUENCE_TASK(SequenceIndex)
TASK_TURN_PED_TO_FACE_ENTITY(NULL,PLAYER_PED_ID())
TASK_LOOK_AT_ENTITY(NULL,PLAYER_PED_ID(),20000,SLF_WHILE_NOT_IN_FOV)
TASK_PLAY_ANIM(NULL,sCharmAnimDict,sCharmAnimCharmed,NORMAL_BLEND_IN,NORMAL_BLEND_OUT,-1)
CLOSE_SEQUENCE_TASK(SequenceIndex)
TASK_PERFORM_SEQUENCE(pedCharmPed, SequenceIndex)
CLEAR_SEQUENCE_TASK(SequenceIndex)
charm_minigame_data.iTaskDelayTimer = GET_GAME_TIMER()
charm_minigame_data.e_charm_ped_state = CPS_WAITING_FOR_STATE
ENDIF
ENDIF
ENDIF
BREAK
CASE CPS_NONE
BREAK
ENDSWITCH
ENDPROC
//INTERACTION_ANIM_TYPE_IN_CAR,
//INTERACTION_ANIM_TYPE_CREW,
//INTERACTION_ANIM_TYPE_PLAYER,
//INTERACTION_ANIM_TYPE_SPECIAL,
///#IF FEATURE_POINTING_INTERACTIONS
//INTERACTION_ANIM_TYPE_POINT,
//#ENDIF
//MAX_NUM_PLAYER_INTERACTION_TYPES
INT iGestureType
INT iGestureAnim
CREW_INTERACTIONS eCrewGesture
PLAYER_INTERACTIONS eInteractionGesture
FUNC BOOL IS_PLAYER_GESTURE_SUITABLE()
IF IS_ANY_INTERACTION_ANIM_PLAYING()
GET_CURRENTLY_PLAYING_INTERACTION(iGestureType,iGestureAnim)
IF iGestureType = 0 OR iGestureType = 1 OR iGestureType = 2 OR iGestureType = 3 OR iGestureType = 4 OR iGestureType = 5
//CREW INTERACTIONS
IF iGestureType = 1
eCrewGesture = INT_TO_ENUM(CREW_INTERACTIONS,iGestureAnim)
IF eCrewGesture != CREW_INTERACTION_UP_YOURS
//OR eCrewGesture != CREW_INTERACTION_FINGER
RETURN TRUE
ENDIF
ENDIF
IF iGestureType = 2
eInteractionGesture = INT_TO_ENUM(PLAYER_INTERACTIONS,iGestureAnim)
IF eInteractionGesture != PLAYER_INTERACTION_FINGER
RETURN TRUE
ENDIF
ENDIF
IF iGestureType = 3
RETURN TRUE
ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
FUNC BOOL IS_PLAYER_GESTURE_SPECIFIC()
IF IS_ANY_INTERACTION_ANIM_PLAYING()
GET_CURRENTLY_PLAYING_INTERACTION(iGestureType,iGestureAnim)
IF iGestureType = 2
eInteractionGesture = INT_TO_ENUM(PLAYER_INTERACTIONS,iGestureAnim)
IF eInteractionGesture = PLAYER_INTERACTION_KNUCKLE_CRUNCH
OR eInteractionGesture = PLAYER_INTERACTION_SLOW_CLAP
OR eInteractionGesture = PLAYER_INTERACTION_FACE_PALM
OR eInteractionGesture = PLAYER_INTERACTION_THUMBS_UP
OR eInteractionGesture = PLAYER_INTERACTION_WANK
OR eInteractionGesture = PLAYER_INTERACTION_AIR_SHAGGING
OR eInteractionGesture = PLAYER_INTERACTION_SALUTE
OR eInteractionGesture = PLAYER_INTERACTION_AIR_GUITAR
OR eInteractionGesture = PLAYER_INTERACTION_ROCK
OR eInteractionGesture = PLAYER_INTERACTION_PHOTOGRAPHY
OR eInteractionGesture = PLAYER_INTERACTION_BLOW_KISS
OR eInteractionGesture = PLAYER_INTERACTION_JAZZ_HANDS
OR eInteractionGesture = PLAYER_INTERACTION_NOSE_PICK
OR eInteractionGesture = PLAYER_INTERACTION_WAVE
OR eInteractionGesture = PLAYER_INTERACTION_SURRENDER
OR eInteractionGesture = PLAYER_INTERACTION_SHUSH
OR eInteractionGesture = PLAYER_INTERACTION_DOCK
RETURN TRUE
ENDIF
#IF FEATURE_INTERACTIONS_ARMY
IF eInteractionGesture = PLAYER_INTERACTION_UP_YOURS
OR eInteractionGesture = PLAYER_INTERACTION_NO_WAY
//OR eInteractionGesture = PLAYER_INTERACTION_DANCE
RETURN TRUE
ENDIF
#ENDIF
ENDIF
ENDIF
RETURN FALSE
ENDFUNC
PROC RUN_CHARM_PED_MINIGAME(PED_INDEX pedCharmPed ,S_CHARM_MINIGAME_DATA &charm_minigame_data)
VEHICLE_INDEX vehTemp
PRINTLN("[RUN_CHARM_PED_MINIGAME] i_this_charm_minigame: ")PRINTLN(charm_minigame_data.i_this_charm_minigame)
MANAGE_CHARM_PED_ACTIONS(pedCharmPed,charm_minigame_data)
// Speirs commented out to fix NT (1865642), showHUD doesn't seem to be set anywhere
// IF charm_minigame_data.showHUD
IF charm_minigame_data.i_this_charm_minigame > 2
IF charm_minigame_data.fCharmLevel < charm_minigame_data.fDesiredCharmLevel
charm_minigame_data.fCharmLevel = charm_minigame_data.fCharmLevel + 0.8 //0.2
PRINTLN("[RUN_CHARM_PED_MINIGAME] matching fCharmLevel to fDeseiredCharmLevel")
ENDIF
DRAW_GENERIC_METER(ROUND(charm_minigame_data.fCharmLevel), 100, "MC_LIKE_L", HUD_COLOUR_YELLOW, -1, HUDORDER_DONTCARE, -1, -1, FALSE, TRUE)
PRINTLN("[RUN_CHARM_PED_MINIGAME] charm_minigame_data.fCharmLevel: ")PRINTLN(charm_minigame_data.fCharmLevel)
PRINTLN("[RUN_CHARM_PED_MINIGAME] charm_minigame_data.fDesiredCharmLevel: ")PRINTLN(charm_minigame_data.fDesiredCharmLevel)
ENDIF
// ENDIF
SWITCH charm_minigame_data.i_this_charm_minigame
//SET UP DATA AND ADD PED FOR DIALOGUE
CASE 0
REQUEST_CHARM_MINIGAME_ASSETS()
IF HAVE_CHARM_MINIGAME_ASSETS_LOADED()
charm_minigame_data.e_charm_ped_state = CPS_WAITING
sVVData.iStandardPrice = 0
ADD_PED_FOR_DIALOGUE(sSpeech, 6, pedCharmPed, "HEISTMANAGER")
charm_minigame_data.bShownHelp = FALSE
charm_minigame_data.i_this_charm_minigame ++
ENDIF
BREAK
CASE 1
IF charm_minigame_data.bShownHelp = FALSE
IF NOT IS_PED_INJURED(pedCharmPed)
IF GET_DISTANCE_BETWEEN_COORDS(GET_ENTITY_COORDS(PLAYER_PED_ID()),GET_ENTITY_COORDS(pedCharmPed)) < 20
PRINT_HELP("MC_CHARM_1")
charm_minigame_data.bShownHelp = TRUE
ENDIF
ENDIF
ENDIF
//CHECK PLAYER IN VEHICLE
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
vehTemp = GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())
IF NOT IS_PED_INJURED(pedCharmPed)
IF IS_ENTITY_AT_ENTITY(vehTemp, pedCharmPed,<<8,8,8>>)
PRINT_HELP("MC_CHARM_2")
charm_minigame_data.i_this_charm_minigame ++
ENDIF
ENDIF
ELSE
IF NOT IS_PED_INJURED(pedCharmPed)
IF IS_ENTITY_AT_ENTITY(PLAYER_PED_ID(), pedCharmPed,<<5,5,5>>)
IF IS_PLAYER_IN_FRONT_OF_CHARM_PED(PLAYER_ID(),pedCharmPed)
IF NOT IS_THIS_HELP_MESSAGE_BEING_DISPLAYED("MC_CHARM_2")
PRINT_HELP("MC_CHARM_2")
ENDIF
charm_minigame_data.i_this_charm_minigame ++
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
CASE 2
GET_PLAYER_VEHICLE_VALUE(pedCharmPed,charm_minigame_data)
IF sVVData.iStandardPrice > 0
OR charm_minigame_data.bPlayerHasNoVeh = TRUE
charm_minigame_data.i_this_charm_minigame ++
ENDIF
BREAK
CASE 3
PRINTLN("Vehicle Value:",sVVData.iStandardPrice)
IF charm_minigame_data.bPlayerHasNoVeh = TRUE
charm_minigame_data.sThisDialogue = "OBHSM11"
charm_minigame_data.e_charm_ped_state = CPS_COMMENTING_ON_NO_VEHICLE
charm_minigame_data.iIdleTimer = GET_GAME_TIMER()
charm_minigame_data.i_this_charm_minigame ++
//Where your wheels at bro, dialogue.
ELSE
charm_minigame_data.fDesiredCharmLevel = GET_CHARM_LEVEL_FOR_VEHICLE_VALUE(charm_minigame_data)
IF charm_minigame_data.fDesiredCharmLevel >= 30
charm_minigame_data.sThisDialogue = "OBHSM8"
ELIF charm_minigame_data.fDesiredCharmLevel < 30 AND charm_minigame_data.fDesiredCharmLevel > 14
charm_minigame_data.sThisDialogue = "OBHSM9"
ELSE
charm_minigame_data.sThisDialogue = "OBHSM10"
ENDIF
charm_minigame_data.e_charm_ped_state = CPS_COMMENTING_ON_VEHICLE
charm_minigame_data.iIdleTimer = GET_GAME_TIMER()
charm_minigame_data.i_this_charm_minigame ++
ENDIF
BREAK
CASE 4
IF charm_minigame_data.e_charm_ped_state = CPS_WAITING
OR MANAGE_CHARM_MINIGAME_TIMER(charm_minigame_data.iIdleTimer,10000) //time out timer
IF NOT IS_PED_INJURED(pedCharmPed)
IF NOT IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
IF IS_ENTITY_AT_ENTITY(PLAYER_PED_ID(), pedCharmPed,<<5,5,5>>)
IF IS_PLAYER_IN_FRONT_OF_CHARM_PED(PLAYER_ID(),pedCharmPed)
GET_PLAYER_CLOTHES_VALUE(charm_minigame_data)
charm_minigame_data.iOutfitCost = 10000
charm_minigame_data.e_charm_ped_state = CPS_WAITING
charm_minigame_data.i_this_charm_minigame ++
ENDIF
ENDIF
ENDIF
ENDIF
ENDIF
BREAK
CASE 5
PRINTLN("[RUN_CHARM_PED_MINIGAME] charm_minigame_data.iOutfitCost")PRINTLN(charm_minigame_data.iOutfitCost)
GET_PLAYER_CLOTHES_VALUE(charm_minigame_data)
IF charm_minigame_data.e_charm_ped_state = CPS_WAITING
IF charm_minigame_data.iOutfitCost > 0
IF GET_CHARM_LEVEL_FOR_CURRENT_CLOTHING(charm_minigame_data) >= 30
charm_minigame_data.sThisDialogue = "OBHSM11"
ELIF GET_CHARM_LEVEL_FOR_CURRENT_CLOTHING(charm_minigame_data) < 30 AND GET_CHARM_LEVEL_FOR_CURRENT_CLOTHING(charm_minigame_data) > 10
charm_minigame_data.sThisDialogue = "OBHSM12"
ELIF GET_CHARM_LEVEL_FOR_CURRENT_CLOTHING(charm_minigame_data) < 10
charm_minigame_data.sThisDialogue = "OBHSM13"
ENDIF
//Add in mask / naked or weird later "OBHSM14"
charm_minigame_data.e_charm_ped_state = CPS_COMMENTING_ON_CLOTHES
charm_minigame_data.fDesiredCharmLevel = charm_minigame_data.fDesiredCharmLevel + GET_CHARM_LEVEL_FOR_CURRENT_CLOTHING(charm_minigame_data)
charm_minigame_data.iSpeechTimer = GET_GAME_TIMER()
charm_minigame_data.i_this_charm_minigame ++
ENDIF
ENDIF
BREAK
CASE 6
IF NETWORK_IS_PLAYER_TALKING(PLAYER_ID())
IF charm_minigame_data.e_charm_ped_state = CPS_WAITING
charm_minigame_data.sThisDialogue = "OBHSM16"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
ENDIF
PRINTLN("[RUN_CHARM_PED_MINIGAME] player talking")
charm_minigame_data.iSpeechTimer = GET_GAME_TIMER()
charm_minigame_data.fDesiredCharmLevel = charm_minigame_data.fDesiredCharmLevel + 0.112
ELSE
IF IS_ANY_INTERACTION_ANIM_PLAYING()
IF IS_PLAYER_GESTURE_SPECIFIC()
IF charm_minigame_data.e_charm_ped_state = CPS_WAITING
IF eInteractionGesture = PLAYER_INTERACTION_AIR_GUITAR
IF NOT IS_BIT_SET(charm_minigame_data.bsGesturesPlayed,bs_gest_air_guitar)
charm_minigame_data.sThisDialogue = "OBHSM51"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
SET_BIT(charm_minigame_data.bsGesturesPlayed,bs_gest_air_guitar)
ELSE
charm_minigame_data.sThisDialogue = "OBHSM64"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
ENDIF
ENDIF
IF eInteractionGesture = PLAYER_INTERACTION_BLOW_KISS
IF NOT IS_BIT_SET(charm_minigame_data.bsGesturesPlayed,bs_gest_blow_kiss )
charm_minigame_data.sThisDialogue = "OBHSM56"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
SET_BIT(charm_minigame_data.bsGesturesPlayed,bs_gest_blow_kiss )
ELSE
charm_minigame_data.sThisDialogue = "OBHSM64"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
ENDIF
ENDIF
// #IF FEATURE_INTERACTIONS_ARMY
// IF eInteractionGesture = PLAYER_INTERACTION_DANCE
// IF NOT IS_BIT_SET(charm_minigame_data.bsGesturesPlayed,bs_gest_dancing )
// charm_minigame_data.sThisDialogue = "OBHSM55"
// charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
// SET_BIT(charm_minigame_data.bsGesturesPlayed,bs_gest_dancing)
// ELSE
// charm_minigame_data.sThisDialogue = "OBHSM64"
// charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
// ENDIF
// ENDIF
// #ENDIF
IF eInteractionGesture = PLAYER_INTERACTION_DOCK
IF NOT IS_BIT_SET(charm_minigame_data.bsGesturesPlayed,bs_gest_dock )
charm_minigame_data.sThisDialogue = "OBHSM62"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
SET_BIT(charm_minigame_data.bsGesturesPlayed,bs_gest_dock)
ELSE
charm_minigame_data.sThisDialogue = "OBHSM64"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
ENDIF
ENDIF
#IF FEATURE_INTERACTIONS_ARMY
IF eInteractionGesture = PLAYER_INTERACTION_UP_YOURS
IF NOT IS_BIT_SET(charm_minigame_data.bsGesturesPlayed,bs_gest_fuck_you )
charm_minigame_data.sThisDialogue = "OBHSM50"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
SET_BIT(charm_minigame_data.bsGesturesPlayed,bs_gest_fuck_you)
ELSE
charm_minigame_data.sThisDialogue = "OBHSM64"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
ENDIF
ENDIF
#ENDIF
//
IF eInteractionGesture = PLAYER_INTERACTION_SURRENDER
IF NOT IS_BIT_SET(charm_minigame_data.bsGesturesPlayed,bs_gest_hands_up )
charm_minigame_data.sThisDialogue = "OBHSM60"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
SET_BIT(charm_minigame_data.bsGesturesPlayed,bs_gest_hands_up)
ELSE
charm_minigame_data.sThisDialogue = "OBHSM64"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
ENDIF
ENDIF
IF eInteractionGesture = PLAYER_INTERACTION_JAZZ_HANDS
IF NOT IS_BIT_SET(charm_minigame_data.bsGesturesPlayed,bs_gest_jazz_hands )
charm_minigame_data.sThisDialogue = "OBHSM57"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
SET_BIT(charm_minigame_data.bsGesturesPlayed,bs_gest_jazz_hands)
ELSE
charm_minigame_data.sThisDialogue = "OBHSM64"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
ENDIF
ENDIF
IF eInteractionGesture = PLAYER_INTERACTION_KNUCKLE_CRUNCH
IF NOT IS_BIT_SET(charm_minigame_data.bsGesturesPlayed,bs_gest_knuckle_crunch)
charm_minigame_data.sThisDialogue = "OBHSM44"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
SET_BIT(charm_minigame_data.bsGesturesPlayed,bs_gest_knuckle_crunch)
ELSE
charm_minigame_data.sThisDialogue = "OBHSM64"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
ENDIF
ENDIF
#IF FEATURE_INTERACTIONS_ARMY
IF eInteractionGesture = PLAYER_INTERACTION_NO_WAY
IF NOT IS_BIT_SET(charm_minigame_data.bsGesturesPlayed,bs_gest_no_way)
charm_minigame_data.sThisDialogue = "OBHSM53"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
SET_BIT(charm_minigame_data.bsGesturesPlayed,bs_gest_no_way)
ELSE
charm_minigame_data.sThisDialogue = "OBHSM64"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
ENDIF
ENDIF
#ENDIF
IF eInteractionGesture = PLAYER_INTERACTION_NOSE_PICK
IF NOT IS_BIT_SET(charm_minigame_data.bsGesturesPlayed,bs_gest_nose_pick)
charm_minigame_data.sThisDialogue = "OBHSM58"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
SET_BIT(charm_minigame_data.bsGesturesPlayed,bs_gest_nose_pick)
ELSE
charm_minigame_data.sThisDialogue = "OBHSM64"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
ENDIF
ENDIF
IF eInteractionGesture = PLAYER_INTERACTION_PHOTOGRAPHY
IF NOT IS_BIT_SET(charm_minigame_data.bsGesturesPlayed,bs_gest_photos)
charm_minigame_data.sThisDialogue = "OBHSM54"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
SET_BIT(charm_minigame_data.bsGesturesPlayed,bs_gest_photos)
ELSE
charm_minigame_data.sThisDialogue = "OBHSM64"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
ENDIF
ENDIF
IF eInteractionGesture = PLAYER_INTERACTION_ROCK
IF NOT IS_BIT_SET(charm_minigame_data.bsGesturesPlayed,bs_gest_rock)
charm_minigame_data.sThisDialogue = "OBHSM52"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
SET_BIT(charm_minigame_data.bsGesturesPlayed,bs_gest_rock)
ELSE
charm_minigame_data.sThisDialogue = "OBHSM64"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
ENDIF
ENDIF
IF eInteractionGesture = PLAYER_INTERACTION_SALUTE
IF NOT IS_BIT_SET(charm_minigame_data.bsGesturesPlayed,bs_gest_salute)
charm_minigame_data.sThisDialogue = "OBHSM49"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
SET_BIT(charm_minigame_data.bsGesturesPlayed,bs_gest_salute)
ELSE
charm_minigame_data.sThisDialogue = "OBHSM64"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
ENDIF
ENDIF
IF eInteractionGesture = PLAYER_INTERACTION_SHUSH
IF NOT IS_BIT_SET(charm_minigame_data.bsGesturesPlayed,bs_gest_shh)
charm_minigame_data.sThisDialogue = "OBHSM61"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
SET_BIT(charm_minigame_data.bsGesturesPlayed,bs_gest_shh)
ELSE
charm_minigame_data.sThisDialogue = "OBHSM64"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
ENDIF
ENDIF
IF eInteractionGesture = PLAYER_INTERACTION_SLOW_CLAP
IF NOT IS_BIT_SET(charm_minigame_data.bsGesturesPlayed,bs_gest_slow_clap_face_palm)
charm_minigame_data.sThisDialogue = "OBHSM45"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
SET_BIT(charm_minigame_data.bsGesturesPlayed,bs_gest_slow_clap_face_palm)
ELSE
charm_minigame_data.sThisDialogue = "OBHSM64"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
ENDIF
ENDIF
IF eInteractionGesture = PLAYER_INTERACTION_AIR_SHAGGING
IF NOT IS_BIT_SET(charm_minigame_data.bsGesturesPlayed,bs_gest_thrusting)
charm_minigame_data.sThisDialogue = "OBHSM48"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
SET_BIT(charm_minigame_data.bsGesturesPlayed,bs_gest_thrusting)
ELSE
charm_minigame_data.sThisDialogue = "OBHSM64"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
ENDIF
ENDIF
IF eInteractionGesture = PLAYER_INTERACTION_THUMBS_UP
IF NOT IS_BIT_SET(charm_minigame_data.bsGesturesPlayed,bs_gest_thumbs_up)
charm_minigame_data.sThisDialogue = "OBHSM46"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
SET_BIT(charm_minigame_data.bsGesturesPlayed,bs_gest_thumbs_up)
ELSE
charm_minigame_data.sThisDialogue = "OBHSM64"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
ENDIF
ENDIF
IF eInteractionGesture = PLAYER_INTERACTION_WANK
IF NOT IS_BIT_SET(charm_minigame_data.bsGesturesPlayed,bs_gest_wanking)
charm_minigame_data.sThisDialogue = "OBHSM47"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
SET_BIT(charm_minigame_data.bsGesturesPlayed,bs_gest_wanking)
ELSE
charm_minigame_data.sThisDialogue = "OBHSM64"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
ENDIF
ENDIF
IF eInteractionGesture = PLAYER_INTERACTION_WAVE
IF NOT IS_BIT_SET(charm_minigame_data.bsGesturesPlayed,bs_gest_wave)
charm_minigame_data.sThisDialogue = "OBHSM59"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
SET_BIT(charm_minigame_data.bsGesturesPlayed,bs_gest_wave)
ELSE
charm_minigame_data.sThisDialogue = "OBHSM64"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
ENDIF
ENDIF
ENDIF
charm_minigame_data.fDesiredCharmLevel = charm_minigame_data.fDesiredCharmLevel + 0.09
ELSE
IF charm_minigame_data.e_charm_ped_state = CPS_WAITING
charm_minigame_data.sThisDialogue = "OBHSM63"
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED
ENDIF
charm_minigame_data.fDesiredCharmLevel = charm_minigame_data.fDesiredCharmLevel + 0.09
ENDIF
ENDIF
//Gradually increase over time while the player isn't doing anything
IF MANAGE_CHARM_MINIGAME_TIMER(charm_minigame_data.iIdleTimer,1000)
PRINTLN("[RUN_CHARM_PED_MINIGAME] increasing desire level after non action")
charm_minigame_data.fDesiredCharmLevel = charm_minigame_data.fDesiredCharmLevel + 0.7
charm_minigame_data.iIdleTimer = GET_GAME_TIMER()
ENDIF
IF MANAGE_CHARM_MINIGAME_TIMER(charm_minigame_data.iSpeechTimer,GET_RANDOM_INT_IN_RANGE(15000,25000))
IF charm_minigame_data.e_charm_ped_state = CPS_WAITING
charm_minigame_data.sThisDialogue = "OBHSM17"
charm_minigame_data.iSpeechTimer = GET_GAME_TIMER()
charm_minigame_data.e_charm_ped_state = CPS_BEING_CHARMED_NO_SPEECH
ENDIF
ENDIF
ENDIF
IF charm_minigame_data.fCharmLevel >= 100
charm_minigame_data.sThisDialogue = "OBHSM29"
charm_minigame_data.e_charm_ped_state = CPS_CHARMED
charm_minigame_data.i_this_charm_minigame ++
ENDIF
BREAK
CASE 7
IF charm_minigame_data.e_charm_ped_state = CPS_WAITING
charm_minigame_data.bShownHelp = FALSE
charm_minigame_data.b_beat_charm_minigame = TRUE
charm_minigame_data.i_this_charm_minigame ++
ENDIF
BREAK
ENDSWITCH
ENDPROC