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

296 lines
11 KiB
Scheme
Executable File

//////////////////////////////////////////////////////////////////////////////////////////
// //
// SCRIPT NAME : stats_public.sch //
// AUTHOR : Kenneth Ross //
// DESCRIPTION : Contains helper funtion to get stat for specified //
// character. //
// // //
//////////////////////////////////////////////////////////////////////////////////////////
USING "rage_builtins.sch"
USING "globals.sch"
USING "net_stat_system.sch"
PROC DISABLE_PLAYER_PED_STAT_UPDATES_THIS_FRAME()
g_bDisableStatUpdatesThisFrame = TRUE
ENDPROC
PROC INCREMENT_PLAYER_PED_STAT(enumCharacterList ePed, PLAYER_STATS_ENUM ePlayerStat, INT iAmount)
PRINTLN("INCREMENT_PLAYER_PED_STAT - char=", ePed, ", stat=", ePlayerStat, ", ammount=", iAmount, ", script=", GET_THIS_SCRIPT_NAME())
INT iStatValue
MP_INT_STATS mpIntStat
SWITCH ePed
CASE CHAR_MICHAEL
CASE CHAR_FRANKLIN
CASE CHAR_TREVOR
g_savedGlobals.sPlayerData.sInfo.iPlayerStatScript[ePlayerStat][ePed] += iAmount
BREAK
CASE CHAR_MULTIPLAYER
#IF USE_TU_CHANGES
mpIntStat = MAX_NUM_MP_INT_STATS
#ENDIF
#IF NOT USE_TU_CHANGES
mpIntStat = MP_STAT_PSTAT_INT9 //Matches the index of the FinalSub MAX_NUM_MP_INT_STATS. To be compiled into SP scripts.
#ENDIF
SWITCH ePlayerStat
CASE PS_STAMINA mpIntStat = MP_STAT_SCRIPT_INCREASE_STAM BREAK
CASE PS_LUNG_CAPACITY mpIntStat = MP_STAT_SCRIPT_INCREASE_LUNG BREAK
CASE PS_STRENGTH mpIntStat = MP_STAT_SCRIPT_INCREASE_STRN BREAK
CASE PS_DRIVING_ABILITY mpIntStat = MP_STAT_SCRIPT_INCREASE_DRIV BREAK
CASE PS_FLYING_ABILITY mpIntStat = MP_STAT_SCRIPT_INCREASE_FLY BREAK
CASE PS_SHOOTING_ABILITY mpIntStat = MP_STAT_SCRIPT_INCREASE_SHO BREAK
CASE PS_STEALTH_ABILITY mpIntStat = MP_STAT_SCRIPT_INCREASE_STL BREAK
ENDSWITCH
#IF USE_TU_CHANGES
IF mpIntStat != MAX_NUM_MP_INT_STATS
iStatValue = GET_MP_INT_CHARACTER_STAT(mpIntStat)
iStatValue += iAmount
IF iStatValue > 100
iStatValue = 100
ENDIF
SET_MP_INT_CHARACTER_STAT(mpIntStat, iStatValue)
ENDIF
#ENDIF
#IF NOT USE_TU_CHANGES
IF mpIntStat != MP_STAT_PSTAT_INT9 //Matches the index of the FinalSub MAX_NUM_MP_INT_STATS. To be compiled into SP scripts.
iStatValue = GET_MP_INT_CHARACTER_STAT(mpIntStat)
iStatValue += iAmount
IF iStatValue > 100
iStatValue = 100
ENDIF
SET_MP_INT_CHARACTER_STAT(mpIntStat, iStatValue)
ENDIF
#ENDIF
BREAK
ENDSWITCH
ENDPROC
/// PURPOSE: Returns the appropriate stat enum for the given ped and helper stat enum
///
/// PARAMS:
/// ePed - The player ped we want to get the stat for (CHAR_MICHAEL, CHAR_FRANKLIN, CHAR_TREVOR)
/// ePlayerStat - The helper enum used to look up stats
/// RETURNS:
///
PROC GET_PLAYER_PED_STAT_ENUM(enumCharacterList ePed, PLAYER_STATS_ENUM ePlayerStat, STATSENUM &eSPStat, MP_INT_STATS &eMPStat)
SWITCH ePed
CASE CHAR_MICHAEL
SWITCH ePlayerStat
CASE PS_SPECIAL_ABILITY eSPStat = SP0_SPECIAL_ABILITY_UNLOCKED BREAK
CASE PS_STAMINA eSPStat = SP0_STAMINA BREAK
CASE PS_LUNG_CAPACITY eSPStat = SP0_LUNG_CAPACITY BREAK
CASE PS_STRENGTH eSPStat = SP0_STRENGTH BREAK
CASE PS_DRIVING_ABILITY eSPStat = SP0_WHEELIE_ABILITY BREAK
CASE PS_FLYING_ABILITY eSPStat = SP0_FLYING_ABILITY BREAK
CASE PS_SHOOTING_ABILITY eSPStat = SP0_SHOOTING_ABILITY BREAK
CASE PS_STEALTH_ABILITY eSPStat = SP0_STEALTH_ABILITY BREAK
ENDSWITCH
BREAK
CASE CHAR_FRANKLIN
SWITCH ePlayerStat
CASE PS_SPECIAL_ABILITY eSPStat = SP1_SPECIAL_ABILITY_UNLOCKED BREAK
CASE PS_STAMINA eSPStat = SP1_STAMINA BREAK
CASE PS_LUNG_CAPACITY eSPStat = SP1_LUNG_CAPACITY BREAK
CASE PS_STRENGTH eSPStat = SP1_STRENGTH BREAK
CASE PS_DRIVING_ABILITY eSPStat = SP1_WHEELIE_ABILITY BREAK
CASE PS_FLYING_ABILITY eSPStat = SP1_FLYING_ABILITY BREAK
CASE PS_SHOOTING_ABILITY eSPStat = SP1_SHOOTING_ABILITY BREAK
CASE PS_STEALTH_ABILITY eSPStat = SP1_STEALTH_ABILITY BREAK
ENDSWITCH
BREAK
CASE CHAR_TREVOR
SWITCH ePlayerStat
CASE PS_SPECIAL_ABILITY eSPStat = SP2_SPECIAL_ABILITY_UNLOCKED BREAK
CASE PS_STAMINA eSPStat = SP2_STAMINA BREAK
CASE PS_LUNG_CAPACITY eSPStat = SP2_LUNG_CAPACITY BREAK
CASE PS_STRENGTH eSPStat = SP2_STRENGTH BREAK
CASE PS_DRIVING_ABILITY eSPStat = SP2_WHEELIE_ABILITY BREAK
CASE PS_FLYING_ABILITY eSPStat = SP2_FLYING_ABILITY BREAK
CASE PS_SHOOTING_ABILITY eSPStat = SP2_SHOOTING_ABILITY BREAK
CASE PS_STEALTH_ABILITY eSPStat = SP2_STEALTH_ABILITY BREAK
ENDSWITCH
BREAK
CASE CHAR_MULTIPLAYER
SWITCH ePlayerStat
CASE PS_SPECIAL_ABILITY eMPStat = MP_STAT_SPECIAL_ABILITY BREAK
CASE PS_STAMINA eMPStat = MP_STAT_STAMINA BREAK
CASE PS_LUNG_CAPACITY eMPStat = MP_STAT_LUNG_CAPACITY BREAK
CASE PS_STRENGTH eMPStat = MP_STAT_STRENGTH BREAK
CASE PS_DRIVING_ABILITY eMPStat = MP_STAT_WHEELIE_ABILITY BREAK
CASE PS_FLYING_ABILITY eMPStat = MP_STAT_FLYING_ABILITY BREAK
CASE PS_SHOOTING_ABILITY eMPStat = MP_STAT_SHOOTING_ABILITY BREAK
CASE PS_STEALTH_ABILITY eMPStat = MP_STAT_STEALTH_ABILITY BREAK
ENDSWITCH
BREAK
ENDSWITCH
ENDPROC
FUNC BOOL GET_PLAYER_PED_MAXED_STAT_ENUM(enumCharacterList ePed, PLAYER_STATS_ENUM ePlayerStat, STATSENUM &eSPStat)
eSPStat = LAST_PLAYING_TIME
SWITCH ePed
CASE CHAR_MICHAEL
SWITCH ePlayerStat
CASE PS_SPECIAL_ABILITY eSPStat = SP0_SPECIAL_ABILITY_MAXED BREAK
CASE PS_STAMINA eSPStat = SP0_STAMINA_MAXED BREAK
CASE PS_LUNG_CAPACITY eSPStat = SP0_LUNG_CAPACITY_MAXED BREAK
CASE PS_STRENGTH eSPStat = SP0_STRENGTH_MAXED BREAK
CASE PS_DRIVING_ABILITY eSPStat = SP0_WHEELIE_ABILITY_MAXED BREAK
CASE PS_FLYING_ABILITY eSPStat = SP0_FLYING_ABILITY_MAXED BREAK
CASE PS_SHOOTING_ABILITY eSPStat = SP0_SHOOTING_ABILITY_MAXED BREAK
CASE PS_STEALTH_ABILITY eSPStat = SP0_STEALTH_ABILITY_MAXED BREAK
ENDSWITCH
BREAK
CASE CHAR_FRANKLIN
SWITCH ePlayerStat
CASE PS_SPECIAL_ABILITY eSPStat = SP1_SPECIAL_ABILITY_MAXED BREAK
CASE PS_STAMINA eSPStat = SP1_STAMINA_MAXED BREAK
CASE PS_LUNG_CAPACITY eSPStat = SP1_LUNG_CAPACITY_MAXED BREAK
CASE PS_STRENGTH eSPStat = SP1_STRENGTH_MAXED BREAK
CASE PS_DRIVING_ABILITY eSPStat = SP1_WHEELIE_ABILITY_MAXED BREAK
CASE PS_FLYING_ABILITY eSPStat = SP1_FLYING_ABILITY_MAXED BREAK
CASE PS_SHOOTING_ABILITY eSPStat = SP1_SHOOTING_ABILITY_MAXED BREAK
CASE PS_STEALTH_ABILITY eSPStat = SP1_STEALTH_ABILITY_MAXED BREAK
ENDSWITCH
BREAK
CASE CHAR_TREVOR
SWITCH ePlayerStat
CASE PS_SPECIAL_ABILITY eSPStat = SP2_SPECIAL_ABILITY_MAXED BREAK
CASE PS_STAMINA eSPStat = SP2_STAMINA_MAXED BREAK
CASE PS_LUNG_CAPACITY eSPStat = SP2_LUNG_CAPACITY_MAXED BREAK
CASE PS_STRENGTH eSPStat = SP2_STRENGTH_MAXED BREAK
CASE PS_DRIVING_ABILITY eSPStat = SP2_WHEELIE_ABILITY_MAXED BREAK
CASE PS_FLYING_ABILITY eSPStat = SP2_FLYING_ABILITY_MAXED BREAK
CASE PS_SHOOTING_ABILITY eSPStat = SP2_SHOOTING_ABILITY_MAXED BREAK
CASE PS_STEALTH_ABILITY eSPStat = SP2_STEALTH_ABILITY_MAXED BREAK
ENDSWITCH
BREAK
ENDSWITCH
RETURN (eSPStat != LAST_PLAYING_TIME)
ENDFUNC
FUNC STATSENUM GET_SP_PLAYER_STAT_ENUM(enumCharacterList ePed, PLAYER_STATS_ENUM ePlayerStat)
STATSENUM eSPStat
MP_INT_STATS eMPStat
GET_PLAYER_PED_STAT_ENUM(ePed, ePlayerStat, eSPStat, eMPStat)
RETURN eSPStat
ENDFUNC
FUNC INT GET_SP_PLAYER_PED_STAT_VALUE(enumCharacterList ePed, PLAYER_STATS_ENUM ePlayerStat)
INT iCurrentStatValue
STATSENUM eSPStat = GET_SP_PLAYER_STAT_ENUM(ePed, ePlayerStat)
STAT_GET_INT(eSPStat, iCurrentStatValue)
RETURN iCurrentStatValue
ENDFUNC
FUNC MP_INT_STATS GET_MP_PLAYER_STAT_ENUM(PLAYER_STATS_ENUM ePlayerStat)
STATSENUM eSPStat
MP_INT_STATS eMPStat
GET_PLAYER_PED_STAT_ENUM(CHAR_MULTIPLAYER, ePlayerStat, eSPStat, eMPStat)
RETURN eMPStat
ENDFUNC
FUNC INT GET_MP_PLAYER_PED_STAT_VALUE(PLAYER_STATS_ENUM ePlayerStat, INT iSlot = -1)
MP_INT_STATS eMPStat = GET_MP_PLAYER_STAT_ENUM(ePlayerStat)
RETURN GET_MP_INT_CHARACTER_STAT(eMPStat, iSlot)
ENDFUNC
/// PURPOSE: Returns the appropriate stat label for the given helper stat enum
///
/// PARAMS:
/// ePlayerStat - The helper enum used to look up stats
/// RETURNS:
///
FUNC STRING GET_PLAYER_STAT_FEED_NAME(PLAYER_STATS_ENUM ePlayerStat)
SWITCH ePlayerStat
CASE PS_SPECIAL_ABILITY RETURN "PSF_SPEC_AB" BREAK
CASE PS_STAMINA RETURN "PSF_STAMINA" BREAK
CASE PS_LUNG_CAPACITY RETURN "PSF_LUNG" BREAK
CASE PS_STRENGTH RETURN "PSF_STRENGTH" BREAK
CASE PS_DRIVING_ABILITY RETURN "PSF_DRIVING" BREAK
CASE PS_FLYING_ABILITY RETURN "PSF_FLYING" BREAK
CASE PS_SHOOTING_ABILITY RETURN "PSF_SHOOTING" BREAK
CASE PS_STEALTH_ABILITY RETURN "PSF_STEALTH" BREAK
ENDSWITCH
RETURN "ERROR"
ENDFUNC
/// PURPOSE: Returns the appropriate stat label for the given helper stat enum
///
/// PARAMS:
/// ePlayerStat - The helper enum used to look up stats
/// RETURNS:
///
FUNC STRING GET_PLAYER_STAT_DISPLAY_NAME(PLAYER_STATS_ENUM ePlayerStat)
SWITCH ePlayerStat
CASE PS_SPECIAL_ABILITY RETURN "PS_SPEC_AB" BREAK
CASE PS_STAMINA RETURN "PS_STAMINA" BREAK
CASE PS_LUNG_CAPACITY RETURN "PS_LUNG" BREAK
CASE PS_STRENGTH RETURN "PS_STRENGTH" BREAK
CASE PS_DRIVING_ABILITY RETURN "PS_DRIVING" BREAK
CASE PS_FLYING_ABILITY RETURN "PS_FLYING" BREAK
CASE PS_SHOOTING_ABILITY RETURN "PS_SHOOTING" BREAK
CASE PS_STEALTH_ABILITY RETURN "PS_STEALTH" BREAK
ENDSWITCH
RETURN "ERROR"
ENDFUNC
FUNC ABILITY_ICON GET_PLAYER_STAT_FEED_ICON(PLAYER_STATS_ENUM ePlayerStat)
SWITCH ePlayerStat
CASE PS_SPECIAL_ABILITY RETURN ABILITY_SPECIAL_ABILITY_CAPACITY BREAK
CASE PS_STAMINA RETURN ABILITY_STAMINA BREAK
CASE PS_LUNG_CAPACITY RETURN ABILITY_LUNG_CAPACITY BREAK
CASE PS_STRENGTH RETURN ABILITY_STRENGTH BREAK
CASE PS_DRIVING_ABILITY RETURN ABILITY_DRIVING BREAK
CASE PS_FLYING_ABILITY RETURN ABILITY_FLYING_ABILITY BREAK
CASE PS_SHOOTING_ABILITY RETURN ABILITY_SHOOTING BREAK
CASE PS_STEALTH_ABILITY RETURN ABILITY_STEALTH_ABILITY BREAK
ENDSWITCH
RETURN ABILITY_INVALID
ENDFUNC
FUNC INT GET_TOTAL_NUMBER_OF_HOURS_FOR_UNSIGNED_INT_STAT(STATSENUM eStat)
INT iStatValue
iStatValue = 0
iStatValue += (STAT_GET_NUMBER_OF_DAYS(eStat) * 24)
iStatValue += (STAT_GET_NUMBER_OF_HOURS(eStat))
RETURN iStatValue
ENDFUNC
FUNC INT GET_TOTAL_NUMBER_OF_MINUTES_FOR_UNSIGNED_INT_STAT(STATSENUM eStat)
INT iStatValue
iStatValue = 0
iStatValue += (STAT_GET_NUMBER_OF_DAYS(eStat) * 1440)
iStatValue += (STAT_GET_NUMBER_OF_HOURS(eStat) * 60)
iStatValue += (STAT_GET_NUMBER_OF_MINUTES(eStat))
RETURN iStatValue
ENDFUNC
FUNC INT GET_TOTAL_NUMBER_OF_SECONDS_FOR_UNSIGNED_INT_STAT(STATSENUM eStat)
INT iStatValue
iStatValue = 0
iStatValue += (STAT_GET_NUMBER_OF_DAYS(eStat) * 86400)
iStatValue += (STAT_GET_NUMBER_OF_HOURS(eStat) * 3600)
iStatValue += (STAT_GET_NUMBER_OF_MINUTES(eStat) * 60)
iStatValue += (STAT_GET_NUMBER_OF_SECONDS(eStat))
RETURN iStatValue
ENDFUNC