246 lines
8.0 KiB
XML
Executable File
246 lines
8.0 KiB
XML
Executable File
USING "types.sch"
|
|
USING "model_enums.sch"
|
|
USING "stats_enums.sch"
|
|
USING "leaderboards_enum.sch"
|
|
USING "mission_stat_generated_globals.sch"
|
|
|
|
BOOL g_bMissionNoStatsNeedsSplashAndSting = FALSE
|
|
BOOL g_bHeistEndscreenDisplaying = FALSE
|
|
BOOL g_bMissionStatSystemBuildingReplayStats = FALSE
|
|
|
|
//System
|
|
BOOL g_bMissionStatSystemPrimed = FALSE
|
|
BOOL g_bMissionOverStatTrigger = FALSE
|
|
BOOL g_bStatsInWatchingLoop = FALSE
|
|
BOOL g_bMissionStatSystemMissionStarted = FALSE
|
|
BOOL g_bMissionStatSystemResponseToReplayNeeded = FALSE
|
|
BOOL g_bMissionStatSystemResponseToShitskipNeeded = FALSE
|
|
BOOL g_bMissionStatTimeDeltaReset = FALSE
|
|
BOOL g_bMissionStatSystemBlocker = FALSE//used to delay display of the mission complete UI by the flow
|
|
BOOL g_bMissionStatSystemResetFlag = FALSE
|
|
BOOL g_MissionStatSystemSuppressVisual = FALSE
|
|
BOOL g_bMissionStatSystemHeistMode = FALSE
|
|
INT g_iMissionStatSystemHeistIndex = -1
|
|
BOOL g_bMissionStatSystemUploadPending = FALSE
|
|
//Stat information
|
|
BOOL g_bMissionStatSystemSequenceStatus = FALSE
|
|
BOOL g_bMissionStatSystemActionCamWatchStatus = FALSE
|
|
|
|
|
|
//Time window switch
|
|
BOOL g_bMissionStatTimeWindowGate = FALSE
|
|
BOOL g_bMissionStatTimeWindowClosedForGood = FALSE // used to inform system popup for less than time window stats is available
|
|
ENUM_MISSION_STATS g_eCurrentTimeWindowTarget
|
|
|
|
//Tracked entity
|
|
ENTITY_INDEX g_MissionStatSingleSpeedWatchEntity = NULL
|
|
ENUM_MISSION_STATS g_MissionStatSpeedWatchEntitySpecific = UNSET_MISSION_STAT_ENUM
|
|
|
|
ENTITY_INDEX g_MissionStatSingleDamageWatchEntity = NULL
|
|
ENUM_MISSION_STATS g_MissionStatSingleDamageWatchStat = UNSET_MISSION_STAT_ENUM//if unset then target first in list
|
|
|
|
TEXT_LABEL_15 g_sMissionStatsName
|
|
//accuracy tracking data
|
|
BOOL g_bMissionStatAccuracyTallied
|
|
|
|
BOOL g_MissionStatUIIgnoreFade = FALSE
|
|
BOOL g_bSuppressNextStatTrigger = FALSE
|
|
|
|
INT g_iMissionStatsSP0Hits = 0
|
|
INT g_iMissionStatsSP0Shots = 0
|
|
INT g_iMissionStatsSP1Hits = 0
|
|
INT g_iMissionStatsSP1Shots = 0
|
|
INT g_iMissionStatsSP2Hits = 0
|
|
INT g_iMissionStatsSP2Shots = 0
|
|
|
|
INT g_iMissionStatsStartTime = 0
|
|
|
|
ENUM ENUM_MISSION_STAT_TYPES
|
|
MISSION_STAT_TYPE_UNSET,//default
|
|
|
|
MISSION_STAT_TYPE_TOTALTIME,
|
|
MISSION_STAT_TYPE_ACTION_CAM_USE,
|
|
MISSION_STAT_TYPE_UNIQUE_BOOL,
|
|
MISSION_STAT_TYPE_WINDOWED_TIMER,//Time window
|
|
MISSION_STAT_TYPE_SINGLE_ENTITY_SPEED_THRESHOLD,//speed watch
|
|
MISSION_STAT_TYPE_SINGLE_ENTITY_DAMAGE_THRESHOLD,//single entity damage watch
|
|
MISSION_STAT_TYPE_HEADSHOTS,//head shot entity list watch
|
|
MISSION_STAT_TYPE_FRACTION,//script pushed fraction
|
|
MISSION_STAT_TYPE_ACCURACY,
|
|
MISSION_STAT_TYPE_PURE_COUNT,//special cases
|
|
MISSION_STAT_TYPE_PURE_COUNT_PERCENTAGE,
|
|
MISSION_STAT_TYPE_FINANCE_DIRECT,
|
|
MISSION_STAT_TYPE_FINANCE_TABLE,
|
|
MISSION_STAT_TYPE_PURE_COUNT_DISTANCE, //In pending new upload type
|
|
MISSION_STAT_TYPE_BULLETS_FIRED,//accuracy but shots only
|
|
MISSION_STAT_TYPE_INNOCENTS_KILLED,
|
|
MISSION_STAT_TYPE_SPECIAL_ABILITY_USE,
|
|
|
|
MAX_MISSION_STAT_TYPES
|
|
ENDENUM
|
|
|
|
|
|
STRUCT ENTITY_WATCH_LIST_ENTRY
|
|
ENTITY_INDEX index
|
|
ENUM_MISSION_STAT_TYPES type
|
|
ENDSTRUCT
|
|
|
|
|
|
CONST_INT MAX_ENTITY_WATCH_LIST_ENTRIES 64
|
|
INT g_iEntityWatchListLoggedCount = 0
|
|
ENTITY_WATCH_LIST_ENTRY g_EntityWatchList[MAX_ENTITY_WATCH_LIST_ENTRIES]
|
|
|
|
|
|
|
|
|
|
STRUCT FINANCE_LOOKUP_TABLE_ENTRY
|
|
MODEL_NAMES target
|
|
INT value
|
|
ENDSTRUCT
|
|
|
|
CONST_INT MAX_FINANCE_LOOKUP_ENTRIES 32
|
|
INT g_iFinanceLookupLogged = 0
|
|
FINANCE_LOOKUP_TABLE_ENTRY g_FinanaceLookup[MAX_FINANCE_LOOKUP_ENTRIES]
|
|
|
|
|
|
//TODO completion percentages
|
|
|
|
/// PURPOSE: Mission Stat Base data
|
|
STRUCT MissionStatInfo
|
|
ENUM_MISSION_STAT_TYPES type
|
|
INT currentvalue//mirror of the values stored in int stats
|
|
INT success_threshold//for check
|
|
BOOL less_than_threshold
|
|
|
|
STATSENUM statname
|
|
|
|
//percentage calculation values for score contribution
|
|
INT MinRange
|
|
INT MaxRange
|
|
|
|
BOOL bHidden
|
|
|
|
//leaderboard stat data
|
|
|
|
// diff: [REQUIRED] Is this stat used as a differentiator //(do we add on the score from this stat to allow for differentiation between 2 people who both met the objective)? For example if 2 people got > -10 car damage, we can add on the actual damage they took which may place one player above another. (bool)
|
|
BOOL lb_differentiator
|
|
// weighting: [REQUIRED] The amount of points this value is worth. For example each 1% of car damage is worth 1 point, but we don't want each millisecond of action cam use to be worth 1 point as it isn't fairly weighted. Therefore each 1 millisecond of action cam use is worth 0.001 points - this is variable and TBD per mission (float)
|
|
FLOAT lb_weight_PPC
|
|
// min: [REQUIRED] The lowest/worst score the player can legally get, or the cut off point where we don't care anymore if they're lower - may be negated if required (int)
|
|
INT lb_min_legal
|
|
// max: [REQUIRED] The highest/best score the player can legally get, or the cut off point where we don't care anymore if they#re higher - may be negated if required. Cut off point is particularly useful for unbounded values like time, bullets fired, damage etc. We can record scores up to 30 minutes, and if they go above this, we only add 30 mins worth of bonus score to their time etc. (int)
|
|
INT lb_max_legal
|
|
// precedence: [REQUIRED for mission objectives] The order which the objectives take precedence. 1 is worth the most. Objectives can have the same precedence level if there is no way to rank one higher than another. (int)
|
|
INT lb_precedence
|
|
ENDSTRUCT
|
|
MissionStatInfo g_MissionStatTrackingPrototypes[MAX_MISSION_STATS]
|
|
|
|
ENUM MISSION_STAT_SYSTEM_INVALIDATION_REASON
|
|
MSSIR_VALID,
|
|
MSSIR_CHECKPOINT,
|
|
MSSIR_SKIP,
|
|
MSSIR_TAXI_USED,
|
|
MSSIR_CHEAT_ACTIVE,
|
|
MSSIR_NOT_SET
|
|
ENDENUM
|
|
/// PURPOSE: Mission stat tracking data
|
|
STRUCT MissionStatTrackerEntry
|
|
ENUM_MISSION_STATS target
|
|
|
|
//value
|
|
INT ivalue
|
|
FLOAT fvalue//used for some metrics to avoid precision loss before calculation
|
|
|
|
//invalidation bool (skip/replay/etc)
|
|
//BOOL invalidated
|
|
MISSION_STAT_SYSTEM_INVALIDATION_REASON invalidationReason
|
|
|
|
BOOL successshown //this is overridden and doesn't happen if less_than_threshold = true
|
|
|
|
BOOL windowDeltaTracking//used to auto increment
|
|
|
|
//New tracking entity
|
|
ENTITY_INDEX TrackingEntity
|
|
BOOL bTrackingEntityChanged
|
|
INT iTrackingDelta
|
|
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
TEXT_WIDGET_ID target_textWidget
|
|
INT invalidationReason_int
|
|
#ENDIF
|
|
ENDSTRUCT
|
|
|
|
|
|
INT g_iMissionStatsBeingTracked = 0
|
|
|
|
MissionStatTrackerEntry g_MissionStatTrackingArray[MAX_TRACKED_MISSION_STATS]
|
|
|
|
|
|
#IF IS_DEBUG_BUILD
|
|
WIDGET_GROUP_ID g_missionstatwidgetgroup
|
|
|
|
|
|
BOOL g_DEBUG_show_hidden_stats_on_mission_complete = FALSE
|
|
#ENDIF
|
|
|
|
|
|
//per mission leaderboard score entries
|
|
/*
|
|
BOOL g_bMissionScoreLeadboardPrimed = FALSE
|
|
LEADERBOARDS_ENUM g_eTargetMissionScoreLeaderboardBestRun = LEADERBOARD_MINI_GAMES_TENNIS //Using tennis to signify
|
|
LEADERBOARDS_ENUM g_eTargetMissionScoreLeaderboardIndivRec = LEADERBOARD_MINI_GAMES_TENNIS //an invalid value for now
|
|
*/
|
|
|
|
|
|
//leaderboard per mission upload globals
|
|
INT g_LeaderboardLastMissionScore = 0
|
|
INT g_LeaderboardLastMissionScore_Derivs = 0
|
|
//INT g_LeaderboardLastMissionReplays = 0
|
|
//INT g_LeaderboardLastMissionFails = 0
|
|
//INT g_LeaderboardLastMissionPasses = 0
|
|
INT g_LeaderboardLastMissionBestTime = 0
|
|
|
|
INT g_LeaderboardLastObjectivesPassed = 0//1369112
|
|
|
|
BOOL g_LeaderboardLastMissionRCType = FALSE
|
|
INT g_LeaderboardLastMissionID = -1
|
|
|
|
|
|
|
|
BOOL g_bTrackingInnocentsLogged = FALSE
|
|
|
|
//Tracking structs that can be used to automate incrementation of pure count stats
|
|
|
|
|
|
//kills incrementor watch list - removed on dead
|
|
STRUCT STAT_ENTITY_DEADPOOL_ENTRY
|
|
ENTITY_INDEX entar
|
|
ENUM_MISSION_STATS statar
|
|
ENDSTRUCT
|
|
CONST_INT STAT_DEADPOOL_DEPTH 16
|
|
STAT_ENTITY_DEADPOOL_ENTRY g_StatSystemDeadpool[STAT_DEADPOOL_DEPTH]
|
|
INT g_StatSystemDeadpoolEntries = 0
|
|
|
|
|
|
|
|
//kills with weapon auto incrementor - persists
|
|
STRUCT STAT_WEAPON_INCPOOL_ENTRY
|
|
WEAPON_TYPE weptar
|
|
ENUM_MISSION_STATS statar
|
|
ENDSTRUCT
|
|
CONST_INT STAT_WEPPOOL_DEPTH 4
|
|
STAT_WEAPON_INCPOOL_ENTRY g_StatSystemWeaponpool[STAT_WEPPOOL_DEPTH]
|
|
INT g_StatSystemWeponpoolEntries = 0
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|