3236 lines
111 KiB
Scheme
Executable File
3236 lines
111 KiB
Scheme
Executable File
USING "globals.sch"
|
|
USING "flow_mission_data_public.sch"
|
|
USING "finance_modifiers_public.sch"
|
|
USING "player_ped_public.sch"
|
|
USING "commands_hud.sch"
|
|
USING "end_screen.sch"
|
|
USING "screenDisplayState.sch"
|
|
USING "achievement_public.sch"
|
|
USING "end_screen.sch"
|
|
USING "dlc_mission_stat_private.sch"
|
|
|
|
#IF USE_CLF_DLC
|
|
USING "mission_stat_generated_private_CLF.sch"
|
|
#ENDIF
|
|
#IF NOT USE_CLF_DLC
|
|
USING "mission_stat_generated_private.sch"
|
|
#ENDIF
|
|
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
FUNC STRING SAFE_GET_MISSION_STAT_NAME(ENUM_MISSION_STATS e)
|
|
IF e = UNSET_MISSION_STAT_ENUM
|
|
RETURN "UNSET_MISSION_STAT_ENUM"
|
|
ENDIF
|
|
|
|
IF NOT g_MissionStatTrackingPrototypes[e].bHidden
|
|
RETURN GET_MISSION_STAT_NAME(e)
|
|
ELSE
|
|
TEXT_LABEL str = "MS_UNKN_"
|
|
str += ENUM_TO_INT(e)
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
RETURN GET_STRING_FROM_STRING(str, 0, GET_LENGTH_OF_LITERAL_STRING(str))
|
|
#ENDIF
|
|
#IF NOT IS_DEBUG_BUILD
|
|
RETURN GET_FILENAME_FOR_AUDIO_CONVERSATION(str)
|
|
#ENDIF
|
|
ENDIF
|
|
ENDFUNC
|
|
#ENDIF
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// complete medals
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
FUNC FLOAT GET_MISSION_STAT_PERCENTAGE(INT visiblesucceeded,INT visibleattempted, BOOL criticalInvalidated = FALSE)
|
|
IF criticalInvalidated
|
|
RETURN 0.0
|
|
ENDIF
|
|
IF visiblesucceeded = visibleattempted
|
|
RETURN 100.0
|
|
ENDIF
|
|
|
|
FLOAT uploadRatio = TO_FLOAT(visiblesucceeded)/TO_FLOAT(visibleattempted)
|
|
FLOAT fUploadPercentage = (50.0*uploadRatio) + 50.0
|
|
|
|
fUploadPercentage = TO_FLOAT(CEIL(fUploadPercentage))
|
|
IF fUploadPercentage > 100.0
|
|
fUploadPercentage = 100.0
|
|
ENDIF
|
|
|
|
RETURN fUploadPercentage
|
|
ENDFUNC
|
|
|
|
FUNC INT GET_STAT_MEDAL_VALUE(FLOAT percentage)
|
|
IF percentage = 0
|
|
RETURN 0
|
|
ENDIF
|
|
|
|
IF percentage = 100.0
|
|
RETURN 3//gold
|
|
ELIF percentage > 50.0
|
|
RETURN 2//silver
|
|
ENDIF
|
|
RETURN 1//bronze
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Gets the hud colour of the medal passed in so it can be displayed in the pause menu
|
|
/// PARAMS:
|
|
/// iMedal - int of medal (1=gold, 2=silver, 3=bronze)
|
|
/// RETURNS:
|
|
/// HUD_COLOURS of medal
|
|
FUNC HUD_COLOURS GET_MEDAL_HUD_COLOUR(INT iMedal)
|
|
|
|
HUD_COLOURS eMedalColour = HUD_COLOUR_BRONZE
|
|
|
|
SWITCH iMedal
|
|
CASE 3
|
|
eMedalColour = HUD_COLOUR_GOLD
|
|
BREAK
|
|
CASE 2
|
|
eMedalColour = HUD_COLOUR_SILVER
|
|
BREAK
|
|
CASE 1
|
|
eMedalColour = HUD_COLOUR_BRONZE
|
|
BREAK
|
|
ENDSWITCH
|
|
RETURN eMedalColour
|
|
ENDFUNC
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
// accuracy stats
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
///
|
|
FUNC INT GET_MISSION_STAT_STORED_VALUE(STATSENUM e)
|
|
|
|
IF ENUM_TO_INT(e) = 0
|
|
CPRINTLN(DEBUG_MISSION_STATS, "GET_MISSION_STAT_STORED_VALUE:<STATSET> stat unset")
|
|
RETURN -1
|
|
ENDIF
|
|
|
|
INT InStat
|
|
IF STAT_GET_INT(e,InStat)
|
|
CPRINTLN(DEBUG_MISSION_STATS, "GET_MISSION_STAT_STORED_VALUE: for stat hash ", e , " got value ", InStat)
|
|
RETURN InStat-1 //value offset so 0 is meaningful as unset
|
|
ELSE
|
|
RETURN -1
|
|
ENDIF
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// please note that this is used only to read the accuracy values
|
|
/// mission stats are read with GET_MISSION_STAT_STORED_VALUE
|
|
/// PARAMS:
|
|
/// e -
|
|
/// RETURNS:
|
|
///
|
|
FUNC INT RETRIEVE_INT_STAT(STATSENUM e)
|
|
INT istat
|
|
STAT_GET_INT(e,istat)
|
|
RETURN istat
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
PROC SET_MISSION_STAT_STORED_VALUE(INT value, ENUM_MISSION_STATS s)
|
|
STATSENUM e = g_MissionStatTrackingPrototypes[s].statname
|
|
IF ENUM_TO_INT(e) = 0
|
|
CERRORLN(DEBUG_MISSION_STATS, "SET_MISSION_STAT_STORED_VALUE: enum conversion failed for ",g_MissionStatTrackingPrototypes[s].statname)
|
|
EXIT
|
|
ENDIF
|
|
|
|
g_MissionStatTrackingPrototypes[s].currentvalue = value
|
|
|
|
INT InStat
|
|
InStat = value+1//value offset when stored so zero serverside is -1 or unset client side
|
|
CPRINTLN(DEBUG_MISSION_STATS,"SET_MISSION_STAT_STORED_VALUE: Setting mission stat ",GET_MISSION_STAT_NAME(s)," to ",inStat)
|
|
STAT_SET_INT(e,InStat)
|
|
|
|
IF IS_REPEAT_PLAY_ACTIVE() AND g_bMissionStatSystemBuildingReplayStats
|
|
//CPRINTLN(DEBUG_MISSION_STATS, "<REPSTATS> Adding value and index to replay stat buffer incase this is a replay, ", e, " : ", value, " : ", s)
|
|
ADD_REPLAY_STAT_VALUE(ENUM_TO_INT(e))
|
|
ADD_REPLAY_STAT_VALUE(value)
|
|
ADD_REPLAY_STAT_VALUE(ENUM_TO_INT(s))
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
|
|
PROC RESET_MISSION_STATS_ACCURACY_STATE()
|
|
|
|
g_bMissionStatAccuracyTallied = FALSE
|
|
//reset the accuracy tracking
|
|
//player one
|
|
CPRINTLN(DEBUG_MISSION_STATS, "Reset accuracy metrics:")
|
|
|
|
//INT g_iMissionStatsSP0Hits = 0
|
|
//INT g_iMissionStatsSP0Shots = 0
|
|
//INT g_iMissionStatsSP1Hits = 0
|
|
//INT g_iMissionStatsSP1Shots = 0
|
|
//INT g_iMissionStatsSP2Hits = 0
|
|
//INT g_iMissionStatsSP2Shots = 0
|
|
|
|
g_iMissionStatsSP0Shots = RETRIEVE_INT_STAT(SP0_SHOTS)
|
|
g_iMissionStatsSP0Hits = RETRIEVE_INT_STAT(SP0_HITS)
|
|
|
|
g_iMissionStatsSP1Shots = RETRIEVE_INT_STAT(SP1_SHOTS)
|
|
g_iMissionStatsSP1Hits = RETRIEVE_INT_STAT(SP1_HITS)
|
|
|
|
g_iMissionStatsSP2Shots = RETRIEVE_INT_STAT(SP2_SHOTS)
|
|
g_iMissionStatsSP2Hits = RETRIEVE_INT_STAT(SP2_HITS)
|
|
|
|
CPRINTLN(DEBUG_MISSION_STATS, " Sp 0 hits/shots : ", g_iMissionStatsSP0Hits, "/", g_iMissionStatsSP0Shots)
|
|
CPRINTLN(DEBUG_MISSION_STATS, " Sp 1 hits/shots : ", g_iMissionStatsSP1Hits, "/", g_iMissionStatsSP1Shots)
|
|
CPRINTLN(DEBUG_MISSION_STATS, " Sp 2 hits/shots : ", g_iMissionStatsSP2Hits, "/", g_iMissionStatsSP2Shots)
|
|
|
|
//SCRIPT_ASSERT("Accuracy metrics start")
|
|
ENDPROC
|
|
|
|
|
|
|
|
FUNC STRING GET_STRING_FROM_MISSION_STAT_TYPES(ENUM_MISSION_STAT_TYPES eType)
|
|
SWITCH eType
|
|
CASE MISSION_STAT_TYPE_UNSET RETURN "UNSET"
|
|
|
|
CASE MISSION_STAT_TYPE_TOTALTIME RETURN "TOTALTIME"
|
|
CASE MISSION_STAT_TYPE_ACTION_CAM_USE RETURN "ACTION_CAM_USE"
|
|
CASE MISSION_STAT_TYPE_UNIQUE_BOOL RETURN "UNIQUE_BOOL"
|
|
CASE MISSION_STAT_TYPE_WINDOWED_TIMER RETURN "WINDOWED_TIMER"
|
|
CASE MISSION_STAT_TYPE_SINGLE_ENTITY_SPEED_THRESHOLD RETURN "SINGLE_ENTITY_SPEED_THRESHOLD"
|
|
CASE MISSION_STAT_TYPE_SINGLE_ENTITY_DAMAGE_THRESHOLD RETURN "SINGLE_ENTITY_DAMAGE_THRESHOLD"
|
|
CASE MISSION_STAT_TYPE_HEADSHOTS RETURN "HEADSHOTS"
|
|
CASE MISSION_STAT_TYPE_FRACTION RETURN "FRACTION"
|
|
CASE MISSION_STAT_TYPE_ACCURACY RETURN "ACCURACY"
|
|
CASE MISSION_STAT_TYPE_PURE_COUNT RETURN "PURE_COUNT"
|
|
CASE MISSION_STAT_TYPE_PURE_COUNT_PERCENTAGE RETURN "PURE_COUNT_PERCENTAGE"
|
|
CASE MISSION_STAT_TYPE_FINANCE_DIRECT RETURN "FINANCE_DIRECT"
|
|
CASE MISSION_STAT_TYPE_FINANCE_TABLE RETURN "FINANCE_TABLE"
|
|
CASE MISSION_STAT_TYPE_PURE_COUNT_DISTANCE RETURN "PURE_COUNT_DISTANCE"
|
|
CASE MISSION_STAT_TYPE_BULLETS_FIRED RETURN "BULLETS_FIRED"
|
|
CASE MISSION_STAT_TYPE_INNOCENTS_KILLED RETURN "INNOCENTS_KILLED"
|
|
CASE MISSION_STAT_TYPE_SPECIAL_ABILITY_USE RETURN "SPECIAL_ABILITY_USE"
|
|
ENDSWITCH
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_LABEL_63 str = "UNKNOWN_"
|
|
str += ENUM_TO_INT(eType)
|
|
|
|
RETURN GET_STRING_FROM_STRING(str, 0, GET_LENGTH_OF_LITERAL_STRING(str))
|
|
#ENDIF
|
|
#IF NOT IS_DEBUG_BUILD
|
|
RETURN ""
|
|
#ENDIF
|
|
ENDFUNC
|
|
|
|
//#IF USE_ASSASSIN_DLC
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//new assassination mission stat control////////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
//FUNC STRING GET_DLC_ASSASSINATION_TITLE_STRING(INT assassinationIndex)
|
|
//
|
|
// IF assassinationIndex = -1
|
|
// RETURN "INVALID"
|
|
// ENDIF
|
|
//
|
|
// SWITCH assassinationIndex
|
|
// CASE 0 RETURN "M_DApol" BREAK
|
|
// CASE 1 RETURN "M_DAret" BREAK
|
|
// CASE 2 RETURN "M_DAcab" BREAK
|
|
// CASE 3 RETURN "M_DAgen" BREAK
|
|
// CASE 4 RETURN "M_DAsub" BREAK
|
|
//
|
|
// CASE 5 RETURN "M_DAdrg" BREAK
|
|
// CASE 6 RETURN "M_DAhel" BREAK
|
|
// CASE 7 RETURN "M_DAbar" BREAK
|
|
// CASE 8 RETURN "M_DAstr" BREAK
|
|
// CASE 9 RETURN "M_DAvin" BREAK
|
|
//
|
|
// CASE 10 RETURN "M_DAhnt" BREAK
|
|
// CASE 11 RETURN "M_DAsky" BREAK
|
|
// ENDSWITCH
|
|
//
|
|
// #IF IS_DEBUG_BUILD
|
|
// TEXT_LABEL_63 str = "M_INVALID_"
|
|
// str += g_savedGlobalsDLC.iDLCAssassinationStage
|
|
// str += " - "
|
|
// str += assassinationIndex
|
|
//
|
|
// RETURN GET_STRING_FROM_STRING(str, 0, GET_LENGTH_OF_LITERAL_STRING(str))
|
|
// #ENDIF
|
|
// #IF NOT IS_DEBUG_BUILD
|
|
// RETURN ""
|
|
// #ENDIF
|
|
//ENDFUNC
|
|
|
|
|
|
|
|
|
|
|
|
|
|
//FUNC BOOL GET_FORMATTING_TYPE_FOR_DLC_STAT(ENUM_MISSION_STAT_TYPES type, END_SCREEN_ELEMENT_FORMATTING &eFormatting)
|
|
// CONST_INT iPLAYER_SINGLE_ENTITY_DAMAGE_THRESHOLD 180
|
|
//
|
|
// eFormatting = ESEF_NAME_ONLY
|
|
// SWITCH type
|
|
//// CASE MISSION_STAT_TYPE_UNSET eFormatting = UNSET"
|
|
////
|
|
// CASE MISSION_STAT_TYPE_TOTALTIME eFormatting = ESEF_TIME_M_S BREAK
|
|
//// CASE MISSION_STAT_TYPE_ACTION_CAM_USE eFormatting = ACTION_CAM_USE BREAK
|
|
// CASE MISSION_STAT_TYPE_UNIQUE_BOOL eFormatting = ESEF_NAME_ONLY BREAK
|
|
// CASE MISSION_STAT_TYPE_WINDOWED_TIMER eFormatting = ESEF_TIME_M_S BREAK
|
|
//// CASE MISSION_STAT_TYPE_SINGLE_ENTITY_SPEED_THRESHOLD eFormatting = SINGLE_ENTITY_SPEED_THRESHOLD BREAK
|
|
// CASE MISSION_STAT_TYPE_SINGLE_ENTITY_DAMAGE_THRESHOLD eFormatting = ESEF_NAME_ONLY BREAK
|
|
// CASE MISSION_STAT_TYPE_HEADSHOTS eFormatting = ESEF_FRACTION BREAK
|
|
// CASE MISSION_STAT_TYPE_FRACTION eFormatting = ESEF_FRACTION BREAK
|
|
// CASE MISSION_STAT_TYPE_ACCURACY eFormatting = ESEF_RAW_PERCENT BREAK
|
|
// CASE MISSION_STAT_TYPE_PURE_COUNT eFormatting = ESEF_RAW_INTEGER BREAK
|
|
// CASE MISSION_STAT_TYPE_PURE_COUNT_PERCENTAGE eFormatting = ESEF_RAW_PERCENT BREAK
|
|
//// CASE MISSION_STAT_TYPE_FINANCE_DIRECT eFormatting = FINANCE_DIRECT BREAK
|
|
//// CASE MISSION_STAT_TYPE_FINANCE_TABLE eFormatting = FINANCE_TABLE BREAK
|
|
//// CASE MISSION_STAT_TYPE_PURE_COUNT_DISTANCE eFormatting = PURE_COUNT_DISTANCE BREAK
|
|
//// CASE MISSION_STAT_TYPE_BULLETS_FIRED eFormatting = BULLETS_FIRED BREAK
|
|
//// CASE MISSION_STAT_TYPE_INNOCENTS_KILLED eFormatting = INNOCENTS_KILLED BREAK
|
|
//// CASE MISSION_STAT_TYPE_SPECIAL_ABILITY_USE eFormatting = SPECIAL_ABILITY_USE BREAK
|
|
//
|
|
// DEFAULT
|
|
// TEXT_LABEL_63 str
|
|
// str = "type "
|
|
// str += GET_STRING_FROM_MISSION_STAT_TYPES(type)
|
|
// str += " has unknown formatting"
|
|
//
|
|
// CPRINTLN(DEBUG_MISSION_STATS, str)
|
|
// SCRIPT_ASSERT(str)
|
|
//
|
|
// RETURN FALSE
|
|
// BREAK
|
|
// ENDSWITCH
|
|
//
|
|
// RETURN TRUE
|
|
//ENDFUNC
|
|
|
|
|
|
//FUNC BOOL GET_END_SCREEN_CHECK_MARK_FOR_DLC_STAT(DLC_ASSASSINATION_STATCONFIG &config, DLC_ASSASSINATION_STATS stat, INT iTarget, END_SCREEN_CHECK_MARK_STATUS &eESCM, INT &visibleSucceeded)
|
|
// INT i
|
|
// REPEAT config.iRegisteredStats i
|
|
// IF config.target[i] = stat
|
|
//
|
|
// IF config.invalidationReason[i] != MSSIR_VALID
|
|
// eESCM = ESCM_INVALIDATED
|
|
// RETURN TRUE
|
|
// ENDIF
|
|
//
|
|
// IF NOT g_DLCMissionStatTrackingPrototypes[stat].less_than_threshold
|
|
//
|
|
// CPRINTLN(DEBUG_MISSION_STATS, "screen check: ", GET_DLC_MISSION_STAT_DEBUG_NAME(stat), " value[ ",config.StatCurrentValue[i]," ] >= target [ ", iTarget, " ]")
|
|
//
|
|
// IF config.StatCurrentValue[i] >= iTarget
|
|
// eESCM = ESCM_CHECKED
|
|
// visibleSucceeded++
|
|
// ELSE
|
|
// eESCM = ESCM_UNCHECKED
|
|
// ENDIF
|
|
//
|
|
// RETURN TRUE
|
|
// ELSE
|
|
// CPRINTLN(DEBUG_MISSION_STATS, "screen check: ", GET_DLC_MISSION_STAT_DEBUG_NAME(stat), " value[ ",config.StatCurrentValue[i]," ] < target [ ", iTarget, " ]")
|
|
//
|
|
// IF config.StatCurrentValue[i] < iTarget
|
|
// eESCM = ESCM_CHECKED
|
|
// visibleSucceeded++
|
|
// ELSE
|
|
// eESCM = ESCM_UNCHECKED
|
|
// ENDIF
|
|
//
|
|
// RETURN TRUE
|
|
// ENDIF
|
|
// ENDIF
|
|
// ENDREPEAT
|
|
//
|
|
// eESCM = ESCM_INVALIDATED
|
|
// RETURN TRUE
|
|
//ENDFUNC
|
|
|
|
|
|
|
|
/// PURPOSE:
|
|
///
|
|
/// PARAMS:
|
|
/// e - the stat to increment
|
|
/// number - the value to increment it by
|
|
/// overrideToValue - instead of incrementing by "number" override it to this value
|
|
//PROC INFORM_DLC_MISSION_STATS_OF_INCREMENT(DLC_ASSASSINATION_STATCONFIG &config, DLC_ASSASSINATION_STATS stat, INT number = 1, BOOL overrideToValue = FALSE)
|
|
// #IF IS_DEBUG_BUILD
|
|
// IF NOT IS_REPEAT_PLAY_ACTIVE()
|
|
// IF NOT g_savedGlobals.sFlow.isGameflowActive
|
|
// EXIT
|
|
// ENDIF
|
|
// ENDIF
|
|
// IF !g_bMissionStatSystemPrimed AND (!g_bMagDemoActive)
|
|
// CPRINTLN(DEBUG_MISSION_STATS, "Mission stats system inform call fired while stats system not primed. Pass this bug to Default Levels.")
|
|
// ENDIF
|
|
// #ENDIF
|
|
// INT i = 0
|
|
//
|
|
// REPEAT config.iRegisteredStats i
|
|
// IF config.target[i] = stat
|
|
// IF overrideToValue
|
|
// config.StatCurrentValue[i] = number
|
|
// CPRINTLN(DEBUG_MISSION_STATS, "Setting mission stat ", GET_DLC_MISSION_STAT_DEBUG_NAME(stat)," to ", number)
|
|
// ELSE
|
|
// config.StatCurrentValue[i] += number
|
|
// CPRINTLN(DEBUG_MISSION_STATS, "Incrementing mission stat ",GET_DLC_MISSION_STAT_DEBUG_NAME(stat)," by ", number, " new value ",config.StatCurrentValue[i])
|
|
// ENDIF
|
|
//
|
|
// EXIT
|
|
// ENDIF
|
|
// ENDREPEAT
|
|
//
|
|
//// IF config.g_MissionStatTrackingPrototypes[config.target[i]].type = MISSION_STAT_TYPE_UNIQUE_BOOL
|
|
//// IF config.StatCurrentValue[i] > 1
|
|
//// config.StatCurrentValue[i] = 1
|
|
//// ENDIF
|
|
//// IF config.StatCurrentValue[i] < 0
|
|
//// config.StatCurrentValue[i] = 0
|
|
//// ENDIF
|
|
//// ENDIF
|
|
//
|
|
//
|
|
// CPRINTLN(DEBUG_MISSION_STATS, "INFORM_MISSION_STATS_OF_INCREMENT Specified stat not logged: ", GET_DLC_MISSION_STAT_NAME(stat), " by ", number)
|
|
// DEBUG_PRINTCALLSTACK()
|
|
//
|
|
// SCRIPT_ASSERT("INFORM_MISSION_STATS_OF_INCREMENT Specified stat not logged. If reporting this issue please complete the mission (s pass is fine) and note if the mission success dialog appears or not and what stats appear in it if it does. Thanks!")
|
|
//ENDPROC
|
|
|
|
|
|
//PROC UPDATE_DLC_ASSASSINATION_STATS(DLC_ASSASSINATION_STATCONFIG &config) //UPDATE_STATS()
|
|
//
|
|
// FLOAT fTimeTaken = GET_TIMER_IN_SECONDS(config.missionTimer)
|
|
// fTimeTaken *= 1000.0
|
|
//
|
|
// INT i = 0
|
|
// CPRINTLN(DEBUG_MISSION_STATS, "Gathering stats from ", config.iRegisteredStats)
|
|
// REPEAT config.iRegisteredStats i
|
|
// INT j = -1, k = 0
|
|
//
|
|
// REPEAT MAX_TRACKED_MISSION_STATS k
|
|
// IF config.target[i] = INT_TO_ENUM(DLC_ASSASSINATION_STATS, ENUM_TO_INT(g_MissionStatTrackingArray[k].target))
|
|
// CPRINTLN(DEBUG_MISSION_STATS, "Found matching tracked stat array at ", k, ".")
|
|
//
|
|
// j = k
|
|
// ENDIF
|
|
// ENDREPEAT
|
|
//
|
|
// IF g_MissionStatTrackingArray[j].invalidationReason != MSSIR_VALID
|
|
// CPRINTLN(DEBUG_MISSION_STATS, "MSSIR_VALID - ", GET_STRING_FROM_MISSION_STAT_TYPES(config.type[i]))
|
|
// config.invalidationReason[i] = g_MissionStatTrackingArray[j].invalidationReason
|
|
// ENDIF
|
|
//
|
|
// SWITCH config.type[i]
|
|
// CASE MISSION_STAT_TYPE_TOTALTIME
|
|
// CPRINTLN(DEBUG_MISSION_STATS, "Stat ", GET_DLC_MISSION_STAT_DEBUG_NAME(config.target[i]), " has total time ", FLOOR(fTimeTaken), "ms")
|
|
// INFORM_DLC_MISSION_STATS_OF_INCREMENT(config, config.target[i], FLOOR(fTimeTaken), TRUE)
|
|
// BREAK
|
|
// CASE MISSION_STAT_TYPE_UNIQUE_BOOL
|
|
// CPRINTLN(DEBUG_MISSION_STATS, "Stat ", GET_DLC_MISSION_STAT_DEBUG_NAME(config.target[i]), " has unique bool - let the mission script set it!")
|
|
// BREAK
|
|
// CASE MISSION_STAT_TYPE_FRACTION
|
|
// CPRINTLN(DEBUG_MISSION_STATS, "Stat ", GET_DLC_MISSION_STAT_DEBUG_NAME(config.target[i]), " has fraction - let the mission script set it!")
|
|
// BREAK
|
|
// CASE MISSION_STAT_TYPE_SINGLE_ENTITY_DAMAGE_THRESHOLD
|
|
// CPRINTLN(DEBUG_MISSION_STATS, "Stat ", GET_DLC_MISSION_STAT_DEBUG_NAME(config.target[i]),
|
|
// " has damage threshold for a single entity, inspect tracking array [", j,
|
|
// "] - iTrackingDelta:", g_MissionStatTrackingArray[j].iTrackingDelta,
|
|
// ", ivalue:", g_MissionStatTrackingArray[j].ivalue)
|
|
//
|
|
//// BOOL bFoundDamagedEntity
|
|
//// bFoundDamagedEntity = FALSE
|
|
//
|
|
// INFORM_DLC_MISSION_STATS_OF_INCREMENT(config, config.target[i], g_MissionStatTrackingArray[j].iTrackingDelta, TRUE)
|
|
//// bFoundDamagedEntity = TRUE
|
|
// BREAK
|
|
// CASE MISSION_STAT_TYPE_HEADSHOTS
|
|
// CPRINTLN(DEBUG_MISSION_STATS, "Stat ", GET_DLC_MISSION_STAT_DEBUG_NAME(config.target[i]), " has headshot tracked!")
|
|
//
|
|
// BOOL bFoundHeadshotEntity
|
|
// bFoundHeadshotEntity = FALSE
|
|
//
|
|
// INT mHS
|
|
// mHS = 0
|
|
//
|
|
// WHILE mHS < ENUM_TO_INT(MAX_MISSION_STATS)
|
|
// AND NOT bFoundHeadshotEntity
|
|
//
|
|
// IF g_MissionStatTrackingPrototypes[mHS].type = MISSION_STAT_TYPE_HEADSHOTS
|
|
// CPRINTLN(DEBUG_MISSION_STATS, " Tracked prototype ", mHS, " is headshot [", g_MissionStatTrackingArray[j].ivalue, "]")
|
|
//
|
|
// INFORM_DLC_MISSION_STATS_OF_INCREMENT(config, config.target[i], g_MissionStatTrackingArray[j].ivalue, TRUE)
|
|
// bFoundHeadshotEntity = TRUE
|
|
// ELSE
|
|
// CPRINTLN(DEBUG_MISSION_STATS, " Tracked prototype ", mHS, " is something else (", GET_STRING_FROM_MISSION_STAT_TYPES(g_MissionStatTrackingPrototypes[mHS].type), "[", g_MissionStatTrackingArray[j].ivalue, "])!!!")
|
|
// ENDIF
|
|
//
|
|
// mHS++
|
|
// ENDWHILE
|
|
//
|
|
// IF NOT bFoundHeadshotEntity
|
|
// SCRIPT_ASSERT("Stat has headshot tracked???")
|
|
// ELSE
|
|
//
|
|
// ENDIF
|
|
// BREAK
|
|
// CASE MISSION_STAT_TYPE_WINDOWED_TIMER
|
|
// TEXT_LABEL_63 strTW
|
|
// strTW = "Stat \""
|
|
// #IF IS_DEBUG_BUILD
|
|
// strTW += GET_DLC_MISSION_STAT_DEBUG_NAME(config.target[i])
|
|
// #ENDIF
|
|
// strTW = "Stat \""
|
|
// #IF NOT IS_DEBUG_BUILD
|
|
// strTW += "DP_SOMETHING_"
|
|
// strTW += ENUM_TO_INT(config.target[i])
|
|
// #ENDIF
|
|
// strTW += "\" has a timed window stat"
|
|
//
|
|
//
|
|
// BOOL bFoundTimeWindow
|
|
// bFoundTimeWindow = FALSE
|
|
//
|
|
// CPRINTLN(DEBUG_MISSION_STATS, " Gathering tracked from ", g_iMissionStatsBeingTracked)
|
|
// INT mTW
|
|
// mTW = 0
|
|
//
|
|
// WHILE mTW < ENUM_TO_INT(MAX_MISSION_STATS)
|
|
// AND NOT bFoundTimeWindow
|
|
//
|
|
// IF g_MissionStatTrackingPrototypes[mTW].type = MISSION_STAT_TYPE_WINDOWED_TIMER
|
|
// CPRINTLN(DEBUG_MISSION_STATS, " Tracked stat ", mTW, " is time window [", g_MissionStatTrackingArray[j].ivalue, "]")
|
|
//
|
|
// INFORM_DLC_MISSION_STATS_OF_INCREMENT(config, config.target[i], g_MissionStatTrackingArray[j].ivalue, TRUE)
|
|
// bFoundTimeWindow = TRUE
|
|
// ELSE
|
|
// CPRINTLN(DEBUG_MISSION_STATS, " Tracked stat ", mTW, " is something else (", ENUM_TO_INT(g_MissionStatTrackingPrototypes[mTW].type), ")!!!")
|
|
// ENDIF
|
|
//
|
|
// mTW++
|
|
// ENDWHILE
|
|
//
|
|
// IF NOT bFoundTimeWindow
|
|
// CPRINTLN(DEBUG_MISSION_STATS, strTW)
|
|
// SCRIPT_ASSERT(strTW)
|
|
// ELSE
|
|
//
|
|
// ENDIF
|
|
//
|
|
// BREAK
|
|
//
|
|
//
|
|
// CASE MISSION_STAT_TYPE_ACCURACY
|
|
// CPRINTLN(DEBUG_MISSION_STATS, "Stat ", GET_DLC_MISSION_STAT_DEBUG_NAME(config.target[i]), " is for accuracy???")
|
|
//
|
|
// INT totalShots, totalHits
|
|
// totalShots = 0
|
|
// totalHits = 0
|
|
//
|
|
// totalShots = (RETRIEVE_INT_STAT(SP0_SHOTS) - g_iMissionStatsSP0Shots)
|
|
// totalHits = (RETRIEVE_INT_STAT(SP0_HITS) - g_iMissionStatsSP0Hits)
|
|
// CPRINTLN(DEBUG_MISSION_STATS, " Sp 0 hits/shots : ", totalHits, "/", totalShots)
|
|
//
|
|
//
|
|
// totalShots += (RETRIEVE_INT_STAT(SP1_SHOTS) -g_iMissionStatsSP1Shots)
|
|
// totalHits += (RETRIEVE_INT_STAT(SP1_HITS) - g_iMissionStatsSP1Hits)
|
|
// CPRINTLN(DEBUG_MISSION_STATS, " +Sp 1 hits/shots : ", totalHits, "/", totalShots)
|
|
//
|
|
// totalShots += (RETRIEVE_INT_STAT(SP2_SHOTS) -g_iMissionStatsSP2Shots)
|
|
// totalHits += (RETRIEVE_INT_STAT(SP2_HITS) - g_iMissionStatsSP2Hits)
|
|
// CPRINTLN(DEBUG_MISSION_STATS, " +Sp 2 hits/shots : ", totalHits, "/", totalShots)
|
|
//
|
|
// //SCRIPT_ASSERT("Accuracy metrics end")
|
|
//
|
|
// //now use totalShots and totalHits to work out the mission accuracy
|
|
// // WAIT(0)
|
|
// FLOAT fPercentage
|
|
// fPercentage = 100.0
|
|
// IF NOT (totalShots = 0)
|
|
//
|
|
// CPRINTLN(DEBUG_MISSION_STATS, " totalHits/totalShots : ", totalHits, "/", totalShots)
|
|
//
|
|
// FLOAT ftotal, fhits
|
|
// ftotal = TO_FLOAT(totalShots)
|
|
// fhits = TO_FLOAT(totalHits)
|
|
//
|
|
// fPercentage = TO_FLOAT(FLOOR((fhits/ftotal)*100.0))
|
|
//
|
|
// IF fPercentage > 100.0
|
|
// fPercentage = 100.0
|
|
// ENDIF
|
|
//
|
|
// CPRINTLN(DEBUG_MISSION_STATS, " fPercentage: ", fPercentage, "%")
|
|
//
|
|
// ENDIF
|
|
//
|
|
// // overallAccuracyMetric = fPercentage
|
|
// // overallBulletsMetric = totalShots
|
|
//
|
|
// CPRINTLN(DEBUG_MISSION_STATS, " Tracked stat ", GET_DLC_MISSION_STAT_DEBUG_NAME(config.target[i]), " has accuracy [", ROUND(fPercentage), "]")
|
|
// INFORM_DLC_MISSION_STATS_OF_INCREMENT(config, config.target[i], ROUND(fPercentage), TRUE)
|
|
//
|
|
// BREAK
|
|
//
|
|
// DEFAULT
|
|
// TEXT_LABEL_63 str
|
|
// str = "Stat \""
|
|
// #IF IS_DEBUG_BUILD
|
|
// str += GET_DLC_MISSION_STAT_DEBUG_NAME(config.target[i])
|
|
// #ENDIF
|
|
// str = "Stat \""
|
|
// #IF NOT IS_DEBUG_BUILD
|
|
// str += "DP_SOMETHING_"
|
|
// str += ENUM_TO_INT(config.target[i])
|
|
// #ENDIF
|
|
// str += "\" has an unknown type ["
|
|
// str += GET_STRING_FROM_MISSION_STAT_TYPES(config.type[i])
|
|
// str += "]??"
|
|
//
|
|
// CPRINTLN(DEBUG_MISSION_STATS, str)
|
|
// SCRIPT_ASSERT(str)
|
|
// BREAK
|
|
// ENDSWITCH
|
|
// ENDREPEAT
|
|
//
|
|
//ENDPROC
|
|
|
|
|
|
//PROC UPLOAD_DATA_FOR_TRACKED_DLC_STAT(MISSION_STAT_SYSTEM_INVALIDATION_REASON invalidationReason, INT ivalue, DLC_ASSASSINATION_STATS target)
|
|
// IF invalidationReason = MSSIR_VALID
|
|
// CPRINTLN(DEBUG_MISSION_STATS, "UPLOAD_DATA_FOR_TRACKED_DLC_STAT - ivalue:", ivalue, " target:", GET_DLC_MISSION_STAT_DEBUG_NAME(target))
|
|
//
|
|
//// IF(g_DLCMissionStatTrackingPrototypes[g_DLCMissionStatTrackingArray[index].target].less_than_threshold)
|
|
//// CPRINTLN(DEBUG_MISSION_STATS, "UPLOAD_DATA_FOR_TRACKED_DLC_STAT - lessthan check ",oldvalue," > ",g_DLCMissionStatTrackingArray[index].ivalue)
|
|
//// //should we log the stat? is it a record, or has it never been set?
|
|
//// IF oldvalue > g_DLCMissionStatTrackingArray[index].ivalue OR oldvalue < 0
|
|
//// CPRINTLN(DEBUG_MISSION_STATS, "UPLOAD_DATA_FOR_TRACKED_DLC_STAT - lessthan record, setting")
|
|
// SET_DLC_MISSION_STAT_STORED_VALUE(ivalue, target)
|
|
//// ENDIF
|
|
//// ELSE
|
|
//// CPRINTLN(DEBUG_MISSION_STATS, "UPLOAD_DATA_FOR_TRACKED_DLC_STAT - greaterthan check ",g_DLCMissionStatTrackingArray[index].ivalue," > ",oldvalue)
|
|
//// IF g_DLCMissionStatTrackingArray[index].ivalue > oldvalue OR oldvalue < 0
|
|
//// CPRINTLN(DEBUG_MISSION_STATS, "UPLOAD_DATA_FOR_TRACKED_DLC_STAT - greaterthan record, setting")
|
|
//// SET_DLC_MISSION_STAT_STORED_VALUE(g_DLCMissionStatTrackingArray[index].ivalue, g_DLCMissionStatTrackingArray[index].target)
|
|
//// ENDIF
|
|
//// ENDIF
|
|
// ENDIF
|
|
//ENDPROC
|
|
|
|
|
|
//PROC MISSION_STAT_BLOCKING_END_OF_DLC_ASSASSINATION_SCREEN(DLC_ASSASSINATION_STATCONFIG &config)
|
|
//
|
|
// //lodge the values into the stat system
|
|
// //BEGIN_REPLAY_STATS(47,47)
|
|
// //ADD_REPLAY_STAT_VALUE(INT ValueOfStat)
|
|
// //END_REPLAY_STATS()
|
|
//
|
|
// REQUEST_ADDITIONAL_TEXT("MISHSTA", MINIGAME_TEXT_SLOT)
|
|
// WHILE NOT HAS_ADDITIONAL_TEXT_LOADED(MINIGAME_TEXT_SLOT)
|
|
// CPRINTLN(DEBUG_MISSION_STATS, "Waiting additional text to load.")
|
|
// WAIT(0)
|
|
// ENDWHILE
|
|
//
|
|
// PLAY_MISSION_COMPLETE_AUDIO("FRANKLIN_BIG_01")
|
|
// WHILE NOT IS_MISSION_COMPLETE_READY_FOR_UI()
|
|
// CPRINTLN(DEBUG_MISSION_STATS, "Waiting mission complete audio to be ready.")
|
|
// WAIT(0)
|
|
// ENDWHILE
|
|
//
|
|
// UPDATE_DLC_ASSASSINATION_STATS(config)
|
|
//
|
|
// END_SCREEN_DATASET esd
|
|
// esd.bShowSkipperPrompt = TRUE
|
|
// SET_ENDSCREEN_DATASET_HEADER(esd, "MISHPA", GET_DLC_ASSASSINATION_TITLE_STRING(config.dlcAssassinationIndex))
|
|
//
|
|
// INT visibleAttempted = config.iRegisteredStats
|
|
// INT visiblesucceeded = 0
|
|
//
|
|
// INT i = 0
|
|
// MISSION_STAT_SYSTEM_INVALIDATION_REASON eLastInvalidationReasonShown = MSSIR_VALID
|
|
//
|
|
// REPEAT config.iRegisteredStats i
|
|
// INT iSuccessThreshold = g_DLCMissionStatTrackingPrototypes[config.target[i]].success_threshold
|
|
//
|
|
// END_SCREEN_CHECK_MARK_STATUS eEndScreenCheckMarkStatus = ESCM_CHECKED
|
|
//
|
|
// END_SCREEN_ELEMENT_FORMATTING eFormatting = ESEF_NAME_ONLY
|
|
// IF GET_FORMATTING_TYPE_FOR_DLC_STAT(config.type[i], eFormatting)
|
|
//
|
|
// #IF IS_DEBUG_BUILD
|
|
// INT iDebugTarget = -1
|
|
// GET_TARGET_FOR_DLC_STAT(config.target[i], iDebugTarget)
|
|
// BOOL bMatchDebugTarget = TRUE
|
|
//
|
|
// IF g_DLCMissionStatTrackingPrototypes[config.target[i]].type != config.type[i]
|
|
// CASSERTLN(DEBUG_MISSION_STATS, "type mismatch ", GET_DLC_MISSION_STAT_DEBUG_NAME(config.target[i]), " - ", GET_STRING_FROM_MISSION_STAT_TYPES(g_DLCMissionStatTrackingPrototypes[config.target[i]].type), " != ", GET_STRING_FROM_MISSION_STAT_TYPES(config.type[i]), "??")
|
|
// bMatchDebugTarget = FALSE
|
|
// ENDIF
|
|
// IF iSuccessThreshold != iDebugTarget
|
|
// CASSERTLN(DEBUG_MISSION_STATS, "target mismatch ", GET_DLC_MISSION_STAT_DEBUG_NAME(config.target[i]), " - ", iSuccessThreshold, " != ", iDebugTarget, "??")
|
|
// bMatchDebugTarget = FALSE
|
|
// ENDIF
|
|
//
|
|
// IF bMatchDebugTarget
|
|
// CERRORLN(DEBUG_MISSION_STATS, "type and target ", GET_DLC_MISSION_STAT_DEBUG_NAME(config.target[i]), " match.")
|
|
// ENDIF
|
|
// #ENDIF
|
|
//
|
|
// IF config.invalidationReason[i] = MSSIR_VALID
|
|
// IF GET_END_SCREEN_CHECK_MARK_FOR_DLC_STAT(config, config.target[i], iSuccessThreshold, eEndScreenCheckMarkStatus, visiblesucceeded)
|
|
// ADD_ENDSCREEN_DATASET_CONTENT_ELEMENT(esd,
|
|
// eFormatting,
|
|
// GET_DLC_MISSION_STAT_NAME(config.target[i]),
|
|
// "",
|
|
// config.StatCurrentValue[i],
|
|
// iSuccessThreshold,
|
|
// eEndScreenCheckMarkStatus,
|
|
// FALSE)
|
|
// ENDIF
|
|
// ELSE
|
|
// STRING invalidationReason = "MTPHPERRET"
|
|
// SWITCH config.invalidationReason[i]
|
|
// CASE MSSIR_CHEAT_ACTIVE invalidationReason = "MTPHPERCHE" BREAK
|
|
// CASE MSSIR_SKIP invalidationReason = "MTPHPERSKI" BREAK
|
|
// CASE MSSIR_TAXI_USED invalidationReason = "MTPHPERTAX" BREAK
|
|
// CASE MSSIR_NOT_SET invalidationReason = "MTPHPERNOREC" BREAK
|
|
// ENDSWITCH
|
|
// IF eLastInvalidationReasonShown = config.invalidationReason[i]
|
|
// invalidationReason = ""
|
|
// ENDIF
|
|
// eLastInvalidationReasonShown = config.invalidationReason[i]
|
|
//
|
|
// ADD_ENDSCREEN_DATASET_CONTENT_ELEMENT(esd,
|
|
// ESEF_RAW_STRING,
|
|
// GET_DLC_MISSION_STAT_NAME(config.target[i]),
|
|
// invalidationReason,
|
|
// config.StatCurrentValue[i],
|
|
// 0,
|
|
// ESCM_INVALIDATED)
|
|
//
|
|
// ENDIF
|
|
// ENDIF
|
|
//
|
|
// UPLOAD_DATA_FOR_TRACKED_DLC_STAT(config.invalidationReason[i], config.StatCurrentValue[i], config.target[i])
|
|
//
|
|
// MISSION_STAT_RESET_STAT_REGISTER(i)
|
|
// g_iMissionStatsBeingTracked--
|
|
// ENDREPEAT
|
|
//
|
|
// config.fCompletionPercent = GET_MISSION_STAT_PERCENTAGE(visiblesucceeded, visibleattempted)
|
|
//
|
|
// STRING resultString = "MTPHPER"
|
|
// END_SCREEN_MEDAL_STATUS ems = ESMS_NO_MEDAL
|
|
// SWITCH GET_STAT_MEDAL_VALUE(config.fCompletionPercent)
|
|
// CASE 3 //HUD_COLOUR_GOLD
|
|
// resultString = "MTPHPER_G"
|
|
// ems = ESMS_GOLD
|
|
// BREAK
|
|
// CASE 2 //HUD_COLOUR_SILVER
|
|
// resultString = "MTPHPER_S"
|
|
// ems = ESMS_SILVER
|
|
// BREAK
|
|
// CASE 1 // HUD_COLOUR_BRONZE
|
|
// resultString = "MTPHPER_B"
|
|
// ems = ESMS_BRONZE
|
|
// BREAK
|
|
// ENDSWITCH
|
|
//
|
|
// //SET_ENDSCREEN_COMPLETION_LINE_STATE(esd,TRUE, "MTPHPER", ROUND(config.fCompletionPercent), 100,ESC_PERCENTAGE_COMPLETION,ESMS_NO_MEDAL)
|
|
// SET_ENDSCREEN_COMPLETION_LINE_STATE(esd, TRUE, resultString, ROUND(config.fCompletionPercent),0, ESC_PERCENTAGE_COMPLETION, ems)
|
|
//
|
|
//
|
|
// ENDSCREEN_PREPARE(esd, TRUE) // blocks here until loaded
|
|
// RENDER_ENDSCREEN(esd, TRUE) // blocks here until done
|
|
//
|
|
// ENDSCREEN_SHUTDOWN(esd)
|
|
//
|
|
//
|
|
// SET_RESULT_SCREEN_DISPLAYING_STATE(FALSE)
|
|
// g_bMissionOverStatTrigger = FALSE
|
|
//
|
|
//
|
|
//
|
|
//ENDPROC
|
|
|
|
|
|
//#ENDIF
|
|
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//Old stat system///////////////////////////////////////////////////////////////////////////////////////////////
|
|
////////////////////////////////////////////////////////////////////////////////////////////////////////////////
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
PROC RESET_MISSION_REGISTERS_FROM_START()
|
|
INT i = 0
|
|
REPEAT g_iMissionStatsBeingTracked i
|
|
MISSION_STAT_RESET_STAT_REGISTER(i)
|
|
ENDREPEAT
|
|
ENDPROC
|
|
|
|
|
|
//yes public includes private in this case, is quite derp
|
|
|
|
|
|
//this was moved out to auto gen also to fix header cycle
|
|
FUNC INT GET_VALUE_OF_STAT_FROM_TRANSITORY_TRACKING_REGISTERS( ENUM_MISSION_STATS m )
|
|
|
|
INT i = 0
|
|
INT crewsum = 0
|
|
SWITCH m
|
|
CASE FH2A_CREW_TAKE
|
|
CASE FH2B_CREW_TAKE
|
|
REPEAT MAX_CREW_SIZE i
|
|
IF g_savedGlobals.sHeistData.sEndScreenData[g_iMissionStatSystemHeistIndex].eCrewStatus[i] = CMST_FINE
|
|
crewsum += g_savedGlobals.sHeistData.sEndScreenData[g_iMissionStatSystemHeistIndex].iCrewMemberTake[i]
|
|
ENDIF
|
|
ENDREPEAT
|
|
CPRINTLN(DEBUG_MISSION_STATS, "CREWTAKE for 1631323: Found a total of ", crewsum)
|
|
RETURN crewsum
|
|
ENDSWITCH
|
|
|
|
i = 0
|
|
REPEAT g_iMissionStatsBeingTracked i
|
|
IF g_MissionStatTrackingArray[i].target = m
|
|
CPRINTLN(DEBUG_MISSION_STATS, "GET_VALUE_OF_STAT_FROM_TRANSITORY_TRACKING_REGISTERS N: Returning value ",g_MissionStatTrackingArray[i].ivalue," from register ", i, " with enum index ",m)
|
|
RETURN g_MissionStatTrackingArray[i].ivalue
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
SCRIPT_ASSERT("GET_VALUE_OF_STAT_FROM_TRANSITORY_TRACKING_REGISTERS N: target not in the registers. Pass this bug to Default Levels.")
|
|
RETURN 0
|
|
ENDFUNC
|
|
|
|
/*
|
|
ENUM MISSION_STAT_SYSTEM_TIME_WARP_SOURCE
|
|
MSSTWS_TAXI
|
|
ENDENUM
|
|
*/
|
|
|
|
|
|
/// PURPOSE:
|
|
/// Prevent the autosave happening before the primed stats have been written to the profile
|
|
/// RETURNS:
|
|
///
|
|
FUNC BOOL IS_MISSION_STAT_UPLOAD_PENDING()
|
|
#if USE_CLF_DLC
|
|
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("mission_stat_watchCLF")) < 1
|
|
CPRINTLN(DEBUG_MISSION_STATS, "IS_MISSION_STAT_UPLOAD_PENDING: stat watcher not running, returning false")
|
|
RETURN FALSE
|
|
ENDIF
|
|
#endif
|
|
#if USE_NRM_DLC
|
|
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("mission_stat_watchNRM")) < 1
|
|
CPRINTLN(DEBUG_MISSION_STATS, "IS_MISSION_STAT_UPLOAD_PENDING: stat watcher not running, returning false")
|
|
RETURN FALSE
|
|
ENDIF
|
|
#endif
|
|
#if not USE_CLF_DLC
|
|
#if not USE_NRM_DLC
|
|
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("mission_stat_watcher")) < 1
|
|
CPRINTLN(DEBUG_MISSION_STATS, "IS_MISSION_STAT_UPLOAD_PENDING: stat watcher not running, returning false")
|
|
RETURN FALSE
|
|
ENDIF
|
|
#endif
|
|
#endif
|
|
|
|
IF NOT g_bMissionStatSystemPrimed
|
|
CPRINTLN(DEBUG_MISSION_STATS, "IS_MISSION_STAT_UPLOAD_PENDING: no prime, returning false")
|
|
RETURN FALSE
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION_STATS, "IS_MISSION_STAT_UPLOAD_PENDING: g_bMissionStatSystemUploadPending state ", g_bMissionStatSystemUploadPending)
|
|
ENDIF
|
|
RETURN g_bMissionStatSystemUploadPending
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
PROC RESET_STAT_SYSTEM_DEADPOOL()
|
|
INT i = 0
|
|
REPEAT STAT_DEADPOOL_DEPTH i
|
|
g_StatSystemDeadpool[i].entar = NULL
|
|
g_StatSystemDeadpool[i].statar = UNSET_MISSION_STAT_ENUM
|
|
ENDREPEAT
|
|
g_StatSystemDeadpoolEntries = 0
|
|
ENDPROC
|
|
|
|
PROC RESET_STAT_SYSTEM_WEPPOOL()
|
|
INT i = 0
|
|
REPEAT STAT_WEPPOOL_DEPTH i
|
|
g_StatSystemWeaponpool[i].statar = UNSET_MISSION_STAT_ENUM
|
|
ENDREPEAT
|
|
g_StatSystemWeponpoolEntries = 0
|
|
ENDPROC
|
|
|
|
|
|
/// PURPOSE:
|
|
/// Log a weapon that will then auto increment the given stat for each ped the player kills with it. 4 weapons may be logged at once.
|
|
/// PARAMS:
|
|
/// wep - the weapon
|
|
/// stat - the stat
|
|
PROC ADD_WEPPOOL_TRIGGER(WEAPON_TYPE wep,ENUM_MISSION_STATS stat)
|
|
IF STAT_WEPPOOL_DEPTH = g_StatSystemWeponpoolEntries
|
|
SCRIPT_ASSERT("ADD_WEPPOOL_TRIGGER: Wep pool has no space left")
|
|
EXIT
|
|
ENDIF
|
|
CPRINTLN(DEBUG_MISSION_STATS, "ADD_WEPPOOL_TRIGGER: Registering wep ",wep," and stat ",stat)
|
|
g_StatSystemWeaponpool[g_StatSystemWeponpoolEntries].weptar = wep
|
|
g_StatSystemWeaponpool[g_StatSystemWeponpoolEntries].statar = stat
|
|
++g_StatSystemWeponpoolEntries
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
/// PURPOSE:
|
|
/// Log a ped that on death will trigger an increment of the given stat.
|
|
/// PARAMS:
|
|
/// entity -
|
|
/// stat -
|
|
PROC ADD_DEADPOOL_TRIGGER(ENTITY_INDEX entity,ENUM_MISSION_STATS stat)
|
|
|
|
|
|
//look for null entry
|
|
INT i = 0
|
|
REPEAT STAT_DEADPOOL_DEPTH i
|
|
IF g_StatSystemDeadpool[i].entar = null
|
|
g_StatSystemDeadpool[i].entar = entity
|
|
g_StatSystemDeadpool[i].statar = stat
|
|
IF i = g_StatSystemDeadpoolEntries
|
|
++g_StatSystemDeadpoolEntries
|
|
ENDIF
|
|
EXIT
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
CPRINTLN(DEBUG_MISSION_STATS, "ADD_DEADPOOL_TRIGGER: dead pool has no space left")
|
|
ENDPROC
|
|
|
|
|
|
/// PURPOSE
|
|
/// invalidate time based stats due to time warp, this should only be used for things like the taxi time skips
|
|
/// or anything else that is not part of the mission that teleports the player or changes the time
|
|
/// it should only be used on things that the player can trigger.
|
|
PROC MISSION_STAT_SYSTEM_ALERT_TIME_WARP()//MISSION_STAT_SYSTEM_TIME_WARP_SOURCE source
|
|
CPRINTLN(DEBUG_MISSION_STATS, "MISSION_STAT_SYSTEM_ALERT_TIME_WARP: On mission time warp stat invalidation check")
|
|
INT i = 0
|
|
REPEAT g_iMissionStatsBeingTracked i
|
|
SWITCH g_MissionStatTrackingPrototypes[g_MissionStatTrackingArray[i].target].type
|
|
CASE MISSION_STAT_TYPE_TOTALTIME
|
|
g_MissionStatTrackingArray[i].invalidationReason = MSSIR_TAXI_USED
|
|
BREAK
|
|
CASE MISSION_STAT_TYPE_WINDOWED_TIMER
|
|
IF g_bMissionStatTimeWindowGate
|
|
g_MissionStatTrackingArray[i].invalidationReason = MSSIR_TAXI_USED
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
ENDREPEAT
|
|
ENDPROC
|
|
|
|
|
|
|
|
PROC TRIGGER_MISSION_STATS_UI(BOOL IgnoreFadeMode = FALSE, BOOL SuppressFadeIn = FALSE)
|
|
|
|
g_bEndScreenSuppressFadeIn = SuppressFadeIn
|
|
IF g_bMissionOverStatTrigger
|
|
CPRINTLN(DEBUG_MISSION_STATS, "TRIGGER_MISSION_STATS_UI: already triggered")
|
|
EXIT
|
|
ENDIF
|
|
|
|
CPRINTLN(DEBUG_MISSION_STATS, "TRIGGER_MISSION_STATS_UI: stats UI triggered")
|
|
|
|
IF g_bSuppressNextStatTrigger
|
|
CPRINTLN(DEBUG_MISSION_STATS, "TRIGGER_MISSION_STATS_UI: suppressed by g_bSuppressNextStatTrigger")
|
|
g_bSuppressNextStatTrigger = FALSE
|
|
EXIT
|
|
|
|
ENDIF
|
|
#if USE_CLF_DLC
|
|
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("mission_stat_watchCLF")) > 0
|
|
PRINTSTRING("TRIGGER_MISSION_STATS_UI end of mission overlay triggered! ")
|
|
IF (g_bMissionOverStatTrigger)
|
|
PRINTSTRING("g_bMissionOverStatTrigger state is true already.")
|
|
ELSE
|
|
PRINTSTRING("g_bMissionOverStatTrigger state is false, setting to true.")
|
|
ENDIF
|
|
PRINTNL()
|
|
g_MissionStatUIIgnoreFade = IgnoreFadeMode
|
|
g_bMissionOverStatTrigger = TRUE
|
|
g_bMissionStatSystemUploadPending =TRUE
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT g_bMissionStatSystemPrimed
|
|
CPRINTLN(DEBUG_MISSION_STATS, "TRIGGER_MISSION_STATS_UI: Stat watcher wasn't primed, seeing if standalone splash was primed")
|
|
ENDIF
|
|
#ENDIF
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION_STATS, "TRIGGER_MISSION_STATS_UI mission stats triggered without the stat wacher running. Cancelling request.")
|
|
ENDIF
|
|
#endif
|
|
#if USE_NRM_DLC
|
|
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("mission_stat_watchNRM")) > 0
|
|
PRINTSTRING("TRIGGER_MISSION_STATS_UI end of mission overlay triggered! ")
|
|
IF (g_bMissionOverStatTrigger)
|
|
PRINTSTRING("g_bMissionOverStatTrigger state is true already.")
|
|
ELSE
|
|
PRINTSTRING("g_bMissionOverStatTrigger state is false, setting to true.")
|
|
ENDIF
|
|
PRINTNL()
|
|
g_MissionStatUIIgnoreFade = IgnoreFadeMode
|
|
g_bMissionOverStatTrigger = TRUE
|
|
g_bMissionStatSystemUploadPending =TRUE
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT g_bMissionStatSystemPrimed
|
|
CPRINTLN(DEBUG_MISSION_STATS, "TRIGGER_MISSION_STATS_UI: Stat watcher wasn't primed, seeing if standalone splash was primed")
|
|
ENDIF
|
|
#ENDIF
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION_STATS, "TRIGGER_MISSION_STATS_UI mission stats triggered without the stat wacher running. Cancelling request.")
|
|
ENDIF
|
|
#endif
|
|
#if not USE_CLF_DLC
|
|
#if not USE_NRM_DLC
|
|
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("mission_stat_watcher")) > 0
|
|
PRINTSTRING("TRIGGER_MISSION_STATS_UI end of mission overlay triggered! ")
|
|
IF (g_bMissionOverStatTrigger)
|
|
PRINTSTRING("g_bMissionOverStatTrigger state is true already.")
|
|
ELSE
|
|
PRINTSTRING("g_bMissionOverStatTrigger state is false, setting to true.")
|
|
ENDIF
|
|
PRINTNL()
|
|
g_MissionStatUIIgnoreFade = IgnoreFadeMode
|
|
g_bMissionOverStatTrigger = TRUE
|
|
g_bMissionStatSystemUploadPending =TRUE
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT g_bMissionStatSystemPrimed
|
|
CPRINTLN(DEBUG_MISSION_STATS, "TRIGGER_MISSION_STATS_UI: Stat watcher wasn't primed, seeing if standalone splash was primed")
|
|
ENDIF
|
|
#ENDIF
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION_STATS, "TRIGGER_MISSION_STATS_UI mission stats triggered without the stat wacher running. Cancelling request.")
|
|
ENDIF
|
|
#endif
|
|
#endif
|
|
//SCRIPT_ASSERT("Stat watcher fired")
|
|
ENDPROC
|
|
|
|
|
|
|
|
PROC SET_TIME_TARGET_FOR_STAT_PROTOTYPE(ENUM_MISSION_STATS s, INT minutes,INT seconds)
|
|
//work out the ms
|
|
g_MissionStatTrackingPrototypes[s].success_threshold = (minutes*60000) + (seconds*1000)
|
|
ENDPROC
|
|
|
|
PROC DO_MISSION_STAT_INITIAL_CONFIGURATION()
|
|
INT initrep = 0
|
|
MissionStatInfo msi
|
|
|
|
#IF USE_NRM_DLC
|
|
REPEAT MAX_MISSION_STATS_NRM initrep
|
|
#ENDIF
|
|
#IF USE_CLF_DLC
|
|
REPEAT MAX_MISSION_STATS_CLF initrep
|
|
#ENDIF
|
|
#IF NOT USE_SP_DLC
|
|
REPEAT MAX_MISSION_STATS initrep
|
|
#ENDIF
|
|
//.statname = INT_TO_ENUM(STATSENUM, 0)
|
|
ENUM_MISSION_STATS ems = INT_TO_ENUM(ENUM_MISSION_STATS,initrep)
|
|
|
|
msi.statname = INT_TO_ENUM(STATSENUM, 0)
|
|
INTERNAL_GENERATED_MISSION_STAT_CONFIGURE_TYPES_AND_VALUES_FOR_INDEX(ems, msi)
|
|
g_MissionStatTrackingPrototypes[initrep].type = msi.type
|
|
//g_MissionStatTrackingPrototypes[initrep].currentvalue = msi.currentvalue
|
|
g_MissionStatTrackingPrototypes[initrep].success_threshold = msi.success_threshold
|
|
g_MissionStatTrackingPrototypes[initrep].less_than_threshold = msi.less_than_threshold
|
|
g_MissionStatTrackingPrototypes[initrep].statname = msi.statname
|
|
g_MissionStatTrackingPrototypes[initrep].MinRange = msi.MinRange
|
|
g_MissionStatTrackingPrototypes[initrep].MaxRange = msi.MaxRange
|
|
g_MissionStatTrackingPrototypes[initrep].bHidden = msi.bHidden
|
|
g_MissionStatTrackingPrototypes[initrep].lb_differentiator = msi.lb_differentiator
|
|
g_MissionStatTrackingPrototypes[initrep].lb_weight_PPC = msi.lb_weight_PPC
|
|
g_MissionStatTrackingPrototypes[initrep].lb_min_legal = msi.lb_min_legal
|
|
g_MissionStatTrackingPrototypes[initrep].lb_max_legal = msi.lb_max_legal
|
|
g_MissionStatTrackingPrototypes[initrep].lb_precedence = msi.lb_precedence
|
|
|
|
g_MissionStatTrackingPrototypes[initrep].currentvalue = GET_MISSION_STAT_STORED_VALUE(g_MissionStatTrackingPrototypes[initrep].statname)
|
|
CPRINTLN(DEBUG_MISSION_STATS, "DO_MISSION_STAT_INITIAL_CONFIGURATION: got initial value of ", g_MissionStatTrackingPrototypes[initrep].currentvalue , " for index ", initrep )
|
|
#IF USE_NRM_DLC
|
|
ENDREPEAT
|
|
#ENDIF
|
|
#IF USE_CLF_DLC
|
|
ENDREPEAT
|
|
#ENDIF
|
|
#IF NOT USE_SP_DLC
|
|
ENDREPEAT
|
|
#ENDIF
|
|
|
|
//now register stat associations with the flow.
|
|
INTERNAL_GENERATED_ASSOCIATE_STATS_WITH_FLOW()
|
|
ENDPROC
|
|
|
|
FUNC FLOAT GET_RC_MS_PERCENTAGE(g_eRC_MissionIDs m)
|
|
RETURN g_savedGlobals.sRandomChars.savedRC[m].fStatCompletion
|
|
ENDFUNC
|
|
|
|
PROC SET_RC_MS_PERCENTAGE(g_eRC_MissionIDs m, FLOAT fperc, BOOL bSkip = FALSE)
|
|
IF bSkip
|
|
g_savedGlobals.sRandomChars.savedRC[m].fStatCompletion = 50
|
|
ELSE
|
|
g_savedGlobals.sRandomChars.savedRC[m].fStatCompletion = fperc
|
|
ENDIF
|
|
|
|
// hey andy i added this boolean here so I can tell the achievement controller to check the medals
|
|
// i'm not doing this by looping through the values in the repeat play menu - aaron
|
|
g_bCheckSolidGoldBabyAchievement = TRUE
|
|
ENDPROC
|
|
|
|
FUNC FLOAT GET_SM_MS_PERCENTAGE(SP_MISSIONS m)
|
|
RETURN g_savedGlobals.sFlow.missionSavedData[m].fStatCompletion
|
|
ENDFUNC
|
|
|
|
PROC SET_SM_MS_PERCENTAGE(SP_MISSIONS m, FLOAT fperc, BOOL bSkip = FALSE)
|
|
|
|
|
|
#if USE_CLF_DLC
|
|
IF bSkip
|
|
g_savedGlobalsClifford.sFlow.missionSavedData[m].fStatCompletion = 50
|
|
ELSE
|
|
g_savedGlobalsClifford.sFlow.missionSavedData[m].fStatCompletion = fperc
|
|
ENDIF
|
|
#endif
|
|
|
|
#if USE_NRM_DLC
|
|
IF bSkip
|
|
g_savedGlobalsnorman.sFlow.missionSavedData[m].fStatCompletion = 50
|
|
ELSE
|
|
g_savedGlobalsnorman.sFlow.missionSavedData[m].fStatCompletion = fperc
|
|
ENDIF
|
|
#endif
|
|
|
|
#if not USE_CLF_DLC
|
|
#if not USE_NRM_DLC
|
|
IF bSkip
|
|
g_savedGlobals.sFlow.missionSavedData[m].fStatCompletion = 50
|
|
ELSE
|
|
g_savedGlobals.sFlow.missionSavedData[m].fStatCompletion = fperc
|
|
ENDIF
|
|
#endif
|
|
#endif
|
|
|
|
// hey andy i added this boolean here so I can tell the achievement controller to check the medals
|
|
// i'm not doing this by looping through the values in the repeat play menu - aaron
|
|
g_bCheckSolidGoldBabyAchievement = TRUE
|
|
ENDPROC
|
|
|
|
PROC LODGE_PERCENTAGE_FOR_CURRENT_MISSION(FLOAT fperc, BOOL bSkip = FALSE)
|
|
FLOAT fLastPerc
|
|
|
|
IF g_LeaderboardLastMissionRCType
|
|
//RC mission
|
|
|
|
g_eRC_MissionIDs m = INT_TO_ENUM(g_eRC_MissionIDs,g_LeaderboardLastMissionID)
|
|
fLastPerc = GET_RC_MS_PERCENTAGE(m)
|
|
|
|
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH10 - Lodging Percentage For RC Mission - Old %:", fLastPerc, " Current %:", fperc)
|
|
IF (fLastPerc < 100.0)
|
|
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH10 - Previous Percentage is less than 100%")
|
|
IF fperc >= 100.0
|
|
++g_savedGlobals.sFlowCustom.iMissionGolds
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF (fperc >= fLastPerc)
|
|
SET_RC_MS_PERCENTAGE(m,fperc,bSkip)
|
|
ENDIF
|
|
|
|
ELIF g_LeaderboardLastMissionID = -1
|
|
SCRIPT_ASSERT("LODGE_PERCENTAGE_FOR_CURRENT_MISSION - g_LeaderboardLastMissionID is null!!!")
|
|
|
|
ELSE
|
|
//regular mission
|
|
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH10 - Lodging Percentage For SP Mission ", g_LeaderboardLastMissionID, ".")
|
|
|
|
SP_MISSIONS mi = INT_TO_ENUM(SP_MISSIONS,g_LeaderboardLastMissionID)
|
|
fLastPerc = GET_SM_MS_PERCENTAGE(mi)
|
|
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH10 - Lodging Percentage For SP Mission - Old %:", fLastPerc, " Current %:", fperc)
|
|
|
|
IF fLastPerc < 100.0
|
|
CPRINTLN(DEBUG_ACHIEVEMENT, "ACH10 - Previous Percentage is less than 100%")
|
|
IF fperc >= 100.0
|
|
#if USE_CLF_DLC
|
|
++g_savedGlobalsClifford.sFlowCustom.iMissionGolds
|
|
#endif
|
|
#if USE_NRM_DLC
|
|
++g_savedGlobalsnorman.sFlowCustom.iMissionGolds
|
|
#endif
|
|
#if not USE_CLF_DLC
|
|
#if not USE_NRM_DLC
|
|
++g_savedGlobals.sFlowCustom.iMissionGolds
|
|
#endif
|
|
#endif
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF (fperc >= fLastPerc)
|
|
SET_SM_MS_PERCENTAGE(mi,fperc,bSkip)
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
|
|
PROC CHECK_REPLAY_MISSION_STAT_STATE()
|
|
|
|
//check for lodged values needing uploaded after replay
|
|
IF HAVE_REPLAY_STATS_BEEN_STORED()
|
|
IF GET_REPLAY_STAT_MISSION_ID() = 33
|
|
IF GET_REPLAY_STAT_MISSION_TYPE() = 33
|
|
INT statcount = GET_REPLAY_STAT_COUNT()
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<REPSTATS> Detected unprocessed replay stats, n : ", statcount, ".")
|
|
|
|
INT OverridePerc = -1
|
|
INT endpoint = statcount-4
|
|
IF ((statcount-4)%3) = 0 // 4 stats signifying mission, percent, skip status and rc type
|
|
statcount = (statcount-4)/3
|
|
INT i = 0
|
|
REPEAT statcount i
|
|
INT value = GET_REPLAY_STAT_AT_INDEX((i*3)+1)
|
|
ENUM_MISSION_STATS s = INT_TO_ENUM(ENUM_MISSION_STATS, GET_REPLAY_STAT_AT_INDEX((i*3)+2))
|
|
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<REPSTATS> Setting mission stat stored values: ", value, " : ", s, ".")
|
|
|
|
SWITCH s
|
|
CASE ASS4_MIRROR_PERCENTAGE
|
|
CASE ASS5_MIRROR_PERCENT
|
|
CASE ASS3_MIRROR_PERCENTAGE
|
|
CASE ASS1_MIRROR_PERCENT
|
|
CASE ASS2_MIRROR_PERCENT
|
|
OverridePerc = value
|
|
BREAK
|
|
ENDSWITCH
|
|
SET_MISSION_STAT_STORED_VALUE(value, s)
|
|
ENDREPEAT
|
|
|
|
INT mishid = GET_REPLAY_STAT_AT_INDEX(endpoint)
|
|
INT perc = GET_REPLAY_STAT_AT_INDEX(endpoint+1)
|
|
BOOL skipStatus = FALSE
|
|
IF GET_REPLAY_STAT_AT_INDEX(endpoint+2) > 0
|
|
skipStatus = TRUE
|
|
ENDIF
|
|
BOOL rcType = FALSE
|
|
IF GET_REPLAY_STAT_AT_INDEX(endpoint+3) > 0
|
|
rcType = TRUE
|
|
ENDIF
|
|
|
|
g_LeaderboardLastMissionRCType = rcType
|
|
g_LeaderboardLastMissionID = mishid
|
|
IF OverridePerc = -1
|
|
LODGE_PERCENTAGE_FOR_CURRENT_MISSION( TO_FLOAT(perc), skipStatus)
|
|
ELSE
|
|
LODGE_PERCENTAGE_FOR_CURRENT_MISSION( TO_FLOAT(OverridePerc), skipStatus)
|
|
ENDIF
|
|
|
|
ENDIF
|
|
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<REPSTATS> Making autosave request after updating mission replay stats.")
|
|
MAKE_AUTOSAVE_REQUEST()
|
|
ENDIF
|
|
#IF IS_DEBUG_BUILD
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<REPSTATS> Replay stats mission ID incorrect.")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
IF GET_REPLAY_STAT_MISSION_ID() = 13
|
|
IF GET_REPLAY_STAT_MISSION_TYPE() = 37
|
|
INT statcount = GET_REPLAY_STAT_COUNT()
|
|
|
|
IF statcount = 3 // Rampage data found.
|
|
INT iRampage = GET_REPLAY_STAT_AT_INDEX(0)
|
|
INT iMedal = GET_REPLAY_STAT_AT_INDEX(1)
|
|
INT iHighScore = GET_REPLAY_STAT_AT_INDEX(2)
|
|
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<REPSTATS> Found stored rampage data for rampage ", iRampage, ".")
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<REPSTATS> Medal rank ", iMedal,".")
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<REPSTATS> High score ", iHighScore,".")
|
|
g_savedGlobals.sRampageData.playerData[iRampage].iMedalIndex = iMedal
|
|
g_savedGlobals.sRampageData.playerData[iRampage].iHighScore = iHighScore
|
|
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<REPSTATS> Making autosave request after updating rampage replay stats.")
|
|
MAKE_AUTOSAVE_REQUEST()
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<REPSTATS> no replay stats found")
|
|
#ENDIF
|
|
ENDIF
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
PROC RESET_MISSION_STATS_ENTITY_WATCH()
|
|
g_iEntityWatchListLoggedCount = 0
|
|
|
|
|
|
INT i = 0
|
|
|
|
REPEAT MAX_ENTITY_WATCH_LIST_ENTRIES i
|
|
g_EntityWatchList[i].index = NULL
|
|
ENDREPEAT
|
|
ENDPROC
|
|
|
|
PROC INFORM_MISSION_STATS_SYSTEM_OF_CHECKPOINT()
|
|
//TODO , bank any stats that have been succeeded that are not invalidated by replay
|
|
|
|
ENDPROC
|
|
|
|
|
|
|
|
PROC INFORM_MISSION_STATS_OF_FINANCE_MODEL(MODEL_NAMES name, INT value)
|
|
IF g_iFinanceLookupLogged = MAX_FINANCE_LOOKUP_ENTRIES
|
|
SCRIPT_ASSERT("INFORM_MISSION_STATS_OF_FINANCE_MODEL maximum amount of entries logged")
|
|
EXIT
|
|
ENDIF
|
|
|
|
g_FinanaceLookup[g_iFinanceLookupLogged].target = name
|
|
g_FinanaceLookup[g_iFinanceLookupLogged].value = value
|
|
|
|
|
|
|
|
++g_iFinanceLookupLogged
|
|
|
|
ENDPROC
|
|
|
|
PROC INFORM_MISSION_STATS_OF_FINANCE_WATCH_RESET()
|
|
g_iFinanceLookupLogged = 0
|
|
ENDPROC
|
|
/*
|
|
PROC PRIME_MISSION_STATS_LEADBOARD_ENUMS(LEADERBOARDS_ENUM bestrun, LEADERBOARDS_ENUM indiv)
|
|
//g_bMissionScoreLeadboardPrimed = TRUE
|
|
|
|
g_eTargetMissionScoreLeaderboardBestRun = bestrun
|
|
g_eTargetMissionScoreLeaderboardIndivRec = indiv
|
|
|
|
ENDPROC
|
|
*/
|
|
|
|
PROC RESET_MISSION_STATS_SYSTEM()
|
|
|
|
|
|
IF g_bMissionStatSystemBlocker
|
|
CPRINTLN(DEBUG_MISSION_STATS, "RESET_MISSION_STATS_SYSTEM: blocked by g_bMissionStatSystemBlocker")
|
|
EXIT
|
|
ENDIF
|
|
CPRINTLN(DEBUG_MISSION_STATS, "RESET_MISSION_STATS_SYSTEM: CALLED by script : ", GET_THIS_SCRIPT_NAME())
|
|
//g_eTargetMissionScoreLeaderboardBestRun = LEADERBOARD_MINI_GAMES_TENNIS //Using tennis to signify
|
|
//g_eTargetMissionScoreLeaderboardIndivRec = LEADERBOARD_MINI_GAMES_TENNIS //an invalid value for now
|
|
//g_bMissionScoreLeadboardPrimed = FALSE
|
|
//SCRIPT_ASSERT("None blocked stat sys reset")
|
|
|
|
//g_LeaderboardLastMissionRCType = FALSE
|
|
//g_LeaderboardLastMissionID = -1
|
|
|
|
|
|
g_bMissionStatTimeWindowClosedForGood = FALSE
|
|
g_iMissionStatsBeingTracked = 0
|
|
//SCRIPT_ASSERT("Tracked stats reset")
|
|
g_MissionStatSingleSpeedWatchEntity = NULL
|
|
IF g_bMissionStatTimeWindowGate
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<MISSION STAT> time window closed by RESET_MISSION_STATS_SYSTEM")
|
|
ENDIF
|
|
g_bMissionStatTimeWindowGate = FALSE
|
|
SET_RESULT_SCREEN_DISPLAYING_STATE(FALSE)
|
|
RESET_MISSION_STATS_ENTITY_WATCH()
|
|
g_bTrackingInnocentsLogged = FALSE
|
|
g_bMissionStatTimeDeltaReset = TRUE
|
|
|
|
RESET_MISSION_STATS_ACCURACY_STATE()
|
|
INFORM_MISSION_STATS_OF_FINANCE_WATCH_RESET()
|
|
|
|
RESET_STAT_SYSTEM_DEADPOOL()
|
|
RESET_STAT_SYSTEM_WEPPOOL()
|
|
|
|
g_bMissionNoStatsNeedsSplashAndSting = FALSE
|
|
g_MissionStatUIIgnoreFade = FALSE
|
|
g_iMissionStatsStartTime = -1
|
|
|
|
ENDPROC
|
|
|
|
PROC RESET_MISSION_STATS_INVALIDATIONS()
|
|
INT i = 0
|
|
REPEAT g_iMissionStatsBeingTracked i
|
|
|
|
g_MissionStatTrackingArray[i].invalidationReason = MSSIR_VALID
|
|
|
|
ENDREPEAT
|
|
|
|
ENDPROC
|
|
|
|
PROC INFORM_MISSION_STATS_SYSTEM_OF_SHITSKIP()
|
|
CPRINTLN(DEBUG_MISSION_STATS, "INFORM_MISSION_STATS_SYSTEM_OF_SHITSKIP fired with ", g_iMissionStatsBeingTracked, " being tracked")
|
|
g_bMissionStatSystemResponseToShitskipNeeded = TRUE
|
|
INT i = 0
|
|
REPEAT g_iMissionStatsBeingTracked i
|
|
g_MissionStatTrackingArray[i].invalidationReason = MSSIR_SKIP
|
|
ENDREPEAT
|
|
IF g_bMissionStatTimeWindowGate
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<MISSION STAT> time window closed by INFORM_MISSION_STATS_SYSTEM_OF_SHITSKIP")
|
|
ENDIF
|
|
g_bMissionStatTimeWindowGate = FALSE
|
|
ENDPROC
|
|
|
|
PROC INFORM_MISSION_STATS_SYSTEM_OF_RESTART()
|
|
CPRINTLN(DEBUG_MISSION_STATS, "INFORM_MISSION_STATS_SYSTEM_OF_RESTART:<STAT WATCHER> primed restart")
|
|
g_bMissionStatSystemResponseToReplayNeeded = TRUE
|
|
|
|
|
|
/*
|
|
IF softReset
|
|
CPRINTLN(DEBUG_MISSION_STATS, "INFORM_MISSION_STATS_SYSTEM_OF_RESTART:<STAT WATCHER> Soft reset")
|
|
g_bMissionStatSystemResponseToReplayNeeded = TRUE
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION_STATS, "INFORM_MISSION_STATS_SYSTEM_OF_RESTART:<STAT WATCHER> Hard reset ")
|
|
//only reset the values in the stats registers to their defaults
|
|
|
|
INT i = 0
|
|
REPEAT g_iMissionStatsBeingTracked i
|
|
MISSION_STAT_RESET_STAT_REGISTER(i)//,g_bMissionStatSystemResponseToShitskipNeeded)
|
|
ENDREPEAT
|
|
|
|
|
|
ENDIF*/
|
|
IF g_bMissionStatTimeWindowGate
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<MISSION STAT> time window closed by INFORM_MISSION_STATS_SYSTEM_OF_RESTART")
|
|
ENDIF
|
|
g_bMissionStatTimeWindowGate = FALSE
|
|
ENDPROC
|
|
|
|
PROC CARRY_OUT_STATS_SYSTEM_RESPONSE_TO_RESTART()
|
|
|
|
IF NOT g_bMissionStatSystemResponseToReplayNeeded
|
|
CPRINTLN(DEBUG_MISSION_STATS, "CARRY_OUT_STATS_SYSTEM_RESPONSE_TO_RESTART: failed response bool unset")
|
|
EXIT
|
|
ENDIF
|
|
//invalidate stats that are unable to go cross replay
|
|
IF g_iMissionStatsBeingTracked = 0
|
|
CPRINTLN(DEBUG_MISSION_STATS, "CARRY_OUT_STATS_SYSTEM_RESPONSE_TO_RESTART: no stats being tracked, nothing to invalidate")
|
|
EXIT
|
|
ENDIF
|
|
|
|
INT i = 0
|
|
REPEAT g_iMissionStatsBeingTracked i
|
|
SWITCH g_MissionStatTrackingPrototypes[g_MissionStatTrackingArray[i].target].type
|
|
CASE MISSION_STAT_TYPE_TOTALTIME
|
|
CASE MISSION_STAT_TYPE_ACCURACY
|
|
g_MissionStatTrackingArray[i].invalidationReason = MSSIR_CHECKPOINT
|
|
CPRINTLN(DEBUG_MISSION_STATS, "CARRY_OUT_STATS_SYSTEM_RESPONSE_TO_RESTART: Invalidated time/accuracy tracking array element ", i, " \"", SAFE_GET_MISSION_STAT_NAME(g_MissionStatTrackingArray[i].target), "\"")
|
|
BREAK
|
|
CASE MISSION_STAT_TYPE_WINDOWED_TIMER
|
|
IF g_bMissionStatTimeWindowGate
|
|
g_MissionStatTrackingArray[i].invalidationReason = MSSIR_CHECKPOINT
|
|
CPRINTLN(DEBUG_MISSION_STATS, "CARRY_OUT_STATS_SYSTEM_RESPONSE_TO_RESTART: Invalidated windowed timer element ", i, " \"", SAFE_GET_MISSION_STAT_NAME(g_MissionStatTrackingArray[i].target), "\"")
|
|
#IF IS_DEBUG_BUILD
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION_STATS, "CARRY_OUT_STATS_SYSTEM_RESPONSE_TO_RESTART: Unopened windowed timer element ", i, " \"", SAFE_GET_MISSION_STAT_NAME(g_MissionStatTrackingArray[i].target), "\"")
|
|
#ENDIF
|
|
ENDIF
|
|
BREAK
|
|
CASE MISSION_STAT_TYPE_SINGLE_ENTITY_DAMAGE_THRESHOLD
|
|
IF g_MissionStatTrackingPrototypes[g_MissionStatTrackingArray[i].target].less_than_threshold
|
|
IF g_MissionStatTrackingArray[i].ivalue != 0
|
|
g_MissionStatTrackingArray[i].invalidationReason = MSSIR_CHECKPOINT
|
|
CPRINTLN(DEBUG_MISSION_STATS, "CARRY_OUT_STATS_SYSTEM_RESPONSE_TO_RESTART: Invalidated damage less than element ", i, " \"", SAFE_GET_MISSION_STAT_NAME(g_MissionStatTrackingArray[i].target), "\"")
|
|
#IF IS_DEBUG_BUILD
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION_STATS, "CARRY_OUT_STATS_SYSTEM_RESPONSE_TO_RESTART: damage less than element non zero ",i)
|
|
#ENDIF
|
|
ENDIF
|
|
#IF IS_DEBUG_BUILD
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION_STATS, "CARRY_OUT_STATS_SYSTEM_RESPONSE_TO_RESTART: damage less than element not set ",i)
|
|
#ENDIF
|
|
ENDIF
|
|
BREAK
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
DEFAULT
|
|
CPRINTLN(DEBUG_MISSION_STATS, "CARRY_OUT_STATS_SYSTEM_RESPONSE_TO_RESTART: type is ", GET_STRING_FROM_MISSION_STAT_TYPES(g_MissionStatTrackingPrototypes[g_MissionStatTrackingArray[i].target].type), " - ", i)
|
|
BREAK
|
|
#ENDIF
|
|
ENDSWITCH
|
|
|
|
//g_MissionStatTrackingArray[i].invalidated= TRUE
|
|
|
|
ENDREPEAT
|
|
|
|
CPRINTLN(DEBUG_MISSION_STATS, "CARRY_OUT_STATS_SYSTEM_RESPONSE_TO_RESTART: complete ",i)
|
|
g_bMissionStatSystemResponseToReplayNeeded = FALSE
|
|
|
|
ENDPROC
|
|
|
|
PROC INVALIDATE_STATS_IF_CHEATS_ACTIVE()
|
|
|
|
//EXIT // TODO, add check for any cheats active
|
|
/*
|
|
INT g_iBitsetCheatsCurrentlyDisabled // Bitset which tells the cheat controller which cheats are disabled this frame.
|
|
INT g_iBitsetCheatsCurrentlyActive // Bitset which keeps track of which cheats are currently active.
|
|
INT g_iBitsetCheatsUsedThisSession // Bitset which keeps track of which cheats were used this session.
|
|
*/
|
|
|
|
IF g_iBitsetCheatsCurrentlyActive = 0
|
|
AND !g_bHasAnyCheatBeenUsed
|
|
EXIT
|
|
ENDIF
|
|
|
|
INT i = 0
|
|
REPEAT g_iMissionStatsBeingTracked i
|
|
g_MissionStatTrackingArray[i].invalidationReason = MSSIR_CHEAT_ACTIVE
|
|
ENDREPEAT
|
|
|
|
ENDPROC
|
|
PROC TERMINATE_STAT_WATCHERCLF()
|
|
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("mission_stat_watchCLF")) > 0
|
|
|
|
IF IS_MISSION_STAT_UPLOAD_PENDING() // it might be about to upload and terminate anyway
|
|
IF g_bStatsInWatchingLoop AND (!g_bMissionOverStatTrigger) // its not been triggered and its sat in watching loop, kill it
|
|
g_bStatsInWatchingLoop = FALSE
|
|
TERMINATE_ALL_SCRIPTS_WITH_THIS_NAME("mission_stat_watchCLF")
|
|
ENDIF
|
|
ELSE
|
|
TERMINATE_ALL_SCRIPTS_WITH_THIS_NAME("mission_stat_watchCLF")
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
PROC TERMINATE_STAT_WATCHERNRM()
|
|
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("mission_stat_watchNRM")) > 0
|
|
|
|
IF IS_MISSION_STAT_UPLOAD_PENDING() // it might be about to upload and terminate anyway
|
|
IF g_bStatsInWatchingLoop AND (!g_bMissionOverStatTrigger) // its not been triggered and its sat in watching loop, kill it
|
|
g_bStatsInWatchingLoop = FALSE
|
|
TERMINATE_ALL_SCRIPTS_WITH_THIS_NAME("mission_stat_watchNRM")
|
|
ENDIF
|
|
ELSE
|
|
TERMINATE_ALL_SCRIPTS_WITH_THIS_NAME("mission_stat_watchNRM")
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
PROC TERMINATE_STAT_WATCHER()
|
|
#if USE_CLF_DLC
|
|
TERMINATE_STAT_WATCHERCLF()
|
|
exit
|
|
#endif
|
|
#if USE_NRM_DLC
|
|
TERMINATE_STAT_WATCHERNRM()
|
|
exit
|
|
#endif
|
|
IF GET_NUMBER_OF_THREADS_RUNNING_THE_SCRIPT_WITH_THIS_HASH(HASH("mission_stat_watcher")) > 0
|
|
|
|
IF IS_MISSION_STAT_UPLOAD_PENDING() // it might be about to upload and terminate anyway
|
|
IF g_bStatsInWatchingLoop AND (!g_bMissionOverStatTrigger) // its not been triggered and its sat in watching loop, kill it
|
|
g_bStatsInWatchingLoop = FALSE
|
|
TERMINATE_ALL_SCRIPTS_WITH_THIS_NAME("mission_stat_watcher")
|
|
ENDIF
|
|
ELSE
|
|
TERMINATE_ALL_SCRIPTS_WITH_THIS_NAME("mission_stat_watcher")
|
|
ENDIF
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC FLOW_PRIME_STATS_FOR_MISSION(SP_MISSIONS mi)
|
|
CPRINTLN(DEBUG_MISSION_STATS, "FLOW_PRIME_STATS_FOR_MISSION: Stats system priming for mission ", GET_SP_MISSION_DISPLAY_STRING_FROM_ID(mi), ".")
|
|
|
|
BOOL bC2SpecialCase = FALSE
|
|
#if USE_CLF_DLC
|
|
SP_MISSIONS m = mi
|
|
#endif
|
|
|
|
#if USE_NRM_DLC
|
|
SP_MISSIONS m = mi
|
|
#endif
|
|
|
|
#if not USE_SP_DLC
|
|
IF mi = SP_MISSION_FINALE_C1
|
|
g_bSuppressNextStatTrigger = TRUE
|
|
ENDIF
|
|
|
|
SP_MISSIONS m = mi
|
|
IF m = SP_MISSION_FINALE_CREDITS
|
|
CPRINTLN(DEBUG_MISSION_STATS, "FLOW_PRIME_STATS_FOR_MISSION: Priming cancelled early for credits script.")
|
|
EXIT
|
|
ENDIF
|
|
IF m = SP_MISSION_FINALE_C2
|
|
CPRINTLN(DEBUG_MISSION_STATS, "Starting finale SP_MISSION_FINALE_C2, doing special case.")
|
|
m = SP_MISSION_FINALE_C1 //Finale C2 uses the stats of C1
|
|
IF g_bMissionStatSystemPrimed
|
|
CPRINTLN(DEBUG_MISSION_STATS, "FLOW_PRIME_STATS_FOR_MISSION: FINALE C2 triggered while system primed, just as planned.")
|
|
EXIT
|
|
ENDIF
|
|
bC2SpecialCase = TRUE
|
|
ENDIF
|
|
IF (g_bMagDemoActive)
|
|
CPRINTLN(DEBUG_MISSION_STATS, "FLOW_PRIME_STATS_FOR_MISSION: Cannot prime stats system in mag demo mode!")
|
|
RESET_MISSION_STATS_SYSTEM()
|
|
EXIT
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
|
|
g_sMissionStatsName = GET_SP_MISSION_NAME_LABEL(m)
|
|
g_bMissionStatSystemHeistMode = FALSE
|
|
g_MissionStatSystemSuppressVisual = FALSE
|
|
IF IS_BIT_SET(g_sMissionStaticData[m].settingsBitset, MF_INDEX_NO_PASS)
|
|
CPRINTLN(DEBUG_MISSION_STATS, "FLOW_PRIME_STATS_FOR_MISSION: This mission has no visible screen.")
|
|
g_MissionStatSystemSuppressVisual = TRUE
|
|
ENDIF
|
|
|
|
|
|
SWITCH m
|
|
|
|
#IF USE_CLF_DLC
|
|
CASE SP_MISSION_CLF_TRAIN
|
|
CPRINTLN(DEBUG_MISSION_STATS, "FLOW_PRIME_STATS_FOR_MISSION: Mission is on the ignore list, bailing/terminating.")
|
|
g_MissionStatSystemSuppressVisual = TRUE
|
|
g_bMissionStatSystemResetFlag = TRUE
|
|
RESET_MISSION_STATS_SYSTEM()
|
|
TERMINATE_STAT_WATCHER()
|
|
EXIT
|
|
BREAK
|
|
|
|
CASE SP_MISSION_CLF_FIN
|
|
CASE SP_MISSION_CLF_SPA_1
|
|
CASE SP_MISSION_CLF_SPA_2
|
|
CASE SP_MISSION_CLF_SPA_FIN
|
|
CASE SP_MISSION_CLF_IAA_TRA
|
|
CASE SP_MISSION_CLF_IAA_LIE
|
|
CASE SP_MISSION_CLF_IAA_JET
|
|
CASE SP_MISSION_CLF_IAA_HEL
|
|
CASE SP_MISSION_CLF_IAA_DRO
|
|
CASE SP_MISSION_CLF_IAA_RTS
|
|
CASE SP_MISSION_CLF_KOR_PRO
|
|
CASE SP_MISSION_CLF_KOR_RES
|
|
CASE SP_MISSION_CLF_KOR_SUB
|
|
CASE SP_MISSION_CLF_KOR_SAT
|
|
CASE SP_MISSION_CLF_KOR_5
|
|
CASE SP_MISSION_CLF_RUS_PLA
|
|
CASE SP_MISSION_CLF_RUS_CAR
|
|
CASE SP_MISSION_CLF_RUS_VAS
|
|
CASE SP_MISSION_CLF_RUS_SAT
|
|
CASE SP_MISSION_CLF_RUS_JET
|
|
CASE SP_MISSION_CLF_RUS_CLK
|
|
CASE SP_MISSION_CLF_ARA_1
|
|
CASE SP_MISSION_CLF_ARA_DEF
|
|
CASE SP_MISSION_CLF_ARA_FAKE
|
|
CASE SP_MISSION_CLF_ARA_TNK
|
|
CASE SP_MISSION_CLF_CAS_SET
|
|
CASE SP_MISSION_CLF_CAS_PR1
|
|
CASE SP_MISSION_CLF_CAS_PR2
|
|
CASE SP_MISSION_CLF_CAS_PR3
|
|
CASE SP_MISSION_CLF_CAS_HEI
|
|
CASE SP_MISSION_CLF_MIL_DAM
|
|
CASE SP_MISSION_CLF_MIL_PLA
|
|
CASE SP_MISSION_CLF_MIL_RKT
|
|
CASE SP_MISSION_CLF_JET_1
|
|
CASE SP_MISSION_CLF_JET_2
|
|
CASE SP_MISSION_CLF_JET_3
|
|
CASE SP_MISSION_CLF_JET_REP
|
|
CASE SP_MISSION_CLF_ASS_POL
|
|
CASE SP_MISSION_CLF_ASS_RET
|
|
CASE SP_MISSION_CLF_ASS_CAB
|
|
CASE SP_MISSION_CLF_ASS_GEN
|
|
CASE SP_MISSION_CLF_ASS_SUB
|
|
CASE SP_MISSION_CLF_ASS_HEL
|
|
CASE SP_MISSION_CLF_ASS_VIN
|
|
CASE SP_MISSION_CLF_ASS_HNT
|
|
CASE SP_MISSION_CLF_ASS_SKY
|
|
CASE SP_MISSION_CLF_RC_ALEX_GRND
|
|
CASE SP_MISSION_CLF_RC_ALEX_AIR
|
|
CASE SP_MISSION_CLF_RC_ALEX_UNDW
|
|
CASE SP_MISSION_CLF_RC_ALEX_RWRD
|
|
CASE SP_MISSION_CLF_RC_MEL_MONT
|
|
CASE SP_MISSION_CLF_RC_MEL_AIRP
|
|
CASE SP_MISSION_CLF_RC_MEL_WING
|
|
CASE SP_MISSION_CLF_RC_MEL_DIVE
|
|
CASE SP_MISSION_CLF_RC_AGN_BODY
|
|
CASE SP_MISSION_CLF_RC_AGN_RCPT
|
|
CASE SP_MISSION_CLF_RC_AGN_ESCP
|
|
CASE SP_MISSION_CLF_RC_CLA_HACK
|
|
CASE SP_MISSION_CLF_RC_CLA_DRUG
|
|
CASE SP_MISSION_CLF_RC_CLA_FIN
|
|
|
|
//CPRINTLN(DEBUG_MISSION_STATS, "FLOW_PRIME_STATS_FOR_MISSION: Mission is on the ignore list, bailing/terminating.")
|
|
// g_MissionStatSystemSuppressVisual = TRUE
|
|
// g_bMissionStatSystemResetFlag = TRUE
|
|
// RESET_MISSION_STATS_SYSTEM()
|
|
// TERMINATE_STAT_WATCHER()
|
|
// EXIT
|
|
CPRINTLN(DEBUG_MISSION_STATS, "FLOW_PRIME_STATS_FOR_MISSION: Mission with no stats but end screen visual being primed.")
|
|
g_bMissionNoStatsNeedsSplashAndSting = TRUE
|
|
g_bMissionStatSystemPrimed = TRUE
|
|
g_bMissionStatSystemMissionStarted = TRUE
|
|
BREAK
|
|
|
|
// CPRINTLN(DEBUG_MISSION_STATS, "FLOW_PRIME_STATS_FOR_MISSION: Mission is a DLC assassination.")
|
|
// BREAK
|
|
#ENDIF
|
|
|
|
#IF USE_NRM_DLC
|
|
CASE SP_MISSION_NRM_SUR_START
|
|
CASE SP_MISSION_NRM_SUR_AMANDA
|
|
CASE SP_MISSION_NRM_SUR_TRACEY
|
|
CASE SP_MISSION_NRM_SUR_MICHAEL
|
|
CPRINTLN(DEBUG_MISSION_STATS, "FLOW_PRIME_STATS_FOR_MISSION: Mission is on the ignore list, bailing/terminating.")
|
|
g_MissionStatSystemSuppressVisual = TRUE
|
|
g_bMissionStatSystemResetFlag = TRUE
|
|
RESET_MISSION_STATS_SYSTEM()
|
|
TERMINATE_STAT_WATCHER()
|
|
EXIT
|
|
CASE SP_MISSION_NRM_SUR_HOME
|
|
CASE SP_MISSION_NRM_SUR_JIMMY
|
|
CASE SP_MISSION_NRM_SUR_PARTY
|
|
CASE SP_MISSION_NRM_SUR_CURE
|
|
CASE SP_MISSION_NRM_RESCUE_ENG
|
|
CASE SP_MISSION_NRM_RESCUE_MED
|
|
CASE SP_MISSION_NRM_RESCUE_GUN
|
|
CASE SP_MISSION_NRM_SUP_FUEL
|
|
CASE SP_MISSION_NRM_SUP_AMMO
|
|
CASE SP_MISSION_NRM_SUP_MEDS
|
|
CASE SP_MISSION_NRM_SUP_FOOD
|
|
CASE SP_MISSION_NRM_RADIO_A
|
|
CASE SP_MISSION_NRM_RADIO_B
|
|
CASE SP_MISSION_NRM_RADIO_C
|
|
CPRINTLN(DEBUG_MISSION_STATS, "FLOW_PRIME_STATS_FOR_MISSION: Mission with no stats but end screen visual being primed.")
|
|
g_bMissionNoStatsNeedsSplashAndSting = TRUE
|
|
g_bMissionStatSystemPrimed = TRUE
|
|
g_bMissionStatSystemMissionStarted = TRUE
|
|
BREAK
|
|
#ENDIF
|
|
|
|
#IF NOT USE_SP_DLC
|
|
CASE SP_MISSION_PROLOGUE
|
|
CPRINTLN(DEBUG_MISSION_STATS, "FLOW_PRIME_STATS_FOR_MISSION: Mission is the Proglogue which is followed by the intro title. Priming with supressed end screen.")
|
|
g_bMissionStatSystemPrimed = TRUE
|
|
g_MissionStatSystemSuppressVisual = TRUE
|
|
BREAK
|
|
|
|
|
|
CASE SP_MISSION_FINALE_A
|
|
CASE SP_MISSION_FINALE_B
|
|
CASE SP_MISSION_FINALE_C1
|
|
CASE SP_MISSION_FINALE_C2
|
|
CPRINTLN(DEBUG_MISSION_STATS, "FLOW_PRIME_STATS_FOR_MISSION: Mission is a finale which is followed by credits. Priming with supressed end screen.")
|
|
g_bMissionStatSystemPrimed = TRUE
|
|
g_MissionStatSystemSuppressVisual = TRUE
|
|
BREAK
|
|
|
|
|
|
CASE SP_MISSION_ASSASSIN_1
|
|
CASE SP_MISSION_ASSASSIN_2
|
|
CASE SP_MISSION_ASSASSIN_3
|
|
CASE SP_MISSION_ASSASSIN_4
|
|
CASE SP_MISSION_ASSASSIN_5
|
|
CPRINTLN(DEBUG_MISSION_STATS, "FLOW_PRIME_STATS_FOR_MISSION: Mission is an assassination. Supressing visual as the scripts display their own pass screen.")
|
|
g_bMissionStatSystemPrimed = TRUE
|
|
g_MissionStatSystemSuppressVisual = TRUE
|
|
BREAK
|
|
|
|
|
|
CASE SP_MISSION_ME_AMANDA
|
|
CASE SP_MISSION_ME_JIMMY
|
|
CASE SP_MISSION_ME_TRACEY
|
|
CPRINTLN(DEBUG_MISSION_STATS, "FLOW_PRIME_STATS_FOR_MISSION: Mission with no stats but end screen visual being primed.")
|
|
g_bMissionNoStatsNeedsSplashAndSting = TRUE
|
|
g_bMissionStatSystemPrimed = TRUE
|
|
g_bMissionStatSystemMissionStarted = TRUE
|
|
BREAK
|
|
|
|
|
|
CASE SP_MISSION_FBI_4_INTRO
|
|
CASE SP_MISSION_FINALE_INTRO
|
|
CASE SP_MISSION_FINALE_CREDITS
|
|
CASE SP_MISSION_SHRINK_1
|
|
CASE SP_MISSION_SHRINK_2
|
|
CASE SP_MISSION_SHRINK_3
|
|
CASE SP_MISSION_SHRINK_4
|
|
CASE SP_MISSION_SHRINK_5
|
|
CASE SP_HEIST_FINALE_2_INTRO
|
|
CPRINTLN(DEBUG_MISSION_STATS, "FLOW_PRIME_STATS_FOR_MISSION: Mission is on the ignore list, bailing/terminating.")
|
|
g_MissionStatSystemSuppressVisual = TRUE
|
|
g_bMissionStatSystemResetFlag = TRUE
|
|
RESET_MISSION_STATS_SYSTEM()
|
|
TERMINATE_STAT_WATCHER()
|
|
EXIT
|
|
BREAK
|
|
|
|
CASE SP_HEIST_JEWELRY_2
|
|
CASE SP_HEIST_DOCKS_2A
|
|
CASE SP_HEIST_DOCKS_2B
|
|
CASE SP_HEIST_RURAL_2
|
|
CASE SP_HEIST_AGENCY_3A
|
|
CASE SP_HEIST_AGENCY_3B
|
|
CASE SP_HEIST_FINALE_2A
|
|
CASE SP_HEIST_FINALE_2B
|
|
CPRINTLN(DEBUG_MISSION_STATS, "FLOW_PRIME_STATS_FOR_MISSION: Mission is a heist, setting flag and index.")
|
|
g_iMissionStatSystemHeistIndex = GET_HEIST_ID_FROM_FINALE_MISSION_ID(m)
|
|
g_bMissionStatSystemHeistMode = TRUE
|
|
sEndScreen.bSformeUploadDone = FALSE
|
|
BREAK
|
|
#ENDIF
|
|
|
|
ENDSWITCH
|
|
|
|
|
|
BOOL lastType = g_LeaderboardLastMissionRCType
|
|
g_LeaderboardLastMissionRCType = FALSE
|
|
|
|
|
|
INT last = g_LeaderboardLastMissionID
|
|
g_LeaderboardLastMissionID = ENUM_TO_INT(m)
|
|
|
|
|
|
IF NOT g_bMissionNoStatsNeedsSplashAndSting
|
|
IF (g_LeaderboardLastMissionID != last)
|
|
OR (g_iMissionStatsBeingTracked = 0)
|
|
OR (lastType != g_LeaderboardLastMissionRCType)
|
|
|
|
g_bHasAnyCheatBeenUsed = FALSE
|
|
RESET_MISSION_STATS_SYSTEM()
|
|
|
|
// #IF USE_CLF_DLC
|
|
// INTERNAL_FLOW_PRIME_STATS_FOR_DLC_MISSION(m)
|
|
// #ENDIF
|
|
// #IF USE_NRM_DLC
|
|
// INTERNAL_FLOW_PRIME_STATS_FOR_DLC_MISSION(m)
|
|
// #ENDIF
|
|
#IF NOT USE_SP_DLC
|
|
INTERNAL_FLOW_PRIME_STATS_FOR_MISSION(m)
|
|
#ENDIF
|
|
CPRINTLN(DEBUG_MISSION_STATS, "FLOW_PRIME_STATS_FOR_MISSION: Stat launch priming registers l = ",last,"c = ",g_LeaderboardLastMissionID, " : rc typelast ", lastType, " rc type current ", g_LeaderboardLastMissionRCType , " : tracked ", g_iMissionStatsBeingTracked)
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION_STATS, "FLOW_PRIME_STATS_FOR_MISSION: Stat launch with no register priming to maintain invalidation status")
|
|
g_bMissionStatSystemPrimed = TRUE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF bC2SpecialCase
|
|
//invalidate mission time due to checkpoint
|
|
g_bMissionStatSystemResponseToReplayNeeded = TRUE //counts as a replay
|
|
ENDIF
|
|
|
|
g_iMissionStatsStartTime = GET_GAME_TIMER()
|
|
|
|
g_bMissionStatSystemResetFlag = FALSE
|
|
|
|
CARRY_OUT_STATS_SYSTEM_RESPONSE_TO_RESTART()
|
|
g_bMissionStatSystemBlocker = FALSE
|
|
ENDPROC
|
|
|
|
|
|
#if not USE_SP_DLC
|
|
PROC FLOW_PRIME_STATS_FOR_RC_MISSION(g_eRC_MissionIDs m)
|
|
|
|
IF g_bMissionStatSystemResponseToShitskipNeeded = TRUE
|
|
CPRINTLN(DEBUG_MISSION_STATS, "FLOW_PRIME_STATS_FOR_RC_MISSION: Post shitskip!")
|
|
INFORM_MISSION_STATS_SYSTEM_OF_SHITSKIP()
|
|
g_bMissionStatSystemResponseToShitskipNeeded = FALSE
|
|
IF g_bMissionStatSystemPrimed
|
|
CPRINTLN(DEBUG_MISSION_STATS, "FLOW_PRIME_STATS_FOR_RC_MISSION: No re prime after shitskip!")
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
|
|
|
|
IF (g_bMagDemoActive)
|
|
CPRINTLN(DEBUG_MISSION_STATS, "FLOW_PRIME_STATS_FOR_RC_MISSION: Cannot prime stats system in mag demo mode!")
|
|
g_bMissionStatSystemResetFlag = TRUe
|
|
RESET_MISSION_STATS_SYSTEM()
|
|
EXIT
|
|
ENDIF
|
|
|
|
CPRINTLN(DEBUG_MISSION_STATS, "FLOW_PRIME_STATS_FOR_RC_MISSION: Stats system priming for RC mission")
|
|
g_sMissionStatsName = GET_RC_MISSION_NAME_LABEL(m)
|
|
|
|
g_bMissionStatSystemHeistMode = FALSE
|
|
g_MissionStatSystemSuppressVisual = FALSE
|
|
|
|
|
|
SWITCH(m)
|
|
|
|
// Any that need to trigger the splash and sting
|
|
CASE RC_ABIGAIL_2
|
|
CASE RC_EPSILON_1
|
|
g_bMissionNoStatsNeedsSplashAndSting = TRUE
|
|
g_bMissionStatSystemPrimed = TRUE
|
|
g_bMissionStatSystemMissionStarted = TRUE
|
|
BREAK
|
|
|
|
CASE RC_ABIGAIL_1
|
|
CASE RC_BARRY_3
|
|
CASE RC_BARRY_4
|
|
CASE RC_EPSILON_2
|
|
CASE RC_EPSILON_3
|
|
CASE RC_EPSILON_5
|
|
CASE RC_EPSILON_7
|
|
CASE RC_JOSH_1
|
|
CASE RC_MAUDE_1
|
|
CASE RC_MRS_PHILIPS_1
|
|
CASE RC_MRS_PHILIPS_2
|
|
CASE RC_NIGEL_1
|
|
CASE RC_PAPARAZZO_3
|
|
CASE RC_OMEGA_1
|
|
CASE RC_OMEGA_2
|
|
CASE RC_RAMPAGE_1
|
|
CASE RC_RAMPAGE_2
|
|
CASE RC_RAMPAGE_3
|
|
CASE RC_RAMPAGE_4
|
|
CASE RC_RAMPAGE_5
|
|
g_bMissionStatSystemResetFlag = TRUE
|
|
g_MissionStatSystemSuppressVisual = TRUE
|
|
CPRINTLN(DEBUG_MISSION_STATS, "FLOW_PRIME_STATS_FOR_RC_MISSION: mission is on the ignore list, bailing/terminating.")
|
|
RESET_MISSION_STATS_SYSTEM()
|
|
TERMINATE_STAT_WATCHER()
|
|
EXIT
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
|
|
BOOL lastType = g_LeaderboardLastMissionRCType
|
|
g_LeaderboardLastMissionRCType = TRUE
|
|
INT last = g_LeaderboardLastMissionID
|
|
g_LeaderboardLastMissionID = ENUM_TO_INT(m)
|
|
|
|
CPRINTLN(DEBUG_MISSION_STATS, "FLOW_PRIME_STATS_FOR_RC_MISSION: Launching for RC id ", m )
|
|
IF NOT g_bMissionNoStatsNeedsSplashAndSting
|
|
|
|
|
|
IF (g_LeaderboardLastMissionID != last)
|
|
OR (g_iMissionStatsBeingTracked = 0)
|
|
OR (lastType != g_LeaderboardLastMissionRCType)
|
|
|
|
g_bHasAnyCheatBeenUsed = FALSE
|
|
RESET_MISSION_STATS_SYSTEM()
|
|
CPRINTLN(DEBUG_MISSION_STATS, "FLOW_PRIME_STATS_FOR_RC_MISSION:Stat launch priming registers l = ",last," c = ",g_LeaderboardLastMissionID, " : rc typelast ", lastType, " rc type current ", g_LeaderboardLastMissionRCType , " : tracked ", g_iMissionStatsBeingTracked)
|
|
INTERNAL_FLOW_PRIME_STATS_FOR_RC_MISSION(m)
|
|
|
|
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION_STATS, "FLOW_PRIME_STATS_FOR_RC_MISSION:Stat launch with no register priming to maintain invalidation status")
|
|
g_bMissionStatSystemPrimed = TRUE
|
|
ENDIF
|
|
|
|
|
|
ENDIF
|
|
|
|
g_iMissionStatsStartTime = GET_GAME_TIMER()
|
|
|
|
CARRY_OUT_STATS_SYSTEM_RESPONSE_TO_RESTART()
|
|
|
|
|
|
|
|
g_bMissionStatSystemBlocker = FALSE
|
|
ENDPROC
|
|
#endif
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//Stat system information
|
|
|
|
//Ingame cutscen e watch
|
|
PROC INFORM_MISSION_STATS_SYSTEM_OF_INGAME_CUTSCENE_START()
|
|
//If this changes, make sure to alter the call in cutscene_public.sch.
|
|
g_bMissionStatSystemSequenceStatus = TRUE
|
|
ENDPROC
|
|
PROC INFORM_MISSION_STATS_SYSTEM_OF_INGAME_CUTSCENE_END()
|
|
//If this changes, make sure to alter the call in cutscene_public.sch.
|
|
g_bMissionStatSystemSequenceStatus = FALSE
|
|
ENDPROC
|
|
|
|
//Duplicate version due to email confusion doh
|
|
PROC INFORM_MISSION_STATS_SYSTEM_OF_INENGINE_CUTSCENE_START()
|
|
g_bMissionStatSystemSequenceStatus = TRUE
|
|
ENDPROC
|
|
|
|
PROC INFORM_MISSION_STATS_SYSTEM_OF_INENGINE_CUTSCENE_END()
|
|
g_bMissionStatSystemSequenceStatus = FALSE
|
|
ENDPROC
|
|
|
|
//Action cam watch
|
|
PROC INFORM_MISSION_STATS_SYSTEM_OF_ACTION_CAM_START()
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT IS_REPEAT_PLAY_ACTIVE()
|
|
IF NOT g_savedGlobals.sFlow.isGameflowActive
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
|
|
IF !g_bMissionStatSystemPrimed AND (!g_bMagDemoActive)
|
|
CPRINTLN(DEBUG_MISSION_STATS, "Mission stats system inform call fired while stats system not primed. Pass this bug to Default Levels.")
|
|
|
|
ENDIF
|
|
#ENDIF
|
|
g_bMissionStatSystemActionCamWatchStatus = TRUE
|
|
ENDPROC
|
|
|
|
PROC INFORM_MISSION_STATS_SYSTEM_OF_ACTION_CAM_END()
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT IS_REPEAT_PLAY_ACTIVE()
|
|
IF NOT g_savedGlobals.sFlow.isGameflowActive
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
IF !g_bMissionStatSystemPrimed AND (!g_bMagDemoActive)
|
|
CPRINTLN(DEBUG_MISSION_STATS, "Mission stats system inform call fired while stats system not primed. Pass this bug to Default Levels.")
|
|
ENDIF
|
|
#ENDIF
|
|
g_bMissionStatSystemActionCamWatchStatus = FALSE
|
|
ENDPROC
|
|
|
|
PROC INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_OPEN(ENUM_MISSION_STATS windowstat = UNSET_MISSION_STAT_ENUM,BOOL bZero = FALSE)
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT IS_REPEAT_PLAY_ACTIVE()
|
|
IF NOT g_savedGlobals.sFlow.isGameflowActive
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
IF !g_bMissionStatSystemPrimed AND (!g_bMagDemoActive)
|
|
CPRINTLN(DEBUG_MISSION_STATS, "Mission stats system inform call fired while stats system not primed. Pass this bug to Default Levels.")
|
|
ENDIF
|
|
#ENDIF
|
|
g_eCurrentTimeWindowTarget = windowstat
|
|
IF NOT g_bMissionStatTimeWindowGate
|
|
g_bMissionStatTimeWindowGate = TRUE
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<MISSION STAT> Time window opened")
|
|
ENDIF
|
|
|
|
IF bZero
|
|
INT i
|
|
REPEAT g_iMissionStatsBeingTracked i
|
|
IF g_MissionStatTrackingArray[i].target = windowstat
|
|
g_MissionStatTrackingArray[i].ivalue = 0
|
|
ENDIF
|
|
ENDREPEAT
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
PROC INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_CLOSED(BOOL bFinalClose = FALSE,
|
|
ENUM_MISSION_STATS SpecificClose = UNSET_MISSION_STAT_ENUM)
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT IS_REPEAT_PLAY_ACTIVE()
|
|
IF NOT g_savedGlobals.sFlow.isGameflowActive
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
IF !g_bMissionStatSystemPrimed AND (!g_bMagDemoActive)
|
|
CPRINTLN(DEBUG_MISSION_STATS, "Mission stats system inform call fired while stats system not primed. Pass this bug to Default Levels.")
|
|
ENDIF
|
|
#ENDIF
|
|
IF g_bMissionStatTimeWindowGate
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<MISSION STAT> time window \"", SAFE_GET_MISSION_STAT_NAME(SpecificClose), "\" closed by INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_CLOSED, bFinalClose: ", bFinalClose)
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<MISSION STAT> time window \"", SAFE_GET_MISSION_STAT_NAME(SpecificClose), "\" tried to be closed INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_CLOSED, but it isn't open???, bFinalClose: ", bFinalClose)
|
|
ENDIF
|
|
|
|
g_bMissionStatTimeWindowGate = FALSE
|
|
IF bFinalClose
|
|
g_bMissionStatTimeWindowClosedForGood = TRUE
|
|
ENDIF
|
|
|
|
INT i = 0
|
|
IF SpecificClose = UNSET_MISSION_STAT_ENUM
|
|
//close all of them
|
|
REPEAT g_iMissionStatsBeingTracked i
|
|
IF g_MissionStatTrackingPrototypes[g_MissionStatTrackingArray[i].target].type = MISSION_STAT_TYPE_WINDOWED_TIMER
|
|
g_MissionStatTrackingArray[i].windowDeltaTracking = FALSE
|
|
|
|
#IF USE_TU_CHANGES
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<MISSION STAT> stop tracking unset stat [", i, "] ", g_MissionStatTrackingArray[i].ivalue)
|
|
EXIT
|
|
#ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
ELSE
|
|
//search the registers and close the specific one
|
|
//close all of them
|
|
REPEAT g_iMissionStatsBeingTracked i
|
|
#IF USE_TU_CHANGES
|
|
IF ENUM_TO_INT(g_MissionStatTrackingArray[i].target) > 0
|
|
#ENDIF
|
|
|
|
IF g_MissionStatTrackingArray[i].target = SpecificClose
|
|
g_MissionStatTrackingArray[i].windowDeltaTracking = FALSE
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<MISSION STAT> stop tracking stat ", SAFE_GET_MISSION_STAT_NAME(SpecificClose), " [", i, "] ", g_MissionStatTrackingArray[i].ivalue)
|
|
EXIT
|
|
ENDIF
|
|
#IF USE_TU_CHANGES
|
|
ENDIF
|
|
#ENDIF
|
|
ENDREPEAT
|
|
ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF SpecificClose = UNSET_MISSION_STAT_ENUM
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<MISSION STAT> ", SAFE_GET_MISSION_STAT_NAME(SpecificClose), " = UNSET_MISSION_STAT_ENUM, repeat for ", g_iMissionStatsBeingTracked, ".")
|
|
REPEAT g_iMissionStatsBeingTracked i
|
|
IF g_MissionStatTrackingPrototypes[g_MissionStatTrackingArray[i].target].type = MISSION_STAT_TYPE_WINDOWED_TIMER
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<MISSION STAT> g_MissionStatTrackingPrototypes[", SAFE_GET_MISSION_STAT_NAME(g_MissionStatTrackingArray[i].target), ":", i, "].type = ", GET_STRING_FROM_MISSION_STAT_TYPES(g_MissionStatTrackingPrototypes[g_MissionStatTrackingArray[i].target].type), " - same!!!")
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<MISSION STAT> g_MissionStatTrackingPrototypes[", SAFE_GET_MISSION_STAT_NAME(g_MissionStatTrackingArray[i].target), ":", i, "].type = ", GET_STRING_FROM_MISSION_STAT_TYPES(g_MissionStatTrackingPrototypes[g_MissionStatTrackingArray[i].target].type), " - different???")
|
|
ENDIF
|
|
ENDREPEAT
|
|
CWARNINGLN(DEBUG_MISSION_STATS, "INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_CLOSED() / was unsuccessfully logged.")
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<MISSION STAT> ", SAFE_GET_MISSION_STAT_NAME(SpecificClose), " != UNSET_MISSION_STAT_ENUM, repeat for ", g_iMissionStatsBeingTracked, ".")
|
|
REPEAT g_iMissionStatsBeingTracked i
|
|
IF ENUM_TO_INT(g_MissionStatTrackingArray[i].target) > 0
|
|
IF g_MissionStatTrackingArray[i].target = SpecificClose
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<MISSION STAT> g_MissionStatTrackingArray[", i, "].target = ", SAFE_GET_MISSION_STAT_NAME(SpecificClose), " - same!!!")
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<MISSION STAT> g_MissionStatTrackingArray[", i, "].target = ", SAFE_GET_MISSION_STAT_NAME(SpecificClose), " - different???")
|
|
ENDIF
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<MISSION STAT> g_MissionStatTrackingArray[", i, "].target = ", SAFE_GET_MISSION_STAT_NAME(SpecificClose), " - null$$$")
|
|
ENDIF
|
|
ENDREPEAT
|
|
CWARNINGLN(DEBUG_MISSION_STATS, "INFORM_MISSION_STATS_SYSTEM_OF_TIME_WINDOW_CLOSED(", SAFE_GET_MISSION_STAT_NAME(SpecificClose), ") / was unsuccessfully logged.")
|
|
ENDIF
|
|
#ENDIF
|
|
ENDPROC
|
|
|
|
PROC INFORM_MISSION_STATS_OF_SPEED_WATCH_ENTITY(ENTITY_INDEX in, ENUM_MISSION_STATS specific = UNSET_MISSION_STAT_ENUM)
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT IS_REPEAT_PLAY_ACTIVE()
|
|
IF NOT g_savedGlobals.sFlow.isGameflowActive
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
IF !g_bMissionStatSystemPrimed AND (!g_bMagDemoActive) AND (in != NULL)
|
|
CPRINTLN(DEBUG_MISSION_STATS, "Mission stats system inform call fired while stats system not primed. Pass this bug to Default Levels.")
|
|
EXIT
|
|
ENDIF
|
|
#ENDIF
|
|
g_MissionStatSingleSpeedWatchEntity = in
|
|
g_MissionStatSpeedWatchEntitySpecific = specific
|
|
ENDPROC
|
|
|
|
|
|
PROC INFORM_MISSION_STATS_OF_DAMAGE_WATCH_ENTITY(ENTITY_INDEX in, ENUM_MISSION_STATS specificTarget = UNSET_MISSION_STAT_ENUM)
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT IS_REPEAT_PLAY_ACTIVE()
|
|
IF NOT g_bLoadedClifford
|
|
AND NOT g_bLoadedNorman
|
|
IF NOT g_savedGlobals.sFlow.isGameflowActive
|
|
CPRINTLN(DEBUG_MISSION_STATS, "Mission stats system inform call fired while gameflow not active.")
|
|
EXIT
|
|
ENDIF
|
|
ELIF g_bLoadedClifford
|
|
IF NOT g_savedGlobalsClifford.sFlow.isGameflowActive
|
|
CPRINTLN(DEBUG_MISSION_STATS, "Mission stats system inform call fired while CLF Trevor gameflow not active.")
|
|
EXIT
|
|
ENDIF
|
|
ELIF g_bLoadedNorman
|
|
IF NOT g_savedGlobalsnorman.sFlow.isGameflowActive
|
|
CPRINTLN(DEBUG_MISSION_STATS, "Mission stats system inform call fired while norman gameflow not active.")
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
IF !g_bMissionStatSystemPrimed AND (!g_bMagDemoActive) AND (in != NULL)
|
|
CPRINTLN(DEBUG_MISSION_STATS, "Mission stats system inform call fired while stats system not primed.")
|
|
EXIT
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
//g_iMissionStatsBeingTracked
|
|
//g_MissionStatTrackingArray[MAX_TRACKED_MISSION_STATS]
|
|
g_MissionStatSingleDamageWatchEntity = in
|
|
INT i
|
|
REPEAT g_iMissionStatsBeingTracked i
|
|
IF specificTarget = UNSET_MISSION_STAT_ENUM
|
|
OR g_MissionStatTrackingArray[i].target = specificTarget
|
|
IF g_MissionStatTrackingArray[i].TrackingEntity != in
|
|
g_MissionStatTrackingArray[i].TrackingEntity = in
|
|
g_MissionStatTrackingArray[i].bTrackingEntityChanged = TRUE
|
|
g_MissionStatTrackingArray[i].iTrackingDelta = 0
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF in != NULL
|
|
CPRINTLN(DEBUG_MISSION_STATS, "Mission stats system inform for damaged entity ", GET_MODEL_NAME_FOR_DEBUG(GET_ENTITY_MODEL(in)), " in slot ", i)
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION_STATS, "Mission stats system inform for damaged entity NULL in slot ", i)
|
|
ENDIF
|
|
#ENDIF // IS_DEBUG_BUILD
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
ENDPROC
|
|
|
|
|
|
PROC INFORM_MISSION_STATS_OF_HEADSHOT_WATCH_ENTITY(ENTITY_INDEX in, BOOL ignoreDuplicates = FALSE)
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT IS_REPEAT_PLAY_ACTIVE()
|
|
IF NOT g_savedGlobals.sFlow.isGameflowActive
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
IF !g_bMissionStatSystemPrimed AND (!g_bMagDemoActive)
|
|
CPRINTLN(DEBUG_MISSION_STATS, "Mission stats system inform call fired while stats system not primed. Pass this bug to Default Levels.")
|
|
EXIT
|
|
ENDIF
|
|
#ENDIF
|
|
INT di = 0
|
|
#IF IS_DEBUG_BUILD
|
|
IF in = NULL
|
|
SCRIPT_ASSERT("INFORM_MISSION_STATS_OF_HEADSHOT_WATCH_ENTITY: Entity passed in is null. ")
|
|
EXIT
|
|
ENDIF
|
|
IF NOT DOES_ENTITY_EXIST(in)
|
|
SCRIPT_ASSERT("INFORM_MISSION_STATS_OF_HEADSHOT_WATCH_ENTITY: Entity passed in does not exist. ")
|
|
EXIT
|
|
ENDIF
|
|
|
|
REPEAT MAX_ENTITY_WATCH_LIST_ENTRIES di
|
|
IF g_EntityWatchList[di].index != NULL
|
|
IF g_EntityWatchList[di].index = in
|
|
IF ignoreDuplicates
|
|
CPRINTLN(DEBUG_MISSION_STATS, "Mission passed a duplicate into INFORM_MISSION_STATS_OF_HEADSHOT_WATCH_ENTITY")
|
|
ELSE
|
|
SCRIPT_ASSERT("INFORM_MISSION_STATS_OF_HEADSHOT_WATCH_ENTITY: Entity is already in the list. ")
|
|
ENDIF
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
#ENDIF
|
|
|
|
IF ignoreDuplicates//do check for duplicates in release mode if this is the case
|
|
REPEAT MAX_ENTITY_WATCH_LIST_ENTRIES di
|
|
IF g_EntityWatchList[di].index != NULL
|
|
IF g_EntityWatchList[di].index = in
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
ENDIF
|
|
|
|
|
|
|
|
IF MAX_ENTITY_WATCH_LIST_ENTRIES = g_iEntityWatchListLoggedCount
|
|
SCRIPT_ASSERT("INFORM_MISSION_STATS_OF_HEADSHOT_WATCH_ENTITY: No space left to log entity")
|
|
EXIT
|
|
ENDIF
|
|
|
|
INT foundindex = -1
|
|
INT i = 0
|
|
|
|
WHILE (foundindex = -1) AND (i != MAX_ENTITY_WATCH_LIST_ENTRIES)
|
|
IF g_EntityWatchList[i].index = NULL
|
|
foundindex = i
|
|
ENDIF
|
|
++i
|
|
ENDWHILE
|
|
|
|
|
|
IF foundindex = -1
|
|
SCRIPT_ASSERT("INFORM_MISSION_STATS_OF_HEADSHOT_WATCH_ENTITY: No free index found")
|
|
EXIT
|
|
ENDIF
|
|
|
|
|
|
g_EntityWatchList[foundindex].index = in
|
|
g_EntityWatchList[foundindex].type = MISSION_STAT_TYPE_HEADSHOTS
|
|
|
|
CPRINTLN(DEBUG_MISSION_STATS, "INFORM_MISSION_STATS_OF_HEADSHOT_WATCH_ENTITY: add ", GET_MODEL_NAME_FOR_DEBUG(GET_ENTITY_MODEL(in)), " [", NATIVE_TO_INT(in), "] to slot ", foundindex, ".")
|
|
|
|
++g_iEntityWatchListLoggedCount
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
///
|
|
/// PARAMS:
|
|
/// in -
|
|
PROC REMOVE_HEADSHOT_WATCH_ENTITY_FROM_MISSION_STATS(ENTITY_INDEX in)
|
|
|
|
INT di = 0
|
|
REPEAT MAX_ENTITY_WATCH_LIST_ENTRIES di
|
|
IF g_EntityWatchList[di].index = in
|
|
|
|
g_EntityWatchList[di].index = NULL
|
|
g_EntityWatchList[di].type = MISSION_STAT_TYPE_UNSET
|
|
|
|
CPRINTLN(DEBUG_MISSION_STATS, "REMOVE_HEADSHOT_WATCH_ENTITY_FROM_MISSION_STATS: remove ", GET_MODEL_NAME_FOR_DEBUG(GET_ENTITY_MODEL(in)), " [", NATIVE_TO_INT(in), "] from slot ", di, ".")
|
|
|
|
--g_iEntityWatchListLoggedCount
|
|
|
|
EXIT
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
SCRIPT_ASSERT("REMOVE_HEADSHOT_WATCH_ENTITY_FROM_MISSION_STATS - entity not in watchlist")
|
|
ENDPROC
|
|
|
|
/// PURPOSE:
|
|
///
|
|
/// PARAMS:
|
|
/// e - the stat to increment
|
|
/// number - the value to increment it by
|
|
/// overrideToValue - instead of incrementing by "number" override it to this value
|
|
PROC INFORM_MISSION_STATS_OF_INCREMENT(ENUM_MISSION_STATS e, INT number = 1, BOOL overrideToValue = FALSE)
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT IS_REPEAT_PLAY_ACTIVE()
|
|
IF NOT g_savedGlobals.sFlow.isGameflowActive
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
IF !g_bMissionStatSystemPrimed AND (!g_bMagDemoActive)
|
|
CPRINTLN(DEBUG_MISSION_STATS, "Mission stats system inform call fired while stats system not primed. Pass this bug to Default Levels.")
|
|
ENDIF
|
|
#ENDIF
|
|
INT i = 0
|
|
|
|
REPEAT g_iMissionStatsBeingTracked i
|
|
IF g_MissionStatTrackingArray[i].target = e
|
|
IF overrideToValue
|
|
g_MissionStatTrackingArray[i].ivalue = number
|
|
//CPRINTLN(DEBUG_MISSION_STATS, "Setting mission stat ",e," to ", number)
|
|
ELSE
|
|
g_MissionStatTrackingArray[i].ivalue += number
|
|
//CPRINTLN(DEBUG_MISSION_STATS, "Incrementing mission stat ",e," by ", number, " new value ",g_MissionStatTrackingArray[i].ivalue)
|
|
ENDIF
|
|
|
|
EXIT
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
#IF USE_TU_CHANGES
|
|
IF g_MissionStatTrackingArray[i].target != UNSET_MISSION_STAT_ENUM
|
|
#ENDIF
|
|
|
|
IF g_MissionStatTrackingPrototypes[g_MissionStatTrackingArray[i].target].type = MISSION_STAT_TYPE_UNIQUE_BOOL
|
|
IF g_MissionStatTrackingArray[i].ivalue > 1
|
|
g_MissionStatTrackingArray[i].ivalue = 1
|
|
ENDIF
|
|
IF g_MissionStatTrackingArray[i].ivalue < 0
|
|
g_MissionStatTrackingArray[i].ivalue = 0
|
|
ENDIF
|
|
ENDIF
|
|
|
|
#IF USE_TU_CHANGES
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
SAVE_STRING_TO_DEBUG_FILE("look at ")
|
|
SAVE_INT_TO_DEBUG_FILE(g_iMissionStatsBeingTracked)
|
|
SAVE_STRING_TO_DEBUG_FILE(" stats for \"")
|
|
SAVE_STRING_TO_DEBUG_FILE(SAFE_GET_MISSION_STAT_NAME(e))
|
|
SAVE_STRING_TO_DEBUG_FILE("\"")
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
REPEAT g_iMissionStatsBeingTracked i
|
|
SAVE_STRING_TO_DEBUG_FILE(" g_MissionStatTrackingArray[")
|
|
SAVE_INT_TO_DEBUG_FILE(i)
|
|
SAVE_STRING_TO_DEBUG_FILE("].target = ")
|
|
SAVE_STRING_TO_DEBUG_FILE(SAFE_GET_MISSION_STAT_NAME(g_MissionStatTrackingArray[i].target))
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
ENDREPEAT
|
|
SAVE_NEWLINE_TO_DEBUG_FILE()
|
|
#ENDIF
|
|
|
|
|
|
CPRINTLN(DEBUG_MISSION_STATS, "Failed incrementing mission stat ", SAFE_GET_MISSION_STAT_NAME(e) ," by ", number, " new value ",g_MissionStatTrackingArray[i].ivalue)
|
|
SCRIPT_ASSERT("INFORM_MISSION_STATS_OF_INCREMENT Specified stat not logged. If reporting this issue please complete the mission (s pass is fine) and note if the mission success dialog appears or not and what stats appear in it if it does. Thanks!")
|
|
ENDPROC
|
|
|
|
|
|
PROC INFORM_MISSION_STATS_OF_TIME_TOTAL_CHANGE(ENUM_MISSION_STATS e, INT ms)
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT IS_REPEAT_PLAY_ACTIVE()
|
|
IF NOT g_savedGlobals.sFlow.isGameflowActive
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
IF !g_bMissionStatSystemPrimed AND (!g_bMagDemoActive)
|
|
CPRINTLN(DEBUG_MISSION_STATS, "INFORM_MISSION_STATS_OF_TIME_TOTAL_CHANGE: Mission stats system inform call fired while stats system not primed. Pass this bug to Default Levels.")
|
|
ENDIF
|
|
#ENDIF
|
|
INT i = 0
|
|
REPEAT g_iMissionStatsBeingTracked i
|
|
IF g_MissionStatTrackingArray[i].target = e
|
|
g_MissionStatTrackingArray[i].ivalue = ms
|
|
CPRINTLN(DEBUG_MISSION_STATS, "INFORM_MISSION_STATS_OF_TIME_TOTAL_CHANGE: Setting mission stat ",e," to ", ms)
|
|
EXIT
|
|
ENDIF
|
|
ENDREPEAT
|
|
SCRIPT_ASSERT("INFORM_MISSION_STATS_OF_INCREMENT Specified stat not logged. If reporting this issue please complete the mission (s pass is fine) and note if the mission success dialog appears or not and what stats appear in it if it does. Thanks!")
|
|
ENDPROC
|
|
|
|
PROC INFORM_MISSION_STATS_OF_DISTANCE(ENUM_MISSION_STATS e, FLOAT distance)
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT IS_REPEAT_PLAY_ACTIVE()
|
|
IF NOT g_savedGlobals.sFlow.isGameflowActive
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
IF !g_bMissionStatSystemPrimed AND (!g_bMagDemoActive)
|
|
CPRINTLN(DEBUG_MISSION_STATS, "Mission stats system inform call fired while stats system not primed. Pass this bug to Default Levels.")
|
|
ENDIF
|
|
#ENDIF
|
|
INT i = 0
|
|
REPEAT g_iMissionStatsBeingTracked i
|
|
IF g_MissionStatTrackingArray[i].target = e
|
|
g_MissionStatTrackingArray[i].fvalue = distance
|
|
EXIT
|
|
ENDIF
|
|
ENDREPEAT
|
|
ENDPROC
|
|
|
|
PROC INFORM_MISSION_STATS_OF_FINANCIAL_DAMAGE(INT dollars)
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT IS_REPEAT_PLAY_ACTIVE()
|
|
IF NOT g_savedGlobals.sFlow.isGameflowActive
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
IF !g_bMissionStatSystemPrimed AND (!g_bMagDemoActive)
|
|
CPRINTLN(DEBUG_MISSION_STATS, "Mission stats system inform call fired while stats system not primed. Pass this bug to Default Levels.")
|
|
ENDIF
|
|
#ENDIF
|
|
INT i = 0
|
|
REPEAT g_iMissionStatsBeingTracked i
|
|
IF g_MissionStatTrackingPrototypes[g_MissionStatTrackingArray[i].target].type = MISSION_STAT_TYPE_FINANCE_DIRECT
|
|
g_MissionStatTrackingArray[i].ivalue += dollars
|
|
ENDIF
|
|
ENDREPEAT
|
|
ENDPROC
|
|
|
|
|
|
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//////////////////////////////////////////////////////////////////////////////////////////////////
|
|
//Stat system configuration
|
|
|
|
|
|
|
|
/// PURPOSE:
|
|
/// Tell the stat system a mission detected boolean stat has been successfully completed
|
|
/// PARAMS:
|
|
/// e - An enum mission stat that is set to boolean type in the mission stat system
|
|
PROC INFORM_STAT_SYSTEM_OF_BOOL_STAT_HAPPENED(ENUM_MISSION_STATS e)
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT IS_REPEAT_PLAY_ACTIVE()
|
|
IF NOT g_savedGlobals.sFlow.isGameflowActive
|
|
EXIT
|
|
ENDIF
|
|
ENDIF
|
|
IF !g_bMissionStatSystemPrimed AND (!g_bMagDemoActive)
|
|
CPRINTLN(DEBUG_MISSION_STATS, "Mission stats system inform call fired while stats system not primed. Pass this bug to Default Levels.")
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT g_MissionStatTrackingPrototypes[e].bHidden
|
|
CPRINTLN(DEBUG_MISSION_STATS, GET_THIS_SCRIPT_NAME(), ": attempting register stat : ", SAFE_GET_MISSION_STAT_NAME(e), " \"", GET_STRING_FROM_TEXT_FILE(SAFE_GET_MISSION_STAT_NAME(e)),"\" - bool just happened")
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION_STATS, GET_THIS_SCRIPT_NAME(), ": attempting register stat : STAT_MISS_HIDDEN_", ENUM_TO_INT(e), " - bool just happened")
|
|
ENDIF
|
|
|
|
#ENDIF
|
|
|
|
g_bMissionStatSystemResetFlag = FALSE //incase this was not suppressed previously
|
|
|
|
//check target is a bool stat
|
|
IF NOT (g_MissionStatTrackingPrototypes[e].type = MISSION_STAT_TYPE_UNIQUE_BOOL)
|
|
SCRIPT_ASSERT("INFORM_STAT_SYSTEM_OF_BOOL_STAT_HAPPENED being called on a mission stat that is not a bool stat")
|
|
EXIT
|
|
ENDIF
|
|
|
|
//check for stat being tracked
|
|
BOOL set = FALSE
|
|
INT i = 0
|
|
REPEAT g_iMissionStatsBeingTracked i
|
|
//if it is then set it
|
|
IF g_MissionStatTrackingArray[i].target = e
|
|
set = TRUE
|
|
g_MissionStatTrackingArray[i].ivalue = 1
|
|
g_MissionStatTrackingArray[i].fvalue = 0.0
|
|
|
|
|
|
IF g_MissionStatTrackingArray[i].invalidationReason = MSSIR_SKIP
|
|
//g_MissionStatTrackingArray[i].invalidationReason = MSSIR_VALID
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
CPRINTLN(DEBUG_MISSION_STATS, GET_THIS_SCRIPT_NAME(), ":Invalidating shitskipped stat: ", e)
|
|
#ENDIF
|
|
ENDIF
|
|
ENDIF
|
|
ENDREPEAT
|
|
|
|
IF NOT set
|
|
SCRIPT_ASSERT("INFORM_STAT_SYSTEM_OF_BOOL_STAT_SUCCESS called but no stat of type is in list!")
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
/// PURPOSE: Updated the last completed mission stat used to name saved games.
|
|
///
|
|
PROC SET_LAST_COMPLETED_MISSION_STAT(STRING sMissionNameLabel, INT iPlayerInvolvedBitset)
|
|
//Set character independent stats.
|
|
STAT_SET_GXT_LABEL(SP_LAST_MISSION_NAME, sMissionNameLabel)
|
|
|
|
//Set character specific stats.
|
|
IF IS_BIT_SET(iPlayerInvolvedBitset, ENUM_TO_INT(CHAR_MICHAEL))
|
|
STAT_SET_GXT_LABEL(SP0_LAST_MISSION_NAME, sMissionNameLabel)
|
|
ENDIF
|
|
IF IS_BIT_SET(iPlayerInvolvedBitset, ENUM_TO_INT(CHAR_FRANKLIN))
|
|
STAT_SET_GXT_LABEL(SP1_LAST_MISSION_NAME, sMissionNameLabel)
|
|
ENDIF
|
|
IF IS_BIT_SET(iPlayerInvolvedBitset, ENUM_TO_INT(CHAR_TREVOR))
|
|
STAT_SET_GXT_LABEL(SP2_LAST_MISSION_NAME, sMissionNameLabel)
|
|
ENDIF
|
|
ENDPROC
|
|
|
|
|
|
/// PURPOSE:
|
|
///
|
|
/// PARAMS:
|
|
/// e - The mission stat enum to lookup
|
|
/// RETURNS:
|
|
/// The mission stat type
|
|
FUNC ENUM_MISSION_STAT_TYPES GET_MISSION_STAT_TYPE(ENUM_MISSION_STATS e)
|
|
RETURN g_MissionStatTrackingPrototypes[e].type
|
|
ENDFUNC
|
|
|
|
FUNC BOOL Is_Mission_DLC_Mission(SP_MISSIONS eMissionIndex, INT iDLCStage)
|
|
#IF USE_CLF_DLC
|
|
eMissionIndex = eMissionIndex
|
|
RETURN TRUE
|
|
#ENDIF
|
|
#IF USE_NRM_DLC
|
|
eMissionIndex = eMissionIndex
|
|
RETURN TRUE
|
|
#ENDIF
|
|
|
|
IF iDLCStage = 0
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
#if not USE_CLF_DLC
|
|
#if not USE_NRM_DLC
|
|
|
|
IF eMissionIndex != SP_MISSION_ASSASSIN_1
|
|
AND eMissionIndex != SP_MISSION_ASSASSIN_2
|
|
AND eMissionIndex != SP_MISSION_ASSASSIN_3
|
|
AND eMissionIndex != SP_MISSION_ASSASSIN_4
|
|
AND eMissionIndex != SP_MISSION_ASSASSIN_5
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
#endif
|
|
#endif
|
|
|
|
RETURN TRUE
|
|
|
|
ENDFUNC
|
|
|
|
/// PURPOSE:
|
|
/// Used for display, handles unset values gracefully
|
|
/// PARAMS:
|
|
/// e - The mission stat enum to lookup
|
|
/// RETURNS:
|
|
/// The mission stat
|
|
FUNC INT GET_MISSION_STAT_FRIENDLY_VALUE(
|
|
ENUM_MISSION_STATS paramStat)
|
|
|
|
INT i = GET_MISSION_STAT_STORED_VALUE(g_MissionStatTrackingPrototypes[paramStat].statname)//g_MissionStatTrackingPrototypes[e].currentvalue
|
|
IF i > -2
|
|
RETURN i
|
|
ENDIF
|
|
|
|
RETURN 0
|
|
ENDFUNC
|
|
|
|
|
|
PROC SET_SCALEFORM_DATA_FOR_TIME_STAT(INT paramValue, INT paramIndex, INT paramPassed, STRING paramNameLabel,
|
|
ENUM_MISSION_STATS paramStat, SCALEFORM_INDEX paramMovie = NULL)
|
|
INT iMinutes = FLOOR(TO_FLOAT(paramValue)/60000.0)
|
|
INT iSeconds = FLOOR(TO_FLOAT(paramValue)/1000.0) - (iMinutes*60)
|
|
|
|
IF paramMovie != NULL
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(paramMovie,"SET_DATA_SLOT")
|
|
ELSE
|
|
BEGIN_SCALEFORM_MOVIE_METHOD_ON_FRONTEND("SET_DATA_SLOT")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
|
|
ENDIF
|
|
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(paramIndex)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(paramPassed)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(4)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iMinutes)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(iSeconds)
|
|
|
|
// show stat descriptions in pause menu
|
|
IF paramMovie = NULL
|
|
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("PM_RP_STATD")
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(paramNameLabel)
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(GET_MISSION_STAT_DESCRIPTION(paramStat))
|
|
END_TEXT_COMMAND_SCALEFORM_STRING()
|
|
ELSE
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(paramNameLabel)
|
|
ENDIF
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ENDPROC
|
|
|
|
|
|
PROC SET_SCALEFORM_DATA_FOR_BOOL_STAT(INT paramIndex, INT paramPassed, STRING paramNameLabel,
|
|
ENUM_MISSION_STATS paramStat, SCALEFORM_INDEX paramMovie = NULL)
|
|
|
|
IF paramMovie != NULL
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(paramMovie,"SET_DATA_SLOT")
|
|
ELSE
|
|
BEGIN_SCALEFORM_MOVIE_METHOD_ON_FRONTEND("SET_DATA_SLOT")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
|
|
ENDIF
|
|
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(paramIndex)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(paramPassed)
|
|
|
|
// show stat descriptions in pause menu
|
|
IF paramMovie = NULL
|
|
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("PM_RP_STATD")
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(paramNameLabel)
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(GET_MISSION_STAT_DESCRIPTION(paramStat))
|
|
END_TEXT_COMMAND_SCALEFORM_STRING()
|
|
ELSE
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(paramNameLabel)
|
|
ENDIF
|
|
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ENDPROC
|
|
|
|
|
|
PROC SET_SCALEFORM_DATA_FOR_PERCENTAGE_STAT(INT paramValue, INT paramMaxValue, INT paramIndex, INT paramPassed, STRING paramNameLabel,
|
|
ENUM_MISSION_STATS paramStat, SCALEFORM_INDEX paramMovie = NULL)
|
|
FLOAT fSuccessPercentage = (TO_FLOAT(paramValue)/TO_FLOAT(paramMaxValue))*100.0
|
|
CPRINTLN(DEBUG_MISSION_STATS, "SET_SCALEFORM_DATA_FOR_PERCENTAGE_STAT: ",paramValue," / ",paramMaxValue," = ", fSuccessPercentage)
|
|
IF paramMovie != NULL
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(paramMovie,"SET_DATA_SLOT")
|
|
ELSE
|
|
BEGIN_SCALEFORM_MOVIE_METHOD_ON_FRONTEND("SET_DATA_SLOT")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
|
|
ENDIF
|
|
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(paramIndex)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(paramPassed)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(3)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(CEIL(fSuccessPercentage))//1503127
|
|
|
|
// show stat descriptions in pause menu
|
|
IF paramMovie = NULL
|
|
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("PM_RP_STATD")
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(paramNameLabel)
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(GET_MISSION_STAT_DESCRIPTION(paramStat))
|
|
END_TEXT_COMMAND_SCALEFORM_STRING()
|
|
ELSE
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(paramNameLabel)
|
|
ENDIF
|
|
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ENDPROC
|
|
|
|
|
|
PROC SET_SCALEFORM_DATA_FOR_FRACTION_STAT(INT paramValue, INT paramMaxValue, INT paramIndex, INT paramPassed, STRING paramNameLabel,
|
|
ENUM_MISSION_STATS paramStat, SCALEFORM_INDEX paramMovie = NULL)
|
|
IF paramMovie != NULL
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(paramMovie,"SET_DATA_SLOT")
|
|
ELSE
|
|
BEGIN_SCALEFORM_MOVIE_METHOD_ON_FRONTEND("SET_DATA_SLOT")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
|
|
ENDIF
|
|
|
|
INT val = paramValue
|
|
IF val > paramMaxValue
|
|
val = paramMaxValue
|
|
ENDIF
|
|
CPRINTLN(DEBUG_MISSION_STATS, "SET_SCALEFORM_DATA_FOR_FRACTION_STAT: ",paramValue," -> ",val)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(paramIndex)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(paramPassed)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(5)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(val)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(paramMaxValue)
|
|
|
|
// show stat descriptions in pause menu
|
|
IF paramMovie = NULL
|
|
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("PM_RP_STATD")
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(paramNameLabel)
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(GET_MISSION_STAT_DESCRIPTION(paramStat))
|
|
END_TEXT_COMMAND_SCALEFORM_STRING()
|
|
ELSE
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(paramNameLabel)
|
|
ENDIF
|
|
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ENDPROC
|
|
|
|
PROC SET_SCALEFORM_DATA_FOR_INT_STAT(INT paramValue, INT paramIndex, INT paramPassed, STRING paramNameLabel,
|
|
ENUM_MISSION_STATS paramStat, SCALEFORM_INDEX paramMovie = NULL)
|
|
IF paramMovie != NULL
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(paramMovie,"SET_DATA_SLOT")
|
|
ELSE
|
|
BEGIN_SCALEFORM_MOVIE_METHOD_ON_FRONTEND("SET_DATA_SLOT")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
|
|
ENDIF
|
|
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(paramIndex)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(paramPassed)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(1)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(paramValue)
|
|
|
|
// show stat descriptions in pause menu
|
|
IF paramMovie = NULL
|
|
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("PM_RP_STATD")
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(paramNameLabel)
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(GET_MISSION_STAT_DESCRIPTION(paramStat))
|
|
END_TEXT_COMMAND_SCALEFORM_STRING()
|
|
ELSE
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(paramNameLabel)
|
|
ENDIF
|
|
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
ENDPROC
|
|
|
|
|
|
PROC SET_SCALEFORM_DATA_FOR_MONETARY_STAT(INT paramValue, INT paramIndex, INT paramPassed, STRING paramNameLabel,
|
|
ENUM_MISSION_STATS paramStat, SCALEFORM_INDEX paramMovie = NULL)
|
|
IF paramMovie != NULL
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(paramMovie,"SET_DATA_SLOT")
|
|
ELSE
|
|
BEGIN_SCALEFORM_MOVIE_METHOD_ON_FRONTEND("SET_DATA_SLOT")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
|
|
ENDIF
|
|
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(paramIndex)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(paramPassed)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(6)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(paramValue)
|
|
|
|
// show stat descriptions in pause menu
|
|
IF paramMovie = NULL
|
|
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("PM_RP_STATD")
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(paramNameLabel)
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(GET_MISSION_STAT_DESCRIPTION(paramStat))
|
|
END_TEXT_COMMAND_SCALEFORM_STRING()
|
|
ELSE
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(paramNameLabel)
|
|
ENDIF
|
|
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ENDPROC
|
|
|
|
PROC SET_SCALEFORM_DATA_FOR_INVALID_STAT(INT paramValue, INT paramIndex, INT paramPassed, STRING paramNameLabel,
|
|
ENUM_MISSION_STATS paramStat, SCALEFORM_INDEX paramMovie = NULL)
|
|
IF paramMovie != NULL
|
|
BEGIN_SCALEFORM_MOVIE_METHOD(paramMovie,"SET_DATA_SLOT")
|
|
ELSE
|
|
BEGIN_SCALEFORM_MOVIE_METHOD_ON_FRONTEND("SET_DATA_SLOT")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
|
|
ENDIF
|
|
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(paramIndex)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(paramPassed)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0) //Invalid stat type
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(paramValue)
|
|
|
|
// show stat descriptions in pause menu
|
|
IF paramMovie = NULL
|
|
BEGIN_TEXT_COMMAND_SCALEFORM_STRING("PM_RP_STATD")
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(paramNameLabel)
|
|
ADD_TEXT_COMPONENT_SUBSTRING_TEXT_LABEL(GET_MISSION_STAT_DESCRIPTION(paramStat))
|
|
END_TEXT_COMMAND_SCALEFORM_STRING()
|
|
ELSE
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING(paramNameLabel)
|
|
ENDIF
|
|
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
endproc
|
|
|
|
|
|
FUNC BOOL GET_MISSION_STAT_PASS_STATUS_FOR_VALUE(ENUM_MISSION_STATS paramStat, INT value)
|
|
#IF IS_DEBUG_BUILD
|
|
IF NOT g_MissionStatTrackingPrototypes[paramStat].bHidden
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<STATSET> GET_MISSION_STAT_PASS_STATUS_FOR_VALUE : stat ", SAFE_GET_MISSION_STAT_NAME(paramStat), " \"", GET_STRING_FROM_TEXT_FILE(GET_MISSION_STAT_NAME(paramStat)),"\" : value ", value)
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<STATSET> GET_MISSION_STAT_PASS_STATUS_FOR_VALUE : stat ", ENUM_TO_INT(paramStat), ": value ", value)
|
|
ENDIF
|
|
#ENDIF
|
|
|
|
IF value < 0
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<STATSET> value smaller than zero")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
//MissionStatInfo eStatInfo =
|
|
SWITCH g_MissionStatTrackingPrototypes[paramStat].type
|
|
//stat types that can never pass with zero or less than as the value
|
|
CASE MISSION_STAT_TYPE_TOTALTIME
|
|
CASE MISSION_STAT_TYPE_ACTION_CAM_USE
|
|
CASE MISSION_STAT_TYPE_WINDOWED_TIMER
|
|
CASE MISSION_STAT_TYPE_SINGLE_ENTITY_SPEED_THRESHOLD
|
|
CASE MISSION_STAT_TYPE_SPECIAL_ABILITY_USE
|
|
IF value < 1
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<STATSET> unset stat value. fail")
|
|
RETURN FALSE
|
|
ENDIF
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
IF value = HIGHEST_INT
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<STATSET> Stat shitskip value detected, invalidated")
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
//#1624877 - allow it to be any value greater than zero if Franklin owns the mod shop
|
|
IF (paramStat = FINPC1_MOD_GAUNTLET OR paramStat = FINPC2_MOD_GAUNTLET OR paramStat = FINPC3_MOD_GAUNTLET)
|
|
AND g_savedGlobals.sPropertyData.propertyOwnershipData[PROPERTY_CAR_MOD_SHOP].charOwner = GET_CURRENT_PLAYER_PED_ENUM()
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<STATSET> Change stat for ", paramStat, " as Franklin owns a garage.")
|
|
|
|
g_MissionStatTrackingPrototypes[paramStat].success_threshold = 0
|
|
ENDIF
|
|
|
|
|
|
IF g_MissionStatTrackingPrototypes[paramStat].less_than_threshold
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<STATSET> GET_MISSION_STAT_PASS_STATUS_FOR_VALUE lessthan : stat ",value," < ", g_MissionStatTrackingPrototypes[paramStat].success_threshold)
|
|
IF value < g_MissionStatTrackingPrototypes[paramStat].success_threshold
|
|
RETURN TRUE
|
|
ENDIF
|
|
ELSE
|
|
CPRINTLN(DEBUG_MISSION_STATS, "<STATSET> GET_MISSION_STAT_PASS_STATUS_FOR_VALUE more or equal : stat ",value," >= ", g_MissionStatTrackingPrototypes[paramStat].success_threshold)
|
|
IF value >= g_MissionStatTrackingPrototypes[paramStat].success_threshold
|
|
RETURN TRUE
|
|
ENDIF
|
|
ENDIF
|
|
RETURN FALSE
|
|
ENDFUNC
|
|
|
|
|
|
FUNC INT GET_MISSION_STAT_PASS_STATUS(ENUM_MISSION_STATS paramStat)
|
|
|
|
//Generic calculation to see if this stat has met its passed criteria.
|
|
IF GET_MISSION_STAT_PASS_STATUS_FOR_VALUE(paramStat, GET_MISSION_STAT_STORED_VALUE(g_MissionStatTrackingPrototypes[paramStat].statname))
|
|
RETURN 1
|
|
ENDIF
|
|
RETURN 0
|
|
|
|
ENDFUNC
|
|
|
|
|
|
FUNC BOOL SET_SCALEFORM_DATA_FOR_MISSION_STAT(ENUM_MISSION_STATS paramStat, INT paramIndex, SCALEFORM_INDEX paramMovie = NULL)
|
|
|
|
IF paramMovie != NULL
|
|
IF NOT HAS_SCALEFORM_MOVIE_LOADED(paramMovie)
|
|
SCRIPT_ASSERT("SET_SCALEFORM_DATA_FOR_MISSION_STAT: Command was called before the required scaleform was loaded. Aborting.")
|
|
RETURN FALSE
|
|
ENDIF
|
|
ENDIF
|
|
|
|
MissionStatInfo sStatInfo
|
|
INT iPassed
|
|
|
|
IF g_MissionStatTrackingPrototypes[paramStat].bHidden
|
|
SCRIPT_ASSERT("Called on a stat with hidden setting, this will probably result in undefined stats appearing in the list. Pass this bug to Default Levels..")
|
|
RETURN TRUE//hidden stats don't have ingame strings, skip them. But don't count as failed
|
|
ENDIF
|
|
|
|
sStatInfo = g_MissionStatTrackingPrototypes[paramStat]
|
|
iPassed = GET_MISSION_STAT_PASS_STATUS(paramStat)
|
|
SWITCH paramStat
|
|
CASE ASS1_MIRROR_TIME
|
|
CASE ASS1_MIRROR_CASH
|
|
CASE ASS1_MIRROR_PERCENT
|
|
CASE ASS1_MIRROR_MEDAL
|
|
CASE ASS2_MIRROR_TIME
|
|
CASE ASS2_MIRROR_PERCENT
|
|
CASE ASS2_MIRROR_MEDAL
|
|
CASE ASS2_MIRROR_CASH
|
|
CASE ASS3_MIRROR_TIME
|
|
CASE ASS3_MIRROR_CASH
|
|
CASE ASS3_MIRROR_PERCENTAGE
|
|
CASE ASS3_MIRROR_MEDAL
|
|
CASE ASS4_MIRROR_TIME
|
|
CASE ASS4_MIRROR_CASH
|
|
CASE ASS4_MIRROR_PERCENTAGE
|
|
CASE ASS4_MIRROR_MEDAL
|
|
CASE ASS5_MIRROR_TIME
|
|
CASE ASS5_MIRROR_CASH
|
|
CASE ASS5_MIRROR_PERCENT
|
|
CASE ASS5_MIRROR_MEDAL
|
|
iPassed = -1
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
INT paramValue
|
|
STRING paramNameLabel
|
|
|
|
paramValue = GET_MISSION_STAT_FRIENDLY_VALUE(paramStat)
|
|
paramNameLabel = GET_MISSION_STAT_NAME(paramStat)
|
|
|
|
CDEBUG1LN(debug_mission_stats,"Stat val ",paramValue," ind ",paramIndex," pas ",iPassed," nameL ",paramNameLabel," stat ",ENUM_TO_INT(paramStat))
|
|
//B* 1762462, 1927403: Mark invalidated stats as not passed, gray-out
|
|
IF paramValue = -1
|
|
SET_SCALEFORM_DATA_FOR_INVALID_STAT( paramValue, paramIndex,0,paramNameLabel,paramStat,paramMovie)
|
|
iPassed = 0
|
|
ELSE
|
|
//Operate based on stat type.
|
|
SWITCH sStatInfo.type
|
|
CASE MISSION_STAT_TYPE_TOTALTIME
|
|
SET_SCALEFORM_DATA_FOR_TIME_STAT( paramValue,
|
|
paramIndex,
|
|
iPassed,
|
|
"MTTIME",
|
|
paramStat,
|
|
paramMovie)
|
|
BREAK
|
|
CASE MISSION_STAT_TYPE_ACTION_CAM_USE
|
|
SET_SCALEFORM_DATA_FOR_TIME_STAT( paramValue,
|
|
paramIndex,
|
|
iPassed,
|
|
paramNameLabel,
|
|
paramStat,
|
|
paramMovie)
|
|
BREAK
|
|
|
|
CASE MISSION_STAT_TYPE_UNIQUE_BOOL
|
|
SET_SCALEFORM_DATA_FOR_BOOL_STAT( paramIndex,
|
|
iPassed,
|
|
paramNameLabel,
|
|
paramStat,
|
|
paramMovie)
|
|
BREAK
|
|
CASE MISSION_STAT_TYPE_SPECIAL_ABILITY_USE
|
|
CASE MISSION_STAT_TYPE_WINDOWED_TIMER
|
|
SET_SCALEFORM_DATA_FOR_TIME_STAT( paramValue,
|
|
paramIndex,
|
|
iPassed,
|
|
paramNameLabel,
|
|
paramStat,
|
|
paramMovie)
|
|
BREAK
|
|
|
|
CASE MISSION_STAT_TYPE_SINGLE_ENTITY_SPEED_THRESHOLD
|
|
SET_SCALEFORM_DATA_FOR_PERCENTAGE_STAT( paramValue,
|
|
sStatInfo.success_threshold,
|
|
paramIndex,
|
|
iPassed,
|
|
paramNameLabel,
|
|
paramStat,
|
|
paramMovie)
|
|
BREAK
|
|
|
|
CASE MISSION_STAT_TYPE_SINGLE_ENTITY_DAMAGE_THRESHOLD
|
|
SET_SCALEFORM_DATA_FOR_BOOL_STAT( paramIndex,
|
|
iPassed,
|
|
paramNameLabel,
|
|
paramStat,
|
|
paramMovie)
|
|
BREAK
|
|
|
|
CASE MISSION_STAT_TYPE_HEADSHOTS
|
|
SET_SCALEFORM_DATA_FOR_FRACTION_STAT( paramValue,
|
|
sStatInfo.success_threshold,
|
|
paramIndex,
|
|
iPassed,
|
|
paramNameLabel,
|
|
paramStat,
|
|
paramMovie)
|
|
BREAK
|
|
|
|
CASE MISSION_STAT_TYPE_FRACTION
|
|
SET_SCALEFORM_DATA_FOR_FRACTION_STAT( paramValue,
|
|
sStatInfo.success_threshold,
|
|
paramIndex,
|
|
iPassed,
|
|
paramNameLabel,
|
|
paramStat,
|
|
paramMovie)
|
|
BREAK
|
|
|
|
CASE MISSION_STAT_TYPE_ACCURACY
|
|
SET_SCALEFORM_DATA_FOR_PERCENTAGE_STAT( paramValue,
|
|
100,//sStatInfo.success_threshold,
|
|
paramIndex,
|
|
iPassed,
|
|
paramNameLabel,
|
|
paramStat,
|
|
paramMovie)
|
|
BREAK
|
|
CASE MISSION_STAT_TYPE_INNOCENTS_KILLED
|
|
CASE MISSION_STAT_TYPE_PURE_COUNT
|
|
CASE MISSION_STAT_TYPE_PURE_COUNT_DISTANCE //TODO this needs it's own scaleform upload call
|
|
CASE MISSION_STAT_TYPE_BULLETS_FIRED
|
|
SET_SCALEFORM_DATA_FOR_INT_STAT(paramValue,
|
|
paramIndex,
|
|
iPassed,
|
|
paramNameLabel,
|
|
paramStat,
|
|
paramMovie)
|
|
BREAK
|
|
CASE MISSION_STAT_TYPE_PURE_COUNT_PERCENTAGE
|
|
SET_SCALEFORM_DATA_FOR_PERCENTAGE_STAT( paramValue,
|
|
100,
|
|
paramIndex,
|
|
iPassed,
|
|
paramNameLabel,
|
|
paramStat,
|
|
paramMovie)
|
|
BREAK
|
|
|
|
CASE MISSION_STAT_TYPE_FINANCE_DIRECT
|
|
CASE MISSION_STAT_TYPE_FINANCE_TABLE
|
|
SET_SCALEFORM_DATA_FOR_MONETARY_STAT( paramValue,
|
|
paramIndex,
|
|
iPassed,
|
|
paramNameLabel,
|
|
paramStat,
|
|
paramMovie)
|
|
BREAK
|
|
|
|
|
|
CASE MISSION_STAT_TYPE_UNSET
|
|
CPRINTLN(DEBUG_MISSION_STATS, "Missing stat type ", sStatInfo.type ," for stat ", paramNameLabel, " with index ", paramStat)
|
|
SCRIPT_ASSERT("SET_SCALEFORM_DATA_FOR_MISSION_STAT: Stat passed had an unset type. Bug Andrew K!")
|
|
BREAK
|
|
|
|
ENDSWITCH
|
|
|
|
ENDIF
|
|
|
|
IF iPassed = 0
|
|
RETURN FALSE
|
|
ENDIF
|
|
|
|
RETURN TRUE
|
|
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
FUNC FLOAT SET_SCALEFORM_DATA_FOR_MISSION_STAT_TOTALS_ESD(END_SCREEN_DATASET &esd,
|
|
INT visiblesucceeded,INT visibleattempted, BOOL bSkipDetected)
|
|
//MISSION_STAT_SYSTEM_INVALIDATION_REASON reason = MSSIR_CHECKPOINT)
|
|
//
|
|
CPRINTLN(DEBUG_MISSION_STATS, "Setting percentage and medal using SET_SCALEFORM_DATA_FOR_MISSION_STAT_TOTALS_ESD")
|
|
|
|
FLOAT fUploadPercentage = GET_MISSION_STAT_PERCENTAGE(visiblesucceeded,visibleattempted)
|
|
INT medal = GET_STAT_MEDAL_VALUE(fUploadPercentage)
|
|
|
|
|
|
|
|
IF bSkipDetected
|
|
fUploadPercentage = 50
|
|
medal = 1
|
|
ENDIF
|
|
|
|
|
|
IF(fUploadPercentage = 0)
|
|
SET_ENDSCREEN_COMPLETION_LINE_STATE(esd, TRUE, "MTPHPER", 0,0,
|
|
ESC_PERCENTAGE_COMPLETION, ESMS_NO_MEDAL)
|
|
RETURN fUploadPercentage
|
|
ENDIF
|
|
|
|
|
|
END_SCREEN_MEDAL_STATUS ems = ESMS_NO_MEDAL
|
|
|
|
SWITCH GET_MEDAL_HUD_COLOUR(medal)
|
|
CASE HUD_COLOUR_GOLD
|
|
ems = ESMS_GOLD
|
|
BREAK
|
|
CASE HUD_COLOUR_SILVER
|
|
ems = ESMS_SILVER
|
|
BREAK
|
|
CASE HUD_COLOUR_BRONZE
|
|
ems = ESMS_BRONZE
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
//TEXT_LABEL showstring = "MTPHPER"
|
|
|
|
SWITCH GET_MEDAL_HUD_COLOUR(medal)
|
|
CASE HUD_COLOUR_GOLD
|
|
SET_ENDSCREEN_COMPLETION_LINE_STATE(esd,
|
|
TRUE,
|
|
"MTPHPER",//_G",
|
|
ROUND(fUploadPercentage),0,
|
|
ESC_PERCENTAGE_COMPLETION,
|
|
ems)
|
|
BREAK
|
|
CASE HUD_COLOUR_SILVER
|
|
SET_ENDSCREEN_COMPLETION_LINE_STATE(esd,
|
|
TRUE,
|
|
"MTPHPER",//_S",
|
|
ROUND(fUploadPercentage),0,
|
|
ESC_PERCENTAGE_COMPLETION,
|
|
ems)
|
|
BREAK
|
|
CASE HUD_COLOUR_BRONZE
|
|
SET_ENDSCREEN_COMPLETION_LINE_STATE(esd,
|
|
TRUE,
|
|
"MTPHPER",//_B",
|
|
ROUND(fUploadPercentage),0,
|
|
ESC_PERCENTAGE_COMPLETION,
|
|
ems)
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
|
|
|
|
RETURN fUploadPercentage
|
|
ENDFUNC
|
|
|
|
|
|
|
|
FUNC FLOAT SET_SCALEFORM_DATA_FOR_MISSION_STAT_TOTALS(INT visiblesucceeded,INT visibleattempted, BOOL bSkipDetected,
|
|
INT iOverridePercent, INT iOverrideMedal)
|
|
//BOOL purerun,
|
|
//MISSION_STAT_SYSTEM_INVALIDATION_REASON reason = MSSIR_CHECKPOINT)
|
|
CPRINTLN(DEBUG_MISSION_STATS, "Setting percentage and medal using SET_SCALEFORM_DATA_FOR_MISSION_STAT_TOTALS")
|
|
|
|
FLOAT fUploadPercentage = GET_MISSION_STAT_PERCENTAGE(visiblesucceeded,visibleattempted)
|
|
INT medal = GET_STAT_MEDAL_VALUE(fUploadPercentage)
|
|
|
|
|
|
|
|
IF bSkipDetected
|
|
fUploadPercentage = 50
|
|
medal = 1
|
|
ENDIF
|
|
|
|
IF iOverrideMedal > -1
|
|
medal = iOverrideMedal
|
|
CPRINTLN(DEBUG_MISSION_STATS, "Medal overriden to : ",medal)
|
|
ENDIF
|
|
|
|
IF iOverridePercent > -1
|
|
fUploadPercentage = TO_FLOAT(iOverridePercent)
|
|
CPRINTLN(DEBUG_MISSION_STATS, "Percentage overriden to : ",fUploadPercentage)
|
|
ENDIF
|
|
|
|
CDEBUG1LN(debug_mission_stats,"Miss totals: visSuc ",visiblesucceeded,", visAtempt ",visibleAttempted,", p% ",fUploadPercentage,", medal ",medal,", skip",bSkipDetected)
|
|
|
|
IF medal = 0
|
|
|
|
BEGIN_SCALEFORM_MOVIE_METHOD_ON_FRONTEND("SET_DESCRIPTION")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(0)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fUploadPercentage)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MTPHPER")
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
|
|
ELSE
|
|
// normal version is now SET_SCALEFORM_DATA_FOR_MISSION_STAT_TOTALS_ESD
|
|
// pause menu version
|
|
BEGIN_SCALEFORM_MOVIE_METHOD_ON_FRONTEND("SET_DESCRIPTION")
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(2)
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_INT(ENUM_TO_INT(GET_MEDAL_HUD_COLOUR(medal)))
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_FLOAT(fUploadPercentage)
|
|
//IF purerun
|
|
//SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MTPHPER")
|
|
SWITCH GET_MEDAL_HUD_COLOUR(medal)
|
|
CASE HUD_COLOUR_GOLD
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MTPHPER_G")
|
|
BREAK
|
|
CASE HUD_COLOUR_SILVER
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MTPHPER_S")
|
|
BREAK
|
|
CASE HUD_COLOUR_BRONZE
|
|
SCALEFORM_MOVIE_METHOD_ADD_PARAM_STRING("MTPHPER_B")
|
|
BREAK
|
|
ENDSWITCH
|
|
//ELSE
|
|
//SET_SCALEFORM_UPLOAD_STAT_INVALIDATION_REASON_STRING(reason)
|
|
//ENDIF
|
|
END_SCALEFORM_MOVIE_METHOD()
|
|
ENDIF
|
|
|
|
|
|
RETURN fUploadPercentage
|
|
ENDFUNC
|
|
|
|
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
|
|
PROC DEBUG_SET_MISSION_STAT_TO_COMPLETED_VALUE(ENUM_MISSION_STATS paramStat)
|
|
|
|
//Naive first pass implementation!
|
|
g_MissionStatTrackingPrototypes[paramStat].currentvalue = g_MissionStatTrackingPrototypes[paramStat].success_threshold
|
|
IF g_MissionStatTrackingPrototypes[paramStat].less_than_threshold
|
|
g_MissionStatTrackingPrototypes[paramStat].currentvalue--
|
|
ENDIF
|
|
|
|
//B* 1870062: Set overridden assassination pass stats to 100%
|
|
SWITCH paramStat
|
|
CASE ASS1_MIRROR_PERCENT
|
|
CASE ASS2_MIRROR_PERCENT
|
|
CASE ASS3_MIRROR_PERCENTAGE
|
|
CASE ASS4_MIRROR_PERCENTAGE
|
|
CASE ASS5_MIRROR_PERCENT
|
|
g_MissionStatTrackingPrototypes[paramStat].currentvalue = 100
|
|
BREAK
|
|
ENDSWITCH
|
|
|
|
SWITCH paramStat
|
|
CASE ASS1_MIRROR_MEDAL
|
|
CASE ASS2_MIRROR_MEDAL
|
|
CASE ASS3_MIRROR_MEDAL
|
|
CASE ASS4_MIRROR_MEDAL
|
|
CASE ASS5_MIRROR_MEDAL
|
|
g_MissionStatTrackingPrototypes[paramStat].currentvalue = 3
|
|
BREAK
|
|
ENDSWITCH
|
|
//stored value that was previously missing
|
|
SET_MISSION_STAT_STORED_VALUE(g_MissionStatTrackingPrototypes[paramStat].currentvalue, paramStat)
|
|
|
|
ENDPROC
|
|
|
|
#ENDIF
|
|
|