Report Plugins

     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