/*********************************** * Name: MP_Unlocks.sc * Author: Ryan Baker / Chris McMahon * Date: 02/09/2013 ***********************************/ USING "PauseMenu_public.sch" USING "net_include.sch" USING "Transition_Common.sch" USING "PauseMenu_mp_public.sch" USING "FMMC_Cloud_Loader.sch" USING "commands_pad.sch" // ************************************************************ // ******************** MAIN SCRIPT LOOP ********************** // ************************************************************ //Unlocks Contstants CONST_INT PM_MAX_SIZE_GENERAL_UNLOCKS 13 CONST_INT PM_MAX_SIZE_CONTENT_UNLOCKS 50 CONST_INT PM_MAX_SIZE_PROGRESS_UNLOCKS 49 CONST_INT PM_D2_GENERAL_UNLOCKS 0 CONST_INT PM_D2_PROGRESS_UNLOCKS 1 CONST_INT PM_D2_CONTENT_UNLOCKS 2 CONST_INT FIRST_COLUMN 0 CONST_INT SECOND_COLUMN 1 CONST_INT THIRD_COLUMN 2 CONST_INT SETTING_COLUMN 4 INT STATS_CATEGORY_MENU_ID = (ENUM_TO_INT(MENU_UNIQUE_ID_STATS_CATEGORY) + PREF_OPTIONS_THRESHOLD) INT STATS_LISTITEM_MENU_ID = (ENUM_TO_INT(MENU_UNIQUE_ID_STATS_LISTITEM) + PREF_OPTIONS_THRESHOLD) //Unlocks Variables BOOL bShouldQuitUnlocksScript = FALSE SCRIPT_TIMER iRStickTimer INT iRStickTimerDelay INT iCurrentMenu BOOL bCanScroll BOOL bDataAvailable BOOL bInitMenu CONST_INT MASKS_IN_RETAIL 25 CONST_INT HAIR_IN_RETAIL 76 CONST_INT MAKEUP_IN_RETAIL 29 CONST_INT TATTOOS_IN_RETAIL 67 CONST_INT AWARDS_IN_RETAIL 85 CONST_INT MASKS_IN_BEACH_BUM 0 CONST_INT HAIR_IN_BEACH_BUM 4 CONST_INT MAKEUP_IN_BEACH_BUM 0 CONST_INT TATTOOS_IN_BEACH_BUM 16 CONST_INT AWARDS_IN_BEACH_BUM 0 CONST_INT MASKS_IN_VALENTINE 7 CONST_INT HAIR_IN_VALENTINE 1 CONST_INT MAKEUP_IN_VALENTINE 0 CONST_INT TATTOOS_IN_VALENTINE 0 CONST_INT AWARDS_IN_VALENTINE 0 CONST_INT MASKS_IN_BUSINESS 29 CONST_INT HAIR_IN_BUSINESS 4 CONST_INT MAKEUP_IN_BUSINESS 0 CONST_INT TATTOOS_IN_BUSINESS 16 CONST_INT AWARDS_IN_BUSINESS 0 CONST_INT MASKS_IN_HIPSTER 8 CONST_INT HAIR_IN_HIPSTER 4 CONST_INT MAKEUP_IN_HIPSTER 0 CONST_INT TATTOOS_IN_HIPSTER 49 CONST_INT AWARDS_IN_HIPSTER 4 CONST_INT MASKS_IN_INDEPENDENCE 12 CONST_INT HAIR_IN_INDEPENDENCE 1 CONST_INT MAKEUP_IN_INDEPENDENCE 1 CONST_INT TATTOOS_IN_INDEPENDENCE 0 CONST_INT AWARDS_IN_INDEPENDENCE 0 CONST_INT MASKS_IN_PILOT_SCHOOL 1 CONST_INT HAIR_IN_PILOT_SCHOOL 0 CONST_INT MAKEUP_IN_PILOT_SCHOOL 0 CONST_INT TATTOOS_IN_PILOT_SCHOOL 0 CONST_INT AWARDS_IN_PILOT_SCHOOL 0 CONST_INT MASKS_IN_LTS 10 CONST_INT HAIR_IN_LTS 0 CONST_INT MAKEUP_IN_LTS 0 CONST_INT TATTOOS_IN_LTS 0 CONST_INT AWARDS_IN_LTS 0 CONST_INT MASKS_IN_CHRISTMAS14 4 CONST_INT HAIR_IN_CHRISTMAS14 0 CONST_INT MAKEUP_IN_CHRISTMAS14 0 CONST_INT TATTOOS_IN_CHRISTMAS14 30 CONST_INT AWARDS_IN_CHRISTMAS14 0 CONST_INT MASKS_IN_HEISTS 109 CONST_INT HAIR_IN_HEISTS 16 CONST_INT MAKEUP_IN_HEISTS 0 CONST_INT TATTOOS_IN_HEISTS 2 CONST_INT MAKEUP_IN_HALLOWEEN 30 INT AWARDS_IN_HEISTS = 39 //PURPOSE: Returns the an INT for how much of the unlock the player has achieved FUNC INT GET_PM_UNLOCK_GENERAL_ACHIEVED(INT iNum) INT iReturnCount SWITCH iNum CASE 0 RETURN g_FMMC_ROCKSTAR_CREATED.iTypePlayedCount[FMMC_TYPE_RACE] CASE 1 RETURN g_FMMC_ROCKSTAR_CREATED.iTypePlayedCount[FMMC_TYPE_DEATHMATCH] CASE 2 RETURN g_FMMC_ROCKSTAR_CREATED.iTypePlayedCount[FMMC_TYPE_BASE_JUMP] CASE 3 RETURN g_FMMC_ROCKSTAR_CREATED.iTypePlayedCount[FMMC_TYPE_SURVIVAL] CASE 4 RETURN g_FMMC_ROCKSTAR_CREATED.iTypePlayedCount[FMMC_TYPE_MISSION] CASE 5 RETURN GET_MP_INT_CHARACTER_STAT(MP_STAT_NO_WEAPONS_UNLOCK) CASE 6 RETURN GET_MP_INT_CHARACTER_STAT(MP_STAT_NO_WEAPON_MODS_UNLOCK) CASE 7 RETURN GET_MP_INT_CHARACTER_STAT(MP_STAT_NO_MASKS_UNLOCK) - 1 CASE 8 RETURN GET_MP_INT_CHARACTER_STAT(MP_STAT_NO_HAIR_UNLOCK) CASE 9 RETURN GET_MP_INT_CHARACTER_STAT(MP_STAT_NO_MAKEUP_UNLOCK) CASE 10 RETURN GET_MP_INT_CHARACTER_STAT(MP_STAT_NO_TATTOOS_UNLOCK) CASE 11 RETURN GET_MP_INT_CHARACTER_STAT(MP_STAT_CHAR_FM_PLAT_AWARD_COUNT) CASE 12 IF GET_MP_BOOL_CHARACTER_STAT(MP_STAT_PILOT_ASPASSEDLESSON_0) iReturnCount++ ENDIF IF GET_MP_BOOL_CHARACTER_STAT(MP_STAT_PILOT_ASPASSEDLESSON_1) iReturnCount++ ENDIF IF GET_MP_BOOL_CHARACTER_STAT(MP_STAT_PILOT_ASPASSEDLESSON_2) iReturnCount++ ENDIF IF GET_MP_BOOL_CHARACTER_STAT(MP_STAT_PILOT_ASPASSEDLESSON_3) iReturnCount++ ENDIF IF GET_MP_BOOL_CHARACTER_STAT(MP_STAT_PILOT_ASPASSEDLESSON_4) iReturnCount++ ENDIF IF GET_MP_BOOL_CHARACTER_STAT(MP_STAT_PILOT_ASPASSEDLESSON_5) iReturnCount++ ENDIF IF GET_MP_BOOL_CHARACTER_STAT(MP_STAT_PILOT_ASPASSEDLESSON_6) iReturnCount++ ENDIF IF GET_MP_BOOL_CHARACTER_STAT(MP_STAT_PILOT_ASPASSEDLESSON_7) iReturnCount++ ENDIF IF GET_MP_BOOL_CHARACTER_STAT(MP_STAT_PILOT_ASPASSEDLESSON_8) iReturnCount++ ENDIF IF GET_MP_BOOL_CHARACTER_STAT(MP_STAT_PILOT_ASPASSEDLESSON_9) iReturnCount++ ENDIF RETURN iReturnCount BREAK ENDSWITCH RETURN -1 ENDFUNC //PURPOSE: Returns the an INT for the total needed for the unlock FUNC INT GET_PM_UNLOCK_GENERAL_TOTAL(INT iNum) INT iAddWeapon //BOOL bMale = IS_PLAYER_MALE(PLAYER_ID()) SWITCH iNum CASE 0 RETURN g_FMMC_ROCKSTAR_CREATED.iTypeCount[FMMC_TYPE_RACE] CASE 1 RETURN g_FMMC_ROCKSTAR_CREATED.iTypeCount[FMMC_TYPE_DEATHMATCH] CASE 2 RETURN g_FMMC_ROCKSTAR_CREATED.iTypeCount[FMMC_TYPE_BASE_JUMP] CASE 3 RETURN g_FMMC_ROCKSTAR_CREATED.iTypeCount[FMMC_TYPE_SURVIVAL] CASE 4 RETURN g_FMMC_ROCKSTAR_CREATED.iTypeCount[FMMC_TYPE_MISSION] CASE 5 // Weapons IF IS_SPECIAL_EDITION_GAME() OR IS_COLLECTORS_EDITION_GAME() OR IS_PC_VERSION() OR IS_PLAYSTATION_PLATFORM() OR IS_XBOX_PLATFORM() iAddWeapon +=2 iAddWeapon +=2 iAddWeapon +=1 iAddWeapon +=7 IF g_sMPTunables.bENABLE_DOUBLE_ACTION_REVOLVER iAddWeapon +=1 ENDIF IF g_sMPTunables.bUNLOCK_SERVICE_CARBINE_FOR_PURCHASE iAddWeapon +=1 ENDIF RETURN 47+iAddWeapon // 27 Base, 19 DLC ELSE RETURN 44 // 27 Base, 17 DLC ENDIF BREAK CASE 6 // Weapon Mods IF NETWORK_HAS_SOCIAL_CLUB_ACCOUNT() //GET_MP_BOOL_PLAYER_STAT(MPPLY_XP_REWARD_PLAYER_IN_CREW) // IF in social club OR IS_SPECIAL_EDITION_GAME() OR IS_COLLECTORS_EDITION_GAME() iAddWeapon = 0 iAddWeapon +=19 iAddWeapon +=8 RETURN g_sMPTunables.itotalnumberofweaponmods +iAddWeapon//246 ELSE RETURN g_sMPTunables.itotalnumberofweaponmods //246 // non social club total ENDIF BREAK // MP_STAT_NO_MASKS_UNLOCK CASE 7 RETURN MASKS_IN_RETAIL+MASKS_IN_BEACH_BUM+MASKS_IN_VALENTINE+MASKS_IN_BUSINESS+MASKS_IN_HIPSTER+MASKS_IN_INDEPENDENCE+MASKS_IN_PILOT_SCHOOL+MASKS_IN_LTS+MASKS_IN_CHRISTMAS14+MASKS_IN_HEISTS // MP_STAT_NO_HAIR_UNLOCK CASE 8 RETURN HAIR_IN_RETAIL+HAIR_IN_BEACH_BUM+HAIR_IN_VALENTINE+HAIR_IN_BUSINESS+HAIR_IN_HIPSTER+HAIR_IN_INDEPENDENCE+HAIR_IN_PILOT_SCHOOL+HAIR_IN_LTS+HAIR_IN_CHRISTMAS14+HAIR_IN_HEISTS // MP_STAT_NO_MAKEUP_UNLOCK CASE 9 RETURN MAKEUP_IN_RETAIL+MAKEUP_IN_BEACH_BUM+MAKEUP_IN_VALENTINE+MAKEUP_IN_BUSINESS+MAKEUP_IN_HIPSTER+MAKEUP_IN_INDEPENDENCE+MAKEUP_IN_PILOT_SCHOOL+MAKEUP_IN_LTS+MAKEUP_IN_CHRISTMAS14+MAKEUP_IN_HEISTS+MAKEUP_IN_HALLOWEEN // MP_STAT_NO_TATTOOS_UNLOCK CASE 10 RETURN TATTOOS_IN_RETAIL+TATTOOS_IN_BEACH_BUM+TATTOOS_IN_VALENTINE+TATTOOS_IN_BUSINESS+TATTOOS_IN_HIPSTER+TATTOOS_IN_INDEPENDENCE+TATTOOS_IN_PILOT_SCHOOL+TATTOOS_IN_LTS+TATTOOS_IN_CHRISTMAS14+TATTOOS_IN_HEISTS // MP_STAT_NO_AWARDS_UNLOCK CASE 11 RETURN AWARDS_IN_RETAIL+AWARDS_IN_BEACH_BUM+AWARDS_IN_VALENTINE+AWARDS_IN_BUSINESS+AWARDS_IN_HIPSTER+AWARDS_IN_INDEPENDENCE+AWARDS_IN_PILOT_SCHOOL+AWARDS_IN_LTS+AWARDS_IN_CHRISTMAS14+AWARDS_IN_HEISTS // Pilot School Lessons CASE 12 RETURN 10 ENDSWITCH RETURN -1 ENDFUNC FUNC BOOL HAS_PLAYER_PLAYED_FLIGHT_SCHOOL() BOOL bPlayed bPlayed = FALSE IF GET_MP_INT_CHARACTER_STAT(MP_STAT_CRPILOTSCHOOL) > 0 bPlayed = TRUE ENDIF RETURN bPlayed ENDFUNC FUNC BOOL HAS_PLAYER_COMPLETED_A_HEIST_FINALE() BOOL bPlayed bPlayed = FALSE IF GET_MP_INT_CHARACTER_AWARD(MP_AWARD_FINISH_HEISTS) > 0 bPlayed = TRUE ENDIF RETURN bPlayed ENDFUNC //PURPOSE: Returns the TRUE if the Job has been done FUNC BOOL GET_PM_UNLOCK_PROGRESS_BOOL(INT iNum) SWITCH iNum //GET_MP_INT_CHARACTER_STAT GET_MP_BOOL_CHARACTER_STAT CASE 0 RETURN GET_MP_BOOL_CHARACTER_STAT(MP_STAT_CL_RACE_MODDED_CAR) CASE 1 RETURN GET_MP_BOOL_CHARACTER_STAT(MP_STAT_CL_DRIVE_RALLY) CASE 2 RETURN GET_MP_BOOL_CHARACTER_STAT(MP_STAT_CL_PLAY_GTA_RACE) CASE 3 RETURN GET_PACKED_STAT_BOOL(PACKED_MP_HAS_PLAYER_WON_A_LAND_RACE) CASE 4 RETURN GET_MP_BOOL_CHARACTER_STAT(MP_STAT_CL_PLAY_BOAT_RACE) CASE 5 RETURN (GET_MP_INT_CHARACTER_STAT(MP_STAT_CRBASEJUMP) > 0) CASE 6 RETURN (GET_MP_INT_CHARACTER_STAT(MP_STAT_CRDM) > 0) CASE 7 RETURN GET_MP_BOOL_CHARACTER_STAT(MP_STAT_CL_PLAY_TEAM_DM) CASE 8 RETURN GET_PACKED_STAT_BOOL(PACKED_MP_BOUGHT_HELISTRIKES) // (GET_MP_INT_CHARACTER_STAT(MP_STAT_MONEY_SPENT_ON_HELI_STRIKE) > 0) CASE 9 RETURN GET_MP_BOOL_CHARACTER_STAT(MP_STAT_CL_CALL_MERCENARIES) CASE 10 RETURN GET_MP_BOOL_CHARACTER_STAT(MP_STAT_CL_PHONE_MECH_DROP_CAR) CASE 11 RETURN GET_MP_BOOL_CHARACTER_STAT(MP_STAT_CL_GONE_OFF_RADAR) CASE 12 RETURN GET_PACKED_STAT_BOOL(PACKED_MP_BOUGHT_AIRSTRIKES) //FALSE //(GET_MP_INT_CHARACTER_STAT(MP_STAT_MONEY_SPENT_ON_AIRSTRIKES) > 0) CASE 13 RETURN GET_PACKED_STAT_BOOL(PACKED_MP_BOUGHT_CARMODS) //FALSE// (GET_MP_INT_CHARACTER_STAT(MP_STAT_MONEY_SPENT_CAR_MODS) > 0) CASE 14 RETURN GET_MP_BOOL_CHARACTER_STAT(MP_STAT_CL_FILL_TITAN) CASE 15 RETURN GET_MP_BOOL_CHARACTER_STAT(MP_STAT_CL_MOD_CAR_USING_APP) CASE 16 RETURN (GET_MP_INT_CHARACTER_AWARD(MP_AWARD_NO_HAIRCUTS) > 0) CASE 17 RETURN GET_PACKED_STAT_BOOL(PACKED_MP_BOUGHT_TATTOO) //FALSE// (GET_MP_INT_CHARACTER_STAT(MP_STAT_MONEY_SPENT_ON_TATTOOS) > 0) CASE 18 RETURN GET_PACKED_STAT_BOOL(PACKED_MP_BOUGHT_CLOTHES) //FALSE// (GET_MP_FLOAT_CHARACTER_STAT(MP_STAT_MONEY_SPENT_IN_CLOTHES) > 0) CASE 19 RETURN GET_PACKED_STAT_BOOL(PACKED_MP_BOUGHT_WEAPON_MODS) //FALSE//(GET_MP_INT_CHARACTER_STAT(MP_STAT_MONEY_SPENT_WEAPON_MODS) > 0) CASE 20 RETURN GET_MP_BOOL_CHARACTER_STAT(MP_STAT_CL_BUY_APPARTMENT) CASE 21 RETURN GET_PACKED_STAT_BOOL(PACKED_MP_SEND_MONEY_TO_PLAYER)// (GET_MP_INT_CHARACTER_STAT(MP_STAT_MONEY_SENT_TO_PLY) > 0) CASE 22 RETURN GET_MP_BOOL_CHARACTER_STAT(MP_STAT_CL_BUY_GARAGE) CASE 23 RETURN GET_MP_BOOL_CHARACTER_STAT(MP_STAT_CL_ENTER_FRIENDS_HOUSE) CASE 24 RETURN GET_MP_BOOL_CHARACTER_STAT(MP_STAT_CL_CALL_STRIPPER_HOUSE) CASE 25 RETURN GET_MP_BOOL_CHARACTER_STAT(MP_STAT_CL_CALL_FRIEND) CASE 26 RETURN GET_MP_BOOL_CHARACTER_STAT(MP_STAT_CL_W_WANTED_PLAYER_TV) CASE 27 RETURN GET_MP_BOOL_CHARACTER_STAT(MP_STAT_CL_PLAY_VEHICLE_DM) CASE 28 RETURN (GET_MP_INT_CHARACTER_STAT(MP_STAT_CRMISSION) > 0) CASE 29 RETURN GET_MP_BOOL_CHARACTER_STAT(MP_STAT_CL_PLAY_MISSION_CONTACT) CASE 30 RETURN (GET_MP_INT_CHARACTER_STAT(MP_STAT_CRGOLF) > 0) CASE 31 RETURN (GET_MP_INT_CHARACTER_STAT(MP_STAT_CRTENNIS) > 0) CASE 32 RETURN (GET_MP_INT_CHARACTER_STAT(MP_STAT_CRDARTS) > 0) CASE 33 RETURN (GET_MP_INT_CHARACTER_STAT(MP_STAT_CRSHOOTRNG) > 0) CASE 34 RETURN (GET_MP_INT_CHARACTER_STAT(MP_STAT_BETAMOUNT) > 0) CASE 35 RETURN GET_MP_BOOL_CHARACTER_STAT(MP_STAT_CL_PLAY_A_PLAYLIST) CASE 36 IF (GET_MP_INT_PLAYER_STAT(MPPLY_RACE_2_POINT_WINS) > 0) OR (GET_MP_INT_PLAYER_STAT(MPPLY_RACE_2_POINT_LOST) > 0) RETURN TRUE ELSE RETURN FALSE ENDIF BREAK CASE 37 RETURN GET_PACKED_STAT_BOOL(PACKED_MP_CHALLENGE_ONEONONEDM) //GET_MP_BOOL_CHARACTER_STAT(MP_STAT_CL_PLAY_ONE_ON_ONE_DM) CASE 38 RETURN GET_PACKED_STAT_BOOL(PACKED_MP_CHALLENGE_IMPROPTURACE) CASE 39 RETURN (GET_MP_INT_CHARACTER_STAT(MP_STAT_CRARMWREST) > 0) CASE 40 RETURN (GET_MP_INT_CHARACTER_STAT(MP_STAT_TOTAL_NO_SHOPS_HELD_UP) > 0) CASE 41 RETURN GET_PACKED_STAT_BOOL(PACKED_MP_WENT_TO_CINEMA) //FALSE//(GET_MP_INT_CHARACTER_STAT(MP_STAT_MONEY_SPENT_ON_CINEMA) > 0) CASE 42 RETURN GET_PACKED_STAT_BOOL(PACKED_MP_BOUGHT_A_LAPDANCE) //(GET_MP_INT_CHARACTER_STAT(MP_STAT_LAP_DANCED_BOUGHT) > 0) CASE 43 RETURN (GET_MP_INT_CHARACTER_STAT(MP_STAT_CR_GANGATTACK_CITY) > 0 OR GET_MP_INT_CHARACTER_STAT(MP_STAT_CR_GANGATTACK_COUNTRY)>0) CASE 44 RETURN GET_PACKED_STAT_BOOL(PACKED_MP_SPENT_BOUNTY)//(GET_MP_INT_CHARACTER_STAT(MP_STAT_MONEY_SPENT_ON_BOUNTY) > 0) CASE 45 RETURN GET_MP_BOOL_CHARACTER_STAT(MP_STAT_CL_SURV_A_BOUNTY) //CASE 46 RETURN (GET_MP_INT_CHARACTER_AWARD(MP_AWARD_SECURITY_CARS_ROBBED) > 0) CASE 46 RETURN GET_PACKED_STAT_BOOL(PACKED_MP_COLLECT_AMMO_DROP) CASE 47 RETURN HAS_PLAYER_PLAYED_FLIGHT_SCHOOL() // Flight School CASE 48 RETURN HAS_PLAYER_COMPLETED_A_HEIST_FINALE() // Heists ENDSWITCH RETURN FALSE ENDFUNC PROC ADD_GENERAL_UNLOCK_ITEM(INT& iItemCount, INT iNum1, INT iNum2) TEXT_LABEL_15 tlLabel = "PM_UGEN_T" tlLabel += iItemCount PM_SET_DATA_SLOT_FOR_STAT_WITH_TWO_NUMBERS(SECOND_COLUMN, iItemCount, STATS_LISTITEM_MENU_ID, iItemCount, tlLabel, "PM_UGEN_NUM", iNum1, iNum2) iItemCount++ ENDPROC PROC ADD_PROGRESS_UNLOCK_ITEM(INT& iItemCount, BOOL bYes)//, BOOL bUnlocks) TEXT_LABEL_15 tlLabel = "PM_UJOB_T" tlLabel += iItemCount MP_SET_DATA_SLOT_SETTING_YES_NO(SECOND_COLUMN, iItemCount, STATS_LISTITEM_MENU_ID, iItemCount, tlLabel, bYes, FALSE)//bUnlocks) iItemCount++ ENDPROC PROC ADD_CONTENT_UNLOCK_ITEM(INT& iItemCount, STRING tlLabel, BOOL bUnlocked) MP_SET_DATA_SLOT_SETTING_YES_NO(SECOND_COLUMN, iItemCount, STATS_LISTITEM_MENU_ID, iItemCount, tlLabel, bUnlocked, TRUE) iItemCount++ ENDPROC //Draw Unlocks Data FUNC BOOL UPDATE_ALL_LIST_ITEMS(BOOL &bThisDataAvailable) CPRINTLN(DEBUG_PAUSE_MENU, "[JA@PAUSEMENU] UPDATE_ALL_LIST_ITEMS - SET DATA SLOTS") SET_PM_HIGHLIGHT(FIRST_COLUMN, iCurrentMenu, FALSE, TRUE) CLEAR_PM_COLUMN(SECOND_COLUMN) INT iItemCount = 0 INT i INT tempachieved INT temptotal //Add list items for current tab SWITCH iCurrentMenu CASE PM_D2_GENERAL_UNLOCKS REPEAT PM_MAX_SIZE_GENERAL_UNLOCKS i tempachieved = GET_PM_UNLOCK_GENERAL_ACHIEVED(i) temptotal = GET_PM_UNLOCK_GENERAL_TOTAL(i) IF tempachieved > temptotal PRINTLN("UPDATE_ALL_LIST_ITEMS. the achieved has gone over the limit for ", i) PRINTLN("UPDATE_ALL_LIST_ITEMS. tempachieved = ", tempachieved) PRINTLN("UPDATE_ALL_LIST_ITEMS. temptotal = ", temptotal) temptotal = tempachieved ENDIF ADD_GENERAL_UNLOCK_ITEM(iItemCount, tempachieved, temptotal) ENDREPEAT BREAK CASE PM_D2_PROGRESS_UNLOCKS REPEAT PM_MAX_SIZE_PROGRESS_UNLOCKS i ADD_PROGRESS_UNLOCK_ITEM(iItemCount, GET_PM_UNLOCK_PROGRESS_BOOL(i))//, bUnlocks) ENDREPEAT BREAK CASE PM_D2_CONTENT_UNLOCKS ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T21", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_CRATE_DROP)) // Crate Drop ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T22", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_RACE_TO_POINT)) // Impromptu Race ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T0", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_DEATHMATCH)) // Deathmatch (from Rank 1) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T1", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_RACE)) // Race (from Rank 1) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T2", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_STUNT_JUMPS)) // Stunt Jumps (from Rank 2) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T3", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_CAR_MOD)) // Car Mod Shop (from Rank 1) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T4", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_HOLD_UPS)) // Hold Ups (from Rank 3) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T6", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_DEATHMATCH)) // One on One Deathmatch (from Rank 3) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T5", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_CALL_PEGASUS)) // Pegasus (from Rank 3) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T8", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_MG_SHOOTING_RANGE)) // Shooting Range (from Rank 3) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T7", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_SHOPS)) // Shops (from Rank 3) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T9", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_CUSTOM_CAR_GARAGE)) // Garages (from Rank 5) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T11", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_CINEMA)) // Movies (from Rank 5) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T10", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_PVEH_DEL)) // Personal Vehicle Delivery (from Rank 5) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T15", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_MG_ARM_WRESTLING)) // Arm Wrestling (from Rank 6) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T14", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_MG_DARTS)) // Darts (from Rank 6) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T13", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_MG_GOLF)) // Golf (from Rank 6) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T38", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_MG_PILOT_SCHOOL)) // San Andreas Flight School (from Rank 6) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T16", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_STRIP_CLUB)) // Strip Club (from Rank 6) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T12", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_MG_TENNIS)) // Tennis (from Rank 6) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T43", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_MISSION_CTF)) // Captures (From Rank 8) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T17", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_IMPORT_EXPORT)) // Import/Export (from Rank 8) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T18", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_BOUNTIES)) // Bounties (from Rank 10) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T19", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_BASE_JUMP)) // Parachuting (from Rank 11) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T20", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_AMMO_DROP)) // Ammo Drop (from Rank 12) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T42", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_LESTER_NO_COPS)) // Cops Turn Blind Eye (From Rank 12) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T49", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_HEIST_INTRO)) // Heists (from Rank 12) * ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T41", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_DESTROY_VEH)) // Destroy Vehicle (from Rank 15) * ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T39", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_DISTRACT_POLICE)) // Distract Cops (from Rank 15) * ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T48", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_DAILY_OBJ)) // Daily Objectives (from Rank 15) * ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T40", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_PLANE_TAKEDOWN)) // Plane Takedown (from Rank 15) * ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T44", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_LESTER_CAR)) // Locate a Car (From Rank 15) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T23", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_SURVIVAL)) // Survival (from Rank 15) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T24", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_BRUCIE_BOX)) // Bull Shark Testosterone (from Rank 17) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T25", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_GANGHIDEOUT)) // Gang Attack (from Rank 18) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T26", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_SECURITY_VAN)) // Armored Truck (from Rank 19) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T27", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_HELI_STRIKE)) // Backup Helicopter (from Rank 20) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T28", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_CALL_COP)) // Remove Wanted Level (from Rank 21) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T29", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_BOAT_PICKUP)) // Boat Pickup (from Rank 25) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T45", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_LESTER_BOAT)) // Locate a Boat (From Rank 25) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T30", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_HELI_PICKUP)) // Helicopter Pickup (from Rank 30) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T46", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_LESTER_HELI)) // Locate a Helicopter (From Rank 35) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T31", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_SEND_MERCENARIES)) // Send Mercenaries (from Rank 35) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T32", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_OFF_THE_RADAR)) // Off the Radar (from Rank 40) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T33", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_REVEAL_PLAYERS)) // Reveal Players (from Rank 40) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T47", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_LESTER_PLANE)) // Locate a Plane (From Rank 45) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T35", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_AIRSTRIKE)) // Airstrike (from Rank 50) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T34", IS_FM_TYPE_UNLOCKED(FMMC_TYPE_THIEF)) // Mugger (from Rank 50) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T37", (GET_RANK_FROM_XP_VALUE(GET_PLAYER_XP(PLAYER_ID()), FALSE) >= 100)) // Benefactor Dubsta 6x6 Vehicle (from Rank 100) ADD_CONTENT_UNLOCK_ITEM(iItemCount, "PM_UCON_T36", (GET_RANK_FROM_XP_VALUE(GET_PLAYER_XP(PLAYER_ID()), FALSE) >= GET_CAR_COLOUR_UNLOCK_RANK(MCT_METALS, METALS_SET_2))) // Gold Metal Vehicle Resprays (from Rank 100) BREAK ENDSWITCH // Enable/disable scrolling IF iItemCount > 16 bCanScroll = TRUE ADD_SCALEFORMXML_INIT_COLUMN_SCROLL_GEN(SECOND_COLUMN, 2, 1, 1, 0) ADD_SCALEFORMXML_SET_COLUMN_SCROLL(SECOND_COLUMN, 0, iItemCount) PAUSE_MENU_ACTIVATE_CONTEXT(HASH("RScrollUpDown")) CPRINTLN(DEBUG_PAUSE_MENU, "[JA@PAUSEMENU] UPDATE_ALL_LIST_ITEMS - Display Scroll Indicator") ELSE bCanScroll = FALSE ADD_SCALEFORMXML_SET_COLUMN_SCROLL(SECOND_COLUMN, -1, -1) PAUSE_MENU_DEACTIVATE_CONTEXT(HASH("RScrollUpDown")) CPRINTLN(DEBUG_PAUSE_MENU, "[JA@PAUSEMENU] UPDATE_ALL_LIST_ITEMS - Hide Scroll Indicator") ENDIF PAUSE_MENU_ACTIVATE_CONTEXT(HASH("HIDE_ACCEPTBUTTON")) PAUSE_MENU_REDRAW_INSTRUCTIONAL_BUTTONS() // Display setting component PM_DISPLAY_DATA_SLOT(SECOND_COLUMN) SHOW_PM_COLUMN(SECOND_COLUMN) bThisDataAvailable = TRUE RETURN TRUE ENDFUNC PROC CHECK_RIGHT_STICK_SCROLL() IF NOT IS_USING_KEYBOARD_AND_MOUSE(FRONTEND_CONTROL) INT i_right_y i_right_y = GET_CONTROL_VALUE(FRONTEND_CONTROL, INPUT_SCRIPT_RIGHT_AXIS_Y)//INPUT_FRONTEND_RIGHT_AXIS_Y) //Check for Down IF i_right_y > 180 IF HAS_NET_TIMER_EXPIRED(iRStickTimer, iRStickTimerDelay) IF bCanScroll PLAY_SOUND_FRONTEND(-1, "NAV_UP_DOWN", "HUD_FRONTEND_DEFAULT_SOUNDSET") CPRINTLN(DEBUG_PAUSE_MENU, "[JA@PAUSEMENU] R-STICK UNLOCK - MOVE DOWN") // Send dpad-down input to right hand column IF BEGIN_SCALEFORM_MOVIE_METHOD_ON_FRONTEND("SET_COLUMN_INPUT_EVENT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(SCALEFORM_INPUT_EVENT_DOWN)) END_SCALEFORM_MOVIE_METHOD() ENDIF iRStickTimerDelay = 250 RESET_NET_TIMER(iRStickTimer) ENDIF ENDIF //Check for Up ELIF i_right_y < 80 IF HAS_NET_TIMER_EXPIRED(iRStickTimer, iRStickTimerDelay) IF bCanScroll PLAY_SOUND_FRONTEND(-1, "NAV_UP_DOWN", "HUD_FRONTEND_DEFAULT_SOUNDSET") CPRINTLN(DEBUG_PAUSE_MENU, "[JA@PAUSEMENU] R-STICK UNLOCK - MOVE UP") // Send dpad-up input to right hand column IF BEGIN_SCALEFORM_MOVIE_METHOD_ON_FRONTEND("SET_COLUMN_INPUT_EVENT") SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1) SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(SCALEFORM_INPUT_EVENT_UP)) END_SCALEFORM_MOVIE_METHOD() ENDIF iRStickTimerDelay = 250 RESET_NET_TIMER(iRStickTimer) ENDIF ENDIF ELSE IF iRStickTimerDelay != -1 iRStickTimerDelay = -1 ENDIF ENDIF ENDIF ENDPROC PROC INIT_MENU() FRONTEND_MENU_SCREEN CurrentScreen FRONTEND_MENU_SCREEN aNextScreen INT iMenu GET_MENU_LAYOUT_CHANGED_EVENT_DETAILS(CurrentScreen, aNextScreen, iMenu) CLEAR_PM_COLUMN(FIRST_COLUMN) iCurrentMenu = PM_D2_GENERAL_UNLOCKS MP_SET_DATA_SLOT(FIRST_COLUMN, PM_D2_GENERAL_UNLOCKS, STATS_CATEGORY_MENU_ID, PM_D2_GENERAL_UNLOCKS, TRUE, "PM_UL_D0") MP_SET_DATA_SLOT(FIRST_COLUMN, PM_D2_PROGRESS_UNLOCKS, STATS_CATEGORY_MENU_ID, PM_D2_PROGRESS_UNLOCKS, TRUE, "PM_UL_D1") MP_SET_DATA_SLOT(FIRST_COLUMN, PM_D2_CONTENT_UNLOCKS, STATS_CATEGORY_MENU_ID, PM_D2_CONTENT_UNLOCKS, TRUE, "PM_UL_D2") SHOW_PM_COLUMN(FIRST_COLUMN) HIDE_PM_COLUMN(THIRD_COLUMN) HIDE_PM_COLUMN(3) HIDE_PM_COLUMN(4) HIDE_PM_COLUMN(5) PM_DISPLAY_DATA_SLOT(FIRST_COLUMN) //SET_PM_HIGHLIGHT(FIRST_COLUMN, iCurrentMenu, FALSE, TRUE) UPDATE_ALL_LIST_ITEMS(bDataAvailable) PAUSE_MENU_DEACTIVATE_CONTEXT(HASH("RScrollUpDown")) PAUSE_MENU_ACTIVATE_CONTEXT(HASH("HIDE_ACCEPTBUTTON")) PAUSE_MENU_REDRAW_INSTRUCTIONAL_BUTTONS() bInitMenu = TRUE CPRINTLN(DEBUG_PAUSE_MENU, "MP_UNLOCKS - INIT_MENU Done") ENDPROC SCRIPT( PAUSE_MENU_LAUNCH_DATA args ) CPRINTLN(DEBUG_PAUSE_MENU, "MP_UNLOCKS - Select Menu Launched with args: ", args.operation, ", Menu: ", args.MenuScreenId, ", Prev:", args.PreviousId, ", Unique: ", args.UniqueIdentifier) FORCE_SCRIPTED_GFX_WHEN_FRONTEND_ACTIVE(TRUE) NETWORK_SET_SCRIPT_IS_SAFE_FOR_NETWORK_GAME() FRONTEND_MENU_SCREEN CurrentScreen FRONTEND_MENU_SCREEN aNextScreen INT iMenu SET_SCRIPT_GFX_DRAW_ORDER(GFX_ORDER_BEFORE_HUD) IF IS_XBOX_PLATFORM() OR IS_PLAYSTATION_PLATFORM() OR IS_PC_VERSION() AWARDS_IN_HEISTS = 40 ENDIF //INIT_MENU() SWITCH args.operation CASE kUpdate WHILE bShouldQuitUnlocksScript = FALSE WAIT(0) //Check for right stick scroll CHECK_RIGHT_STICK_SCROLL() //Check for Back IF HAS_HUD_CONTROL_BEEN_PRESSED_PAUSE(INPUT_FRONTEND_CANCEL) NET_NL()NET_PRINT(" INPUT_FRONTEND_CANCEL PRESSED ") //PLAY_SOUND_FRONTEND(-1, "CANCEL", "HUD_FRONTEND_DEFAULT_SOUNDSET") RELEASE_CONTROL_OF_FRONTEND() bShouldQuitUnlocksScript = TRUE ENDIF //Check for Up/Down Press IF HAS_MENU_LAYOUT_CHANGED_EVENT_OCCURRED() IF bInitMenu = FALSE IF RECALCULATE_PLAYED_COUNTS_FOR_PAUSE_MENU() INIT_MENU() ENDIF ELSE CPRINTLN(DEBUG_PAUSE_MENU, "MP_UNLOCKS - HAS_MENU_LAYOUT_CHANGED_EVENT_OCCURRED = TRUE") GET_MENU_LAYOUT_CHANGED_EVENT_DETAILS(CurrentScreen, aNextScreen, iMenu) CPRINTLN(DEBUG_PAUSE_MENU, " - CurrentScreen = ", CurrentScreen, " - ", GET_XML_SCREEN_STRING_VALUE(CurrentScreen)) CPRINTLN(DEBUG_PAUSE_MENU, " - aNextScreen = ", aNextScreen, " - ", GET_XML_SCREEN_STRING_VALUE(aNextScreen)) CPRINTLN(DEBUG_PAUSE_MENU, " - iMenu = ", iMenu, " - ", iMenu) // If new category has been selected, repopulate listitems IF aNextScreen = MENU_UNIQUE_ID_STATS_CATEGORY iCurrentMenu = iMenu CPRINTLN(DEBUG_PAUSE_MENU, " - iCurrentMenu = ", iCurrentMenu) UPDATE_ALL_LIST_ITEMS(bDataAvailable) ENDIF ENDIF ENDIF ENDWHILE BREAK CASE kFill NET_NL()NET_PRINT("MP_Unlocks: args.operation = kFill") BREAK CASE kLayoutChange NET_NL()NET_PRINT("MP_Unlocks: args.operation = kLayoutChange") BREAK CASE kTriggerEvent NET_NL()NET_PRINT("MP_Unlocks: args.operation = kTriggerEvent") BREAK ENDSWITCH PAUSE_MENU_DEACTIVATE_CONTEXT(HASH("RScrollUpDown")) PAUSE_MENU_DEACTIVATE_CONTEXT(HASH("HIDE_ACCEPTBUTTON")) PAUSE_MENU_REDRAW_INSTRUCTIONAL_BUTTONS() NET_NL()NET_PRINT("Quitting Unlocks Screen") RELEASE_CONTROL_OF_FRONTEND() WHILE TRUE WAIT(0) ENDWHILE ENDSCRIPT