//╒═════════════════════════════════════════════════════════════════════════════╕ //│ 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