These are the most complicated ones. They've bunch of functions allowing you to comment nearly every
event of the match or even create your own log. See the source code of two plugins bundled with GameLogger.
JBReport is a classic report plugin.
Overview of functions:
function PickupEvent(pawn Other, Pickup item);
Called when someone picks something. Pawn - the one who taken item, item - the thing that was picked.
function ScoreEvent(PlayerReplicationInfo Who, float Points, string Desc);
Called when someone completes some game goal Who is the scorer's PlayerReplicationInfo; Points - how much
scorer recieved for that action; Desc - unique tag of the action. f.e. "flag_captured" or "enemy_core_destroyed".
function TeamScoreEvent(int team, float points, string desc);
Called when one of team scores. int - index of the team. points - points and desc is unique tag of the action
function NewGame(string ngTitle,
string ngAuthor,
string ngGameGameName,
string siServerName,
string siAdminName,
string siAdminEmail,
string siMOTD);
This is called when the new game starts, right after the level finished loading. Note that this is NOT the match
start. All the properties' names are quite informative, so I won't explain them
function bool ForThisGametype(string GameName)
Called by the EGameStats when it loads report plugins. If plugin is successfully spawned this function is being
called in it to check if this plugin suits for the current gametype. Return true to load plugin and False, to
prevent adding to report plugins list. Check the CTF Summary Plugin to see an example. I know that the this
function can be called without spawning the class, if it is declared as 'static'. I haven't done so because
if the plugins fail to spawn because it requires some packages that are missing, it is better if this happen
on a test load, not when adding to array, as this will leave an empty entry in plugins array, causing an Accessed
None each time EGameStats passes a function call to all report plugins.
function InitializePlugin();
Called right after the plugin is proved to be suitable for the current gametype (function above), and added EGameStats
ReportPluguns array. All the stuff like spawning classes required for your plugin to work (like GameRules or FileLogs)
MUST be performed within InitialzePlugin. Because the plugin is spawned once, so the ForThisGametype function can be
called, to check if the plugin suits for the current gametype. If not plugin is being destroyed. If it suits, than
it's added to plugins array. So, to avoid unnecessary classes being loaded all the class spawning is done here.
function PreStartGame();
allows you to write thing to the log right before "Match Started" message
function StartGame();
Write to the log something right after the "Match Started" string;
function ConnectEvent(PlayerReplicationInfo Who);
Called if a player connected to the server. Who - connected players PRI
function DisconnectEvent(PlayerReplicationInfo Who);
Just the same, but for disconnecting.
function HDamageEvent(pawn ImHit, pawn ByMe, int Damage, class<DamageType> DamageType);
Called when one of the players inflicts to another or to himself damage higher than 74% with non-instant kill
damagetype. Function isn't called at all, if EGameStats.HeavyDamageReportMode is equal to 0.
function KillEvent(string Killtype, PlayerReplicationInfo Killer, PlayerReplicationInfo Victim, class<DamageType> Damage);
Called when victim is killed with damagetype Damage. Remeber that the killer may be none if victim f.e. died
because of being hit on the head with some mover. Also if you f.e. make the manta flying away from your shot
chops another player, game says "Player ran over himself".
function GameEvent(string GEvent, string Desc, PlayerReplicationInfo Who);
Called if someone changes the name or if the flag is being dropped, etc. GEvent - is unique tag of event, while
Desc used to give various indormation, from the new name of the player, to the team player switched to. Who is PRI
of the player involved in the event. In case of flags and bombs it's the one who dropped, taken or returns the flag.
Not that in CTF the desc is index of team who owns the stolen flag. not the team who taken that flag.
function SpecialEvent(PlayerReplicationInfo Who, string Desc);
Called if someone gets some spree or multikill level or if someone activates adrenalin combo. Who is the player
that caused that special event, and desc is it's description.
function BeforeReportEnd(array<PlayerReplicationInfo> PRIs, GameReplicationInfo GRI, string reason);
Called from EGameStats.EndGame before the very end of the main report table, after "Match has ended" message.
function AfterReportEnd(array<PlayerReplicationInfo> PRIs, GameReplicationInfo GRI, string reason);
Called from EGameStats.EndGame after ending the main report table but before starting the scoreboard
function AfterScoreboard(array<:PlayerReplicationInfo> PRIs, GameReplicationInfo GRI, string reason);
Called from EGameStats.EndGame after writing the scoreboard, but before the players' individual stats