522 lines
17 KiB
Scheme
Executable File
522 lines
17 KiB
Scheme
Executable File
//Golf stat managment
|
|
USING "minigames_helpers.sch"
|
|
USING "net_stat_system.sch"
|
|
USING "socialclub_leaderboard.sch"
|
|
USING "net_leaderboards.sch"
|
|
USING "achievement_public.sch"
|
|
|
|
#IF NOT GOLF_IS_AI_ONLY
|
|
SC_LEADERBOARD_CONTROL_STRUCT golfLB_control
|
|
INT iLocalRoundsPlayed
|
|
INT iLocalNumShots
|
|
INT iLocalShotsOnHole[9]
|
|
BOOL bWonGolfStat
|
|
BOOL bUpdateLeaderBoard = FALSE
|
|
#ENDIF
|
|
|
|
FUNC BOOL IS_WON_GOLF_STAT_SET()
|
|
RETURN bWonGolfStat
|
|
ENDFUNC
|
|
|
|
FUNC INT GET_GOLF_STAT_LOWEST_ROUND(INT iIsMP = GOLF_IS_MP)
|
|
INT ret
|
|
|
|
IF iIsMP != 0
|
|
ret = g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iBestRound
|
|
ELSE
|
|
ret = g_savedGlobals.sGolfData.iBestRound
|
|
ENDIF
|
|
|
|
RETURN ret
|
|
ENDFUNC
|
|
|
|
|
|
FUNC FLOAT GET_GOLF_STAT_LONGEST_DRIVE(INT iIsMP = GOLF_IS_MP)
|
|
FLOAT ret
|
|
|
|
IF iIsMP != 0
|
|
ret = g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.fLongestDrive
|
|
ELSE
|
|
ret = g_savedGlobals.sGolfData.fLongestDrive
|
|
ENDIF
|
|
|
|
RETURN ret
|
|
ENDFUNC
|
|
|
|
FUNC FLOAT GET_GOLF_STAT_LONGEST_PUTT(INT iIsMP = GOLF_IS_MP)
|
|
FLOAT ret
|
|
|
|
IF iIsMP != 0
|
|
ret = g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.fLongestPutt
|
|
ELSE
|
|
ret = g_savedGlobals.sGolfData.fLongestPutt
|
|
ENDIF
|
|
|
|
RETURN ret
|
|
ENDFUNC
|
|
|
|
FUNC INT GET_GOLF_STAT_ROUNDS_PLAYED(INT iIsMP = GOLF_IS_MP)
|
|
INT ret
|
|
|
|
IF iIsMP != 0
|
|
ret = g_savedGlobals.sGolfData.iNumRoundsPlayedMP
|
|
ELSE
|
|
ret = g_savedGlobals.sGolfData.iNumRoundsPlayedSP
|
|
ENDIF
|
|
|
|
RETURN ret
|
|
ENDFUNC
|
|
|
|
FUNC INT GET_GOLF_STAT_NUM_WINS(INT iIsMP = GOLF_IS_MP)
|
|
|
|
IF iIsMP != 0
|
|
RETURN GET_MP_INT_PLAYER_STAT(MPPLY_GOLF_WINS)
|
|
ELSE
|
|
RETURN g_savedGlobals.sGolfData.iNumGolfWins
|
|
ENDIF
|
|
|
|
ENDFUNC
|
|
|
|
FUNC INT GET_GOLF_STAT_NUM_SHOTS()
|
|
RETURN iLocalNumShots
|
|
ENDFUNC
|
|
|
|
FUNC FLOAT GET_GOLF_STAT_LONGEST_DRIVE_ON_HOLE(INT iHole, INT iIsMP = GOLF_IS_MP)
|
|
FLOAT ret
|
|
|
|
IF iIsMP != 0
|
|
ret = g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.fLongestDriveHole[iHole]
|
|
ELSE
|
|
ret = g_savedGlobals.sGolfData.sCourse[0].sHole[iHole].fLongestDriveHole
|
|
ENDIF
|
|
|
|
RETURN ret
|
|
ENDFUNC
|
|
|
|
FUNC FLOAT GET_GOLF_STAT_LONGEST_PUTT_ON_HOLE(INT iHole, INT iIsMP = GOLF_IS_MP)
|
|
FLOAT ret
|
|
|
|
IF iIsMP != 0
|
|
ret = g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.fLongestPuttHole[iHole]
|
|
ELSE
|
|
ret = g_savedGlobals.sGolfData.sCourse[0].sHole[iHole].fLongestPuttHole
|
|
ENDIF
|
|
|
|
RETURN ret
|
|
ENDFUNC
|
|
|
|
FUNC INT GET_GOLF_STAT_SHOTS_ON_HOLE(INT iHole)
|
|
RETURN iLocalShotsOnHole[iHole]
|
|
ENDFUNC
|
|
|
|
FUNC TEXT_LABEL_15 APPEND_YARDS_TO_NUMBER(INT iNum)
|
|
|
|
TEXT_LABEL_15 txtRet = SC_LEADERBOARD_MAKE_INT_PRETTY(iNum)
|
|
txtRet += " yards"
|
|
|
|
RETURN txtRet
|
|
|
|
ENDFUNC
|
|
|
|
PROC GOLF_WRITE_TO_LEADERBOARD(INT iIsMp = GOLF_IS_MP)
|
|
// SCORE_COLUMN ( AGG_Max ) - InputId: LB_INPUT_COL_SCORE
|
|
// LONGEST_DRIVE ( AGG_Max ) - InputId: LB_INPUT_COL_NUM_DRIVES
|
|
// LONGEST_PUTT ( AGG_Max ) - InputId: LB_INPUT_COL_NUM_PUTT
|
|
// NUM_MATCHES ( AGG_Sum ) - InputId: LB_INPUT_COL_NUM_MATCHES
|
|
// NUM_WINS ( AGG_Sum ) - InputId: LB_INPUT_COL_NUM_WINS
|
|
// NUM_SHOTS ( AGG_Sum ) - InputId: LB_INPUT_COL_NUM_SHOTS_GOLF
|
|
// HOLE_1_DRIVE ( AGG_Max ) - InputId: LB_INPUT_COL_HOLE_1_DRIVE
|
|
// HOLE_1_PUTT ( AGG_Max ) - InputId: LB_INPUT_COL_HOLE_1_PUTT
|
|
// HOLE_1_SHOTS ( AGG_Sum ) - InputId: LB_INPUT_COL_HOLE_1_SHOTS
|
|
// HOLE_2_DRIVE ( AGG_Max ) - InputId: LB_INPUT_COL_HOLE_2_DRIVE
|
|
// HOLE_2_PUTT ( AGG_Max ) - InputId: LB_INPUT_COL_HOLE_2_PUTT
|
|
// HOLE_2_SHOTS ( AGG_Sum ) - InputId: LB_INPUT_COL_HOLE_2_SHOTS
|
|
// HOLE_3_DRIVE ( AGG_Max ) - InputId: LB_INPUT_COL_HOLE_3_DRIVE
|
|
// HOLE_3_PUTT ( AGG_Max ) - InputId: LB_INPUT_COL_HOLE_3_PUTT
|
|
// HOLE_3_SHOTS ( AGG_Sum ) - InputId: LB_INPUT_COL_HOLE_3_SHOTS
|
|
// HOLE_4_DRIVE ( AGG_Max ) - InputId: LB_INPUT_COL_HOLE_4_DRIVE
|
|
// HOLE_4_PUTT ( AGG_Max ) - InputId: LB_INPUT_COL_HOLE_4_PUTT
|
|
// HOLE_4_SHOTS ( AGG_Sum ) - InputId: LB_INPUT_COL_HOLE_4_SHOTS
|
|
// HOLE_5_DRIVE ( AGG_Max ) - InputId: LB_INPUT_COL_HOLE_5_DRIVE
|
|
// HOLE_5_PUTT ( AGG_Max ) - InputId: LB_INPUT_COL_HOLE_5_PUTT
|
|
// HOLE_5_SHOTS ( AGG_Sum ) - InputId: LB_INPUT_COL_HOLE_5_SHOTS
|
|
// HOLE_6_DRIVE ( AGG_Max ) - InputId: LB_INPUT_COL_HOLE_6_DRIVE
|
|
// HOLE_6_PUTT ( AGG_Max ) - InputId: LB_INPUT_COL_HOLE_6_PUTT
|
|
// HOLE_6_SHOTS ( AGG_Sum ) - InputId: LB_INPUT_COL_HOLE_6_SHOTS
|
|
// HOLE_7_DRIVE ( AGG_Max ) - InputId: LB_INPUT_COL_HOLE_7_DRIVE
|
|
// HOLE_7_PUTT ( AGG_Max ) - InputId: LB_INPUT_COL_HOLE_7_PUTT
|
|
// HOLE_7_SHOTS ( AGG_Sum ) - InputId: LB_INPUT_COL_HOLE_7_SHOTS
|
|
// HOLE_8_DRIVE ( AGG_Max ) - InputId: LB_INPUT_COL_HOLE_8_DRIVE
|
|
// HOLE_8_PUTT ( AGG_Max ) - InputId: LB_INPUT_COL_HOLE_8_PUTT
|
|
// HOLE_8_SHOTS ( AGG_Sum ) - InputId: LB_INPUT_COL_HOLE_8_SHOTS
|
|
// HOLE_9_DRIVE ( AGG_Max ) - InputId: LB_INPUT_COL_HOLE_9_DRIVE
|
|
// HOLE_9_PUTT ( AGG_Max ) - InputId: LB_INPUT_COL_HOLE_9_PUTT
|
|
// HOLE_9_SHOTS ( AGG_Sum ) - InputId: LB_INPUT_COL_HOLE_9_SHOTS
|
|
// Instances: 3
|
|
// GameType,Location,Type
|
|
// GameType,Location,Type,Challenge
|
|
// GameType,Location,Type,ScEvent
|
|
|
|
//Why 3 categories? Do we not just want 1 MP or SP??
|
|
TEXT_LABEL_31 categoryNames[1]
|
|
TEXT_LABEL_23 uniqueIdentifiers[1]
|
|
categoryNames[0] = "GameType"
|
|
|
|
// Begin setting the leaderboard data types
|
|
IF iIsMp != 0
|
|
uniqueIdentifiers[0] = "MP"
|
|
ELSE
|
|
uniqueIdentifiers[0] = "SP"
|
|
ENDIF
|
|
|
|
IF NOT bUpdateLeaderBoard
|
|
CDEBUG1LN(DEBUG_GOLF,"Didn't do anything, don't update leaderboard")
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF NOT bAllowLeaderboardUpload
|
|
CDEBUG1LN(DEBUG_GOLF, "Disabled leaderboard update")
|
|
EXIT
|
|
ENDIF
|
|
|
|
CDEBUG1LN(DEBUG_GOLF,"Writing golf stats ", uniqueIdentifiers[0])
|
|
|
|
IF INIT_LEADERBOARD_WRITE(LEADERBOARD_MINI_GAMES_GOLF, uniqueIdentifiers,categoryNames, 1,-1,TRUE)
|
|
|
|
WRITE_VALUE_TO_LEADERBOARD_USED_FOR_RANK_PREDICTION(ENUM_TO_INT(LEADERBOARD_MINI_GAMES_GOLF), LB_INPUT_COL_SCORE, -GET_GOLF_STAT_LOWEST_ROUND(), 0.0)
|
|
WRITE_VALUE_TO_LEADERBOARD_USED_FOR_RANK_PREDICTION(ENUM_TO_INT(LEADERBOARD_MINI_GAMES_GOLF), LB_INPUT_COL_NUM_DRIVES, FLOOR(GET_GOLF_STAT_LONGEST_DRIVE()), 0.0)
|
|
LEADERBOARDS_WRITE_ADD_COLUMN( LB_INPUT_COL_NUM_PUTT, FLOOR(GET_GOLF_STAT_LONGEST_PUTT()), 0.0)
|
|
|
|
//Sum data
|
|
WRITE_VALUE_TO_LEADERBOARD_USED_FOR_RANK_PREDICTION(ENUM_TO_INT(LEADERBOARD_MINI_GAMES_GOLF), LB_INPUT_COL_NUM_MATCHES, iLocalRoundsPlayed, 0.0)
|
|
LEADERBOARDS_WRITE_ADD_COLUMN( LB_INPUT_COL_NUM_WINS, PICK_INT(IS_WON_GOLF_STAT_SET(), 1, 0), 0.0)
|
|
|
|
//Hole records
|
|
LEADERBOARDS_WRITE_ADD_COLUMN( LB_INPUT_COL_HOLE_1_DRIVE, FLOOR(GET_GOLF_STAT_LONGEST_DRIVE_ON_HOLE(0)), 0.0)
|
|
LEADERBOARDS_WRITE_ADD_COLUMN( LB_INPUT_COL_HOLE_1_PUTT, FLOOR(GET_GOLF_STAT_LONGEST_PUTT_ON_HOLE(0)), 0.0)
|
|
LEADERBOARDS_WRITE_ADD_COLUMN( LB_INPUT_COL_HOLE_1_SHOTS, GET_GOLF_STAT_SHOTS_ON_HOLE(0) , 0.0)
|
|
|
|
LEADERBOARDS_WRITE_ADD_COLUMN( LB_INPUT_COL_HOLE_2_DRIVE, FLOOR(GET_GOLF_STAT_LONGEST_DRIVE_ON_HOLE(1)), 0.0)
|
|
LEADERBOARDS_WRITE_ADD_COLUMN( LB_INPUT_COL_HOLE_2_PUTT, FLOOR(GET_GOLF_STAT_LONGEST_PUTT_ON_HOLE(1)), 0.0)
|
|
LEADERBOARDS_WRITE_ADD_COLUMN( LB_INPUT_COL_HOLE_2_SHOTS, GET_GOLF_STAT_SHOTS_ON_HOLE(1) , 0.0)
|
|
|
|
LEADERBOARDS_WRITE_ADD_COLUMN( LB_INPUT_COL_HOLE_3_DRIVE, -FLOOR(GET_GOLF_STAT_LONGEST_DRIVE_ON_HOLE(2)), 0.0)
|
|
LEADERBOARDS_WRITE_ADD_COLUMN( LB_INPUT_COL_HOLE_3_PUTT, FLOOR(GET_GOLF_STAT_LONGEST_PUTT_ON_HOLE(2)), 0.0)
|
|
LEADERBOARDS_WRITE_ADD_COLUMN( LB_INPUT_COL_HOLE_3_SHOTS, GET_GOLF_STAT_SHOTS_ON_HOLE(2) , 0.0)
|
|
|
|
LEADERBOARDS_WRITE_ADD_COLUMN( LB_INPUT_COL_HOLE_4_DRIVE, FLOOR(GET_GOLF_STAT_LONGEST_DRIVE_ON_HOLE(3)), 0.0)
|
|
LEADERBOARDS_WRITE_ADD_COLUMN( LB_INPUT_COL_HOLE_4_PUTT, FLOOR(GET_GOLF_STAT_LONGEST_PUTT_ON_HOLE(3)), 0.0)
|
|
LEADERBOARDS_WRITE_ADD_COLUMN( LB_INPUT_COL_HOLE_4_SHOTS, GET_GOLF_STAT_SHOTS_ON_HOLE(3) , 0.0)
|
|
|
|
LEADERBOARDS_WRITE_ADD_COLUMN( LB_INPUT_COL_HOLE_5_DRIVE, FLOOR(GET_GOLF_STAT_LONGEST_DRIVE_ON_HOLE(4)), 0.0)
|
|
LEADERBOARDS_WRITE_ADD_COLUMN(LB_INPUT_COL_HOLE_5_PUTT, FLOOR(GET_GOLF_STAT_LONGEST_PUTT_ON_HOLE(4)), 0.0)
|
|
LEADERBOARDS_WRITE_ADD_COLUMN( LB_INPUT_COL_HOLE_5_SHOTS, GET_GOLF_STAT_SHOTS_ON_HOLE(4) , 0.0)
|
|
|
|
LEADERBOARDS_WRITE_ADD_COLUMN( LB_INPUT_COL_HOLE_6_DRIVE, -FLOOR(GET_GOLF_STAT_LONGEST_DRIVE_ON_HOLE(5)), 0.0)
|
|
LEADERBOARDS_WRITE_ADD_COLUMN( LB_INPUT_COL_HOLE_6_PUTT, FLOOR(GET_GOLF_STAT_LONGEST_PUTT_ON_HOLE(5)), 0.0)
|
|
LEADERBOARDS_WRITE_ADD_COLUMN( LB_INPUT_COL_HOLE_6_SHOTS, GET_GOLF_STAT_SHOTS_ON_HOLE(5) , 0.0)
|
|
|
|
LEADERBOARDS_WRITE_ADD_COLUMN( LB_INPUT_COL_HOLE_7_DRIVE, FLOOR(GET_GOLF_STAT_LONGEST_DRIVE_ON_HOLE(6)), 0.0)
|
|
LEADERBOARDS_WRITE_ADD_COLUMN( LB_INPUT_COL_HOLE_7_PUTT, FLOOR(GET_GOLF_STAT_LONGEST_PUTT_ON_HOLE(6)), 0.0)
|
|
LEADERBOARDS_WRITE_ADD_COLUMN( LB_INPUT_COL_HOLE_7_SHOTS, GET_GOLF_STAT_SHOTS_ON_HOLE(6) , 0.0)
|
|
|
|
LEADERBOARDS_WRITE_ADD_COLUMN( LB_INPUT_COL_HOLE_8_DRIVE, FLOOR(GET_GOLF_STAT_LONGEST_DRIVE_ON_HOLE(7)), 0.0)
|
|
LEADERBOARDS_WRITE_ADD_COLUMN( LB_INPUT_COL_HOLE_8_PUTT, FLOOR(GET_GOLF_STAT_LONGEST_PUTT_ON_HOLE(7)), 0.0)
|
|
LEADERBOARDS_WRITE_ADD_COLUMN( LB_INPUT_COL_HOLE_8_SHOTS, GET_GOLF_STAT_SHOTS_ON_HOLE(7) , 0.0)
|
|
|
|
LEADERBOARDS_WRITE_ADD_COLUMN( LB_INPUT_COL_HOLE_9_DRIVE, FLOOR(GET_GOLF_STAT_LONGEST_DRIVE_ON_HOLE(8)), 0.0)
|
|
LEADERBOARDS_WRITE_ADD_COLUMN( LB_INPUT_COL_HOLE_9_PUTT, FLOOR(GET_GOLF_STAT_LONGEST_PUTT_ON_HOLE(8)), 0.0)
|
|
LEADERBOARDS_WRITE_ADD_COLUMN( LB_INPUT_COL_HOLE_9_SHOTS, GET_GOLF_STAT_SHOTS_ON_HOLE(8) , 0.0)
|
|
ENDIF
|
|
|
|
bUpdateLeaderBoard = FALSE // won't update again unless more stats are made
|
|
|
|
//Reset sum data
|
|
iLocalNumShots = 0
|
|
bWonGolfStat = FALSE
|
|
iLocalRoundsPlayed = 0
|
|
INT inc
|
|
REPEAT COUNT_OF(iLocalShotsOnHole) inc
|
|
iLocalShotsOnHole[inc] = 0
|
|
ENDREPEAT
|
|
|
|
ENDPROC
|
|
|
|
|
|
PROC GOLF_LOAD_SOCIAL_CLUB_LEADERBOARD()
|
|
#IF NOT GOLF_IS_AI_ONLY
|
|
//TEXT_LABEL_23 sPlayerName = GET_PLAYER_NAME(PLAYER_ID())
|
|
#IF GOLF_IS_MP
|
|
SETUP_SOCIAL_CLUB_LEADERBOARD_READ_DATA(golfLB_control,FMMC_TYPE_MG_GOLF,"","")
|
|
#ENDIF
|
|
|
|
#IF NOT GOLF_IS_MP
|
|
SETUP_SOCIAL_CLUB_LEADERBOARD_READ_DATA(golfLB_control,FMMC_TYPE_MG_GOLF_SP,"","")
|
|
#ENDIF
|
|
#ENDIF
|
|
ENDPROC
|
|
|
|
FUNC BOOL GOLF_UPDATE_SOCIAL_CLUB_LEADERBOARD(BOOL bFastWrite)
|
|
//IF bAllowLeaderboardUpload
|
|
IF GOLF_CAN_DISPLAY_SOCAIL_CLUB_LEADERBOARD() //make sure player is online
|
|
IF bFastWrite
|
|
GOLF_WRITE_TO_LEADERBOARD()
|
|
RETURN TRUE
|
|
ENDIF
|
|
|
|
CDEBUG1LN(DEBUG_GOLF, "Starting golf leaderboat update")
|
|
GOLF_LOAD_SOCIAL_CLUB_LEADERBOARD()
|
|
|
|
IF scLB_rank_predict.bFinishedRead AND NOT scLB_rank_predict.bFinishedWrite
|
|
CDEBUG1LN(DEBUG_GOLF, "Read finished, write to leaderboard")
|
|
GOLF_WRITE_TO_LEADERBOARD()
|
|
scLB_rank_predict.bFinishedWrite = TRUE
|
|
ENDIF
|
|
IF GET_RANK_PREDICTION_DETAILS(golfLB_control)
|
|
CDEBUG1LN(DEBUG_GOLF, "Prediction ready, set use prediction flag")
|
|
sclb_useRankPrediction = TRUE
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
PROC GOLF_DISPLAY_SOCIAL_CLUB_LEADERBOARD(#IF NOT GOLF_IS_AI_ONLY SCALEFORM_INDEX& scaleFormID #ENDIF)
|
|
#IF NOT GOLF_IS_AI_ONLY
|
|
GOLF_LOAD_SOCIAL_CLUB_LEADERBOARD()
|
|
DRAW_SC_SCALEFORM_LEADERBOARD(scaleFormID,golfLB_control)
|
|
#ENDIF
|
|
ENDPROC
|
|
|
|
PROC SET_GOLF_STAT_LONGEST_DRIVE_FOR_HOLE(INT iHole, FLOAT fDist, INT iIsMP = GOLF_IS_MP)
|
|
IF NOT bAllowLeaderboardUpload
|
|
EXIT
|
|
ENDIF
|
|
|
|
CDEBUG1LN(DEBUG_GOLF,"Setting longest drive on hole ", iHole, " to ", fDist)
|
|
IF iIsMP = 0
|
|
g_savedGlobals.sGolfData.sCourse[0].sHole[iHole].fLongestDriveHole = fDist
|
|
ELSE
|
|
g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.fLongestDriveHole[iHole] = fDist
|
|
ENDIF
|
|
bUpdateLeaderBoard = TRUE
|
|
ENDPROC
|
|
|
|
PROC SET_GOLF_STAT_LONGEST_PUTT_FOR_HOLE(INT iHole, FLOAT fDist, INT iIsMP = GOLF_IS_MP)
|
|
IF NOT bAllowLeaderboardUpload
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF iIsMP = 0
|
|
g_savedGlobals.sGolfData.sCourse[0].sHole[iHole].fLongestPuttHole = fDist
|
|
ELSE
|
|
g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.fLongestPuttHole[iHole] = fDist
|
|
ENDIF
|
|
bUpdateLeaderBoard = TRUE
|
|
ENDPROC
|
|
|
|
#IF NOT GOLF_IS_AI_ONLY
|
|
PROC INC_GOLF_STAT_NUM_SHOTS(INT iHole)
|
|
IF NOT bAllowLeaderboardUpload
|
|
EXIT
|
|
ENDIF
|
|
|
|
iLocalNumShots++
|
|
iLocalShotsOnHole[iHole]++
|
|
bUpdateLeaderBoard = TRUE
|
|
ENDPROC
|
|
#ENDIF
|
|
|
|
PROC INC_GOLF_STAT_NUM_BIRDIES(INT iIsMP = GOLF_IS_MP)
|
|
IF NOT bAllowLeaderboardUpload
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF iIsMP != 0
|
|
CDEBUG1LN(DEBUG_GOLF,"Inc birdie stat")
|
|
INCREMENT_BY_MP_INT_CHARACTER_AWARD(MP_AWARD_FM_GOLF_BIRDIES, 1)
|
|
ENDIF
|
|
bUpdateLeaderBoard = TRUE
|
|
ENDPROC
|
|
|
|
PROC SET_GOLF_STAT_GOT_HOLE_IN_ONE(INT iIsMP = GOLF_IS_MP)
|
|
|
|
REQUEST_SYSTEM_ACTIVITY_TYPE_HOLE_IN_ONE()
|
|
|
|
IF NOT bAllowLeaderboardUpload
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF iIsMP != 0
|
|
CDEBUG1LN(DEBUG_GOLF,"Set hole in one stat")
|
|
SET_MP_BOOL_CHARACTER_AWARD( MP_AWARD_FM_GOLF_HOLE_IN_1, TRUE)
|
|
ENDIF
|
|
IF NETWORK_IS_GAME_IN_PROGRESS()
|
|
INCREMENT_MP_INT_CHARACTER_STAT(MP_STAT_GOLF_HOLE_IN_ONES)
|
|
ENDIF
|
|
bUpdateLeaderBoard = TRUE
|
|
ENDPROC
|
|
|
|
PROC INC_GOLF_STAT_NUM_WINS(INT iIsMP = GOLF_IS_MP)
|
|
IF NOT bAllowLeaderboardUpload
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF iIsMP != 0
|
|
INCREMENT_BY_MP_INT_CHARACTER_AWARD(MP_AWARD_FM_GOLF_WON, 1)
|
|
INCREMENT_MP_INT_PLAYER_STAT(MPPLY_GOLF_WINS)
|
|
SET_BIT_FOR_FRANKIE_SAYS_ACHIEVEMENT(ACH45_GOLF)
|
|
//CHECK_FRANKIE_SAYS_ACHIEVEMENT()
|
|
ELSE
|
|
g_savedGlobals.sGolfData.iNumGolfWins++
|
|
ENDIF
|
|
bWonGolfStat = TRUE
|
|
bUpdateLeaderBoard = TRUE
|
|
ENDPROC
|
|
|
|
PROC INC_GOLF_STAT_NUM_LOSSES(INT iIsMP = GOLF_IS_MP)
|
|
IF NOT bAllowLeaderboardUpload
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF iIsMP != 0
|
|
INCREMENT_MP_INT_PLAYER_STAT(MPPLY_GOLF_LOSSES)
|
|
SET_BIT_FOR_FRANKIE_SAYS_ACHIEVEMENT(ACH45_GOLF)
|
|
//CHECK_FRANKIE_SAYS_ACHIEVEMENT()
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
//set the lowest score stat
|
|
PROC SET_GOLF_STAT_LOWEST_ROUND(INT roundScore, INT iIsMP = GOLF_IS_MP)
|
|
IF bAllowLeaderboardUpload
|
|
IF iIsMP = 0
|
|
g_savedGlobals.sGolfData.iBestRound = roundScore
|
|
ELSE
|
|
g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.iBestRound = roundScore
|
|
ENDIF
|
|
bUpdateLeaderBoard = TRUE
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
//set roudns played stat
|
|
PROC SET_GOLF_STAT_ROUNDS_PLAYED(INT roundsPlayed, INT iIsMP = GOLF_IS_MP)
|
|
IF NOT bAllowLeaderboardUpload
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF iIsMP != 0
|
|
g_savedGlobals.sGolfData.iNumRoundsPlayedMP = roundsPlayed
|
|
SET_BIT_FOR_FRANKIE_SAYS_ACHIEVEMENT(ACH45_GOLF)
|
|
ELSE
|
|
g_savedGlobals.sGolfData.iNumRoundsPlayedSP = roundsPlayed
|
|
ENDIF
|
|
|
|
bUpdateLeaderBoard = TRUE
|
|
ENDPROC
|
|
|
|
PROC INC_GOLF_STAT_ROUND_PLAYED_WITH_CHARACTER()
|
|
IF NOT bAllowLeaderboardUpload
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_MICHAEL
|
|
g_savedGlobals.sGolfData.iNumRoundsWithCharacter[0]++
|
|
ELIF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_FRANKLIN
|
|
g_savedGlobals.sGolfData.iNumRoundsWithCharacter[1]++
|
|
ELIF GET_CURRENT_PLAYER_PED_ENUM() = CHAR_TREVOR
|
|
g_savedGlobals.sGolfData.iNumRoundsWithCharacter[2]++
|
|
ENDIF
|
|
iLocalRoundsPlayed++
|
|
bUpdateLeaderBoard = TRUE
|
|
ENDPROC
|
|
|
|
//sets successful fairway drives per hole
|
|
PROC SET_GOLF_STAT_FAIRWAY_DRIVE_PERCENT(FLOAT drivePercent)
|
|
IF NOT bAllowLeaderboardUpload
|
|
EXIT
|
|
ENDIF
|
|
|
|
g_savedGlobals.sGolfData.fAverageFairwayDrives = drivePercent
|
|
ENDPROC
|
|
|
|
FUNC FLOAT GET_GOLF_STAT_FAIRWAY_DRIVE_PERCENT()
|
|
FLOAT ret
|
|
ret = g_savedGlobals.sGolfData.fAverageFairwayDrives
|
|
RETURN ret
|
|
ENDFUNC
|
|
|
|
//set number of putts per hole
|
|
PROC SET_GOLF_STAT_AVERAGE_PUTTS(FLOAT puttsPerHole)
|
|
IF NOT bAllowLeaderboardUpload
|
|
EXIT
|
|
ENDIF
|
|
|
|
g_savedGlobals.sGolfData.fAveragePutts = puttsPerHole
|
|
ENDPROC
|
|
|
|
FUNC FLOAT GET_GOLF_STAT_AVERAGE_PUTTS()
|
|
FLOAT ret
|
|
ret = g_savedGlobals.sGolfData.fAveragePutts
|
|
RETURN ret
|
|
ENDFUNC
|
|
|
|
//set longest putt that ended in the cup
|
|
PROC SET_GOLF_STAT_LONGEST_PUTT(FLOAT longestPutt, INT iIsMP = GOLF_IS_MP)
|
|
IF NOT bAllowLeaderboardUpload
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF iIsMP = 0
|
|
g_savedGlobals.sGolfData.fLongestPutt = longestPutt
|
|
ELSE
|
|
g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.fLongestPutt = longestPutt
|
|
ENDIF
|
|
bUpdateLeaderBoard = TRUE
|
|
ENDPROC
|
|
|
|
//sets longest tee shot that landed on the fairway
|
|
PROC SET_GOLF_STAT_LONGEST_DRIVE(FLOAT longestDrive, INT iIsMP = GOLF_IS_MP)
|
|
IF NOT bAllowLeaderboardUpload
|
|
EXIT
|
|
ENDIF
|
|
|
|
IF iIsMP = 0
|
|
g_savedGlobals.sGolfData.fLongestDrive = longestDrive
|
|
ELSE
|
|
g_savedMPGlobalsNew.g_savedMPGlobals[GET_SAVE_GAME_ARRAY_SLOT()].MpSavedGeneral.fLongestDrive = longestDrive
|
|
ENDIF
|
|
bUpdateLeaderBoard = TRUE
|
|
ENDPROC
|
|
|
|
//Some stats should only be update at the end of the hole
|
|
PROC GOLF_UPDATE_END_OF_HOLE_STATS(BOOL updateDrivePercent, BOOL updatePuttPercent)
|
|
IF NOT bAllowLeaderboardUpload
|
|
EXIT
|
|
ENDIF
|
|
|
|
g_savedGlobals.sGolfData.iNumHolesPlayed++
|
|
IF updateDrivePercent
|
|
g_savedGlobals.sGolfData.iNumFairwayDrivesTotal++
|
|
SET_GOLF_STAT_FAIRWAY_DRIVE_PERCENT(TO_FLOAT(g_savedGlobals.sGolfData.iNumFairwayDrivesTotal)/TO_FLOAT(g_savedGlobals.sGolfData.iNumHolesPlayed))
|
|
ENDIF
|
|
|
|
IF updatePuttPercent
|
|
SET_GOLF_STAT_AVERAGE_PUTTS(TO_FLOAT(g_savedGlobals.sGolfData.iNumPuttsTotal)/TO_FLOAT(g_savedGlobals.sGolfData.iNumHolesPlayed))
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC INITAILIZE_GOLF_STATS()
|
|
IF GET_GOLF_STAT_LOWEST_ROUND() < 9 //It's impossible to get a score this low, dirty cheaters
|
|
SET_GOLF_STAT_LOWEST_ROUND(82) //set to worst possible score
|
|
ENDIF
|
|
IF GET_GOLF_STAT_LONGEST_DRIVE_ON_HOLE(2) = 0 //on par 3, we are tracking closest to pin
|
|
SET_GOLF_STAT_LONGEST_DRIVE_FOR_HOLE(2, 999.0)
|
|
ENDIF
|
|
IF GET_GOLF_STAT_LONGEST_DRIVE_ON_HOLE(5) = 0 //on par 3, we are tracking closest to pin
|
|
SET_GOLF_STAT_LONGEST_DRIVE_FOR_HOLE(5, 999.0)
|
|
ENDIF
|
|
ENDPROC
|