202 lines
8.1 KiB
Plaintext
202 lines
8.1 KiB
Plaintext
|
/**
|
||
|
* Copyright 1998-2013 Epic Games, Inc. All Rights Reserved.
|
||
|
*/
|
||
|
|
||
|
// Global gameplay stat defines
|
||
|
|
||
|
`if(`isdefined(INCLUDE_GAME_STATS))
|
||
|
|
||
|
/*************************************
|
||
|
GAME EVENTS
|
||
|
*************************************/
|
||
|
/** Match has started */
|
||
|
const GAMEEVENT_MATCH_STARTED = 0;
|
||
|
/** Match has ended */
|
||
|
const GAMEEVENT_MATCH_ENDED = 1;
|
||
|
/** Round has started */
|
||
|
const GAMEEVENT_ROUND_STARTED = 2;
|
||
|
/** Round has ended */
|
||
|
const GAMEEVENT_ROUND_ENDED = 3;
|
||
|
/** Game type defined */
|
||
|
const GAMEEVENT_GAME_CLASS = 6;
|
||
|
/** Game options defined */
|
||
|
const GAMEEVENT_GAME_OPTION_URL = 7;
|
||
|
/** Map name defined */
|
||
|
const GAMEEVENT_GAME_MAPNAME = 8;
|
||
|
|
||
|
/*************************************
|
||
|
SYSTEM STATS
|
||
|
*************************************/
|
||
|
/** Memory usage */
|
||
|
const GAMEEVENT_MEMORYUSAGE_POLL = 35;
|
||
|
/** Frame rate */
|
||
|
const GAMEEVENT_FRAMERATE_POLL = 36;
|
||
|
/** Network usage in */
|
||
|
const GAMEEVENT_NETWORKUSAGEIN_POLL = 37;
|
||
|
/** Network usage out */
|
||
|
const GAMEEVENT_NETWORKUSAGEOUT_POLL = 38;
|
||
|
/** Ping */
|
||
|
const GAMEEVENT_PING_POLL = 39;
|
||
|
/** Render thread time */
|
||
|
const GAMEEVENT_RENDERTHREAD_POLL = 40;
|
||
|
/** Game thread time */
|
||
|
const GAMEEVENT_GAMETHREAD_POLL = 41;
|
||
|
/** GPU frame time */
|
||
|
const GAMEEVENT_GPUFRAMETIME_POLL = 42;
|
||
|
/** Total frame time */
|
||
|
const GAMEEVENT_FRAMETIME_POLL = 43;
|
||
|
|
||
|
/*************************************
|
||
|
TEAM EVENTS
|
||
|
*************************************/
|
||
|
/** Team created */
|
||
|
const GAMEEVENT_TEAM_CREATED = 50;
|
||
|
/** Team score recorded */
|
||
|
const GAMEEVENT_TEAM_GAME_SCORE = 51;
|
||
|
/** Match has been won */
|
||
|
const GAMEEVENT_TEAM_MATCH_WON = 4;
|
||
|
/** Round has been won */
|
||
|
const GAMEEVENT_TEAM_ROUND_WON = 5;
|
||
|
/** Round stalemate */
|
||
|
const GAMEEVENT_TEAM_ROUND_STALEMATE = 52;
|
||
|
|
||
|
/*************************************
|
||
|
PLAYER EVENTS
|
||
|
*************************************/
|
||
|
/** Player logged in */
|
||
|
const GAMEEVENT_PLAYER_LOGIN = 100;
|
||
|
/** Player logged out */
|
||
|
const GAMEEVENT_PLAYER_LOGOUT = 101;
|
||
|
/** Player has just spawned in */
|
||
|
const GAMEEVENT_PLAYER_SPAWN = 102;
|
||
|
/** Player on winning team */
|
||
|
const GAMEEVENT_PLAYER_MATCH_WON = 103;
|
||
|
/** Player killed another player */
|
||
|
const GAMEEVENT_PLAYER_KILL = 104;
|
||
|
/** Player location poll */
|
||
|
const GAMEEVENT_PLAYER_LOCATION_POLL = 105;
|
||
|
/** Player has changed teams */
|
||
|
const GAMEEVENT_PLAYER_TEAMCHANGE = 106;
|
||
|
/** Kill streak recorded */
|
||
|
const GAMEEVENT_PLAYER_KILL_STREAK = 107;
|
||
|
/** Player died */
|
||
|
const GAMEEVENT_PLAYER_DEATH = 108;
|
||
|
/** Player winning round */
|
||
|
const GAMEEVENT_PLAYER_ROUND_WON = 109;
|
||
|
/** Player stalemate round */
|
||
|
const GAMEEVENT_PLAYER_ROUND_STALEMATE = 110;
|
||
|
|
||
|
/** Weapon damage has occurred */
|
||
|
const GAMEEVENT_WEAPON_DAMAGE = 150;
|
||
|
/** Weapon melee damage has occurred */
|
||
|
const GAMEEVENT_WEAPON_DAMAGE_MELEE = 151;
|
||
|
/** Weapon has been fired */
|
||
|
const GAMEEVENT_WEAPON_FIRED = 152;
|
||
|
|
||
|
/** Kill types (add others to derived class) */
|
||
|
const GAMEEVENT_PLAYER_KILL_NORMAL = 200;
|
||
|
|
||
|
/** generic param list event range (300-400) */
|
||
|
const GAMEEVENT_GENERIC_PARAM_LIST_START = 300;
|
||
|
const GAMEEVENT_GENERIC_PARAM_LIST_END = 400;
|
||
|
|
||
|
/** Game specific starts here */
|
||
|
const GAMEEVENT_GAME_SPECIFIC = 1000;
|
||
|
|
||
|
/** Only 16 bits of events are possible */
|
||
|
const GAMEEVENT_MAX_EVENTID = 0x0000FFFF;
|
||
|
`endif
|
||
|
|
||
|
|
||
|
// these are defines so that we don't have to recompile every time one of these is added
|
||
|
`define GAMEEVENT_AI_PATH_FAILURE 302
|
||
|
`define GAMEEVENT_AI_FIRELINK 305
|
||
|
|
||
|
// mirror the EGameplayEventType enum in GameplayEventsUtilities.h
|
||
|
`define GET_GameString 0
|
||
|
`define GET_GameInt 1
|
||
|
`define GET_TeamInt 2
|
||
|
`define GET_PlayerInt 3
|
||
|
`define GET_PlayerFloat 4
|
||
|
`define GET_PlayerString 5
|
||
|
`define GET_PlayerSpawn 6
|
||
|
`define GET_PlayerLogin 7
|
||
|
`define GET_PlayerLocationPoll 8
|
||
|
`define GET_PlayerKillDeath 9
|
||
|
`define GET_PlayerPlayer 10
|
||
|
`define GET_WeaponInt 11
|
||
|
`define GET_DamageInt 12
|
||
|
`define GET_ProjectileInt 13
|
||
|
`define GET_GenericParamList 14
|
||
|
`define GET_GameFloat 15
|
||
|
`define GET_TeamString 16
|
||
|
`define GET_TeamFloat 17
|
||
|
`define GET_GamePosition 18
|
||
|
`define GET_GameAggregate 19
|
||
|
`define GET_TeamAggregate 20
|
||
|
`define GET_PlayerAggregate 21
|
||
|
`define GET_WeaponAggregate 22
|
||
|
`define GET_DamageAggregate 23
|
||
|
`define GET_ProjectileAggregate 24
|
||
|
`define GET_PawnAggregate 25
|
||
|
`define GET_GameType 1000 // Game Specific Values start after this
|
||
|
|
||
|
|
||
|
// Change this or predefine it to your class type
|
||
|
`if(`notdefined(StatsClass))
|
||
|
`define StatsClass class'GameplayEventsWriterBase'
|
||
|
`endif
|
||
|
|
||
|
`define StatId(Id) `StatsClass.const.GAMEEVENT_`Id
|
||
|
`define TeamStatId(Id) `StatsClass.const.GAMEEVENT_TEAM_`Id
|
||
|
`define PlayerStatId(Id) `StatsClass.const.GAMEEVENT_PLAYER_`Id
|
||
|
`define KillStatType(Type) `StatsClass.const.GAMEEVENT_PLAYER_KILL_`Type
|
||
|
|
||
|
`if(`notdefined(StatsContext))
|
||
|
|
||
|
`if(`isdefined(GAMEINFO))
|
||
|
`define StatsContext GameplayEventsWriter
|
||
|
`define ValidStatsContext GameplayEventsWriter != None && GameplayEventsWriter.IsSessionInProgress()
|
||
|
`else
|
||
|
`define StatsContext WorldInfo.Game.GameplayEventsWriter
|
||
|
`define ValidStatsContext WorldInfo.Game != None && WorldInfo.Game.GameplayEventsWriter != None && WorldInfo.Game.GameplayEventsWriter.IsSessionInProgress()
|
||
|
`endif
|
||
|
|
||
|
`endif
|
||
|
|
||
|
// Macros for recording stats
|
||
|
`define RecordLoginChange(Id,Player,PlayerName,PlayerId,bSplitScreen) if(`ValidStatsContext){`StatsContext.LogPlayerLoginChange(`PlayerStatId(`Id),`Player,`PlayerName,`PlayerId,`bSplitScreen);}
|
||
|
|
||
|
// Game stats
|
||
|
`define RecordGameIntStat(Id,Value) if(`ValidStatsContext){`StatsContext.LogGameIntEvent(`StatId(`Id),`Value);}
|
||
|
`define RecordGameStringStat(Id,Value) if(`ValidStatsContext){`StatsContext.LogGameStringEvent(`StatId(`Id),`Value);}
|
||
|
`define RecordGameFloatStat(Id,Value) if(`ValidStatsContext){`StatsContext.LogGameFloatEvent(`StatId(`Id),`Value);}
|
||
|
`define RecordGamePositionStat(Id,Position,Value) if(`ValidStatsContext){`StatsContext.LogGamePositionEvent(`StatId(`Id),`Position,`Value);}
|
||
|
|
||
|
// Team stats
|
||
|
`define RecordTeamStringStat(Id, TeamInfo, Value) if(`ValidStatsContext){`StatsContext.LogTeamStringEvent(`TeamStatId(`Id),`TeamInfo,`Value);}
|
||
|
`define RecordTeamIntStat(Id, TeamInfo, Value) if(`ValidStatsContext){`StatsContext.LogTeamIntEvent(`TeamStatId(`Id),`TeamInfo,`Value);}
|
||
|
`define RecordTeamFloatStat(Id, TeamInfo, Value) if(`ValidStatsContext){`StatsContext.LogTeamFloatEvent(`TeamStatId(`Id),`TeamInfo,`Value);}
|
||
|
|
||
|
// Player stats
|
||
|
`define RecordPlayerIntStat(Id,Player,Value) if(`ValidStatsContext){`StatsContext.LogPlayerIntEvent(`PlayerStatId(`Id),`Player,`Value);}
|
||
|
`define RecordPlayerIntStatRaw(Id,Player,Value) if(`ValidStatsContext){`StatsContext.LogPlayerIntEvent(`Id,`Player,`Value);}
|
||
|
`define RecordPlayerFloatStat(Id,Player,Value) if(`ValidStatsContext){`StatsContext.LogPlayerFloatEvent(`PlayerStatId(`Id),`Player,`Value);}
|
||
|
`define RecordPlayerSpawn(Player,PawnClass,Team) if(`ValidStatsContext){`StatsContext.LogPlayerSpawnEvent(`PlayerStatId(SPAWN),`Player,`PawnClass,`Team);}
|
||
|
`define RecordPlayerPlayerEvent(Id,Player,Target) if(`ValidStatsContext){`StatsContext.LogPlayerPlayerEvent(`PlayerStatId(`Id),`Player,`Target);}
|
||
|
|
||
|
// Weapon stats
|
||
|
`define RecordKillEvent(KillType,Killer,DamageType,Dead) if(`ValidStatsContext){`StatsContext.LogPlayerKillDeath(`PlayerStatId(KILL),`KillStatType(`KillType),`Killer,`DamageType,`Dead);}
|
||
|
`define RecordDeathEvent(KillType,Killer,DamageType,Dead) if(`ValidStatsContext){`StatsContext.LogPlayerKillDeath(`PlayerStatId(DEATH),`KillStatType(`KillType),`Dead,`DamageType,`Killer);}
|
||
|
|
||
|
`define RecordWeaponIntStat(Id,Player,Weapon,Value) if(`ValidStatsContext){`StatsContext.LogWeaponIntEvent(`StatId(`Id),`Player,`Weapon,`Value);}
|
||
|
|
||
|
`define RecordProjectileIntStat(Id,Player,Proj,Value) if(`ValidStatsContext){`StatsContext.LogProjectileIntEvent(`StatId(`Id),`Player,`Proj,`Value);}
|
||
|
|
||
|
`define RecordDamage(Id,Player,Damage,Target,Amount) if(`ValidStatsContext){`StatsContext.LogDamageEvent(`StatId(`Id),`Player,`Damage,`Target,`Amount);}
|
||
|
|
||
|
`if(`notdefined(FINAL_RELEASE))
|
||
|
`define RecordAIPathFailEvent(Bot,Reason,Dest) if(`ValidStatsContext){`StatsContext.RecordAIPathFail(`Bot,`Reason,`Dest);}
|
||
|
`else
|
||
|
`define RecordAIPathFailEvent(Bot,Reason,Dest)
|
||
|
`endif
|