1254 lines
45 KiB
Python
Executable File
1254 lines
45 KiB
Python
Executable File
// *****************************************************************************************
|
||
// *****************************************************************************************
|
||
//
|
||
// SCRIPT NAME : achievement_controller.sc
|
||
// AUTHOR : Aaron Gandaa
|
||
//
|
||
// *****************************************************************************************
|
||
// *****************************************************************************************
|
||
|
||
//----------------------
|
||
// INCLUDES
|
||
//----------------------
|
||
USING "rage_builtins.sch"
|
||
USING "globals.sch"
|
||
USING "achievement_public.sch"
|
||
USING "battlebuddy_public.sch"
|
||
USING "timer_public.sch"
|
||
USING "gunclub_shop_private.sch"
|
||
|
||
//----------------------
|
||
// VARIABLES
|
||
//----------------------
|
||
//INT iTotalMoneySpent = 0
|
||
INT iThreeManArmyState = 0
|
||
INT iNextPollCheckTime = 0
|
||
INT iNextMapPollCheckTime = 0
|
||
//INT iLastTotalMoneySpent = 0
|
||
//INT iLastAwardCounter = 0
|
||
STRUCTTIMER tThreeManArmyTimer
|
||
INT iNextPollDelay = 1000
|
||
INT iNextMapPollDelay = 3333
|
||
FLOAT fThreeManTimerValue = 0.0
|
||
BOOL bForceRunMapCheck = falsE
|
||
INT iLastBitsetCheatsUsedThisSession = 0
|
||
INT iPollCheck = 0
|
||
STRUCTTIMER ach26MPCheckTimer
|
||
BOOL bWaitForAwardsToFinish = TRUE
|
||
BOOL bForceAchievementSCSSync
|
||
BOOL bAllMPAchievementSynced = FALSE
|
||
|
||
//----------------------
|
||
// DEBUG VARIABLES
|
||
//----------------------
|
||
#IF IS_DEBUG_BUILD
|
||
WIDGET_GROUP_ID m_WidgetGroup
|
||
BOOL bQuitScript = FALSE
|
||
BOOL bShowDebug = FALSE
|
||
BOOL bHaveImportantStatsLoaded = FALSE
|
||
BOOL bHasFreemodeAwardProcessingFinished = FALSE
|
||
BOOL bHasFreemodeMigrationFinished = FALSE
|
||
|
||
BOOL bTestShark = FALSE
|
||
BOOL bAchievementTest = FALSE
|
||
BOOL bAllAchievementTest = FALSE
|
||
INT iAchievementTest = 1
|
||
BOOL bUpdateAchievementList
|
||
BOOL bPrintCarDimensions
|
||
BOOL bVerbose
|
||
BOOL bCheckShitSkipReplay
|
||
BOOL bAllowDebugWidgetUpdate = FALSE
|
||
BOOL bDumpHeistAchievementInfo = FALSE
|
||
BOOL bTestHeistAchievementInfo = FALSE
|
||
INT iHeistAchievementInfoSlider = 0
|
||
|
||
FLOAT fDebugPrintHoursForNewPersp = 0
|
||
BOOL bDumpAchievementQueueToTTY
|
||
BOOL bTestSCSAchievement
|
||
BOOL bDebugForceAchievementSCSSync
|
||
BOOL bACHDebugDirectorModeCheck
|
||
|
||
FLOAT fDebugAchievementQueueTime
|
||
#ENDIF
|
||
|
||
//----------------------
|
||
// DEBUG FUNCTIONS
|
||
//----------------------
|
||
#IF IS_DEBUG_BUILD
|
||
|
||
/// PURPOSE:
|
||
/// Setups Debug Widgets
|
||
PROC SETUP_ACHIEVEMENT_DEBUG_WIDGETS()
|
||
INT i
|
||
TEXT_LABEL str
|
||
|
||
m_WidgetGroup = START_WIDGET_GROUP("Achievement Controller")
|
||
ADD_WIDGET_BOOL("Quit Script", bQuitScript)
|
||
ADD_WIDGET_BOOL("Allow Debug Widget Update", bAllowDebugWidgetUpdate)
|
||
|
||
ADD_WIDGET_BOOL("Achievement Test", bAchievementTest)
|
||
ADD_WIDGET_INT_SLIDER("Achievement", iAchievementTest, 1, ENUM_TO_INT(ACHIEVEMENT_COUNT) - 1, 1)
|
||
ADD_WIDGET_BOOL("Check List", bUpdateAchievementList)
|
||
ADD_WIDGET_BOOL("Have MP Important Stats Loaded", bHaveImportantStatsLoaded)
|
||
ADD_WIDGET_BOOL("Has Award Processing Finished", bHasFreemodeAwardProcessingFinished)
|
||
ADD_WIDGET_BOOL("Has Save Migration Finished", bHasFreemodeMigrationFinished)
|
||
ADD_WIDGET_BOOL("bAllMPAchievementSynced", bAllMPAchievementSynced)
|
||
ADD_WIDGET_BOOL("Wait For Awards to Finish", bWaitForAwardsToFinish)
|
||
ADD_WIDGET_BOOL("Read SCS Achievement", bTestSCSAchievement)
|
||
ADD_WIDGET_BOOL("Force Sync SCS Achievement", bDebugForceAchievementSCSSync)
|
||
|
||
START_WIDGET_GROUP("Achievement Queue Debug")
|
||
ADD_WIDGET_BOOL("Use Queue", q_mAchievementQueue.bIsRunning)
|
||
ADD_WIDGET_BOOL("Dump Achievement Queue", bDumpAchievementQueueToTTY)
|
||
ADD_WIDGET_BOOL("Is Director Mode Running", bACHDebugDirectorModeCheck)
|
||
ADD_WIDGET_FLOAT_READ_ONLY("Queue Time", fDebugAchievementQueueTime)
|
||
ADD_WIDGET_FLOAT_READ_ONLY("Real Queue Time", q_mAchievementQueue.fQueueTimer)
|
||
STOP_WIDGET_GROUP()
|
||
|
||
START_WIDGET_GROUP("Achievement Debug")
|
||
ADD_WIDGET_BOOL("Draw Debug", bShowDebug)
|
||
ADD_WIDGET_BOOL("Disable Cable Cars", g_bForceNoCableCar)
|
||
ADD_WIDGET_BOOL("Disable Ambient UFO", g_bForceNoAmbientUFO)
|
||
ADD_WIDGET_BOOL("Test Shark", bTestShark)
|
||
ADD_WIDGET_BOOL("Have we shit skip", g_bShitskipAccepted)
|
||
ADD_WIDGET_BOOL("Have we shit skip ever", bCheckShitSkipReplay)
|
||
ADD_WIDGET_BOOL("Print Car Dimensions", bPrintCarDimensions)
|
||
ADD_WIDGET_BOOL("All Achievement Test", bAllAchievementTest)
|
||
ADD_WIDGET_FLOAT_READ_ONLY("3 Man Army Time", fThreeManTimerValue)
|
||
ADD_WIDGET_FLOAT_READ_ONLY("Perspective", fDebugPrintHoursForNewPersp)
|
||
ADD_WIDGET_INT_READ_ONLY("Profit", g_savedGlobals.sFinanceData.iProfitLoss)
|
||
ADD_WIDGET_INT_READ_ONLY("Run Like The Wind", g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedBounty.iTimePassedSoFar)
|
||
ADD_WIDGET_INT_SLIDER("Gold Medal Counter", g_savedGlobals.sFlowCustom.iMissionGolds, 0, 100, 1)
|
||
ADD_WIDGET_BOOL("Run Previous", MPGlobalsAmbience.playerBounty.bBountyFromPreviousSession)
|
||
ADD_WIDGET_INT_SLIDER("Poll Time", iNextPollDelay, 1, 100000, 1000)
|
||
ADD_WIDGET_INT_SLIDER("Map Poll Time", iNextMapPollDelay, 1, 100000, 1000)
|
||
ADD_WIDGET_INT_READ_ONLY("Replay Bits", g_iRepeatPlayBits)
|
||
ADD_WIDGET_INT_READ_ONLY("Poll Check", iPollCheck)
|
||
ADD_WIDGET_INT_READ_ONLY("Cheat Bit Set", g_iBitsetCheatsUsedThisSession)
|
||
ADD_WIDGET_INT_READ_ONLY("Old Cheat Bit Set", iLastBitsetCheatsUsedThisSession)
|
||
ADD_WIDGET_BOOL("Force Run Map Check", bForceRunMapCheck)
|
||
//ADD_WIDGET_INT_READ_ONLY("Money Spent", iTotalMoneySpent)
|
||
//ADD_WIDGET_BOOL("Mission Title Blocked", g_bMissionTitleBlocked)
|
||
ADD_WIDGET_BOOL("Verbose", bVerbose)
|
||
|
||
STOP_WIDGET_GROUP()
|
||
|
||
START_WIDGET_GROUP("Heist Achievements")
|
||
ADD_WIDGET_BOOL("Dump Heist ACH Info", bDumpHeistAchievementInfo)
|
||
ADD_WIDGET_BOOL("Test Heist ACH Info", bTestHeistAchievementInfo)
|
||
ADD_WIDGET_INT_SLIDER("Info Slider", iHeistAchievementInfoSlider, 0, ENUM_TO_INT(MAX_HEISTACHCHK_ID), 1)
|
||
STOP_WIDGET_GROUP()
|
||
|
||
START_WIDGET_GROUP("Multi Disipliced")
|
||
START_WIDGET_GROUP("Triathalon")
|
||
i = 0
|
||
REPEAT ENUM_TO_INT(NUM_TRIATHLON_RACES) i
|
||
str = "Race "
|
||
str += i
|
||
ADD_WIDGET_INT_READ_ONLY(str, g_savedGlobals.sTriathlonData.iBestRank[INT_TO_ENUM(TRIATHLON_RACE_INDEX, i)])
|
||
ENDREPEAT
|
||
STOP_WIDGET_GROUP()
|
||
|
||
START_WIDGET_GROUP("Off Road")
|
||
i = 0
|
||
REPEAT ENUM_TO_INT(NUM_OFFROAD_RACES) i
|
||
str = "Race "
|
||
str += i
|
||
ADD_WIDGET_INT_READ_ONLY(str, g_savedGlobals.sOffroadData.iRaceBestPlaces[INT_TO_ENUM(OFFROAD_RACE_INDEX, i)])
|
||
ENDREPEAT
|
||
STOP_WIDGET_GROUP()
|
||
|
||
STOP_WIDGET_GROUP()
|
||
|
||
STOP_WIDGET_GROUP()
|
||
ENDPROC
|
||
|
||
/// PURPOSE:
|
||
/// Removes Debug Widgets
|
||
PROC CLEANUP_ACHIEVEMENT_DEBUG_WIDGETS()
|
||
IF DOES_WIDGET_GROUP_EXIST(m_WidgetGroup)
|
||
DELETE_WIDGET_GROUP(m_WidgetGroup)
|
||
ENDIF
|
||
ENDPROC
|
||
|
||
#ENDIF
|
||
|
||
//----------------------
|
||
// SCRIPT FUNCTIONS
|
||
//----------------------
|
||
|
||
/// PURPOSE:
|
||
/// Script Cleanup
|
||
PROC SCRIPT_CLEANUP()
|
||
#IF IS_DEBUG_BUILD
|
||
CLEANUP_ACHIEVEMENT_DEBUG_WIDGETS()
|
||
#ENDIF
|
||
|
||
TERMINATE_THIS_THREAD()
|
||
ENDPROC
|
||
|
||
FUNC INT COUNT_ACTIVE_BATTLE_BUDDIES()
|
||
INT count = 0
|
||
PED_INDEX ped
|
||
|
||
ped = GET_BATTLEBUDDY_PED(CHAR_TREVOR)
|
||
IF IS_BATTLEBUDDY_AVAILABLE(ped, FALSE) OR IS_BIT_SET(g_bitfieldFriendFlags, ENUM_TO_INT(CHAR_TREVOR))
|
||
count ++
|
||
ENDIF
|
||
|
||
ped = GET_BATTLEBUDDY_PED(CHAR_FRANKLIN)
|
||
IF IS_BATTLEBUDDY_AVAILABLE(ped, FALSE) OR IS_BIT_SET(g_bitfieldFriendFlags, ENUM_TO_INT(CHAR_FRANKLIN))
|
||
count ++
|
||
ENDIF
|
||
|
||
ped = GET_BATTLEBUDDY_PED(CHAR_MICHAEL)
|
||
IF IS_BATTLEBUDDY_AVAILABLE(ped, FALSE) OR IS_BIT_SET(g_bitfieldFriendFlags, ENUM_TO_INT(CHAR_MICHAEL))
|
||
count ++
|
||
ENDIF
|
||
|
||
RETURN count
|
||
ENDFUNC
|
||
|
||
FUNC BOOL IS_ENTITY_OK(PED_INDEX ped)
|
||
IF NOT DOES_ENTITY_EXIST(ped)
|
||
RETURN FALSE
|
||
ENDIF
|
||
|
||
RETURN NOT IS_ENTITY_DEAD(peD)
|
||
ENDFUNC
|
||
|
||
PROC UPDATE_ACHIEVEMENT_OUT_OF_YOUR_DEPTH()
|
||
ENTITY_INDEX deathEntity
|
||
PED_INDEX deathPed
|
||
|
||
IS_ENTITY_DEAD(PLAYER_PED_ID()) // to stop an assert.
|
||
|
||
IF NOT IS_ENTITY_IN_WATER(PLAYER_PED_ID())
|
||
EXIT
|
||
ENDIF
|
||
|
||
IF IS_ENTITY_PLAYING_ANIM(PLAYER_PED_ID(), "creatures@shark@move", "attack_player")
|
||
AWARD_ACHIEVEMENT(ACH22) // Out Of Your Depth
|
||
EXIT
|
||
ENDIF
|
||
|
||
IF IS_ENTITY_DEAD(PLAYER_PED_ID())
|
||
deathEntity = GET_PED_SOURCE_OF_DEATH(PLAYER_PED_ID())
|
||
IF IS_ENTITY_A_PED(deathEntity)
|
||
deathPed = GET_PED_INDEX_FROM_ENTITY_INDEX(deathEntity)
|
||
IF IS_ENTITY_OK(deathPed)
|
||
IF (GET_ENTITY_MODEL(deathPed) = A_C_SHARKTIGER)
|
||
AWARD_ACHIEVEMENT(ACH22) // Out Of Your Depth
|
||
EXIT
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
ENDPROC
|
||
|
||
PROC UPDATE_ACHIEVEMENT_THREE_MAN_ARMY()
|
||
|
||
SWITCH (iThreeManArmyState)
|
||
CASE 0 // start timing
|
||
fThreeManTimerValue = 0
|
||
IF NOT DOES_ENTITY_EXIST(PLAYER_PED_ID())
|
||
EXIT
|
||
ENDIF
|
||
|
||
IF IS_ENTITY_DEAD(PLAYER_PED_ID())
|
||
EXIT
|
||
ENDIF
|
||
|
||
IF (GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) >= 3) AND (GET_MISSION_FLAG() = FALSE)
|
||
IF (COUNT_ACTIVE_BATTLE_BUDDIES() = 2)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT]: Started Tracking Achievement: ACH21 - Three Man Army")
|
||
RESTART_TIMER_NOW(tThreeManArmyTimer)
|
||
iThreeManArmyState ++
|
||
ENDIF
|
||
ENDIF
|
||
BREAK
|
||
CASE 1
|
||
IF (IS_PLAYER_PED_SWITCH_IN_PROGRESS() OR IS_PLAYER_SWITCH_IN_PROGRESS())
|
||
EXIT
|
||
ENDIF
|
||
|
||
IF (GET_PLAYER_WANTED_LEVEL(PLAYER_ID()) < 3)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT]: Stopped Tracking Achievement: ACH21 - Three Man Army - Wanted Rating Less Than 5")
|
||
CANCEL_TIMER(tThreeManArmyTimer)
|
||
iThreeManArmyState = 0
|
||
EXIT
|
||
ENDIF
|
||
|
||
IF (GET_MISSION_FLAG() = TRUE)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT]: Stopped Tracking Achievement: ACH21 - Three Man Army - We're on a mission")
|
||
CANCEL_TIMER(tThreeManArmyTimer)
|
||
iThreeManArmyState = 0
|
||
EXIT
|
||
ENDIF
|
||
|
||
IF (COUNT_ACTIVE_BATTLE_BUDDIES() < 2)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT]: Stopped Tracking Achievement: ACH21 - Three Man Army - Not Enough Battle Buddies")
|
||
CANCEL_TIMER(tThreeManArmyTimer)
|
||
iThreeManArmyState = 0
|
||
EXIT
|
||
ENDIF
|
||
|
||
IF IS_ENTITY_DEAD(PLAYER_PED_ID())
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT]: Stopped Tracking Achievement: ACH21 - Three Man Army - Player is Dead")
|
||
CANCEL_TIMER(tThreeManArmyTimer)
|
||
iThreeManArmyState = 0
|
||
EXIT
|
||
ENDIF
|
||
|
||
fThreeManTimerValue = GET_TIMER_IN_SECONDS_SAFE(tThreeManArmyTimer)
|
||
|
||
// 300 seconds is 5 minutes
|
||
IF fThreeManTimerValue >= ACH21_SURVIVE_TIME
|
||
AWARD_ACHIEVEMENT(ACH21) // Three man Army
|
||
PAUSE_TIMER(tThreeManArmyTimer)
|
||
iThreeManArmyState ++
|
||
ENDIF
|
||
BREAK
|
||
CASE 2
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT]: Stopped Tracking Achievement: ACH21 - Three Man Army - Achievement Unlocked")
|
||
iThreeManArmyState ++
|
||
BREAK
|
||
ENDSWITCH
|
||
ENDPROC
|
||
|
||
PROC DUMP_ACHIEVEMENT_LIST_TO_TTY()
|
||
INT i
|
||
INT cnt = ENUM_TO_INT(ACHIEVEMENT_COUNT)
|
||
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "---------- ACHIEVEMENT LIST -----------")
|
||
FOR i=1 TO (cnt-1)
|
||
IF HAS_ACHIEVEMENT_BEEN_PASSED(i)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT]: Achievement #:", i, " ", DEBUG_GET_ACHIEVEMENT_TITLE_FROM_INT(i))
|
||
ENDIF
|
||
ENDFOR
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "---------------------------------------")
|
||
ENDPROC
|
||
|
||
//PURPOSE:
|
||
// Retrieve status about social club achievement availability.
|
||
//RETURNS:
|
||
// Returns TRUE if the status SUCCEEDED.
|
||
//NOTES:
|
||
// (status == -1) - INVALID status request to read achievements has not even started.
|
||
// (status == 0) - Read SUCCEEDED information is available.
|
||
// (status == 1) - Read is PENDING, in progress.
|
||
// (status == 2) - Read FAILED.
|
||
// (status == 3) - Read CANCELED.
|
||
//
|
||
// If the Status is FAILED/CANCELED you can call SC_ACHIEVEMENT_SYNCHRONIZE once to restart everything
|
||
// but make sure the player is online and has ROS credentials.
|
||
//
|
||
|
||
PROC DUMP_SCS_ACHIEVEMENT_STATUS_TO_TTY()
|
||
INT i
|
||
INT cnt = ENUM_TO_INT(ACHIEVEMENT_COUNT)
|
||
BOOL ok
|
||
INT iAchStatus
|
||
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "---------- SCS ACHIEVEMENT LIST -----------")
|
||
ok = SC_ACHIEVEMENT_INFO_STATUS(iAchStatus)
|
||
|
||
SWITCH (iAchStatus)
|
||
CASE -1 // INVALID
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT]: SC_ACHIEVEMENT_INFO_STATUS:INVALID - OK CHECK:", ok)
|
||
BREAK
|
||
CASE 0 // SUCCEDED
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT]: SC_ACHIEVEMENT_INFO_STATUS:SUCCEDED - OK CHECK:", ok)
|
||
BREAK
|
||
CASE 1 // PENDING
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT]: SC_ACHIEVEMENT_INFO_STATUS:PENDING - OK CHECK:", ok)
|
||
BREAK
|
||
CASE 2 // FAILED.
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT]: SC_ACHIEVEMENT_INFO_STATUS:FAILED - OK CHECK:", ok)
|
||
BREAK
|
||
CASE 3 // CANCELED
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT]: SC_ACHIEVEMENT_INFO_STATUS:CANCELED - OK CHECK:", ok)
|
||
BREAK
|
||
ENDSWITCH
|
||
|
||
IF (iAchStatus = 0) AND (ok)
|
||
FOR i=1 TO (cnt-1)
|
||
IF SC_HAS_ACHIEVEMENT_BEEN_PASSED(i)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT]: SCS Achievement #:", i, " ", DEBUG_GET_ACHIEVEMENT_TITLE_FROM_INT(i))
|
||
ENDIF
|
||
ENDFOR
|
||
ENDIF
|
||
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "---------------------------------------")
|
||
ENDPROC
|
||
|
||
//----------------------
|
||
// SCRIPT FUNCTIONS
|
||
//----------------------
|
||
|
||
/// PURPOSE:
|
||
/// Populates the list of available repeat play misisons for selected mission type
|
||
FUNC INT COUNT_STORY_GOLD_MEDALS(BOOL tty = FALSE)
|
||
|
||
INT iMissionDataIndex
|
||
INT iCount
|
||
|
||
INT iMedal
|
||
INT iTotalStats = 0
|
||
INT iPassedStats = 0
|
||
|
||
INT iStatIndex
|
||
FLOAT fPercentage
|
||
ENUM_MISSION_STATS eMissionStat
|
||
|
||
#IF IS_DEBUG_BUILD
|
||
TEXT_LABEL_7 txtMissionName
|
||
#ENDIF
|
||
|
||
IF (tty)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "----------------------")
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "Story Mission Medal Check")
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, " ")
|
||
ENDIF
|
||
|
||
REPEAT COUNT_OF(g_savedGlobals.sFlow.missionSavedData) iMissionDataIndex
|
||
|
||
IF (g_savedGlobals.sFlow.missionSavedData[iMissionDataIndex].iCompletionOrder != -1) AND IsMissionRepeatable(iMissionDataIndex, CP_GROUP_MISSIONS)
|
||
|
||
iTotalStats = 0
|
||
iPassedStats = 0
|
||
INT overrideMedal = -1
|
||
|
||
// count
|
||
REPEAT GetRepeatPlayMissionStatCount(iMissionDataIndex, CP_GROUP_MISSIONS) iStatIndex
|
||
eMissionStat = GetRepeatPlayMissionStat(iMissionDataIndex, CP_GROUP_MISSIONS, iStatIndex)
|
||
IF NOT g_MissionStatTrackingPrototypes[eMissionStat].bHidden
|
||
IF GET_MISSION_STAT_PASS_STATUS(eMissionStat) =1
|
||
++iPassedStats
|
||
ENDIF
|
||
SWITCH eMissionStat
|
||
CASE ASS1_MIRROR_MEDAL
|
||
CASE ASS2_MIRROR_MEDAL
|
||
CASE ASS4_MIRROR_MEDAL
|
||
CASE ASS3_MIRROR_MEDAL
|
||
CASE ASS5_MIRROR_MEDAL
|
||
overrideMedal = GET_MISSION_STAT_FRIENDLY_VALUE(eMissionStat)
|
||
//Give bronze medal in case of shitskip
|
||
if overrideMedal >= HIGHEST_INT
|
||
overrideMedal = 1
|
||
endif
|
||
BREAK
|
||
ENDSWITCH
|
||
|
||
++iTotalStats
|
||
ENDIF
|
||
ENDREPEAT
|
||
|
||
fPercentage = GET_MISSION_STAT_PERCENTAGE(iPassedStats, iTotalStats)
|
||
iMedal = GET_STAT_MEDAL_VALUE(fPercentage)
|
||
IF overrideMedal > -1
|
||
iMedal = overrideMedal
|
||
ENDIF
|
||
|
||
IF (fPercentage >= 100.0) OR (iMedal = 3)
|
||
iCount ++
|
||
#IF IS_DEBUG_BUILD
|
||
IF (tty)
|
||
txtMissionName = GetRepeatPlayMissionName(iMissionDataIndex, CP_GROUP_MISSIONS)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "Mission: ", txtMissionName, " Gold Count:", iCount)
|
||
ENDIF
|
||
#ENDIF
|
||
ENDIF
|
||
|
||
ENDIF
|
||
ENDREPEAT
|
||
|
||
IF (tty)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, " ")
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "Final Count:", iCount)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "----------------------")
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, " ")
|
||
ENDIF
|
||
|
||
RETURN iCount
|
||
ENDFUNC
|
||
|
||
/// PURPOSE:
|
||
/// Populates the list of available repeat play misisons for selected mission type
|
||
FUNC INT COUNT_RC_GOLD_MEDALS(BOOL tty = FALSE)
|
||
|
||
INT iMissionDataIndex
|
||
INT iCount
|
||
|
||
INT iMedal
|
||
INT iTotalStats = 0
|
||
INT iPassedStats = 0
|
||
|
||
INT iStatIndex
|
||
FLOAT fPercentage
|
||
ENUM_MISSION_STATS eMissionStat
|
||
|
||
#IF IS_DEBUG_BUILD
|
||
TEXT_LABEL_7 txtMissionName
|
||
#ENDIF
|
||
|
||
IF (tty)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "----------------------")
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "RC Mission Medal Check")
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, " ")
|
||
ENDIF
|
||
|
||
REPEAT COUNT_OF(g_savedGlobals.sRandomChars.savedRC) iMissionDataIndex
|
||
|
||
IF (g_savedGlobals.sRandomChars.savedRC[iMissionDataIndex].iCompletionOrder != -1) AND IsMissionRepeatable(iMissionDataIndex, CP_GROUP_RANDOMCHARS)
|
||
|
||
iTotalStats = 0
|
||
iPassedStats = 0
|
||
|
||
// count
|
||
REPEAT GetRepeatPlayMissionStatCount(iMissionDataIndex, CP_GROUP_RANDOMCHARS) iStatIndex
|
||
eMissionStat = GetRepeatPlayMissionStat(iMissionDataIndex, CP_GROUP_RANDOMCHARS, iStatIndex)
|
||
IF NOT g_MissionStatTrackingPrototypes[eMissionStat].bHidden
|
||
IF GET_MISSION_STAT_PASS_STATUS(eMissionStat) =1
|
||
++iPassedStats
|
||
ENDIF
|
||
|
||
++iTotalStats
|
||
ENDIF
|
||
ENDREPEAT
|
||
|
||
fPercentage = GET_MISSION_STAT_PERCENTAGE(iPassedStats, iTotalStats)
|
||
iMedal = GET_STAT_MEDAL_VALUE(fPercentage)
|
||
|
||
IF (iMissionDataIndex >= ENUM_TO_INT(RC_RAMPAGE_1)) AND (iMissionDataIndex <= ENUM_TO_INT(RC_RAMPAGE_5))
|
||
IF (tty)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, " ")
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "Override For Rampage")
|
||
ENDIF
|
||
iMedal = g_savedGlobals.sRampageData.playerData[iMissionDataIndex - ENUM_TO_INT(RC_RAMPAGE_1)].iMedalIndex
|
||
fPercentage = 0
|
||
ENDIF
|
||
|
||
IF (fPercentage >= 100.0) OR (iMedal = 3)
|
||
iCount ++
|
||
#IF IS_DEBUG_BUILD
|
||
IF (tty)
|
||
txtMissionName = GetRepeatPlayMissionName(iMissionDataIndex, CP_GROUP_RANDOMCHARS)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "Mission: ", txtMissionName, " Gold Count:", iCount)
|
||
ENDIF
|
||
#ENDIF
|
||
ENDIF
|
||
|
||
ENDIF
|
||
ENDREPEAT
|
||
|
||
IF (tty)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, " ")
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "Final Count:", iCount)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "----------------------")
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, " ")
|
||
ENDIF
|
||
|
||
RETURN iCount
|
||
ENDFUNC
|
||
|
||
FUNC INT COUNT_SOLID_GOLD_MEDALS(BOOL tty = FALSE)
|
||
INT iCount = COUNT_STORY_GOLD_MEDALS(tty) + COUNT_RC_GOLD_MEDALS(tty)
|
||
|
||
IF (tty)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "----------------------")
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "Total Count:", iCount)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "----------------------")
|
||
ENDIF
|
||
|
||
RETURN iCount
|
||
ENDFUNC
|
||
|
||
|
||
PROC UPDATE_POLLED_ACHIEVEMENTS(BOOL tty = FALSE)
|
||
IF (g_bInMultiplayer)
|
||
|
||
/* NEED TO REMOVE ACHIEVEMENTS FOR ONLINE BETA
|
||
#IF USE_TU_CHANGES
|
||
EXIT
|
||
#ENDIF
|
||
*/
|
||
|
||
IF (tty)
|
||
CHECK_FRANKIE_SAYS_ACHIEVEMENT(tty)
|
||
ENDIF
|
||
|
||
//CHECK_ACHIEVEMENT_AWARD_JUNKIE(tty)
|
||
CHECK_AMERICAN_DREAM_ACHIEVEMENT(tty)
|
||
CHECK_NUMERO_UNO_ACHIEVEMENT(tty)
|
||
|
||
IF (tty)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, " ")
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT]: ACH41 - Award Junkie - Active Char Award Counter:", GET_MP_INT_CHARACTER_STAT(MP_STAT_CHAR_FM_PLAT_AWARD_COUNT), " of ", ACH41_AWARDS_NEEDED)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, " ")
|
||
|
||
//CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT] - ACH44 - Got Away With Murder - Bounties:", GET_MP_INT_CHARACTER_AWARD(MP_AWARD_FMKILLBOUNTY), " of ", ACH44_BOUNTIESKILLED)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT] - ACH36 - Unnatural Selection - Waves:", GET_MP_INT_CHARACTER_AWARD (MP_AWARD_FMHORDWAVESSURVIVE), " of ", ACH36_WAVESSURVIVED)
|
||
|
||
#IF IS_DEBUG_BUILD
|
||
GAMER_HANDLE hdle = GET_GAMER_HANDLE_PLAYER(PLAYER_ID())
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT] - ACH46 - Crew Cut - Is Player In Clan:", IS_LOCAL_PLAYER_IN_ACTIVE_CLAN(), " Member Count:", GET_PLAYER_CLAN_MEMBER_COUNT(hdle))
|
||
#ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
|
||
CHECK_THATS_A_LOT_OF_CHEDDAR_ACHIEVEMENT(tty)
|
||
CHECK_MULTI_DISCIPLINED_ACHIEVEMENT(tty)
|
||
CHECK_SHOW_OFF_ACHIEVEMENT()
|
||
// First Person Achievement
|
||
CHECK_A_NEW_PERSPECTIVE_ACHIEVEMENT()
|
||
|
||
#IF IS_DEBUG_BUILD
|
||
fDebugPrintHoursForNewPersp = DEBUG_GET_HOURS_FOR_A_NEW_PERSPECTIVE_ACHIEVEMENT()
|
||
#ENDIF
|
||
|
||
IF (tty)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT] - ACH19 - Show Off - Stunt Jumps:", GET_NUM_SUCCESSFUL_STUNT_JUMPS(), " of ", ACH19_STUNTJUMPS)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT] - ACH50 - San Andreas Sightseer:", GET_MINIMAP_FOW_DISCOVERY_RATIO())
|
||
|
||
IF IS_TIMER_STARTED(tThreeManArmyTimer)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT] - ACH21 - Three Man Army Timer: ", GET_TIMER_IN_SECONDS(tThreeManArmyTimer))
|
||
ENDIF
|
||
ENDIF
|
||
ENDPROC
|
||
|
||
PROC CHECK_HAS_PED_ATTAINED_PIMP_MY_SIDEARM_ACHIEVEMENT(PED_INDEX ped)
|
||
INT i
|
||
PED_WEAPONS_STRUCT weaponStruct
|
||
|
||
IF HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH26))
|
||
EXIT
|
||
ENDIF
|
||
|
||
#IF IS_DEBUG_BUILD
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT] - CHECK_MP_HAS_PED_ATTAINED_PIMP_MY_SIDEARM_ACHIEVEMENT - START - TIME:", GET_TIMER_IN_SECONDS(ach26MPCheckTimer))
|
||
#ENDIF
|
||
|
||
GET_PED_WEAPONS(ped, weaponStruct)
|
||
|
||
// check standard weapons
|
||
i = 0
|
||
REPEAT COUNT_OF(weaponStruct.sWeaponInfo) i
|
||
IF IS_PEDS_WEAPON_FULLY_MODDED(ped, weaponStruct.sWeaponInfo[i].eWeaponType)
|
||
|
||
#IF IS_DEBUG_BUILD
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT] - CHECK_MP_HAS_PED_ATTAINED_PIMP_MY_SIDEARM_ACHIEVEMENT - ACHIEVEMENT UNLOCKED")
|
||
#ENDIF
|
||
|
||
AWARD_ACHIEVEMENT(ACH26)
|
||
EXIT
|
||
ENDIF
|
||
ENDREPEAT
|
||
|
||
// check dlc weapons
|
||
i = 0
|
||
REPEAT COUNT_OF(weaponStruct.sDLCWeaponInfo) i
|
||
IF IS_PEDS_WEAPON_FULLY_MODDED(ped, weaponStruct.sDLCWeaponInfo[i].eWeaponType)
|
||
|
||
#IF IS_DEBUG_BUILD
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT] - CHECK_MP_HAS_PED_ATTAINED_PIMP_MY_SIDEARM_ACHIEVEMENT - ACHIEVEMENT UNLOCKED")
|
||
#ENDIF
|
||
|
||
AWARD_ACHIEVEMENT(ACH26)
|
||
EXIT
|
||
ENDIF
|
||
ENDREPEAT
|
||
|
||
#IF IS_DEBUG_BUILD
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT] - CHECK_MP_HAS_PED_ATTAINED_PIMP_MY_SIDEARM_ACHIEVEMENT - NO WEAPONS FULLY MODDED - TIME:", GET_TIMER_IN_SECONDS(ach26MPCheckTimer))
|
||
#ENDIF
|
||
ENDPROC
|
||
|
||
PROC CHECK_ALL_QUEUED_MP_ACHIEVEMENTS_NO_SOCIAL()
|
||
INT iValue
|
||
|
||
// Off the Plane (ACH30)
|
||
IF NOT HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH30))
|
||
IF HAS_FM_RACE_TUT_BEEN_DONE()
|
||
#IF FEATURE_GEN9_STANDALONE OR TRUE #ENDIF
|
||
AWARD_ACHIEVEMENT(ACH30)
|
||
ENDIF
|
||
ENDIF
|
||
|
||
// Pimp my side arm (ACH26)
|
||
IF NOT HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH26))
|
||
IF GET_TIMER_IN_SECONDS(ach26MPCheckTimer) > 5.0
|
||
CHECK_HAS_PED_ATTAINED_PIMP_MY_SIDEARM_ACHIEVEMENT(PLAYER_PED_ID())
|
||
RESTART_TIMER_NOW(ach26MPCheckTimer)
|
||
ENDIF
|
||
ENDIF
|
||
|
||
// Three-Bit Gangster (ACH31) - Making Moves (ACH32) - Above The Law (ACH33)
|
||
iValue = GET_FM_RANK_FROM_XP_VALUE(GET_STAT_CHARACTER_FM_XP())
|
||
IF (iValue >= 100)
|
||
IF NOT HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH33))
|
||
AWARD_ACHIEVEMENT(ACH33)
|
||
ENDIF
|
||
ENDIF
|
||
|
||
IF (iValue >= 50)
|
||
IF NOT HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH32))
|
||
AWARD_ACHIEVEMENT(ACH32)
|
||
ENDIF
|
||
ENDIF
|
||
|
||
IF (iValue >= 25)
|
||
IF NOT HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH31))
|
||
AWARD_ACHIEVEMENT(ACH31)
|
||
ENDIF
|
||
ENDIF
|
||
|
||
// Numero Uno (ACH34)
|
||
IF NOT HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH34))
|
||
CHECK_NUMERO_UNO_ACHIEVEMENT()
|
||
ENDIF
|
||
|
||
// Midnight Club (ACH35)
|
||
IF NOT HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH35))
|
||
IF (GET_MP_INT_PLAYER_STAT(MPPLY_TOTAL_CUSTOM_RACES_WON) >= ACH35_CUSTOM_RACES_WON)
|
||
AWARD_ACHIEVEMENT(ACH35) // midnight club veteran
|
||
ENDIF
|
||
ENDIF
|
||
|
||
|
||
// Unnatural Selection (ACH36)
|
||
IF NOT HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH36))
|
||
IF GET_MP_INT_CHARACTER_AWARD (MP_AWARD_FMHORDWAVESSURVIVE) >= ACH36_WAVESSURVIVED
|
||
AWARD_ACHIEVEMENT(ACH36)
|
||
ENDIF
|
||
ENDIF
|
||
|
||
// THERE IS NO ACH37
|
||
|
||
// Backseat Driver (ACH38)
|
||
IF NOT HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH38))
|
||
IF (GET_MP_INT_CHARACTER_AWARD (MP_AWARD_FMRALLYWONNAV) > 0)
|
||
AWARD_ACHIEVEMENT(ACH38)
|
||
ENDIF
|
||
ENDIF
|
||
|
||
|
||
// Run Like The Wind (ACH39)
|
||
IF NOT HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH39))
|
||
IF IS_BIT_SET(MPGlobalsAmbience.BountySaveCheck.iBS,BOUNTY_SAVE_CHECK_BS_SURVIVED)
|
||
AWARD_ACHIEVEMENT(ACH39)
|
||
ENDIF
|
||
ENDIF
|
||
|
||
// WE CAN'T CHECK ACH40 - THIS WILL HAPPEN WHEN IT HAPPENS
|
||
|
||
// Decorated - ACH41
|
||
IF NOT HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH41))
|
||
IF (GET_MP_INT_CHARACTER_STAT(MP_STAT_CHAR_FM_PLAT_AWARD_COUNT) >= ACH41_AWARDS_NEEDED)
|
||
AWARD_ACHIEVEMENT(ACH41) // Decorated
|
||
ENDIF
|
||
ENDIF
|
||
|
||
// THERE IS NO ACH42
|
||
|
||
// Stick up Kid - ACH43
|
||
IF NOT HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH43))
|
||
IF (GET_MP_INT_CHARACTER_AWARD (MP_AWARD_HOLD_UP_SHOPS) >= ACH43_HOLDUPSNEEDED)
|
||
AWARD_ACHIEVEMENT(ACH43) // Empty The Register
|
||
ENDIF
|
||
ENDIF
|
||
|
||
// THERE IS NO ACH44
|
||
|
||
// Enjoy Your Stay - ACH45
|
||
IF NOT HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH45))
|
||
CHECK_FRANKIE_SAYS_ACHIEVEMENT(FALSE) // NO TTY
|
||
ENDIF
|
||
|
||
// WE CAN'T CHECK ACH46 - THIS WILL HAVE TO OCCUR WHEN IT HAPPENS
|
||
// WE CAN'T CHECK ACH47 - THIS WILL HAVE TO OCCUR WHEN IT HAPPENS
|
||
|
||
// Dialling Digits - ACH48
|
||
IF NOT HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH48))
|
||
IF GET_PACKED_STAT_BOOL(PACKED_MP_BOUGHT_HELISTRIKES)
|
||
AWARD_ACHIEVEMENT(ACH48)
|
||
ENDIF
|
||
ENDIF
|
||
|
||
// American Dream - ACH49
|
||
IF NOT HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH49))
|
||
CHECK_AMERICAN_DREAM_ACHIEVEMENT()
|
||
ENDIF
|
||
|
||
#IF IS_DEBUG_BUILD
|
||
/* removed heist achievements for NG sub - ACHIEVEMENTS_ENUM is now of out sync with last gen so we need to protect against auto migration
|
||
|
||
// Be Prepared - ACH51
|
||
IF NOT HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH51))
|
||
IF GET_MP_BOOL_CHARACTER_STAT(MP_STAT_HEIST_AWARD_DONE_PREP)
|
||
AWARD_ACHIEVEMENT(ACH51)
|
||
ENDIF
|
||
ENDIF
|
||
|
||
// check for achievement ach_52 - In the name of science - Human Labs Clear
|
||
IF NOT HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH52))
|
||
IF (GET_MP_INT_CHARACTER_STAT(MP_STAT_HEIST_SAVED_STRAND_1_L) > 0) OR (GET_MP_INT_CHARACTER_STAT(MP_STAT_HEIST_SAVED_STRAND_1_M) > 0)
|
||
AWARD_ACHIEVEMENT(ACH52)
|
||
ENDIF
|
||
ENDIF
|
||
|
||
// check for achievement ach_53 - Dead Presidents - Pacific Standard Clear
|
||
IF NOT HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH53))
|
||
IF (GET_MP_INT_CHARACTER_STAT(MP_STAT_HEIST_SAVED_STRAND_0_L) > 0) OR (GET_MP_INT_CHARACTER_STAT(MP_STAT_HEIST_SAVED_STRAND_0_M) > 0)
|
||
AWARD_ACHIEVEMENT(ACH53)
|
||
ENDIF
|
||
ENDIF
|
||
|
||
// check for achievement ach_54 - Parole Day - Prison Break Clear
|
||
IF NOT HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH54))
|
||
IF (GET_MP_INT_CHARACTER_STAT(MP_STAT_HEIST_SAVED_STRAND_2_L) > 0) OR (GET_MP_INT_CHARACTER_STAT(MP_STAT_HEIST_SAVED_STRAND_2_M) > 0)
|
||
AWARD_ACHIEVEMENT(ACH54)
|
||
ENDIF
|
||
ENDIF
|
||
|
||
// Shot Caller - ACH55
|
||
IF NOT HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH55))
|
||
IF GET_MP_BOOL_CHARACTER_STAT(MP_STAT_HEIST_AWARD_BOUGHT_IN)
|
||
AWARD_ACHIEVEMENT(ACH55)
|
||
ENDIF
|
||
ENDIF
|
||
|
||
// Four Way - ACH56
|
||
IF NOT HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH56))
|
||
IF GET_MP_BOOL_CHARACTER_AWARD(MP_AWARD_SPLIT_HEIST_TAKE_EVENLY)
|
||
AWARD_ACHIEVEMENT(ACH56) // Four Way
|
||
ENDIF
|
||
ENDIF
|
||
|
||
// WE CAN'T CHECK ACH57 - THIS WILL HAVE TO OCCUR WHEN IT HAPPENS
|
||
// WE CAN'T CHECK ACH58 - THIS WILL HAVE TO OCCUR WHEN IT HAPPENS
|
||
|
||
// Valuable Asset - ACH59
|
||
IF (GET_MP_INT_CHARACTER_AWARD(MP_AWARD_WIN_GOLD_MEDAL_HEISTS) >= 5) AND NOT HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH59))
|
||
AWARD_ACHIEVEMENT(ACH59)
|
||
ENDIF
|
||
|
||
// Mastermind - ACH59
|
||
IF (GET_MP_INT_CHARACTER_AWARD(MP_AWARD_WIN_GOLD_MEDAL_HEISTS) >= 25) AND NOT HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH60))
|
||
AWARD_ACHIEVEMENT(ACH60)
|
||
ENDIF
|
||
*/
|
||
#ENDIF
|
||
ENDPROC
|
||
|
||
PROC CHECK_ALL_QUEUED_MP_ACHIEVEMENTS_SOCIAL()
|
||
INT i
|
||
|
||
// check standard achievements
|
||
FOR i = ENUM_TO_INT(ACH00) TO ENUM_TO_INT(ACH49)
|
||
IF NOT HAS_ACHIEVEMENT_BEEN_PASSED(i)
|
||
IF SC_HAS_ACHIEVEMENT_BEEN_PASSED(i)
|
||
AWARD_ACHIEVEMENT(INT_TO_ENUM(ACHIEVEMENT_ENUM, i))
|
||
ENDIF
|
||
ENDIF
|
||
ENDFOR
|
||
|
||
// check heist achievements
|
||
FOR i = ENUM_TO_INT(ACHH1) TO ENUM_TO_INT(ACHH10)
|
||
IF NOT HAS_ACHIEVEMENT_BEEN_PASSED(i)
|
||
IF SC_HAS_ACHIEVEMENT_BEEN_PASSED(i)
|
||
AWARD_ACHIEVEMENT(INT_TO_ENUM(ACHIEVEMENT_ENUM, i))
|
||
ENDIF
|
||
ENDIF
|
||
ENDFOR
|
||
|
||
// check gang ops achievements
|
||
FOR i = ENUM_TO_INT(ACHGO1) TO ENUM_TO_INT(ACHGO8)
|
||
IF NOT HAS_ACHIEVEMENT_BEEN_PASSED(i)
|
||
IF SC_HAS_ACHIEVEMENT_BEEN_PASSED(i)
|
||
AWARD_ACHIEVEMENT(INT_TO_ENUM(ACHIEVEMENT_ENUM, i))
|
||
ENDIF
|
||
ENDIF
|
||
ENDFOR
|
||
ENDPROC
|
||
|
||
PROC CHECK_ALL_QUEUED_MP_ACHIEVEMENTS()
|
||
|
||
// don't do this unless we are in mp and the queue is running
|
||
IF NOT IS_ACHIEVEMENT_QUEUE_RUNNING(q_mAchievementQueue)
|
||
EXIT
|
||
ENDIF
|
||
|
||
IF NOT g_bInMultiplayer
|
||
// this is to reset the sync check if we leave MP
|
||
IF (bAllMPAchievementSynced)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT] - CHECK_ALL_QUEUED_MP_ACHIEVEMENTS - PLAYER HAS LEFT MP - RESETTING bAllMPAchievementSynced FLAG")
|
||
bAllMPAchievementSynced = FALSE
|
||
ENDIF
|
||
EXIT
|
||
ENDIF
|
||
|
||
IF NOT HAS_IMPORTANT_STATS_LOADED()
|
||
EXIT
|
||
ENDIF
|
||
|
||
IF (bWaitForAwardsToFinish)
|
||
IF NOT IS_FREEMODE_PROLOGUE_PROFILE_SETTINGS_PASSED(PSFP_FINISHED_PROCESSING_TRANSFER_SAVE_MPAWARDS)
|
||
//CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT] - CHECK_ALL_QUEUED_MP_ACHIEVEMENTS - SAVE MP AWARD TRANSFER IS NOT FINISHED YET")
|
||
EXIT
|
||
ENDIF
|
||
|
||
IF NOT IS_FREEMODE_PROLOGUE_PROFILE_SETTINGS_PASSED(PSFP_PLAYER_FINISHED_TRANSFER_SAVES)
|
||
//CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT] - CHECK_ALL_QUEUED_MP_ACHIEVEMENTS - SAVE TRANSFER IS NOT FINISHED YET")
|
||
EXIT
|
||
ENDIF
|
||
ENDIF
|
||
|
||
IF (bAllMPAchievementSynced)
|
||
EXIT
|
||
ENDIF
|
||
|
||
BOOL ok
|
||
INT iAchStatus
|
||
|
||
// (status == -1) - INVALID status request to read achievements has not even started.
|
||
// (status == 0) - Read SUCCEEDED information is available.
|
||
// (status == 1) - Read is PENDING, in progress.
|
||
// (status == 2) - Read FAILED.
|
||
// (status == 3) - Read CANCELED.
|
||
|
||
ok = SC_ACHIEVEMENT_INFO_STATUS(iAchStatus)
|
||
|
||
IF (iAchStatus = -1) AND (bForceAchievementSCSSync = FALSE)
|
||
//CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT] - FORCE SYNC ACHIEVEMENT SYCNHRONIZE")
|
||
//SC_ACHIEVEMENT_SYNCHRONIZE()
|
||
//bForceAchievementSCSSync = TRUE
|
||
ENDIF
|
||
|
||
|
||
IF (ok) AND (iAchStatus = 0)
|
||
CHECK_ALL_QUEUED_MP_ACHIEVEMENTS_SOCIAL()
|
||
bAllMPAchievementSynced = TRUE
|
||
ELSE
|
||
CHECK_ALL_QUEUED_MP_ACHIEVEMENTS_NO_SOCIAL()
|
||
ENDIF
|
||
ENDPROC
|
||
|
||
//----------------------
|
||
// DEBUG FUNCTIONS
|
||
//----------------------
|
||
#IF IS_DEBUG_BUILD
|
||
|
||
PROC UPDATE_ACHIEVEMENT_DEBUG_WIDGETS()
|
||
|
||
INT i
|
||
|
||
bCheckShitSkipReplay = IS_BIT_SET(g_replay.iReplayBits, ENUM_TO_INT(RB_DID_WE_EVER_SHITSKIP))
|
||
|
||
bHaveImportantStatsLoaded = HAS_IMPORTANT_STATS_LOADED()
|
||
bHasFreemodeAwardProcessingFinished = IS_FREEMODE_PROLOGUE_PROFILE_SETTINGS_PASSED(PSFP_FINISHED_PROCESSING_TRANSFER_SAVE_MPAWARDS)
|
||
bHasFreemodeMigrationFinished = IS_FREEMODE_PROLOGUE_PROFILE_SETTINGS_PASSED(PSFP_PLAYER_FINISHED_TRANSFER_SAVES)
|
||
bACHDebugDirectorModeCheck = IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_DIRECTOR)
|
||
fDebugAchievementQueueTime = ACHIEVEMENT_QUEUE_TIME
|
||
|
||
IF (bAchievementTest)
|
||
AWARD_ACHIEVEMENT_BY_INT(iAchievementTest)
|
||
bDumpAchievementQueueToTTY = TRUE
|
||
bAchievementTest = FALSE
|
||
ENDIF
|
||
|
||
IF (bAllAchievementTest)
|
||
REPEAT ENUM_TO_INT(ACHIEVEMENT_COUNT) i
|
||
IF (i > 0)
|
||
AWARD_ACHIEVEMENT_BY_INT(i)
|
||
ENDIF
|
||
ENDREPEAT
|
||
|
||
bAllAchievementTest = FALSE
|
||
ENDIF
|
||
|
||
IF (bDumpHeistAchievementInfo)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT] - DUMP HEIST ACHIEVEMENT INFO")
|
||
i = 0
|
||
REPEAT ENUM_TO_INT(MAX_HEISTACHCHK_ID) i
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, " ", GET_STRING_FROM_HEIST_ACHIEVEMENT_ID(INT_TO_ENUM(eHeistACHCheckID, i)), " IS SET:", IS_HEIST_ACHIEVEMENT_ID_SET(INT_TO_ENUM(eHeistACHCheckID, i)))
|
||
ENDREPEAT
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT] - DUMP HEIST ACHIEVEMENT INFO - END")
|
||
|
||
bDumpHeistAchievementInfo = FALSE
|
||
ENDIF
|
||
|
||
IF (bTestHeistAchievementInfo)
|
||
SET_HEIST_ACHIEVEMENT_ID(INT_TO_ENUM(eHeistACHCheckID, iHeistAchievementInfoSlider))
|
||
|
||
bTestHeistAchievementInfo = FALSE
|
||
ENDIF
|
||
|
||
IF (bDumpAchievementQueueToTTY)
|
||
DUMP_ACHIEVEMENT_QUEUE_TO_TTY(q_mAchievementQueue)
|
||
bDumpAchievementQueueToTTY = FALSE
|
||
ENDIF
|
||
|
||
IF (bUpdateAchievementList)
|
||
DUMP_ACHIEVEMENT_LIST_TO_TTY()
|
||
bUpdateAchievementList = FALSE
|
||
ENDIF
|
||
|
||
IF (bDebugForceAchievementSCSSync)
|
||
SC_ACHIEVEMENT_SYNCHRONIZE()
|
||
bDebugForceAchievementSCSSync = FALSE
|
||
ENDIF
|
||
|
||
IF (bTestSCSAchievement)
|
||
DUMP_SCS_ACHIEVEMENT_STATUS_TO_TTY()
|
||
bTestSCSAchievement = FALSE
|
||
ENDIF
|
||
|
||
IF NOT bAllowDebugWidgetUpdate
|
||
EXIT
|
||
ENDIF
|
||
|
||
IF (bTestShark)
|
||
SET_ENTITY_COORDS(PLAYER_PED_ID(), <<-8000, 0, 0>>)
|
||
bTestShark = FALSE
|
||
ENDIF
|
||
|
||
|
||
|
||
IF (bVerbose)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT] - VERBOSE OUTPUT START!!!")
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT] - Have Important Stats Loaded:", HAS_IMPORTANT_STATS_LOADED())
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT] - Repeat Play Bits:", g_iRepeatPlayBits)
|
||
UPDATE_POLLED_ACHIEVEMENTS(TRUE)
|
||
PRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT] - VERBOSE OUTPUT END!!!")
|
||
|
||
COUNT_SOLID_GOLD_MEDALS(TRUE)
|
||
bVerbose = FALSE
|
||
ENDIF
|
||
|
||
IF (bPrintCarDimensions)
|
||
IF IS_PED_IN_ANY_VEHICLE(PLAYER_PED_ID())
|
||
VECTOR vMin, vMax
|
||
GET_MODEL_DIMENSIONS(GET_ENTITY_MODEL(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())), vMin, vMax)
|
||
CPRINTLN(DEBUG_AMBIENT, "----------CAR DUMP DATA -----------")
|
||
CPRINTLN(DEBUG_AMBIENT, "MODEL:", GET_MODEL_NAME_OF_VEHICLE_FOR_DEBUG_ONLY(GET_VEHICLE_PED_IS_IN(PLAYER_PED_ID())))
|
||
CPRINTLN(DEBUG_AMBIENT, "MIN:", vMin, " MAX:", vMax)
|
||
CPRINTLN(DEBUG_AMBIENT, "L:", ABSF(vMax.y - vMin.y), " W:", ABSF(vMax.x - vMin.x), " H:", ABSF(vMax.z - vMin.z))
|
||
CPRINTLN(DEBUG_AMBIENT, "---------- CAR DUMP END -----------")
|
||
ENDIF
|
||
bPrintCarDimensions = FALSE
|
||
ENDIF
|
||
|
||
|
||
IF (bUpdateAchievementList)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "---------- ACHIEVEMENT LIST -----------")
|
||
//CPRINTLN(DEBUG_ACHIEVEMENT, "PLATINUM ", HAS_ACHIEVEMENT_BEEN_PASSED(00))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH00 - Welcome to Los Santos ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH00)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH01 - Who Needs Enemies? ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH01)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH02 - A Fair Days Pay ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH02)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH03 - The Not So Shallow Grave ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH03)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH04 - To Live Or Die In Los Santos ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH04)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH05 - Diamond Hard ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH05)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH06 - Subversive ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH06)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH42 - Blitzed ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH42)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH07 - Small Town, Big Job ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH07)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH08 - The Government Gimps ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH08)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH09 - The Big One! ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH09)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH10 - Solid Gold, Baby! ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH10)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH11 - Career Criminal ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH11)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH12 - All’s Fare In Love And War ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH12)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH13 - TP Industries Arms Race ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH13)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH14 - Multi-disciplined ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH14)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH15 - From Beyond The Stars ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH15)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH16 - A Mystery, Solved ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH16)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH17 - Nuclear Waste ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH17)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH18 - Blast From The Past ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH18)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH19 - Show Off ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH19)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH20 - Kifflom! ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH20)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH21 - Three Man Army ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH21)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH22 - Out Of Your Depth ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH22)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH23 - Altruist Acolyte ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH23)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH24 - A Lot Of Cheddar ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH24)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH25 - Trading Pure Alpha ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH25)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH26 - Pimp My Sidearm ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH26)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH27 - Wanted: Alive Or Alive ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH27)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH28 - Los Santos Customs ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH28)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH29 - Close Shave ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH29)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH30 - Off The Plane ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH30)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH31 - All Set ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH31)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH32 - Making Moves ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH32)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH33 - Above The Law ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH33)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH34 - Top Dawg ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH34)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH35 - Midnight Club Veteran ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH35)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH36 - Unnatural Selection ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH36)))
|
||
//CPRINTLN(DEBUG_ACHIEVEMENT, "ACH37 - Gang Banged ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH37)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH38 - I Got You ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH38)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH39 - Dogged ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH39)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH40 - Never Saw It Coming ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH40)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH41 - Award Junkie ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH41)))
|
||
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH43 - Empty The Register ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH43)))
|
||
//CPRINTLN(DEBUG_ACHIEVEMENT, "ACH44 - Got Away With Murder ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH44)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH45 - Frankie Says ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH45)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH46 - Crew Cut ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH46)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH47 - Full Refund ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH47)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH48 - Phone A Friend ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH48)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH49 - American Dream ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH49)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH50 - San Andreas Sightseer ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH50)))
|
||
|
||
#IF USE_TU_CHANGES
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACHH1 - Be Prepared ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACHH1)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACHH2 - In the Name of Science ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACHH2)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACHH3 - Dead Presidents ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACHH3)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACHH4 - Parole Day ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACHH4)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACHH5 - Shot Caller ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACHH5)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACHH6 - Four Way ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACHH6)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACHH7 - Live a Little ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACHH7)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACHH8 - Can't Touch This ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACHH8)))
|
||
//CPRINTLN(DEBUG_ACHIEVEMENT, "ACHH9 - Valuable Asset ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACHH9)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACHH10 - Mastermind ", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACHH10)))
|
||
|
||
//New Heists 2 achievements
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACHGO1 - Getting Started", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACHGO1)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACHGO2 - The IAA Job", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACHGO2)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACHGO3 - The Submarine Job", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACHGO3)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACHGO4 - The Missile Silo Job", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACHGO4)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACHGO5 - A World Worth Saving", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACHGO5)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACHGO6 - Orbital Obliteration", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACHGO6)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACHGO7 - Elitist", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACHGO7)))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "ACHGO8 - Masterminds", HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACHGO8)))
|
||
|
||
#ENDIF
|
||
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "---------------------------------------")
|
||
bUpdateAchievementList = FALSE
|
||
ENDIF
|
||
|
||
ENDPROC
|
||
#ENDIF
|
||
|
||
//----------------------
|
||
// MAIN SCRIPT
|
||
//----------------------
|
||
|
||
SCRIPT
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT]: Starting Achievement Controller - DEV NG - B*2228556 VERSION")
|
||
NETWORK_SET_SCRIPT_IS_SAFE_FOR_NETWORK_GAME()
|
||
|
||
// This script needs to cleanup only when run the magdemo
|
||
IF (HAS_FORCE_CLEANUP_OCCURRED(FORCE_CLEANUP_FLAG_MAGDEMO))
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT]: Achievement Controller has been forced to cleanup (MAGDEMO)")
|
||
TERMINATE_THIS_THREAD()
|
||
ENDIF
|
||
|
||
// setup timers
|
||
iNextPollCheckTime = GET_GAME_TIMER()
|
||
iLastBitsetCheatsUsedThisSession = 0
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT]: Achievement Total:", COUNT_ACHIEVEMENTS())
|
||
|
||
//CPRINTLN(DEBUG_ACHIEVEMENT, " TotalMoneySpent:", iTotalMoneySpent)
|
||
|
||
#IF IS_DEBUG_BUILD
|
||
SETUP_ACHIEVEMENT_DEBUG_WIDGETS()
|
||
bVerbose = TRUE
|
||
#ENDIF
|
||
|
||
DUMMY_REFERENCE_INT(iPollCheck)
|
||
DUMP_ACHIEVEMENT_LIST_TO_TTY()
|
||
RESET_ACHIEVEMENT_QUEUE(q_mAchievementQueue)
|
||
SET_ACHIEVEMENT_QUEUE_RUNNING(q_mAchievementQueue)
|
||
RESTART_TIMER_NOW(ach26MPCheckTimer)
|
||
|
||
WHILE (TRUE)
|
||
|
||
IF (g_iBitsetCheatsUsedThisSession <> iLastBitsetCheatsUsedThisSession)
|
||
IF (iLastBitsetCheatsUsedThisSession = 0) AND (g_iBitsetCheatsUsedThisSession != 0)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT] - A cheat has been activated")
|
||
|
||
// B*1585269
|
||
IF IS_PS3_VERSION()
|
||
OR IS_PLAYSTATION_PLATFORM()
|
||
PRINT_HELP("CHEAT_TROPHIE")
|
||
ELSE
|
||
PRINT_HELP("CHEAT_ACHIEVE")
|
||
ENDIF
|
||
ENDIF
|
||
|
||
IF (iLastBitsetCheatsUsedThisSession != 0) AND (g_iBitsetCheatsUsedThisSession = 0)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT] - Cheats have been reset")
|
||
ENDIF
|
||
ENDIF
|
||
|
||
iLastBitsetCheatsUsedThisSession = g_iBitsetCheatsUsedThisSession
|
||
|
||
#IF IS_DEBUG_BUILD
|
||
UPDATE_ACHIEVEMENT_DEBUG_WIDGETS()
|
||
IF (bQuitScript)
|
||
SCRIPT_CLEANUP()
|
||
ENDIF
|
||
#ENDIF
|
||
|
||
//B* 2217854: Disable achievements in Director mode
|
||
IF NOT IS_CURRENTLY_ON_MISSION_OF_TYPE(MISSION_TYPE_DIRECTOR)
|
||
|
||
IF NOT HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH21))
|
||
UPDATE_ACHIEVEMENT_THREE_MAN_ARMY()
|
||
ENDIF
|
||
|
||
IF NOT HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH22))
|
||
UPDATE_ACHIEVEMENT_OUT_OF_YOUR_DEPTH()
|
||
ENDIF
|
||
|
||
// Count Solid Gold Baby Achievement
|
||
IF (g_bCheckSolidGoldBabyAchievement)
|
||
CPRINTLN(DEBUG_ACHIEVEMENT, "[ACHIEVEMENT] - A RC or Story Mission has ended check gold")
|
||
IF NOT HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH10))
|
||
INT iMedals = COUNT_SOLID_GOLD_MEDALS(TRUE)
|
||
IF iMedals>0
|
||
SET_ACHIEVEMENT_PROGRESS_SAFE(ENUM_TO_INT(ACH10),iMedals)
|
||
STAT_SET_INT(NUM_GOLD_MEDALS_OBTAINED,iMedals)
|
||
ENDIF
|
||
IF ( iMedals >= ACH10_GOLDS_NEEDED)
|
||
AWARD_ACHIEVEMENT(ACH10) // Solid Gold Baby
|
||
ENDIF
|
||
ENDIF
|
||
g_bCheckSolidGoldBabyAchievement = FALSE
|
||
ENDIF
|
||
|
||
|
||
IF DOES_ENTITY_EXIST(PLAYER_PED_ID())
|
||
IF NOT IS_ENTITY_DEAD(PLAYER_PED_ID())
|
||
|
||
iPollCheck ++
|
||
|
||
IF (GET_GAME_TIMER() > iNextPollCheckTime)
|
||
UPDATE_POLLED_ACHIEVEMENTS()
|
||
iNextPollCheckTime = GET_GAME_TIMER() + iNextPollDelay
|
||
ENDIF
|
||
|
||
IF (GET_GAME_TIMER() > iNextMapPollCheckTime)
|
||
IF NOT HAS_ACHIEVEMENT_BEEN_PASSED(ENUM_TO_INT(ACH50)) OR (bForceRunMapCheck = true)
|
||
IF GET_MISSION_COMPLETE_STATE(SP_MISSION_PROLOGUE)
|
||
CHECK_SAN_ANDREAS_SIGHTSEER_ACHIEVEMENT()
|
||
ENDIF
|
||
ENDIF
|
||
iNextMapPollCheckTime = GET_GAME_TIMER() + iNextMapPollDelay
|
||
ENDIF
|
||
ENDIF
|
||
ENDIF
|
||
|
||
UPDATE_ACHIEVEMENT_QUEUE(q_mAchievementQueue)
|
||
CHECK_ALL_QUEUED_MP_ACHIEVEMENTS()
|
||
ELSE
|
||
UPDATE_ACHIEVEMENT_QUEUE(q_mAchievementQueue)
|
||
CHECK_ALL_QUEUED_MP_ACHIEVEMENTS()
|
||
ENDIF
|
||
|
||
WAIT(0)
|
||
ENDWHILE
|
||
ENDSCRIPT
|
||
|
||
|
||
|
||
|